diff --git a/radio/src/gui/128x64/radio_version.cpp b/radio/src/gui/128x64/radio_version.cpp index 7334ed96b..387ccb99f 100644 --- a/radio/src/gui/128x64/radio_version.cpp +++ b/radio/src/gui/128x64/radio_version.cpp @@ -32,8 +32,9 @@ void menuRadioVersion(event_t event) #endif #if defined(STM32) + char id[27]; if (event == EVT_ENTRY) { - getCPUUniqueID(reusableBuffer.version.id); + getCPUUniqueID(id); } #endif diff --git a/radio/src/gui/212x64/radio_version.cpp b/radio/src/gui/212x64/radio_version.cpp index c06e52372..7eb6b5ebf 100644 --- a/radio/src/gui/212x64/radio_version.cpp +++ b/radio/src/gui/212x64/radio_version.cpp @@ -22,6 +22,7 @@ void menuRadioVersion(event_t event) { + char id[27]; if (warningResult) { warningResult = 0; showMessageBox(STR_STORAGE_FORMAT); @@ -30,14 +31,14 @@ void menuRadioVersion(event_t event) } if (event == EVT_ENTRY) { - getCPUUniqueID(reusableBuffer.version.id); + getCPUUniqueID(id); } SIMPLE_MENU(STR_MENUVERSION, menuTabGeneral, MENU_RADIO_VERSION, 1); lcdDrawTextAlignedLeft(MENU_HEADER_HEIGHT+1, vers_stamp); lcdDrawTextAlignedLeft(MENU_HEADER_HEIGHT+4*FH+1, "UID\037\033:"); - lcdDrawText(5*FW+3, MENU_HEADER_HEIGHT+4*FH+1, reusableBuffer.version.id); + lcdDrawText(5*FW+3, MENU_HEADER_HEIGHT+4*FH+1, id); lcdDrawTextAlignedLeft(MENU_HEADER_HEIGHT+5*FH+1, STR_EEBACKUP); lcdDrawTextAlignedLeft(MENU_HEADER_HEIGHT+6*FH+1, STR_FACTORYRESET); diff --git a/radio/src/gui/480x272/radio_version.cpp b/radio/src/gui/480x272/radio_version.cpp index 2af42c988..e441a446b 100644 --- a/radio/src/gui/480x272/radio_version.cpp +++ b/radio/src/gui/480x272/radio_version.cpp @@ -22,6 +22,7 @@ bool menuRadioVersion(event_t event) { + char id[27]; #if 0 if (warningResult) { warningResult = 0; @@ -32,7 +33,7 @@ bool menuRadioVersion(event_t event) #endif if (event == EVT_ENTRY) { - getCPUUniqueID(reusableBuffer.version.id); + getCPUUniqueID(id); } SIMPLE_MENU(STR_MENUVERSION, RADIO_ICONS, menuTabGeneral, MENU_RADIO_VERSION, 0); @@ -42,7 +43,7 @@ bool menuRadioVersion(event_t event) lcdDrawText(MENUS_MARGIN_LEFT, MENU_CONTENT_TOP + 3*FH, time_stamp); lcdDrawText(MENUS_MARGIN_LEFT, MENU_CONTENT_TOP + 4*FH, eeprom_stamp); lcdDrawText(MENUS_MARGIN_LEFT, MENU_CONTENT_TOP + 5*FH, "UID:"); - lcdDrawText(MENUS_MARGIN_LEFT + 64, MENU_CONTENT_TOP + 5*FH, reusableBuffer.version.id); + lcdDrawText(MENUS_MARGIN_LEFT + 64, MENU_CONTENT_TOP + 5*FH, id); #if 0 if (event == EVT_KEY_LONG(KEY_ENTER)) { diff --git a/radio/src/main_arm.cpp b/radio/src/main_arm.cpp index 49476aa82..bc59d620e 100644 --- a/radio/src/main_arm.cpp +++ b/radio/src/main_arm.cpp @@ -58,7 +58,7 @@ void handleUsbConnection() #endif POPUP_MENU_START(onUSBConnectMenu); } - if (g_eeGeneral.USBMode != USB_UNSELECTED_MODE) { + if (g_eeGeneral.USBMode != USB_UNSELECTED_MODE && g_eeGeneral.USBMode <= USB_MAX_MODE) { setSelectedUsbMode(g_eeGeneral.USBMode); } } diff --git a/radio/src/mixer.cpp b/radio/src/mixer.cpp index a6d22568d..5c8695517 100644 --- a/radio/src/mixer.cpp +++ b/radio/src/mixer.cpp @@ -1089,7 +1089,6 @@ void evalFlightModeMixes(uint8_t mode, uint8_t tick10ms) mixWarning = lv_mixWarning; } -int32_t sum_chans512[MAX_OUTPUT_CHANNELS] = {0}; #define MAX_ACT 0xffff @@ -1102,6 +1101,7 @@ uint8_t flightModeTransitionLast = 255; void evalMixes(uint8_t tick10ms) { + int32_t sum_chans512[MAX_OUTPUT_CHANNELS] = {0}; #if defined(PCBMEGA2560) && defined(DEBUG) && !defined(VOICE) PORTH |= 0x40; // PORTH:6 LOW->HIGH signals start of mixer interrupt #endif diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 3dd40b2fc..1c3481ef0 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -49,7 +49,12 @@ uint8_t heartbeat; safetych_t safetyCh[MAX_OUTPUT_CHANNELS]; #endif -union ReusableBuffer reusableBuffer; +// __DMA for the MSC_BOT_Data member +union ReusableBuffer reusableBuffer __DMA; + +#if defined(STM32) +uint8_t* MSC_BOT_Data = reusableBuffer.MSC_BOT_Data; +#endif const pm_uint8_t bchout_ar[] PROGMEM = { 0x1B, 0x1E, 0x27, 0x2D, 0x36, 0x39, diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 24d02f8b8..5d983a6a3 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -27,6 +27,9 @@ #include #include "definitions.h" #include "opentx_types.h" +#if defined(STM32) +#include "usbd_conf.h" +#endif #if defined(SIMU) #define SWITCH_SIMU(a, b) (a) @@ -1495,16 +1498,15 @@ union ReusableBuffer } sdmanager; #endif -#if defined(STM32) - struct - { - char id[27]; - } version; -#endif struct { uint8_t stickMode; } generalSettings; + +#if defined(STM32) + // Data for the USB mass storage driver. If USB mass storage runs no menu is not allowed to be displayed + uint8_t MSC_BOT_Data[MSC_MEDIA_PACKET]; +#endif }; extern union ReusableBuffer reusableBuffer; diff --git a/radio/src/serial.cpp b/radio/src/serial.cpp index 1fa789765..dc49c2d10 100644 --- a/radio/src/serial.cpp +++ b/radio/src/serial.cpp @@ -26,7 +26,7 @@ #define PRINTF_BUFFER_SIZE 128 void serialPutc(char c) { -#if !defined(BOOT) +#if !defined(BOOT) && defined(USB_SERIAL) if (getSelectedUsbMode() == USB_SERIAL_MODE) usbSerialPutc(c); #endif diff --git a/radio/src/targets/common/arm/stm32/CMakeLists.txt b/radio/src/targets/common/arm/stm32/CMakeLists.txt index 2db6d0ed4..78917813d 100644 --- a/radio/src/targets/common/arm/stm32/CMakeLists.txt +++ b/radio/src/targets/common/arm/stm32/CMakeLists.txt @@ -38,14 +38,18 @@ set(FIRMWARE_TARGET_SRC ../common/arm/stm32/usb_driver.cpp ../common/arm/stm32/flash_driver.cpp ) -set(FIRMWARE_TARGET_SRC - ${FIRMWARE_TARGET_SRC} - ../common/arm/stm32/usbd_cdc.cpp + +if(DEBUG) + set(STM32USB_SRC + ${STM32USB_SRC} + STM32_USB_Device_Library/Class/cdc/src/usbd_cdc_core.c ) -set(STM32USB_SRC - ${STM32USB_SRC} - STM32_USB_Device_Library/Class/cdc/src/usbd_cdc_core.c + set(FIRMWARE_TARGET_SRC + ${FIRMWARE_TARGET_SRC} + ../common/arm/stm32/usbd_cdc.cpp ) + add_definitions(-DUSB_SERIAL) +endif() set(STM32USB_SRC ${STM32USB_SRC} STM32_USB_Device_Library/Class/msc/src/usbd_msc_data.c diff --git a/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt b/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt index 3e88f4296..48f15d29f 100644 --- a/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt +++ b/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt @@ -109,6 +109,7 @@ endif() remove_definitions(-DDISK_CACHE) remove_definitions(-DLUA) remove_definitions(-DCLI) +remove_definitions(-DUSB_SERIAL) add_definitions(-DBOOT) set(CMAKE_EXE_LINKER_FLAGS "-mcpu=${MCU} -mthumb -nostartfiles -lm -T${RADIO_SRC_DIRECTORY}/targets/${TARGET_DIR}/stm32_ramboot.ld -Wl,-Map=bootloader.map,--cref,--no-warn-mismatch,--gc-sections") diff --git a/radio/src/targets/common/arm/stm32/usb_driver.cpp b/radio/src/targets/common/arm/stm32/usb_driver.cpp index 946da0414..7e31ce5d0 100644 --- a/radio/src/targets/common/arm/stm32/usb_driver.cpp +++ b/radio/src/targets/common/arm/stm32/usb_driver.cpp @@ -91,6 +91,8 @@ void usbStart() // initialize USB as HID device USBD_Init(&USB_OTG_dev, USB_OTG_FS_CORE_ID, &USR_desc, &USBD_HID_cb, &USR_cb); break; +#endif +#if defined(USB_SERIAL) case USB_SERIAL_MODE: // initialize USB as CDC device (virtual serial port) USBD_Init(&USB_OTG_dev, USB_OTG_FS_CORE_ID, &USR_desc, &USBD_CDC_cb, &USR_cb); diff --git a/radio/src/targets/common/arm/stm32/usb_driver.h b/radio/src/targets/common/arm/stm32/usb_driver.h index 2d26fa930..90e1ccd84 100644 --- a/radio/src/targets/common/arm/stm32/usb_driver.h +++ b/radio/src/targets/common/arm/stm32/usb_driver.h @@ -27,7 +27,7 @@ enum usbMode { USB_JOYSTICK_MODE, USB_MASS_STORAGE_MODE, USB_SERIAL_MODE, -#if defined(DEBUG) +#if defined(USB_SERIAL) USB_MAX_MODE=USB_SERIAL_MODE #else USB_MAX_MODE=USB_MASS_STORAGE_MODE diff --git a/radio/src/targets/common/arm/stm32/usbd_conf.h b/radio/src/targets/common/arm/stm32/usbd_conf.h index 7feff433f..594d061f1 100644 --- a/radio/src/targets/common/arm/stm32/usbd_conf.h +++ b/radio/src/targets/common/arm/stm32/usbd_conf.h @@ -23,7 +23,7 @@ #define _USBD_CONF_H_ /* Includes ------------------------------------------------------------------*/ -#include "usb_conf.h" +#include #define USBD_CFG_MAX_NUM 1 #define USBD_ITF_MAX_NUM 1 @@ -37,7 +37,12 @@ #define MSC_OUT_EP 0x01 #define MSC_MAX_PACKET 64 +// Save some RAM on smaller STM32 processors. Slightly lowers USB mass storage speed +#if defined(STM32F2) && !defined(BOOT) +#define MSC_MEDIA_PACKET 512 +#else #define MSC_MEDIA_PACKET 4096 +#endif #define HID_IN_EP 0x81 #define HID_OUT_EP 0x01 diff --git a/radio/src/thirdparty/STM32_USB-Host-Device_Lib_V2.2.0/Libraries/STM32_USB_Device_Library/Class/msc/inc/usbd_msc_bot.h b/radio/src/thirdparty/STM32_USB-Host-Device_Lib_V2.2.0/Libraries/STM32_USB_Device_Library/Class/msc/inc/usbd_msc_bot.h index cf960ad4f..e8e8c99ab 100644 --- a/radio/src/thirdparty/STM32_USB-Host-Device_Lib_V2.2.0/Libraries/STM32_USB_Device_Library/Class/msc/inc/usbd_msc_bot.h +++ b/radio/src/thirdparty/STM32_USB-Host-Device_Lib_V2.2.0/Libraries/STM32_USB_Device_Library/Class/msc/inc/usbd_msc_bot.h @@ -27,6 +27,7 @@ /* Define to prevent recursive inclusion -------------------------------------*/ +#include "usb_conf.h" #include "usbd_core.h" /* Define to prevent recursive inclusion -------------------------------------*/ @@ -111,7 +112,11 @@ MSC_BOT_CSW_TypeDef; * @{ */ +#if defined(BOOT) extern uint8_t MSC_BOT_Data[]; +#else +extern uint8_t* MSC_BOT_Data; +#endif extern uint16_t MSC_BOT_DataLen; extern uint8_t MSC_BOT_State; extern uint8_t MSC_BOT_BurstMode; diff --git a/radio/src/thirdparty/STM32_USB-Host-Device_Lib_V2.2.0/Libraries/STM32_USB_Device_Library/Class/msc/src/usbd_msc_bot.c b/radio/src/thirdparty/STM32_USB-Host-Device_Lib_V2.2.0/Libraries/STM32_USB_Device_Library/Class/msc/src/usbd_msc_bot.c index 5aff1a9c4..e1e9a2536 100644 --- a/radio/src/thirdparty/STM32_USB-Host-Device_Lib_V2.2.0/Libraries/STM32_USB_Device_Library/Class/msc/src/usbd_msc_bot.c +++ b/radio/src/thirdparty/STM32_USB-Host-Device_Lib_V2.2.0/Libraries/STM32_USB_Device_Library/Class/msc/src/usbd_msc_bot.c @@ -80,7 +80,9 @@ uint8_t MSC_BOT_Status; #endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */ #include "definitions.h" -uint8_t MSC_BOT_Data[MSC_MEDIA_PACKET] __DMA; // modified by OpenTX +#if defined(BOOT) +uint8_t MSC_BOT_Data[MSC_MEDIA_PACKET] __DMA; // modified by OpenTX +#endif #ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED #if defined ( __ICCARM__ ) /*!< IAR Compiler */