diff --git a/companion/src/firmwares/opentx/opentxinterface.cpp b/companion/src/firmwares/opentx/opentxinterface.cpp index 7f9857cd9..5b51dc0a7 100644 --- a/companion/src/firmwares/opentx/opentxinterface.cpp +++ b/companion/src/firmwares/opentx/opentxinterface.cpp @@ -1154,6 +1154,7 @@ void addOpenTxFrskyOptions(OpenTxFirmware * firmware) firmware->addOption("nogvars", QObject::tr("Disable Global variables")); firmware->addOption("lua", QObject::tr("Support for Lua model scripts")); firmware->addOption("luac", QObject::tr("Enable Lua compiler")); + firmware->addOption("bindopt", QObject::tr("Enable bindings options")); Option usb_options[] = {{"massstorage", QObject::tr("Instead of Joystick emulation, USB connection is Mass Storage (as in the Bootloader)")}, {"cli", QObject::tr("Instead of Joystick emulation, USB connection is Command Line Interface")}, {NULL}}; diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index f8b1773e3..947b883bf 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -39,6 +39,7 @@ option(FAS_PROTOTYPE "Support of old FAS prototypes (different resistors)" OFF) option(TEMPLATES "Model templates menu" OFF) option(TRACE_SIMPGMSPACE "Turn on traces in simpgmspace.cpp" ON) option(TRACE_LUA_INTERNALS "Turn on traces for Lua internals" OFF) +option(BINDING_OPTIONS "Allow advanced frsky bindings" OFF) # since we reset all default CMAKE compiler flags for firmware builds, provide an alternate way for user to specify additional flags. set(FIRMWARE_C_FLAGS "" CACHE STRING "Additional flags for firmware target c compiler (note: all CMAKE_C_FLAGS[_*] are ignored for firmware/bootloader).") @@ -326,6 +327,10 @@ if(TRACE_LUA_INTERNALS) add_definitions(-DTRACE_LUA_INTERNALS_ENABLED) endif() +if(BINDING_OPTIONS) + add_definitions(-DBINDING_OPTIONS) +endif() + if(EEPROM_VARIANT_NEEDED) add_definitions(-DEEPROM_VARIANT=${EEPROM_VARIANT}) endif() diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h index 3f6436560..db05a1583 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -676,7 +676,9 @@ PACK(struct ModuleData { int8_t optionValue; } multi); NOBACKUP(struct { - uint8_t spare:6; + uint8_t spare:4; + uint8_t receiver_telem_off:1; // false = receiver telem enabled + uint8_t receiver_channel_9_16:1; // false = pwm out 1-8, true 9-16 uint8_t external_antenna:1; // false = internal antenna, true = external antenna uint8_t spare2:1; uint8_t spare3; @@ -1086,7 +1088,7 @@ static inline void check_struct() CHKSIZE(RadioData, 850); CHKSIZE(ModelData, 6025); - + #elif defined(PCBTARANIS) CHKSIZE(MixData, 22); CHKSIZE(ExpoData, 19); diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index 411401187..2bdd0944f 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -171,6 +171,33 @@ enum MenuModelSetupItems { #define MODEL_SETUP_MAX_LINES ((IS_PPM_PROTOCOL(protocol)||IS_DSM2_PROTOCOL(protocol)||IS_PXX_PROTOCOL(protocol)) ? HEADER_LINE+ITEM_MODEL_SETUP_MAX : HEADER_LINE+ITEM_MODEL_SETUP_MAX-1) #endif +#if defined(BINDING_OPTIONS) +void onBindMenu(const char * result) +{ + if (result == STR_BINDING_1_8_TELEM_ON) { + g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off = false; + g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 = false; + } + else if (result == STR_BINDING_1_8_TELEM_OFF) { + g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off = true; + g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 = false; + } + else if (result == STR_BINDING_9_16_TELEM_ON) { + g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off = false; + g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 = true; + } + else if (result == STR_BINDING_9_16_TELEM_OFF) { + g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off = true; + g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 = true; + } + else { + return; + } + + moduleFlag[INTERNAL_MODULE] = MODULE_BIND; +} +#endif + void menuModelSetup(event_t event) { #if defined(PCBX7) @@ -870,11 +897,37 @@ void menuModelSetup(event_t event) s_editMode=0; } #endif +#if defined(BINDING_OPTIONS) + if (attr && l_posHorz>0) { + if(s_editMode>0) { + if (l_posHorz == 1) { + if (IS_MODULE_XJT(moduleIdx) && g_model.moduleData[moduleIdx].rfProtocol== RF_PROTO_X16 && s_current_protocol[INTERNAL_MODULE] == PROTO_PXX) { + if(event==EVT_KEY_BREAK(KEY_ENTER)) { + POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_ON); + POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_OFF); + POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_ON); + POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_OFF); + POPUP_MENU_SELECT_ITEM(g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off + (g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 << 1)); + POPUP_MENU_START(onBindMenu); + continue; + } + if (moduleFlag[INTERNAL_MODULE] == MODULE_BIND) + newFlag = MODULE_BIND; + } + else { + newFlag = MODULE_BIND; + } + } + else if (l_posHorz == 2) { + newFlag = MODULE_RANGECHECK; + } +#else if (attr && l_posHorz>0 && s_editMode>0) { if (l_posHorz == 1) newFlag = MODULE_BIND; else if (l_posHorz == 2) { newFlag = MODULE_RANGECHECK; +#endif } } moduleFlag[moduleIdx] = newFlag; diff --git a/radio/src/gui/128x64/popups.h b/radio/src/gui/128x64/popups.h index edd1af77c..3445073ae 100644 --- a/radio/src/gui/128x64/popups.h +++ b/radio/src/gui/128x64/popups.h @@ -73,6 +73,7 @@ extern uint8_t warningInfoFlags; #if defined(CPUARM) #define NAVIGATION_MENUS #define POPUP_MENU_ADD_ITEM(s) do { popupMenuOffsetType = MENU_OFFSET_INTERNAL; if (popupMenuNoItems < POPUP_MENU_MAX_LINES) popupMenuItems[popupMenuNoItems++] = s; } while (0) + #define POPUP_MENU_SELECT_ITEM(s) s_menu_item = (s > 0 ? (s < popupMenuNoItems ? s : popupMenuNoItems) : 0) #define POPUP_MENU_START(func) do { popupMenuHandler = (func); AUDIO_KEY_PRESS(); } while (0) #define POPUP_MENU_MAX_LINES 12 #define MENU_MAX_DISPLAY_LINES 6 @@ -84,6 +85,7 @@ extern uint8_t warningInfoFlags; MENU_OFFSET_EXTERNAL }; extern uint8_t popupMenuOffsetType; + extern uint8_t s_menu_item; #elif defined(SDCARD) || (defined(ROTARY_ENCODER_NAVIGATION) && !defined(CPUM64)) #define NAVIGATION_MENUS #define POPUP_MENU_ADD_ITEM(s) do { if (popupMenuNoItems < POPUP_MENU_MAX_LINES) popupMenuItems[popupMenuNoItems++] = s; } while (0) diff --git a/radio/src/gui/212x64/model_setup.cpp b/radio/src/gui/212x64/model_setup.cpp index f21c838be..1627f0c95 100644 --- a/radio/src/gui/212x64/model_setup.cpp +++ b/radio/src/gui/212x64/model_setup.cpp @@ -101,6 +101,33 @@ enum MenuModelSetupItems { #define MODEL_SETUP_RANGE_OFS 7*FW #define MODEL_SETUP_SET_FAILSAFE_OFS 10*FW-2 +#if defined(BINDING_OPTIONS) +void onBindMenu(const char * result) +{ + if (result == STR_BINDING_1_8_TELEM_ON) { + g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off = false; + g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 = false; + } + else if (result == STR_BINDING_1_8_TELEM_OFF) { + g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off = true; + g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 = false; + } + else if (result == STR_BINDING_9_16_TELEM_ON) { + g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off = false; + g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 = true; + } + else if (result == STR_BINDING_9_16_TELEM_OFF) { + g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off = true; + g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 = true; + } + else { + return; + } + + moduleFlag[INTERNAL_MODULE] = MODULE_BIND; +} +#endif + void copySelection(char * dst, const char * src, uint8_t size) { if (memcmp(src, "---", 3) == 0) @@ -884,11 +911,37 @@ void menuModelSetup(event_t event) s_editMode=0; } #endif +#if defined(BINDING_OPTIONS) + if (attr && l_posHorz>0) { + if(s_editMode>0) { + if (l_posHorz == 1) { + if (IS_MODULE_XJT(moduleIdx) && g_model.moduleData[moduleIdx].rfProtocol== RF_PROTO_X16 && s_current_protocol[INTERNAL_MODULE] == PROTO_PXX) { + if(event==EVT_KEY_BREAK(KEY_ENTER)) { + POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_ON); + POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_OFF); + POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_ON); + POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_OFF); + POPUP_MENU_SELECT_ITEM(g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off + (g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 << 1)); + POPUP_MENU_START(onBindMenu); + continue; + } + if (moduleFlag[INTERNAL_MODULE] == MODULE_BIND) + newFlag = MODULE_BIND; + } + else { + newFlag = MODULE_BIND; + } + } + else if (l_posHorz == 2) { + newFlag = MODULE_RANGECHECK; + } +#else if (attr && l_posHorz>0 && s_editMode>0) { if (l_posHorz == 1) newFlag = MODULE_BIND; else if (l_posHorz == 2) { newFlag = MODULE_RANGECHECK; +#endif } } moduleFlag[moduleIdx] = newFlag; diff --git a/radio/src/gui/212x64/popups.h b/radio/src/gui/212x64/popups.h index 1cefa25b0..06d1be6d7 100644 --- a/radio/src/gui/212x64/popups.h +++ b/radio/src/gui/212x64/popups.h @@ -48,6 +48,7 @@ extern uint8_t warningInfoFlags; #define NAVIGATION_MENUS #define POPUP_MENU_ADD_ITEM(s) do { popupMenuOffsetType = MENU_OFFSET_INTERNAL; if (popupMenuNoItems < POPUP_MENU_MAX_LINES) popupMenuItems[popupMenuNoItems++] = s; } while (0) +#define POPUP_MENU_SELECT_ITEM(s) s_menu_item = (s > 0 ? (s < popupMenuNoItems ? s : popupMenuNoItems) : 0) #define POPUP_MENU_START(func) do { popupMenuHandler = (func); AUDIO_KEY_PRESS(); } while (0) #define POPUP_MENU_MAX_LINES 12 #define MENU_MAX_DISPLAY_LINES 6 @@ -62,6 +63,7 @@ enum { MENU_OFFSET_EXTERNAL }; extern uint8_t popupMenuOffsetType; +extern uint8_t s_menu_item; const char * runPopupMenu(event_t event); extern void (*popupMenuHandler)(const char * result); diff --git a/radio/src/gui/480x272/menus.h b/radio/src/gui/480x272/menus.h index 92a8cbe3c..c535783fe 100644 --- a/radio/src/gui/480x272/menus.h +++ b/radio/src/gui/480x272/menus.h @@ -483,6 +483,7 @@ extern uint8_t warningInfoFlags; #define NAVIGATION_MENUS #define POPUP_MENU_ADD_ITEM(s) do { popupMenuOffsetType = MENU_OFFSET_INTERNAL; if (popupMenuNoItems < POPUP_MENU_MAX_LINES) popupMenuItems[popupMenuNoItems++] = s; } while (0) +#define POPUP_MENU_SELECT_ITEM(s) s_menu_item = (s > 0 ? (s < popupMenuNoItems ? s : popupMenuNoItems) : 0) #define POPUP_MENU_START(func) do { popupMenuHandler = (func); AUDIO_KEY_PRESS(); } while(0) #define POPUP_MENU_MAX_LINES 12 #define MENU_MAX_DISPLAY_LINES 9 @@ -496,6 +497,7 @@ enum { MENU_OFFSET_EXTERNAL }; extern uint8_t popupMenuOffsetType; +extern uint8_t s_menu_item; const char * runPopupMenu(event_t event); extern void (*popupMenuHandler)(const char * result); diff --git a/radio/src/gui/480x272/model_setup.cpp b/radio/src/gui/480x272/model_setup.cpp index 4261cf6bf..aa5c01ade 100644 --- a/radio/src/gui/480x272/model_setup.cpp +++ b/radio/src/gui/480x272/model_setup.cpp @@ -94,6 +94,33 @@ enum MenuModelSetupItems { #define MODEL_SETUP_SET_FAILSAFE_OFS 100 #define MODEL_SETUP_SLIDPOT_SPACING 45 +#if defined(BINDING_OPTIONS) +void onBindMenu(const char * result) +{ + if (result == STR_BINDING_1_8_TELEM_ON) { + g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off = false; + g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 = false; + } + else if (result == STR_BINDING_1_8_TELEM_OFF) { + g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off = true; + g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 = false; + } + else if (result == STR_BINDING_9_16_TELEM_ON) { + g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off = false; + g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 = true; + } + else if (result == STR_BINDING_9_16_TELEM_OFF) { + g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off = true; + g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 = true; + } + else { + return; + } + + moduleFlag[INTERNAL_MODULE] = MODULE_BIND; +} +#endif + void onModelSetupBitmapMenu(const char * result) { if (result == STR_UPDATE_LIST) { @@ -794,11 +821,37 @@ bool menuModelSetup(event_t event) s_editMode=0; } #endif +#if defined(BINDING_OPTIONS) + if (attr && l_posHorz>0) { + if(s_editMode>0) { + if (l_posHorz == 1) { + if (IS_MODULE_XJT(moduleIdx) && g_model.moduleData[moduleIdx].rfProtocol== RF_PROTO_X16 && s_current_protocol[INTERNAL_MODULE] == PROTO_PXX) { + if(event==EVT_KEY_BREAK(KEY_ENTER)) { + POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_ON); + POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_OFF); + POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_ON); + POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_OFF); + POPUP_MENU_SELECT_ITEM(g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off + (g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 << 1)); + POPUP_MENU_START(onBindMenu); + continue; + } + if (moduleFlag[INTERNAL_MODULE] == MODULE_BIND) + newFlag = MODULE_BIND; + } + else { + newFlag = MODULE_BIND; + } + } + else if (l_posHorz == 2) { + newFlag = MODULE_RANGECHECK; + } +#else if (attr && l_posHorz>0 && s_editMode>0) { if (l_posHorz == 1) newFlag = MODULE_BIND; else if (l_posHorz == 2) { newFlag = MODULE_RANGECHECK; +#endif } } moduleFlag[moduleIdx] = newFlag; diff --git a/radio/src/pulses/pxx_arm.cpp b/radio/src/pulses/pxx_arm.cpp index 10ddcb755..cbb4f4585 100644 --- a/radio/src/pulses/pxx_arm.cpp +++ b/radio/src/pulses/pxx_arm.cpp @@ -372,7 +372,18 @@ void setupPulsesPXX(uint8_t port) pulseValueLow = pulseValue; } } - +#if defined(BINDING_OPTIONS) +/* Ext. flag (holds antenna selection on Horus internal module, 0x00 otherwise) */ +uint8_t extra_flags = XJT_INTERNAL_ANTENNA; + if (port == INTERNAL_MODULE) { +#if defined(PCBHORUS) + extra_flags = g_model.moduleData[INTERNAL_MODULE].pxx.external_antenna; +#endif + extra_flags |= g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off << 1; + extra_flags |= g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 << 2; +} +putPcmByte(port, extra_flags); +#else //BINDING_OPTIONS /* Ext. flag (holds antenna selection on Horus internal module, 0x00 otherwise) */ #if defined(PCBHORUS) uint8_t antenna = XJT_INTERNAL_ANTENNA; @@ -382,6 +393,7 @@ void setupPulsesPXX(uint8_t port) putPcmByte(port, antenna); #else putPcmByte(port, 0); +#endif #endif /* CRC */ diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 734ff6d69..cd52abfb7 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -592,6 +592,10 @@ const pm_char STR_BLCOLOR[] PROGMEM = TR_BLCOLOR; #if defined(CPUARM) const pm_char STR_TRAINER[] PROGMEM = TR_TRAINER; const pm_char STR_MODULE_BIND[] PROGMEM = TR_MODULE_BIND; + const pm_char STR_BINDING_1_8_TELEM_ON[] PROGMEM = TR_BINDING_MODE1; + const pm_char STR_BINDING_1_8_TELEM_OFF[] PROGMEM = TR_BINDING_MODE2; + const pm_char STR_BINDING_9_16_TELEM_ON[] PROGMEM = TR_BINDING_MODE3; + const pm_char STR_BINDING_9_16_TELEM_OFF[] PROGMEM = TR_BINDING_MODE4; 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 ef2a144e8..5b8682e55 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -874,6 +874,10 @@ extern const pm_char STR_BLCOLOR[]; #if defined(CPUARM) extern const pm_char STR_TRAINER[]; extern const pm_char STR_MODULE_BIND[]; + extern const pm_char STR_BINDING_1_8_TELEM_ON[]; + 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_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 de38bbd6f..f2554a0d4 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -850,6 +850,10 @@ #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_BINDING TR("Bind...","Binding") +#define TR_BINDING_MODE1 "Ch1-8 Telem ON" +#define TR_BINDING_MODE2 "Ch1-8 Telem OFF" +#define TR_BINDING_MODE3 "Ch9-16 Telem ON" +#define TR_BINDING_MODE4 "Ch9-16 Telem OFF" #define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index 1c392d226..7fa28cd92 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -875,6 +875,10 @@ #define TR_MODULE_NO_INPUT TR("No input", "No serial input") #define TR_MODULE_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)") #define TR_MODULE_BINDING "Binding" +#define TR_BINDING_MODE1 "Ch1-8 Telem ON" +#define TR_BINDING_MODE2 "Ch1-8 Telem OFF" +#define TR_BINDING_MODE3 "Ch9-16 Telem ON" +#define TR_BINDING_MODE4 "Ch9-16 Telem OFF" #define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index 96ef02ade..4028dede7 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -853,6 +853,10 @@ #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_BINDING TR("Bind...","Binding") +#define TR_BINDING_MODE1 "Ch1-8 Telem ON" +#define TR_BINDING_MODE2 "Ch1-8 Telem OFF" +#define TR_BINDING_MODE3 "Ch9-16 Telem ON" +#define TR_BINDING_MODE4 "Ch9-16 Telem OFF" #define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index fdef4d0b8..a08e60f14 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -827,6 +827,10 @@ #define TR_MODULE_NO_INPUT TR("No input", "No serial input") #define TR_MODULE_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)") #define TR_MODULE_BINDING "Binding" +#define TR_BINDING_MODE1 "Ch1-8 Telem ON" +#define TR_BINDING_MODE2 "Ch1-8 Telem OFF" +#define TR_BINDING_MODE3 "Ch9-16 Telem ON" +#define TR_BINDING_MODE4 "Ch9-16 Telem OFF" #define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index 61b6c7596..4248c29c9 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -823,6 +823,10 @@ #define TR_MODULE_NO_INPUT TR("No input", "No serial input") #define TR_MODULE_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)") #define TR_MODULE_BINDING "Binding" +#define TR_BINDING_MODE1 "Ch1-8 Telem ON" +#define TR_BINDING_MODE2 "Ch1-8 Telem OFF" +#define TR_BINDING_MODE3 "Ch9-16 Telem ON" +#define TR_BINDING_MODE4 "Ch9-16 Telem OFF" #define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index 23fd21b1b..6dfbc3fb4 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -857,6 +857,10 @@ #define TR_MODULE_NO_INPUT TR("Pas de sign.", "Aucun signal série") #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_BINDING "Bind..." +#define TR_BINDING_MODE1 "Ch1-8 Telem ON" +#define TR_BINDING_MODE2 "Ch1-8 Telem OFF" +#define TR_BINDING_MODE3 "Ch9-16 Telem ON" +#define TR_BINDING_MODE4 "Ch9-16 Telem OFF" #define TR_PROTOCOL_INVALID TR("Sél. invalide", "Protocole invalide") #define TR_MODULE_STATUS TR(INDENT "Etat", INDENT "Etat module") #define TR_MULTI_SERVOFREQ TR(INDENT "Fréq.servo", INDENT "Fréquence servos") diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index 044b9f484..8d6672ffb 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -858,6 +858,10 @@ #define TR_MODULE_NO_INPUT TR("No input", "No serial input") #define TR_MODULE_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)") #define TR_MODULE_BINDING "Binding" +#define TR_BINDING_MODE1 "Ch1-8 Telem ON" +#define TR_BINDING_MODE2 "Ch1-8 Telem OFF" +#define TR_BINDING_MODE3 "Ch9-16 Telem ON" +#define TR_BINDING_MODE4 "Ch9-16 Telem OFF" #define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index b061bc961..433746795 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -852,6 +852,10 @@ #define TR_MODULE_NO_INPUT TR("No input", "No serial input") #define TR_MODULE_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)") #define TR_MODULE_BINDING "Binding" +#define TR_BINDING_MODE1 "Ch1-8 Telem ON" +#define TR_BINDING_MODE2 "Ch1-8 Telem OFF" +#define TR_BINDING_MODE3 "Ch9-16 Telem ON" +#define TR_BINDING_MODE4 "Ch9-16 Telem OFF" #define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index 3f6514fb8..99d5cb577 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -860,6 +860,10 @@ #define TR_MODULE_NO_INPUT TR("No input", "No serial input") #define TR_MODULE_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)") #define TR_MODULE_BINDING "Binding" +#define TR_BINDING_MODE1 "Ch1-8 Telem ON" +#define TR_BINDING_MODE2 "Ch1-8 Telem OFF" +#define TR_BINDING_MODE3 "Ch9-16 Telem ON" +#define TR_BINDING_MODE4 "Ch9-16 Telem OFF" #define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index ee124581e..88b42c660 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -821,6 +821,10 @@ #define TR_MODULE_NO_INPUT TR("No input", "No serial input") #define TR_MODULE_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)") #define TR_MODULE_BINDING "Binding" +#define TR_BINDING_MODE1 "Ch1-8 Telem ON" +#define TR_BINDING_MODE2 "Ch1-8 Telem OFF" +#define TR_BINDING_MODE3 "Ch9-16 Telem ON" +#define TR_BINDING_MODE4 "Ch9-16 Telem OFF" #define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index 622e94763..759ce2a2d 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -872,6 +872,10 @@ #define TR_MODULE_NO_INPUT TR("No input", "No serial input") #define TR_MODULE_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)") #define TR_MODULE_BINDING "Binding" +#define TR_BINDING_MODE1 "Ch1-8 Telem ON" +#define TR_BINDING_MODE2 "Ch1-8 Telem OFF" +#define TR_BINDING_MODE3 "Ch9-16 Telem ON" +#define TR_BINDING_MODE4 "Ch9-16 Telem OFF" #define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") diff --git a/radio/util/fwoptions.py b/radio/util/fwoptions.py index 2136568c9..54aa307d9 100755 --- a/radio/util/fwoptions.py +++ b/radio/util/fwoptions.py @@ -247,7 +247,8 @@ options_taranis = { "internalppm": ("TARANIS_INTERNAL_PPM", "YES", "NO"), "shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"), "eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"), - "multimodule": ("MULTIMODULE", "YES", "NO") + "multimodule": ("MULTIMODULE", "YES", "NO"), + "bindopt": ("BINDING_OPTIONS", "YES", "NO") } options_taranisplus = { @@ -266,7 +267,8 @@ options_taranisplus = { "internalppm": ("TARANIS_INTERNAL_PPM", "YES", "NO"), "shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"), "eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"), - "multimodule": ("MULTIMODULE", "YES", "NO") + "multimodule": ("MULTIMODULE", "YES", "NO"), + "bindopt": ("BINDING_OPTIONS", "YES", "NO") } options_taranisx9e = { @@ -286,7 +288,8 @@ options_taranisx9e = { "shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"), "eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"), "horussticks": ("STICKS", "HORUS", "STANDARD"), - "multimodule": ("MULTIMODULE", "YES", "NO") + "multimodule": ("MULTIMODULE", "YES", "NO"), + "bindopt": ("BINDING_OPTIONS", "YES", "NO") } options_x12s = { @@ -303,6 +306,7 @@ options_x12s = { "eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"), "multimodule": ("MULTIMODULE", "YES", "NO"), "pcbdev": ("PCBREV", "10", None), + "bindopt": ("BINDING_OPTIONS", "YES", "NO") } options_x10 = { @@ -318,4 +322,5 @@ options_x10 = { "cli": ("USB", "SERIAL", None), "eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"), "multimodule": ("MULTIMODULE", "YES", "NO"), + "bindopt": ("BINDING_OPTIONS", "YES", "NO") }