From e440038968b227e2c88b3528770937c69f115e5b Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Sun, 21 Nov 2021 16:47:33 +0100 Subject: [PATCH] Added support for any supported internal module in 128x64 UI --- radio/src/gui/128x64/model_setup.cpp | 92 +++++-------------- radio/src/targets/taranis/CMakeLists.txt | 21 +++-- .../src/targets/taranis/extmodule_driver.cpp | 3 + 3 files changed, 39 insertions(+), 77 deletions(-) diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index bf10106d0..774399069 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -214,21 +214,9 @@ enum MenuModelSetupItems { #define SW_WARN_ROWS uint8_t(NAVIGATION_LINE_BY_LINE|(getSwitchWarningsCount()-1)), uint8_t(getSwitchWarningsCount() > MAX_SWITCH_PER_LINE ? TITLE_ROW : HIDDEN_ROW) #endif -#if defined(INTERNAL_MODULE_PXX1) -#define INTERNAL_MODULE_TYPE_ROWS ((isModuleXJT(INTERNAL_MODULE) || isModulePXX2(INTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0) // Module type + RF protocols -#else -#define INTERNAL_MODULE_TYPE_ROWS (0) // Module type + RF protocols -#endif - -#if defined(PCBSKY9X) && defined(REVX) - #define OUTPUT_TYPE_ROW (isModulePPM(EXTERNAL_MODULE) ? (uint8_t)0 : HIDDEN_ROW), // Output type (OpenDrain / PushPull) -#else - #define OUTPUT_TYPE_ROW -#endif - inline uint8_t MODULE_TYPE_ROWS(int moduleIdx) { - if (isModuleXJT(moduleIdx) || isModuleR9MNonAccess(moduleIdx) || isModuleDSM2(moduleIdx)) + if (isModuleXJT(moduleIdx) || isModuleISRM(moduleIdx) || isModuleR9MNonAccess(moduleIdx) || isModuleDSM2(moduleIdx)) return 1; else return 0; @@ -446,8 +434,6 @@ void menuModelSetup(event_t event) EXTERNAL_MODULE_ROWS - OUTPUT_TYPE_ROW - EXTRA_MODULE_ROWS TRAINER_ROWS @@ -885,57 +871,6 @@ void menuModelSetup(event_t event) case ITEM_MODEL_SETUP_INTERNAL_MODULE_LABEL: lcdDrawTextAlignedLeft(y, STR_INTERNALRF); break; - -#if !defined(INTERNAL_MODULE_MULTI) - case ITEM_MODEL_SETUP_INTERNAL_MODULE_TYPE: - { - lcdDrawText(INDENT_WIDTH, y, STR_MODE); -#if defined(INTERNAL_MODULE_PXX1) - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_INTERNAL_MODULE_PROTOCOLS, g_model.moduleData[INTERNAL_MODULE].type, menuHorizontalPosition==0 ? attr : 0); - if (isModuleXJT(INTERNAL_MODULE)) - lcdDrawTextAtIndex(lcdNextPos + 3, y, STR_XJT_ACCST_RF_PROTOCOLS, 1+g_model.moduleData[INTERNAL_MODULE].subType, menuHorizontalPosition==1 ? attr : 0); - else if (isModuleISRM(INTERNAL_MODULE)) - lcdDrawTextAtIndex(lcdNextPos + 3, y, STR_ISRM_RF_PROTOCOLS, g_model.moduleData[INTERNAL_MODULE].subType, menuHorizontalPosition==1 ? attr : 0); - if (attr) { - if (menuHorizontalPosition == 0) { - uint8_t moduleType = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].type, MODULE_TYPE_NONE, MODULE_TYPE_MAX, EE_MODEL, isInternalModuleAvailable); - if (checkIncDec_Ret) { - setModuleType(INTERNAL_MODULE, moduleType); - } - } - else if (isModuleXJT(INTERNAL_MODULE)) { - g_model.moduleData[INTERNAL_MODULE].subType = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].subType, 0, MODULE_SUBTYPE_PXX1_LAST, EE_MODEL, isRfProtocolAvailable); - if (checkIncDec_Ret) { - g_model.moduleData[0].type = MODULE_TYPE_XJT_PXX1; - g_model.moduleData[0].channelsStart = 0; - g_model.moduleData[0].channelsCount = defaultModuleChannels_M8(INTERNAL_MODULE); - } - } - else if (isModulePXX2(INTERNAL_MODULE)) { - g_model.moduleData[INTERNAL_MODULE].subType = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].subType, 0, MODULE_SUBTYPE_ISRM_PXX2_ACCST_D16, EE_MODEL, isRfProtocolAvailable); - } - } -#else - uint8_t index = 0; - if (g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_ISRM_PXX2) { - index = 1 + g_model.moduleData[INTERNAL_MODULE].subType; - } - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_ISRM_RF_PROTOCOLS, index, attr); - if (attr) { - index = checkIncDec(event, index, 0, MODULE_SUBTYPE_ISRM_PXX2_ACCST_D16 + 1 /* because of --- */, EE_MODEL); - if (checkIncDec_Ret) { - memclear(&g_model.moduleData[INTERNAL_MODULE], sizeof(ModuleData)); - if (index > 0) { - g_model.moduleData[INTERNAL_MODULE].type = MODULE_TYPE_ISRM_PXX2; - g_model.moduleData[INTERNAL_MODULE].subType = index - 1; - g_model.moduleData[INTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(INTERNAL_MODULE); - } - } - } -#endif - break; - } -#endif #endif #if defined(PCBSKY9X) @@ -957,13 +892,23 @@ void menuModelSetup(event_t event) case ITEM_MODEL_SETUP_EXTERNAL_MODULE_TYPE: #endif lcdDrawTextAlignedLeft(y, INDENT TR_MODE); - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_EXTERNAL_MODULE_PROTOCOLS, moduleIdx == EXTERNAL_MODULE ? reusableBuffer.moduleSetup.newType : g_model.moduleData[moduleIdx].type, menuHorizontalPosition==0 ? attr : 0); + lcdDrawTextAtIndex( + MODEL_SETUP_2ND_COLUMN, y, + moduleIdx == EXTERNAL_MODULE ? STR_EXTERNAL_MODULE_PROTOCOLS + : STR_INTERNAL_MODULE_PROTOCOLS, + moduleIdx == EXTERNAL_MODULE ? reusableBuffer.moduleSetup.newType + : g_model.moduleData[moduleIdx].type, + menuHorizontalPosition == 0 ? attr : 0); + if (isModuleXJT(moduleIdx)) lcdDrawTextAtIndex(lcdNextPos + 3, y, STR_XJT_ACCST_RF_PROTOCOLS, 1+g_model.moduleData[moduleIdx].subType, menuHorizontalPosition==1 ? attr : 0); + else if (isModuleISRM(moduleIdx)) + lcdDrawTextAtIndex(lcdNextPos + 3, y, STR_ISRM_RF_PROTOCOLS, g_model.moduleData[INTERNAL_MODULE].subType, menuHorizontalPosition==1 ? attr : 0); else if (isModuleDSM2(moduleIdx)) lcdDrawTextAtIndex(lcdNextPos + 3, y, STR_DSM_PROTOCOLS, g_model.moduleData[moduleIdx].rfProtocol, menuHorizontalPosition==1 ? attr : 0); else if (isModuleR9MNonAccess(moduleIdx)) lcdDrawTextAtIndex(lcdNextPos + 3, y, STR_R9M_REGION, g_model.moduleData[moduleIdx].subType, (menuHorizontalPosition==1 ? attr : 0)); + if (attr && menuHorizontalPosition == 0 && moduleIdx == EXTERNAL_MODULE) { if (s_editMode > 0) { g_model.moduleData[moduleIdx].type = MODULE_TYPE_NONE; @@ -996,7 +941,18 @@ void menuModelSetup(event_t event) break; case 1: - if (isModuleDSM2(moduleIdx)) { + if (isModuleXJT(moduleIdx)) { + g_model.moduleData[moduleIdx].subType = checkIncDec(event, g_model.moduleData[moduleIdx].subType, 0, MODULE_SUBTYPE_PXX1_LAST, EE_MODEL, isRfProtocolAvailable); + if (checkIncDec_Ret) { + g_model.moduleData[0].type = MODULE_TYPE_XJT_PXX1; + g_model.moduleData[0].channelsStart = 0; + g_model.moduleData[0].channelsCount = defaultModuleChannels_M8(moduleIdx); + } + } + else if (isModuleISRM(moduleIdx)) { + g_model.moduleData[moduleIdx].subType = checkIncDec(event, g_model.moduleData[moduleIdx].subType, 0, MODULE_SUBTYPE_ISRM_PXX2_ACCST_D16, EE_MODEL, isRfProtocolAvailable); + } + else if (isModuleDSM2(moduleIdx)) { CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX); } else if (isModuleR9MNonAccess(moduleIdx)) { diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index cefcd48c5..4e402e1b6 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -127,6 +127,7 @@ elseif(PCB STREQUAL X7) add_definitions(-DPWR_BUTTON_${PWR_BUTTON}) if(PCBREV STREQUAL T12) set(DEFAULT_INTERNAL_MODULE MULTIMODULE CACHE STRING "Default internal module") + set(INTERNAL_MODULE_SERIAL YES) set(FLAVOUR t12) set(NAVIGATION_TYPE 9x) set(CPU_TYPE STM32F2) @@ -139,6 +140,7 @@ elseif(PCB STREQUAL X7) add_definitions(-DMANUFACTURER_JUMPER) elseif(PCBREV STREQUAL TLITE) set(DEFAULT_INTERNAL_MODULE MULTIMODULE CACHE STRING "Default internal module") + set(INTERNAL_MODULE_SERIAL YES) set(FLAVOUR tlite) set(NAVIGATION_TYPE 9x) set(CPU_TYPE STM32F2) @@ -151,6 +153,7 @@ elseif(PCB STREQUAL X7) add_definitions(-DMANUFACTURER_JUMPER) elseif(PCBREV STREQUAL TX12) set(DEFAULT_INTERNAL_MODULE MULTIMODULE CACHE STRING "Default internal module") + set(INTERNAL_MODULE_SERIAL YES) set(FLAVOUR tx12) set(NAVIGATION_TYPE x7) set(CPU_TYPE STM32F2) @@ -165,8 +168,8 @@ elseif(PCB STREQUAL X7) add_definitions(-DMANUFACTURER_RADIOMASTER) elseif(PCBREV STREQUAL T8) set(DEFAULT_INTERNAL_MODULE MULTIMODULE CACHE STRING "Default internal module") + set(INTERNAL_MODULE_SERIAL YES) set(HARDWARE_EXTERNAL_MODULE NO) - #set(AFHDS3 NO) set(FLAVOUR t8) set(NAVIGATION_TYPE x7) set(CPU_TYPE STM32F2) @@ -183,6 +186,7 @@ elseif(PCB STREQUAL X7) add_definitions(-DMANUFACTURER_RADIOMASTER) elseif(PCBREV STREQUAL ACCESS) set(DEFAULT_INTERNAL_MODULE ISRM_PXX2 CACHE STRING "Default internal module") + set(INTERNAL_MODULE_SERIAL YES) set(FLAVOUR x7access) set(NAVIGATION_TYPE x7) set(CPU_TYPE STM32F4) @@ -203,7 +207,6 @@ elseif(PCB STREQUAL X7) set(PXX_FREQUENCY "HIGH") set(BLUETOOTH YES) set(ROTARY_ENCODER YES) - set(INTERNAL_MODULE_SERIAL YES) add_definitions(-DMANUFACTURER_FRSKY) else() set(DEFAULT_INTERNAL_MODULE XJT_PXX1 CACHE STRING "Default internal module") @@ -230,6 +233,7 @@ elseif(PCB STREQUAL X7) endif() elseif(PCB STREQUAL X9LITE) set(DEFAULT_INTERNAL_MODULE ISRM_PXX2 CACHE STRING "Default internal module") + set(INTERNAL_MODULE_SERIAL YES) set(PXX_FREQUENCY "HIGH") set(PWR_BUTTON "PRESS" CACHE STRING "Pwr button type (PRESS/SWITCH)") set(CPU_TYPE STM32F2) @@ -252,10 +256,10 @@ elseif(PCB STREQUAL X9LITE) set(GVAR_SCREEN model_gvars.cpp) set(STATUS_LEDS YES) set(ROTARY_ENCODER YES) - set(INTERNAL_MODULE_SERIAL YES) add_definitions(-DMANUFACTURER_FRSKY) elseif(PCB STREQUAL X9LITES) set(DEFAULT_INTERNAL_MODULE ISRM_PXX2 CACHE STRING "Default internal module") + set(INTERNAL_MODULE_SERIAL YES) set(PXX_FREQUENCY "HIGH") set(PWR_BUTTON "PRESS" CACHE STRING "Pwr button type (PRESS/SWITCH)") set(CPU_TYPE STM32F2) @@ -279,10 +283,10 @@ elseif(PCB STREQUAL X9LITES) set(STATUS_LEDS YES) set(BLUETOOTH YES) set(ROTARY_ENCODER YES) - set(INTERNAL_MODULE_SERIAL YES) add_definitions(-DMANUFACTURER_FRSKY) elseif(PCB STREQUAL XLITE) set(DEFAULT_INTERNAL_MODULE XJT_PXX1 CACHE STRING "Default internal module") + set(INTERNAL_MODULE_SERIAL YES) set(PXX_FREQUENCY "HIGH" CACHE STRING "PXX frequency (LOW / HIGH)") # always use HIGH except on some prototype boards set(PWR_BUTTON "PRESS" CACHE STRING "Pwr button type (PRESS/SWITCH)") set(CPU_TYPE STM32F2) @@ -304,10 +308,10 @@ elseif(PCB STREQUAL XLITE) set(GVAR_SCREEN model_gvars.cpp) set(STATUS_LEDS YES) set(BLUETOOTH YES) - set(INTERNAL_MODULE_SERIAL YES) add_definitions(-DMANUFACTURER_FRSKY) elseif(PCB STREQUAL XLITES) set(DEFAULT_INTERNAL_MODULE ISRM_PXX2 CACHE STRING "Default internal module") + set(INTERNAL_MODULE_SERIAL YES) set(PXX_FREQUENCY "HIGH") set(PWR_BUTTON "PRESS" CACHE STRING "Pwr button type (PRESS/SWITCH)") set(CPU_TYPE STM32F2) @@ -330,7 +334,6 @@ elseif(PCB STREQUAL XLITES) set(PXX2 ON) set(BLUETOOTH YES) set(GYRO YES) - set(INTERNAL_MODULE_SERIAL YES) add_definitions(-DMANUFACTURER_FRSKY) endif() @@ -359,9 +362,9 @@ if(INTERNAL_MODULE_SERIAL) if(PXX_FREQUENCY STREQUAL HIGH) add_definitions(-DPXX_FREQUENCY_HIGH) endif() - set(FIRMWARE_SRC - ${FIRMWARE_SRC} - targets/common/arm/stm32/intmodule_serial_driver.cpp + set(TARGET_SRC + ${TARGET_SRC} + ../common/arm/stm32/intmodule_serial_driver.cpp ) else() diff --git a/radio/src/targets/taranis/extmodule_driver.cpp b/radio/src/targets/taranis/extmodule_driver.cpp index 07384db0b..7f85ef798 100644 --- a/radio/src/targets/taranis/extmodule_driver.cpp +++ b/radio/src/targets/taranis/extmodule_driver.cpp @@ -276,6 +276,7 @@ void extmoduleSendNextFrame() break; #endif +#if defined(EXTMODULE_USART) #if defined(PXX1) && defined(HARDWARE_EXTERNAL_MODULE_SIZE_SML) case PROTOCOL_CHANNELS_PXX1_SERIAL: extmoduleSendBuffer(extmodulePulsesData.pxx_uart.getData(), extmodulePulsesData.pxx_uart.getSize()); @@ -288,6 +289,8 @@ void extmoduleSendNextFrame() extmoduleSendBuffer(extmodulePulsesData.pxx2.getData(), extmodulePulsesData.pxx2.getSize()); break; #endif +#endif + #if defined(AFHDS3) case PROTOCOL_CHANNELS_AFHDS3: {