Merge pull request #6635 from opentx/raphaelcoeffic/cpn-horus-fixes
[X10/X12S] Companion fixes
This commit is contained in:
@@ -38,7 +38,7 @@
|
||||
#define CPN_MAX_MODULES 2
|
||||
#define CPN_MAX_STICKS Board::STICK_AXIS_COUNT
|
||||
#define CPN_MAX_TRIMS Board::TRIM_AXIS_COUNT
|
||||
#define CPN_MAX_KNOBS 4
|
||||
#define CPN_MAX_KNOBS 8
|
||||
#define CPN_MAX_SLIDERS 4
|
||||
#define CPN_MAX_POTS (CPN_MAX_KNOBS + CPN_MAX_SLIDERS)
|
||||
#define CPN_MAX_CYC 3
|
||||
|
||||
@@ -270,9 +270,19 @@ const int Boards::getCapability(Board::Type board, Board::Capability capability)
|
||||
return 2;
|
||||
else if (IS_TARANIS_X9E(board))
|
||||
return 4;
|
||||
else if (IS_HORUS_X10(board))
|
||||
return 5;
|
||||
else if (IS_HORUS_X12S(board))
|
||||
return 3;
|
||||
else
|
||||
return 3;
|
||||
|
||||
case PotsStorage:
|
||||
if (IS_HORUS(board))
|
||||
return 5;
|
||||
else
|
||||
return getCapability(board, Pots);
|
||||
|
||||
case FactoryInstalledPots:
|
||||
if (IS_TARANIS_X9(board))
|
||||
return 2;
|
||||
@@ -287,8 +297,14 @@ const int Boards::getCapability(Board::Type board, Board::Capability capability)
|
||||
else
|
||||
return 0;
|
||||
|
||||
case SlidersStorage:
|
||||
if (IS_HORUS_X10(board))
|
||||
return 4;
|
||||
else
|
||||
return getCapability(board, Sliders);
|
||||
|
||||
case MouseAnalogs:
|
||||
if (IS_HORUS_X12S(board))
|
||||
if (IS_HORUS(board))
|
||||
return 2;
|
||||
else
|
||||
return 0;
|
||||
@@ -321,10 +337,12 @@ const int Boards::getCapability(Board::Type board, Board::Capability capability)
|
||||
return 6;
|
||||
else if (IS_TARANIS_XLITE(board))
|
||||
return 6;
|
||||
else if (IS_TARANIS(board))
|
||||
return 8;
|
||||
else if (board == Board::BOARD_TARANIS_X9DP_2019)
|
||||
return 9;
|
||||
else if (IS_HORUS_OR_TARANIS(board))
|
||||
return 8;
|
||||
else if (IS_HORUS(board))
|
||||
return 10;
|
||||
else
|
||||
return 7;
|
||||
|
||||
@@ -450,6 +468,8 @@ const QString Boards::getAnalogInputName(Board::Type board, int index)
|
||||
"S1",
|
||||
"6P",
|
||||
"S2",
|
||||
"EX1",
|
||||
"EX2",
|
||||
"LS",
|
||||
"RS"
|
||||
};
|
||||
|
||||
@@ -114,8 +114,10 @@ namespace Board {
|
||||
enum Capability {
|
||||
Sticks,
|
||||
Pots,
|
||||
PotsStorage,
|
||||
FactoryInstalledPots,
|
||||
Sliders,
|
||||
SlidersStorage,
|
||||
MouseAnalogs,
|
||||
GyroAnalogs,
|
||||
MaxAnalogs,
|
||||
|
||||
@@ -29,25 +29,42 @@
|
||||
using namespace Board;
|
||||
|
||||
#define MAX_VIEWS(board) (HAS_LARGE_LCD(board) ? 2 : 256)
|
||||
#define MAX_SLIDERS(board) (IS_HORUS_X10(board) ? 4 : (Boards::getCapability(board, Board::Sliders))) //TODO need to be remove when x10 eeprom gets fixed
|
||||
#define MAX_MOUSE_ANALOGS(board) (IS_HORUS_X10(board) ? 2 : (Boards::getCapability(board, Board::MouseAnalogs))) //TODO need to be remove when x10 eeprom gets fixed
|
||||
#define MAX_GYRO_ANALOGS(board, version) (version >= 219 ? Boards::getCapability(board, Board::GyroAnalogs) : 0)
|
||||
|
||||
inline int MAX_SWITCHES(Board::Type board, int version)
|
||||
{
|
||||
if (version <= 218 && IS_TARANIS_X7(board))
|
||||
return 6;
|
||||
if (version <= 218 && IS_TARANIS_X9D(board))
|
||||
if (version <= 218 && (IS_TARANIS_X9D(board) || IS_HORUS(board)))
|
||||
return 8;
|
||||
return Boards::getCapability(board, Board::Switches);
|
||||
}
|
||||
|
||||
#define MAX_KNOBS(board, version) (IS_HORUS(board) ? 8 : 4)
|
||||
|
||||
inline int MAX_POTS(Board::Type board, int version)
|
||||
{
|
||||
if (version <= 218 && IS_HORUS(board))
|
||||
return 3;
|
||||
return Boards::getCapability(board, Board::Pots);
|
||||
}
|
||||
|
||||
inline int MAX_POTS_STORAGE(Board::Type board, int version)
|
||||
{
|
||||
if (version <= 218 && IS_HORUS(board))
|
||||
return 3;
|
||||
return Boards::getCapability(board, Board::PotsStorage);
|
||||
}
|
||||
|
||||
// bitsize of swconfig_t / 2 (see radio/src/datastructs.h)
|
||||
inline int MAX_SWITCH_SLOTS(Board::Type board, int version)
|
||||
{
|
||||
if (IS_TARANIS_X9E(board))
|
||||
return 32;
|
||||
|
||||
if (IS_HORUS(board))
|
||||
return 16;
|
||||
|
||||
if (version >= 219 && IS_TARANIS_X9D(board))
|
||||
return 16;
|
||||
|
||||
@@ -105,7 +122,7 @@ class SwitchesConversionTable: public ConversionTable {
|
||||
}
|
||||
|
||||
if (IS_HORUS_OR_TARANIS(board)) {
|
||||
for (int i=1; i<=Boards::getCapability(board, Board::Pots)*6; i++) {
|
||||
for (int i=1; i<=MAX_POTS(board, version)*6; i++) {
|
||||
addConversion(RawSwitch(SWITCH_TYPE_MULTIPOS_POT, -i), -val+offset);
|
||||
addConversion(RawSwitch(SWITCH_TYPE_MULTIPOS_POT, i), val++);
|
||||
}
|
||||
@@ -227,7 +244,7 @@ class SourcesConversionTable: public ConversionTable {
|
||||
}
|
||||
}
|
||||
|
||||
for (int i=0; i<CPN_MAX_STICKS+Boards::getCapability(board, Board::Pots)+MAX_SLIDERS(board)+MAX_MOUSE_ANALOGS(board)+MAX_GYRO_ANALOGS(board, version); i++) {
|
||||
for (int i=0; i<CPN_MAX_STICKS+MAX_POTS(board,version)+Boards::getCapability(board, Board::Sliders)+Boards::getCapability(board, Board::MouseAnalogs)+MAX_GYRO_ANALOGS(board, version); i++) {
|
||||
addConversion(RawSource(SOURCE_TYPE_STICK, i), val++);
|
||||
}
|
||||
|
||||
@@ -1946,7 +1963,10 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, Board::Type board, unsig
|
||||
internalField.Append(new UnsignedField<8>(this, modelData.moduleData[1].modelId));
|
||||
|
||||
if (HAS_LARGE_LCD(board)) {
|
||||
internalField.Append(new CharField<10>(this, modelData.bitmap, true, "Model bitmap"));
|
||||
if (version >= 219 && IS_HORUS(board))
|
||||
internalField.Append(new CharField<14>(this, modelData.bitmap, true, "Model bitmap"));
|
||||
else
|
||||
internalField.Append(new CharField<10>(this, modelData.bitmap, true, "Model bitmap"));
|
||||
}
|
||||
|
||||
for (int i=0; i<MAX_TIMERS(board, version); i++) {
|
||||
@@ -2151,13 +2171,13 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, Board::Type board, unsig
|
||||
}
|
||||
|
||||
for (int i=0; i<8; i++) {
|
||||
if (i < Boards::getCapability(board, Board::Pots) + MAX_SLIDERS(board))
|
||||
if (i < Boards::getCapability(board, Board::Pots) + Boards::getCapability(board, Board::Sliders))
|
||||
internalField.Append(new BoolField<1>(this, modelData.potsWarningEnabled[i]));
|
||||
else
|
||||
internalField.Append(new SpareBitsField<1>(this));
|
||||
}
|
||||
|
||||
for (int i=0; i < Boards::getCapability(board, Board::Pots) + MAX_SLIDERS(board); i++) {
|
||||
for (int i=0; i < Boards::getCapability(board, Board::Pots) + Boards::getCapability(board, Board::Sliders); i++) {
|
||||
internalField.Append(new SignedField<8>(this, modelData.potPosition[i]));
|
||||
}
|
||||
|
||||
@@ -2300,7 +2320,7 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, Board::Type
|
||||
generalData(generalData),
|
||||
board(board),
|
||||
version(version),
|
||||
inputsCount(CPN_MAX_STICKS + Boards::getCapability(board, Board::Pots) + MAX_SLIDERS(board) + MAX_MOUSE_ANALOGS(board))
|
||||
inputsCount(CPN_MAX_STICKS + Boards::getCapability(board, Board::PotsStorage) + Boards::getCapability(board, Board::SlidersStorage) + Boards::getCapability(board, Board::MouseAnalogs))
|
||||
{
|
||||
qCDebug(eepromImport) << QString("OpenTxGeneralData::OpenTxGeneralData(board: %1, version:%2, variant:%3)").arg(board).arg(version).arg(variant);
|
||||
|
||||
@@ -2311,6 +2331,10 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, Board::Type
|
||||
internalField.Append(new UnsignedField<16>(this, generalData.variant));
|
||||
|
||||
for (int i=0; i<inputsCount; i++) {
|
||||
if (version <= 218 && IS_HORUS(board) && (i == CPN_MAX_STICKS + 3)) {
|
||||
// skip not yet existing pots (EXT1 / EXT2 for X10)
|
||||
i += 2;
|
||||
}
|
||||
internalField.Append(new SignedField<16>(this, generalData.calibMid[i]));
|
||||
internalField.Append(new SignedField<16>(this, generalData.calibSpanNeg[i]));
|
||||
internalField.Append(new SignedField<16>(this, generalData.calibSpanPos[i]));
|
||||
@@ -2453,6 +2477,7 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, Board::Type
|
||||
if (IS_STM32(board)) {
|
||||
if (version >= 218) {
|
||||
internalField.Append(new UnsignedField<4>(this, generalData.hw_uartMode));
|
||||
// not on Horus...
|
||||
for (uint8_t i=0; i<4; i++) {
|
||||
internalField.Append(new UnsignedField<1>(this, generalData.sliderConfig[i]));
|
||||
}
|
||||
@@ -2469,19 +2494,32 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, Board::Type
|
||||
}
|
||||
|
||||
if (IS_HORUS(board)) {
|
||||
for (int i=0; i<16; i++) {
|
||||
for (int i=0; i<MAX_SWITCH_SLOTS(board, version); i++) { // bits swconfig_t / 2
|
||||
if (i < MAX_SWITCHES(board, version))
|
||||
internalField.Append(new UnsignedField<2>(this, generalData.switchConfig[i]));
|
||||
else
|
||||
internalField.Append(new SpareBitsField<2>(this));
|
||||
}
|
||||
}
|
||||
for (int i=0; i<4; i++) {
|
||||
if (i < Boards::getCapability(board, Board::Pots))
|
||||
for (int i=0; i<MAX_KNOBS(board, version); i++) {
|
||||
|
||||
// 2 new pots for Horus from 219 on
|
||||
if (version <= 218 && IS_HORUS(board) && (i == 3))
|
||||
i += 2;
|
||||
|
||||
if (i < Boards::getCapability(board, Board::PotsStorage))
|
||||
internalField.Append(new UnsignedField<2>(this, generalData.potConfig[i]));
|
||||
else
|
||||
internalField.Append(new SpareBitsField<2>(this));
|
||||
}
|
||||
if (IS_HORUS(board)) {
|
||||
for (int i=0; i<8; i++) {
|
||||
if (i < Boards::getCapability(board, Board::SlidersStorage))
|
||||
internalField.Append(new UnsignedField<1>(this, generalData.sliderConfig[i]));
|
||||
else
|
||||
internalField.Append(new SpareBitsField<1>(this));
|
||||
}
|
||||
}
|
||||
if (!IS_HORUS(board)) {
|
||||
internalField.Append(new UnsignedField<8>(this, generalData.backlightColor));
|
||||
}
|
||||
@@ -2515,10 +2553,14 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, Board::Type
|
||||
for (int i=0; i<CPN_MAX_STICKS; ++i) {
|
||||
internalField.Append(new ZCharField<3>(this, generalData.stickName[i], "Stick name"));
|
||||
}
|
||||
for (int i=0; i<Boards::getCapability(board, Board::Pots); ++i) {
|
||||
for (int i=0; i<Boards::getCapability(board, Board::PotsStorage); ++i) {
|
||||
if (version <= 218 && IS_HORUS(board) && (i == 3)) {
|
||||
// skip not yet existing pots (EXT1 / EXT2 for X10)
|
||||
i += 2;
|
||||
}
|
||||
internalField.Append(new ZCharField<3>(this, generalData.potName[i], "Pot name"));
|
||||
}
|
||||
for (int i=0; i<MAX_SLIDERS(board); ++i) {
|
||||
for (int i=0; i<Boards::getCapability(board, Board::SlidersStorage); ++i) {
|
||||
internalField.Append(new ZCharField<3>(this, generalData.sliderName[i], "Slider name"));
|
||||
}
|
||||
internalField.Append(new CharField<17>(this, generalData.currModelFilename, true, "Current model filename"));
|
||||
@@ -2539,7 +2581,7 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, Board::Type
|
||||
for (int i=0; i<Boards::getCapability(board, Board::Pots); ++i) {
|
||||
internalField.Append(new ZCharField<3>(this, generalData.potName[i], "Pot name"));
|
||||
}
|
||||
for (int i=0; i<MAX_SLIDERS(board); ++i) {
|
||||
for (int i=0; i<Boards::getCapability(board, Board::Sliders); ++i) {
|
||||
internalField.Append(new ZCharField<3>(this, generalData.sliderName[i], "Slider name"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -126,6 +126,7 @@ HardwarePanel::HardwarePanel(QWidget * parent, GeneralSettings & generalSettings
|
||||
setupPotType(1, ui->pot2Label, ui->pot2Name, ui->pot2Type);
|
||||
setupPotType(2, ui->pot3Label, ui->pot3Name, ui->pot3Type);
|
||||
setupPotType(3, ui->pot4Label, ui->pot4Name, ui->pot4Type);
|
||||
setupPotType(4, ui->pot5Label, ui->pot5Name, ui->pot5Type);
|
||||
|
||||
setupSliderType(0, ui->lsLabel, ui->lsName, ui->lsType);
|
||||
setupSliderType(1, ui->rsLabel, ui->rsName, ui->rsType);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -342,22 +342,30 @@ void convertRadioData_218_to_219(RadioData & settings)
|
||||
#endif
|
||||
|
||||
#if defined(PCBHORUS)
|
||||
// 2 new pots from X10:
|
||||
// - copy btw. 'chkSum' and 'auxSerialMode' (excl.)
|
||||
memcpy(&settings.chkSum, &oldSettings.chkSum, offsetof(RadioData, auxSerialMode) - offsetof(RadioData, chkSum));
|
||||
// - move calibration data
|
||||
memcpy(&settings.calib[NUM_STICKS + 5], &oldSettings.calib[NUM_STICKS + 3], sizeof(CalibData) * (STORAGE_NUM_SLIDERS + STORAGE_NUM_MOUSE_ANALOGS));
|
||||
memclear(&settings.calib[NUM_STICKS + 3], sizeof(CalibData) * 2);
|
||||
|
||||
// move fields after custom functions
|
||||
settings.auxSerialMode = oldSettings.auxSerialMode;
|
||||
settings.switchConfig = oldSettings.switchConfig;
|
||||
settings.potsConfig = oldSettings.potsConfig;
|
||||
settings.slidersConfig = oldSettings.slidersConfig;
|
||||
|
||||
// 2 new switches
|
||||
memcpy(&settings.switchNames[0], &oldSettings.switchNames[0], 8 * LEN_SWITCH_NAME);
|
||||
memclear(&settings.switchNames[8], 2 * LEN_SWITCH_NAME);
|
||||
|
||||
// 2 new pots for X10
|
||||
// - split 'anaNames' (sticks + 3 old pots, 2 new pots, other old analogs)
|
||||
memcpy(&settings.anaNames[0], &oldSettings.anaNames[0], (NUM_STICKS + 3) * LEN_ANA_NAME);
|
||||
memclear(&settings.anaNames[NUM_STICKS + 3], 2 * LEN_SWITCH_NAME);
|
||||
memcpy(&settings.anaNames[NUM_STICKS + 5], &oldSettings.anaNames[NUM_STICKS + 3], STORAGE_NUM_SLIDERS * LEN_ANA_NAME);
|
||||
|
||||
// - copy rest of RadioData struct
|
||||
memcpy(&settings.currModelFilename[0], &oldSettings.currModelFilename[0], sizeof(RadioData_v218) - offsetof(RadioData_v218, currModelFilename[0]));
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user