From 22ed36a4fe31ae63e778857393e2820e54dd4ccf Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Thu, 26 Jan 2023 02:44:46 +0100 Subject: [PATCH] feat(mpm): remove FrSky special treatment madness (#3032) --- radio/src/gui/128x64/model_setup.cpp | 13 +-- radio/src/gui/212x64/model_setup.cpp | 13 +-- radio/src/gui/gui_common.cpp | 63 ++----------- radio/src/gui/gui_common.h | 6 -- radio/src/io/multi_protolist.cpp | 75 +++++---------- radio/src/lua/api_model.cpp | 4 +- radio/src/pulses/modules_constants.h | 84 +++++++---------- radio/src/pulses/modules_helpers.h | 20 ++-- radio/src/pulses/multi.cpp | 91 ------------------- radio/src/pulses/multi.h | 3 - .../storage/yaml/yaml_datastructs_funcs.cpp | 7 -- radio/src/translations/untranslated.h | 7 +- 12 files changed, 84 insertions(+), 302 deletions(-) diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index ea2f099de40..10c2a29b502 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -1194,16 +1194,9 @@ void menuModelSetup(event_t event) if (status.isValid()) { int8_t direction = checkIncDec(event, 0, -1, 1); if (direction == -1) { - if (multiRfProto == MODULE_SUBTYPE_MULTI_FRSKY) - multiRfProto = MODULE_SUBTYPE_MULTI_FRSKYX_RX; - else - multiRfProto = convertMultiToOtx(status.protocolPrev); - } - if (direction == 1) { - if (multiRfProto == MODULE_SUBTYPE_MULTI_FRSKY) - multiRfProto = MODULE_SUBTYPE_MULTI_FRSKYX2; - else - multiRfProto = convertMultiToOtx(status.protocolNext); + multiRfProto = status.protocolPrev; + } else if (direction == 1) { + multiRfProto = status.protocolNext; } } else { diff --git a/radio/src/gui/212x64/model_setup.cpp b/radio/src/gui/212x64/model_setup.cpp index 795caef3bdf..b243e77c374 100644 --- a/radio/src/gui/212x64/model_setup.cpp +++ b/radio/src/gui/212x64/model_setup.cpp @@ -1127,16 +1127,9 @@ void menuModelSetup(event_t event) if (status.isValid()) { int8_t direction = checkIncDec(event, 0, -1, 1); if (direction == -1) { - if (multiRfProto == MODULE_SUBTYPE_MULTI_FRSKY) - multiRfProto = MODULE_SUBTYPE_MULTI_FRSKYX_RX; - else - multiRfProto = convertMultiToOtx(status.protocolPrev); - } - if (direction == 1) { - if (multiRfProto == MODULE_SUBTYPE_MULTI_FRSKY) - multiRfProto = MODULE_SUBTYPE_MULTI_FRSKYX2; - else - multiRfProto = convertMultiToOtx(status.protocolNext); + multiRfProto = status.protocolPrev; + } else if (direction == 1) { + multiRfProto = status.protocolNext; } } else { diff --git a/radio/src/gui/gui_common.cpp b/radio/src/gui/gui_common.cpp index 5c1b638cebe..298d9408cd7 100644 --- a/radio/src/gui/gui_common.cpp +++ b/radio/src/gui/gui_common.cpp @@ -1074,57 +1074,6 @@ int getFirstAvailable(int min, int max, IsValueAvailable isValueAvailable) } #if defined(MULTIMODULE) -// This maps OpenTX multi type with Pascal's Multi type -uint8_t multiConvertOtxToMulti(uint8_t moduleIdx, uint8_t type) -{ - - // 15 for Multimodule is FrskyX or D16 which we map as a subprotocol of 3 (FrSky) - // all protos > frskyx are therefore also off by one - if (type >= 15) - type = type + 1; - - // 25 is again a FrSky protocol (FrskyV) so shift again - if (type >= 25) - type = type + 1; - - if (type == MODULE_SUBTYPE_MULTI_FRSKY) { - int subtype = g_model.moduleData[moduleIdx].subType; - if (subtype == MM_RF_FRSKY_SUBTYPE_D8 || subtype == MM_RF_FRSKY_SUBTYPE_D8_CLONED) { - //D8 - type = 3; - } - else if (subtype == MM_RF_FRSKY_SUBTYPE_V8) { - //V8 - type = 25; - } - else { - type = 15; - } - } - return type; -} - -// This maps multi type to OpenTX number, type ONLY (no subtype) -int convertMultiToOtx(int type) -{ - if (type == 3) //FrSkyD - return MODULE_SUBTYPE_MULTI_FRSKY; - - if (type == 15) //FrSkyX - return MODULE_SUBTYPE_MULTI_FRSKY; - - if (type == 25) //FrSkyV - return MODULE_SUBTYPE_MULTI_FRSKY; - - if (type > 25) - type = type - 1; - - if (type > 15) - type = type - 1; - - return type - 1; //Multi list starts at 1 -} - // Third row is number of subtypes -1 (max valid subtype) #define NO_SUBTYPE nullptr @@ -1138,7 +1087,8 @@ int convertMultiToOtx(int type) const char* const STR_SUBTYPE_FLYSKY[] = {"Std","V9x9","V6x6","V912","CX20"}; const char* const STR_SUBTYPE_HUBSAN[] = {"H107","H301","H501"}; -const char* const STR_SUBTYPE_FRSKY[] = {"D16","D8","D16 8ch","V8","LBT(EU)","LBT 8ch","D8Cloned","D16Cloned"}; +const char* const STR_SUBTYPE_FRSKYD[] = {"D8","Cloned"}; +const char* const STR_SUBTYPE_FRSKYX[] = {"D16","D16 8ch","LBT(EU)","LBT 8ch","Cloned", "Cloned 8ch"}; const char* const STR_SUBTYPE_HISKY[] = {"Std","HK310"}; const char* const STR_SUBTYPE_V2X2[] = {"Std","JXD506","MR101"}; const char* const STR_SUBTYPE_DSM[] = {"2 1F","2 2F","X 1F","X 2F","Auto","R 1F"}; @@ -1183,13 +1133,13 @@ const char* const STR_SUBTYPE_FX816[] = {"P38"}; const char* const STR_SUBTYPE_PELIKAN[] = {"Pro","Lite","SCX24"}; const char* const STR_SUBTYPE_XK[] = {"X450","X420"}; const char* const STR_SUBTYPE_XN297DUMP[] = {"250K","1M","2M","AUTO","NRF","CC2500"}; -const char* const STR_SUBTYPE_FRSKYX2[] = {"D16","D16 8ch","LBT(EU)","LBT 8ch","Cloned","Clone8ch"}; const char* const STR_SUBTYPE_FRSKYR9[] = {"915MHz","868MHz","915 8ch","868 8ch","FCC","---","FCC 8ch"}; const char* const STR_SUBTYPE_PROPEL[] = {"74-Z"}; const char* const STR_SUBTYPE_FRSKYL[] = {"LR12","LR12 6ch"}; const char* const STR_SUBTYPE_ESKY150V2[] = {"150 V2"}; const char* const STR_SUBTYPE_JJRC345[] = {"Std","SkyTmbr"}; const char* const STR_SUBTYPE_KYOSHO[] = {"FHSS","Hype"}; +const char* const STR_SUBTYPE_KYOSHO2[] = {"KT-17"}; const char* const STR_SUBTYPE_RLINK[] = {"Surface","Air","DumboRC"}; const char* const STR_SUBTYPE_ELRS[] = {"N/A WIP"}; const char* const STR_SUBTYPE_REALACC[] = {"R11"}; @@ -1220,7 +1170,7 @@ const mm_protocol_definition multi_protocols[] = { // Protocol as defined in pulses\modules_constants.h, number of sub_protocols - 1, Failsafe supported, Disable channel mapping supported, Subtype string, Option type {MODULE_SUBTYPE_MULTI_FLYSKY, 4, false, true, STR_SUBTYPE_FLYSKY, nullptr}, {MODULE_SUBTYPE_MULTI_HUBSAN, 2, false, false, STR_SUBTYPE_HUBSAN, STR_MULTI_VIDFREQ}, - {MODULE_SUBTYPE_MULTI_FRSKY, 7, false, false, STR_SUBTYPE_FRSKY, STR_MULTI_RFTUNE}, + {MODULE_SUBTYPE_MULTI_FRSKYD, 2, false, false, STR_SUBTYPE_FRSKYD, STR_MULTI_RFTUNE}, {MODULE_SUBTYPE_MULTI_HISKY, 1, true, true, STR_SUBTYPE_HISKY, nullptr}, {MODULE_SUBTYPE_MULTI_V2X2, 2, false, false, STR_SUBTYPE_V2X2, nullptr}, {MODULE_SUBTYPE_MULTI_DSM2, 5, false, true, STR_SUBTYPE_DSM, STR_MULTI_MAX_THROW}, @@ -1232,12 +1182,14 @@ const mm_protocol_definition multi_protocols[] = { {MODULE_SUBTYPE_MULTI_CX10, 6, false, false, STR_SUBTYPE_CX10, nullptr}, {MODULE_SUBTYPE_MULTI_CG023, 1, false, false, STR_SUBTYPE_CG023, nullptr}, {MODULE_SUBTYPE_MULTI_BAYANG, 5, false, false, STR_SUBTYPE_BAYANG, STR_MULTI_TELEMETRY}, + {MODULE_SUBTYPE_MULTI_FRSKYX, 6, true, false, STR_SUBTYPE_FRSKYX, STR_MULTI_RFTUNE}, {MODULE_SUBTYPE_MULTI_ESky, 1, false, true, STR_SUBTYPE_ESky, nullptr}, {MODULE_SUBTYPE_MULTI_MT99XX, 7, false, false, STR_SUBTYPE_MT99, nullptr}, {MODULE_SUBTYPE_MULTI_MJXQ, 6, false, false, STR_SUBTYPE_MJXQ, nullptr}, {MODULE_SUBTYPE_MULTI_FY326, 1, false, false, STR_SUBTYPE_FY326, nullptr}, {MODULE_SUBTYPE_MULTI_FUTABA, 0, true, true, STR_SUBTYPE_FUTABA, STR_MULTI_RFTUNE}, {MODULE_SUBTYPE_MULTI_J6PRO, 0, false, true, NO_SUBTYPE, nullptr}, + {MODULE_SUBTYPE_MULTI_FRSKYV, 0, false, false, NO_SUBTYPE, STR_MULTI_RFTUNE}, {MODULE_SUBTYPE_MULTI_HONTAI, 3, false, false, STR_SUBTYPE_HONTAI, nullptr}, {MODULE_SUBTYPE_MULTI_OLRS, 0, false, false, NO_SUBTYPE, STR_RF_POWER}, {MODULE_SUBTYPE_MULTI_FS_AFHDS2A, 5, true, true, STR_SUBTYPE_AFHDS2A, STR_MULTI_SERVOFREQ}, @@ -1267,7 +1219,7 @@ const mm_protocol_definition multi_protocols[] = { {MODULE_SUBTYPE_MULTI_PELIKAN, 2, false, true, STR_SUBTYPE_PELIKAN, nullptr}, {MODULE_SUBTYPE_MULTI_XK, 1, false, false, STR_SUBTYPE_XK, STR_MULTI_RFTUNE}, {MODULE_SUBTYPE_MULTI_XN297DUMP, 5, false, false, STR_SUBTYPE_XN297DUMP, STR_MULTI_RFCHAN}, - {MODULE_SUBTYPE_MULTI_FRSKYX2, 5, true, false, STR_SUBTYPE_FRSKYX2, STR_MULTI_RFTUNE}, + {MODULE_SUBTYPE_MULTI_FRSKYX2, 5, true, false, STR_SUBTYPE_FRSKYX, STR_MULTI_RFTUNE}, {MODULE_SUBTYPE_MULTI_FRSKY_R9, 6, true, false, STR_SUBTYPE_FRSKYR9, nullptr}, {MODULE_SUBTYPE_MULTI_PROPEL, 0, false, false, STR_SUBTYPE_PROPEL, nullptr}, {MODULE_SUBTYPE_MULTI_FRSKYL, 1, false, false, STR_SUBTYPE_FRSKYL, STR_MULTI_RFTUNE}, @@ -1286,6 +1238,7 @@ const mm_protocol_definition multi_protocols[] = { {MODULE_SUBTYPE_MULTI_LOLI, 0, true, false, NO_SUBTYPE, nullptr}, {MODULE_SUBTYPE_MULTI_MOULDKG, 1, false, false, STR_SUBTYPE_MOULDKG, STR_MULTI_OPTION}, {MODULE_SUBTYPE_MULTI_MT99XX2, 0, false, false, STR_SUBTYPE_MT992, nullptr}, + {MODULE_SUBTYPE_MULTI_KYOSHO2, 0, false, false, STR_SUBTYPE_KYOSHO2, nullptr}, {MM_RF_CUSTOM_SELECTED, 7, true, true, NO_SUBTYPE, STR_MULTI_OPTION}, // Sentinel and default for protocols not listed above (MM_RF_CUSTOM is 0xff) diff --git a/radio/src/gui/gui_common.h b/radio/src/gui/gui_common.h index cbf9ef23184..01bf27b45e1 100644 --- a/radio/src/gui/gui_common.h +++ b/radio/src/gui/gui_common.h @@ -145,8 +145,6 @@ void drawSensorCustomValue(coord_t x, coord_t y, uint8_t sensor, int32_t value, void drawSourceCustomValue(coord_t x, coord_t y, source_t channel, int32_t val, LcdFlags flags=0); void drawSourceValue(coord_t x, coord_t y, source_t channel, LcdFlags flags=0); -int convertMultiToOtx(int type); - // model_setup Defines that are used in all uis in the same way #define IF_INTERNAL_MODULE_ON(x) (IS_INTERNAL_MODULE_ENABLED() ? (uint8_t)(x) : HIDDEN_ROW) #define IF_MODULE_ON(moduleIndex, x) (IS_MODULE_ENABLED(moduleIndex) ? (uint8_t)(x) : HIDDEN_ROW) @@ -286,10 +284,6 @@ inline bool MULTIMODULE_HAS_SUBTYPE(uint8_t moduleIdx) MultiModuleStatus &status = getMultiModuleStatus(moduleIdx); int proto = g_model.moduleData[moduleIdx].multi.rfProtocol; - if (proto == MODULE_SUBTYPE_MULTI_FRSKY) { - return true; - } - if (status.isValid()) { TRACE("(%d) status.protocolSubNbr = %d", proto, status.protocolSubNbr); return status.protocolSubNbr > 0; diff --git a/radio/src/io/multi_protolist.cpp b/radio/src/io/multi_protolist.cpp index 92edceefb71..3abe4eb406a 100644 --- a/radio/src/io/multi_protolist.cpp +++ b/radio/src/io/multi_protolist.cpp @@ -89,39 +89,26 @@ bool MultiRfProtocols::RfProto::parse(const uint8_t* data, uint8_t len) uint8_t subProtoNr = 0; uint8_t subProtoLen = 0; - // special case handling for Frsky protos - if (proto == MODULE_SUBTYPE_MULTI_FRSKY) { - const mm_protocol_definition* def = getMultiProtocolDefinition(proto); - if (!def) return false; + // proto label string + while (*s && len--) s++; + if (*s || !len) return false; + label = (const char*)data; + s++; + len--; - label = "Frsky"; - flags = 0x20; + // flags, subProtoNr, subProto label max length + if (len < 2) return false; + flags = (uint8_t) * (s++); + //TRACE("flags: 0x%02X", flags); - fillSubProtoList(def->subTypeString, def->maxSubtype + 1); - return true; + subProtoNr = (uint8_t) * (s++); + len -= 2; - } else { - // proto label string - while (*s && len--) s++; - if (*s || !len) return false; - label = (const char*)data; - s++; - len--; - - // flags, subProtoNr, subProto label max length - if (len < 2) return false; - flags = (uint8_t) * (s++); - //TRACE("flags: 0x%02X", flags); - - subProtoNr = (uint8_t) * (s++); - len -= 2; - - if (!len) return true; - subProtoLen = (uint8_t) * (s++); - len--; - - if (len < subProtoNr * subProtoLen) return false; - } + if (!len) return true; + subProtoLen = (uint8_t) * (s++); + len--; + + if (len < subProtoNr * subProtoLen) return false; fillSubProtoList(s, subProtoNr, subProtoLen); return true; @@ -296,29 +283,15 @@ bool MultiRfProtocols::scanReply(const uint8_t* packet, uint8_t len) //TRACE("Proto = %d; label = '%s'", replyProtoId, // (const char*)packet); - int proto = convertMultiToOtx(replyProtoId); + int proto = replyProtoId - 1; if (proto != MODULE_SUBTYPE_MULTI_CONFIG && proto != MODULE_SUBTYPE_MULTI_SCANNER) { - bool insertProto = true; - if (proto == MODULE_SUBTYPE_MULTI_FRSKY) { - auto it = std::find_if(protoList.begin(), protoList.end(), - [=](const RfProto& p) { - return p.proto == (const int)proto; - }); - if (it != protoList.end()) { - // FRSKY proto already added - insertProto = false; - } - } - - if (insertProto) { - RfProto rfProto(proto); - if (rfProto.parse(packet, len)) { - proto2idx[proto] = protoList.size(); - protoList.emplace_back(rfProto); - } else { - TRACE("Error parsing proto [%d]", proto); - } + RfProto rfProto(proto); + if (rfProto.parse(packet, len)) { + proto2idx[proto] = protoList.size(); + protoList.emplace_back(rfProto); + } else { + TRACE("Error parsing proto [%d]", proto); } } else { // do not count excluded protocols diff --git a/radio/src/lua/api_model.cpp b/radio/src/lua/api_model.cpp index e0d6477a6d1..6ee68efc540 100644 --- a/radio/src/lua/api_model.cpp +++ b/radio/src/lua/api_model.cpp @@ -173,7 +173,6 @@ static int luaModelGetModule(lua_State *L) if (module.type == MODULE_TYPE_MULTIMODULE) { int protocol = g_model.moduleData[idx].multi.rfProtocol + 1; int subprotocol = g_model.moduleData[idx].subType; - convertEtxProtocolToMulti(&protocol, &subprotocol); // Special treatment for the FrSky entry... lua_pushtableinteger(L, "protocol", protocol); lua_pushtableinteger(L, "subProtocol", subprotocol); if (getMultiModuleStatus(idx).isValid()) { @@ -246,8 +245,7 @@ static int luaModelSetModule(lua_State *L) #endif } #if defined(MULTIMODULE) - if (protocol > 0 && subprotocol >= 0) { // Both are needed to compute etx protocol - convertMultiProtocolToEtx(&protocol, &subprotocol); + if (protocol > 0 && subprotocol >= 0) { g_model.moduleData[idx].multi.rfProtocol = protocol - 1; g_model.moduleData[idx].subType = subprotocol; } diff --git a/radio/src/pulses/modules_constants.h b/radio/src/pulses/modules_constants.h index 0e12712acc3..c1a6b21cfa9 100644 --- a/radio/src/pulses/modules_constants.h +++ b/radio/src/pulses/modules_constants.h @@ -108,7 +108,7 @@ enum ModuleSubtypeMulti { MODULE_SUBTYPE_MULTI_FIRST = 0, MODULE_SUBTYPE_MULTI_FLYSKY = MODULE_SUBTYPE_MULTI_FIRST, MODULE_SUBTYPE_MULTI_HUBSAN, //1 - MODULE_SUBTYPE_MULTI_FRSKY, //2 + MODULE_SUBTYPE_MULTI_FRSKYD, //2 MODULE_SUBTYPE_MULTI_HISKY, //3 MODULE_SUBTYPE_MULTI_V2X2, //4 MODULE_SUBTYPE_MULTI_DSM2, //5 @@ -120,82 +120,85 @@ enum ModuleSubtypeMulti { MODULE_SUBTYPE_MULTI_CX10, MODULE_SUBTYPE_MULTI_CG023, MODULE_SUBTYPE_MULTI_BAYANG, - MODULE_SUBTYPE_MULTI_ESky, - MODULE_SUBTYPE_MULTI_MT99XX, //15 + MODULE_SUBTYPE_MULTI_FRSKYX, + MODULE_SUBTYPE_MULTI_ESky, //15 + MODULE_SUBTYPE_MULTI_MT99XX, MODULE_SUBTYPE_MULTI_MJXQ, MODULE_SUBTYPE_MULTI_SHENQI, MODULE_SUBTYPE_MULTI_FY326, - MODULE_SUBTYPE_MULTI_FUTABA, - MODULE_SUBTYPE_MULTI_J6PRO, //20 + MODULE_SUBTYPE_MULTI_FUTABA, //20 + MODULE_SUBTYPE_MULTI_J6PRO, MODULE_SUBTYPE_MULTI_FQ777, MODULE_SUBTYPE_MULTI_ASSAN, - MODULE_SUBTYPE_MULTI_HONTAI, + MODULE_SUBTYPE_MULTI_FRSKYV, + MODULE_SUBTYPE_MULTI_HONTAI, //25 MODULE_SUBTYPE_MULTI_OLRS, - MODULE_SUBTYPE_MULTI_FS_AFHDS2A, //25 + MODULE_SUBTYPE_MULTI_FS_AFHDS2A, MODULE_SUBTYPE_MULTI_Q2X2, MODULE_SUBTYPE_MULTI_WK_2X01, - MODULE_SUBTYPE_MULTI_Q303, + MODULE_SUBTYPE_MULTI_Q303, //30 MODULE_SUBTYPE_MULTI_GW008, - MODULE_SUBTYPE_MULTI_DM002, //30 + MODULE_SUBTYPE_MULTI_DM002, MODULE_SUBTYPE_MULTI_CABELL, MODULE_SUBTYPE_MULTI_ESKY150, - MODULE_SUBTYPE_MULTI_H83D, + MODULE_SUBTYPE_MULTI_H83D, //35 MODULE_SUBTYPE_MULTI_CORONA, - MODULE_SUBTYPE_MULTI_CFLIE, //35 + MODULE_SUBTYPE_MULTI_CFLIE, MODULE_SUBTYPE_MULTI_HITEC, MODULE_SUBTYPE_MULTI_WFLY, - MODULE_SUBTYPE_MULTI_BUGS, + MODULE_SUBTYPE_MULTI_BUGS, //40 MODULE_SUBTYPE_MULTI_BUGS_MINI, - MODULE_SUBTYPE_MULTI_TRAXXAS, //40 + MODULE_SUBTYPE_MULTI_TRAXXAS, MODULE_SUBTYPE_MULTI_NCC1701, MODULE_SUBTYPE_MULTI_E01X, - MODULE_SUBTYPE_MULTI_V911S, + MODULE_SUBTYPE_MULTI_V911S, //45 MODULE_SUBTYPE_MULTI_GD00X, - MODULE_SUBTYPE_MULTI_V761, //45 + MODULE_SUBTYPE_MULTI_V761, MODULE_SUBTYPE_MULTI_KF606, MODULE_SUBTYPE_MULTI_REDPINE, - MODULE_SUBTYPE_MULTI_POTENSIC, + MODULE_SUBTYPE_MULTI_POTENSIC, //50 MODULE_SUBTYPE_MULTI_ZSX, - MODULE_SUBTYPE_MULTI_HEIGHT, //50 + MODULE_SUBTYPE_MULTI_HEIGHT, MODULE_SUBTYPE_MULTI_SCANNER, MODULE_SUBTYPE_MULTI_FRSKYX_RX, - MODULE_SUBTYPE_MULTI_AFHDS2A_RX, + MODULE_SUBTYPE_MULTI_AFHDS2A_RX, //55 MODULE_SUBTYPE_MULTI_HOTT, - MODULE_SUBTYPE_MULTI_FX816, //55 + MODULE_SUBTYPE_MULTI_FX816, MODULE_SUBTYPE_MULTI_BAYANG_RX, MODULE_SUBTYPE_MULTI_PELIKAN, - MODULE_SUBTYPE_MULTI_TIGER, + MODULE_SUBTYPE_MULTI_TIGER, //60 MODULE_SUBTYPE_MULTI_XK, - MODULE_SUBTYPE_MULTI_XN297DUMP, //60 + MODULE_SUBTYPE_MULTI_XN297DUMP, MODULE_SUBTYPE_MULTI_FRSKYX2, MODULE_SUBTYPE_MULTI_FRSKY_R9, - MODULE_SUBTYPE_MULTI_PROPEL, + MODULE_SUBTYPE_MULTI_PROPEL, //65 MODULE_SUBTYPE_MULTI_FRSKYL, - MODULE_SUBTYPE_MULTI_SKYARTEC, //65 + MODULE_SUBTYPE_MULTI_SKYARTEC, MODULE_SUBTYPE_MULTI_ESKY150V2, MODULE_SUBTYPE_MULTI_DSM_RX, - MODULE_SUBTYPE_MULTI_JJRC345, + MODULE_SUBTYPE_MULTI_JJRC345, //70 MODULE_SUBTYPE_MULTI_Q90C, - MODULE_SUBTYPE_MULTI_KYOSHO, //70 + MODULE_SUBTYPE_MULTI_KYOSHO, MODULE_SUBTYPE_MULTI_RLINK, MODULE_SUBTYPE_MULTI_ELRS, - MODULE_SUBTYPE_MULTI_REALACC, + MODULE_SUBTYPE_MULTI_REALACC, //75 MODULE_SUBTYPE_MULTI_OMP, - MODULE_SUBTYPE_MULTI_MLINK, //75 + MODULE_SUBTYPE_MULTI_MLINK, MODULE_SUBTYPE_MULTI_WFLY2, MODULE_SUBTYPE_MULTI_E016HV2, - MODULE_SUBTYPE_MULTI_E010R5, + MODULE_SUBTYPE_MULTI_E010R5, //80 MODULE_SUBTYPE_MULTI_LOLI, - MODULE_SUBTYPE_MULTI_E129, //80 + MODULE_SUBTYPE_MULTI_E129, MODULE_SUBTYPE_MULTI_JOYSWAY, MODULE_SUBTYPE_MULTI_E016H, - MODULE_SUBTYPE_MULTI_CONFIG, + MODULE_SUBTYPE_MULTI_CONFIG, //85 MODULE_SUBTYPE_MULTI_IKEAANSLUTA, - MODULE_SUBTYPE_MULTI_WILLIFM, //85 + MODULE_SUBTYPE_MULTI_WILLIFM, MODULE_SUBTYPE_MULTI_LOSI, MODULE_SUBTYPE_MULTI_MOULDKG, - MODULE_SUBTYPE_MULTI_XERALL, + MODULE_SUBTYPE_MULTI_XERALL, //90 MODULE_SUBTYPE_MULTI_MT99XX2, + MODULE_SUBTYPE_MULTI_KYOSHO2, MODULE_SUBTYPE_MULTI_LAST = MODULE_SUBTYPE_MULTI_MT99XX2 }; @@ -207,24 +210,7 @@ enum MMDSM2Subtypes { MM_RF_DSM2_SUBTYPE_AUTO }; -enum MMRFrskySubtypes { - MM_RF_FRSKY_SUBTYPE_D16, - MM_RF_FRSKY_SUBTYPE_D8, - MM_RF_FRSKY_SUBTYPE_D16_8CH, - MM_RF_FRSKY_SUBTYPE_V8, - MM_RF_FRSKY_SUBTYPE_D16_LBT, - MM_RF_FRSKY_SUBTYPE_D16_LBT_8CH, - MM_RF_FRSKY_SUBTYPE_D8_CLONED, - MM_RF_FRSKY_SUBTYPE_D16_CLONED -}; -enum MMRFrskyX2Subtypes { - MM_RF_FRSKYX2_SUBTYPE_D16, - MM_RF_FRSKYX2_SUBTYPE_D8, - MM_RF_FRSKYX2_SUBTYPE_D16_LBT, - MM_RF_FRSKYX2_SUBTYPE_D16_LBT_8CH, - MM_RF_FRSKYX2_SUBTYPE_D16_CLONED -}; enum ModuleSubtypeDSM2 { DSM2_PROTO_LP45, diff --git a/radio/src/pulses/modules_helpers.h b/radio/src/pulses/modules_helpers.h index c07637c21f3..56afef9570e 100644 --- a/radio/src/pulses/modules_helpers.h +++ b/radio/src/pulses/modules_helpers.h @@ -44,16 +44,9 @@ extern uint32_t NV14internalModuleFwVersion; #define GHOST_CHANNELS_COUNT 16 #if defined (MULTIMODULE) -#define IS_D16_MULTI(module) \ - (((g_model.moduleData[module].multi.rfProtocol == \ - MODULE_SUBTYPE_MULTI_FRSKY) && \ - (g_model.moduleData[module].subType == MM_RF_FRSKY_SUBTYPE_D16 || \ - g_model.moduleData[module].subType == MM_RF_FRSKY_SUBTYPE_D16_8CH || \ - g_model.moduleData[module].subType == MM_RF_FRSKY_SUBTYPE_D16_LBT || \ - g_model.moduleData[module].subType == MM_RF_FRSKY_SUBTYPE_D16_LBT_8CH || \ - g_model.moduleData[module].subType == MM_RF_FRSKY_SUBTYPE_D16_CLONED)) || \ - (g_model.moduleData[module].multi.rfProtocol == \ - MODULE_SUBTYPE_MULTI_FRSKYX2)) +#define IS_D16_MULTI(module) \ + ((g_model.moduleData[module].multi.rfProtocol == MODULE_SUBTYPE_MULTI_FRSKYX) || \ + (g_model.moduleData[module].multi.rfProtocol == MODULE_SUBTYPE_MULTI_FRSKYX2)) #define IS_R9_MULTI(module) \ (g_model.moduleData[module].multi.rfProtocol == \ @@ -127,20 +120,19 @@ const mm_protocol_definition *getMultiProtocolDefinition (uint8_t protocol); inline uint8_t getMaxMultiSubtype(uint8_t moduleIdx) { MultiModuleStatus &status = getMultiModuleStatus(moduleIdx); - auto proto = g_model.moduleData[moduleIdx].multi.rfProtocol; - if (proto == MODULE_SUBTYPE_MULTI_FRSKY) { - return 7; - } uint8_t max_pdef = 0; + auto proto = g_model.moduleData[moduleIdx].multi.rfProtocol; const mm_protocol_definition *pdef = getMultiProtocolDefinition(proto); if (pdef) { max_pdef = pdef->maxSubtype; } + uint8_t max_status = 0; if (status.isValid()) { max_status = (status.protocolSubNbr == 0 ? 0 : status.protocolSubNbr - 1); } + return max(max_status, max_pdef); } diff --git a/radio/src/pulses/multi.cpp b/radio/src/pulses/multi.cpp index 56a6af86050..0bdfed3131c 100644 --- a/radio/src/pulses/multi.cpp +++ b/radio/src/pulses/multi.cpp @@ -317,94 +317,6 @@ void sendChannels(uint8_t moduleIdx) } } -void convertMultiProtocolToEtx(int *protocol, int *subprotocol) -{ - if (*protocol == 3 && *subprotocol == 0) { - *protocol = MODULE_SUBTYPE_MULTI_FRSKY + 1; - *subprotocol = MM_RF_FRSKY_SUBTYPE_D8; - return; - } - - if (*protocol == 3 && *subprotocol == 1) { - *protocol = MODULE_SUBTYPE_MULTI_FRSKY + 1; - *subprotocol = MM_RF_FRSKY_SUBTYPE_D8_CLONED; - return; - } - - if (*protocol == 25) { - *protocol = MODULE_SUBTYPE_MULTI_FRSKY + 1; - *subprotocol = MM_RF_FRSKY_SUBTYPE_V8; - return; - } - - if (*protocol == 15) { - *protocol = MODULE_SUBTYPE_MULTI_FRSKY + 1; - - if (*subprotocol == 0) - *subprotocol = MM_RF_FRSKY_SUBTYPE_D16; - else if (*subprotocol == 1) - *subprotocol = MM_RF_FRSKY_SUBTYPE_D16_8CH; - else if (*subprotocol == 2) - *subprotocol = MM_RF_FRSKY_SUBTYPE_D16_LBT; - else if (*subprotocol == 3) - *subprotocol = MM_RF_FRSKY_SUBTYPE_D16_LBT_8CH; - else if (*subprotocol == 4) - *subprotocol = MM_RF_FRSKY_SUBTYPE_D16_CLONED; - - return; - } - - if (*protocol >= 25) - *protocol -= 1; - - if (*protocol >= 16) - *protocol -= 1; -} - -void convertEtxProtocolToMulti(int *protocol, int *subprotocol) -{ - // Special treatment for the FrSky entry... - if (*protocol == MODULE_SUBTYPE_MULTI_FRSKY + 1) { - if (*subprotocol == MM_RF_FRSKY_SUBTYPE_D8) { - //D8 - *protocol = 3; - *subprotocol = 0; - } - else if (*subprotocol == MM_RF_FRSKY_SUBTYPE_D8_CLONED) { - //D8 - *protocol = 3; - *subprotocol = 1; - } - else if (*subprotocol == MM_RF_FRSKY_SUBTYPE_V8) { - //V8 - *protocol = 25; - *subprotocol = 0; - } - else { - *protocol = 15; - if (*subprotocol == MM_RF_FRSKY_SUBTYPE_D16_8CH) - *subprotocol = 1; - else if (*subprotocol == MM_RF_FRSKY_SUBTYPE_D16) - *subprotocol = 0; // D16 - else if (*subprotocol == MM_RF_FRSKY_SUBTYPE_D16_LBT) - *subprotocol = 2; - else if (*subprotocol == MM_RF_FRSKY_SUBTYPE_D16_LBT_8CH) - *subprotocol = 3; - else - *subprotocol = 4; // D16_CLONED - } - } - else { - // 15 for Multimodule is FrskyX or D16 which we map as a protocol of 3 (FrSky) - // all protos > frskyx are therefore also off by one - if (*protocol >= 15) - *protocol += 1; - // 25 is again a FrSky *protocol (FrskyV) so shift again - if (*protocol >= 25) - *protocol += 1; - } -} - void sendFrameProtocolHeader(uint8_t moduleIdx, bool failsafe) {// byte 1+2, protocol information @@ -455,9 +367,6 @@ void sendFrameProtocolHeader(uint8_t moduleIdx, bool failsafe) optionValue |= sentModuleChannels(moduleIdx); //add number of channels } - // Special treatment for the FrSky entry... - convertEtxProtocolToMulti(&type, &subtype); - // Set the highest bit of option byte in AFHDS2A protocol to instruct MULTI to passthrough telemetry bytes instead // of sending Frsky D telemetry if (g_model.moduleData[moduleIdx].multi.rfProtocol == MODULE_SUBTYPE_MULTI_FS_AFHDS2A) diff --git a/radio/src/pulses/multi.h b/radio/src/pulses/multi.h index b41ba123db7..ada4cf03b90 100644 --- a/radio/src/pulses/multi.h +++ b/radio/src/pulses/multi.h @@ -26,9 +26,6 @@ #include "hal/serial_driver.h" #include "hal/module_driver.h" -void convertEtxProtocolToMulti(int *protocol, int *subprotocol); -void convertMultiProtocolToEtx(int *protocol, int *subprotocol); - class UartMultiPulses: public DataBuffer { public: diff --git a/radio/src/storage/yaml/yaml_datastructs_funcs.cpp b/radio/src/storage/yaml/yaml_datastructs_funcs.cpp index 5ea4a4ca6e3..3be3c5d950c 100644 --- a/radio/src/storage/yaml/yaml_datastructs_funcs.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_funcs.cpp @@ -1749,9 +1749,6 @@ static void r_modSubtype(void* user, uint8_t* data, uint32_t bitoffs, } else if (md->type == MODULE_TYPE_MULTIMODULE) { #if defined(MULTIMODULE) // Read type/subType by the book (see MPM documentation) - // TODO: remove that crappy translation and use the MPM - // data as-is (no FrSky special casing) - // read "[type],[subtype]" const char* sep = (const char *)memchr(val, ',', val_len); uint8_t l_sep = sep ? sep - val : val_len; @@ -1763,7 +1760,6 @@ static void r_modSubtype(void* user, uint8_t* data, uint32_t bitoffs, int subtype = yaml_str2uint(val, val_len); // convert to ETX format and write to vars - convertMultiProtocolToEtx(&type, &subtype); if (type > 0) { md->multi.rfProtocol = type - 1; md->subType = subtype; @@ -1797,11 +1793,8 @@ static bool w_modSubtype(void* user, uint8_t* data, uint32_t bitoffs, } else if (md->type == MODULE_TYPE_MULTIMODULE) { #if defined(MULTIMODULE) // Use type/subType by the book (see MPM documentation) - // TODO: remove that crappy translation and use the MPM - // data as-is (no FrSky special casing) int type = md->multi.rfProtocol + 1; int subtype = val; - convertEtxProtocolToMulti(&type, &subtype); // output "[type],[subtype]" str = yaml_unsigned2str(type); diff --git a/radio/src/translations/untranslated.h b/radio/src/translations/untranslated.h index 13f8c1e8e11..c2b482f0ef7 100644 --- a/radio/src/translations/untranslated.h +++ b/radio/src/translations/untranslated.h @@ -138,12 +138,13 @@ #define TR_DSM_PROTOCOLS "LP45","DSM2","DSMX" -#define TR_MULTI_PROTOCOLS "FlySky","Hubsan","FrSky","Hisky","V2x2","DSM","Devo","YD717","KN","SymaX","SLT","CX10","CG023", \ - "Bayang","ESky","MT99XX","MJXq","Shenqi","FY326","Futaba","J6 Pro","FQ777","Assan","Hontai","OpenLrs","FlSky2A","Q2x2","Walkera", \ +#define TR_MULTI_PROTOCOLS "FlySky","Hubsan","FrSkyD","Hisky","V2x2","DSM","Devo","YD717","KN","SymaX","SLT","CX10","CG023", \ + "Bayang","FrSkyX","ESky","MT99XX","MJXq","Shenqi","FY326","Futaba","J6 Pro","FQ777","Assan","FrSkyV","Hontai","OpenLrs","FlSky2A","Q2x2","Walkera", \ "Q303","GW008","DM002","Cabell","Esky150","H8 3D","Corona","CFlie","Hitec","WFly","Bugs","BugMini","Traxxas","NCC1701","E01X", \ "V911S","GD00X","V761","KF606","Redpine","Potensi","ZSX","Height","Scanner","FrSkyRX","FS2A_RX","HoTT","FX816","BayanRX","Pelikan","Tiger", \ "XK","XN297DU","FrSkyX2","FrSkyR9","Propel","FrSkyL","Skyartc","ESky-v2","DSM RX","JJRC345","Q90C","Kyosho","RadLink","ExpLRS","Realacc", \ - "OMP","M-Link","Wfly 2","E016Hv2","E010r5","LOLI","E129","JOYSWAY","E016H","Config","IKEA","WILLIFM","Losi","MouldKg","Xerall","MT99XX2" + "OMP","M-Link","Wfly 2","E016Hv2","E010r5","LOLI","E129","JOYSWAY","E016H","Config","IKEA","WILLIFM","Losi","MouldKg","Xerall","MT99XX2", \ + "Kyosho2" #define TR_MULTI_POWER "1.6mW","2.0mW","2.5mW","3.2mW","4.0mW","5.0mW","6.3mW","7.9mW","10mW","13mW","16mW","20mW","25mW","32mW","40mW","50mW" #define TR_MULTI_WBUS_MODE "WBUS","PPM"