chores(flysky): Separate AFHDS2A and AFHDS3 into 2 different module type (#3783)

* chores(flysky): separate AFHDS2A and AFHDS3 into 2 different module type

This should allow to remove some of the hacks added earlier.

* chore: Add some EL18 CI bits

* fix(afhds): cmake defs

* fix(ci): add el18 to commit-tests.sh

* chore(cpn): separate AFHDS2A and AFHDS3

* chore(cpn): remove binary import of afhds and legacy fxFreq field for afhds3

* fix(cpn): limit available internal afhds protocols to those supported by hardware

* chore(cpn): update Flysky int module test

* fix(cpn): compile error

* fix(cpn): afhds2a max channels

* fix: TR_MODULE_PROTOCOLS

* enh(cpn): more support for afhds2a and 3

* fix(cpn): rebase compile error

* fix(cpn): bit indexes

* fix(cpn): emi toString

* fix(cpn): limit available internal afhds protocols to those supported by hardware

* enh(cpn): add support for Flysky EL18

* fix(cpn): available protocols

* fix(cpn): rebase moduledata

* chore(cpn): add module fields to model print

* Separate AFHDS2A and AFHDS3 UI settings.

* Fix AFHDS3 conversion from old subtype value.
Fix 'Channel Range' layout on portrait LCD.

* Fix name.

---------

Co-authored-by: Peter Feerick <peter.feerick@gmail.com>
Co-authored-by: elecpower <neilh713@tpg.com.au>
Co-authored-by: Phil Mitchell <phil.a.mitchell@gmail.com>
This commit is contained in:
Raphael Coeffic
2023-09-07 19:24:03 +10:00
committed by GitHub
co-authored by Peter Feerick elecpower Phil Mitchell
parent 9515d29c9d
commit c4f1e7127d
59 changed files with 1098 additions and 463 deletions
+95 -15
View File
@@ -21,11 +21,11 @@
#include "moduledata.h"
#include "eeprominterface.h"
#include "multiprotocols.h"
#include "afhds3.h"
#include "radiodataconversionstate.h"
#include "compounditemmodels.h"
#include "generalsettings.h"
#include "appdata.h"
#include "helpers.h"
#include <QPair>
#include <QVector>
@@ -90,8 +90,10 @@ bool ModuleData::isAvailable(PulsesProtocol proto, int port)
return fw->getCapability(HasIntModuleMulti);
case PULSES_CROSSFIRE:
return fw->getCapability(HasIntModuleCRSF) || fw->getCapability(HasIntModuleELRS);
case PULSES_AFHDS3:
return fw->getCapability(HasIntModuleFlySky);
case PULSES_FLYSKY_AFHDS2A:
return IS_FLYSKY_NV14(board);
case PULSES_FLYSKY_AFHDS3:
return IS_FLYSKY_EL18(board);
default:
return false;
}
@@ -112,7 +114,8 @@ bool ModuleData::isAvailable(PulsesProtocol proto, int port)
case PULSES_SBUS:
case PULSES_MULTIMODULE:
case PULSES_CROSSFIRE:
case PULSES_AFHDS3:
case PULSES_FLYSKY_AFHDS2A:
case PULSES_FLYSKY_AFHDS3:
case PULSES_GHOST:
return true;
case PULSES_ACCESS_R9M:
@@ -263,8 +266,6 @@ QString ModuleData::subTypeToString(int type) const
return CHECK_IN_ARRAY(ppmSubTypeStrings, type);
case PULSES_PXX_R9M:
return CHECK_IN_ARRAY(strings, type);
case PULSES_AFHDS3:
return Afhds3Data::protocolToString(type);
default:
return CPN_STR_UNKNOWN_ITEM;
}
@@ -273,7 +274,7 @@ QString ModuleData::subTypeToString(int type) const
QString ModuleData::powerValueToString(Firmware * fw) const
{
const QStringList & strRef = powerValueStrings((enum PulsesProtocol)protocol, subType, fw);
return strRef.value(protocol == PULSES_AFHDS3 ? afhds3.rfPower : pxx.power, CPN_STR_UNKNOWN_ITEM);
return strRef.value(protocol == PULSES_FLYSKY_AFHDS3 ? afhds3.rfPower : pxx.power, CPN_STR_UNKNOWN_ITEM);
}
// static
@@ -313,7 +314,7 @@ QString ModuleData::protocolToString(unsigned int protocol)
tr("FrSky ACCESS R9M Lite"),
tr("FrSky ACCESS R9M Lite Pro"),
tr("FrSky XJT lite (D16)"), tr("FrSky XJT lite (D8)"), tr("FrSky XJT lite (LR12)"),
tr("AFHDS3"),
tr("Flysky AFHDS2A"), tr("Flysky AFHDS3"),
tr("Ghost"),
tr("Lemon-Rx DSMP"),
};
@@ -335,7 +336,7 @@ QStringList ModuleData::powerValueStrings(enum PulsesProtocol protocol, int subT
};
switch(protocol) {
case PULSES_AFHDS3:
case PULSES_FLYSKY_AFHDS3:
return afhds3Strings;
default:
int strIdx = 0;
@@ -359,7 +360,8 @@ bool ModuleData::hasFailsafes(Firmware * fw) const
protocol == PULSES_ACCESS_R9M_LITE_PRO ||
protocol == PULSES_XJT_LITE_X16 ||
protocol == PULSES_MULTIMODULE ||
protocol == PULSES_AFHDS3
protocol == PULSES_FLYSKY_AFHDS2A ||
protocol == PULSES_FLYSKY_AFHDS3
);
}
@@ -397,7 +399,9 @@ int ModuleData::getMaxChannelCount()
else
return 16;
break;
case PULSES_AFHDS3:
case PULSES_FLYSKY_AFHDS2A:
return 14;
case PULSES_FLYSKY_AFHDS3:
return 18;
case PULSES_LEMON_DSMP:
return 12;
@@ -450,7 +454,8 @@ int ModuleData::getTypeFromProtocol(unsigned int protocol)
{ PULSES_XJT_LITE_D8, MODULE_TYPE_XJT_LITE_PXX2 },
{ PULSES_XJT_LITE_LR12, MODULE_TYPE_XJT_LITE_PXX2 },
{ PULSES_AFHDS3, MODULE_TYPE_FLYSKY },
{ PULSES_FLYSKY_AFHDS2A, MODULE_TYPE_FLYSKY_AFHDS2A },
{ PULSES_FLYSKY_AFHDS3, MODULE_TYPE_FLYSKY_AFHDS3 },
{ PULSES_LEMON_DSMP, MODULE_TYPE_LEMON_DSMP },
};
@@ -495,7 +500,8 @@ QString ModuleData::typeToString(int type)
"R9MLP ACCESS",
"SBUS",
"XJT Lite",
"FLYSKY",
"Flysky AFHDS2A",
"Flysky AFHDS3",
"Lemon-Rx DSMP",
};
@@ -548,7 +554,8 @@ bool ModuleData::isProtocolAvailable(int moduleidx, unsigned int protocol, Gener
case MODULE_TYPE_CROSSFIRE:
case MODULE_TYPE_MULTIMODULE:
case MODULE_TYPE_GHOST:
case MODULE_TYPE_FLYSKY:
case MODULE_TYPE_FLYSKY_AFHDS2A:
case MODULE_TYPE_FLYSKY_AFHDS3:
case MODULE_TYPE_LEMON_DSMP:
case MODULE_TYPE_R9M_LITE_PXX1:
case MODULE_TYPE_R9M_LITE_PXX2:
@@ -570,7 +577,8 @@ bool ModuleData::isProtocolAvailable(int moduleidx, unsigned int protocol, Gener
case MODULE_TYPE_CROSSFIRE:
case MODULE_TYPE_MULTIMODULE:
case MODULE_TYPE_GHOST:
case MODULE_TYPE_FLYSKY:
case MODULE_TYPE_FLYSKY_AFHDS2A:
case MODULE_TYPE_FLYSKY_AFHDS3:
case MODULE_TYPE_LEMON_DSMP:
return true;
default:
@@ -683,3 +691,75 @@ AbstractStaticItemModel * ModuleData::telemetryBaudrateItemModel(unsigned int p
mdl->loadItemList();
return mdl;
}
QString ModuleData::afhds2aMode1ToString() const
{
return afhds2aMode1List.at(Helpers::getBitmappedValue(flysky.mode, 0));
}
QString ModuleData::afhds2aMode2ToString() const
{
return afhds2aMode2List.at(Helpers::getBitmappedValue(flysky.mode, 1));
}
QString ModuleData::afhds3PhyModeToString() const
{
return afhds3PhyModeList.at(afhds3.phyMode);
}
QString ModuleData::afhds3EmiToString() const
{
return afhds3EmiList.at(afhds3.emi - 1);
}
AbstractStaticItemModel * ModuleData::afhds2aMode1ItemModel()
{
AbstractStaticItemModel * mdl = new AbstractStaticItemModel();
mdl->setName("moduledata.afhds2aMode1");
for (int i = 0; i < afhds2aMode1List.size(); i++) {
mdl->appendToItemList(afhds2aMode1List.at(i), i);
}
mdl->loadItemList();
return mdl;
}
AbstractStaticItemModel * ModuleData::afhds2aMode2ItemModel()
{
AbstractStaticItemModel * mdl = new AbstractStaticItemModel();
mdl->setName("moduledata.afhds2aMode2");
for (int i = 0; i < afhds2aMode2List.size(); i++) {
mdl->appendToItemList(afhds2aMode2List.at(i), i);
}
mdl->loadItemList();
return mdl;
}
AbstractStaticItemModel * ModuleData::afhds3PhyModeItemModel()
{
AbstractStaticItemModel * mdl = new AbstractStaticItemModel();
mdl->setName("moduledata.afhds3PhyMode");
for (int i = 0; i < afhds3PhyModeList.size(); i++) {
mdl->appendToItemList(afhds3PhyModeList.at(i), i);
}
mdl->loadItemList();
return mdl;
}
AbstractStaticItemModel * ModuleData::afhds3EmiItemModel()
{
AbstractStaticItemModel * mdl = new AbstractStaticItemModel();
mdl->setName("moduledata.afhds3Emi");
for (int i = 0; i < afhds3EmiList.size(); i++) {
mdl->appendToItemList(afhds3EmiList.at(i), i + 1); // Note: 1 based
}
mdl->loadItemList();
return mdl;
}