1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-24 00:35:18 +03:00

Allow USB mode selection on USB connect (#5193)

Allow all USB modes to be compiled in at the same time
This commit is contained in:
Arne Schwabe 2017-09-10 17:28:08 +02:00 committed by Bertrand Songis
parent 2910488a30
commit b7acee5723
45 changed files with 1515 additions and 1239 deletions

View file

@ -24,20 +24,49 @@ uint8_t currentSpeakerVolume = 255;
uint8_t requiredSpeakerVolume = 255;
uint8_t mainRequestFlags = 0;
#if defined(STM32)
void onUSBConnectMenu(const char *result)
{
if (result == STR_USB_MASS_STORAGE) {
setSelectedUsbMode(USB_MASS_STORAGE_MODE);
}
else if (result == STR_USB_JOYSTICK) {
setSelectedUsbMode(USB_JOYSTICK_MODE);
}
else if (result == STR_USB_SERIAL) {
setSelectedUsbMode(USB_SERIAL_MODE);
}
}
#endif
void handleUsbConnection()
{
#if defined(STM32) && !defined(SIMU)
if (!usbStarted() && usbPlugged()) {
if (!usbStarted() && usbPlugged() && !(getSelectedUsbMode() == USB_UNSELECTED_MODE)) {
usbStart();
#if defined(USB_MASS_STORAGE)
opentxClose(false);
usbPluggedIn();
#endif
if (getSelectedUsbMode() == USB_MASS_STORAGE_MODE) {
opentxClose(false);
usbPluggedIn();
}
}
if (!usbStarted() && usbPlugged() && getSelectedUsbMode() == USB_UNSELECTED_MODE) {
if((g_eeGeneral.USBMode == 0) && (popupMenuNoItems == 0)) {
POPUP_MENU_ADD_ITEM(STR_USB_JOYSTICK);
POPUP_MENU_ADD_ITEM(STR_USB_MASS_STORAGE);
POPUP_MENU_ADD_ITEM(STR_USB_SERIAL);
POPUP_MENU_START(onUSBConnectMenu);
}
if (g_eeGeneral.USBMode != USB_UNSELECTED_MODE) {
setSelectedUsbMode(g_eeGeneral.USBMode);
}
}
if (usbStarted() && !usbPlugged()) {
usbStop();
#if defined(USB_MASS_STORAGE) && !defined(EEPROM)
opentxResume();
if (getSelectedUsbMode() == USB_MASS_STORAGE_MODE) {
opentxResume();
}
#if !defined(BOOT)
setSelectedUsbMode(USB_UNSELECTED_MODE);
#endif
}
#endif // defined(STM32) && !defined(SIMU)
@ -402,12 +431,10 @@ void perMain()
return;
}
#endif
#if defined(PCBHORUS)
// TODO if it is OK on HORUS it could be ported to all other boards
// But in this case it's needed to define sdMount for all boards, because sdInit also initializes the SD mutex
static uint32_t sdcard_present_before = SD_CARD_PRESENT();
uint32_t sdcard_present_now = SD_CARD_PRESENT();
#if defined(STM32)
static bool sdcard_present_before = SD_CARD_PRESENT();
bool sdcard_present_now = SD_CARD_PRESENT();
if (sdcard_present_now && !sdcard_present_before) {
sdMount();
}
@ -421,9 +448,9 @@ void perMain()
return;
}
#endif
#if defined(USB_MASS_STORAGE)
if (usbPlugged()) {
if (usbPlugged() && getSelectedUsbMode() == USB_MASS_STORAGE_MODE) {
// disable access to menus
lcdClear();
menuMainView(0);
@ -459,4 +486,3 @@ void perMain()
gpsWakeup();
#endif
}