Skip to content

Commit

Permalink
fixed FrSky index juggling
Browse files Browse the repository at this point in the history
  • Loading branch information
mha1 committed Apr 5, 2023
1 parent bd66f37 commit 72be0d2
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 95 deletions.
87 changes: 0 additions & 87 deletions companion/src/firmwares/edgetx/yaml_moduledata.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -100,91 +100,6 @@ static const YamlLookupTable failsafeLut = {
{ FAILSAFE_RECEIVER, "RECEIVER" },
};

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
};

// from radio/src/pulses/multi.cpp
static void convertMultiProtocolToEtx(int *protocol, int *subprotocol)
{
if (*protocol == (MODULE_SUBTYPE_MULTI_FRSKY + 1) && *subprotocol == 0) {
*protocol = MODULE_SUBTYPE_MULTI_FRSKY + 1;
*subprotocol = MM_RF_FRSKY_SUBTYPE_D8;
return;
}

if (*protocol == (MODULE_SUBTYPE_MULTI_FRSKY + 1) && *subprotocol == 1) {
*protocol = MODULE_SUBTYPE_MULTI_FRSKY + 1;
*subprotocol = MM_RF_FRSKY_SUBTYPE_D8_CLONED;
return;
}

if (*protocol == (MODULE_SUBTYPE_MULTI_FRSKYV + 1)) {
*protocol = MODULE_SUBTYPE_MULTI_FRSKY + 1;
*subprotocol = MM_RF_FRSKY_SUBTYPE_V8;
return;
}

if (*protocol == (MODULE_SUBTYPE_MULTI_FRSKYX + 1)) {
*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;
}
}

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 = MODULE_SUBTYPE_MULTI_FRSKY + 1;
*subprotocol = 0;
}
else if (*subprotocol == MM_RF_FRSKY_SUBTYPE_D8_CLONED) {
//D8
*protocol = MODULE_SUBTYPE_MULTI_FRSKY + 1;
*subprotocol = 1;
}
else if (*subprotocol == MM_RF_FRSKY_SUBTYPE_V8) {
//V8
*protocol = MODULE_SUBTYPE_MULTI_FRSKYV+1;
*subprotocol = 0;
}
else {
*protocol = MODULE_SUBTYPE_MULTI_FRSKYX + 1;
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
}
}
}

static int exportPpmDelay(int delay) { return (delay - 300) / 50; }
static int importPpmDelay(int delay) { return 300 + 50 * delay; }

