diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h index 5ac1a1f65..b74bdb318 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -661,7 +661,9 @@ PACK(struct ModuleData { int8_t frameLength; } ppm; NOBACKUP(struct { - uint8_t rfProtocol:6; // can be changed to rfProtocol if rfProtocol gets more bits, currently 6 bits used + uint8_t rfProtocolExtra:2; + uint8_t spare:3; + uint8_t customProto:1; uint8_t autoBindMode:1; uint8_t lowPowerMode:1; int8_t optionValue; @@ -673,6 +675,18 @@ PACK(struct ModuleData { uint8_t spare3; } pxx); }; + + // Helper functions to set both of the rfProto protocol at the same time + inline uint8_t getMultiProtocol() + { + return ((uint8_t) (rfProtocol & 0x0f)) + (multi.rfProtocolExtra << 4); + } + + inline void setMultiProtocol(uint8_t proto) + { + rfProtocol = (uint8_t) (proto & 0x0f); + multi.rfProtocolExtra = (proto & 0x30) >> 4; + } }); /* diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index a564fcaa0..3d377690e 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -129,11 +129,8 @@ enum MenuModelSetupItems { #endif #define IF_EXTERNAL_MODULE_ON(x) (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_NONE ? HIDDEN_ROW : (uint8_t)(x)) - #define IF_TRAINER_ON(x) (g_model.trainerMode == TRAINER_MODE_SLAVE ? (uint8_t)(x) : HIDDEN_ROW) - #define IS_D8_RX(x) (g_model.moduleData[x].rfProtocol == RF_PROTO_D8) #define IF_EXTERNAL_MODULE_XJT(x) (IS_MODULE_XJT(EXTERNAL_MODULE) ? (uint8_t)(x) : HIDDEN_ROW) #define INTERNAL_MODULE_CHANNELS_ROWS IF_INTERNAL_MODULE_ON(1) - #define EXTERNAL_MODULE_CHANNELS_ROWS IF_EXTERNAL_MODULE_ON((IS_MODULE_DSM2(EXTERNAL_MODULE) || IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) ? (uint8_t)0 : (uint8_t)1) #define EXTERNAL_MODULE_BIND_ROWS() (IS_MODULE_XJT(EXTERNAL_MODULE) && IS_D8_RX(EXTERNAL_MODULE)) ? (uint8_t)1 : (IS_MODULE_PPM(EXTERNAL_MODULE) || IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE) || IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW #if defined(PCBSKY9X) && defined(REVX) @@ -143,26 +140,6 @@ enum MenuModelSetupItems { #endif #define PORT_CHANNELS_ROWS(x) (x==EXTERNAL_MODULE ? EXTERNAL_MODULE_CHANNELS_ROWS : 0) -#if defined(MULTIMODULE) - #define MULTIMODULE_HASOPTIONS(x) (x == MM_RF_PROTO_HUBSAN || x == MM_RF_PROTO_FRSKY || x == MM_RF_PROTO_DSM2 || x == MM_RF_PROTO_SFHSS || x >= MM_RF_PROTO_CUSTOM) - #define MULTIMODULE_FAILSAFEROWS(x) (IS_MODULE_MULTIMODULE(x) && (MULTIMODULE_HASOPTIONS(g_model.moduleData[x].multi.rfProtocol))) ? (uint8_t) 0: HIDDEN_ROW -#else - #define MULTIMODULE_FAILSAFEROWS(x) HIDDEN_ROW -#endif - #define FAILSAFE_ROWS(x) (IS_MODULE_XJT(x) && HAS_RF_PROTOCOL_FAILSAFE(g_model.moduleData[x].rfProtocol) ? (g_model.moduleData[x].failsafeMode==FAILSAFE_CUSTOM ? (uint8_t)1 : (uint8_t)0) : MULTIMODULE_FAILSAFEROWS(x)) - -#if defined(MULTIMODULE) - #define MULTIMODULE_HAS_SUBTYPE(x) (x == MM_RF_PROTO_FLYSKY || x == MM_RF_PROTO_FRSKY || x == MM_RF_PROTO_HISKY || x == MM_RF_PROTO_DSM2 || x == MM_RF_PROTO_YD717 || x == MM_RF_PROTO_KN || x == MM_RF_PROTO_SYMAX || x == MM_RF_PROTO_CX10 || x == MM_RF_PROTO_CG023 || x == MM_RF_PROTO_MT99XX || x == MM_RF_PROTO_MJXQ) - #define MULTIMODULE_MODE_ROWS(x) (g_model.moduleData[x].multi.rfProtocol >= MM_RF_PROTO_CUSTOM ) ? (uint8_t) 3 :MULTIMODULE_HAS_SUBTYPE(g_model.moduleData[x].multi.rfProtocol) ? (uint8_t)2 : (uint8_t)1 - #define MULTIMODULE_MODULE_ROWS IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) ? (uint8_t) 0 : HIDDEN_ROW, IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) ? (uint8_t) 0 : HIDDEN_ROW, - #define MULTIMODULE_RFPROTO_ROWS(x) (g_model.moduleData[x].multi.rfProtocol >= MM_RF_PROTO_CUSTOM) ? (uint8_t) 1 :MULTIMODULE_HAS_SUBTYPE(g_model.moduleData[x].multi.rfProtocol) ? (uint8_t) 0 : HIDDEN_ROW - #define MULTIMODULE_SUBTYPE_ROWS(x) IS_MODULE_MULTIMODULE(x) ? MULTIMODULE_RFPROTO_ROWS(x) : HIDDEN_ROW, -#else - #define MULTIMODULE_MODE_ROWS(x) (uint8_t)0 - #define MULTIMODULE_MODULE_ROWS - #define MULTIMODULE_SUBTYPE_ROWS(x) -#endif - #define EXTERNAL_MODULE_MODE_ROWS (IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE) || IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0 #define CURSOR_ON_CELL (true) diff --git a/radio/src/gui/212x64/model_setup.cpp b/radio/src/gui/212x64/model_setup.cpp index de955f540..783197e8f 100644 --- a/radio/src/gui/212x64/model_setup.cpp +++ b/radio/src/gui/212x64/model_setup.cpp @@ -211,33 +211,14 @@ int getSwitchWarningsCount() #define IF_INTERNAL_MODULE_ON(x) (g_model.moduleData[INTERNAL_MODULE].rfProtocol == RF_PROTO_OFF ? HIDDEN_ROW : (uint8_t)(x)) #endif #define IF_EXTERNAL_MODULE_ON(x) (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_NONE ? HIDDEN_ROW : (uint8_t)(x)) -#define IF_TRAINER_ON(x) (g_model.trainerMode == TRAINER_MODE_SLAVE ? (uint8_t)(x) : HIDDEN_ROW) -#define IS_D8_RX(x) (g_model.moduleData[x].rfProtocol == RF_PROTO_D8) #define IF_EXTERNAL_MODULE_XJT(x) (IS_MODULE_XJT(EXTERNAL_MODULE) ? (uint8_t)x : HIDDEN_ROW) #define INTERNAL_MODULE_CHANNELS_ROWS IF_INTERNAL_MODULE_ON(1) -#define EXTERNAL_MODULE_CHANNELS_ROWS IF_EXTERNAL_MODULE_ON((IS_MODULE_DSM2(EXTERNAL_MODULE) || IS_MODULE_CROSSFIRE(EXTERNAL_MODULE) || IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) ? (uint8_t)0 : (uint8_t)1) #define TRAINER_CHANNELS_ROWS() IF_TRAINER_ON(1) #define PORT_CHANNELS_ROWS(x) (x==INTERNAL_MODULE ? INTERNAL_MODULE_CHANNELS_ROWS : (x==EXTERNAL_MODULE ? EXTERNAL_MODULE_CHANNELS_ROWS : TRAINER_CHANNELS_ROWS())) -#if defined MULTIMODULE - #define MULTIMODULE_HASOPTIONS(x) (x == MM_RF_PROTO_HUBSAN || x == MM_RF_PROTO_FRSKY || x == MM_RF_PROTO_DSM2 || x == MM_RF_PROTO_SFHSS || x >= MM_RF_PROTO_CUSTOM) - #define MULTIMODULE_FAILSAFEROWS(x) (IS_MODULE_MULTIMODULE(x) && (MULTIMODULE_HASOPTIONS(g_model.moduleData[x].multi.rfProtocol))) ? (uint8_t) 0: HIDDEN_ROW -#else - #define MULTIMODULE_FAILSAFEROWS(x) HIDDEN_ROW -#endif -#define FAILSAFE_ROWS(x) (IS_MODULE_XJT(x) && HAS_RF_PROTOCOL_FAILSAFE(g_model.moduleData[x].rfProtocol) ? (g_model.moduleData[x].failsafeMode==FAILSAFE_CUSTOM ? (uint8_t)1 : (uint8_t)0) : MULTIMODULE_FAILSAFEROWS(x)) #define TIMER_ROWS(x) 2|NAVIGATION_LINE_BY_LINE, 0, 0, 0, g_model.timers[x].countdownBeep != COUNTDOWN_SILENT ? (uint8_t) 1 : (uint8_t)0 -#if defined(MULTIMODULE) - #define MULTIMODULE_HAS_SUBTYPE(x) (x == MM_RF_PROTO_FLYSKY || x == MM_RF_PROTO_FRSKY || x == MM_RF_PROTO_HISKY || x == MM_RF_PROTO_DSM2 || x == MM_RF_PROTO_YD717 || x == MM_RF_PROTO_KN || x == MM_RF_PROTO_SYMAX || x == MM_RF_PROTO_CX10 || x == MM_RF_PROTO_CG023 || x == MM_RF_PROTO_MT99XX || x == MM_RF_PROTO_MJXQ) - #define MULTIMODULE_MODE_ROWS(x) (g_model.moduleData[x].multi.rfProtocol >= MM_RF_PROTO_CUSTOM ) ? (uint8_t) 3 :MULTIMODULE_HAS_SUBTYPE(g_model.moduleData[x].multi.rfProtocol) ? (uint8_t)2 : (uint8_t)1 - #define MULTIMODULE_MODULE_ROWS IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) ? (uint8_t) 0 : HIDDEN_ROW, IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) ? (uint8_t) 0 : HIDDEN_ROW, -#else - #define MULTIMODULE_MODE_ROWS(x) (uint8_t)0 - #define MULTIMODULE_MODULE_ROWS -#endif - #define EXTERNAL_MODULE_MODE_ROWS (IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)1 : IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) ? MULTIMODULE_MODE_ROWS(EXTERNAL_MODULE) : (uint8_t)0 #if TIMERS == 1 @@ -714,7 +695,7 @@ void menuModelSetup(event_t event) lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0); #if defined(MULTIMODULE) else if (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) { - uint8_t multi_rfProto = min(g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol, (uint8_t) MM_RF_PROTO_CUSTOM); + uint8_t multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].multi.customProto ? MM_RF_PROTO_CUSTOM : g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(); // Do not use MODEL_SETUP_3RD_COLUMN here since some the protocol string are so long that we cannot afford the 2 spaces (+6) here lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_MULTI_PROTOCOLS, multi_rfProto, menuHorizontalPosition==1 ? attr : 0); @@ -729,7 +710,7 @@ void menuModelSetup(event_t event) lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+10*FW, y, STR_SUBTYPE_HISKY, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==2 ? attr : 0); break; case MM_RF_PROTO_DSM2: - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+11*FW, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].subType+1, menuHorizontalPosition==2 ? attr : 0); + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+10*FW, y, STR_SUBTYPE_DSM, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==2 ? attr : 0); break; case MM_RF_PROTO_YD717: lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+10*FW, y, STR_SUBTYPE_YD717, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==2 ? attr : 0); @@ -756,7 +737,7 @@ void menuModelSetup(event_t event) lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+11*FW, y, STR_SUBTYPE_HONTAI, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==2 ? attr : 0); break; case MM_RF_PROTO_CUSTOM: - lcdDrawNumber(MODEL_SETUP_2ND_COLUMN+14*FW, y, g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol & 0x1f, menuHorizontalPosition==2 ? attr : 0, 2); + lcdDrawNumber(MODEL_SETUP_2ND_COLUMN+14*FW, y, g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(), menuHorizontalPosition==2 ? attr : 0, 2); lcdDrawNumber(MODEL_SETUP_2ND_COLUMN+16*FW, y, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==3 ? attr : 0, 2); break; } @@ -777,19 +758,20 @@ void menuModelSetup(event_t event) CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX); #if defined(MULTIMODULE) else if (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) { - CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol, MM_RF_PROTO_FIRST, MM_RF_PROTO_LAST); + uint8_t multiRfProto = g_model.moduleData[EXTERNAL_MODULE].multi.customProto == 1 ? MM_RF_PROTO_CUSTOM : g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(); + CHECK_INCDEC_MODELVAR(event, multiRfProto, MM_RF_PROTO_FIRST, MM_RF_PROTO_LAST); if (checkIncDec_Ret) { - // When in custom protocol mode the highest bit (0x20) is set to indicate the protocl we might be way above MM_RF_PROTO_LAST. - // Reset to MM_RF_PROTO_LAST-1 in that case - if (checkIncDec_Ret == -1 && g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol >= MM_RF_PROTO_LAST) { - g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol = MM_RF_PROTO_LAST-1; - } + g_model.moduleData[EXTERNAL_MODULE].multi.customProto = (multiRfProto == MM_RF_PROTO_CUSTOM); + if (!g_model.moduleData[EXTERNAL_MODULE].multi.customProto) + g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(multiRfProto); g_model.moduleData[EXTERNAL_MODULE].subType = 0; // Sensible default for DSM2 (same as for ppm): 6ch@22ms - if (g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol == MM_RF_PROTO_DSM2) - g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = MM_RF_DSM2_22MS_6CH_OPTION; - else - g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = 0; + if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol() == MM_RF_PROTO_DSM2) { + g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 1; + } else { + g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 0; + } + g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = 0; } } #endif @@ -803,33 +785,34 @@ void menuModelSetup(event_t event) break; #if defined(MULTIMODULE) case 2: - switch (min(g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol, (uint8_t) MM_RF_PROTO_CUSTOM)) { - case MM_RF_PROTO_HISKY: - case MM_RF_PROTO_DSM2: - case MM_RF_PROTO_SYMAX: - case MM_RF_PROTO_KN: - CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 1); - break; - case MM_RF_PROTO_CG023: - CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 2); - break; - case MM_RF_PROTO_FLYSKY: - case MM_RF_PROTO_MT99XX: - case MM_RF_PROTO_FRSKY: - CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 3); - break; - case MM_RF_PROTO_MJXQ: - case MM_RF_PROTO_YD717: - CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 4); - break; - case MM_RF_PROTO_CX10: - case MM_RF_PROTO_HONTAI: - CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 7); - break; - case MM_RF_PROTO_CUSTOM: - //custom protocol using the highest bit 0x20 to indicate that the protocol and the lower bits as the rfProtocol - g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol = 0x20 | checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol & 0x1f, 1, 31, EE_MODEL); - break; + if (g_model.moduleData[EXTERNAL_MODULE].multi.customProto) { + g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(), 0, 63, EE_MODEL)); + break; + } else { + switch (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol()) { + case MM_RF_PROTO_HISKY: + case MM_RF_PROTO_SYMAX: + case MM_RF_PROTO_KN: + CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 1); + break; + case MM_RF_PROTO_CG023: + CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 2); + break; + case MM_RF_PROTO_FLYSKY: + case MM_RF_PROTO_MT99XX: + case MM_RF_PROTO_FRSKY: + case MM_RF_PROTO_DSM2: + CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 3); + break; + case MM_RF_PROTO_MJXQ: + case MM_RF_PROTO_YD717: + CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 4); + break; + case MM_RF_PROTO_CX10: + case MM_RF_PROTO_HONTAI: + CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 7); + break; + } } break; case 3: @@ -989,7 +972,7 @@ void menuModelSetup(event_t event) } #if defined(MULTIMODULE) else if (IS_MODULE_MULTIMODULE(moduleIdx)) { - switch (g_model.moduleData[moduleIdx].multi.rfProtocol) + switch (g_model.moduleData[moduleIdx].getMultiProtocol()) { case MM_RF_PROTO_FRSKY: case MM_RF_PROTO_SFHSS: @@ -999,13 +982,13 @@ void menuModelSetup(event_t event) lcdDrawTextAlignedLeft(y, STR_MULTI_VIDFREQ); break; case MM_RF_PROTO_DSM2: - g_model.moduleData[moduleIdx].multi.optionValue = editChoice(MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_DSMFRAME, STR_OPTIONS_DSM, g_model.moduleData[moduleIdx].multi.optionValue, 0, 12, attr, event); + g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.optionValue, MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_DSMPRNG, attr, event); break; default: lcdDrawTextAlignedLeft(y, STR_MULTI_OPTION); break; } - if (g_model.moduleData[moduleIdx].multi.rfProtocol != MM_RF_PROTO_DSM2) { + if (g_model.moduleData[moduleIdx].getMultiProtocol() != MM_RF_PROTO_DSM2) { lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.moduleData[moduleIdx].multi.optionValue, LEFT | attr); if (attr) { CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -128, 127); @@ -1017,7 +1000,10 @@ void menuModelSetup(event_t event) } #if defined(MULTIMODULE) case ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND: - g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode, MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_AUTOBIND, attr, event); + if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol() == MM_RF_PROTO_DSM2) + g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode, MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_DSM_AUTODTECT, attr, event); + else + g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode, MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_AUTOBIND, attr, event); break; case ITEM_MODEL_EXTERNAL_MODULE_LOWPOWER: g_model.moduleData[EXTERNAL_MODULE].multi.lowPowerMode = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.lowPowerMode, MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_LOWPOWER, attr, event); diff --git a/radio/src/gui/480x272/model_setup.cpp b/radio/src/gui/480x272/model_setup.cpp index 6ee8e21a1..e1d9ba290 100644 --- a/radio/src/gui/480x272/model_setup.cpp +++ b/radio/src/gui/480x272/model_setup.cpp @@ -179,34 +179,18 @@ int getSwitchWarningsCount() } #define IF_EXTERNAL_MODULE_XJT(x) (IS_MODULE_XJT(EXTERNAL_MODULE) ? (uint8_t)x : HIDDEN_ROW) -#define IS_D8_RX(x) (g_model.moduleData[x].rfProtocol == RF_PROTO_D8) #define IF_INTERNAL_MODULE_ON(x) (g_model.moduleData[INTERNAL_MODULE].rfProtocol == RF_PROTO_OFF ? HIDDEN_ROW : (uint8_t)(x)) #define IF_EXTERNAL_MODULE_ON(x) (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_NONE ? HIDDEN_ROW : (uint8_t)(x)) -#define IF_TRAINER_ON(x) (g_model.trainerMode == TRAINER_MODE_SLAVE ? (uint8_t)(x) : HIDDEN_ROW) #define INTERNAL_MODULE_MODE_ROWS (uint8_t)0 #define INTERNAL_MODULE_CHANNELS_ROWS IF_INTERNAL_MODULE_ON(1) -#define EXTERNAL_MODULE_CHANNELS_ROWS IF_EXTERNAL_MODULE_ON((IS_MODULE_DSM2(EXTERNAL_MODULE) || IS_MODULE_CROSSFIRE(EXTERNAL_MODULE) || IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) ? (uint8_t)0 : (uint8_t)1) #define TRAINER_CHANNELS_ROWS() IF_TRAINER_ON(1) #define PORT_CHANNELS_ROWS(x) (x==INTERNAL_MODULE ? INTERNAL_MODULE_CHANNELS_ROWS : (x==EXTERNAL_MODULE ? EXTERNAL_MODULE_CHANNELS_ROWS : TRAINER_CHANNELS_ROWS())) #if defined MULTIMODULE - #define MULTIMODULE_HASOPTIONS(x) (x == MM_RF_PROTO_HUBSAN || x == MM_RF_PROTO_FRSKY || x == MM_RF_PROTO_DSM2 || x >= MM_RF_PROTO_CUSTOM) - #define MULTIMODULE_FAILSAFEROWS(x) (IS_MODULE_MULTIMODULE(x) && (MULTIMODULE_HASOPTIONS(g_model.moduleData[x].multi.rfProtocol))) ? (uint8_t) 0: HIDDEN_ROW -#else - #define MULTIMODULE_FAILSAFEROWS(x) HIDDEN_ROW -#endif -#define FAILSAFE_ROWS(x) (IS_MODULE_XJT(x) && HAS_RF_PROTOCOL_FAILSAFE(g_model.moduleData[x].rfProtocol) ? (g_model.moduleData[x].failsafeMode==FAILSAFE_CUSTOM ? (uint8_t)1 : (uint8_t)0) : MULTIMODULE_FAILSAFEROWS(x)) + #define TIMER_ROWS(x) NAVIGATION_LINE_BY_LINE|1, 0, 0, 0, g_model.timers[x].countdownBeep != COUNTDOWN_SILENT ? (uint8_t)1 : (uint8_t)0 -#if defined(MULTIMODULE) - #define MULTIMODULE_HAS_SUBTYPE(x) (x == MM_RF_PROTO_FLYSKY || x == MM_RF_PROTO_FRSKY || x == MM_RF_PROTO_HISKY || x == MM_RF_PROTO_DSM2 || x == MM_RF_PROTO_YD717 || x == MM_RF_PROTO_KN || x == MM_RF_PROTO_SYMAX || x == MM_RF_PROTO_CX10 || x == MM_RF_PROTO_CG023 || x == MM_RF_PROTO_MT99XX || x == MM_RF_PROTO_MJXQ) - #define MULTIMODULE_MODE_ROWS(x) (g_model.moduleData[x].multi.rfProtocol >= MM_RF_PROTO_CUSTOM ) ? (uint8_t) 3 : MULTIMODULE_HAS_SUBTYPE(g_model.moduleData[x].multi.rfProtocol) ? (uint8_t)2 : (uint8_t)1 - #define MULTIMODULE_MODULE_ROWS IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) ? (uint8_t) 0 : HIDDEN_ROW, IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) ? (uint8_t) 0 : HIDDEN_ROW, -#else - #define MULTIMODULE_MODE_ROWS(x) (uint8_t)0 - #define MULTIMODULE_MODULE_ROWS -#endif #define EXTERNAL_MODULE_MODE_ROWS (IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)1 : IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) ? MULTIMODULE_MODE_ROWS(EXTERNAL_MODULE) : (uint8_t)0 diff --git a/radio/src/gui/gui_common.h b/radio/src/gui/gui_common.h index e9c052430..f0f227261 100644 --- a/radio/src/gui/gui_common.h +++ b/radio/src/gui/gui_common.h @@ -109,4 +109,29 @@ void drawFatalErrorScreen(const char * message); void runFatalErrorScreen(const char * message); #endif +// model_setup Defines that are used in all uis in the same way +#define EXTERNAL_MODULE_CHANNELS_ROWS IF_EXTERNAL_MODULE_ON((IS_MODULE_DSM2(EXTERNAL_MODULE) || IS_MODULE_CROSSFIRE(EXTERNAL_MODULE) || (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) && g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol() != MM_RF_PROTO_DSM2)) ? (uint8_t)0 : (uint8_t)1) + + +#if defined(MULTIMODULE) +#define MULTIMODULE_MODULE_ROWS IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) ? (uint8_t) 0 : HIDDEN_ROW, IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) ? (uint8_t) 0 : HIDDEN_ROW, +#define MULTIMODULE_MODE_ROWS(x) (g_model.moduleData[x].multi.customProto) ? (uint8_t) 3 :MULTIMODULE_HAS_SUBTYPE(g_model.moduleData[x].getMultiProtocol()) ? (uint8_t)2 : (uint8_t)1 +#define MULTIMODULE_RFPROTO_ROWS(x) (g_model.moduleData[x].multi.customProto) ? (uint8_t) 1 :MULTIMODULE_HAS_SUBTYPE(g_model.moduleData[x].getMultiProtocol()) ? (uint8_t) 0 : HIDDEN_ROW +#define MULTIMODULE_SUBTYPE_ROWS(x) IS_MODULE_MULTIMODULE(x) ? MULTIMODULE_RFPROTO_ROWS(x) : HIDDEN_ROW, +#define MULTIMODULE_HAS_SUBTYPE(x) (x == MM_RF_PROTO_FLYSKY || x == MM_RF_PROTO_FRSKY || x == MM_RF_PROTO_HISKY || x == MM_RF_PROTO_DSM2 || x == MM_RF_PROTO_YD717 || x == MM_RF_PROTO_KN || x == MM_RF_PROTO_SYMAX || x == MM_RF_PROTO_CX10 || x == MM_RF_PROTO_CG023 || x == MM_RF_PROTO_MT99XX || x == MM_RF_PROTO_MJXQ || x == MM_RF_PROTO_HONTAI) +#define MULTIMODULE_HASOPTIONS(x) (x == MM_RF_PROTO_HUBSAN || x == MM_RF_PROTO_FRSKY || x == MM_RF_PROTO_DSM2 ) +#define MULTIMODULE_FAILSAFEROWS(x) (IS_MODULE_MULTIMODULE(x) && (g_model.moduleData[x].multi.customProto || MULTIMODULE_HASOPTIONS(g_model.moduleData[x].getMultiProtocol()))) ? (uint8_t) 0: HIDDEN_ROW + +#else +#define MULTIMODULE_MODULE_ROWS +#define MULTIMODULE_FAILSAFEROWS(x) HIDDEN_ROW +#define MULTIMODULE_SUBTYPE_ROWS(x) +#define MULTIMODULE_MODE_ROWS(x) (uint8_t)0 +#endif + +#define IS_D8_RX(x) (g_model.moduleData[x].rfProtocol == RF_PROTO_D8) +#define IF_TRAINER_ON(x) (g_model.trainerMode == TRAINER_MODE_SLAVE ? (uint8_t)(x) : HIDDEN_ROW) + +#define FAILSAFE_ROWS(x) (IS_MODULE_XJT(x) && HAS_RF_PROTOCOL_FAILSAFE(g_model.moduleData[x].rfProtocol) ? (g_model.moduleData[x].failsafeMode==FAILSAFE_CUSTOM ? (uint8_t)1 : (uint8_t)0) : MULTIMODULE_FAILSAFEROWS(x)) + #endif // _GUI_COMMON_H_ diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index 67eadbe13..2ef219222 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -528,11 +528,11 @@ enum MultiModuleRFProtocols { MM_RF_PROTO_LAST= MM_RF_PROTO_CUSTOM }; -#define MM_RF_DSM2_22MS_6CH_OPTION 2 -#define MM_RF_DSM2_11MS_7CH_OPTION 7 - -#define MM_RF_DSM2_SUBTYPE_DSM2 0 -#define MM_RF_DSM2_SUBTYPE_DSMX 1 +#define MM_RF_DSM2_SUBTYPE_DSM2_22 0 +#define MM_RF_DSM2_SUBTYPE_DSM2_11 1 +#define MM_RF_DSM2_SUBTYPE_DSMX_22 2 +#define MM_RF_DSM2_SUBTYPE_DSMX_11 3 +#define MM_RF_DSM2_SUBTYPE_AUTO 4 #define MM_RF_FRSKY_SUBTYPE_D16 0 diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 6f928f9b0..73f0deb91 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -394,8 +394,10 @@ void memswap(void * a, void * b, uint8_t size); #if defined(MULTIMODULE) #define IS_MODULE_MULTIMODULE(idx) (idx==EXTERNAL_MODULE && g_model.moduleData[EXTERNAL_MODULE].type==MODULE_TYPE_MULTIMODULE) + #define IS_MODULE_MULTIMODULE_DSM(idx) (IS_MODULE_MULTIMODULE(idx) && g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol() == MM_RF_PROTO_DSM2) #else #define IS_MODULE_MULTIMODULE(idx) (false) + #define IS_MODULE_MULTIMODULE_DSM(idx) (false) #endif #if defined(PCBTARANIS) || defined(PCBHORUS) @@ -423,7 +425,7 @@ void memswap(void * a, void * b, uint8_t size); #endif #define MAX_EXTERNAL_MODULE_CHANNELS() ((g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_XJT) ? maxChannelsXJT[1+g_model.moduleData[1].rfProtocol] : maxChannelsModules[g_model.moduleData[EXTERNAL_MODULE].type]) #define MAX_CHANNELS(idx) (idx==INTERNAL_MODULE ? MAX_INTERNAL_MODULE_CHANNELS() : (idx==EXTERNAL_MODULE ? MAX_EXTERNAL_MODULE_CHANNELS() : MAX_TRAINER_CHANNELS_M8())) - #define NUM_CHANNELS(idx) ((IS_MODULE_CROSSFIRE(idx) || IS_MODULE_MULTIMODULE(idx)) ? CROSSFIRE_CHANNELS_COUNT : (8+g_model.moduleData[idx].channelsCount)) + #define NUM_CHANNELS(idx) ((IS_MODULE_CROSSFIRE(idx) || (IS_MODULE_MULTIMODULE(idx) && !IS_MODULE_MULTIMODULE_DSM(idx))) ? CROSSFIRE_CHANNELS_COUNT : (8+g_model.moduleData[idx].channelsCount)) #elif defined(PCBSKY9X) && !defined(REVA) #define IS_MODULE_PPM(idx) (idx==TRAINER_MODULE || idx==EXTRA_MODULE || (idx==EXTERNAL_MODULE && g_model.moduleData[EXTERNAL_MODULE].type==MODULE_TYPE_PPM)) #define IS_MODULE_XJT(idx) (idx==EXTERNAL_MODULE && g_model.moduleData[EXTERNAL_MODULE].type==MODULE_TYPE_XJT) diff --git a/radio/src/pulses/multi_arm.cpp b/radio/src/pulses/multi_arm.cpp index 6c879ce7e..0ccaea301 100644 --- a/radio/src/pulses/multi_arm.cpp +++ b/radio/src/pulses/multi_arm.cpp @@ -111,12 +111,11 @@ void setupPulsesMultimodule(uint8_t port) modulePulsesData[EXTERNAL_MODULE].dsm2.ptr = modulePulsesData[EXTERNAL_MODULE].dsm2.pulses; - // header, byte 0, always 0x55 - sendByteMulti(0x55); // byte 1+2, protocol information - int type = g_model.moduleData[port].multi.rfProtocol + 1; + // Our enumeration starts at 0 + int type = g_model.moduleData[port].getMultiProtocol() + 1; int subtype = g_model.moduleData[port].subType; int8_t optionValue = g_model.moduleData[port].multi.optionValue; @@ -127,10 +126,17 @@ void setupPulsesMultimodule(uint8_t port) protoByte |= MULTI_SEND_RANGECHECK; // rfProtocol - if (type == MM_RF_PROTO_DSM2 && g_model.moduleData[port].multi.autoBindMode && moduleFlag[port] == MODULE_BIND) { + if (g_model.moduleData[port].getMultiProtocol() && g_model.moduleData[port].multi.autoBindMode && moduleFlag[port] == MODULE_BIND) { // Autobinding should always be done in DSMX 11ms - subtype = MM_RF_DSM2_SUBTYPE_DSMX; - optionValue = MM_RF_DSM2_11MS_7CH_OPTION; + subtype = MM_RF_DSM2_SUBTYPE_AUTO; + + // The multi module wants the number of channels as options value and negative amout if the + // broken PRNG table is to be used. + if (optionValue==0) + optionValue = NUM_CHANNELS(EXTERNAL_MODULE); + else + optionValue = -(NUM_CHANNELS(EXTERNAL_MODULE)); + } // 15 for Multimodule is FrskyX or D16 which we map as a subprotocol of 3 (FrSky) @@ -142,7 +148,7 @@ void setupPulsesMultimodule(uint8_t port) if (type >= 23) type = type + 1; - if (g_model.moduleData[port].multi.rfProtocol == MM_RF_PROTO_FRSKY) { + if (g_model.moduleData[port].getMultiProtocol() == MM_RF_PROTO_FRSKY) { if(subtype == MM_RF_FRSKY_SUBTYPE_D8) { //D8 type = 3; @@ -160,11 +166,14 @@ void setupPulsesMultimodule(uint8_t port) } } - if (g_model.moduleData[port].multi.rfProtocol >= MM_RF_PROTO_CUSTOM) - type = g_model.moduleData[port].multi.rfProtocol & 0x1f; + // header, byte 0, 0x55 for proto 0-31 0x54 for 32-63 + if (type <= 31) + sendByteMulti(0x55); + else + sendByteMulti(0x54); - - protoByte |= (type & 0x1f); // (g_model.moduleData[port].multi.autoBindMode << 6) + // (g_model.moduleData[port].multi.autoBindMode << 6) + protoByte |= (type & 0x1f); sendByteMulti(protoByte); diff --git a/radio/src/telemetry/spektrum.cpp b/radio/src/telemetry/spektrum.cpp index 86dc79f45..dff161a16 100644 --- a/radio/src/telemetry/spektrum.cpp +++ b/radio/src/telemetry/spektrum.cpp @@ -331,47 +331,39 @@ void processSpektrumPacket(const uint8_t *packet) 6 1 byte -> RX version but you don't care... 7 1 byte -> number of channels, example 0x06=6 channels 8 1 byte -> max DSM type allowed: - 0x01 =>22ms 1024 DSM2 1 packet => number of channels is <8 and no telemetry + 0x01 => 22ms 1024 DSM2 1 packet => number of channels is <8 and no telemetry 0x02 => 22ms 1024 DSM2 2 packets => either a number of channel >7 or telemetry enable RX 0x12 => 11ms 2048 DSM2 2 packets => can be any number of channels with/without telemetry -> this mode might be supported following Mike's trials, note the channels should be duplicated between the packets which is not the case today 0xa2 => 22ms 2048 DSMX 1 packet => number of channels is <8 and no telemetry 0xb2 => 11ms 2048 DSMX => can be any number of channels with/without telemetry -> this mode is only half supported since the channels should be duplicated between the packets which is not the case but might be supported following Mike's trials 9 0x00: not sure of the use of this byte since I've always seen it at 0... 10 2 bytes CRC but you don't care as I've checked it already... + + Examples: DSM #Chan RXver + Inductrix 0xa2 07 1 + LemonRX+Sat+tele 0xb2 07 1 + */ void processDSMBindPacket(const uint8_t *packet) { uint32_t debugval; - if (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_MULTIMODULE && g_model.moduleData[EXTERNAL_MODULE].subType == MM_RF_PROTO_DSM2 + if (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_MULTIMODULE && g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol() == MM_RF_PROTO_DSM2 && g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode) { int channels = packet[7]; // Only sets channel etc when in DSM multi mode g_model.moduleData[EXTERNAL_MODULE].channelsCount = channels - 8; - if (packet[8] & 0xa0) { - g_model.moduleData[EXTERNAL_MODULE].subType = MM_RF_DSM2_SUBTYPE_DSMX; - } else { - g_model.moduleData[EXTERNAL_MODULE].subType = MM_RF_DSM2_SUBTYPE_DSM2; - } - bool use11ms = false; - // 11ms mode (and less than 8 channels since more channels don't worke with 11ms for now - if ((packet[8] & 0x10) && (channels < 8)) { - use11ms = true; - } + // bool use11ms = (packet[8] & 0x10) ; + if (packet[8] >= 0xb2) + g_model.moduleData[EXTERNAL_MODULE].subType = MM_RF_DSM2_SUBTYPE_DSMX_11; + else if (packet[8] >= 0xa2) + g_model.moduleData[EXTERNAL_MODULE].subType = MM_RF_DSM2_SUBTYPE_DSMX_22; + else if (packet[8] >= 0x12) + g_model.moduleData[EXTERNAL_MODULE].subType = MM_RF_DSM2_SUBTYPE_DSM2_11; + else + g_model.moduleData[EXTERNAL_MODULE].subType = MM_RF_DSM2_SUBTYPE_DSM2_22; - // 4 - 7 => 4-7 ch @ 11ms - if (use11ms) { - g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = limit(4, channels, 7); - } else { - if (channels <= 7) { - // 0 -3 => 4-7 ch @ 22ms - g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = limit(0, channels - 4, 3); - } else { - // 8 - 12 => 8-12 ch @ 22ms - g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = limit(8, channels, 12); - } - } storageDirty(EE_MODEL); } diff --git a/radio/src/telemetry/telemetry.h b/radio/src/telemetry/telemetry.h index e19bdeb8a..eb66603f8 100644 --- a/radio/src/telemetry/telemetry.h +++ b/radio/src/telemetry/telemetry.h @@ -147,9 +147,9 @@ inline uint8_t modelTelemetryProtocol() #if defined(MULTIMODULE) if (g_model.moduleData[INTERNAL_MODULE].rfProtocol == RF_PROTO_OFF && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_MULTIMODULE) { - if (g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol == MM_RF_PROTO_DSM2) + if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol() == MM_RF_PROTO_DSM2) return PROTOCOL_SPEKTRUM; - else if ((g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol == MM_RF_PROTO_FRSKY) && + else if ((g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol() == MM_RF_PROTO_FRSKY) && (g_model.moduleData[EXTERNAL_MODULE].subType == MM_RF_FRSKY_SUBTYPE_D16 || g_model.moduleData[EXTERNAL_MODULE].subType == MM_RF_FRSKY_SUBTYPE_D16_8CH)) return PROTOCOL_FRSKY_SPORT; else diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 2429c22f2..73131524a 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -115,6 +115,7 @@ const pm_char STR_OPEN9X[] PROGMEM = ISTR(SUBTYPE_FLYSKY) ISTR(SUBTYPE_FRSKY) ISTR(SUBTYPE_HISKY) + ISTR(SUBTYPE_DSM) ISTR(SUBTYPE_YD717) ISTR(SUBTYPE_SYMAX) ISTR(SUBTYPE_CX10) @@ -468,8 +469,9 @@ const pm_char STR_MULTI_RFTUNE[] PROGMEM = TR_MULTI_RFTUNE; const pm_char STR_MULTI_VIDFREQ[] PROGMEM = TR_MULTI_VIDFREQ; const pm_char STR_MULTI_OPTION[] PROGMEM = TR_MULTI_OPTION; const pm_char STR_MULTI_AUTOBIND[] PROGMEM = TR_MULTI_AUTOBIND; +const pm_char STR_MULTI_DSM_AUTODTECT[] PROGMEM = TR_MULTI_DSM_AUTODTECT; const pm_char STR_MULTI_LOWPOWER[] PROGMEM = TR_MULTI_LOWPOWER; -const pm_char STR_MULTI_DSMFRAME[] PROGMEM = TR_MULTI_DSMFRAME; +const pm_char STR_MULTI_DSMPRNG[] PROGMEM = TR_MULTI_DSMPRNG; #if LCD_W < 212 const pm_char STR_SUBTYPE[] PROGMEM = TR_SUBTYPE; #endif diff --git a/radio/src/translations.h b/radio/src/translations.h index ce71beaac..f8d706f60 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -216,7 +216,8 @@ extern const pm_char STR_OPEN9X[]; #define OFS_SUBTYPE_FLYSKY (OFS_MULTI_PROTOCOLS + sizeof(TR_MULTI_PROTOCOLS)) #define OFS_SUBTYPE_FRSKY (OFS_SUBTYPE_FLYSKY + sizeof(TR_SUBTYPE_FLYSKY)) #define OFS_SUBTYPE_HISKY (OFS_SUBTYPE_FRSKY + sizeof(TR_SUBTYPE_FRSKY)) - #define OFS_SUBTYPE_YD717 (OFS_SUBTYPE_HISKY + sizeof(TR_SUBTYPE_HISKY)) + #define OFS_SUBTYPE_DSM (OFS_SUBTYPE_HISKY + sizeof(TR_SUBTYPE_HISKY)) + #define OFS_SUBTYPE_YD717 (OFS_SUBTYPE_DSM + sizeof(TR_SUBTYPE_DSM)) #define OFS_SUBTYPE_SYMAX (OFS_SUBTYPE_YD717 + sizeof(TR_SUBTYPE_YD717)) #define OFS_SUBTYPE_CX10 (OFS_SUBTYPE_SYMAX + sizeof(TR_SUBTYPE_SYMAX)) #define OFS_SUBTYPE_CG023 (OFS_SUBTYPE_CX10 + sizeof(TR_SUBTYPE_CX10)) @@ -350,6 +351,7 @@ extern const pm_char STR_OPEN9X[]; #define STR_SUBTYPE_FLYSKY (STR_OPEN9X + OFS_SUBTYPE_FLYSKY) #define STR_SUBTYPE_FRSKY (STR_OPEN9X + OFS_SUBTYPE_FRSKY) #define STR_SUBTYPE_HISKY (STR_OPEN9X + OFS_SUBTYPE_HISKY) + #define STR_SUBTYPE_DSM (STR_OPEN9X + OFS_SUBTYPE_DSM) #define STR_SUBTYPE_YD717 (STR_OPEN9X + OFS_SUBTYPE_YD717) #define STR_SUBTYPE_SYMAX (STR_OPEN9X + OFS_SUBTYPE_SYMAX) #define STR_SUBTYPE_CX10 (STR_OPEN9X + OFS_SUBTYPE_CX10) @@ -599,8 +601,9 @@ extern const pm_char STR_MULTI_OPTION[]; extern const pm_char STR_MULTI_VIDFREQ[]; extern const pm_char STR_MULTI_RFTUNE[]; extern const pm_char STR_MULTI_AUTOBIND[]; +extern const pm_char STR_MULTI_DSM_AUTODTECT[]; extern const pm_char STR_MULTI_LOWPOWER[]; -extern const pm_char STR_MULTI_DSMFRAME[]; +extern const pm_char STR_MULTI_DSMPRNG[]; #if LCD_W < 212 extern const pm_char STR_SUBTYPE[]; #endif diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index e13410052..e2327c100 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -107,7 +107,7 @@ #define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" #define LEN_MULTI_PROTOCOLS "\006" -#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM2\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom" +#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom" #define LEN_SUBTYPE_FLYSKY "\004" #define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912" @@ -118,7 +118,8 @@ #define LEN_SUBTYPE_HISKY "\005" #define TR_SUBTYPE_HISKY "HiSky""HK310" -// SUBTYPE FOR DSMX use TR_DSM_PROTOCOLS with offset +1 +#define LEN_SUBTYPE_DSM "\006" +#define TR_SUBTYPE_DSM "2 22ms""2 11ms""X 22ms""X 11ms" #define LEN_SUBTYPE_YD717 "\007" #define TR_SUBTYPE_YD717 "YD717\0 ""SKYWLKR""Syma X2""XINXUN\0""NIHUI\0 " @@ -890,9 +891,10 @@ #endif #define TR_MULTI_RFTUNE TR(INDENT "Freq tune",INDENT "RF Freq. fine tune") #define TR_MULTI_VIDFREQ TR(INDENT "Vid. freq.", INDENT "Video frequency") -#define TR_MULTI_DSMFRAME TR(INDENT "DSM frame", INDENT "DSM frame format") +#define TR_MULTI_DSMPRNG TR(INDENT "Wrong PNRG", INDENT "Wrong PRNG tables") #define TR_MULTI_OPTION TR(INDENT "Option", INDENT "Option value") #define TR_MULTI_AUTOBIND INDENT "Autobind" +#define TR_MULTI_DSM_AUTODTECT TR(INDENT "Autodetect", INDENT "Autodetect format") #define TR_MULTI_LOWPOWER TR(INDENT "Low power", INDENT "Low power mode") #define TR_SYNCMENU "[Sync]" #define TR_LIMIT INDENT"Limit" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index ad07b6b59..fa36a556f 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -111,7 +111,7 @@ #define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" //LP45 =Low Power 4 und 5 Kanal #define LEN_MULTI_PROTOCOLS "\006" -#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM2\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom" +#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom" #define LEN_SUBTYPE_FLYSKY "\004" #define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912" @@ -122,7 +122,8 @@ #define LEN_SUBTYPE_HISKY "\005" #define TR_SUBTYPE_HISKY "HiSky""HK310" -// SUBTYPE FOR DSMX use TR_DSM_PROTOCOLS with offset +1 +#define LEN_SUBTYPE_DSM "\006" +#define TR_SUBTYPE_DSM "2 22ms""2 11ms""X 22ms""X 11ms" #define LEN_SUBTYPE_YD717 "\007" #define TR_SUBTYPE_YD717 "YD717\0 ""SKYWLKR""SYMAX2\0""XINXUN\0""NIHUI\0 " @@ -893,9 +894,10 @@ #endif #define TR_MULTI_RFTUNE TR(INDENT "RF Freq.", INDENT "RF Freq. Feintuning") #define TR_MULTI_VIDFREQ TR(INDENT "Vid. Freq.", INDENT "Video Frequenz") -#define TR_MULTI_DSMFRAME TR(INDENT "DSM Frm", INDENT "DSM Rahmenformat") +#define TR_MULTI_DSMPRNG TR(INDENT "Wrong PNRG", INDENT "Wrong PRNG tables") #define TR_MULTI_OPTION TR(INDENT "Option", INDENT "Optionswert") #define TR_MULTI_AUTOBIND INDENT "Autobind" +#define TR_MULTI_DSM_AUTODTECT TR(INDENT "Autodetect", INDENT "Autodetect format") #define TR_MULTI_LOWPOWER TR(INDENT "Low power", INDENT "Low power mode") #define TR_SYNCMENU "Sync [MENU]" #define TR_LIMIT INDENT "Grenzen" diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index 83c618104..7a8c4ad4b 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -111,7 +111,7 @@ #define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" #define LEN_MULTI_PROTOCOLS "\006" -#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM2\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom" +#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom" #define LEN_SUBTYPE_FLYSKY "\004" #define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912" @@ -122,7 +122,8 @@ #define LEN_SUBTYPE_HISKY "\005" #define TR_SUBTYPE_HISKY "HiSky""HK310" -// SUBTYPE FOR DSMX use TR_DSM_PROTOCOLS with offset +1 +#define LEN_SUBTYPE_DSM "\006" +#define TR_SUBTYPE_DSM "2 22ms""2 11ms""X 22ms""X 11ms" #define LEN_SUBTYPE_YD717 "\007" #define TR_SUBTYPE_YD717 "YD717\0 ""SKYWLKR""Syma X2""XINXUN\0""NIHUI\0 " @@ -859,9 +860,10 @@ #endif #define TR_MULTI_RFTUNE TR(INDENT "Freq tune",INDENT "RF Freq. fine tune") #define TR_MULTI_VIDFREQ TR(INDENT "Vid. freq.", INDENT "Video frequency") -#define TR_MULTI_DSMFRAME TR(INDENT "DSM frame", INDENT "DSM frame format") +#define TR_MULTI_DSMPRNG TR(INDENT "Wrong PNRG", INDENT "Wrong PRNG tables") #define TR_MULTI_OPTION TR(INDENT "Option", INDENT "Option value") #define TR_MULTI_AUTOBIND INDENT "Autobind" +#define TR_MULTI_DSM_AUTODTECT TR(INDENT "Autodetect", INDENT "Autodetect format") #define TR_MULTI_LOWPOWER TR(INDENT "Low power", INDENT "Low power mode") #define TR_SYNCMENU "[Sync]" #define TR_LIMIT INDENT "Limit" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index e8f83e56e..a2776b86d 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -107,7 +107,7 @@ #define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" #define LEN_MULTI_PROTOCOLS "\006" -#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM2\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom" +#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom" #define LEN_SUBTYPE_FLYSKY "\004" #define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912" @@ -118,7 +118,8 @@ #define LEN_SUBTYPE_HISKY "\005" #define TR_SUBTYPE_HISKY "HiSky""HK310" -// SUBTYPE FOR DSMX use TR_DSM_PROTOCOLS with offset +1 +#define LEN_SUBTYPE_DSM "\006" +#define TR_SUBTYPE_DSM "2 22ms""2 11ms""X 22ms""X 11ms" #define LEN_SUBTYPE_YD717 "\007" #define TR_SUBTYPE_YD717 "YD717\0 ""SKYWLKR""Syma X2""XINXUN\0""NIHUI\0 " @@ -838,9 +839,10 @@ #define TR_RECEIVER INDENT "Receiver" #define TR_MULTI_RFTUNE TR(INDENT "Freq tune",INDENT "RF Freq. fine tune") #define TR_MULTI_VIDFREQ TR(INDENT "Vid. freq.", INDENT "Video frequency") -#define TR_MULTI_DSMFRAME TR(INDENT "DSM frame", INDENT "DSM frame format") +#define TR_MULTI_DSMPRNG TR(INDENT "Wrong PNRG", INDENT "Wrong PRNG tables") #define TR_MULTI_OPTION TR(INDENT "Option", INDENT "Option value") #define TR_MULTI_AUTOBIND INDENT "Autobind" +#define TR_MULTI_DSM_AUTODTECT TR(INDENT "Autodetect", INDENT "Autodetect format") #define TR_MULTI_LOWPOWER TR(INDENT "Low power", INDENT "Low power mode") #define TR_SYNCMENU "Sync " TR_ENTER #define TR_LIMIT INDENT"Limite" diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index 679d4fed8..428504458 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -107,7 +107,7 @@ #define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" #define LEN_MULTI_PROTOCOLS "\006" -#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM2\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom" +#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom" #define LEN_SUBTYPE_FLYSKY "\004" #define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912" @@ -118,7 +118,8 @@ #define LEN_SUBTYPE_HISKY "\005" #define TR_SUBTYPE_HISKY "HiSky""HK310" -// SUBTYPE FOR DSMX use TR_DSM_PROTOCOLS with offset +1 +#define LEN_SUBTYPE_DSM "\006" +#define TR_SUBTYPE_DSM "2 22ms""2 11ms""X 22ms""X 11ms" #define LEN_SUBTYPE_YD717 "\007" #define TR_SUBTYPE_YD717 "YD717\0 ""SKYWLKR""Syma X2""XINXUN\0""NIHUI\0 " @@ -838,9 +839,10 @@ #define TR_RECEIVER INDENT "Receiver" #define TR_MULTI_RFTUNE TR(INDENT "Freq tune",INDENT "RF Freq. fine tune") #define TR_MULTI_VIDFREQ TR(INDENT "Vid. freq.", INDENT "Video frequency") -#define TR_MULTI_DSMFRAME TR(INDENT "DSM frame", INDENT "DSM frame format") +#define TR_MULTI_DSMPRNG TR(INDENT "Wrong PNRG", INDENT "Wrong PRNG tables") #define TR_MULTI_OPTION TR(INDENT "Option", INDENT "Option value") #define TR_MULTI_AUTOBIND INDENT "Autobind" +#define TR_MULTI_DSM_AUTODTECT TR(INDENT "Autodetect", INDENT "Autodetect format") #define TR_MULTI_LOWPOWER TR(INDENT "Low power", INDENT "Low power mode") #define TR_SYNCMENU "[Sync]" #define TR_LIMIT INDENT"Limit" diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index 67a609200..1b8097d90 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -107,7 +107,7 @@ #define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" #define LEN_MULTI_PROTOCOLS "\006" -#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM2\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Perso\0" +#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Perso\0" #define LEN_SUBTYPE_FLYSKY "\004" #define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912" @@ -118,7 +118,8 @@ #define LEN_SUBTYPE_HISKY "\005" #define TR_SUBTYPE_HISKY "HiSky""HK310" -// SUBTYPE FOR DSMX use TR_DSM_PROTOCOLS with offset +1 +#define LEN_SUBTYPE_DSM "\006" +#define TR_SUBTYPE_DSM "2 22ms""2 11ms""X 22ms""X 11ms" #define LEN_SUBTYPE_YD717 "\007" #define TR_SUBTYPE_YD717 "YD717\0 ""SKYWLKR""Syma X2""XINXUN\0""NIHUI\0 " @@ -873,6 +874,7 @@ #define TR_MULTI_DSMFRAME INDENT "Format trame DSM" #define TR_MULTI_OPTION TR(INDENT "Option", INDENT "Option perso") #define TR_MULTI_AUTOBIND INDENT "Bind automatique" +#define TR_MULTI_DSM_AUTODTECT TR(INDENT "Autodetect", INDENT "Autodetect format") #define TR_MULTI_LOWPOWER TR( INDENT "low power", INDENT "Mode basse puiss.") #define TR_SYNCMENU "Sync [MENU]" #define TR_LIMIT INDENT "Limite" diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index dbbbbb04f..cf366c914 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -107,7 +107,7 @@ #define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" #define LEN_MULTI_PROTOCOLS "\006" -#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM2\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom" +#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom" #define LEN_SUBTYPE_FLYSKY "\004" #define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912" @@ -118,7 +118,8 @@ #define LEN_SUBTYPE_HISKY "\005" #define TR_SUBTYPE_HISKY "HiSky""HK310" -// SUBTYPE FOR DSMX use TR_DSM_PROTOCOLS with offset +1 +#define LEN_SUBTYPE_DSM "\006" +#define TR_SUBTYPE_DSM "2 22ms""2 11ms""X 22ms""X 11ms" #define LEN_SUBTYPE_YD717 "\007" #define TR_SUBTYPE_YD717 "YD717\0 ""SKYWLKR""Syma X2""XINXUN\0""NIHUI\0 " @@ -873,9 +874,10 @@ #endif #define TR_MULTI_RFTUNE TR(INDENT "Freq tune",INDENT "RF Freq. fine tune") #define TR_MULTI_VIDFREQ TR(INDENT "Vid. freq.", INDENT "Video frequency") -#define TR_MULTI_DSMFRAME TR(INDENT "DSM frame", INDENT "DSM frame format") +#define TR_MULTI_DSMPRNG TR(INDENT "Wrong PNRG", INDENT "Wrong PRNG tables") #define TR_MULTI_OPTION TR(INDENT "Option", INDENT "Option value") #define TR_MULTI_AUTOBIND INDENT "Autobind" +#define TR_MULTI_DSM_AUTODTECT TR(INDENT "Autodetect", INDENT "Autodetect format") #define TR_MULTI_LOWPOWER TR(INDENT "Low power", INDENT "Low power mode") #define TR_SYNCMENU "[Sync]" #define TR_LIMIT INDENT "Limiti" diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index f476c57e9..c86ca85bd 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -112,7 +112,7 @@ #define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" #define LEN_MULTI_PROTOCOLS "\006" -#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM2\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom" +#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom" #define LEN_SUBTYPE_FLYSKY "\004" #define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912" @@ -123,7 +123,8 @@ #define LEN_SUBTYPE_HISKY "\005" #define TR_SUBTYPE_HISKY "HiSky""HK310" -// SUBTYPE FOR DSMX use TR_DSM_PROTOCOLS with offset +1 +#define LEN_SUBTYPE_DSM "\006" +#define TR_SUBTYPE_DSM "2 22ms""2 11ms""X 22ms""X 11ms" #define LEN_SUBTYPE_YD717 "\007" #define TR_SUBTYPE_YD717 "YD717\0 ""SKYWLKR""Syma X2""XINXUN\0""NIHUI\0 " @@ -867,9 +868,10 @@ #endif #define TR_MULTI_RFTUNE TR(INDENT "Freq tune",INDENT "RF Freq. fine tune") #define TR_MULTI_VIDFREQ TR(INDENT "Vid. freq.", INDENT "Video frequency") -#define TR_MULTI_DSMFRAME TR(INDENT "DSM frame", INDENT "DSM frame format") +#define TR_MULTI_DSMPRNG TR(INDENT "Wrong PNRG", INDENT "Wrong PRNG tables") #define TR_MULTI_OPTION TR(INDENT "Option", INDENT "Option value") #define TR_MULTI_AUTOBIND INDENT "Autobind" +#define TR_MULTI_DSM_AUTODTECT TR(INDENT "Autodetect", INDENT "Autodetect format") #define TR_MULTI_LOWPOWER TR(INDENT "Low power", INDENT "Low power mode") #define TR_SYNCMENU "Sync [MENU]" #define TR_LIMIT INDENT "Grenzen" diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index c59984285..ac3c635b4 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -108,7 +108,7 @@ #define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" #define LEN_MULTI_PROTOCOLS "\006" -#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM2\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom" +#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom" #define LEN_SUBTYPE_FLYSKY "\004" #define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912" @@ -119,7 +119,8 @@ #define LEN_SUBTYPE_HISKY "\005" #define TR_SUBTYPE_HISKY "HiSky""HK310" -// SUBTYPE FOR DSMX use TR_DSM_PROTOCOLS with offset +1 +#define LEN_SUBTYPE_DSM "\006" +#define TR_SUBTYPE_DSM "2 22ms""2 11ms""X 22ms""X 11ms" #define LEN_SUBTYPE_YD717 "\007" #define TR_SUBTYPE_YD717 "YD717\0 ""SKYWLKR""Syma X2""XINXUN\0""NIHUI\0 " @@ -875,9 +876,10 @@ #endif #define TR_MULTI_RFTUNE TR(INDENT "Freq tune",INDENT "RF Freq. fine tune") #define TR_MULTI_VIDFREQ TR(INDENT "Vid. freq.", INDENT "Video frequency") -#define TR_MULTI_DSMFRAME TR(INDENT "DSM frame", INDENT "DSM frame format") +#define TR_MULTI_DSMPRNG TR(INDENT "Wrong PNRG", INDENT "Wrong PRNG tables") #define TR_MULTI_OPTION TR(INDENT "Option", INDENT "Option value") #define TR_MULTI_AUTOBIND INDENT "Autobind" +#define TR_MULTI_DSM_AUTODTECT TR(INDENT "Autodetect", INDENT "Autodetect format") #define TR_MULTI_LOWPOWER TR(INDENT "Low power", INDENT "Low power mode") #define TR_SYNCMENU "[Synch]" #define TR_LIMIT INDENT "Limit" diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index b757cff1a..44cb5df09 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -107,7 +107,7 @@ #define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" #define LEN_MULTI_PROTOCOLS "\006" -#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM2\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom" +#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom" #define LEN_SUBTYPE_FLYSKY "\004" @@ -119,7 +119,8 @@ #define LEN_SUBTYPE_HISKY "\005" #define TR_SUBTYPE_HISKY "HiSky""HK310" -// SUBTYPE FOR DSMX use TR_DSM_PROTOCOLS with offset +1 +#define LEN_SUBTYPE_DSM "\006" +#define TR_SUBTYPE_DSM "2 22ms""2 11ms""X 22ms""X 11ms" #define LEN_SUBTYPE_YD717 "\007" #define TR_SUBTYPE_YD717 "YD717\0 ""SKYWLKR""Syma X2""XINXUN\0""NIHUI\0 " @@ -834,9 +835,10 @@ #define TR_SYNCMENU "Sync [MENU]" #define TR_MULTI_RFTUNE TR(INDENT "Freq tune",INDENT "RF Freq. fine tune") #define TR_MULTI_VIDFREQ TR(INDENT "Vid. freq.", INDENT "Video frequency") -#define TR_MULTI_DSMFRAME TR(INDENT "DSM frame", INDENT "DSM frame format") +#define TR_MULTI_DSMPRNG TR(INDENT "Wrong PNRG", INDENT "Wrong PRNG tables") #define TR_MULTI_OPTION TR(INDENT "Option", INDENT "Option value") #define TR_MULTI_AUTOBIND INDENT "Autobind" +#define TR_MULTI_DSM_AUTODTECT TR(INDENT "Autodetect", INDENT "Autodetect format") #define TR_MULTI_LOWPOWER TR(INDENT "Low power", INDENT "Low power mode") #define TR_LIMIT INDENT"Limite" #define TR_MINRSSI "Min Rssi" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index ef5e2fd73..3bd696ddc 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -107,7 +107,7 @@ #define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" #define LEN_MULTI_PROTOCOLS "\006" -#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM2\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom" +#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom" #define LEN_SUBTYPE_FLYSKY "\004" #define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912" @@ -118,7 +118,8 @@ #define LEN_SUBTYPE_HISKY "\005" #define TR_SUBTYPE_HISKY "HiSky""HK310" -// SUBTYPE FOR DSMX use TR_DSM_PROTOCOLS with offset +1 +#define LEN_SUBTYPE_DSM "\006" +#define TR_SUBTYPE_DSM "2 22ms""2 11ms""X 22ms""X 11ms" #define LEN_SUBTYPE_YD717 "\007" #define TR_SUBTYPE_YD717 "YD717\0 ""SKYWLKR""Syma X2""XINXUN\0""NIHUI\0 " @@ -887,9 +888,10 @@ #define TR_SYNCMENU "Synk [MENU]" #define TR_MULTI_RFTUNE TR(INDENT "Freq tune",INDENT "RF Freq. fine tune") #define TR_MULTI_VIDFREQ TR(INDENT "Vid. freq.", INDENT "Video frequency") -#define TR_MULTI_DSMFRAME TR(INDENT "DSM frame", INDENT "DSM frame format") +#define TR_MULTI_DSMPRNG TR(INDENT "Wrong PNRG", INDENT "Wrong PRNG tables") #define TR_MULTI_OPTION TR(INDENT "Option", INDENT "Option value") #define TR_MULTI_AUTOBIND INDENT "Autobind" +#define TR_MULTI_DSM_AUTODTECT TR(INDENT "Autodetect", INDENT "Autodetect format") #define TR_MULTI_LOWPOWER TR(INDENT "Low power", INDENT "Low power mode") #define TR_LIMIT INDENT "NivÄ" #define TR_MINRSSI "Min Rssi"