Use USB events for storing plugin_menu state

use usb connected callback to cancel menu reentry after USB plug/unplug

Change-Id: I8267deed6e8ada94ca527392f56f50ef22def1d7
This commit is contained in:
William Wilgus 2021-10-31 12:14:50 -04:00
parent 7a6737f471
commit d72a0ed65d
4 changed files with 16 additions and 6 deletions

View File

@ -29,7 +29,6 @@
#include "rbpaths.h" #include "rbpaths.h"
#include "root_menu.h" #include "root_menu.h"
#include "tree.h" #include "tree.h"
static int reenter = 0;
enum { enum {
GAMES, GAMES,
@ -46,6 +45,12 @@ static const struct {
{ PLUGIN_DEMOS_DIR, LANG_PLUGIN_DEMOS }, { PLUGIN_DEMOS_DIR, LANG_PLUGIN_DEMOS },
}; };
/* if handler is active we are waiting to reenter menu */
static void pm_handler(unsigned short id, void *data)
{
remove_event(id, data);
}
static int plugins_menu(void* param) static int plugins_menu(void* param)
{ {
intptr_t item = (intptr_t)param; intptr_t item = (intptr_t)param;
@ -60,7 +65,8 @@ static int plugins_menu(void* param)
if (ret == GO_TO_PREVIOUS) if (ret == GO_TO_PREVIOUS)
return 0; return 0;
if (ret == GO_TO_PLUGIN) if (ret == GO_TO_PLUGIN)
reenter = 1; add_event(SYS_EVENT_USB_INSERTED, pm_handler);
return ret; return ret;
} }
@ -74,8 +80,11 @@ static int menu_callback(int action,
if (action == ACTION_ENTER_MENUITEM) if (action == ACTION_ENTER_MENUITEM)
{ {
this_list->selected_item = selected; this_list->selected_item = selected;
if (reenter-- > 0) if (!add_event(SYS_EVENT_USB_INSERTED, pm_handler))
action = ACTION_STD_OK; {
action = ACTION_STD_OK; /* event exists -- reenter menu */
}
remove_event(SYS_EVENT_USB_INSERTED, pm_handler);
} }
else if (action == ACTION_STD_OK) else if (action == ACTION_STD_OK)
{ {

View File

@ -1196,6 +1196,7 @@ static int ft_play_filename(char *dir, char *file, int attr)
/* These two functions are called by the USB and shutdown handlers */ /* These two functions are called by the USB and shutdown handlers */
void tree_flush(void) void tree_flush(void)
{ {
tc.browse = NULL; /* clear browse to prevent reentry to a possibly missing file */
#ifdef HAVE_TAGCACHE #ifdef HAVE_TAGCACHE
tagcache_shutdown(); tagcache_shutdown();
#endif #endif

View File

@ -478,7 +478,7 @@ static void NORETURN_ATTR usb_thread(void)
usb_stack_enable(true); usb_stack_enable(true);
#ifndef BOOTLOADER #ifndef BOOTLOADER
#ifndef HAVE_USB_POWER #ifndef HAVE_USB_POWER
int usb_mode = 0; int usb_mode = USBMODE_DEFAULT;
#endif #endif
send_event(SYS_EVENT_USB_INSERTED, &usb_mode); send_event(SYS_EVENT_USB_INSERTED, &usb_mode);
#endif #endif

View File

@ -145,7 +145,7 @@ void sim_trigger_screendump(void)
static bool is_usb_inserted; static bool is_usb_inserted;
void sim_trigger_usb(bool inserted) void sim_trigger_usb(bool inserted)
{ {
int usbmode = 0; int usbmode = USBMODE_DEFAULT;
if (inserted) if (inserted)
{ {
send_event(SYS_EVENT_USB_INSERTED, &usbmode); send_event(SYS_EVENT_USB_INSERTED, &usbmode);