Expand Down Expand Up @@ -228,7 +143,6 @@ Node convert<ModuleData>::encode(const ModuleData& rhs)
case PULSES_MULTIMODULE: {
int rfProtocol = rhs.multi.rfProtocol + 1;
int subType = rhs.subType;
convertEtxProtocolToMulti(&rfProtocol, &subType);
std::string st_str = std::to_string(rfProtocol);
st_str += ",";
st_str += std::to_string(subType);
Expand Down Expand Up @@ -354,7 +268,6 @@ bool convert<ModuleData>::decode(const Node& node, ModuleData& rhs)
int rfProtocol = std::stoi(st_str, &pos);
st_str = st_str.substr(pos + 1);
int rfSubType = std::stoi(st_str);
convertMultiProtocolToEtx(&rfProtocol, &rfSubType);
if (rfProtocol > 0) {
rhs.multi.rfProtocol = rfProtocol - 1;
rhs.subType = rfSubType;
Expand Down
10 changes: 10 additions & 0 deletions radio/src/MultiSubtypeDefs.h
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,16 @@
#define NO_SUBTYPE nullptr
#endif

//
// subtypes for FrSky Taranis bind key and
// Radiomaster RTF use (indexes see list above)
//
#define MULTI_FRSKYD_SUBTYPE_D8 0
#define MULTI_FRSKYX_SUBTYPE_D16_FCC 0
#define MULTI_FRSKYX_SUBTYPE_D16_LBT 2
#define MULTI_FRSKYX2_SUBTYPE_D16_FCC MULTI_FRSKYX_SUBTYPE_D16_FCC
#define MULTI_FRSKYX2_SUBTYPE_D16_LBT MULTI_FRSKYX_SUBTYPE_D16_LBT

//
// Common definitions of Multi protocol subtype options (only for protocols that do have subtypes)
//
Expand Down
2 changes: 1 addition & 1 deletion radio/src/model_init.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ void setVendorSpecificModelDefaults(uint8_t id)
g_model.trainerData.mode = TRAINER_MODE_SLAVE;
g_model.moduleData[INTERNAL_MODULE].type = MODULE_TYPE_MULTIMODULE;
g_model.moduleData[INTERNAL_MODULE].setMultiProtocol(MODULE_SUBTYPE_MULTI_FRSKY);
g_model.moduleData[INTERNAL_MODULE].subType = MM_RF_FRSKY_SUBTYPE_D8;
g_model.moduleData[INTERNAL_MODULE].subType = MULTI_FRSKYD_SUBTYPE_D8;
g_model.moduleData[INTERNAL_MODULE].failsafeMode = FAILSAFE_NOPULSES;
#endif
}
Expand Down
14 changes: 7 additions & 7 deletions radio/src/targets/taranis/bind_button_driver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,24 +30,24 @@ bool setBindProtocolSelection()
// Center: D8
if (abs(xPos < 50 && abs(yPos) < 50)) {
g_model.moduleData[INTERNAL_MODULE].setMultiProtocol(MODULE_SUBTYPE_MULTI_FRSKY);
g_model.moduleData[INTERNAL_MODULE].subType = MM_RF_FRSKY_SUBTYPE_D8;
g_model.moduleData[INTERNAL_MODULE].subType = MULTI_FRSKYD_SUBTYPE_D8;
storageDirty(EE_MODEL);
return true;
}

// Top left: D16 FCC
if (xPos < -512 && yPos > 512) {
g_model.moduleData[INTERNAL_MODULE].setMultiProtocol(MODULE_SUBTYPE_MULTI_FRSKY);
g_model.moduleData[INTERNAL_MODULE].subType = MM_RF_FRSKY_SUBTYPE_D16;
g_model.moduleData[INTERNAL_MODULE].setMultiProtocol(MODULE_SUBTYPE_MULTI_FRSKYX);
g_model.moduleData[INTERNAL_MODULE].subType = MULTI_FRSKYX_SUBTYPE_D16_FCC;
g_model.moduleData[INTERNAL_MODULE].failsafeMode = FAILSAFE_NOPULSES;
storageDirty(EE_MODEL);
return true;
}

// Top right: D16 LBT
if (xPos > 512 && yPos > 512) {
g_model.moduleData[INTERNAL_MODULE].setMultiProtocol(MODULE_SUBTYPE_MULTI_FRSKY);
g_model.moduleData[INTERNAL_MODULE].subType = MM_RF_FRSKY_SUBTYPE_D16_LBT;
g_model.moduleData[INTERNAL_MODULE].setMultiProtocol(MODULE_SUBTYPE_MULTI_FRSKYX);
g_model.moduleData[INTERNAL_MODULE].subType = MULTI_FRSKYX_SUBTYPE_D16_LBT;
g_model.moduleData[INTERNAL_MODULE].failsafeMode = FAILSAFE_NOPULSES;
storageDirty(EE_MODEL);
return true;
Expand All @@ -56,7 +56,7 @@ bool setBindProtocolSelection()
// Bottom left: V2.1 D16 FCC
if (xPos < -512 && yPos < -512) {
g_model.moduleData[INTERNAL_MODULE].setMultiProtocol(MODULE_SUBTYPE_MULTI_FRSKYX2);
g_model.moduleData[INTERNAL_MODULE].subType = MM_RF_FRSKYX2_SUBTYPE_D16;
g_model.moduleData[INTERNAL_MODULE].subType = MULTI_FRSKYX2_SUBTYPE_D16_FCC;
g_model.moduleData[INTERNAL_MODULE].failsafeMode = FAILSAFE_NOPULSES;
storageDirty(EE_MODEL);
return true;
Expand All @@ -65,7 +65,7 @@ bool setBindProtocolSelection()
// Bottom right: V2.1 D16 LBT
if (xPos > 512 && yPos < -512) {
g_model.moduleData[INTERNAL_MODULE].setMultiProtocol(MODULE_SUBTYPE_MULTI_FRSKYX2);
g_model.moduleData[INTERNAL_MODULE].subType = MM_RF_FRSKYX2_SUBTYPE_D16_LBT;
g_model.moduleData[INTERNAL_MODULE].subType = MULTI_FRSKYX2_SUBTYPE_D16_LBT;
g_model.moduleData[INTERNAL_MODULE].failsafeMode = FAILSAFE_NOPULSES;
storageDirty(EE_MODEL);
return true;
Expand Down

0 comments on commit 72be0d2

Please sign in to comment.