diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index ea4fe0516..048a5eeb2 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -97,7 +97,6 @@ enum MenuModelSetupItems { #endif ITEM_MODEL_EXTERNAL_MODULE_FAILSAFE, ITEM_MODEL_EXTERNAL_MODULE_OPTIONS, - ITEM_MODEL_EXTERNAL_MODULE_BIND_OPTIONS, #if defined(MULTIMODULE) ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND, #endif @@ -220,27 +219,7 @@ void onBindMenu(const char * result) { uint8_t moduleIdx = CURRENT_MODULE_EDITED(menuVerticalPosition); - if (result == STR_BINDING_25MW_CH1_8_TELEM_OFF) { - g_model.moduleData[moduleIdx].pxx.power = R9M_LBT_POWER_25; - g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true; - g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false; - } - else if (result == STR_BINDING_25MW_CH1_8_TELEM_ON) { - g_model.moduleData[moduleIdx].pxx.power = R9M_LBT_POWER_25; - g_model.moduleData[moduleIdx].pxx.receiver_telem_off = false; - g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false; - } - else if (result == STR_BINDING_500MW_CH1_8_TELEM_OFF) { - g_model.moduleData[moduleIdx].pxx.power = R9M_LBT_POWER_500; - g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true; - g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false; - } - else if (result == STR_BINDING_500MW_CH9_16_TELEM_OFF) { - g_model.moduleData[moduleIdx].pxx.power = R9M_LBT_POWER_500; - g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true; - g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = true; - } - else if (result == STR_BINDING_1_8_TELEM_ON) { + if (result == STR_BINDING_1_8_TELEM_ON) { g_model.moduleData[moduleIdx].pxx.receiver_telem_off = false; g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false; } @@ -275,6 +254,10 @@ void menuModelSetup(event_t event) } #endif +#if defined(CPUARM) + static uint8_t selectedPxxPower = g_model.moduleData[EXTERNAL_MODULE].pxx.power; //TODO could go to the reusable struct +#endif + #if defined(PCBXLITE) MENU_TAB({ HEADER_LINE_COLUMNS 0, TIMER_ROWS, TIMER_ROWS, TIMER_ROWS, 0, 1, 0, 0, 0, 0, 0, CASE_CPUARM(LABEL(PreflightCheck)) CASE_CPUARM(0) 0, SW_WARN_ROWS, POT_WARN_ITEMS(), NUM_STICKS + NUM_POTS + NUM_SLIDERS + NUM_ROTARY_ENCODERS - 1, 0, LABEL(InternalModule), @@ -292,7 +275,6 @@ void menuModelSetup(event_t event) OUTPUT_TYPE_ROWS() FAILSAFE_ROWS(EXTERNAL_MODULE), EXTERNAL_MODULE_OPTION_ROW, - (IS_MODULE_R9M_LBT(EXTERNAL_MODULE) ? (uint8_t)0 : HIDDEN_ROW), MULTIMODULE_MODULE_ROWS EXTERNAL_MODULE_POWER_ROW, EXTRA_MODULE_ROWS @@ -313,7 +295,6 @@ void menuModelSetup(event_t event) OUTPUT_TYPE_ROWS() FAILSAFE_ROWS(EXTERNAL_MODULE), EXTERNAL_MODULE_OPTION_ROW, - (IS_MODULE_R9M_LBT(EXTERNAL_MODULE) ? (uint8_t)0 : HIDDEN_ROW), MULTIMODULE_MODULE_ROWS EXTERNAL_MODULE_POWER_ROW, EXTRA_MODULE_ROWS @@ -329,7 +310,6 @@ void menuModelSetup(event_t event) OUTPUT_TYPE_ROWS() FAILSAFE_ROWS(EXTERNAL_MODULE), EXTERNAL_MODULE_OPTION_ROW, - (IS_MODULE_R9M_LBT(EXTERNAL_MODULE) ? (uint8_t)0 : HIDDEN_ROW), MULTIMODULE_MODULE_ROWS EXTERNAL_MODULE_POWER_ROW, EXTRA_MODULE_ROWS @@ -858,7 +838,7 @@ void menuModelSetup(event_t event) else if (IS_MODULE_DSM2(EXTERNAL_MODULE)) lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0); else if (IS_MODULE_R9M(EXTERNAL_MODULE)) - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_R9M_MODES, g_model.moduleData[EXTERNAL_MODULE].subType, (menuHorizontalPosition==1 ? attr : 0)); + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_R9M_REGION, g_model.moduleData[EXTERNAL_MODULE].subType, (menuHorizontalPosition==1 ? attr : 0)); #if defined(MULTIMODULE) else if (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) { int multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false); @@ -1148,20 +1128,21 @@ void menuModelSetup(event_t event) if (IS_MODULE_R9M(moduleIdx) || (IS_MODULE_XJT(moduleIdx) && g_model.moduleData[moduleIdx].rfProtocol== RF_PROTO_X16)) { if (EVT_KEY_MASK(event) == KEY_ENTER) { killEvents(event); - uint8_t default_selection; + uint8_t default_selection = 0; // R9M_LBT should default to 0 as available options are variables if (IS_MODULE_R9M_LBT(moduleIdx)) { - POPUP_MENU_ADD_ITEM(STR_BINDING_25MW_CH1_8_TELEM_OFF); - if (!IS_TELEMETRY_INTERNAL_MODULE()) - POPUP_MENU_ADD_ITEM(STR_BINDING_25MW_CH1_8_TELEM_ON); - POPUP_MENU_ADD_ITEM(STR_BINDING_500MW_CH1_8_TELEM_OFF); - POPUP_MENU_ADD_ITEM(STR_BINDING_500MW_CH9_16_TELEM_OFF); - default_selection = 2; - } - else { - if (!(IS_TELEMETRY_INTERNAL_MODULE() && moduleIdx == EXTERNAL_MODULE)) + if (BIND_TELEM_ALLOWED(moduleIdx)) POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_ON); POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_OFF); - if (!(IS_TELEMETRY_INTERNAL_MODULE() && moduleIdx == EXTERNAL_MODULE)) + if (BIND_TELEM_ALLOWED(moduleIdx) && BIND_CH9TO16_ALLOWED(moduleIdx)) + POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_ON); + if (BIND_CH9TO16_ALLOWED(moduleIdx)) + POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_OFF); + } + else { + if (BIND_TELEM_ALLOWED(moduleIdx)) + POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_ON); + POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_OFF); + if (BIND_TELEM_ALLOWED(moduleIdx)) POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_ON); POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_OFF); default_selection = g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off + (g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 << 1); @@ -1321,36 +1302,27 @@ void menuModelSetup(event_t event) break; } - case ITEM_MODEL_EXTERNAL_MODULE_BIND_OPTIONS: - { - uint8_t moduleIdx = CURRENT_MODULE_EDITED(k); - - lcdDrawTextAlignedLeft(y, INDENT "Mode:"); - if (g_model.moduleData[moduleIdx].pxx.power == R9M_LBT_POWER_25) { - if(g_model.moduleData[moduleIdx].pxx.receiver_telem_off == true) - lcdDrawText(lcdLastRightPos+1, y, STR_BINDING_25MW_CH1_8_TELEM_OFF); - else - lcdDrawText(lcdLastRightPos+1, y, STR_BINDING_25MW_CH1_8_TELEM_ON); - } - else { - if(g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 == true) - lcdDrawText(lcdLastRightPos+1, y, STR_BINDING_500MW_CH9_16_TELEM_OFF); - else - lcdDrawText(lcdLastRightPos+1, y, STR_BINDING_500MW_CH1_8_TELEM_OFF); - } - if (attr) REPEAT_LAST_CURSOR_MOVE(); - } - - case ITEM_MODEL_EXTERNAL_MODULE_POWER: { uint8_t moduleIdx = CURRENT_MODULE_EDITED(k); - if (IS_MODULE_R9M_FCC(moduleIdx)) { - // Power selection is only available on R9M FCC + if (IS_MODULE_R9M(moduleIdx)) { lcdDrawTextAlignedLeft(y, TR_MULTI_RFPOWER); - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_FCC_POWER_VALUES, g_model.moduleData[moduleIdx].pxx.power, LEFT | attr); - if (attr) - CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].pxx.power, 0, R9M_FCC_POWER_MAX); + if(IS_MODULE_R9M_FCC(moduleIdx)) { + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_FCC_POWER_VALUES, g_model.moduleData[moduleIdx].pxx.power, LEFT | attr); + if (attr) + CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].pxx.power, 0, R9M_FCC_POWER_MAX); + } + else { + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_LBT_POWER_VALUES, selectedPxxPower, LEFT | attr); + if (attr) { + CHECK_INCDEC_MODELVAR(event, selectedPxxPower, 0, R9M_LBT_POWER_MAX); + } + if (attr && editMode == 0 && selectedPxxPower != g_model.moduleData[moduleIdx].pxx.power) { + if((selectedPxxPower + g_model.moduleData[moduleIdx].pxx.power) < 5) //switching between mode 2 and 3 does not require rebind + POPUP_WARNING(STR_REBIND); + g_model.moduleData[moduleIdx].pxx.power = selectedPxxPower; + } + } } #if defined(MULTIMODULE) else if (IS_MODULE_MULTIMODULE(moduleIdx)) { diff --git a/radio/src/gui/212x64/model_setup.cpp b/radio/src/gui/212x64/model_setup.cpp index 470018907..2c1d8ff92 100644 --- a/radio/src/gui/212x64/model_setup.cpp +++ b/radio/src/gui/212x64/model_setup.cpp @@ -84,7 +84,6 @@ enum MenuModelSetupItems { ITEM_MODEL_EXTERNAL_MODULE_BIND, ITEM_MODEL_EXTERNAL_MODULE_FAILSAFE, ITEM_MODEL_EXTERNAL_MODULE_OPTIONS, - ITEM_MODEL_EXTERNAL_MODULE_BIND_OPTIONS, #if defined(MULTIMODULE) ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND, #endif @@ -110,27 +109,7 @@ void onBindMenu(const char * result) { uint8_t moduleIdx = CURRENT_MODULE_EDITED(menuVerticalPosition); - if (result == STR_BINDING_25MW_CH1_8_TELEM_OFF) { - g_model.moduleData[moduleIdx].pxx.power = R9M_LBT_POWER_25; - g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true; - g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false; - } - else if (result == STR_BINDING_25MW_CH1_8_TELEM_ON) { - g_model.moduleData[moduleIdx].pxx.power = R9M_LBT_POWER_25; - g_model.moduleData[moduleIdx].pxx.receiver_telem_off = false; - g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false; - } - else if (result == STR_BINDING_500MW_CH1_8_TELEM_OFF) { - g_model.moduleData[moduleIdx].pxx.power = R9M_LBT_POWER_500; - g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true; - g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false; - } - else if (result == STR_BINDING_500MW_CH9_16_TELEM_OFF) { - g_model.moduleData[moduleIdx].pxx.power = R9M_LBT_POWER_500; - g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true; - g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = true; - } - else if (result == STR_BINDING_1_8_TELEM_ON) { + if (result == STR_BINDING_1_8_TELEM_ON) { g_model.moduleData[moduleIdx].pxx.receiver_telem_off = false; g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false; } @@ -298,6 +277,7 @@ void menuModelSetup(event_t event) { horzpos_t l_posHorz = menuHorizontalPosition; bool CURSOR_ON_CELL = (menuHorizontalPosition >= 0); + static uint8_t selectedPxxPower = g_model.moduleData[EXTERNAL_MODULE].pxx.power; //TODO could go to the reusable struct MENU_TAB({ 0, 0, TIMERS_ROWS, TOPLCD_ROWS 0, 1, 0, 0, LABEL(Throttle), 0, 0, 0, @@ -314,7 +294,6 @@ void menuModelSetup(event_t event) ((IS_MODULE_XJT(EXTERNAL_MODULE) && !HAS_RF_PROTOCOL_FAILSAFE(g_model.moduleData[EXTERNAL_MODULE].rfProtocol)) || IS_MODULE_SBUS(EXTERNAL_MODULE)) ? (uint8_t)1 : (IS_MODULE_PPM(EXTERNAL_MODULE) || IS_MODULE_PXX(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE) || IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW, FAILSAFE_ROWS(EXTERNAL_MODULE), EXTERNAL_MODULE_OPTION_ROW, - (IS_MODULE_R9M_LBT(EXTERNAL_MODULE) ? (uint8_t)0 : HIDDEN_ROW), MULTIMODULE_MODULE_ROWS EXTERNAL_MODULE_POWER_ROW, LABEL(Trainer), 0, TRAINER_LINE1_ROWS, TRAINER_LINE2_ROWS}); @@ -751,7 +730,7 @@ void menuModelSetup(event_t event) else if (IS_MODULE_DSM2(EXTERNAL_MODULE)) lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0); else if (IS_MODULE_R9M(EXTERNAL_MODULE)) - lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_R9M_MODES, g_model.moduleData[EXTERNAL_MODULE].subType, (menuHorizontalPosition==1 ? attr : 0)); + lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_R9M_REGION, g_model.moduleData[EXTERNAL_MODULE].subType, (menuHorizontalPosition==1 ? attr : 0)); #if defined(MULTIMODULE) else if (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) { uint8_t multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false); @@ -1009,20 +988,21 @@ void menuModelSetup(event_t event) if (l_posHorz == 1) { if (IS_MODULE_R9M(moduleIdx) || (IS_MODULE_XJT(moduleIdx) && g_model.moduleData[moduleIdx].rfProtocol== RF_PROTO_X16)) { if (event == EVT_KEY_BREAK(KEY_ENTER)) { - uint8_t default_selection; + uint8_t default_selection = 0; // R9M_LBT should default to 0 as available options are variables if (IS_MODULE_R9M_LBT(moduleIdx)) { - if (!IS_TELEMETRY_INTERNAL_MODULE()) - POPUP_MENU_ADD_ITEM(STR_BINDING_25MW_CH1_8_TELEM_ON); - POPUP_MENU_ADD_ITEM(STR_BINDING_25MW_CH1_8_TELEM_OFF); - POPUP_MENU_ADD_ITEM(STR_BINDING_500MW_CH1_8_TELEM_OFF); - POPUP_MENU_ADD_ITEM(STR_BINDING_500MW_CH9_16_TELEM_OFF); - default_selection = 1; - } - else { - if (!(IS_TELEMETRY_INTERNAL_MODULE() && moduleIdx == EXTERNAL_MODULE)) + if (BIND_TELEM_ALLOWED(moduleIdx)) POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_ON); POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_OFF); - if (!(IS_TELEMETRY_INTERNAL_MODULE() && moduleIdx == EXTERNAL_MODULE)) + if (BIND_TELEM_ALLOWED(moduleIdx) && BIND_CH9TO16_ALLOWED(moduleIdx)) + POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_ON); + if (BIND_CH9TO16_ALLOWED(moduleIdx)) + POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_OFF); + } + else { + if (BIND_TELEM_ALLOWED(moduleIdx)) + POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_ON); + POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_OFF); + if (BIND_TELEM_ALLOWED(moduleIdx)) POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_ON); POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_OFF); default_selection = g_model.moduleData[moduleIdx].pxx.receiver_telem_off + (g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 << 1); @@ -1147,35 +1127,26 @@ void menuModelSetup(event_t event) } break; - case ITEM_MODEL_EXTERNAL_MODULE_BIND_OPTIONS: - { - uint8_t moduleIdx = CURRENT_MODULE_EDITED(k); - - lcdDrawTextAlignedLeft(y, "Bind mode"); - if (g_model.moduleData[moduleIdx].pxx.power == R9M_LBT_POWER_25) { - if(g_model.moduleData[moduleIdx].pxx.receiver_telem_off == true) - lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_BINDING_25MW_CH1_8_TELEM_OFF); - else - lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_BINDING_25MW_CH1_8_TELEM_ON); - } - else { - if(g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 == true) - lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_BINDING_500MW_CH9_16_TELEM_OFF); - else - lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_BINDING_500MW_CH1_8_TELEM_OFF); - } - if (attr) REPEAT_LAST_CURSOR_MOVE(); - } - case ITEM_MODEL_EXTERNAL_MODULE_POWER: { uint8_t moduleIdx = CURRENT_MODULE_EDITED(k); - if (IS_MODULE_R9M_FCC(moduleIdx)) { - // Power selection is only available on R9M FCC + if (IS_MODULE_R9M(moduleIdx)) { lcdDrawTextAlignedLeft(y, TR_MULTI_RFPOWER); - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_FCC_POWER_VALUES, g_model.moduleData[moduleIdx].pxx.power, LEFT | attr); - if (attr) - CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].pxx.power, 0, R9M_FCC_POWER_MAX); + if(IS_MODULE_R9M_FCC(moduleIdx)) { + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_FCC_POWER_VALUES, selectedPxxPower, LEFT | attr); + if (attr) + CHECK_INCDEC_MODELVAR(event, selectedPxxPower, 0, R9M_FCC_POWER_MAX); + } + else { + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_LBT_POWER_VALUES, selectedPxxPower, LEFT | attr); + if (attr) + CHECK_INCDEC_MODELVAR(event, selectedPxxPower, 0, R9M_LBT_POWER_MAX); + } + if (attr && s_editMode == 0 && selectedPxxPower != g_model.moduleData[moduleIdx].pxx.power) { + if((selectedPxxPower + g_model.moduleData[moduleIdx].pxx.power) < 5) //switching between mode 2 and 3 does not require rebind + POPUP_WARNING(STR_REBIND); + g_model.moduleData[moduleIdx].pxx.power = selectedPxxPower; + } } #if defined (MULTIMODULE) else if (IS_MODULE_MULTIMODULE(moduleIdx)) { @@ -1289,7 +1260,7 @@ void menuModelFailsafe(event_t event) coord_t y = FH + 1; uint8_t line = (menuVerticalPosition >= NUM_CHANNELS(g_moduleIdx) ? 2 : 0); uint8_t ch = line + col*8; - + for (; line < 8; line++) { const int32_t channelValue = channelOutputs[ch+channelStart]; int32_t failsafeValue = g_model.moduleData[g_moduleIdx].failsafeChannels[8*col+line]; diff --git a/radio/src/gui/480x272/model_setup.cpp b/radio/src/gui/480x272/model_setup.cpp index cb61d87c4..f87e341fd 100644 --- a/radio/src/gui/480x272/model_setup.cpp +++ b/radio/src/gui/480x272/model_setup.cpp @@ -77,7 +77,6 @@ enum MenuModelSetupItems { ITEM_MODEL_EXTERNAL_MODULE_BIND, ITEM_MODEL_EXTERNAL_MODULE_FAILSAFE, ITEM_MODEL_EXTERNAL_MODULE_OPTIONS, - ITEM_MODEL_EXTERNAL_MODULE_BIND_OPTIONS, #if defined(MULTIMODULE) ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND, #endif @@ -103,27 +102,7 @@ void onBindMenu(const char * result) { uint8_t moduleIdx = (menuVerticalPosition >= ITEM_MODEL_EXTERNAL_MODULE_LABEL ? EXTERNAL_MODULE : INTERNAL_MODULE); - if (result == STR_BINDING_25MW_CH1_8_TELEM_OFF) { - g_model.moduleData[moduleIdx].pxx.power = R9M_LBT_POWER_25; - g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true; - g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false; - } - else if (result == STR_BINDING_25MW_CH1_8_TELEM_ON) { - g_model.moduleData[moduleIdx].pxx.power = R9M_LBT_POWER_25; - g_model.moduleData[moduleIdx].pxx.receiver_telem_off = false; - g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false; - } - else if (result == STR_BINDING_500MW_CH1_8_TELEM_OFF) { - g_model.moduleData[moduleIdx].pxx.power = R9M_LBT_POWER_500; - g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true; - g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false; - } - else if (result == STR_BINDING_500MW_CH9_16_TELEM_OFF) { - g_model.moduleData[moduleIdx].pxx.power = R9M_LBT_POWER_500; - g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true; - g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = true; - } - else if (result == STR_BINDING_1_8_TELEM_ON) { + if (result == STR_BINDING_1_8_TELEM_ON) { g_model.moduleData[moduleIdx].pxx.receiver_telem_off = false; g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false; } @@ -262,6 +241,7 @@ int getSwitchWarningsCount() bool menuModelSetup(event_t event) { bool CURSOR_ON_CELL = (menuHorizontalPosition >= 0); + static uint8_t selectedPxxPower = g_model.moduleData[EXTERNAL_MODULE].pxx.power; //TODO could go to the reusable struct // Switch to external antenna confirmation if (warningResult) { @@ -286,7 +266,6 @@ bool menuModelSetup(event_t event) ((IS_MODULE_XJT(EXTERNAL_MODULE) && !HAS_RF_PROTOCOL_MODELINDEX(g_model.moduleData[EXTERNAL_MODULE].rfProtocol)) || IS_MODULE_SBUS(EXTERNAL_MODULE)) ? (uint8_t)1 : (IS_MODULE_PPM(EXTERNAL_MODULE) || IS_MODULE_PXX(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE) || IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW, FAILSAFE_ROWS(EXTERNAL_MODULE), EXTERNAL_MODULE_OPTION_ROW, - (IS_MODULE_R9M_LBT(EXTERNAL_MODULE) ? (uint8_t)0 : HIDDEN_ROW), MULTIMODULE_MODULE_ROWS EXTERNAL_MODULE_POWER_ROW, LABEL(Trainer), @@ -695,7 +674,7 @@ bool menuModelSetup(event_t event) else if (IS_MODULE_DSM2(EXTERNAL_MODULE)) lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, (menuHorizontalPosition==1 ? attr : 0)); else if (IS_MODULE_R9M(EXTERNAL_MODULE)) - lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_R9M_MODES, g_model.moduleData[EXTERNAL_MODULE].subType, (menuHorizontalPosition==1 ? attr : 0)); + lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_R9M_REGION, g_model.moduleData[EXTERNAL_MODULE].subType, (menuHorizontalPosition==1 ? attr : 0)); #if defined(MULTIMODULE) else if (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) { int multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false); @@ -928,20 +907,21 @@ bool menuModelSetup(event_t event) if (l_posHorz == 1) { if (IS_MODULE_R9M(moduleIdx) || (IS_MODULE_XJT(moduleIdx) && g_model.moduleData[moduleIdx].rfProtocol == RF_PROTO_X16)) { if (event == EVT_KEY_BREAK(KEY_ENTER)) { - uint8_t default_selection; + uint8_t default_selection = 0; // R9M_LBT should default to 0 as available options are variables if (IS_MODULE_R9M_LBT(moduleIdx)) { - if (!IS_TELEMETRY_INTERNAL_MODULE()) - POPUP_MENU_ADD_ITEM(STR_BINDING_25MW_CH1_8_TELEM_ON); - POPUP_MENU_ADD_ITEM(STR_BINDING_25MW_CH1_8_TELEM_OFF); - POPUP_MENU_ADD_ITEM(STR_BINDING_500MW_CH1_8_TELEM_OFF); - POPUP_MENU_ADD_ITEM(STR_BINDING_500MW_CH9_16_TELEM_OFF); - default_selection = 2; - } - else { - if (!(IS_TELEMETRY_INTERNAL_MODULE() && moduleIdx == EXTERNAL_MODULE)) + if (BIND_TELEM_ALLOWED(moduleIdx)) POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_ON); POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_OFF); - if (!(IS_TELEMETRY_INTERNAL_MODULE() && moduleIdx == EXTERNAL_MODULE)) + if (BIND_TELEM_ALLOWED(moduleIdx) && BIND_CH9TO16_ALLOWED(moduleIdx)) + POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_ON); + if (BIND_CH9TO16_ALLOWED(moduleIdx)) + POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_OFF); + } + else { + if (BIND_TELEM_ALLOWED(moduleIdx)) + POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_ON); + POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_OFF); + if (BIND_TELEM_ALLOWED(moduleIdx)) POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_ON); POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_OFF); default_selection = g_model.moduleData[moduleIdx].pxx.receiver_telem_off + (g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 << 1); @@ -1065,37 +1045,28 @@ bool menuModelSetup(event_t event) } break; - case ITEM_MODEL_EXTERNAL_MODULE_BIND_OPTIONS: - { - uint8_t moduleIdx = CURRENT_MODULE_EDITED(k); - - lcdDrawText(MENUS_MARGIN_LEFT+ INDENT_WIDTH, y, "Bind mode"); - if (g_model.moduleData[moduleIdx].pxx.power == R9M_LBT_POWER_25) { - if(g_model.moduleData[moduleIdx].pxx.receiver_telem_off == true) - lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_BINDING_25MW_CH1_8_TELEM_OFF); - else - lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_BINDING_25MW_CH1_8_TELEM_ON); - } - else { - if(g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 == true) - lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_BINDING_500MW_CH9_16_TELEM_OFF); - else - lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_BINDING_500MW_CH1_8_TELEM_OFF); - } - while (menuVerticalPosition==k && menuHorizontalPosition > 0) { - REPEAT_LAST_CURSOR_MOVE(ITEM_MODEL_SETUP_MAX, true); - } - } - case ITEM_MODEL_EXTERNAL_MODULE_POWER: { uint8_t moduleIdx = CURRENT_MODULE_EDITED(k); - if (IS_MODULE_R9M_FCC(moduleIdx)) { - // Power selection is only available on R9M FCC + if (IS_MODULE_R9M(moduleIdx)) { lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MULTI_RFPOWER); - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_FCC_POWER_VALUES, g_model.moduleData[moduleIdx].pxx.power, LEFT | attr); - if (attr) - CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].pxx.power, 0, R9M_FCC_POWER_MAX); + if(IS_MODULE_R9M_FCC(moduleIdx)) { + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_FCC_POWER_VALUES, selectedPxxPower, LEFT | attr); + if (attr) + CHECK_INCDEC_MODELVAR(event, selectedPxxPower, 0, R9M_FCC_POWER_MAX); + } + else { + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_LBT_POWER_VALUES, selectedPxxPower, LEFT | attr); + if (attr) + CHECK_INCDEC_MODELVAR(event, selectedPxxPower, 0, R9M_LBT_POWER_MAX); + } + if (attr && s_editMode == 0 && selectedPxxPower != g_model.moduleData[moduleIdx].pxx.power) { + if((selectedPxxPower + g_model.moduleData[moduleIdx].pxx.power) < 5) { //switching between mode 2 and 3 does not require rebind + POPUP_WARNING(STR_WARNING); + SET_WARNING_INFO(STR_REBIND, sizeof(TR_REBIND), 0); + } + g_model.moduleData[moduleIdx].pxx.power = selectedPxxPower; + } } #if defined(MULTIMODULE) else if (IS_MODULE_MULTIMODULE(moduleIdx)) { diff --git a/radio/src/gui/gui_common.h b/radio/src/gui/gui_common.h index baa6f0c48..b4ba33ef9 100644 --- a/radio/src/gui/gui_common.h +++ b/radio/src/gui/gui_common.h @@ -159,7 +159,7 @@ const mm_protocol_definition *getMultiProtocolDefinition (uint8_t protocol); #define FAILSAFE_ROWS(x) ((IS_MODULE_XJT(x) && HAS_RF_PROTOCOL_FAILSAFE(g_model.moduleData[x].rfProtocol)) || MULTIMODULE_HASFAILSAFE(x) || IS_MODULE_R9M(x)) ? (g_model.moduleData[x].failsafeMode==FAILSAFE_CUSTOM ? (uint8_t)1 : (uint8_t)0) : HIDDEN_ROW #define EXTERNAL_MODULE_OPTION_ROW (IS_MODULE_R9M(EXTERNAL_MODULE) || IS_MODULE_SBUS(EXTERNAL_MODULE) ? TITLE_ROW : MULTIMODULE_OPTIONS_ROW) -#define EXTERNAL_MODULE_POWER_ROW (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) || IS_MODULE_R9M_FCC(EXTERNAL_MODULE)) ? (uint8_t) 0 : HIDDEN_ROW +#define EXTERNAL_MODULE_POWER_ROW (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) || IS_MODULE_R9M(EXTERNAL_MODULE)) ? (uint8_t) 0 : HIDDEN_ROW void editStickHardwareSettings(coord_t x, coord_t y, int idx, event_t event, LcdFlags flags); diff --git a/radio/src/pulses/pulses_arm.h b/radio/src/pulses/pulses_arm.h index f3705b3c2..56e702799 100644 --- a/radio/src/pulses/pulses_arm.h +++ b/radio/src/pulses/pulses_arm.h @@ -216,12 +216,37 @@ inline void SEND_FAILSAFE_1S() // for channels not set previously to HOLD or NOPULSE void setCustomFailsafe(uint8_t moduleIndex); -#define LEN_R9M_MODES "\007" -#define TR_R9M_MODES "FCC\0 ""LBT(EU)" +#if defined(PCBXLITE) && !defined(MODULE_R9M_FULLSIZE) +#define LEN_R9M_REGION "\007" +#define TR_R9M_REGION "FCC\0 ""LBT(EU)" #define LEN_R9M_FCC_POWER_VALUES "\006" -#define LEN_R9M_LBT_POWER_VALUES "\006" +#define LEN_R9M_LBT_POWER_VALUES "\015" +#define TR_R9M_FCC_POWER_VALUES "100 mW" +#define TR_R9M_LBT_POWER_VALUES "25 mW 8ch\0 ""25 mW 16ch\0 ""100mW no tele" + +enum R9MFCCPowerValues { + R9M_FCC_POWER_100 = 0, + R9M_FCC_POWER_MAX = R9M_FCC_POWER_100 +}; + +enum R9MLBTPowerValues { + R9M_LBT_POWER_25 = 0, + R9M_LBT_POWER_25_16, + R9M_LBT_POWER_100, + R9M_LBT_POWER_MAX = R9M_LBT_POWER_100 +}; + +#define BIND_TELEM_ALLOWED(idx) (!(IS_TELEMETRY_INTERNAL_MODULE() && moduleIdx == EXTERNAL_MODULE) && (!IS_MODULE_R9M_LBT(idx) || g_model.moduleData[idx].pxx.power < R9M_LBT_POWER_100)) +#define BIND_CH9TO16_ALLOWED(idx) (!IS_MODULE_R9M_LBT(idx) || g_model.moduleData[idx].pxx.power != R9M_LBT_POWER_25) + +#else + +#define LEN_R9M_REGION "\007" +#define TR_R9M_REGION "FCC\0 ""LBT(EU)" +#define LEN_R9M_FCC_POWER_VALUES "\006" +#define LEN_R9M_LBT_POWER_VALUES "\013" #define TR_R9M_FCC_POWER_VALUES "10 mW\0" "100 mW" "500 mW" "1 W\0" -#define TR_R9M_LBT_POWER_VALUES "25 mW\0" "500 mW" +#define TR_R9M_LBT_POWER_VALUES "25 mW 8ch\0 ""25 mW 16ch\0" "200 mW 16ch" "500 mW 16ch" enum R9MFCCPowerValues { R9M_FCC_POWER_10 = 0, @@ -233,11 +258,13 @@ enum R9MFCCPowerValues { enum R9MLBTPowerValues { R9M_LBT_POWER_25 = 0, + R9M_LBT_POWER_25_16, + R9M_LBT_POWER_200, R9M_LBT_POWER_500, R9M_LBT_POWER_MAX = R9M_LBT_POWER_500 }; -#define BIND_TELEM_ALLOWED(idx) (!IS_MODULE_R9M_LBT(idx) || g_model.moduleData[idx].pxx.power == R9M_LBT_POWER_25) +#define BIND_TELEM_ALLOWED(idx) (!(IS_TELEMETRY_INTERNAL_MODULE() && moduleIdx == EXTERNAL_MODULE) && (!IS_MODULE_R9M_LBT(idx) || g_model.moduleData[idx].pxx.power < R9M_LBT_POWER_200)) #define BIND_CH9TO16_ALLOWED(idx) (!IS_MODULE_R9M_LBT(idx) || g_model.moduleData[idx].pxx.power != R9M_LBT_POWER_25) - +#endif #endif // _PULSES_ARM_H_ diff --git a/radio/src/pulses/pxx_arm.cpp b/radio/src/pulses/pxx_arm.cpp index 29944653d..e780e9d85 100644 --- a/radio/src/pulses/pxx_arm.cpp +++ b/radio/src/pulses/pxx_arm.cpp @@ -409,17 +409,15 @@ inline void setupFramePXX(uint8_t port, uint8_t sendUpperChannels) } #endif - // Bit1 is ignored by R9M EU when power is set to 1500 mW extra_flags |= (g_model.moduleData[port].pxx.receiver_telem_off << 1); - extra_flags |= (g_model.moduleData[port].pxx.receiver_channel_9_16 << 2); if (IS_MODULE_R9M(port)) { - // For R9M EU, bit3 (MODE) is taken into account ONLY at bind time. Value change requires re-bind extra_flags |= (min(g_model.moduleData[port].pxx.power, IS_MODULE_R9M_FCC(port) ? (uint8_t)R9M_FCC_POWER_MAX : (uint8_t)R9M_LBT_POWER_MAX) << 3); - // Disable S.PORT if internal module is active - if (IS_TELEMETRY_INTERNAL_MODULE()) { - extra_flags |= (1 << 5); - } + } + + // Disable S.PORT if internal module is active + if (IS_TELEMETRY_INTERNAL_MODULE()) { + extra_flags |= (1 << 5); } putPcmByte(port, extra_flags); diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index 8c22592af..a2b99744b 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -2,6 +2,7 @@ option(SHUTDOWN_CONFIRMATION "Shutdown confirmation" OFF) option(LCD_DUAL_BUFFER "Dual LCD Buffer" OFF) option(TARANIS_INTERNAL_PPM "Taranis internal module hack to output PPM" OFF) option(USEHORUSBT "X9E BT module replaced by Horus BT module" OFF) +option(MODULE_R9M_FULLSIZE "xlite option to use full size R9M instead of mini" OFF) if(PCB STREQUAL X9E) set(PWR_BUTTON "PRESS" CACHE STRING "Pwr button type (PRESS/SWITCH)") @@ -98,6 +99,9 @@ if(PCB STREQUAL XLITE) if(PXX_FREQUENCY STREQUAL HIGH) add_definitions(-DPXX_FREQUENCY_HIGH) endif() + if(MODULE_R9M_FULLSIZE) + add_definitions(-DMODULE_R9M_FULLSIZE) + endif() set(TARGET_SRC ${TARGET_SRC} ../common/arm/stm32/intmodule_serial_driver.cpp diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index e3fecc860..9c56a1149 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -108,7 +108,7 @@ const pm_char STR_OPEN9X[] PROGMEM = #if defined(CPUARM) ISTR(VTRAINERMODES) ISTR(TARANIS_PROTOCOLS) - ISTR(R9M_MODES) + ISTR(R9M_REGION) ISTR(R9M_FCC_POWER_VALUES) ISTR(R9M_LBT_POWER_VALUES) ISTR(TELEMETRY_PROTOCOLS) @@ -387,6 +387,7 @@ const pm_char STR_MENUGLOBALVARS[] PROGMEM = TR_MENUGLOBALVARS; #if defined(DSM2) || defined(PXX) const pm_char STR_RECEIVER_NUM[] PROGMEM = TR_RECEIVER_NUM; const pm_char STR_RECEIVER[] PROGMEM = TR_RECEIVER; +const pm_char STR_REBIND[] PROGMEM = TR_REBIND; #endif #if defined(PXX) || defined(CPUARM) @@ -627,10 +628,6 @@ const pm_char STR_BLCOLOR[] PROGMEM = TR_BLCOLOR; const pm_char STR_BINDING_1_8_TELEM_OFF[] PROGMEM = TR_BINDING_CH1_8_TELEM_OFF; const pm_char STR_BINDING_9_16_TELEM_ON[] PROGMEM = TR_BINDING_CH9_16_TELEM_ON; const pm_char STR_BINDING_9_16_TELEM_OFF[] PROGMEM = TR_BINDING_CH9_16_TELEM_OFF; - const pm_char STR_BINDING_25MW_CH1_8_TELEM_OFF[] PROGMEM = TR_BINDING_25MW_CH1_8_TELEM_OFF; - const pm_char STR_BINDING_25MW_CH1_8_TELEM_ON[] PROGMEM = TR_BINDING_25MW_CH1_8_TELEM_ON; - const pm_char STR_BINDING_500MW_CH1_8_TELEM_OFF[] PROGMEM = TR_BINDING_500MW_CH1_8_TELEM_OFF; - const pm_char STR_BINDING_500MW_CH9_16_TELEM_OFF[] PROGMEM = TR_BINDING_500MW_CH9_16_TELEM_OFF; const pm_char STR_CHANNELRANGE[] PROGMEM = TR_CHANNELRANGE; const pm_char STR_ANTENNASELECTION[] PROGMEM = TR_ANTENNASELECTION; const pm_char STR_ANTENNACONFIRM1[] PROGMEM = TR_ANTENNACONFIRM1; diff --git a/radio/src/translations.h b/radio/src/translations.h index 8521561ae..4697c4949 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -220,8 +220,8 @@ extern const pm_char STR_OPEN9X[]; #endif #if defined(CPUARM) #define OFS_TARANIS_PROTOCOLS (OFS_VTRAINERMODES + sizeof(TR_VTRAINERMODES)) - #define OFS_R9M_MODES (OFS_TARANIS_PROTOCOLS + sizeof(TR_TARANIS_PROTOCOLS)) - #define OFS_R9M_FCC_POWER_VALUES (OFS_R9M_MODES + sizeof(TR_R9M_MODES)) + #define OFS_R9M_REGION (OFS_TARANIS_PROTOCOLS + sizeof(TR_TARANIS_PROTOCOLS)) + #define OFS_R9M_FCC_POWER_VALUES (OFS_R9M_REGION + sizeof(TR_R9M_REGION)) #define OFS_R9M_LBT_POWER_VALUES (OFS_R9M_FCC_POWER_VALUES + sizeof(TR_R9M_FCC_POWER_VALUES)) #define OFS_TELEMETRY_PROTOCOLS (OFS_R9M_LBT_POWER_VALUES + sizeof(TR_R9M_LBT_POWER_VALUES)) #define OFS_XJT_PROTOCOLS (OFS_TELEMETRY_PROTOCOLS + sizeof(TR_TELEMETRY_PROTOCOLS)) @@ -351,7 +351,7 @@ extern const pm_char STR_OPEN9X[]; #if defined(CPUARM) #define STR_VTRAINERMODES (STR_OPEN9X + OFS_VTRAINERMODES) #define STR_TARANIS_PROTOCOLS (STR_OPEN9X + OFS_TARANIS_PROTOCOLS) - #define STR_R9M_MODES (STR_OPEN9X + OFS_R9M_MODES) + #define STR_R9M_REGION (STR_OPEN9X + OFS_R9M_REGION) #define STR_R9M_FCC_POWER_VALUES (STR_OPEN9X + OFS_R9M_FCC_POWER_VALUES) #define STR_R9M_LBT_POWER_VALUES (STR_OPEN9X + OFS_R9M_LBT_POWER_VALUES) #define STR_TELEMETRY_PROTOCOLS (STR_OPEN9X + OFS_TELEMETRY_PROTOCOLS) @@ -638,6 +638,7 @@ extern const pm_char STR_SUBTYPE[]; #if defined(DSM2) || defined(PXX) extern const pm_char STR_RECEIVER_NUM[]; extern const pm_char STR_RECEIVER[]; +extern const pm_char STR_REBIND[]; #endif #if defined(PXX) || defined(CPUARM) @@ -936,10 +937,6 @@ extern const pm_char STR_BLCOLOR[]; extern const pm_char STR_BINDING_1_8_TELEM_OFF[]; extern const pm_char STR_BINDING_9_16_TELEM_ON[]; extern const pm_char STR_BINDING_9_16_TELEM_OFF[]; - extern const pm_char STR_BINDING_25MW_CH1_8_TELEM_OFF[]; - extern const pm_char STR_BINDING_25MW_CH1_8_TELEM_ON[]; - extern const pm_char STR_BINDING_500MW_CH1_8_TELEM_OFF[]; - extern const pm_char STR_BINDING_500MW_CH9_16_TELEM_OFF[]; extern const pm_char STR_CHANNELRANGE[]; extern const pm_char STR_ANTENNASELECTION[]; extern const pm_char STR_ANTENNACONFIRM1[]; diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index 3ac175361..4cad2da48 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -863,24 +863,21 @@ #define TR_MULTI_DSM_AUTODTECT TR(INDENT "Autodetect", INDENT "Autodetect format") #define TR_MULTI_LOWPOWER TR(INDENT "Low power", INDENT "Low power mode") #define TR_MODULE_TELEMETRY TR(INDENT "S.Port", INDENT "S.Port link") -#define TR_MODULE_TELEM_ON TR("ON", "Enabled") +#define TR_MODULE_TELEM_ON TR("ON", "Enabled") #define TR_DISABLE_INTERNAL TR("Disable int.", "Disable internal RF") #define TR_MODULE_NO_SERIAL_MODE TR("!serial mode", "Not in serial mode") #define TR_MODULE_NO_INPUT TR("No input", "No serial input") #define TR_MODULE_NO_TELEMETRY TR3( "No telemetry", "No MULTI_TELEMETRY", "No MULTI_TELEMETRY detected") -#define TR_MODULE_WAITFORBIND "Bind to load protocol" +#define TR_MODULE_WAITFORBIND "Bind to load protocol" #define TR_MODULE_BINDING TR("Bind...","Binding") +#define TR_REBIND "Rebinding required" #define TR_BINDING_CH1_8_TELEM_ON "Ch1-8 Telem ON" #define TR_BINDING_CH1_8_TELEM_OFF "Ch1-8 Telem OFF" #define TR_BINDING_CH9_16_TELEM_ON "Ch9-16 Telem ON" #define TR_BINDING_CH9_16_TELEM_OFF "Ch9-16 Telem OFF" -#define TR_BINDING_25MW_CH1_8_TELEM_OFF TR("25mW Ch1-8 Tel OFF", "25mW Ch1-8 Tel. OFF") -#define TR_BINDING_25MW_CH1_8_TELEM_ON TR("25mW Ch1-8 Tel ON", "25mW Ch1-8 Tel. ON") -#define TR_BINDING_500MW_CH1_8_TELEM_OFF TR("0.5W Ch1-8 Tel OFF", "500mW Ch1-8 Tel. OFF") -#define TR_BINDING_500MW_CH9_16_TELEM_OFF TR("0.5W Ch9-16 Tel OFF", "500mW Ch9-16 Tel. OFF") #define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") -#define TR_MODULE_SYNC TR(INDENT "Sync", INDENT "Module Sync") +#define TR_MODULE_SYNC TR(INDENT "Sync", INDENT "Module Sync") #define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") #define TR_SYNCMENU "[Sync]" #define TR_LIMIT INDENT"Limit" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index 62575edd9..d4fbbb2a7 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -887,14 +887,11 @@ #define TR_MODULE_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)") #define TR_MODULE_WAITFORBIND "Bind to load protocol" #define TR_MODULE_BINDING "Binding" +#define TR_REBIND "Rebinding required" #define TR_BINDING_CH1_8_TELEM_ON "Ch1-8 Telem ON" #define TR_BINDING_CH1_8_TELEM_OFF "Ch1-8 Telem OFF" #define TR_BINDING_CH9_16_TELEM_ON "Ch9-16 Telem ON" #define TR_BINDING_CH9_16_TELEM_OFF "Ch9-16 Telem OFF" -#define TR_BINDING_25MW_CH1_8_TELEM_OFF TR("25mW Ch1-8 Tel OFF", "25mW Ch1-8 Tel. OFF") -#define TR_BINDING_25MW_CH1_8_TELEM_ON TR("25mW Ch1-8 Tel ON", "25mW Ch1-8 Tel. ON") -#define TR_BINDING_500MW_CH1_8_TELEM_OFF TR("0.5W Ch1-8 Tel OFF", "500mW Ch1-8 Tel. OFF") -#define TR_BINDING_500MW_CH9_16_TELEM_OFF TR("0.5W Ch9-16 Tel OFF", "500mW Ch9-16 Tel. OFF") #define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MODULE_SYNC TR(INDENT "Sync", INDENT "Module Sync") diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index 8cdf2856e..2b22774ac 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -875,14 +875,11 @@ #define TR_MODULE_NO_TELEMETRY TR3("No telemetry", "No MULTI_TELEMETRY", "No MULTI_TELEMETRY detected") #define TR_MODULE_WAITFORBIND "Bind to load protocol" #define TR_MODULE_BINDING TR("Bind...","Binding") +#define TR_REBIND "Rebinding required" #define TR_BINDING_CH1_8_TELEM_ON "Ch1-8 Telem ON" #define TR_BINDING_CH1_8_TELEM_OFF "Ch1-8 Telem OFF" #define TR_BINDING_CH9_16_TELEM_ON "Ch9-16 Telem ON" #define TR_BINDING_CH9_16_TELEM_OFF "Ch9-16 Telem OFF" -#define TR_BINDING_25MW_CH1_8_TELEM_OFF TR("25mW Ch1-8 Tel OFF", "25mW Ch1-8 Tel. OFF") -#define TR_BINDING_25MW_CH1_8_TELEM_ON TR("25mW Ch1-8 Tel ON", "25mW Ch1-8 Tel. ON") -#define TR_BINDING_500MW_CH1_8_TELEM_OFF TR("0.5W Ch1-8 Tel OFF", "500mW Ch1-8 Tel. OFF") -#define TR_BINDING_500MW_CH9_16_TELEM_OFF TR("0.5W Ch9-16 Tel OFF", "500mW Ch9-16 Tel. OFF") #define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MODULE_SYNC TR(INDENT "Sync", INDENT "Module Sync") diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index 7a1519bb7..c7def4842 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -866,14 +866,11 @@ #define TR_MODULE_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)") #define TR_MODULE_WAITFORBIND "Bind to load protocol" #define TR_MODULE_BINDING "Binding" +#define TR_REBIND "Rebinding required" #define TR_BINDING_CH1_8_TELEM_ON "Ch1-8 Telem ON" #define TR_BINDING_CH1_8_TELEM_OFF "Ch1-8 Telem OFF" #define TR_BINDING_CH9_16_TELEM_ON "Ch9-16 Telem ON" #define TR_BINDING_CH9_16_TELEM_OFF "Ch9-16 Telem OFF" -#define TR_BINDING_25MW_CH1_8_TELEM_OFF TR("25mW Ch1-8 Tel OFF", "25mW Ch1-8 Tel. OFF") -#define TR_BINDING_25MW_CH1_8_TELEM_ON TR("25mW Ch1-8 Tel ON", "25mW Ch1-8 Tel. ON") -#define TR_BINDING_500MW_CH1_8_TELEM_OFF TR("0.5W Ch1-8 Tel OFF", "500mW Ch1-8 Tel. OFF") -#define TR_BINDING_500MW_CH9_16_TELEM_OFF TR("0.5W Ch9-16 Tel OFF", "500mW Ch9-16 Tel. OFF") #define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MODULE_SYNC TR(INDENT "Sync", INDENT "Module Sync") diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index 1b7aa3427..ddf8f4905 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -858,14 +858,11 @@ #define TR_MODULE_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)") #define TR_MODULE_WAITFORBIND "Bind to load protocol" #define TR_MODULE_BINDING "Binding" +#define TR_REBIND "Rebinding required" #define TR_BINDING_CH1_8_TELEM_ON "Ch1-8 Telem ON" #define TR_BINDING_CH1_8_TELEM_OFF "Ch1-8 Telem OFF" #define TR_BINDING_CH9_16_TELEM_ON "Ch9-16 Telem ON" #define TR_BINDING_CH9_16_TELEM_OFF "Ch9-16 Telem OFF" -#define TR_BINDING_25MW_CH1_8_TELEM_OFF TR("25mW Ch1-8 Tel OFF", "25mW Ch1-8 Tel. OFF") -#define TR_BINDING_25MW_CH1_8_TELEM_ON TR("25mW Ch1-8 Tel ON", "25mW Ch1-8 Tel. ON") -#define TR_BINDING_500MW_CH1_8_TELEM_OFF TR("0.5W Ch1-8 Tel OFF", "500mW Ch1-8 Tel. OFF") -#define TR_BINDING_500MW_CH9_16_TELEM_OFF TR("0.5W Ch9-16 Tel OFF", "500mW Ch9-16 Tel. OFF") #define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MODULE_SYNC TR(INDENT "Sync", INDENT "Module Sync") diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index 872e0cb71..114db8b0b 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -896,14 +896,11 @@ #define TR_MODULE_NO_TELEMETRY TR3("Pas de télm.", "Télémétrie absente", "Télémétrie absente(act. MULTI_TELEMETRY)") #define TR_MODULE_WAITFORBIND "Binder d'abord" #define TR_MODULE_BINDING "Bind..." +#define TR_REBIND "Rebinding required" #define TR_BINDING_CH1_8_TELEM_ON "Ch1-8 Télem ON" #define TR_BINDING_CH1_8_TELEM_OFF "Ch1-8 Télem OFF" #define TR_BINDING_CH9_16_TELEM_ON "Ch9-16 Télem ON" #define TR_BINDING_CH9_16_TELEM_OFF "Ch9-16 Télem OFF" -#define TR_BINDING_25MW_CH1_8_TELEM_OFF "25mW Ch1-8 Télem OFF" -#define TR_BINDING_25MW_CH1_8_TELEM_ON "25mW Ch1-8 Télem ON" -#define TR_BINDING_500MW_CH1_8_TELEM_OFF "500mW Ch1-8 Télem OFF" -#define TR_BINDING_500MW_CH9_16_TELEM_OFF "500mW Ch9-16 Tél. OFF" #define TR_PROTOCOL_INVALID TR("Sél. invalide", "Protocole invalide") #define TR_MODULE_STATUS TR(INDENT "Etat", INDENT "Etat module") #define TR_MODULE_SYNC TR(INDENT "Sync", INDENT "Module Sync") diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index c8a9764f9..655e3dc25 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -883,14 +883,11 @@ #define TR_MODULE_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)") #define TR_MODULE_WAITFORBIND "Bind to load protocol" #define TR_MODULE_BINDING "Binding" +#define TR_REBIND "Rebinding required" #define TR_BINDING_CH1_8_TELEM_ON "Ch1-8 Telem ON" #define TR_BINDING_CH1_8_TELEM_OFF "Ch1-8 Telem OFF" #define TR_BINDING_CH9_16_TELEM_ON "Ch9-16 Telem ON" #define TR_BINDING_CH9_16_TELEM_OFF "Ch9-16 Telem OFF" -#define TR_BINDING_25MW_CH1_8_TELEM_OFF TR("25mW Ch1-8 Tel OFF", "25mW Ch1-8 Tel. OFF") -#define TR_BINDING_25MW_CH1_8_TELEM_ON TR("25mW Ch1-8 Tel ON", "25mW Ch1-8 Tel. ON") -#define TR_BINDING_500MW_CH1_8_TELEM_OFF TR("0.5W Ch1-8 Tel OFF", "500mW Ch1-8 Tel. OFF") -#define TR_BINDING_500MW_CH9_16_TELEM_OFF TR("0.5W Ch9-16 Tel OFF", "500mW Ch9-16 Tel. OFF") #define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MODULE_SYNC TR(INDENT "Sync", INDENT "Module Sync") diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index 7f94d67ba..13989729f 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -874,14 +874,11 @@ #define TR_MODULE_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)") #define TR_MODULE_WAITFORBIND "Bind to load protocol" #define TR_MODULE_BINDING "Binding" +#define TR_REBIND "Rebinding required" #define TR_BINDING_CH1_8_TELEM_ON "Ch1-8 Telem ON" #define TR_BINDING_CH1_8_TELEM_OFF "Ch1-8 Telem OFF" #define TR_BINDING_CH9_16_TELEM_ON "Ch9-16 Telem ON" #define TR_BINDING_CH9_16_TELEM_OFF "Ch9-16 Telem OFF" -#define TR_BINDING_25MW_CH1_8_TELEM_OFF TR("25mW Ch1-8 Tel OFF", "25mW Ch1-8 Tel. OFF") -#define TR_BINDING_25MW_CH1_8_TELEM_ON TR("25mW Ch1-8 Tel ON", "25mW Ch1-8 Tel. ON") -#define TR_BINDING_500MW_CH1_8_TELEM_OFF TR("0.5W Ch1-8 Tel OFF", "500mW Ch1-8 Tel. OFF") -#define TR_BINDING_500MW_CH9_16_TELEM_OFF TR("0.5W Ch9-16 Tel OFF", "500mW Ch9-16 Tel. OFF") #define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MODULE_SYNC TR(INDENT "Sync", INDENT "Module Sync") diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index 3e56dbd79..5532dbb84 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -885,14 +885,11 @@ #define TR_MODULE_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)") #define TR_MODULE_WAITFORBIND "Bind to load protocol" #define TR_MODULE_BINDING "Binding" +#define TR_REBIND "Rebinding required" #define TR_BINDING_CH1_8_TELEM_ON "Ch1-8 Telem ON" #define TR_BINDING_CH1_8_TELEM_OFF "Ch1-8 Telem OFF" #define TR_BINDING_CH9_16_TELEM_ON "Ch9-16 Telem ON" #define TR_BINDING_CH9_16_TELEM_OFF "Ch9-16 Telem OFF" -#define TR_BINDING_25MW_CH1_8_TELEM_OFF TR("25mW Ch1-8 Tel OFF", "25mW Ch1-8 Tel. OFF") -#define TR_BINDING_25MW_CH1_8_TELEM_ON TR("25mW Ch1-8 Tel ON", "25mW Ch1-8 Tel. ON") -#define TR_BINDING_500MW_CH1_8_TELEM_OFF TR("0.5W Ch1-8 Tel OFF", "500mW Ch1-8 Tel. OFF") -#define TR_BINDING_500MW_CH9_16_TELEM_OFF TR("0.5W Ch9-16 Tel OFF", "500mW Ch9-16 Tel. OFF") #define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MODULE_SYNC TR(INDENT "Sync", INDENT "Module Sync") diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 293e3f6a4..85de3c96c 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -866,14 +866,11 @@ #define TR_MODULE_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)") #define TR_MODULE_WAITFORBIND "Bind to load protocol" #define TR_MODULE_BINDING "Binding" +#define TR_REBIND "Rebinding required" #define TR_BINDING_CH1_8_TELEM_ON "Ch1-8 Telem ON" #define TR_BINDING_CH1_8_TELEM_OFF "Ch1-8 Telem OFF" #define TR_BINDING_CH9_16_TELEM_ON "Ch9-16 Telem ON" #define TR_BINDING_CH9_16_TELEM_OFF "Ch9-16 Telem OFF" -#define TR_BINDING_25MW_CH1_8_TELEM_OFF TR("25mW Ch1-8 Tel OFF", "25mW Ch1-8 Tel. OFF") -#define TR_BINDING_25MW_CH1_8_TELEM_ON TR("25mW Ch1-8 Tel ON", "25mW Ch1-8 Tel. ON") -#define TR_BINDING_500MW_CH1_8_TELEM_OFF TR("0.5W Ch1-8 Tel OFF", "500mW Ch1-8 Tel. OFF") -#define TR_BINDING_500MW_CH9_16_TELEM_OFF TR("0.5W Ch9-16 Tel OFF", "500mW Ch9-16 Tel. OFF") #define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MODULE_SYNC TR(INDENT "Sync", INDENT "Module Sync") diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index 90dfd2272..a471c4921 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -893,14 +893,11 @@ #define TR_MODULE_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)") #define TR_MODULE_WAITFORBIND "Bind to load protocol" #define TR_MODULE_BINDING "Binding" +#define TR_REBIND "Rebinding required" #define TR_BINDING_CH1_8_TELEM_ON "Ch1-8 Telem ON" #define TR_BINDING_CH1_8_TELEM_OFF "Ch1-8 Telem OFF" #define TR_BINDING_CH9_16_TELEM_ON "Ch9-16 Telem ON" #define TR_BINDING_CH9_16_TELEM_OFF "Ch9-16 Telem OFF" -#define TR_BINDING_25MW_CH1_8_TELEM_OFF TR("25mW Ch1-8 Tel OFF", "25mW Ch1-8 Tel. OFF") -#define TR_BINDING_25MW_CH1_8_TELEM_ON TR("25mW Ch1-8 Tel ON", "25mW Ch1-8 Tel. ON") -#define TR_BINDING_500MW_CH1_8_TELEM_OFF TR("0.5W Ch1-8 Tel OFF", "500mW Ch1-8 Tel. OFF") -#define TR_BINDING_500MW_CH9_16_TELEM_OFF TR("0.5W Ch9-16 Tel OFF", "500mW Ch9-16 Tel. OFF") #define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MODULE_SYNC TR(INDENT "Sync", INDENT "Module Sync")