1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-20 06:45:10 +03:00

Enable set binding mode as a firmware option for frsky radios (#4743)

* Enable set binding mode as a firmware option for frsky radios

* Improvements based on Bertrand's comments

* Last feedbacks
This commit is contained in:
3djc 2017-04-06 22:36:10 +02:00 committed by Bertrand Songis
parent 8794f45816
commit 3a8f9adb4d
24 changed files with 248 additions and 6 deletions

View file

@ -1154,6 +1154,7 @@ void addOpenTxFrskyOptions(OpenTxFirmware * firmware)
firmware->addOption("nogvars", QObject::tr("Disable Global variables")); firmware->addOption("nogvars", QObject::tr("Disable Global variables"));
firmware->addOption("lua", QObject::tr("Support for Lua model scripts")); firmware->addOption("lua", QObject::tr("Support for Lua model scripts"));
firmware->addOption("luac", QObject::tr("Enable Lua compiler")); 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)")}, 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")}, {"cli", QObject::tr("Instead of Joystick emulation, USB connection is Command Line Interface")},
{NULL}}; {NULL}};

View file

@ -39,6 +39,7 @@ option(FAS_PROTOTYPE "Support of old FAS prototypes (different resistors)" OFF)
option(TEMPLATES "Model templates menu" OFF) option(TEMPLATES "Model templates menu" OFF)
option(TRACE_SIMPGMSPACE "Turn on traces in simpgmspace.cpp" ON) option(TRACE_SIMPGMSPACE "Turn on traces in simpgmspace.cpp" ON)
option(TRACE_LUA_INTERNALS "Turn on traces for Lua internals" OFF) 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. # 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).") 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) add_definitions(-DTRACE_LUA_INTERNALS_ENABLED)
endif() endif()
if(BINDING_OPTIONS)
add_definitions(-DBINDING_OPTIONS)
endif()
if(EEPROM_VARIANT_NEEDED) if(EEPROM_VARIANT_NEEDED)
add_definitions(-DEEPROM_VARIANT=${EEPROM_VARIANT}) add_definitions(-DEEPROM_VARIANT=${EEPROM_VARIANT})
endif() endif()

View file

@ -676,7 +676,9 @@ PACK(struct ModuleData {
int8_t optionValue; int8_t optionValue;
} multi); } multi);
NOBACKUP(struct { 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 external_antenna:1; // false = internal antenna, true = external antenna
uint8_t spare2:1; uint8_t spare2:1;
uint8_t spare3; uint8_t spare3;

View file

@ -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) #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 #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) void menuModelSetup(event_t event)
{ {
#if defined(PCBX7) #if defined(PCBX7)
@ -870,11 +897,37 @@ void menuModelSetup(event_t event)
s_editMode=0; s_editMode=0;
} }
#endif #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 (attr && l_posHorz>0 && s_editMode>0) {
if (l_posHorz == 1) if (l_posHorz == 1)
newFlag = MODULE_BIND; newFlag = MODULE_BIND;
else if (l_posHorz == 2) { else if (l_posHorz == 2) {
newFlag = MODULE_RANGECHECK; newFlag = MODULE_RANGECHECK;
#endif
} }
} }
moduleFlag[moduleIdx] = newFlag; moduleFlag[moduleIdx] = newFlag;

View file

@ -73,6 +73,7 @@ extern uint8_t warningInfoFlags;
#if defined(CPUARM) #if defined(CPUARM)
#define NAVIGATION_MENUS #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_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_START(func) do { popupMenuHandler = (func); AUDIO_KEY_PRESS(); } while (0)
#define POPUP_MENU_MAX_LINES 12 #define POPUP_MENU_MAX_LINES 12
#define MENU_MAX_DISPLAY_LINES 6 #define MENU_MAX_DISPLAY_LINES 6
@ -84,6 +85,7 @@ extern uint8_t warningInfoFlags;
MENU_OFFSET_EXTERNAL MENU_OFFSET_EXTERNAL
}; };
extern uint8_t popupMenuOffsetType; extern uint8_t popupMenuOffsetType;
extern uint8_t s_menu_item;
#elif defined(SDCARD) || (defined(ROTARY_ENCODER_NAVIGATION) && !defined(CPUM64)) #elif defined(SDCARD) || (defined(ROTARY_ENCODER_NAVIGATION) && !defined(CPUM64))
#define NAVIGATION_MENUS #define NAVIGATION_MENUS
#define POPUP_MENU_ADD_ITEM(s) do { if (popupMenuNoItems < POPUP_MENU_MAX_LINES) popupMenuItems[popupMenuNoItems++] = s; } while (0) #define POPUP_MENU_ADD_ITEM(s) do { if (popupMenuNoItems < POPUP_MENU_MAX_LINES) popupMenuItems[popupMenuNoItems++] = s; } while (0)

