Allow disabling USB connection by discarding the pop-up menu

This commit is contained in:
Raphael Coeffic
2021-05-24 16:23:06 +02:00
committed by Raphael Coeffic
parent 4fe4c1a385
commit 0bb9994ac5
3 changed files with 68 additions and 18 deletions
+59 -14
View File
@@ -30,30 +30,49 @@ uint8_t currentBacklightBright = 0;
uint8_t requiredBacklightBright = 0;
uint8_t mainRequestFlags = 0;
static bool _usbDisabled = false;
#if defined(LIBOPENUI)
static Menu* _usbMenu = nullptr;
void closeUsbMenu()
{
if (_usbMenu && !usbPlugged()) {
// USB has been unplugged meanwhile
_usbMenu->deleteLater();
}
}
void openUsbMenu()
{
static Menu * menu = nullptr;
if (menu)
return;
menu = new Menu(MainWindow::instance());
menu->setCloseHandler([]() {
menu = nullptr;
if (_usbMenu || _usbDisabled) return;
_usbMenu = new Menu(MainWindow::instance());
_usbMenu->setCloseHandler([]() {
_usbMenu = nullptr;
if (usbPlugged() && (getSelectedUsbMode() == USB_UNSELECTED_MODE)) {
_usbDisabled = true;
}
});
menu->setTitle("USB");
menu->addLine(STR_USB_JOYSTICK, [] {
_usbMenu->setTitle("USB");
_usbMenu->addLine(STR_USB_JOYSTICK, [] {
setSelectedUsbMode(USB_JOYSTICK_MODE);
});
menu->addLine(STR_USB_MASS_STORAGE, [] {
_usbMenu->addLine(STR_USB_MASS_STORAGE, [] {
setSelectedUsbMode(USB_MASS_STORAGE_MODE);
});
#if defined(DEBUG)
menu->addLine(STR_USB_SERIAL, [] {
_usbMenu->addLine(STR_USB_SERIAL, [] {
setSelectedUsbMode(USB_SERIAL_MODE);
});
#endif
}
#elif defined(STM32)
void onUSBConnectMenu(const char *result)
{
if (result == STR_USB_MASS_STORAGE) {
@@ -65,6 +84,9 @@ void onUSBConnectMenu(const char *result)
else if (result == STR_USB_SERIAL) {
setSelectedUsbMode(USB_SERIAL_MODE);
}
else if (result == STR_EXIT) {
_disableUsb = true;
}
}
void openUsbMenu()
@@ -77,12 +99,32 @@ void openUsbMenu()
POPUP_MENU_TITLE(STR_SELECT_MODE);
POPUP_MENU_START(onUSBConnectMenu);
}
void closeUsbMenu()
{
}
#endif
void handleUsbConnection()
{
#if defined(STM32) && !defined(SIMU)
if (!usbStarted() && usbPlugged()) {
static bool _pluggedUsb = false;
if (_pluggedUsb && !usbPlugged()) {
TRACE("USB unplugged");
closeUsbMenu();
_pluggedUsb = false;
}
else if (!_pluggedUsb && usbPlugged()) {
TRACE("USB plugged");
_pluggedUsb = true;
_usbDisabled = false;
}
if (!_usbDisabled && !usbStarted() && usbPlugged()) {
if (getSelectedUsbMode() == USB_UNSELECTED_MODE) {
if (g_eeGeneral.USBMode == USB_UNSELECTED_MODE) {
openUsbMenu();
@@ -423,7 +465,7 @@ void perMain()
checkSpeakerVolume();
if (!usbPlugged()) {
if (!usbPlugged() || (getSelectedUsbMode() == USB_UNSELECTED_MODE)) {
checkEeprom();
logsWrite();
}
@@ -458,14 +500,17 @@ void perMain()
#endif
#if defined(STM32)
if (!usbPlugged() && SD_CARD_PRESENT() && !sdMounted()) {
if ((!usbPlugged() || (getSelectedUsbMode() == USB_UNSELECTED_MODE))
&& SD_CARD_PRESENT() && !sdMounted()) {
sdMount();
}
#endif
#if !defined(EEPROM)
// In case the SD card is removed during the session
if (!usbPlugged() && !SD_CARD_PRESENT() && !globalData.unexpectedShutdown) {
if ((!usbPlugged() || (getSelectedUsbMode() == USB_UNSELECTED_MODE))
&& !SD_CARD_PRESENT() && !globalData.unexpectedShutdown) {
drawFatalErrorScreen(STR_NO_SDCARD);
return;
}