From 92dde79dec04d8b10c021a0ec82202fb60e1323f Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Tue, 25 Oct 2016 22:51:34 +0200 Subject: [PATCH] New protocol and telemetry: FlySky AFHDS2A (#3948) * New protocol for multimode FlySky AFHDS2A * Also add AFHDS2A protocol to companion * fix compile error --- companion/src/eeprominterface.cpp | 3 +- companion/src/eeprominterface.h | 3 +- companion/src/modeledit/setup_module.ui | 2 +- companion/src/modelprinter.cpp | 5 ++- radio/src/gui/128x64/model_setup.cpp | 42 ++++++++++++++++--------- radio/src/gui/212x64/model_setup.cpp | 20 ++++++++++-- radio/src/gui/480x272/model_setup.cpp | 21 +++++++++++-- radio/src/gui/gui_common.h | 6 ++-- radio/src/myeeprom.h | 26 ++++++++------- radio/src/pulses/multi_arm.cpp | 5 +++ radio/src/translations.cpp | 2 ++ radio/src/translations.h | 5 ++- radio/src/translations/cz.h.txt | 10 ++++-- radio/src/translations/de.h.txt | 10 ++++-- radio/src/translations/en.h.txt | 10 ++++-- radio/src/translations/es.h.txt | 10 ++++-- radio/src/translations/fi.h.txt | 10 ++++-- radio/src/translations/fr.h.txt | 10 ++++-- radio/src/translations/it.h.txt | 10 ++++-- radio/src/translations/nl.h.txt | 10 ++++-- radio/src/translations/pl.h.txt | 10 ++++-- radio/src/translations/pt.h.txt | 10 ++++-- radio/src/translations/se.h.txt | 10 ++++-- 23 files changed, 179 insertions(+), 71 deletions(-) diff --git a/companion/src/eeprominterface.cpp b/companion/src/eeprominterface.cpp index 1e440a498..35e34cdee 100644 --- a/companion/src/eeprominterface.cpp +++ b/companion/src/eeprominterface.cpp @@ -1859,7 +1859,6 @@ SimulatorInterface *GetCurrentFirmwareSimulator() unsigned int getNumSubtypes(MultiModuleRFProtocols type) { switch (type) { case MM_RF_PROTO_HISKY: - case MM_RF_PROTO_DSM2: case MM_RF_PROTO_SYMAX: case MM_RF_PROTO_KN: return 2; @@ -1870,6 +1869,8 @@ unsigned int getNumSubtypes(MultiModuleRFProtocols type) { case MM_RF_PROTO_FRSKY: case MM_RF_PROTO_FLYSKY: + case MM_RF_PROTO_DSM2: + case MM_RF_PROTO_AFHDS2A: return 4; case MM_RF_PROTO_MJXQ: diff --git a/companion/src/eeprominterface.h b/companion/src/eeprominterface.h index 8500042dc..b97a0d325 100644 --- a/companion/src/eeprominterface.h +++ b/companion/src/eeprominterface.h @@ -873,7 +873,8 @@ enum MultiModuleRFProtocols { MM_RF_PROTO_ASSAN, MM_RF_PROTO_HONTAI, MM_RF_PROTO_OLRS, - MM_RF_PROTO_LAST= MM_RF_PROTO_OLRS + MM_RF_PROTO_AFHDS2A, + MM_RF_PROTO_LAST= MM_RF_PROTO_AFHDS2A }; unsigned int getNumSubtypes(MultiModuleRFProtocols type); diff --git a/companion/src/modeledit/setup_module.ui b/companion/src/modeledit/setup_module.ui index c0c40aca8..1c3e599de 100644 --- a/companion/src/modeledit/setup_module.ui +++ b/companion/src/modeledit/setup_module.ui @@ -611,7 +611,7 @@ - Autobind + Bind on startup diff --git a/companion/src/modelprinter.cpp b/companion/src/modelprinter.cpp index 2cafc0607..5966ef7b0 100644 --- a/companion/src/modelprinter.cpp +++ b/companion/src/modelprinter.cpp @@ -109,7 +109,7 @@ QString ModelPrinter::printMultiRfProtocol(int rfProtocol, bool custom) { static const char *strings[] = { "FlySky", "Hubsan", "FrSky", "Hisky", "V2x2", "DSM", "Devo", "YD717", "KN", "SymaX", "SLT", "CX10", "CG023", - "Bayang", "ESky", "MT99XX", "MJXQ", "Shenqi", "FY326", "SFHSS", "J6 PRO","FQ777","Assan","Hontai","OLRS","Custom" + "Bayang", "ESky", "MT99XX", "MJXQ", "Shenqi", "FY326", "SFHSS", "J6 PRO","FQ777","Assan","Hontai","OLRS","FlySky AFHDS2A" }; if (custom) return "Custom - proto " + QString::number(rfProtocol); @@ -132,6 +132,7 @@ QString ModelPrinter::printMultiSubType(int rfProtocol, bool custom, int subType static const char *mt99_strings[] = {"MT99","H7","YZ"}; static const char *mjxq_strings[] = {"WLH08", "X600", "X800", "H26D", "E010"}; static const char *hontai_strings[] = {"Standard","JJRC X1","X5C1 Clone"}; + static const char *afhds2a_strings[] = {"PWM and IBUS", "PPM and IBUS", "PWM and SBUS", "PPM and SBUS"}; if (custom) return CHECK_IN_ARRAY(custom_subtype_strings, subType); @@ -161,6 +162,8 @@ QString ModelPrinter::printMultiSubType(int rfProtocol, bool custom, int subType return CHECK_IN_ARRAY(mjxq_strings, subType); case MM_RF_PROTO_HONTAI: return CHECK_IN_ARRAY(hontai_strings, subType); + case MM_RF_PROTO_AFHDS2A: + return CHECK_IN_ARRAY(afhds2a_strings, subType); default: return "DEFAULT"; } diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index 0aa2eeab5..12c348cff 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -636,40 +636,43 @@ void menuModelSetup(event_t event) lcdDrawTextAlignedLeft(y, STR_SUBTYPE); switch (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true)) { case MM_RF_PROTO_FLYSKY: - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_FLYSKY, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition == 0 ? attr : 0); + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_FLYSKY, g_model.moduleData[EXTERNAL_MODULE].subType, attr); break; case MM_RF_PROTO_FRSKY: - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_FRSKY, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition == 0 ? attr : 0); + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_FRSKY, g_model.moduleData[EXTERNAL_MODULE].subType, attr); break; case MM_RF_PROTO_HISKY: - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_HISKY, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition == 0 ? attr : 0); + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_HISKY, g_model.moduleData[EXTERNAL_MODULE].subType, attr); break; case MM_RF_PROTO_DSM2: - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_DSM, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition == 0 ? attr : 0); + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_DSM, g_model.moduleData[EXTERNAL_MODULE].subType, attr); break; case MM_RF_PROTO_YD717: - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_YD717, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition == 0 ? attr : 0); + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_YD717, g_model.moduleData[EXTERNAL_MODULE].subType, attr); break; case MM_RF_PROTO_KN: - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_KN, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition == 0 ? attr : 0); + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_KN, g_model.moduleData[EXTERNAL_MODULE].subType, attr); break; case MM_RF_PROTO_SYMAX: - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_SYMAX, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition == 0 ? attr : 0); + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_SYMAX, g_model.moduleData[EXTERNAL_MODULE].subType, attr); break; case MM_RF_PROTO_CX10: - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_CX10, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition == 0 ? attr : 0); + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_CX10, g_model.moduleData[EXTERNAL_MODULE].subType, attr); break; case MM_RF_PROTO_CG023: - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_CG023, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition == 0 ? attr : 0); + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_CG023, g_model.moduleData[EXTERNAL_MODULE].subType, attr); break; case MM_RF_PROTO_MT99XX: - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_MT99, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition == 0 ? attr : 0); + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_MT99, g_model.moduleData[EXTERNAL_MODULE].subType, attr); break; case MM_RF_PROTO_MJXQ: - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_MJXQ, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition == 0 ? attr : 0); + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_MJXQ, g_model.moduleData[EXTERNAL_MODULE].subType, attr); break; case MM_RF_PROTO_HONTAI: - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_HONTAI, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==2 ? attr : 0); + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_HONTAI, g_model.moduleData[EXTERNAL_MODULE].subType, attr); + break; + case MM_RF_PROTO_FS_AFHDS2A: + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_AFHDS2A, g_model.moduleData[EXTERNAL_MODULE].subType, attr); break; case MM_RF_CUSTOM_SELECTED: lcdDrawNumber(MODEL_SETUP_2ND_COLUMN + 3 * FW, y, g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false), RIGHT | (menuHorizontalPosition == 0 ? attr : 0), 2); @@ -692,6 +695,7 @@ void menuModelSetup(event_t event) case MM_RF_PROTO_FRSKY: case MM_RF_PROTO_DSM2: case MM_RF_PROTO_MT99XX: + case MM_RF_PROTO_FS_AFHDS2A: CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 3); break; case MM_RF_PROTO_MJXQ: @@ -888,6 +892,8 @@ void menuModelSetup(event_t event) } #if defined(MULTIMODULE) else if (IS_MODULE_MULTIMODULE(moduleIdx)) { + int optionValue = g_model.moduleData[moduleIdx].multi.optionValue; + switch (g_model.moduleData[moduleIdx].getMultiProtocol(true)) { case MM_RF_PROTO_FRSKY: @@ -897,13 +903,21 @@ void menuModelSetup(event_t event) case MM_RF_PROTO_HUBSAN: lcdDrawTextAlignedLeft(y, STR_MULTI_VIDFREQ); break; + case MM_RF_PROTO_FS_AFHDS2A: + lcdDrawTextAlignedLeft(y, TR_MULTI_SERVOFREQ); + optionValue = 50 + 5 * optionValue; + break; default: lcdDrawTextAlignedLeft(y, STR_MULTI_OPTION); break; } - lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.moduleData[moduleIdx].multi.optionValue, LEFT | attr); + lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, optionValue, LEFT | attr); if (attr) { - CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -128, 127); + if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_FS_AFHDS2A) { + CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, 0, 70); + } else { + CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -128, 127); + } } } #endif diff --git a/radio/src/gui/212x64/model_setup.cpp b/radio/src/gui/212x64/model_setup.cpp index ddd35efd1..49394caca 100644 --- a/radio/src/gui/212x64/model_setup.cpp +++ b/radio/src/gui/212x64/model_setup.cpp @@ -740,6 +740,9 @@ void menuModelSetup(event_t event) case MM_RF_PROTO_HONTAI: 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_FS_AFHDS2A: + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+10*FW, y, STR_SUBTYPE_AFHDS2A , g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==2 ? attr : 0); + break; case MM_RF_CUSTOM_SELECTED: lcdDrawNumber(MODEL_SETUP_2ND_COLUMN+14*FW, y, g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false), menuHorizontalPosition==2 ? attr : 0, 2); lcdDrawNumber(MODEL_SETUP_2ND_COLUMN+16*FW, y, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==3 ? attr : 0, 2); @@ -806,6 +809,7 @@ void menuModelSetup(event_t event) case MM_RF_PROTO_MT99XX: case MM_RF_PROTO_FRSKY: case MM_RF_PROTO_DSM2: + case MM_RF_PROTO_FS_AFHDS2A: CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 3); break; case MM_RF_PROTO_MJXQ: @@ -983,7 +987,9 @@ void menuModelSetup(event_t event) } #if defined(MULTIMODULE) else if (IS_MODULE_MULTIMODULE(moduleIdx)) { - switch ( g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true)) + int optionValue = g_model.moduleData[moduleIdx].multi.optionValue; + + switch (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true)) { case MM_RF_PROTO_FRSKY: case MM_RF_PROTO_SFHSS: @@ -992,13 +998,21 @@ void menuModelSetup(event_t event) case MM_RF_PROTO_HUBSAN: lcdDrawTextAlignedLeft(y, STR_MULTI_VIDFREQ); break; + case MM_RF_PROTO_FS_AFHDS2A: + lcdDrawTextAlignedLeft(y, TR_MULTI_SERVOFREQ); + optionValue = 50 + 5 * optionValue; + break; default: lcdDrawTextAlignedLeft(y, STR_MULTI_OPTION); break; } - lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.moduleData[moduleIdx].multi.optionValue, LEFT | attr); + lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, optionValue, LEFT | attr); if (attr) { - CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -128, 127); + if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_FS_AFHDS2A) { + CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, 0, 70); + } else { + CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -128, 127); + } } } #endif diff --git a/radio/src/gui/480x272/model_setup.cpp b/radio/src/gui/480x272/model_setup.cpp index c08d83b89..600e2f135 100644 --- a/radio/src/gui/480x272/model_setup.cpp +++ b/radio/src/gui/480x272/model_setup.cpp @@ -671,6 +671,9 @@ bool menuModelSetup(event_t event) case MM_RF_PROTO_HONTAI: lcdDrawTextAtIndex(MODEL_SETUP_4TH_COLUMN, y, STR_SUBTYPE_HONTAI, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==2 ? attr : 0); break; + case MM_RF_PROTO_FS_AFHDS2A: + lcdDrawTextAtIndex(MODEL_SETUP_4TH_COLUMN, y, STR_SUBTYPE_AFHDS2A , g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==2 ? attr : 0); + break; case MM_RF_CUSTOM_SELECTED: lcdDrawNumber(MODEL_SETUP_4TH_COLUMN, y, g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false), menuHorizontalPosition==2 ? attr : 0, 2); lcdDrawNumber(MODEL_SETUP_4TH_COLUMN + MODEL_SETUP_BIND_OFS, y, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==3 ? attr : 0, 2); @@ -738,6 +741,7 @@ bool menuModelSetup(event_t event) case MM_RF_PROTO_MT99XX: case MM_RF_PROTO_FRSKY: case MM_RF_PROTO_DSM2: + case MM_RF_PROTO_FS_AFHDS2A: CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 3); break; case MM_RF_PROTO_MJXQ: @@ -892,6 +896,8 @@ bool menuModelSetup(event_t event) } #if defined(MULTIMODULE) else if (IS_MODULE_MULTIMODULE(moduleIdx)) { + int optionValue = g_model.moduleData[moduleIdx].multi.optionValue; + switch (g_model.moduleData[moduleIdx].getMultiProtocol(true)) { case MM_RF_PROTO_FRSKY: @@ -901,13 +907,22 @@ bool menuModelSetup(event_t event) case MM_RF_PROTO_HUBSAN: lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MULTI_VIDFREQ); break; + case MM_RF_PROTO_FS_AFHDS2A: + lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MULTI_SERVOFREQ); + optionValue = 50 + 5 * optionValue; + break; default: lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MULTI_OPTION); break; } - 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); + lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, optionValue, LEFT | attr); + if (attr) { + if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_FS_AFHDS2A) { + CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, 0, 70); + } else { + CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -128, 127); + } + } } #endif break; diff --git a/radio/src/gui/gui_common.h b/radio/src/gui/gui_common.h index e2bf03501..c7c2f9bd8 100644 --- a/radio/src/gui/gui_common.h +++ b/radio/src/gui/gui_common.h @@ -118,8 +118,10 @@ void runFatalErrorScreen(const char * message); #define MULTIMODULE_MODE_ROWS(x) (g_model.moduleData[x].multi.customProto) ? (uint8_t) 3 :MULTIMODULE_HAS_SUBTYPE(g_model.moduleData[x].getMultiProtocol(true)) ? (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(true)) ? (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 || x == MM_RF_CUSTOM_SELECTED) -#define MULTIMODULE_HASOPTIONS(x) (x == MM_RF_PROTO_HUBSAN || x == MM_RF_PROTO_FRSKY || x == MM_RF_PROTO_SFHSS || x == MM_RF_CUSTOM_SELECTED) +#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 || x == MM_RF_PROTO_FS_AFHDS2A || x == MM_RF_CUSTOM_SELECTED) +#define MULTIMODULE_HASOPTIONS(x) (x == MM_RF_PROTO_HUBSAN || x == MM_RF_PROTO_FRSKY || x == MM_RF_PROTO_SFHSS || x == MM_RF_PROTO_FS_AFHDS2A || x == MM_RF_CUSTOM_SELECTED) #define MULTIMODULE_FAILSAFEROWS(x) (IS_MODULE_MULTIMODULE(x) && (MULTIMODULE_HASOPTIONS(g_model.moduleData[x].getMultiProtocol(true)))) ? (uint8_t) 0: HIDDEN_ROW #else diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index efd4fd9a0..ae5efcc98 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -525,20 +525,24 @@ enum MultiModuleRFProtocols { MM_RF_PROTO_ASSAN, MM_RF_PROTO_HONTAI, MM_RF_PROTO_OLRS, - MM_RF_PROTO_LAST= MM_RF_PROTO_OLRS + MM_RF_PROTO_FS_AFHDS2A, + MM_RF_PROTO_LAST= MM_RF_PROTO_FS_AFHDS2A }; -#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 +enum MMDSM2Subtypes { + MM_RF_DSM2_SUBTYPE_DSM2_22, + MM_RF_DSM2_SUBTYPE_DSM2_11, + MM_RF_DSM2_SUBTYPE_DSMX_22, + MM_RF_DSM2_SUBTYPE_DSMX_11, + MM_RF_DSM2_SUBTYPE_AUTO +}; - -#define MM_RF_FRSKY_SUBTYPE_D16 0 -#define MM_RF_FRSKY_SUBTYPE_D8 1 -#define MM_RF_FRSKY_SUBTYPE_D16_8CH 2 -#define MM_RF_FRSKY_SUBTYPE_V8 3 +enum MMRFrskySubtypes { + MM_RF_FRSKY_SUBTYPE_D16, + MM_RF_FRSKY_SUBTYPE_D8, + MM_RF_FRSKY_SUBTYPE_D16_8CH, + MM_RF_FRSKY_SUBTYPE_V8 +}; #define HAS_RF_PROTOCOL_FAILSAFE(rf) ((rf) == RF_PROTO_X16) #define HAS_RF_PROTOCOL_MODELINDEX(rf) (((rf) == RF_PROTO_X16) || ((rf) == RF_PROTO_LR12)) diff --git a/radio/src/pulses/multi_arm.cpp b/radio/src/pulses/multi_arm.cpp index 1543d05a9..81a358d68 100644 --- a/radio/src/pulses/multi_arm.cpp +++ b/radio/src/pulses/multi_arm.cpp @@ -164,6 +164,11 @@ void setupPulsesMultimodule(uint8_t port) } } + // For custom protocol send unmofied type byte + if (g_model.moduleData[port].getMultiProtocol(true) == MM_RF_CUSTOM_SELECTED) + type = g_model.moduleData[port].getMultiProtocol(false); + + // header, byte 0, 0x55 for proto 0-31 0x54 for 32-63 if (type <= 31) sendByteMulti(0x55); diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 12241b4e2..b09d540b4 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -124,6 +124,7 @@ const pm_char STR_OPEN9X[] PROGMEM = ISTR(SUBTYPE_MT99) ISTR(SUBTYPE_MJXQ) ISTR(SUBTYPE_HONTAI) + ISTR(SUBTYPE_AFHDS2A) ISTR(OPTIONS_DSM) #endif ISTR(VOLTSRC) @@ -472,6 +473,7 @@ 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_SERVOFREQ[] PROGMEM = TR_MULTI_SERVOFREQ; #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 6d962ed43..9cba909bc 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -225,7 +225,8 @@ extern const pm_char STR_OPEN9X[]; #define OFS_SUBTYPE_MT99 (OFS_SUBTYPE_KN + sizeof(TR_SUBTYPE_KN)) #define OFS_SUBTYPE_MJXQ (OFS_SUBTYPE_MT99 + sizeof(TR_SUBTYPE_MT99)) #define OFS_SUBTYPE_HONTAI (OFS_SUBTYPE_MJXQ + sizeof(TR_SUBTYPE_MJXQ)) - #define OFS_OPTIONS_DSM (OFS_SUBTYPE_HONTAI + sizeof(TR_SUBTYPE_HONTAI)) + #define OFS_SUBTYPE_AFHDS2A (OFS_SUBTYPE_HONTAI + sizeof(TR_SUBTYPE_HONTAI)) + #define OFS_OPTIONS_DSM (OFS_SUBTYPE_AFHDS2A + sizeof(TR_SUBTYPE_AFHDS2A)) #define OFS_VOLTSRC (OFS_OPTIONS_DSM + sizeof(TR_OPTIONS_DSM)) #else #define OFS_VOLTSRC (OFS_DSM_PROTOCOLS + sizeof(TR_DSM_PROTOCOLS)) @@ -360,6 +361,7 @@ extern const pm_char STR_OPEN9X[]; #define STR_SUBTYPE_MT99 (STR_OPEN9X + OFS_SUBTYPE_MT99) #define STR_SUBTYPE_MJXQ (STR_OPEN9X + OFS_SUBTYPE_MJXQ) #define STR_SUBTYPE_HONTAI (STR_OPEN9X + OFS_SUBTYPE_HONTAI) + #define STR_SUBTYPE_AFHDS2A (STR_OPEN9X + OFS_SUBTYPE_AFHDS2A) #define STR_OPTIONS_DSM (STR_OPEN9X + OFS_OPTIONS_DSM) #endif #define STR_CURVE_TYPES (STR_OPEN9X + OFS_CURVE_TYPES) @@ -604,6 +606,7 @@ 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_SERVOFREQ[]; #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 823f4abcf..d625c581d 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -107,12 +107,15 @@ #define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" #define LEN_MULTI_PROTOCOLS "\006" -#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 " +#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 ""FS 2A\0" #define TR_MULTI_CUSTOM "Custom" -#define LEN_SUBTYPE_FLYSKY "\004" -#define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912" +#define LEN_SUBTYPE_FLYSKY "\007" +#define TR_SUBTYPE_FLYSKY "Std\0 ""V9x9 ""V6x6 ""V912 " + +#define LEN_SUBTYPE_AFHDS2A "\010" +#define TR_SUBTYPE_AFHDS2A "PWM,IBUS""PPM,IBUS""PWM,SBUS""PPM,SBUS" #define LEN_SUBTYPE_FRSKY "\007" #define TR_SUBTYPE_FRSKY "D16\0 ""D8\0 ""D16 8ch""V8\0 " @@ -897,6 +900,7 @@ #define TR_MULTI_AUTOBIND TR(INDENT "Autobind",INDENT "Bind on powerup") #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_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") #define TR_SYNCMENU "[Sync]" #define TR_LIMIT INDENT"Limit" #define TR_MINRSSI "Min Rssi" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index bed5b2a78..12a3a2c66 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -111,12 +111,15 @@ #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 ""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 " +#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 ""FS 2A\0" #define TR_MULTI_CUSTOM "Custom" -#define LEN_SUBTYPE_FLYSKY "\004" -#define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912" +#define LEN_SUBTYPE_FLYSKY "\007" +#define TR_SUBTYPE_FLYSKY "Std\0 ""V9x9 ""V6x6 ""V912 " + +#define LEN_SUBTYPE_AFHDS2A "\010" +#define TR_SUBTYPE_AFHDS2A "PWM,IBUS""PPM,IBUS""PWM,SBUS""PPM,SBUS" #define LEN_SUBTYPE_FRSKY "\007" #define TR_SUBTYPE_FRSKY "D16\0 ""D8\0 ""D16 8ch""V8\0 " @@ -900,6 +903,7 @@ #define TR_MULTI_AUTOBIND TR(INDENT "Autobind",INDENT "Bind on powerup") #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_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") #define TR_SYNCMENU "Sync [MENU]" #define TR_LIMIT INDENT "Grenzen" #define TR_MINRSSI "Min. RSSI" diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index fd09c5c68..0c9fc96c5 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -111,12 +111,15 @@ #define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" #define LEN_MULTI_PROTOCOLS "\006" -#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 " +#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 ""FS 2A\0""FS 2A\0" #define TR_MULTI_CUSTOM "Custom" -#define LEN_SUBTYPE_FLYSKY "\004" -#define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912" +#define LEN_SUBTYPE_FLYSKY "\007" +#define TR_SUBTYPE_FLYSKY "Std\0 ""V9x9 ""V6x6 ""V912 " + +#define LEN_SUBTYPE_AFHDS2A "\010" +#define TR_SUBTYPE_AFHDS2A "PWM,IBUS""PPM,IBUS""PWM,SBUS""PPM,SBUS" #define LEN_SUBTYPE_FRSKY "\007" #define TR_SUBTYPE_FRSKY "D16\0 ""D8\0 ""D16 8ch""V8\0 " @@ -866,6 +869,7 @@ #define TR_MULTI_AUTOBIND TR(INDENT "Autobind",INDENT "Bind on powerup") #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_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") #define TR_SYNCMENU "[Sync]" #define TR_LIMIT INDENT "Limit" #define TR_MINRSSI "Min Rssi" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index 71f5fa130..138968247 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -107,12 +107,15 @@ #define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" #define LEN_MULTI_PROTOCOLS "\006" -#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 " +#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 ""FS 2A\0" #define TR_MULTI_CUSTOM "Custom" -#define LEN_SUBTYPE_FLYSKY "\004" -#define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912" +#define LEN_SUBTYPE_FLYSKY "\007" +#define TR_SUBTYPE_FLYSKY "Std\0 ""V9x9 ""V6x6 ""V912 " + +#define LEN_SUBTYPE_AFHDS2A "\010" +#define TR_SUBTYPE_AFHDS2A "PWM,IBUS""PPM,IBUS""PWM,SBUS""PPM,SBUS" #define LEN_SUBTYPE_FRSKY "\007" #define TR_SUBTYPE_FRSKY "D16\0 ""D8\0 ""D16 8ch""V8\0 " @@ -845,6 +848,7 @@ #define TR_MULTI_AUTOBIND TR(INDENT "Autobind",INDENT "Bind on powerup") #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_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") #define TR_SYNCMENU "Sync " TR_ENTER #define TR_LIMIT INDENT"Limite" #define TR_MINRSSI "Min Rssi" diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index 5301a0da3..1aa5aff4a 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -107,12 +107,15 @@ #define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" #define LEN_MULTI_PROTOCOLS "\006" -#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 " +#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 ""FS 2A\0" #define TR_MULTI_CUSTOM "Custom" -#define LEN_SUBTYPE_FLYSKY "\004" -#define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912" +#define LEN_SUBTYPE_FLYSKY "\007" +#define TR_SUBTYPE_FLYSKY "Std\0 ""V9x9 ""V6x6 ""V912 " + +#define LEN_SUBTYPE_AFHDS2A "\010" +#define TR_SUBTYPE_AFHDS2A "PWM,IBUS""PPM,IBUS""PWM,SBUS""PPM,SBUS" #define LEN_SUBTYPE_FRSKY "\007" #define TR_SUBTYPE_FRSKY "D16\0 ""D8\0 ""D16 8ch""V8\0 " @@ -845,6 +848,7 @@ #define TR_MULTI_AUTOBIND TR(INDENT "Autobind",INDENT "Bind on powerup") #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_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") #define TR_SYNCMENU "[Sync]" #define TR_LIMIT INDENT"Limit" #define TR_MINRSSI "Min Rssi" diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index eb3db87ab..077ec03bd 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -107,12 +107,15 @@ #define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" #define LEN_MULTI_PROTOCOLS "\006" -#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 " +#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 ""FS 2A\0" #define TR_MULTI_CUSTOM "Perso" -#define LEN_SUBTYPE_FLYSKY "\004" -#define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912" +#define LEN_SUBTYPE_FLYSKY "\007" +#define TR_SUBTYPE_FLYSKY "Std\0 ""V9x9 ""V6x6 ""V912 " + +#define LEN_SUBTYPE_AFHDS2A "\010" +#define TR_SUBTYPE_AFHDS2A "PWM,IBUS""PPM,IBUS""PWM,SBUS""PPM,SBUS" #define LEN_SUBTYPE_FRSKY "\007" #define TR_SUBTYPE_FRSKY "D16\0 ""D8\0 ""D16 8ch""V8\0 " @@ -877,6 +880,7 @@ #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_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") #define TR_SYNCMENU "Sync [MENU]" #define TR_LIMIT INDENT "Limite" #define TR_MINRSSI "RSSI Min." diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index 827319616..1299a842a 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -107,12 +107,15 @@ #define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" #define LEN_MULTI_PROTOCOLS "\006" -#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 " +#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 ""FS 2A\0" #define TR_MULTI_CUSTOM "Custom" -#define LEN_SUBTYPE_FLYSKY "\004" -#define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912" +#define LEN_SUBTYPE_FLYSKY "\007" +#define TR_SUBTYPE_FLYSKY "Std\0 ""V9x9 ""V6x6 ""V912 " + +#define LEN_SUBTYPE_AFHDS2A "\010" +#define TR_SUBTYPE_AFHDS2A "PWM,IBUS""PPM,IBUS""PWM,SBUS""PPM,SBUS" #define LEN_SUBTYPE_FRSKY "\007" #define TR_SUBTYPE_FRSKY "D16\0 ""D8\0 ""D16 8ch""V8\0 " @@ -880,6 +883,7 @@ #define TR_MULTI_AUTOBIND TR(INDENT "Autobind",INDENT "Bind on powerup") #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_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") #define TR_SYNCMENU "[Sync]" #define TR_LIMIT INDENT "Limiti" #define TR_MINRSSI "Min Rssi" diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index 874ed3a4b..c5f3a4bd5 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -112,12 +112,15 @@ #define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" #define LEN_MULTI_PROTOCOLS "\006" -#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 " +#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 ""FS 2A\0" #define TR_MULTI_CUSTOM "Custom" -#define LEN_SUBTYPE_FLYSKY "\004" -#define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912" +#define LEN_SUBTYPE_FLYSKY "\007" +#define TR_SUBTYPE_FLYSKY "Std\0 ""V9x9 ""V6x6 ""V912 " + +#define LEN_SUBTYPE_AFHDS2A "\010" +#define TR_SUBTYPE_AFHDS2A "PWM,IBUS""PPM,IBUS""PWM,SBUS""PPM,SBUS" #define LEN_SUBTYPE_FRSKY "\007" #define TR_SUBTYPE_FRSKY "D16\0 ""D8\0 ""D16 8ch""V8\0 " @@ -874,6 +877,7 @@ #define TR_MULTI_AUTOBIND TR(INDENT "Autobind",INDENT "Bind on powerup") #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_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") #define TR_SYNCMENU "Sync [MENU]" #define TR_LIMIT INDENT "Grenzen" #define TR_MINRSSI "Min. RSSI" diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index 20f34fa65..303c72600 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -108,12 +108,15 @@ #define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" #define LEN_MULTI_PROTOCOLS "\006" -#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 " +#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 ""FS 2A\0" #define TR_MULTI_CUSTOM "Custom" -#define LEN_SUBTYPE_FLYSKY "\004" -#define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912" +#define LEN_SUBTYPE_FLYSKY "\007" +#define TR_SUBTYPE_FLYSKY "Std\0 ""V9x9 ""V6x6 ""V912 " + +#define LEN_SUBTYPE_AFHDS2A "\010" +#define TR_SUBTYPE_AFHDS2A "PWM,IBUS""PPM,IBUS""PWM,SBUS""PPM,SBUS" #define LEN_SUBTYPE_FRSKY "\007" #define TR_SUBTYPE_FRSKY "D16\0 ""D8\0 ""D16 8ch""V8\0 " @@ -882,6 +885,7 @@ #define TR_MULTI_AUTOBIND TR(INDENT "Autobind",INDENT "Bind on powerup") #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_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") #define TR_SYNCMENU "[Synch]" #define TR_LIMIT INDENT "Limit" #define TR_MINRSSI "Min Rssi" diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index e61a9db35..d7d22f3bc 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -107,13 +107,16 @@ #define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" #define LEN_MULTI_PROTOCOLS "\006" -#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 " +#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 ""FS 2A\0" #define TR_MULTI_CUSTOM "Custom" -#define LEN_SUBTYPE_FLYSKY "\004" -#define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912" +#define LEN_SUBTYPE_FLYSKY "\007" +#define TR_SUBTYPE_FLYSKY "Std\0 ""V9x9 ""V6x6 ""V912 " + +#define LEN_SUBTYPE_AFHDS2A "\010" +#define TR_SUBTYPE_AFHDS2A "PWM,IBUS""PPM,IBUS""PWM,SBUS""PPM,SBUS" #define LEN_SUBTYPE_FRSKY "\007" #define TR_SUBTYPE_FRSKY "D16\0 ""D8\0 ""D16 8ch""V8\0 " @@ -841,6 +844,7 @@ #define TR_MULTI_AUTOBIND TR(INDENT "Autobind",INDENT "Bind on powerup") #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_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") #define TR_LIMIT INDENT"Limite" #define TR_MINRSSI "Min Rssi" #define TR_LATITUDE "Latitude" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index bf459ec9c..fde883a64 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -107,12 +107,15 @@ #define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" #define LEN_MULTI_PROTOCOLS "\006" -#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 " +#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 ""FS 2A\0" #define TR_MULTI_CUSTOM "Custom" -#define LEN_SUBTYPE_FLYSKY "\004" -#define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912" +#define LEN_SUBTYPE_FLYSKY "\007" +#define TR_SUBTYPE_FLYSKY "Std\0 ""V9x9 ""V6x6 ""V912 " + +#define LEN_SUBTYPE_AFHDS2A "\010" +#define TR_SUBTYPE_AFHDS2A "PWM,IBUS""PPM,IBUS""PWM,SBUS""PPM,SBUS" #define LEN_SUBTYPE_FRSKY "\007" #define TR_SUBTYPE_FRSKY "D16\0 ""D8\0 ""D16 8ch""V8\0 " @@ -894,6 +897,7 @@ #define TR_MULTI_AUTOBIND TR(INDENT "Autobind",INDENT "Bind on powerup") #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_MULTI_SERVOFREQ TR(INDENT "Servo rate", INDENT "Servo update rate") #define TR_LIMIT INDENT "NivÄ" #define TR_MINRSSI "Min Rssi" #define TR_LATITUDE "Breddgrad"