View file

@ -101,6 +101,33 @@ enum MenuModelSetupItems {
#define MODEL_SETUP_RANGE_OFS 7*FW #define MODEL_SETUP_RANGE_OFS 7*FW
#define MODEL_SETUP_SET_FAILSAFE_OFS 10*FW-2 #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) void copySelection(char * dst, const char * src, uint8_t size)
{ {
if (memcmp(src, "---", 3) == 0) if (memcmp(src, "---", 3) == 0)
@ -884,11 +911,37 @@ void menuModelSetup(event_t event)
s_editMode=0; s_editMode=0;
} }
#endif #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 (attr && l_posHorz>0 && s_editMode>0) {
if (l_posHorz == 1) if (l_posHorz == 1)
newFlag = MODULE_BIND; newFlag = MODULE_BIND;
else if (l_posHorz == 2) { else if (l_posHorz == 2) {
newFlag = MODULE_RANGECHECK; newFlag = MODULE_RANGECHECK;
#endif
} }
} }
moduleFlag[moduleIdx] = newFlag; moduleFlag[moduleIdx] = newFlag;

View file

@ -48,6 +48,7 @@ extern uint8_t warningInfoFlags;
#define NAVIGATION_MENUS #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_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_START(func) do { popupMenuHandler = (func); AUDIO_KEY_PRESS(); } while (0)
#define POPUP_MENU_MAX_LINES 12 #define POPUP_MENU_MAX_LINES 12
#define MENU_MAX_DISPLAY_LINES 6 #define MENU_MAX_DISPLAY_LINES 6
@ -62,6 +63,7 @@ enum {
MENU_OFFSET_EXTERNAL MENU_OFFSET_EXTERNAL
}; };
extern uint8_t popupMenuOffsetType; extern uint8_t popupMenuOffsetType;
extern uint8_t s_menu_item;
const char * runPopupMenu(event_t event); const char * runPopupMenu(event_t event);
extern void (*popupMenuHandler)(const char * result); extern void (*popupMenuHandler)(const char * result);

View file

@ -483,6 +483,7 @@ extern uint8_t warningInfoFlags;
#define NAVIGATION_MENUS #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_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_START(func) do { popupMenuHandler = (func); AUDIO_KEY_PRESS(); } while(0)
#define POPUP_MENU_MAX_LINES 12 #define POPUP_MENU_MAX_LINES 12
#define MENU_MAX_DISPLAY_LINES 9 #define MENU_MAX_DISPLAY_LINES 9
@ -496,6 +497,7 @@ enum {
MENU_OFFSET_EXTERNAL MENU_OFFSET_EXTERNAL
}; };
extern uint8_t popupMenuOffsetType; extern uint8_t popupMenuOffsetType;
extern uint8_t s_menu_item;
const char * runPopupMenu(event_t event); const char * runPopupMenu(event_t event);
extern void (*popupMenuHandler)(const char * result); extern void (*popupMenuHandler)(const char * result);

View file

