From 59d9ec131b9cd9df1e4029135cdd1b435d2a9c05 Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Tue, 31 Jan 2017 07:41:08 +0100 Subject: [PATCH] Schwabe/multi protocol update (#4352) * Add multi frisky eu protocols * Also implement MULTI_STATUS, the alternative to MULTI_TELEMETRY used by er9x/ersky9x --- companion/src/eeprominterface.cpp | 2 +- companion/src/modelprinter.cpp | 2 +- radio/src/gui/gui_common_arm.cpp | 2 +- radio/src/telemetry/multi.cpp | 27 +++++++++++++++++---------- radio/src/translations/cz.h.txt | 2 +- radio/src/translations/de.h.txt | 2 +- radio/src/translations/en.h.txt | 2 +- radio/src/translations/es.h.txt | 2 +- radio/src/translations/fi.h.txt | 2 +- radio/src/translations/fr.h.txt | 2 +- radio/src/translations/it.h.txt | 2 +- radio/src/translations/nl.h.txt | 2 +- radio/src/translations/pl.h.txt | 2 +- radio/src/translations/pt.h.txt | 2 +- radio/src/translations/se.h.txt | 2 +- 15 files changed, 31 insertions(+), 24 deletions(-) diff --git a/companion/src/eeprominterface.cpp b/companion/src/eeprominterface.cpp index 55a32bdf1..b6d2bfbad 100644 --- a/companion/src/eeprominterface.cpp +++ b/companion/src/eeprominterface.cpp @@ -1859,7 +1859,6 @@ unsigned int getNumSubtypes(MultiModuleRFProtocols type) case MM_RF_PROTO_CG023: return 3; - case MM_RF_PROTO_FRSKY: case MM_RF_PROTO_DSM2: case MM_RF_PROTO_MT99XX: case MM_RF_PROTO_HONTAI: @@ -1872,6 +1871,7 @@ unsigned int getNumSubtypes(MultiModuleRFProtocols type) case MM_RF_PROTO_YD717: return 5; + case MM_RF_PROTO_FRSKY: case MM_RF_PROTO_WK_2X01: return 6; diff --git a/companion/src/modelprinter.cpp b/companion/src/modelprinter.cpp index fe6344df8..45472be04 100644 --- a/companion/src/modelprinter.cpp +++ b/companion/src/modelprinter.cpp @@ -143,7 +143,7 @@ QString ModelPrinter::printMultiSubType(int rfProtocol, bool custom, int subType /* custom protocols */ static const char *custom_subtype_strings[] = {"Subtype 0", "Subtype 1", "Subtype 2", "Subtype 3", "Subtype 4", "Subtype 5", "Subtype 6", "Subtype 7"}; static const char *flysky_strings[] = {"Standard", "V9x9", "V6x6", "V912", "CX20"}; - static const char *frsky_strings[] = {"D16", "D8", "D16 8ch", "V8"}; + static const char *frsky_strings[] = {"D16", "D8", "D16 8ch", "V8", "D16 EU-LBT", "D16 EU-LBT 8ch"}; static const char *hisky_strings[] = {"HiSky", "HK310"}; static const char *v2x2_strings[] = {"V2x2", "JXD506"}; static const char *dsm2_strings[] = {"DSM2 22ms", "DSM2 11ms", "DSMX 22ms", "DSMX 11ms"}; diff --git a/radio/src/gui/gui_common_arm.cpp b/radio/src/gui/gui_common_arm.cpp index d9855251f..e21766c46 100644 --- a/radio/src/gui/gui_common_arm.cpp +++ b/radio/src/gui/gui_common_arm.cpp @@ -582,7 +582,7 @@ int getFirstAvailable(int min, int max, IsValueAvailable isValueAvailable) const mm_protocol_definition multi_protocols[] = { { MM_RF_PROTO_FLYSKY, STR_SUBTYPE_FLYSKY, 4, nullptr }, { MM_RF_PROTO_HUBSAN, nullptr, 0, STR_MULTI_VIDFREQ }, - { MM_RF_PROTO_FRSKY, STR_SUBTYPE_FRSKY, 3, STR_MULTI_RFTUNE }, + { MM_RF_PROTO_FRSKY, STR_SUBTYPE_FRSKY, 5, STR_MULTI_RFTUNE }, { MM_RF_PROTO_HISKY, STR_SUBTYPE_HISKY, 1, nullptr }, { MM_RF_PROTO_V2X2, STR_SUBTYPE_V2X2, 1, nullptr }, { MM_RF_PROTO_DSM2, STR_SUBTYPE_DSM, 3, nullptr }, diff --git a/radio/src/telemetry/multi.cpp b/radio/src/telemetry/multi.cpp index 87839ba1a..2c9596de6 100644 --- a/radio/src/telemetry/multi.cpp +++ b/radio/src/telemetry/multi.cpp @@ -18,6 +18,7 @@ * GNU General Public License for more details. */ #include "opentx.h" +#include "telemetry.h" MultiModuleStatus multiModuleStatus; uint8_t multiBindStatus = MULTI_NORMAL_OPERATION; @@ -36,6 +37,7 @@ enum MultiBufferState : uint8_t { NoProtocolDetected, MultiFirstByteReceived, ReceivingMultiProtocol, + ReceivingMultiStatus, SpektrumTelemetryFallback, FrskyTelemetryFallbackFirstByte, FrskyTelemetryFallbackNextBytes, @@ -67,15 +69,6 @@ static void processMultiStatusPacket(const uint8_t *data) if (wasBinding && !multiModuleStatus.isBinding() && multiBindStatus == MULTI_BIND_INITIATED) multiBindStatus = MULTI_BIND_FINISHED; - // set moduleFlag to bind status - /* - if (moduleFlag[EXTERNAL_MODULE] != MODULE_RANGECHECK) - // Two times the same status in a row to avoid race conditions - if (multiModuleStatus.isBinding() == wasBinding) { - multiModuleStatus.isBinding() ? moduleFlag[EXTERNAL_MODULE] = MODULE_BIND : MODULE_NORMAL_MODE; - } - */ - } static void processMultiTelemetryPaket(const uint8_t *packet) @@ -257,9 +250,14 @@ void processMultiTelemetryData(const uint8_t data) break; case MultiFirstByteReceived: + telemetryRxBufferCount = 0; if (data == 'P') { - telemetryRxBufferCount = 0; multiTelemetryBufferState = ReceivingMultiProtocol; + } else if (data >= 5 && data <= 10) { + // Protocol indented for er9x/ersky9, accept only 5-10 as packet length to have + // a bit of validation + multiTelemetryBufferState = ReceivingMultiStatus; + } else { TRACE("[MP] invalid second byte 0x%02X", data); multiTelemetryBufferState = NoProtocolDetected; @@ -269,6 +267,15 @@ void processMultiTelemetryData(const uint8_t data) case ReceivingMultiProtocol: processMultiTelemetryByte(data); break; + + case ReceivingMultiStatus: + // Ignore multi status + telemetryRxBuffer[telemetryRxBufferCount++] = data; + if (telemetryRxBufferCount>5) { + processMultiStatusPacket(telemetryRxBuffer); + telemetryRxBufferCount=0; + multiTelemetryBufferState = NoProtocolDetected; + } } } diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index 090bc608b..28c33f3dd 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -118,7 +118,7 @@ #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 " +#define TR_SUBTYPE_FRSKY "D16\0 ""D8\0 ""D16 8ch""V8\0 ""LBT(EU)""LBT 8ch" #define LEN_SUBTYPE_HISKY "\005" #define TR_SUBTYPE_HISKY "HiSky""HK310" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index 006237682..c8d75d281 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -123,7 +123,7 @@ #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 " +#define TR_SUBTYPE_FRSKY "D16\0 ""D8\0 ""D16 8ch""V8\0 ""LBT(EU)""LBT 8ch" #define LEN_SUBTYPE_HISKY "\005" #define TR_SUBTYPE_HISKY "HiSky""HK310" diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index 6f6106500..697ee4060 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -122,7 +122,7 @@ #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 " +#define TR_SUBTYPE_FRSKY "D16\0 ""D8\0 ""D16 8ch""V8\0 ""LBT(EU)""LBT 8ch" #define LEN_SUBTYPE_HISKY "\005" #define TR_SUBTYPE_HISKY "HiSky""HK310" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index e5aa1b5d1..47dcbec63 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -118,7 +118,7 @@ #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 " +#define TR_SUBTYPE_FRSKY "D16\0 ""D8\0 ""D16 8ch""V8\0 ""LBT(EU)""LBT 8ch" #define LEN_SUBTYPE_HISKY "\005" #define TR_SUBTYPE_HISKY "HiSky""HK310" diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index 9a6e75d2d..c797350e0 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -118,7 +118,7 @@ #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 " +#define TR_SUBTYPE_FRSKY "D16\0 ""D8\0 ""D16 8ch""V8\0 ""LBT(EU)""LBT 8ch" #define LEN_SUBTYPE_HISKY "\005" #define TR_SUBTYPE_HISKY "HiSky""HK310" diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index e44d3fc9a..39cc8db68 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -118,7 +118,7 @@ #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 " +#define TR_SUBTYPE_FRSKY "D16\0 ""D8\0 ""D16 8ch""V8\0 ""LBT(EU)""LBT 8ch" #define LEN_SUBTYPE_HISKY "\005" #define TR_SUBTYPE_HISKY "HiSky""HK310" diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index 07d434703..2fe03966f 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -118,7 +118,7 @@ #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 " +#define TR_SUBTYPE_FRSKY "D16\0 ""D8\0 ""D16 8ch""V8\0 ""LBT(EU)""LBT 8ch" #define LEN_SUBTYPE_HISKY "\005" #define TR_SUBTYPE_HISKY "HiSky""HK310" diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index fdc526d4a..d307c5473 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -123,7 +123,7 @@ #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 " +#define TR_SUBTYPE_FRSKY "D16\0 ""D8\0 ""D16 8ch""V8\0 ""LBT(EU)""LBT 8ch" #define LEN_SUBTYPE_HISKY "\005" #define TR_SUBTYPE_HISKY "HiSky""HK310" diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index ddb7c42a7..61385393f 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -119,7 +119,7 @@ #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 " +#define TR_SUBTYPE_FRSKY "D16\0 ""D8\0 ""D16 8ch""V8\0 ""LBT(EU)""LBT 8ch" #define LEN_SUBTYPE_HISKY "\005" #define TR_SUBTYPE_HISKY "HiSky""HK310" diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 57db4b204..b9475b5e3 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -119,7 +119,7 @@ #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 " +#define TR_SUBTYPE_FRSKY "D16\0 ""D8\0 ""D16 8ch""V8\0 ""LBT(EU)""LBT 8ch" #define LEN_SUBTYPE_HISKY "\005" #define TR_SUBTYPE_HISKY "HiSky""HK310" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index ba6b54ab3..9d4580a6f 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -118,7 +118,7 @@ #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 " +#define TR_SUBTYPE_FRSKY "D16\0 ""D8\0 ""D16 8ch""V8\0 ""LBT(EU)""LBT 8ch" #define LEN_SUBTYPE_HISKY "\005" #define TR_SUBTYPE_HISKY "HiSky""HK310"