From ccc93ce439e1e635d918f5dd26ebf69f0ed8a8d3 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 15 Jul 2019 08:51:00 +0200 Subject: [PATCH] Bsongis/xjt lite support (#6563) External XJT Lite support added --- radio/src/gui/128x64/model_setup.cpp | 25 ++-- radio/src/gui/212x64/model_setup.cpp | 25 ++-- radio/src/gui/480x272/model_setup.cpp | 23 ++-- .../common/stdlcd/model_module_options.cpp | 19 ++- .../common/stdlcd/model_receiver_options.cpp | 71 +++++++--- .../gui/common/stdlcd/model_setup_pxx1.cpp | 6 + radio/src/gui/gui_common.cpp | 10 +- radio/src/gui/gui_common.h | 17 +-- radio/src/opentx.cpp | 8 +- radio/src/opentx.h | 4 - radio/src/pulses/modules_constants.h | 13 +- radio/src/pulses/modules_helpers.h | 125 +++++++++++++++--- radio/src/pulses/pulses.cpp | 1 + radio/src/pulses/pulses.h | 30 ++++- radio/src/pulses/pxx2.cpp | 15 ++- radio/src/storage/modelslist.cpp | 2 +- radio/src/targets/common/arm/CMakeLists.txt | 6 +- radio/src/telemetry/frsky_pxx2.cpp | 28 ++-- radio/src/translations.cpp | 3 + radio/src/translations.h | 3 + radio/src/translations/cz.h.txt | 3 + radio/src/translations/de.h.txt | 3 + radio/src/translations/en.h.txt | 3 + radio/src/translations/es.h.txt | 3 + radio/src/translations/fi.h.txt | 3 + radio/src/translations/fr.h.txt | 3 + radio/src/translations/it.h.txt | 3 + radio/src/translations/nl.h.txt | 3 + radio/src/translations/pl.h.txt | 3 + radio/src/translations/pt.h.txt | 3 + radio/src/translations/se.h.txt | 3 + radio/src/translations/untranslated.h | 10 +- tools/build-frsky.py | 4 +- 33 files changed, 328 insertions(+), 153 deletions(-) diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index 73393b72f..c59ebfa6d 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -183,8 +183,6 @@ enum MenuModelSetupItems { #define INTERNAL_MODULE_TYPE_ROWS (0) // Module type + RF protocols #endif -#define EXTERNAL_MODULE_BIND_ROWS ((isModuleXJT(EXTERNAL_MODULE) && IS_D8_RX(EXTERNAL_MODULE)) || isModuleSBUS(EXTERNAL_MODULE)) ? (uint8_t)1 : (isModulePPM(EXTERNAL_MODULE) || isModulePXX1(EXTERNAL_MODULE) || isModulePXX2(EXTERNAL_MODULE) || isModuleDSM2(EXTERNAL_MODULE) || isModuleMultimodule(EXTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW - #if defined(PCBSKY9X) && defined(REVX) #define OUTPUT_TYPE_ROW (isModulePPM(EXTERNAL_MODULE) ? (uint8_t)0 : HIDDEN_ROW), #elif defined(PCBSKY9X) @@ -264,7 +262,7 @@ void onBluetoothConnectMenu(const char * result) LABEL(InternalModule), \ INTERNAL_MODULE_TYPE_ROWS, \ INTERNAL_MODULE_CHANNELS_ROWS, \ - IF_NOT_ACCESS_MODULE_RF(INTERNAL_MODULE, IF_INTERNAL_MODULE_ON(HAS_RF_PROTOCOL_MODELINDEX(g_model.moduleData[INTERNAL_MODULE].rfProtocol) ? (uint8_t)2 : (uint8_t)1)), \ + IF_NOT_ACCESS_MODULE_RF(INTERNAL_MODULE, IF_INTERNAL_MODULE_ON(isModuleModelIndexAvailable(INTERNAL_MODULE) ? (uint8_t)2 : (uint8_t)1)), \ IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), /* RxNum */ \ ANTENNA_ROW \ IF_INTERNAL_MODULE_ON(FAILSAFE_ROWS(INTERNAL_MODULE)), /* Failsafe */ \ @@ -764,7 +762,7 @@ void menuModelSetup(event_t event) 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_ACCST_RF_PROTOCOLS, 1+g_model.moduleData[INTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0); - else if (isModuleXJT2(INTERNAL_MODULE)) + else if (isModuleACCESS(INTERNAL_MODULE)) lcdDrawTextAtIndex(lcdNextPos + 3, y, STR_ISRM_PXX2_RF_PROTOCOLS, g_model.moduleData[INTERNAL_MODULE].subType, menuHorizontalPosition==1 ? attr : 0); if (attr) { if (menuHorizontalPosition == 0) { @@ -785,7 +783,7 @@ void menuModelSetup(event_t event) } } else if (isModulePXX2(INTERNAL_MODULE)) { - g_model.moduleData[INTERNAL_MODULE].subType = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].subType, 0, MODULE_SUBTYPE_ISRM_PXX2_LAST, EE_MODEL, isRfProtocolAvailable); + 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 @@ -795,7 +793,7 @@ void menuModelSetup(event_t event) } lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_ISRM_PXX2_RF_PROTOCOLS, index, attr); if (attr) { - index = checkIncDec(event, index, 0, MODULE_SUBTYPE_ISRM_PXX2_LAST + 1 /* because of --- */, EE_MODEL); + 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) { @@ -824,7 +822,7 @@ void menuModelSetup(event_t event) lcdDrawTextAlignedLeft(y, INDENT TR_MODE); lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_EXTERNAL_MODULE_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].type, menuHorizontalPosition==0 ? attr : 0); if (isModuleXJT(EXTERNAL_MODULE)) - lcdDrawTextAtIndex(lcdNextPos + 3, y, STR_ACCST_RF_PROTOCOLS, 1+g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0); + lcdDrawTextAtIndex(lcdNextPos + 3, y, STR_ACCST_RF_PROTOCOLS, 1+g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==1 ? attr : 0); else if (isModuleDSM2(EXTERNAL_MODULE)) lcdDrawTextAtIndex(lcdNextPos + 3, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0); else if (isModuleR9MNonAccess(EXTERNAL_MODULE)) @@ -896,7 +894,7 @@ void menuModelSetup(event_t event) } #endif else { - CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, 0, MODULE_SUBTYPE_PXX1_LAST); + CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, MODULE_SUBTYPE_PXX1_LAST); } if (checkIncDec_Ret) { @@ -1065,6 +1063,9 @@ void menuModelSetup(event_t event) lcdDrawNumber(lcdLastRightPos, y, moduleData.channelsStart+1, LEFT | (menuHorizontalPosition==0 ? attr : 0)); lcdDrawChar(lcdLastRightPos, y, '-'); lcdDrawNumber(lcdLastRightPos + FW+1, y, moduleData.channelsStart+sentModuleChannels(moduleIdx), LEFT | (menuHorizontalPosition==1 ? attr : 0)); + const char * delay = getModuleDelay(moduleIdx); + if (delay) + lcdDrawText(lcdLastRightPos+4, y, delay, SMLSIZE); if (attr && s_editMode > 0) { switch (menuHorizontalPosition) { case 0: @@ -1122,7 +1123,7 @@ void menuModelSetup(event_t event) lcdDrawText(INDENT_WIDTH, y, STR_RECEIVER_NUM); lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.header.modelId[moduleIdx], attr | LEADING0 | LEFT, 2); if (attr) { - CHECK_INCDEC_MODELVAR_ZERO(event, g_model.header.modelId[moduleIdx], MAX_RX_NUM(moduleIdx)); + CHECK_INCDEC_MODELVAR_ZERO(event, g_model.header.modelId[moduleIdx], getMaxRxNum(moduleIdx)); if (checkIncDec_Ret) { modelHeaders[g_eeGeneral.currModel].modelId[moduleIdx] = g_model.header.modelId[moduleIdx]; } @@ -1300,7 +1301,7 @@ void menuModelSetup(event_t event) else { horzpos_t l_posHorz = menuHorizontalPosition; coord_t xOffsetBind = MODEL_SETUP_BIND_OFS; - if (isModuleXJT(moduleIdx) && IS_D8_RX(moduleIdx)) { + if (!isModuleModelIndexAvailable(moduleIdx)) { xOffsetBind = 0; lcdDrawText(INDENT_WIDTH, y, STR_RECEIVER); if (attr) l_posHorz += 1; @@ -1313,7 +1314,7 @@ void menuModelSetup(event_t event) lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.header.modelId[moduleIdx], (l_posHorz==0 ? attr : 0) | LEADING0|LEFT, 2); if (attr && l_posHorz == 0) { if (s_editMode > 0) { - CHECK_INCDEC_MODELVAR_ZERO(event, g_model.header.modelId[moduleIdx], MAX_RX_NUM(moduleIdx)); + CHECK_INCDEC_MODELVAR_ZERO(event, g_model.header.modelId[moduleIdx], getMaxRxNum(moduleIdx)); if (checkIncDec_Ret) { modelHeaders[g_eeGeneral.currModel].modelId[moduleIdx] = g_model.header.modelId[moduleIdx]; } @@ -1340,7 +1341,7 @@ void menuModelSetup(event_t event) if (attr && l_posHorz > 0) { if (s_editMode > 0) { if (l_posHorz == 1) { - if (isModuleR9MNonAccess(moduleIdx) || (isModuleXJT(moduleIdx) && g_model.moduleData[moduleIdx].rfProtocol == MODULE_SUBTYPE_PXX1_ACCST_D16) || (isModuleXJT2(moduleIdx) && g_model.moduleData[moduleIdx].subType == MODULE_SUBTYPE_ISRM_PXX2_ACCST_D16) || (isModuleR9MAccess(moduleIdx) && g_model.moduleData[moduleIdx].subType != MODULE_SUBTYPE_R9M_PXX2_ACCESS)) { + if (isModuleR9MNonAccess(moduleIdx) || isModuleXJTD16(moduleIdx) || (isModuleACCESS(moduleIdx) && g_model.moduleData[moduleIdx].subType == MODULE_SUBTYPE_ISRM_PXX2_ACCST_D16) || (isModuleR9MAccess(moduleIdx) && g_model.moduleData[moduleIdx].subType != MODULE_SUBTYPE_R9M_PXX2_ACCESS)) { #if defined(PCBXLITE) if (EVT_KEY_MASK(event) == KEY_ENTER) { #elif defined(PCBSKY9X) || defined(PCBAR9X) diff --git a/radio/src/gui/212x64/model_setup.cpp b/radio/src/gui/212x64/model_setup.cpp index 8c6aae7a8..aec7965e3 100644 --- a/radio/src/gui/212x64/model_setup.cpp +++ b/radio/src/gui/212x64/model_setup.cpp @@ -315,8 +315,8 @@ void menuModelSetup(event_t event) LABEL(InternalModule), INTERNAL_MODULE_TYPE_ROWS, INTERNAL_MODULE_CHANNELS_ROWS, - IF_NOT_ACCESS_MODULE_RF(INTERNAL_MODULE, IF_INTERNAL_MODULE_ON(HAS_RF_PROTOCOL_MODELINDEX(g_model.moduleData[INTERNAL_MODULE].rfProtocol) ? (uint8_t)2 : (uint8_t)1)), - IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), // RxNum + IF_NOT_ACCESS_MODULE_RF(INTERNAL_MODULE, IF_INTERNAL_MODULE_ON(isModuleFailsafeAvailable(INTERNAL_MODULE) ? (uint8_t)2 : (uint8_t)1)), + IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), // RxNum for ACCESS IF_INTERNAL_MODULE_ON(FAILSAFE_ROWS(INTERNAL_MODULE)), // Failsafe IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 1), // Range check and Register buttons IF_PXX2_MODULE(INTERNAL_MODULE, 0), // Module options @@ -328,8 +328,8 @@ void menuModelSetup(event_t event) EXTERNAL_MODULE_MODE_ROWS, MULTIMODULE_STATUS_ROWS EXTERNAL_MODULE_CHANNELS_ROWS, - IF_NOT_ACCESS_MODULE_RF(EXTERNAL_MODULE, ((isModuleXJT(EXTERNAL_MODULE) && !HAS_RF_PROTOCOL_FAILSAFE(g_model.moduleData[EXTERNAL_MODULE].rfProtocol)) || isModuleSBUS(EXTERNAL_MODULE)) ? (uint8_t)1 : (isModulePPM(EXTERNAL_MODULE) || isModulePXX1(EXTERNAL_MODULE) || isModuleDSM2(EXTERNAL_MODULE) || isModuleMultimodule(EXTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW), - IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), // RxNum + IF_NOT_ACCESS_MODULE_RF(EXTERNAL_MODULE, EXTERNAL_MODULE_BIND_ROWS), + IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), // RxNum for ACCESS IF_NOT_PXX2_MODULE(EXTERNAL_MODULE, EXTERNAL_MODULE_OPTION_ROW), MULTIMODULE_MODULE_ROWS EXTERNAL_MODULE_POWER_ROW, @@ -722,7 +722,7 @@ void menuModelSetup(event_t event) 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_ACCST_RF_PROTOCOLS, 1+g_model.moduleData[INTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0); - else if (isModuleXJT2(INTERNAL_MODULE)) + else if (isModuleACCESS(INTERNAL_MODULE)) lcdDrawTextAtIndex(lcdNextPos + 3, y, STR_ISRM_PXX2_RF_PROTOCOLS, g_model.moduleData[INTERNAL_MODULE].subType, menuHorizontalPosition==1 ? attr : 0); if (attr) { if (menuHorizontalPosition == 0) { @@ -935,12 +935,9 @@ void menuModelSetup(event_t event) lcdDrawNumber(lcdLastRightPos, y, moduleData.channelsStart+1, LEFT | (menuHorizontalPosition==0 ? attr : 0)); lcdDrawChar(lcdLastRightPos, y, '-'); lcdDrawNumber(lcdLastRightPos + FW+1, y, moduleData.channelsStart+sentModuleChannels(moduleIdx), LEFT | (menuHorizontalPosition==1 ? attr : 0)); - if (IS_R9M_OR_XJTD16(moduleIdx)) { - if (sentModuleChannels(moduleIdx) > 8) - lcdDrawText(lcdLastRightPos+5, y, "(18ms)"); - else - lcdDrawText(lcdLastRightPos+5, y, "(9ms)"); - } + const char * delay = getModuleDelay(moduleIdx); + if (delay) + lcdDrawText(lcdLastRightPos+5, y, delay); if (attr && s_editMode>0) { switch (menuHorizontalPosition) { case 0: @@ -1033,7 +1030,7 @@ void menuModelSetup(event_t event) else { horzpos_t l_posHorz = menuHorizontalPosition; coord_t xOffsetBind = MODEL_SETUP_BIND_OFS; - if (isModuleXJT(moduleIdx) && IS_D8_RX(moduleIdx)) { + if (!isModuleModelIndexAvailable(moduleIdx)) { xOffsetBind = 0; lcdDrawText(INDENT_WIDTH, y, STR_RECEIVER); if (attr) l_posHorz += 1; @@ -1046,7 +1043,7 @@ void menuModelSetup(event_t event) lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.header.modelId[moduleIdx], (l_posHorz==0 ? attr : 0) | LEADING0|LEFT, 2); if (attr && l_posHorz==0) { if (s_editMode>0) { - CHECK_INCDEC_MODELVAR_ZERO(event, g_model.header.modelId[moduleIdx], MAX_RX_NUM(moduleIdx)); + CHECK_INCDEC_MODELVAR_ZERO(event, g_model.header.modelId[moduleIdx], getMaxRxNum(moduleIdx)); if (checkIncDec_Ret) { modelHeaders[g_eeGeneral.currModel].modelId[moduleIdx] = g_model.header.modelId[moduleIdx]; } @@ -1285,7 +1282,7 @@ void menuModelSetup(event_t event) lcdDrawText(INDENT_WIDTH, y, STR_RECEIVER_NUM); lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.header.modelId[moduleIdx], attr | LEADING0 | LEFT, 2); if (attr) { - CHECK_INCDEC_MODELVAR_ZERO(event, g_model.header.modelId[moduleIdx], MAX_RX_NUM(moduleIdx)); + CHECK_INCDEC_MODELVAR_ZERO(event, g_model.header.modelId[moduleIdx], getMaxRxNum(moduleIdx)); if (checkIncDec_Ret) { modelHeaders[g_eeGeneral.currModel].modelId[moduleIdx] = g_model.header.modelId[moduleIdx]; } diff --git a/radio/src/gui/480x272/model_setup.cpp b/radio/src/gui/480x272/model_setup.cpp index a7adef79d..638c2b1a2 100644 --- a/radio/src/gui/480x272/model_setup.cpp +++ b/radio/src/gui/480x272/model_setup.cpp @@ -372,7 +372,7 @@ void startRegisterDialog(uint8_t module) void checkModelIdUnique(uint8_t moduleIdx) { - if (isModulePXX1(moduleIdx) && IS_D8_RX(moduleIdx)) + if (isModuleXJTD8(moduleIdx)) return; char * warn_buf = reusableBuffer.moduleSetup.msg; @@ -609,7 +609,7 @@ bool menuModelSetup(event_t event) LABEL(InternalModule), INTERNAL_MODULE_TYPE_ROWS, INTERNAL_MODULE_CHANNELS_ROWS, - IF_NOT_ACCESS_MODULE_RF(INTERNAL_MODULE, IF_INTERNAL_MODULE_ON(isModuleXJT(INTERNAL_MODULE) ? (HAS_RF_PROTOCOL_MODELINDEX(g_model.moduleData[INTERNAL_MODULE].rfProtocol) ? (uint8_t)2 : (uint8_t)1) : (isModulePPM(INTERNAL_MODULE) ? (uint8_t)1 : HIDDEN_ROW))), + IF_NOT_ACCESS_MODULE_RF(INTERNAL_MODULE, IF_INTERNAL_MODULE_ON(IF_INTERNAL_MODULE_ON(isModuleModelIndexAvailable(INTERNAL_MODULE) ? (uint8_t)2 : (uint8_t)1))), IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), // RxNum ANTENNA_ROW IF_INTERNAL_MODULE_ON(FAILSAFE_ROWS(INTERNAL_MODULE)), @@ -623,7 +623,7 @@ bool menuModelSetup(event_t event) EXTERNAL_MODULE_MODE_ROWS, MULTIMODULE_STATUS_ROWS EXTERNAL_MODULE_CHANNELS_ROWS, - ((isModuleXJT(EXTERNAL_MODULE) && !HAS_RF_PROTOCOL_MODELINDEX(g_model.moduleData[EXTERNAL_MODULE].rfProtocol)) || isModuleSBUS(EXTERNAL_MODULE)) ? (uint8_t)1 : (isModulePPM(EXTERNAL_MODULE) || isModulePXX1(EXTERNAL_MODULE) || isModuleDSM2(EXTERNAL_MODULE) || isModuleMultimodule(EXTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW, + EXTERNAL_MODULE_BIND_ROWS, FAILSAFE_ROWS(EXTERNAL_MODULE), EXTERNAL_MODULE_OPTION_ROW, MULTIMODULE_MODULE_ROWS @@ -990,7 +990,7 @@ bool menuModelSetup(event_t event) 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(MODEL_SETUP_3RD_COLUMN, y, STR_ACCST_RF_PROTOCOLS, 1+g_model.moduleData[INTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0); - else if (isModuleXJT2(INTERNAL_MODULE)) + else if (isModuleACCESS(INTERNAL_MODULE)) lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_ISRM_PXX2_RF_PROTOCOLS, g_model.moduleData[INTERNAL_MODULE].subType, menuHorizontalPosition==1 ? attr : 0); if (attr) { if (menuHorizontalPosition == 0) { @@ -1145,12 +1145,9 @@ bool menuModelSetup(event_t event) drawStringWithIndex(MODEL_SETUP_2ND_COLUMN, y, STR_CH, moduleData.channelsStart+1, menuHorizontalPosition==0 ? attr : 0); lcdDrawText(lcdNextPos+5, y, "-"); drawStringWithIndex(lcdNextPos+5, y, STR_CH, moduleData.channelsStart+sentModuleChannels(moduleIdx), menuHorizontalPosition==1 ? attr : 0); - if (IS_R9M_OR_XJTD16(moduleIdx)) { - if (sentModuleChannels(moduleIdx) > 8) - lcdDrawText(lcdNextPos + 15, y, "(18ms)"); - else - lcdDrawText(lcdNextPos + 15, y, "(9ms)"); - } + const char * delay = getModuleDelay(moduleIdx); + if (delay) + lcdDrawText(lcdNextPos + 15, y, delay); if (attr && s_editMode>0) { switch (menuHorizontalPosition) { case 0: @@ -1273,7 +1270,7 @@ bool menuModelSetup(event_t event) lcdDrawText(MENUS_MARGIN_LEFT + INDENT_WIDTH, y, STR_RECEIVER_NUM); lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.header.modelId[moduleIdx], attr | LEADING0 | LEFT, 2); if (attr) { - CHECK_INCDEC_MODELVAR_ZERO(event, g_model.header.modelId[moduleIdx], MAX_RX_NUM(moduleIdx)); + CHECK_INCDEC_MODELVAR_ZERO(event, g_model.header.modelId[moduleIdx], getMaxRxNum(moduleIdx)); if (event == EVT_KEY_LONG(KEY_ENTER)) { killEvents(event); uint8_t newVal = modelslist.findNextUnusedModelId(moduleIdx); @@ -1434,7 +1431,7 @@ bool menuModelSetup(event_t event) else { int l_posHorz = menuHorizontalPosition; coord_t xOffsetBind = MODEL_SETUP_BIND_OFS; - if (isModuleXJT(moduleIdx) && IS_D8_RX(moduleIdx)) { + if (!isModuleModelIndexAvailable(moduleIdx)) { xOffsetBind = 0; lcdDrawText(MENUS_MARGIN_LEFT + INDENT_WIDTH, y, STR_RECEIVER); if (attr) l_posHorz += 1; @@ -1447,7 +1444,7 @@ bool menuModelSetup(event_t event) lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.header.modelId[moduleIdx], (l_posHorz==0 ? attr : 0) | LEADING0 | LEFT, 2); if (attr && l_posHorz==0) { if (s_editMode>0) { - CHECK_INCDEC_MODELVAR_ZERO(event, g_model.header.modelId[moduleIdx], MAX_RX_NUM(moduleIdx)); + CHECK_INCDEC_MODELVAR_ZERO(event, g_model.header.modelId[moduleIdx], getMaxRxNum(moduleIdx)); if (event == EVT_KEY_LONG(KEY_ENTER)) { killEvents(event); uint8_t newVal = modelslist.findNextUnusedModelId(moduleIdx); diff --git a/radio/src/gui/common/stdlcd/model_module_options.cpp b/radio/src/gui/common/stdlcd/model_module_options.cpp index ad3701618..05259f3e1 100644 --- a/radio/src/gui/common/stdlcd/model_module_options.cpp +++ b/radio/src/gui/common/stdlcd/model_module_options.cpp @@ -28,7 +28,7 @@ extern uint8_t g_moduleIdx; void onTxOptionsUpdateConfirm(const char * result) { if (result == STR_OK) { - reusableBuffer.hardwareAndSettings.moduleSettingsDirty = 2; + reusableBuffer.hardwareAndSettings.moduleSettings.dirty = 2; moduleState[g_moduleIdx].writeModuleSettings(&reusableBuffer.hardwareAndSettings.moduleSettings); } else { @@ -78,15 +78,11 @@ void menuModelModuleOptions(event_t event) memclear(&reusableBuffer.hardwareAndSettings, sizeof(reusableBuffer.hardwareAndSettings)); #if defined(SIMU) reusableBuffer.hardwareAndSettings.moduleSettings.state = PXX2_SETTINGS_OK; -#else - // no need to initialize reusableBuffer.hardwareAndSettings.moduleState.state to PXX2_HARDWARE_INFO - moduleState[g_moduleIdx].readModuleInformation(&reusableBuffer.hardwareAndSettings.modules[g_moduleIdx], PXX2_HW_INFO_TX_ID, PXX2_HW_INFO_TX_ID); #endif } uint8_t modelId = reusableBuffer.hardwareAndSettings.modules[g_moduleIdx].information.modelID; // uint8_t variant = reusableBuffer.hardwareAndSettings.modules[g_moduleIdx].information.variant; - uint8_t optionsAvailable = getModuleOptions(modelId) & ((1 << MODULE_OPTION_EXTERNAL_ANTENNA) | (1 << MODULE_OPTION_POWER)); SUBMENU_NOTITLE(ITEM_MODULE_SETTINGS_COUNT, { @@ -104,7 +100,7 @@ void menuModelModuleOptions(event_t event) if (menuEvent) { killEvents(KEY_EXIT); moduleState[g_moduleIdx].mode = MODULE_MODE_NORMAL; - if (reusableBuffer.hardwareAndSettings.moduleSettingsDirty) { + if (reusableBuffer.hardwareAndSettings.moduleSettings.dirty) { abortPopMenu(); POPUP_CONFIRMATION(STR_UPDATE_TX_OPTIONS, onTxOptionsUpdateConfirm); } @@ -113,14 +109,15 @@ void menuModelModuleOptions(event_t event) } } - if (event == EVT_KEY_LONG(KEY_ENTER) && reusableBuffer.hardwareAndSettings.moduleSettingsDirty) { + if (event == EVT_KEY_LONG(KEY_ENTER) && reusableBuffer.hardwareAndSettings.moduleSettings.dirty) { killEvents(event); - reusableBuffer.hardwareAndSettings.moduleSettingsDirty = 0; + reusableBuffer.hardwareAndSettings.moduleSettings.dirty = 0; moduleState[g_moduleIdx].writeModuleSettings(&reusableBuffer.hardwareAndSettings.moduleSettings); } - if (reusableBuffer.hardwareAndSettings.moduleSettingsDirty == 2 && reusableBuffer.hardwareAndSettings.moduleSettings.state == PXX2_SETTINGS_OK) { + if (reusableBuffer.hardwareAndSettings.moduleSettings.dirty == 2 && reusableBuffer.hardwareAndSettings.moduleSettings.state == PXX2_SETTINGS_OK) { popMenu(); + return; } if (modelId != 0 && mstate_tab[menuVerticalPosition] == HIDDEN_ROW) { @@ -151,7 +148,7 @@ void menuModelModuleOptions(event_t event) case ITEM_MODULE_SETTINGS_EXTERNAL_ANTENNA: reusableBuffer.hardwareAndSettings.moduleSettings.externalAntenna = editCheckBox(reusableBuffer.hardwareAndSettings.moduleSettings.externalAntenna, RECEIVER_OPTIONS_2ND_COLUMN, y, "Ext. antenna", attr, event); if (attr && checkIncDec_Ret) { - reusableBuffer.hardwareAndSettings.moduleSettingsDirty = true; + reusableBuffer.hardwareAndSettings.moduleSettings.dirty = true; } break; @@ -164,7 +161,7 @@ void menuModelModuleOptions(event_t event) if (attr) { reusableBuffer.hardwareAndSettings.moduleSettings.txPower = checkIncDec(event, reusableBuffer.hardwareAndSettings.moduleSettings.txPower, 0, 30, 0, &isPowerAvailable); if (checkIncDec_Ret) { - reusableBuffer.hardwareAndSettings.moduleSettingsDirty = true; + reusableBuffer.hardwareAndSettings.moduleSettings.dirty = true; } } break; diff --git a/radio/src/gui/common/stdlcd/model_receiver_options.cpp b/radio/src/gui/common/stdlcd/model_receiver_options.cpp index 7950104a3..b08872651 100644 --- a/radio/src/gui/common/stdlcd/model_receiver_options.cpp +++ b/radio/src/gui/common/stdlcd/model_receiver_options.cpp @@ -38,33 +38,48 @@ void onRxOptionsUpdateConfirm(const char * result) } enum { - ITEM_RECEIVER_TELEMETRY, - ITEM_RECEIVER_PWM_RATE, - ITEM_RECEIVER_SPORT_FPORT, - ITEM_RECEIVER_PINMAP_FIRST + ITEM_RECEIVER_SETTINGS_TELEMETRY, + ITEM_RECEIVER_SETTINGS_PWM_RATE, + ITEM_RECEIVER_SETTINGS_SPORT_FPORT, + ITEM_RECEIVER_SETTINGS_CAPABILITY_NOT_SUPPORTED1, + ITEM_RECEIVER_SETTINGS_CAPABILITY_NOT_SUPPORTED2, + ITEM_RECEIVER_SETTINGS_PINMAP_FIRST }; + +#define IF_RECEIVER_CAPABILITY(capability, count) uint8_t((reusableBuffer.hardwareAndSettings.modules[g_moduleIdx].receivers[receiverId].information.capabilities & (1 << capability)) ? count : HIDDEN_ROW) + void menuModelReceiverOptions(event_t event) { const int lim = (g_model.extendedLimits ? (512 * LIMIT_EXT_PERCENT / 100) : 512) * 2; uint8_t wbar = LCD_W / 2 - 20; auto outputsCount = min(16, reusableBuffer.hardwareAndSettings.receiverSettings.outputsCount); - SIMPLE_SUBMENU_NOTITLE(ITEM_RECEIVER_PINMAP_FIRST + outputsCount); - if (event == EVT_ENTRY) { + memclear(&reusableBuffer.hardwareAndSettings, sizeof(reusableBuffer.hardwareAndSettings)); #if defined(SIMU) reusableBuffer.hardwareAndSettings.receiverSettings.state = PXX2_SETTINGS_OK; reusableBuffer.hardwareAndSettings.receiverSettings.outputsCount = 8; -#else - // no need to initialize reusableBuffer.hardwareAndSettings.receiverSettings.state to PXX2_HARDWARE_INFO - moduleState[g_moduleIdx].readModuleInformation(&reusableBuffer.hardwareAndSettings.modules[g_moduleIdx], reusableBuffer.hardwareAndSettings.receiverSettings.receiverId, reusableBuffer.hardwareAndSettings.receiverSettings.receiverId); #endif } + uint8_t receiverId = reusableBuffer.hardwareAndSettings.receiverSettings.receiverId; + uint8_t modelId = reusableBuffer.hardwareAndSettings.modules[g_moduleIdx].receivers[receiverId].information.modelID; + + SUBMENU_NOTITLE(ITEM_RECEIVER_SETTINGS_PINMAP_FIRST + outputsCount, { + 0, // Telemetry + 0, // PWM rate + IF_RECEIVER_CAPABILITY(RECEIVER_CAPABILITY_FPORT, 0), + uint8_t(reusableBuffer.hardwareAndSettings.modules[g_moduleIdx].receivers[receiverId].information.capabilityNotSupported ? READONLY_ROW : HIDDEN_ROW), + uint8_t(reusableBuffer.hardwareAndSettings.modules[g_moduleIdx].receivers[receiverId].information.capabilityNotSupported ? READONLY_ROW : HIDDEN_ROW), + 0 // channels ... + }); + if (reusableBuffer.hardwareAndSettings.receiverSettings.state == PXX2_HARDWARE_INFO && moduleState[g_moduleIdx].mode == MODULE_MODE_NORMAL) { - reusableBuffer.hardwareAndSettings.receiverSettings.state = PXX2_SETTINGS_READ; - moduleState[g_moduleIdx].mode = MODULE_MODE_RECEIVER_SETTINGS; + if (modelId) + moduleState[g_moduleIdx].readReceiverSettings(&reusableBuffer.hardwareAndSettings.receiverSettings); + else + moduleState[g_moduleIdx].readModuleInformation(&reusableBuffer.hardwareAndSettings.modules[g_moduleIdx], receiverId, receiverId); } if (menuEvent) { @@ -81,10 +96,8 @@ void menuModelReceiverOptions(event_t event) if (event == EVT_KEY_LONG(KEY_ENTER) && reusableBuffer.hardwareAndSettings.receiverSettings.dirty) { killEvents(event); - reusableBuffer.hardwareAndSettings.receiverSettings.state = PXX2_SETTINGS_WRITE; reusableBuffer.hardwareAndSettings.receiverSettings.dirty = 0; - reusableBuffer.hardwareAndSettings.receiverSettings.timeout = 0; - moduleState[g_moduleIdx].mode = MODULE_MODE_RECEIVER_SETTINGS; + moduleState[g_moduleIdx].writeReceiverSettings(&reusableBuffer.hardwareAndSettings.receiverSettings); } if (reusableBuffer.hardwareAndSettings.receiverSettings.dirty == 2 && reusableBuffer.hardwareAndSettings.receiverSettings.state == PXX2_SETTINGS_OK) { @@ -92,6 +105,13 @@ void menuModelReceiverOptions(event_t event) return; } + if (modelId != 0 && mstate_tab[menuVerticalPosition] == HIDDEN_ROW) { + menuVerticalPosition = 0; + while (menuVerticalPosition < ITEM_RECEIVER_SETTINGS_PINMAP_FIRST && mstate_tab[menuVerticalPosition] == HIDDEN_ROW) { + ++menuVerticalPosition; + } + } + int8_t sub = menuVerticalPosition; lcdDrawTextAlignedLeft(0, STR_RECEIVER_OPTIONS); drawReceiverName(FW * 13, 0, g_moduleIdx, reusableBuffer.hardwareAndSettings.receiverSettings.receiverId); @@ -101,34 +121,47 @@ void menuModelReceiverOptions(event_t event) for (uint8_t k=0; k0 ? BLINK|INVERS : INVERS) : 0); switch (i) { - case ITEM_RECEIVER_TELEMETRY: - reusableBuffer.hardwareAndSettings.receiverSettings.telemetryDisabled = editCheckBox(reusableBuffer.hardwareAndSettings.receiverSettings.telemetryDisabled, RECEIVER_OPTIONS_2ND_COLUMN, y, "Telem. disabled", attr, event); + case ITEM_RECEIVER_SETTINGS_TELEMETRY: + reusableBuffer.hardwareAndSettings.receiverSettings.telemetryDisabled = editCheckBox(reusableBuffer.hardwareAndSettings.receiverSettings.telemetryDisabled, RECEIVER_OPTIONS_2ND_COLUMN, y, STR_TELEMETRY_DISABLED, attr, event); if (attr && checkIncDec_Ret) { reusableBuffer.hardwareAndSettings.receiverSettings.dirty = true; } break; - case ITEM_RECEIVER_PWM_RATE: + case ITEM_RECEIVER_SETTINGS_PWM_RATE: reusableBuffer.hardwareAndSettings.receiverSettings.pwmRate = editCheckBox(reusableBuffer.hardwareAndSettings.receiverSettings.pwmRate, RECEIVER_OPTIONS_2ND_COLUMN, y, isModuleR9MAccess(g_moduleIdx) ? "6.67ms PWM": "9ms PWM", attr, event); if (attr && checkIncDec_Ret) { reusableBuffer.hardwareAndSettings.receiverSettings.dirty = true; } break; - case ITEM_RECEIVER_SPORT_FPORT: + case ITEM_RECEIVER_SETTINGS_SPORT_FPORT: reusableBuffer.hardwareAndSettings.receiverSettings.fport = editCheckBox(reusableBuffer.hardwareAndSettings.receiverSettings.fport, RECEIVER_OPTIONS_2ND_COLUMN, y, "F.Port", attr, event); if (attr && checkIncDec_Ret) { reusableBuffer.hardwareAndSettings.receiverSettings.dirty = true; } break; + case ITEM_RECEIVER_SETTINGS_CAPABILITY_NOT_SUPPORTED1: + lcdDrawText(LCD_W/2, y+1, STR_MORE_OPTIONS_AVAILABLE, SMLSIZE|CENTERED); + break; + + case ITEM_RECEIVER_SETTINGS_CAPABILITY_NOT_SUPPORTED2: + lcdDrawText(LCD_W/2, y+1, STR_OPENTX_UPGRADE_REQUIRED, SMLSIZE|CENTERED); + break; + default: // Pin { - uint8_t pin = i - ITEM_RECEIVER_PINMAP_FIRST; + uint8_t pin = i - ITEM_RECEIVER_SETTINGS_PINMAP_FIRST; if (pin < reusableBuffer.hardwareAndSettings.receiverSettings.outputsCount) { uint8_t & mapping = reusableBuffer.hardwareAndSettings.receiverSettings.outputsMapping[pin]; uint8_t channel = g_model.moduleData[g_moduleIdx].channelsStart + mapping; diff --git a/radio/src/gui/common/stdlcd/model_setup_pxx1.cpp b/radio/src/gui/common/stdlcd/model_setup_pxx1.cpp index 79231c5f9..c7eb39f8f 100644 --- a/radio/src/gui/common/stdlcd/model_setup_pxx1.cpp +++ b/radio/src/gui/common/stdlcd/model_setup_pxx1.cpp @@ -26,10 +26,16 @@ void onBindMenu(const char * result) 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; + if (isModuleR9MLiteNonPro(moduleIdx) && isModuleR9M_LBT(moduleIdx)) { + g_model.moduleData[moduleIdx].pxx.power = R9M_LITE_LBT_POWER_25_TELEM; + } } else if (result == STR_BINDING_1_8_TELEM_OFF) { g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true; g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false; + if (isModuleR9MLiteNonPro(moduleIdx) && isModuleR9M_LBT(moduleIdx)) { + g_model.moduleData[moduleIdx].pxx.power = R9M_LITE_LBT_POWER_100_NOTELEM; + } } else if (result == STR_BINDING_9_16_TELEM_ON) { g_model.moduleData[moduleIdx].pxx.receiver_telem_off = false; diff --git a/radio/src/gui/gui_common.cpp b/radio/src/gui/gui_common.cpp index 4411f750f..4a1e201f5 100644 --- a/radio/src/gui/gui_common.cpp +++ b/radio/src/gui/gui_common.cpp @@ -586,7 +586,7 @@ bool isInternalModuleAvailable(int moduleType) bool isExternalModuleAvailable(int moduleType) { #if !defined(HARDWARE_EXTERNAL_MODULE_SIZE_SML) - if (isModuleTypeR9MLite(moduleType)) + if (isModuleTypeR9MLite(moduleType) || moduleType == MODULE_TYPE_XJT_LITE_PXX2) return false; #endif @@ -600,16 +600,16 @@ bool isExternalModuleAvailable(int moduleType) return false; #endif -#if !defined(R9M_SIZE_STD) +#if !defined(HARDWARE_EXTERNAL_MODULE_SIZE_STD) if (moduleType == MODULE_TYPE_R9M_PXX1) return false; #endif - if (moduleType == MODULE_TYPE_ISRM_PXX2 || moduleType == MODULE_TYPE_R9M_PXX2) - return false; + if (moduleType == MODULE_TYPE_R9M_PXX2 || moduleType == MODULE_TYPE_ISRM_PXX2) + return false; // doesn't exist for now #if !defined(PXX2) - if (moduleType == MODULE_TYPE_R9M_PXX2 || moduleType == MODULE_TYPE_R9M_LITE_PXX2 || moduleType == MODULE_TYPE_R9M_LITE_PRO_PXX2) { + if (moduleType == MODULE_TYPE_XJT_LITE_PXX2 || moduleType == MODULE_TYPE_R9M_LITE_PXX2 || moduleType == MODULE_TYPE_R9M_LITE_PRO_PXX2) { return false; } #endif diff --git a/radio/src/gui/gui_common.h b/radio/src/gui/gui_common.h index d959f7452..6a3fa510b 100644 --- a/radio/src/gui/gui_common.h +++ b/radio/src/gui/gui_common.h @@ -117,7 +117,7 @@ void lcdDrawMMM(coord_t x, coord_t y, LcdFlags flags=0); // model_setup Defines that are used in all uis in the same way #define INTERNAL_MODULE_CHANNELS_ROWS IF_INTERNAL_MODULE_ON((uint8_t)1) #define EXTERNAL_MODULE_CHANNELS_ROWS IF_EXTERNAL_MODULE_ON((isModuleDSM2(EXTERNAL_MODULE) || isModuleCrossfire(EXTERNAL_MODULE) || isModuleSBUS(EXTERNAL_MODULE) || (isModuleMultimodule(EXTERNAL_MODULE) && g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) != MODULE_SUBTYPE_MULTI_DSM2)) ? (uint8_t)0 : (uint8_t)1) - +#define EXTERNAL_MODULE_BIND_ROWS (isModuleXJTD8(EXTERNAL_MODULE) || isModuleSBUS(EXTERNAL_MODULE)) ? (uint8_t)1 : (isModulePPM(EXTERNAL_MODULE) || isModulePXX1(EXTERNAL_MODULE) || isModulePXX2(EXTERNAL_MODULE) || isModuleDSM2(EXTERNAL_MODULE) || isModuleMultimodule(EXTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW #if defined(MULTIMODULE) #define MULTIMODULE_STATUS_ROWS isModuleMultimodule(EXTERNAL_MODULE) ? TITLE_ROW : HIDDEN_ROW, (isModuleMultimodule(EXTERNAL_MODULE) && multiSyncStatus.isValid()) ? TITLE_ROW : HIDDEN_ROW, @@ -127,8 +127,6 @@ void lcdDrawMMM(coord_t x, coord_t y, LcdFlags flags=0); #define MULTIMODULE_SUBTYPE_ROWS(x) isModuleMultimodule(x) ? MULTIMODULE_RFPROTO_ROWS(x) : HIDDEN_ROW, #define MULTIMODULE_HAS_SUBTYPE(x) (getMultiProtocolDefinition(x)->maxSubtype > 0) #define MULTIMODULE_HASOPTIONS(x) (getMultiProtocolDefinition(x)->optionsstr != nullptr) -#define MULTI_MAX_RX_NUM(x) (g_model.moduleData[x].getMultiProtocol(true) == MODULE_SUBTYPE_MULTI_OLRS ? 4 : 15) -#define MULTIMODULE_HASFAILSAFE(x) (isModuleMultimodule(x) && multiModuleStatus.isValid() && multiModuleStatus.supportsFailsafe()) #define MULTIMODULE_OPTIONS_ROW (isModuleMultimodule(EXTERNAL_MODULE) && MULTIMODULE_HASOPTIONS(g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true))) ? (uint8_t) 0: HIDDEN_ROW // When using packed, the pointer in here end up not being aligned, which clang and gcc complain about @@ -145,24 +143,15 @@ const mm_protocol_definition *getMultiProtocolDefinition (uint8_t protocol); #else #define MULTIMODULE_STATUS_ROWS #define MULTIMODULE_MODULE_ROWS -#define MULTIMODULE_HASFAILSAFE(x) false #define MULTIMODULE_SUBTYPE_ROWS(x) #define MULTIMODULE_MODE_ROWS(x) (uint8_t)0 -#define MULTI_MAX_RX_NUM(x) 15 #define MULTIMODULE_OPTIONS_ROW HIDDEN_ROW #endif -#define MAX_RX_NUM(x) (isModuleDSM2(x) ? 20 : isModuleMultimodule(x) ? MULTI_MAX_RX_NUM(x) : 63) -#define IS_D8_RX(x) (g_model.moduleData[x].rfProtocol == MODULE_SUBTYPE_PXX1_ACCST_D8) -#define IS_R9M_OR_XJTD16(x) ((isModuleXJT(x) && g_model.moduleData[x].rfProtocol== MODULE_SUBTYPE_PXX1_ACCST_D16) || isModuleR9MNonAccess(x)) - -#define FAILSAFE_ROWS(x) ((isModuleXJTVariant(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 - -#define EXTERNAL_MODULE_OPTION_ROW (isModuleR9MNonAccess(EXTERNAL_MODULE) || isModuleSBUS(EXTERNAL_MODULE) ? TITLE_ROW : MULTIMODULE_OPTIONS_ROW) - +#define FAILSAFE_ROWS(x) isModuleFailsafeAvailable(x) ? (g_model.moduleData[x].failsafeMode==FAILSAFE_CUSTOM ? (uint8_t)1 : (uint8_t)0) : HIDDEN_ROW +#define EXTERNAL_MODULE_OPTION_ROW (isModuleR9MNonAccess(EXTERNAL_MODULE) || isModuleSBUS(EXTERNAL_MODULE) ? TITLE_ROW : MULTIMODULE_OPTIONS_ROW) #define EXTERNAL_MODULE_POWER_ROW (isModuleMultimodule(EXTERNAL_MODULE) || isModuleR9MNonAccess(EXTERNAL_MODULE)) ? (isModuleR9MLiteNonPro(EXTERNAL_MODULE) ? TITLE_ROW : (uint8_t) 0) : HIDDEN_ROW - void editStickHardwareSettings(coord_t x, coord_t y, int idx, event_t event, LcdFlags flags); #endif // _GUI_COMMON_H_ diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 95fdf7172..d205269d8 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -383,7 +383,7 @@ void applyDefaultTemplate() #if defined(EEPROM) void checkModelIdUnique(uint8_t index, uint8_t module) { - if (isModulePXX1(module) && IS_D8_RX(module)) + if (isModuleXJTD8(module)) return; uint8_t modelId = g_model.header.modelId[module]; @@ -453,7 +453,7 @@ uint8_t findNextUnusedModelId(uint8_t index, uint8_t module) uint8_t new_id = 1; uint8_t tst_mask = 1; - for (;new_id < MAX_RX_NUM(module); new_id++) { + for (;new_id < getMaxRxNum(module); new_id++) { if (!(usedModelIds[new_id >> 3] & tst_mask)) { // found free ID return new_id; @@ -859,9 +859,9 @@ static void checkRTCBattery() void checkFailsafe() { for (int i=0; i 8 ? "(18ms)" : "(9ms)"; + + return nullptr; +} + #endif // _MODULES_H_ diff --git a/radio/src/pulses/pulses.cpp b/radio/src/pulses/pulses.cpp index 57732161b..b7fac3ab1 100755 --- a/radio/src/pulses/pulses.cpp +++ b/radio/src/pulses/pulses.cpp @@ -74,6 +74,7 @@ uint8_t getRequiredProtocol(uint8_t module) case MODULE_TYPE_ISRM_PXX2: case MODULE_TYPE_R9M_LITE_PRO_PXX2: + case MODULE_TYPE_XJT_LITE_PXX2: protocol = PROTOCOL_CHANNELS_PXX2_HIGHSPEED; break; diff --git a/radio/src/pulses/pulses.h b/radio/src/pulses/pulses.h index 365761b1b..8c0ae36b9 100644 --- a/radio/src/pulses/pulses.h +++ b/radio/src/pulses/pulses.h @@ -94,6 +94,8 @@ PACK(struct PXX2HardwareInformation { PXX2Version hwVersion; PXX2Version swVersion; uint8_t variant; + uint32_t capabilities; // variable length + uint8_t capabilityNotSupported; }); PACK(struct ModuleInformation { @@ -110,9 +112,10 @@ PACK(struct ModuleInformation { class ModuleSettings { public: uint8_t state; // 0x00 = READ 0x40 = WRITE - tmr10ms_t retryTime; + tmr10ms_t timeout; uint8_t externalAntenna; int8_t txPower; + uint8_t dirty; }; class ReceiverSettings { @@ -167,6 +170,7 @@ PACK(struct ModuleState { union { ModuleInformation * moduleInformation; ModuleSettings * moduleSettings; + ReceiverSettings * receiverSettings; BindInformation * bindInformation; OtaUpdateInformation * otaUpdateInformation; }; @@ -196,9 +200,22 @@ PACK(struct ModuleState { { moduleSettings = source; moduleSettings->state = PXX2_SETTINGS_WRITE; - moduleSettings->retryTime = 0; + moduleSettings->timeout = 0; mode = MODULE_MODE_MODULE_SETTINGS; } + void readReceiverSettings(ReceiverSettings * destination) + { + receiverSettings = destination; + receiverSettings->state = PXX2_SETTINGS_READ; + mode = MODULE_MODE_RECEIVER_SETTINGS; + } + void writeReceiverSettings(ReceiverSettings * source) + { + receiverSettings = source; + receiverSettings->state = PXX2_SETTINGS_WRITE; + receiverSettings->timeout = 0; + mode = MODULE_MODE_RECEIVER_SETTINGS; + } }); extern ModuleState moduleState[NUM_MODULES]; @@ -393,10 +410,9 @@ inline void SEND_FAILSAFE_1S() void setCustomFailsafe(uint8_t moduleIndex); enum R9MLiteLBTPowerValues { - R9M_LITE_LBT_POWER_25 = 0, - R9M_LITE_LBT_POWER_25_16, - R9M_LITE_LBT_POWER_100, - R9M_LITE_LBT_POWER_MAX = R9M_LITE_LBT_POWER_100 + R9M_LITE_LBT_POWER_25_TELEM = 0, + R9M_LITE_LBT_POWER_100_NOTELEM, + R9M_LITE_LBT_POWER_MAX = R9M_LITE_LBT_POWER_100_NOTELEM }; enum R9MFCCPowerValues { @@ -416,5 +432,5 @@ enum R9MLBTPowerValues { }; #define BIND_CH9TO16_ALLOWED(idx) (!isModuleR9M_LBT(idx) || g_model.moduleData[idx].pxx.power != R9M_LBT_POWER_25) -#define BIND_TELEM_ALLOWED(idx) (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_R9M_PXX1) ? (!(IS_TELEMETRY_INTERNAL_MODULE() && moduleIdx == EXTERNAL_MODULE) && (!isModuleR9M_LBT(idx) || g_model.moduleData[idx].pxx.power < R9M_LBT_POWER_200)) : (!(IS_TELEMETRY_INTERNAL_MODULE() && moduleIdx == EXTERNAL_MODULE) && (!isModuleR9M_LBT(idx) || g_model.moduleData[idx].pxx.power < R9M_LITE_LBT_POWER_100)) +#define BIND_TELEM_ALLOWED(idx) (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_R9M_PXX1) ? (!(IS_TELEMETRY_INTERNAL_MODULE() && moduleIdx == EXTERNAL_MODULE) && (!isModuleR9M_LBT(idx) || g_model.moduleData[idx].pxx.power < R9M_LBT_POWER_200)) : (!(IS_TELEMETRY_INTERNAL_MODULE() && moduleIdx == EXTERNAL_MODULE) && (!isModuleR9M_LBT(idx) || g_model.moduleData[idx].pxx.power < R9M_LITE_LBT_POWER_100_NOTELEM)) #endif // _PULSES_H_ diff --git a/radio/src/pulses/pxx2.cpp b/radio/src/pulses/pxx2.cpp index aac50ec9a..36eef531d 100644 --- a/radio/src/pulses/pxx2.cpp +++ b/radio/src/pulses/pxx2.cpp @@ -39,8 +39,15 @@ uint8_t Pxx2Pulses::addFlag0(uint8_t module) void Pxx2Pulses::addFlag1(uint8_t module) { - uint8_t flag1 = g_model.moduleData[module].subType << 4; - Pxx2Transport::addByte(flag1); + uint8_t subType; + if (isModuleXJT(module)) { + static const uint8_t PXX2_XJT_MODULE_SUBTYPES[] = {0x01, 0x03, 0x02}; + subType = PXX2_XJT_MODULE_SUBTYPES[min(g_model.moduleData[module].subType, 2)]; + } + else { + subType = g_model.moduleData[module].subType; + } + Pxx2Transport::addByte(subType << 4); } void Pxx2Pulses::addPulsesValues(uint16_t low, uint16_t high) @@ -180,7 +187,7 @@ void Pxx2Pulses::setupModuleSettingsFrame(uint8_t module) { ModuleSettings * destination = moduleState[module].moduleSettings; - if (get_tmr10ms() > destination->retryTime) { + if (get_tmr10ms() > destination->timeout) { addFrameType(PXX2_TYPE_C_MODULE, PXX2_TYPE_ID_TX_SETTINGS); uint8_t flag0 = 0; if (destination->state == PXX2_SETTINGS_WRITE) @@ -193,7 +200,7 @@ void Pxx2Pulses::setupModuleSettingsFrame(uint8_t module) Pxx2Transport::addByte(flag1); Pxx2Transport::addByte(destination->txPower); } - destination->retryTime = get_tmr10ms() + 200/*next try in 2s*/; + destination->timeout = get_tmr10ms() + 200/*next try in 2s*/; } else { setupChannelsFrame(module); diff --git a/radio/src/storage/modelslist.cpp b/radio/src/storage/modelslist.cpp index 24a3089cc..bc5ce99e3 100644 --- a/radio/src/storage/modelslist.cpp +++ b/radio/src/storage/modelslist.cpp @@ -542,7 +542,7 @@ uint8_t ModelsList::findNextUnusedModelId(uint8_t moduleIdx) uint8_t new_id = 1; uint8_t tst_mask = 1; - for (;new_id < MAX_RX_NUM(moduleIdx); new_id++) { + for (;new_id < getMaxRxNum(moduleIdx); new_id++) { if (!(usedModelIds[new_id >> 3] & tst_mask)) { // found free ID return new_id; diff --git a/radio/src/targets/common/arm/CMakeLists.txt b/radio/src/targets/common/arm/CMakeLists.txt index 75ff6cbab..43e9b6868 100644 --- a/radio/src/targets/common/arm/CMakeLists.txt +++ b/radio/src/targets/common/arm/CMakeLists.txt @@ -8,7 +8,7 @@ option(TRACE_FATFS "Traces FatFS enabled" OFF) option(TRACE_AUDIO "Traces audio enabled" OFF) option(DEBUG_TRACE_BUFFER "Debug Trace Screen" OFF) option(XJT "XJT TX Module" ON) -option(R9M_SIZE_STD "R9M standard size TX Module" ON) +option(MODULE_SIZE_STD "Standard size TX Module" ON) option(PPM "PPM TX Module" ON) option(DSM2 "DSM2 TX Module" ON) option(SBUS "SBUS TX Module" ON) @@ -143,8 +143,8 @@ if(XJT) add_definitions(-DXJT) endif() -if(R9M_SIZE_STD) - add_definitions(-DR9M_SIZE_STD) +if(MODULE_SIZE_STD) + add_definitions(-DHARDWARE_EXTERNAL_MODULE_SIZE_STD) endif() if(MULTIMODULE) diff --git a/radio/src/telemetry/frsky_pxx2.cpp b/radio/src/telemetry/frsky_pxx2.cpp index 7e3baa78c..44ddf9e63 100644 --- a/radio/src/telemetry/frsky_pxx2.cpp +++ b/radio/src/telemetry/frsky_pxx2.cpp @@ -53,12 +53,18 @@ void processGetHardwareInfoFrame(uint8_t module, uint8_t * frame) uint8_t index = frame[3]; uint8_t modelId = frame[4]; + uint8_t length = min(frame[0] - 3, sizeof(PXX2HardwareInformation)); if (index == PXX2_HW_INFO_TX_ID && modelId < DIM(PXX2modulesModels)) { - memcpy(&destination->information, &frame[4], sizeof(PXX2HardwareInformation)); + memcpy(&destination->information, &frame[4], length); + if (destination->information.capabilities & ~((1 << RECEIVER_CAPABILITY_COUNT) - 1)) + destination->information.capabilityNotSupported = true; } else if (index < PXX2_MAX_RECEIVERS_PER_MODULE && modelId < DIM(PXX2receiversModels)) { - memcpy(&destination->receivers[index].information, &frame[4], sizeof(PXX2HardwareInformation)); + memcpy(&destination->receivers[index].information, &frame[4], length); destination->receivers[index].timestamp = get_tmr10ms(); + if (destination->receivers[index].information.capabilities & ~((1 << MODULE_CAPABILITY_COUNT) - 1)) + destination->information.capabilityNotSupported = true; + } } @@ -78,7 +84,7 @@ void processModuleSettingsFrame(uint8_t module, uint8_t * frame) destination->txPower = frame[5]; destination->state = PXX2_SETTINGS_OK; - destination->retryTime = 0; + destination->timeout = 0; moduleState[module].mode = MODULE_MODE_NORMAL; } @@ -88,23 +94,25 @@ void processReceiverSettingsFrame(uint8_t module, uint8_t * frame) return; } + ReceiverSettings * destination = moduleState[module].receiverSettings; + if (frame[4] & PXX2_RX_SETTINGS_FLAG1_FPORT) - reusableBuffer.hardwareAndSettings.receiverSettings.fport = 1; + destination->fport = 1; if (frame[4] & PXX2_RX_SETTINGS_FLAG1_FASTPWM) - reusableBuffer.hardwareAndSettings.receiverSettings.pwmRate = 1; + destination->pwmRate = 1; if (frame[4] & PXX2_RX_SETTINGS_FLAG1_TELEMETRY_DISABLED) - reusableBuffer.hardwareAndSettings.receiverSettings.telemetryDisabled = 1; + destination->telemetryDisabled = 1; uint8_t outputsCount = min(16, frame[0] - 4); - reusableBuffer.hardwareAndSettings.receiverSettings.outputsCount = outputsCount; + destination->outputsCount = outputsCount; for (uint8_t pin = 0; pin < outputsCount; pin++) { - reusableBuffer.hardwareAndSettings.receiverSettings.outputsMapping[pin] = frame[5 + pin]; + destination->outputsMapping[pin] = frame[5 + pin]; } - reusableBuffer.hardwareAndSettings.receiverSettings.state = PXX2_SETTINGS_OK; - reusableBuffer.hardwareAndSettings.receiverSettings.timeout = 0; + destination->state = PXX2_SETTINGS_OK; + destination->timeout = 0; moduleState[module].mode = MODULE_MODE_NORMAL; } diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 8110c2e81..336ee2cf5 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -253,6 +253,9 @@ const char STR_MENUGLOBALVARS[] = TR_MENUGLOBALVARS; const char STR_INTERNALRF[] = TR_INTERNALRF; const char STR_INTERNAL_MODULE[] = TR_INTERNAL_MODULE; const char STR_EXTERNAL_MODULE[] = TR_EXTERNAL_MODULE; +const char STR_OPENTX_UPGRADE_REQUIRED[] = TR_OPENTX_UPGRADE_REQUIRED; +const char STR_TELEMETRY_DISABLED[] = TR_TELEMETRY_DISABLED; +const char STR_MORE_OPTIONS_AVAILABLE[] = TR_MORE_OPTIONS_AVAILABLE; const char STR_NO_MODULE_INFORMATION[] = TR_NO_MODULE_INFORMATION; const char STR_EXTERNALRF[] = TR_EXTERNALRF; const char STR_MODULE_TELEMETRY[] = TR_MODULE_TELEMETRY; diff --git a/radio/src/translations.h b/radio/src/translations.h index 7ce699069..0553702c1 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -412,6 +412,9 @@ extern const char STR_BIND_OK[]; extern const char STR_INTERNALRF[]; extern const char STR_INTERNAL_MODULE[]; extern const char STR_EXTERNAL_MODULE[]; +extern const char STR_OPENTX_UPGRADE_REQUIRED[]; +extern const char STR_TELEMETRY_DISABLED[]; +extern const char STR_MORE_OPTIONS_AVAILABLE[]; extern const char STR_NO_MODULE_INFORMATION[]; extern const char STR_EXTERNALRF[]; extern const char STR_MODULE_TELEMETRY[]; diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index 7d8b129d7..7c1270848 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -892,6 +892,9 @@ #define TR_INTERNALRF "Vnitřní RF modul" #define TR_INTERNAL_MODULE "Internal module" #define TR_EXTERNAL_MODULE "External module" +#define TR_OPENTX_UPGRADE_REQUIRED "OpenTX upgrade required" +#define TR_TELEMETRY_DISABLED "Telem. disabled" +#define TR_MORE_OPTIONS_AVAILABLE "More options available" #define TR_NO_MODULE_INFORMATION "No module information" #define TR_EXTERNALRF "Externí RF modul" #define TR_FAILSAFE TR("Failsafe", "Mód Failsafe") diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index 3375660ae..a581a91d3 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -903,6 +903,9 @@ #define TR_INTERNALRF "Internes HF-Modul" #define TR_INTERNAL_MODULE "Internal module" #define TR_EXTERNAL_MODULE "External module" +#define TR_OPENTX_UPGRADE_REQUIRED "OpenTX upgrade required" +#define TR_TELEMETRY_DISABLED "Telem. disabled" +#define TR_MORE_OPTIONS_AVAILABLE "More options available" #define TR_NO_MODULE_INFORMATION "No module information" #define TR_EXTERNALRF "Externes HF-Modul" #define TR_FAILSAFE TR(INDENT "Failsafe", INDENT "Failsafe Mode") diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index 75cce82a3..d0ded1ce5 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -894,6 +894,9 @@ #define TR_INTERNALRF "Internal RF" #define TR_INTERNAL_MODULE "Internal module" #define TR_EXTERNAL_MODULE "External module" +#define TR_OPENTX_UPGRADE_REQUIRED "OpenTX upgrade required" +#define TR_TELEMETRY_DISABLED "Telem. disabled" +#define TR_MORE_OPTIONS_AVAILABLE "More options available" #define TR_NO_MODULE_INFORMATION "No module information" #define TR_EXTERNALRF "External RF" #define TR_FAILSAFE TR(INDENT "Failsafe", INDENT "Failsafe mode") diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index 01eba5457..782beb765 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -918,6 +918,9 @@ #define TR_INTERNALRF "Interna RF" #define TR_INTERNAL_MODULE "Internal module" #define TR_EXTERNAL_MODULE "External module" +#define TR_OPENTX_UPGRADE_REQUIRED "OpenTX upgrade required" +#define TR_TELEMETRY_DISABLED "Telem. disabled" +#define TR_MORE_OPTIONS_AVAILABLE "More options available" #define TR_NO_MODULE_INFORMATION "No module information" #define TR_EXTERNALRF "Externa RF" #define TR_FAILSAFE INDENT"Modo sgdad." diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index 8e17d59f4..bbf35a7c6 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -911,6 +911,9 @@ #define TR_INTERNALRF "Internal RF" #define TR_INTERNAL_MODULE "Internal module" #define TR_EXTERNAL_MODULE "External module" +#define TR_OPENTX_UPGRADE_REQUIRED "OpenTX upgrade required" +#define TR_TELEMETRY_DISABLED "Telem. disabled" +#define TR_MORE_OPTIONS_AVAILABLE "More options available" #define TR_NO_MODULE_INFORMATION "No module information" #define TR_EXTERNALRF "External RF" #define TR_FAILSAFE INDENT "Failsafe mode" diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index e9d77f915..a8a951449 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -913,6 +913,9 @@ #define TR_INTERNALRF "HF interne" #define TR_INTERNAL_MODULE "Internal module" #define TR_EXTERNAL_MODULE "External module" +#define TR_OPENTX_UPGRADE_REQUIRED "OpenTX upgrade required" +#define TR_TELEMETRY_DISABLED "Telem. disabled" +#define TR_MORE_OPTIONS_AVAILABLE "More options available" #define TR_NO_MODULE_INFORMATION "No module information" #define TR_EXTERNALRF "HF externe" #define TR_FAILSAFE TR(INDENT "Failsafe", INDENT "Type failsafe") diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index 29cf878c2..7b1b2b157 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -912,6 +912,9 @@ #define TR_INTERNALRF "Modulo Interno" #define TR_INTERNAL_MODULE "Internal module" #define TR_EXTERNAL_MODULE "External module" +#define TR_OPENTX_UPGRADE_REQUIRED "OpenTX upgrade required" +#define TR_TELEMETRY_DISABLED "Telem. disabled" +#define TR_MORE_OPTIONS_AVAILABLE "More options available" #define TR_NO_MODULE_INFORMATION "No module information" #define TR_EXTERNALRF "Modulo esterno" #define TR_FAILSAFE "Modo failsafe" diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index 8b1f8ffc5..9e2eaa0bc 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -901,6 +901,9 @@ TR_GYR_VSRCRAW #define TR_INTERNALRF "Interne RF" #define TR_INTERNAL_MODULE "Internal module" #define TR_EXTERNAL_MODULE "External module" +#define TR_OPENTX_UPGRADE_REQUIRED "OpenTX upgrade required" +#define TR_TELEMETRY_DISABLED "Telem. disabled" +#define TR_MORE_OPTIONS_AVAILABLE "More options available" #define TR_NO_MODULE_INFORMATION "No module information" #define TR_EXTERNALRF "Externe RF" #define TR_FAILSAFE TR(INDENT "Failsafe", INDENT "Failsafe Modus") diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index 33b3e4927..a1b82d84f 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -912,6 +912,9 @@ #define TR_INTERNALRF "Wewn.Moduł RF" #define TR_INTERNAL_MODULE "Internal module" #define TR_EXTERNAL_MODULE "External module" +#define TR_OPENTX_UPGRADE_REQUIRED "OpenTX upgrade required" +#define TR_TELEMETRY_DISABLED "Telem. disabled" +#define TR_MORE_OPTIONS_AVAILABLE "More options available" #define TR_NO_MODULE_INFORMATION "No module information" #define TR_EXTERNALRF "Zewn.Moduł RF" #define TR_FAILSAFE TR(INDENT"Failsafe",INDENT"Tryb Failsafe") diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index edcc4124f..c66343693 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -902,6 +902,9 @@ #define TR_INTERNALRF "Internal RF" #define TR_INTERNAL_MODULE "Internal module" #define TR_EXTERNAL_MODULE "External module" +#define TR_OPENTX_UPGRADE_REQUIRED "OpenTX upgrade required" +#define TR_TELEMETRY_DISABLED "Telem. disabled" +#define TR_MORE_OPTIONS_AVAILABLE "More options available" #define TR_NO_MODULE_INFORMATION "No module information" #define TR_EXTERNALRF "External RF" #define TR_FAILSAFE "Failsafe mode" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index 3819569e2..170456051 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -912,6 +912,9 @@ #define TR_INTERNALRF "Intern Radio" #define TR_INTERNAL_MODULE "Internal module" #define TR_EXTERNAL_MODULE "External module" +#define TR_OPENTX_UPGRADE_REQUIRED "OpenTX upgrade required" +#define TR_TELEMETRY_DISABLED "Telem. disabled" +#define TR_MORE_OPTIONS_AVAILABLE "More options available" #define TR_NO_MODULE_INFORMATION "No module information" #define TR_EXTERNALRF "Extern Radiomodul" #define TR_FAILSAFE TR(INDENT "Failsafe", INDENT "Failsafeläge") diff --git a/radio/src/translations/untranslated.h b/radio/src/translations/untranslated.h index 4d8d7acd7..6474b0830 100644 --- a/radio/src/translations/untranslated.h +++ b/radio/src/translations/untranslated.h @@ -89,7 +89,7 @@ #endif #define LEN_EXTERNAL_MODULE_PROTOCOLS "\014" -#define TR_EXTERNAL_MODULE_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""ISRM\0 ""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M ACCESS\0 " TR_MODULE_R9M_LITE "R9ML ACCESS\0""R9MLP\0 ""R9MLP ACCESS""SBUS" +#define TR_EXTERNAL_MODULE_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""ISRM\0 ""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M ACCESS\0 " TR_MODULE_R9M_LITE "R9ML ACCESS\0""R9MLP\0 ""R9MLP ACCESS""SBUS\0 ""XJT Lite" #define LEN_INTERNAL_MODULE_PROTOCOLS LEN_EXTERNAL_MODULE_PROTOCOLS #define TR_INTERNAL_MODULE_PROTOCOLS TR_EXTERNAL_MODULE_PROTOCOLS @@ -102,7 +102,7 @@ #define TR_ISRM_PXX2_RF_PROTOCOLS "ACCESS""D16\0 ""LR12" #else #define LEN_ISRM_PXX2_RF_PROTOCOLS "\012" -#define TR_ISRM_PXX2_RF_PROTOCOLS "OFF\0 ""ACCESS\0 ""ACCST D16\0""ACCST LR12" +#define TR_ISRM_PXX2_RF_PROTOCOLS "OFF\0 ""ACCESS\0 ""ACCST D16\0""ACCST LR12""ACCST D8" #endif #define LEN_R9M_PXX2_RF_PROTOCOLS "\006" @@ -112,10 +112,10 @@ #define TR_R9M_REGION "FCC\0 ""EU\0 ""868MHz""915MHz" #define LEN_R9M_LITE_FCC_POWER_VALUES "\010" -#define TR_R9M_LITE_FCC_POWER_VALUES "(100 mW)" +#define TR_R9M_LITE_FCC_POWER_VALUES "(100mW)" -#define LEN_R9M_LITE_LBT_POWER_VALUES "\015" -#define TR_R9M_LITE_LBT_POWER_VALUES "25 mW 8ch\0 ""25 mW 16ch\0 ""100mW no tele" +#define LEN_R9M_LITE_LBT_POWER_VALUES "\017" +#define TR_R9M_LITE_LBT_POWER_VALUES "25mW 8CH Tel\0 ""100mW 8CH NoTel" #define LEN_R9M_FCC_POWER_VALUES "\012" #define TR_R9M_FCC_POWER_VALUES "10 mW\0 " "100 mW\0 " "500 mW\0 " "1 W (auto)" diff --git a/tools/build-frsky.py b/tools/build-frsky.py index 7d1efd68f..40defde8e 100755 --- a/tools/build-frsky.py +++ b/tools/build-frsky.py @@ -15,7 +15,7 @@ options = { "AUTOUPDATE": "YES", "PXX1": "YES", "XJT": "NO", - "R9M_SIZE_STD": "NO", + "MODULE_SIZE_STD": "NO", "PPM": "NO", "DSM2": "NO", "CROSSFIRE": "NO", @@ -27,7 +27,7 @@ options = { "AUTOUPDATE": "YES", "PXX1": "YES", "XJT": "NO", - "R9M_SIZE_STD": "NO", + "MODULE_SIZE_STD": "NO", "PPM": "NO", "DSM2": "NO", "CROSSFIRE": "NO",