@ -94,6 +94,33 @@ enum MenuModelSetupItems {
#define MODEL_SETUP_SET_FAILSAFE_OFS 100 #define MODEL_SETUP_SET_FAILSAFE_OFS 100
#define MODEL_SETUP_SLIDPOT_SPACING 45 #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) void onModelSetupBitmapMenu(const char * result)
{ {
if (result == STR_UPDATE_LIST) { if (result == STR_UPDATE_LIST) {
@ -794,11 +821,37 @@ bool menuModelSetup(event_t event)
s_editMode=0; s_editMode=0;
} }
#endif #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 (attr && l_posHorz>0 && s_editMode>0) {
if (l_posHorz == 1) if (l_posHorz == 1)
newFlag = MODULE_BIND; newFlag = MODULE_BIND;
else if (l_posHorz == 2) { else if (l_posHorz == 2) {
newFlag = MODULE_RANGECHECK; newFlag = MODULE_RANGECHECK;
#endif
} }
} }
moduleFlag[moduleIdx] = newFlag; moduleFlag[moduleIdx] = newFlag;

View file

@ -372,7 +372,18 @@ void setupPulsesPXX(uint8_t port)
pulseValueLow = pulseValue; 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) */ /* Ext. flag (holds antenna selection on Horus internal module, 0x00 otherwise) */
#if defined(PCBHORUS) #if defined(PCBHORUS)
uint8_t antenna = XJT_INTERNAL_ANTENNA; uint8_t antenna = XJT_INTERNAL_ANTENNA;
@ -382,6 +393,7 @@ void setupPulsesPXX(uint8_t port)
putPcmByte(port, antenna); putPcmByte(port, antenna);
#else #else
putPcmByte(port, 0); putPcmByte(port, 0);
#endif
#endif #endif
/* CRC */ /* CRC */

View file

@ -592,6 +592,10 @@ const pm_char STR_BLCOLOR[] PROGMEM = TR_BLCOLOR;
#if defined(CPUARM) #if defined(CPUARM)
const pm_char STR_TRAINER[] PROGMEM = TR_TRAINER; const pm_char STR_TRAINER[] PROGMEM = TR_TRAINER;
const pm_char STR_MODULE_BIND[] PROGMEM = TR_MODULE_BIND; 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_CHANNELRANGE[] PROGMEM = TR_CHANNELRANGE;
const pm_char STR_ANTENNASELECTION[] PROGMEM = TR_ANTENNASELECTION; const pm_char STR_ANTENNASELECTION[] PROGMEM = TR_ANTENNASELECTION;
const pm_char STR_ANTENNACONFIRM1[] PROGMEM = TR_ANTENNACONFIRM1; const pm_char STR_ANTENNACONFIRM1[] PROGMEM = TR_ANTENNACONFIRM1;

View file

@ -874,6 +874,10 @@ extern const pm_char STR_BLCOLOR[];
#if defined(CPUARM) #if defined(CPUARM)
extern const pm_char STR_TRAINER[]; extern const pm_char STR_TRAINER[];
extern const pm_char STR_MODULE_BIND[]; 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_CHANNELRANGE[];
extern const pm_char STR_ANTENNASELECTION[]; extern const pm_char STR_ANTENNASELECTION[];
extern const pm_char STR_ANTENNACONFIRM1[]; extern const pm_char STR_ANTENNACONFIRM1[];

View file

@ -850,6 +850,10 @@
#define TR_MODULE_NO_INPUT TR("No input", "No serial input") #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_NO_TELEMETRY TR3( "No telemetry", "No MULTI_TELEMETRY", "No MULTI_TELEMETRY detected")
#define TR_MODULE_BINDING TR("Bind...","Binding") #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_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid")
#define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status")
#define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") #define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate")

View file

@ -875,6 +875,10 @@
#define TR_MODULE_NO_INPUT TR("No input", "No serial input") #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_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)")
#define TR_MODULE_BINDING "Binding" #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_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid")
#define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status")
#define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") #define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate")

View file

@ -853,6 +853,10 @@
#define TR_MODULE_NO_INPUT TR("No input", "No serial input") #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_NO_TELEMETRY TR3("No telemetry", "No MULTI_TELEMETRY", "No MULTI_TELEMETRY detected")
#define TR_MODULE_BINDING TR("Bind...","Binding") #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_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid")
#define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status")
#define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") #define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate")

View file

@ -827,6 +827,10 @@
#define TR_MODULE_NO_INPUT TR("No input", "No serial input") #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_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)")
#define TR_MODULE_BINDING "Binding" #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_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid")
#define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status")
#define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") #define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate")

View file

@ -823,6 +823,10 @@
#define TR_MODULE_NO_INPUT TR("No input", "No serial input") #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_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)")
#define TR_MODULE_BINDING "Binding" #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_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid")
#define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status")
#define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") #define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate")

View file

