feat(mpm): remove FrSky special treatment madness (#3032)
This commit is contained in:
@@ -1208,16 +1208,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 {
|
||||
|
||||
@@ -1142,16 +1142,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 {
|
||||
|
||||
@@ -1102,57 +1102,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
|
||||
|
||||
@@ -1166,7 +1115,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"};
|
||||
@@ -1211,13 +1161,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"};
|
||||
@@ -1248,7 +1198,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},
|
||||
@@ -1260,12 +1210,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},
|
||||
@@ -1295,7 +1247,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},
|
||||
@@ -1314,6 +1266,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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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--;
|
||||
if (!len) return true;
|
||||
subProtoLen = (uint8_t) * (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 < 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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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<uint8_t, 64>
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -1859,9 +1859,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;
|
||||
@@ -1873,7 +1870,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;
|
||||
@@ -1907,11 +1903,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);
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user