diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index bffa812c6..600f980c1 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -97,7 +97,9 @@ enum MenuModelSetupItems { ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND, #endif ITEM_MODEL_EXTERNAL_MODULE_POWER, +#if !defined(PCBXLITE) ITEM_MODEL_EXTERNAL_MODULE_FREQ, +#endif #if defined(PCBSKY9X) && !defined(REVA) ITEM_MODEL_EXTRA_MODULE_LABEL, ITEM_MODEL_EXTRA_MODULE_CHANNELS, @@ -161,17 +163,21 @@ enum MenuModelSetupItems { #define OUTPUT_TYPE_ROWS() #endif #define PORT_CHANNELS_ROWS(x) (x==EXTERNAL_MODULE ? EXTERNAL_MODULE_CHANNELS_ROWS : 0) - +#if defined(PCBXLITE) + #define EXTERNAL_MODULE_MODE_ROWS (isModulePXX(EXTERNAL_MODULE) || isModuleDSM2(EXTERNAL_MODULE) || isModuleMultimodule(EXTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0 +#else #define EXTERNAL_MODULE_MODE_ROWS (isModuleXJT(EXTERNAL_MODULE) || isModuleDSM2(EXTERNAL_MODULE) || isModuleMultimodule(EXTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0 - +#endif #define CURSOR_ON_CELL (true) #define MODEL_SETUP_MAX_LINES (HEADER_LINE+ITEM_MODEL_SETUP_MAX) #define POT_WARN_ITEMS() ((g_model.potsWarnMode) ? (uint8_t)(NUM_POTS+NUM_SLIDERS) : (uint8_t)0) #define TIMER_ROWS 2, 0, 0, 0, 0 #if defined(PCBSKY9X) && !defined(REVA) #define EXTRA_MODULE_ROWS LABEL(ExtraModule), 1, 2, +#elif defined(PCBXLITE) + #define EXTRA_MODULE_ROWS #else - #define EXTRA_MODULE_ROWS isR9MMFlex(EXTERNAL_MODULE) ? (uint8_t)1: (uint8_t)HIDDEN_ROW + #define EXTRA_MODULE_ROWS isR9MMFlex(EXTERNAL_MODULE) ? (uint8_t)1: (uint8_t)HIDDEN_ROW, #endif #if defined(PCBX7) @@ -274,7 +280,7 @@ void menuModelSetup(event_t event) EXTERNAL_MODULE_OPTION_ROW, MULTIMODULE_MODULE_ROWS EXTERNAL_MODULE_POWER_ROW, - EXTRA_MODULE_ROWS, + EXTRA_MODULE_ROWS FAILSAFE_ROWS(EXTERNAL_MODULE), TRAINER_ROWS }); #else @@ -728,8 +734,13 @@ void menuModelSetup(event_t event) lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_XJT_PROTOCOLS, 1+g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0); else if (isModuleDSM2(EXTERNAL_MODULE)) lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0); +#if defined(PCBXLITE) + else if (isModuleR9M(EXTERNAL_MODULE)) + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_R9M_REGION, g_model.moduleData[EXTERNAL_MODULE].subType, (menuHorizontalPosition==1 ? attr : 0)); +#else else if (isR9ModuleRunning(EXTERNAL_MODULE)) lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_R9M_REGION, g_model.moduleData[EXTERNAL_MODULE].r9m.region, (menuHorizontalPosition==1 ? attr : 0)); +#endif #if defined(MULTIMODULE) else if (isModuleMultimodule(EXTERNAL_MODULE)) { int multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false); @@ -756,6 +767,17 @@ void menuModelSetup(event_t event) case 1: if (isModuleDSM2(EXTERNAL_MODULE)) CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX); +#if defined(PCBXLITE) + else if (isModuleR9M(EXTERNAL_MODULE)) { + uint8_t newR9MType = checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].subType, MODULE_SUBTYPE_R9M_FCC, MODULE_SUBTYPE_R9M_LAST, EE_MODEL, isR9MModeAvailable); + if (newR9MType != g_model.moduleData[EXTERNAL_MODULE].subType && newR9MType > MODULE_SUBTYPE_R9M_EU) { + POPUP_WARNING(STR_R9MFLEXWARN1); + const char * w = STR_R9MFLEXWARN2; + SET_WARNING_INFO(w, strlen(w), 0); + } + g_model.moduleData[EXTERNAL_MODULE].subType = newR9MType; + } +#endif #if defined(MULTIMODULE) else if (isModuleMultimodule(EXTERNAL_MODULE)) { int multiRfProto = g_model.moduleData[EXTERNAL_MODULE].multi.customProto == 1 ? MM_RF_PROTO_CUSTOM : g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false); @@ -1182,7 +1204,20 @@ void menuModelSetup(event_t event) } } #endif +#if defined(PCBXLITE) + if (isModuleR9M(moduleIdx)) { + lcdDrawTextAlignedLeft(y, STR_MODULE_TELEMETRY); + if (IS_TELEMETRY_INTERNAL_MODULE()) { + lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_DISABLE_INTERNAL); + } + else { + lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_MODULE_TELEM_ON); + } + } + else if (isModuleSBUS(moduleIdx)) { +#else if (isModuleSBUS(moduleIdx)) { +#endif lcdDrawTextAlignedLeft(y, STR_WARN_BATTVOLTAGE); putsVolts(lcdLastRightPos, y, getBatteryVoltage(), attr | PREC2 | LEFT); } @@ -1228,7 +1263,7 @@ void menuModelSetup(event_t event) } break; - +#if !defined(PCBXLITE) case ITEM_MODEL_EXTERNAL_MODULE_FREQ: { uint8_t moduleIdx = CURRENT_MODULE_EDITED(k); @@ -1240,6 +1275,7 @@ void menuModelSetup(event_t event) } } break; +#endif #if defined(MULTIMODULE) case ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND: diff --git a/radio/src/gui/gui_common.h b/radio/src/gui/gui_common.h index 91711344e..1b06616ce 100644 --- a/radio/src/gui/gui_common.h +++ b/radio/src/gui/gui_common.h @@ -157,10 +157,16 @@ const mm_protocol_definition *getMultiProtocolDefinition (uint8_t protocol); #define FAILSAFE_ROWS(x) ((isModuleXJT(x) && HAS_RF_PROTOCOL_FAILSAFE(g_model.moduleData[x].rfProtocol)) || MULTIMODULE_HASFAILSAFE(x) || isModuleR9M(x)) ? (g_model.moduleData[x].failsafeMode==FAILSAFE_CUSTOM ? (uint8_t)1 : (uint8_t)0) : HIDDEN_ROW +#if defined(PCBXLITE) +#define EXTERNAL_MODULE_OPTION_ROW (isModuleR9M(EXTERNAL_MODULE) || isModuleSBUS(EXTERNAL_MODULE) ? TITLE_ROW : MULTIMODULE_OPTIONS_ROW) +#else #define EXTERNAL_MODULE_OPTION_ROW (isR9ModuleRunning(EXTERNAL_MODULE) ? HIDDEN_ROW : isModuleSBUS(EXTERNAL_MODULE) ? TITLE_ROW : MULTIMODULE_OPTIONS_ROW) +#endif #if defined(PCBXLITE) && !defined(MODULE_R9M_FULLSIZE) #define EXTERNAL_MODULE_POWER_ROW (isModuleMultimodule(EXTERNAL_MODULE) || isModuleR9M(EXTERNAL_MODULE)) ? (isModuleR9M_FCC_VARIANT(EXTERNAL_MODULE) ? TITLE_ROW : (uint8_t) 0) : HIDDEN_ROW +#elif defined(PCBXLITE) +#define EXTERNAL_MODULE_POWER_ROW (isModuleMultimodule(EXTERNAL_MODULE) || isModuleR9M(EXTERNAL_MODULE)) ? (uint8_t) 0 : HIDDEN_ROW #else #define EXTERNAL_MODULE_POWER_ROW (isModuleMultimodule(EXTERNAL_MODULE) || isR9ModuleRunning(EXTERNAL_MODULE)) ? (uint8_t) 0 : HIDDEN_ROW #endif diff --git a/radio/src/gui/gui_common_arm.cpp b/radio/src/gui/gui_common_arm.cpp index 771f6fb0a..38ae22b4a 100644 --- a/radio/src/gui/gui_common_arm.cpp +++ b/radio/src/gui/gui_common_arm.cpp @@ -494,12 +494,22 @@ bool isR9ModuleRunning(int module) return g_model.moduleData[module].type == MODULE_TYPE_R9M && R9ModuleStreaming; #endif } +#if defined(PCBXLITE) +bool isR9MModeAvailable(int mode) +{ +#if defined(MODULE_R9M_FLEX_FW) + return mode >= MODULE_SUBTYPE_R9M_EUPLUS; +#else + return mode <= MODULE_SUBTYPE_R9M_EU; +#endif +} +#else bool isR9MModeAvailable(int mode) { return mode <= MODULE_SUBTYPE_R9M_EUPLUS; } - +#endif bool isR9MMFlex(int module) { return g_model.moduleData[module].r9m.region == MODULE_R9M_REGION_FLEX; diff --git a/radio/src/pulses/modules.h b/radio/src/pulses/modules.h index 8a8dd2bec..0af8a58ef 100644 --- a/radio/src/pulses/modules.h +++ b/radio/src/pulses/modules.h @@ -99,6 +99,37 @@ inline bool isModulePPM(uint8_t idx) } #endif +#if defined(PCBXLITE) +inline bool isModuleR9M(uint8_t idx) +{ + return g_model.moduleData[idx].type == MODULE_TYPE_R9M; +} + +inline bool isModuleR9M_FCC(uint8_t idx) +{ + return isModuleR9M(idx) && g_model.moduleData[idx].subType == MODULE_SUBTYPE_R9M_FCC; +} + +inline bool isModuleR9M_LBT(uint8_t idx) +{ + return isModuleR9M(idx) && g_model.moduleData[idx].subType == MODULE_SUBTYPE_R9M_EU; +} + +inline bool isModuleR9M_FCC_VARIANT(uint8_t idx) +{ + return isModuleR9M(idx) && g_model.moduleData[idx].subType != MODULE_SUBTYPE_R9M_EU; +} + +inline bool isModuleR9M_EUPLUS(uint8_t idx) +{ + return isModuleR9M(idx) && g_model.moduleData[idx].subType != MODULE_SUBTYPE_R9M_EUPLUS; +} + +inline bool isModuleR9M_AU_PLUS(uint8_t idx) +{ + return isModuleR9M(idx) && g_model.moduleData[idx].subType != MODULE_SUBTYPE_R9M_AUPLUS; +} +#else inline bool isModuleR9M(uint8_t idx) { return g_model.moduleData[idx].type == MODULE_TYPE_R9M; @@ -128,7 +159,7 @@ inline bool isModuleR9M_AU_PLUS(uint8_t idx) { return isModuleR9M(idx) && g_model.moduleData[idx].r9m.region == MODULE_R9M_REGION_FLEX && g_model.moduleData[idx].r9m.freq == MODULE_R9M_FREQ_915MHZ; } - +#endif inline bool isModulePXX(uint8_t idx) {