@ -857,6 +857,10 @@
#define TR_MODULE_NO_INPUT TR("Pas de sign.", "Aucun signal série") #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_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_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_PROTOCOL_INVALID TR("Sél. invalide", "Protocole invalide")
#define TR_MODULE_STATUS TR(INDENT "Etat", INDENT "Etat module") #define TR_MODULE_STATUS TR(INDENT "Etat", INDENT "Etat module")
#define TR_MULTI_SERVOFREQ TR(INDENT "Fréq.servo", INDENT "Fréquence servos") #define TR_MULTI_SERVOFREQ TR(INDENT "Fréq.servo", INDENT "Fréquence servos")

View file

@ -858,6 +858,10 @@
#define TR_MODULE_NO_INPUT TR("No input", "No serial input") #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_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)")
#define TR_MODULE_BINDING "Binding" #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_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid")
#define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status")
#define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") #define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate")

View file

@ -852,6 +852,10 @@
#define TR_MODULE_NO_INPUT TR("No input", "No serial input") #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_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)")
#define TR_MODULE_BINDING "Binding" #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_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid")
#define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status")
#define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") #define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate")

View file

@ -860,6 +860,10 @@
#define TR_MODULE_NO_INPUT TR("No input", "No serial input") #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_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)")
#define TR_MODULE_BINDING "Binding" #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_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid")
#define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status")
#define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") #define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate")

View file

@ -821,6 +821,10 @@
#define TR_MODULE_NO_INPUT TR("No input", "No serial input") #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_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)")
#define TR_MODULE_BINDING "Binding" #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_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid")
#define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status")
#define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") #define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate")

View file

@ -872,6 +872,10 @@
#define TR_MODULE_NO_INPUT TR("No input", "No serial input") #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_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)")
#define TR_MODULE_BINDING "Binding" #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_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid")
#define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status") #define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status")
#define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") #define TR_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate")

View file

@ -247,7 +247,8 @@ options_taranis = {
"internalppm": ("TARANIS_INTERNAL_PPM", "YES", "NO"), "internalppm": ("TARANIS_INTERNAL_PPM", "YES", "NO"),
"shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"), "shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"),
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"), "eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
"multimodule": ("MULTIMODULE", "YES", "NO") "multimodule": ("MULTIMODULE", "YES", "NO"),
"bindopt": ("BINDING_OPTIONS", "YES", "NO")
} }
options_taranisplus = { options_taranisplus = {
@ -266,7 +267,8 @@ options_taranisplus = {
"internalppm": ("TARANIS_INTERNAL_PPM", "YES", "NO"), "internalppm": ("TARANIS_INTERNAL_PPM", "YES", "NO"),
"shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"), "shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"),
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"), "eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
"multimodule": ("MULTIMODULE", "YES", "NO") "multimodule": ("MULTIMODULE", "YES", "NO"),
"bindopt": ("BINDING_OPTIONS", "YES", "NO")
} }
options_taranisx9e = { options_taranisx9e = {
@ -286,7 +288,8 @@ options_taranisx9e = {
"shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"), "shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"),
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"), "eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
"horussticks": ("STICKS", "HORUS", "STANDARD"), "horussticks": ("STICKS", "HORUS", "STANDARD"),
"multimodule": ("MULTIMODULE", "YES", "NO") "multimodule": ("MULTIMODULE", "YES", "NO"),
"bindopt": ("BINDING_OPTIONS", "YES", "NO")
} }
options_x12s = { options_x12s = {
@ -303,6 +306,7 @@ options_x12s = {
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"), "eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
"multimodule": ("MULTIMODULE", "YES", "NO"), "multimodule": ("MULTIMODULE", "YES", "NO"),
"pcbdev": ("PCBREV", "10", None), "pcbdev": ("PCBREV", "10", None),
"bindopt": ("BINDING_OPTIONS", "YES", "NO")
} }
options_x10 = { options_x10 = {
@ -318,4 +322,5 @@ options_x10 = {
"cli": ("USB", "SERIAL", None), "cli": ("USB", "SERIAL", None),
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"), "eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
"multimodule": ("MULTIMODULE", "YES", "NO"), "multimodule": ("MULTIMODULE", "YES", "NO"),
"bindopt": ("BINDING_OPTIONS", "YES", "NO")
} }