diff --git a/radio/src/gui/colorlcd/model_setup.cpp b/radio/src/gui/colorlcd/model_setup.cpp index 3eb1b2286..f045fabfc 100644 --- a/radio/src/gui/colorlcd/model_setup.cpp +++ b/radio/src/gui/colorlcd/model_setup.cpp @@ -687,58 +687,69 @@ class ModuleWindow : public FormGroup { const uint8_t multi_proto = g_model.moduleData[moduleIdx].getMultiProtocol(); if (MULTIMODULE_PROTOCOL_KNOWN(moduleIdx)) { // Multi optional feature row - const char *title = getMultiOptionTitle(moduleIdx); - grid.nextLine(); - new StaticText(this, grid.getLabelSlot(true), title); + const char *title = getMultiOptionTitleStatic(moduleIdx); + if (title != nullptr) { + grid.nextLine(); + new StaticText(this, grid.getLabelSlot(true), title); - //int optionValue = g_model.moduleData[moduleIdx].multi.optionValue; - int8_t min, max; - getMultiOptionValues(multi_proto, min, max); + // int optionValue = + // g_model.moduleData[moduleIdx].multi.optionValue; + int8_t min, max; + getMultiOptionValues(multi_proto, min, max); - - if (title == STR_MULTI_RFPOWER) { - new Choice(this, grid.getFieldSlot(2, 0), STR_MULTI_POWER, 0, 15, - GET_SET_DEFAULT(g_model.moduleData[moduleIdx].multi.optionValue)); - } else if (title == STR_MULTI_TELEMETRY) { - new Choice(this, grid.getFieldSlot(2, 0), STR_MULTI_TELEMETRY_MODE, min, max, - GET_SET_DEFAULT(g_model.moduleData[moduleIdx].multi.optionValue)); - } else if (title == STR_MULTI_WBUS) { - new Choice(this, grid.getFieldSlot(2, 0), STR_MULTI_WBUS_MODE, 0, 1, - GET_SET_DEFAULT(g_model.moduleData[moduleIdx].multi.optionValue)); - } else if (multi_proto == MODULE_SUBTYPE_MULTI_FS_AFHDS2A) { - auto edit = new NumberEdit( - this, grid.getFieldSlot(2, 0), 50, 400, - GET_DEFAULT( - 50 + 5 * g_model.moduleData[moduleIdx].multi.optionValue), - SET_VALUE(g_model.moduleData[moduleIdx].multi.optionValue, - (newValue - 50) / 5)); - edit->setStep(5); - } else if (multi_proto == MODULE_SUBTYPE_MULTI_DSM2) { - new CheckBox( - this, grid.getFieldSlot(2, 0), - [=]() { - return g_model.moduleData[moduleIdx].multi.optionValue & 0x01; - }, - [=](int16_t newValue) { - g_model.moduleData[moduleIdx].multi.optionValue = - (g_model.moduleData[moduleIdx].multi.optionValue & 0xFE) + - newValue; - }); - } else { - if (min == 0 && max == 1) { - new CheckBox(this, grid.getFieldSlot(2, 0), - GET_SET_DEFAULT(g_model.moduleData[moduleIdx].multi.optionValue)); + if (title == STR_MULTI_RFPOWER) { + new Choice(this, grid.getFieldSlot(2, 0), STR_MULTI_POWER, 0, 15, + GET_SET_DEFAULT( + g_model.moduleData[moduleIdx].multi.optionValue)); + } else if (title == STR_MULTI_TELEMETRY) { + new Choice(this, grid.getFieldSlot(2, 0), + STR_MULTI_TELEMETRY_MODE, min, max, + GET_SET_DEFAULT( + g_model.moduleData[moduleIdx].multi.optionValue)); + } else if (title == STR_MULTI_WBUS) { + new Choice(this, grid.getFieldSlot(2, 0), STR_MULTI_WBUS_MODE, 0, + 1, + GET_SET_DEFAULT( + g_model.moduleData[moduleIdx].multi.optionValue)); + } else if (multi_proto == MODULE_SUBTYPE_MULTI_FS_AFHDS2A) { + auto edit = new NumberEdit( + this, grid.getFieldSlot(2, 0), 50, 400, + GET_DEFAULT( + 50 + 5 * g_model.moduleData[moduleIdx].multi.optionValue), + SET_VALUE(g_model.moduleData[moduleIdx].multi.optionValue, + (newValue - 50) / 5)); + edit->setStep(5); + } else if (multi_proto == MODULE_SUBTYPE_MULTI_DSM2) { + new CheckBox( + this, grid.getFieldSlot(2, 0), + [=]() { + return g_model.moduleData[moduleIdx].multi.optionValue & + 0x01; + }, + [=](int16_t newValue) { + g_model.moduleData[moduleIdx].multi.optionValue = + (g_model.moduleData[moduleIdx].multi.optionValue & + 0xFE) + + newValue; + }); } else { - new NumberEdit( - this, grid.getFieldSlot(2, 0), -128, 127, - GET_SET_DEFAULT( - g_model.moduleData[moduleIdx].multi.optionValue)); + if (min == 0 && max == 1) { + new CheckBox( + this, grid.getFieldSlot(2, 0), + GET_SET_DEFAULT( + g_model.moduleData[moduleIdx].multi.optionValue)); + } else { + new NumberEdit( + this, grid.getFieldSlot(2, 0), -128, 127, + GET_SET_DEFAULT( + g_model.moduleData[moduleIdx].multi.optionValue)); - // Show RSSI next to RF Freq Fine Tune - if (getMultiOptionTitle(moduleIdx) == STR_MULTI_RFTUNE) { - new DynamicNumber( - this, grid.getFieldSlot(2, 1), - [] { return (int)TELEMETRY_RSSI(); }, 0, "RSSI: ", " db"); + // Show RSSI next to RF Freq Fine Tune + if (title == STR_MULTI_RFTUNE) { + new DynamicNumber( + this, grid.getFieldSlot(2, 1), + [] { return (int)TELEMETRY_RSSI(); }, 0, "RSSI: ", " db"); + } } } } @@ -782,7 +793,7 @@ class ModuleWindow : public FormGroup { GET_SET_DEFAULT( g_model.moduleData[moduleIdx].multi.disableTelemetry)); - if (MULTI_DISABLE_CHAN_MAP_ROW(moduleIdx) != HIDDEN_ROW) { + if (MULTI_DISABLE_CHAN_MAP_ROW_STATIC(moduleIdx) != HIDDEN_ROW) { // Disable channel mapping grid.nextLine(); new StaticText(this, grid.getLabelSlot(true), STR_DISABLE_CH_MAP); diff --git a/radio/src/gui/gui_common.cpp b/radio/src/gui/gui_common.cpp index f703aa5e3..058c20765 100644 --- a/radio/src/gui/gui_common.cpp +++ b/radio/src/gui/gui_common.cpp @@ -1100,6 +1100,13 @@ const mm_protocol_definition *getMultiProtocolDefinition (uint8_t protocol) #endif #if defined(MULTIMODULE) +const char * getMultiOptionTitleStatic(uint8_t moduleIdx) +{ + const uint8_t multi_proto = g_model.moduleData[moduleIdx].getMultiProtocol(); + const mm_protocol_definition * pdef = getMultiProtocolDefinition(multi_proto); + return pdef->optionsstr; +} + const char * getMultiOptionTitle(uint8_t moduleIdx) { MultiModuleStatus &status = getMultiModuleStatus(moduleIdx); @@ -1110,10 +1117,7 @@ const char * getMultiOptionTitle(uint8_t moduleIdx) } return mm_options_strings::options[status.optionDisp]; } - else { - const uint8_t multi_proto = g_model.moduleData[moduleIdx].getMultiProtocol(); - const mm_protocol_definition * pdef = getMultiProtocolDefinition(multi_proto); - return pdef->optionsstr; - } + + return getMultiOptionTitleStatic(moduleIdx); } #endif diff --git a/radio/src/gui/gui_common.h b/radio/src/gui/gui_common.h index 46efa21d0..e59b5df57 100644 --- a/radio/src/gui/gui_common.h +++ b/radio/src/gui/gui_common.h @@ -220,6 +220,21 @@ inline uint8_t IF_ALLOW_RACING_MODE(int) #endif #if defined(MULTIMODULE) +inline uint8_t MULTI_DISABLE_CHAN_MAP_ROW_STATIC(uint8_t moduleIdx) +{ + if (!isModuleMultimodule(moduleIdx)) + return HIDDEN_ROW; + + uint8_t protocol = g_model.moduleData[moduleIdx].getMultiProtocol(); + if (protocol < MODULE_SUBTYPE_MULTI_LAST) { + const mm_protocol_definition * pdef = getMultiProtocolDefinition(protocol); + if (pdef->disable_ch_mapping) + return 0; + } + + return HIDDEN_ROW; +} + inline uint8_t MULTI_DISABLE_CHAN_MAP_ROW(uint8_t moduleIdx) { if (!isModuleMultimodule(moduleIdx)) @@ -230,14 +245,7 @@ inline uint8_t MULTI_DISABLE_CHAN_MAP_ROW(uint8_t moduleIdx) return status.supportsDisableMapping() == true ? 0 : HIDDEN_ROW; } - uint8_t protocol = g_model.moduleData[moduleIdx].getMultiProtocol(); - if (protocol < MODULE_SUBTYPE_MULTI_LAST) { - const mm_protocol_definition * pdef = getMultiProtocolDefinition(protocol); - if (pdef->disable_ch_mapping) - return 0; - } - - return HIDDEN_ROW; + return MULTI_DISABLE_CHAN_MAP_ROW_STATIC(moduleIdx); } inline bool isMultiProtocolSelectable(int protocol) @@ -355,6 +363,7 @@ inline uint8_t MODULE_OPTION_ROW(uint8_t moduleIdx) { void editStickHardwareSettings(coord_t x, coord_t y, int idx, event_t event, LcdFlags flags, uint8_t old_editMode); +const char * getMultiOptionTitleStatic(uint8_t moduleIdx); const char *getMultiOptionTitle(uint8_t moduleIdx); const char * writeScreenshot();