Bsongis/companion import issues (#6698)

Companion import / export issues
This commit is contained in:
Bertrand Songis
2019-09-02 15:29:27 +02:00
committed by GitHub
parent 10917753d9
commit 0fe2b8918b
12 changed files with 87 additions and 75 deletions
+2 -14
View File
@@ -276,15 +276,9 @@ const int Boards::getCapability(Board::Type board, Board::Capability capability)
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);
return 3;
case FactoryInstalledPots:
if (IS_TARANIS_X9(board))
@@ -300,12 +294,6 @@ 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(board))
return 2;
@@ -313,7 +301,7 @@ const int Boards::getCapability(Board::Type board, Board::Capability capability)
return 0;
case GyroAnalogs:
if (IS_HORUS_X12S(board) || IS_TARANIS_XLITES(board))
if (IS_TARANIS_XLITES(board))
return 2;
else
return 0;
-2
View File
@@ -115,10 +115,8 @@ namespace Board {
enum Capability {
Sticks,
Pots,
PotsStorage,
FactoryInstalledPots,
Sliders,
SlidersStorage,
MouseAnalogs,
GyroAnalogs,
MaxAnalogs,
+1 -1
View File
@@ -151,7 +151,7 @@ class GeneralSettings {
int backgroundVolume;
unsigned int mavbaud;
unsigned int switchUnlockStates;
unsigned int hw_uartMode; // UartModes
unsigned int auxSerialMode; // UartModes
unsigned int backlightColor;
CustomFunctionData customFn[CPN_MAX_SPECIAL_FUNCTIONS];
char switchName[CPN_MAX_SWITCHES][3+1];
+4 -4
View File
@@ -171,16 +171,16 @@ class ModelData {
ExpoData expoData[CPN_MAX_EXPOS];
CurveData curves[CPN_MAX_CURVES];
LogicalSwitchData logicalSw[CPN_MAX_LOGICAL_SWITCHES];
LogicalSwitchData logicalSw[CPN_MAX_LOGICAL_SWITCHES];
CustomFunctionData customFn[CPN_MAX_SPECIAL_FUNCTIONS];
SwashRingData swashRingData;
unsigned int thrTraceSrc;
uint64_t switchWarningStates;
unsigned int switchWarningEnable;
unsigned int potsWarningMode;
bool potsWarningEnabled[CPN_MAX_POTS];
int potPosition[CPN_MAX_POTS];
bool displayChecklist;
bool potsWarnEnabled[CPN_MAX_POTS];
int potsWarnPosition[CPN_MAX_POTS];
bool displayChecklist;
GVarData gvarData[CPN_MAX_GVARS];
MavlinkData mavlink;
unsigned int telemetryProtocol;
+65 -39
View File
@@ -42,12 +42,12 @@ inline int MAX_SWITCHES(Board::Type board, int version)
return Boards::getCapability(board, Board::Switches);
}
inline int MAX_KNOBS(Board::Type board, int version)
inline int POTS_CONFIG_SIZE(Board::Type board, int version)
{
if (version >= 219 && IS_HORUS(board))
return 8;
return 16;
return 4;
return 8;
}
inline int MAX_POTS(Board::Type board, int version)
@@ -61,7 +61,16 @@ inline int MAX_POTS_STORAGE(Board::Type board, int version)
{
if (version <= 218 && IS_HORUS(board))
return 3;
return Boards::getCapability(board, Board::PotsStorage);
if (version >= 219 && IS_HORUS(board))
return 5;
return Boards::getCapability(board, Board::Pots);
}
inline int MAX_POTS_SOURCES(Board::Type board, int version)
{
if (version <= 218 && IS_HORUS(board))
return 5;
return Boards::getCapability(board, Board::Pots);
}
inline int MAX_SLIDERS_STORAGE(Board::Type board, int version)
@@ -71,7 +80,14 @@ inline int MAX_SLIDERS_STORAGE(Board::Type board, int version)
return Boards::getCapability(board, Board::Sliders);
}
inline int MAX_SLIDERS_SLOTS(Board::Type board, int version)
inline int MAX_SLIDERS_SOURCES(Board::Type board, int version)
{
if (version <= 218 && IS_HORUS(board))
return 2;
return Boards::getCapability(board, Board::Sliders);
}
inline int SLIDERS_CONFIG_SIZE(Board::Type board, int version)
{
if (version >= 219 && IS_HORUS(board))
return 8;
@@ -79,19 +95,18 @@ inline int MAX_SLIDERS_SLOTS(Board::Type board, int version)
return 4;
}
// bitsize of swconfig_t / 2 (see radio/src/datastructs.h)
inline int MAX_SWITCH_SLOTS(Board::Type board, int version)
inline int SWITCHES_CONFIG_SIZE(Board::Type board, int version)
{
if (IS_TARANIS_X9E(board))
return 32;
return 64;
if (IS_HORUS(board))
return 16;
return 32;
if (version >= 219 && IS_TARANIS_X9D(board))
return 16;
return 32;
return 8;
return 16;
}
inline int MAX_SWITCHES_POSITION(Board::Type board, int version)
@@ -258,7 +273,6 @@ std::list<SwitchesConversionTable::Cache> SwitchesConversionTable::internalCache
#define FLAG_NOTELEMETRY 0x04
class SourcesConversionTable: public ConversionTable {
public:
SourcesConversionTable(Board::Type board, unsigned int version, unsigned int variant, unsigned long flags=0)
{
@@ -282,8 +296,7 @@ class SourcesConversionTable: public ConversionTable {
}
}
for (int i=0; i<CPN_MAX_STICKS+MAX_POTS_STORAGE(board, version)+Boards::getCapability(board, Board::SlidersStorage)+Boards::getCapability(board, Board::MouseAnalogs)+MAX_GYRO_ANALOGS(board, version); i++) {
for (int i=0; i<CPN_MAX_STICKS + MAX_POTS_SOURCES(board, version) + MAX_SLIDERS_SOURCES(board, version) + Boards::getCapability(board, Board::MouseAnalogs) + MAX_GYRO_ANALOGS(board, version); i++) {
int offset = 0;
if (version <= 218 && IS_HORUS(board) && i>=CPN_MAX_STICKS+MAX_POTS_STORAGE(board, version))
offset += 2;
@@ -2433,13 +2446,17 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, Board::Type board, unsig
for (int i=0; i<8; i++) {
if (i < Boards::getCapability(board, Board::Pots) + Boards::getCapability(board, Board::Sliders))
internalField.Append(new BoolField<1>(this, modelData.potsWarningEnabled[i]));
internalField.Append(new BoolField<1>(this, modelData.potsWarnEnabled[i]));
else
internalField.Append(new SpareBitsField<1>(this));
}
for (int i=0; i < Boards::getCapability(board, Board::Pots) + MAX_SLIDERS_STORAGE(board, version); i++) {
internalField.Append(new SignedField<8>(this, modelData.potPosition[i]));
for (int i=0; i < MAX_POTS_STORAGE(board, version) + MAX_SLIDERS_STORAGE(board, version); i++) {
internalField.Append(new SignedField<8>(this, modelData.potsWarnPosition[i]));
}
if (version <= 218 && IS_HORUS_X10(board)) {
internalField.Append(new SpareBitsField<16>(this));
}
if (IS_SKY9X(board)) {
@@ -2527,7 +2544,7 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, Board::Type
generalData(generalData),
board(board),
version(version),
inputsCount(CPN_MAX_STICKS + Boards::getCapability(board, Board::PotsStorage) + Boards::getCapability(board, Board::SlidersStorage) + Boards::getCapability(board, Board::MouseAnalogs))
inputsCount(CPN_MAX_STICKS + MAX_POTS_STORAGE(board, version) + MAX_SLIDERS_STORAGE(board, version) + Boards::getCapability(board, Board::MouseAnalogs))
{
qCDebug(eepromImport) << QString("OpenTxGeneralData::OpenTxGeneralData(board: %1, version:%2, variant:%3)").arg(board).arg(version).arg(variant);
@@ -2537,17 +2554,21 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, Board::Type
internalField.Append(new UnsignedField<8>(this, generalData.version));
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;
for (int i=0, input=0; i<inputsCount; i++, input++) {
if (version <= 218 && IS_HORUS_X10(board) && (i == CPN_MAX_STICKS + 3)) {
input += 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]));
internalField.Append(new SignedField<16>(this, generalData.calibMid[input]));
internalField.Append(new SignedField<16>(this, generalData.calibSpanNeg[input]));
internalField.Append(new SignedField<16>(this, generalData.calibSpanPos[input]));
}
if (version <= 218 && IS_HORUS_X10(board)) {
internalField.Append(new SpareBitsField<16*6>(this));
}
internalField.Append(new UnsignedField<16>(this, chkSum));
if (!IS_HORUS(board)) {
internalField.Append(new UnsignedField<8>(this, generalData.currModelIndex));
internalField.Append(new UnsignedField<8>(this, generalData.contrast));
@@ -2682,18 +2703,18 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, Board::Type
if (IS_STM32(board)) {
if (version >= 218) {
internalField.Append(new UnsignedField<4>(this, generalData.hw_uartMode));
if (!IS_HORUS(board) || version < 219) {
for (uint8_t i=0; i<4; i++) {
internalField.Append(new UnsignedField<4>(this, generalData.auxSerialMode));
if (IS_HORUS(board) && version >= 219) {
internalField.Append(new SpareBitsField<4>(this));
}
else {
for (uint8_t i=0; i<SLIDERS_CONFIG_SIZE(board,version); i++) {
internalField.Append(new UnsignedField<1>(this, generalData.sliderConfig[i]));
}
}
else {
internalField.Append(new SpareBitsField<4>(this));
}
}
else {
internalField.Append(new UnsignedField<6>(this, generalData.hw_uartMode));
internalField.Append(new UnsignedField<6>(this, generalData.auxSerialMode));
if (IS_TARANIS_X9E(board)) {
internalField.Append(new UnsignedField<1>(this, generalData.sliderConfig[2]));
internalField.Append(new UnsignedField<1>(this, generalData.sliderConfig[3]));
@@ -2704,33 +2725,35 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, Board::Type
}
if (IS_HORUS(board)) {
for (int i=0; i<MAX_SWITCH_SLOTS(board, version); i++) { // bits swconfig_t / 2
for (int i=0; i<SWITCHES_CONFIG_SIZE(board, version) / 2; i++) {
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<MAX_KNOBS(board, version); i++) {
for (int i=0; i<POTS_CONFIG_SIZE(board, version) / 2; i++) {
int offset = 0;
// 2 new pots for Horus from 219 on
if (version <= 218 && IS_HORUS(board) && (i >= 3))
offset += 2;
if (i < Boards::getCapability(board, Board::PotsStorage))
if (i < MAX_POTS_STORAGE(board, version))
internalField.Append(new UnsignedField<2>(this, generalData.potConfig[i+offset]));
else
internalField.Append(new SpareBitsField<2>(this));
}
if (IS_HORUS(board) && version >= 219) {
for (int i=0; i<MAX_SLIDERS_SLOTS(board,version); i++) {
if (i < Boards::getCapability(board, Board::SlidersStorage))
for (int i=0; i<SLIDERS_CONFIG_SIZE(board,version); i++) {
if (i < MAX_SLIDERS_STORAGE(board, version))
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));
}
@@ -2769,13 +2792,16 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, Board::Type
for (int i=0; i<MAX_POTS_STORAGE(board, version); ++i) {
internalField.Append(new ZCharField<3>(this, generalData.potName[i], "Pot name"));
}
for (int i=0; i<Boards::getCapability(board, Board::SlidersStorage); ++i) {
for (int i=0; i<MAX_SLIDERS_STORAGE(board, version); ++i) {
internalField.Append(new ZCharField<3>(this, generalData.sliderName[i], "Slider name"));
}
if (version <= 218 && IS_HORUS_X10(board)) {
internalField.Append(new SpareBitsField<48>(this)); // DUMMY_ANAS
}
internalField.Append(new CharField<17>(this, generalData.currModelFilename, true, "Current model filename"));
}
else if (IS_TARANIS(board)) {
for (int i=0; i<MAX_SWITCH_SLOTS(board, version); i++) {
for (int i=0; i<SWITCHES_CONFIG_SIZE(board,version) / 2; i++) {
if (i < MAX_SWITCHES(board, version))
internalField.Append(new UnsignedField<2>(this, generalData.switchConfig[i]));
else
+2 -2
View File
@@ -153,7 +153,7 @@ HardwarePanel::HardwarePanel(QWidget * parent, GeneralSettings & generalSettings
setupSwitchType(17, ui->srLabel, ui->srName, ui->srType);
if (IS_TARANIS(board) && !IS_TARANIS_SMALL(board)) {
ui->serialPortMode->setCurrentIndex(generalSettings.hw_uartMode);
ui->serialPortMode->setCurrentIndex(generalSettings.auxSerialMode);
}
else {
ui->serialPortMode->setCurrentIndex(0);
@@ -277,6 +277,6 @@ void HardwarePanel::on_txVoltageCalibration_editingFinished()
void HardwarePanel::on_serialPortMode_currentIndexChanged(int index)
{
generalSettings.hw_uartMode = index;
generalSettings.auxSerialMode = index;
emit modified();
}
+3 -3
View File
@@ -199,7 +199,7 @@ ModulePanel::ModulePanel(QWidget * parent, ModelData & model, ModuleData & modul
ui->trainerMode->setItemData(TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE, 0, Qt::UserRole - 1);
ui->trainerMode->setItemData(TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE, 0, Qt::UserRole - 1);
}
if (generalSettings.hw_uartMode != UART_MODE_SBUS_TRAINER) {
if (generalSettings.auxSerialMode != UART_MODE_SBUS_TRAINER) {
ui->trainerMode->setItemData(TRAINER_MODE_MASTER_BATTERY_COMPARTMENT, 0, Qt::UserRole - 1);
}
ui->trainerMode->setCurrentIndex(model.trainerMode);
@@ -1387,7 +1387,7 @@ void SetupPanel::updatePotWarnings()
for (int i=0; i<potWarningCheckboxes.size(); i++) {
QCheckBox *checkbox = potWarningCheckboxes[i];
int index = checkbox->property("index").toInt();
checkbox->setChecked(!model->potsWarningEnabled[index]);
checkbox->setChecked(!model->potsWarnEnabled[index]);
checkbox->setDisabled(model->potsWarningMode == 0);
}
lock = false;
@@ -1397,7 +1397,7 @@ void SetupPanel::potWarningToggled(bool checked)
{
if (!lock) {
int index = sender()->property("index").toInt();
model->potsWarningEnabled[index] = !checked;
model->potsWarnEnabled[index] = !checked;
updatePotWarnings();
emit modified();
}
+1 -1
View File
@@ -939,7 +939,7 @@ void TelemetryPanel::setup()
ui->telemetryProtocol->addItem(tr("FrSky S.PORT"), 0);
ui->telemetryProtocol->addItem(tr("FrSky D"), 1);
if (IS_9XRPRO(firmware->getBoard()) ||
(IS_TARANIS(firmware->getBoard()) && generalSettings.hw_uartMode == 2)) {
(IS_TARANIS(firmware->getBoard()) && generalSettings.auxSerialMode == 2)) {
ui->telemetryProtocol->addItem(tr("FrSky D (cable)"), 2);
}
ui->telemetryProtocol->setCurrentIndex(model->telemetryProtocol);
+1 -1
View File
@@ -869,7 +869,7 @@ QString ModelPrinter::printPotWarnings()
for (int i=0; i<board.getCapability(Board::Pots)+board.getCapability(Board::Sliders); i++) {
RawSource src(SOURCE_TYPE_STICK, CPN_MAX_STICKS + i);
if ((src.isPot(&genAryIdx) && generalSettings.isPotAvailable(genAryIdx)) || (src.isSlider(&genAryIdx) && generalSettings.isSliderAvailable(genAryIdx))) {
if (!model.potsWarningEnabled[i])
if (!model.potsWarnEnabled[i])
str += src.toString(&model, &generalSettings);
}
}
+3 -3
View File
@@ -163,15 +163,15 @@ TEST(Conversions, ConversionX10From22)
EXPECT_EQ(0, model.beepANACenter);
EXPECT_EQ(80, model.mixData[0].weight);
EXPECT_EQ(RawSource(SOURCE_TYPE_MAX), model.mixData[2].srcRaw); // MAX
EXPECT_EQ(RawSource(SOURCE_TYPE_STICK,4+5), model.mixData[3].srcRaw); // LS
EXPECT_EQ(RawSource(SOURCE_TYPE_PPM,0), model.mixData[5].srcRaw);
EXPECT_EQ(RawSource(SOURCE_TYPE_STICK, 4+5), model.mixData[3].srcRaw); // LS
EXPECT_EQ(RawSource(SOURCE_TYPE_PPM, 0), model.mixData[5].srcRaw);
EXPECT_EQ(RawSwitch(SWITCH_TYPE_TELEMETRY,1), model.mixData[5].swtch);
EXPECT_EQ(900, model.limitData[0].max); // -100
EXPECT_EQ(80, model.expoData[0].weight);
EXPECT_EQ(LS_FN_VPOS, model.logicalSw[0].func);
EXPECT_EQ(RawSource(SOURCE_TYPE_PPM,0).toValue(), model.logicalSw[0].val1); // TR1
EXPECT_EQ(0, model.logicalSw[0].val2);
EXPECT_EQ(RawSource(SOURCE_TYPE_TELEMETRY,19*3).toValue(), model.logicalSw[1].val1); // TELE:20
EXPECT_EQ(RawSource(SOURCE_TYPE_TELEMETRY, 19*3).toValue(), model.logicalSw[1].val1); // TELE:20
EXPECT_EQ(20, model.logicalSw[1].val2);
EXPECT_EQ(RawSwitch(SWITCH_TYPE_VIRTUAL,1).toValue(), model.logicalSw[1].andsw);
EXPECT_EQ(HELI_SWASH_TYPE_120X, model.swashRingData.type);
+2 -2
View File
@@ -656,7 +656,7 @@ PACK(struct TrainerData {
#define SPLASH_MODE int8_t splashMode:3
#endif
#if defined(PCBXLITES) || defined(PCBHORUS)
#if defined(PCBXLITES)
#define GYRO_FIELDS \
int8_t gyroMax; \
int8_t gyroOffset;
@@ -931,7 +931,7 @@ static inline void check_struct()
CHKSIZE(RadioData, 735);
CHKSIZE(ModelData, 5301);
#elif defined(PCBHORUS)
CHKSIZE(RadioData, 883);
CHKSIZE(RadioData, 881);
CHKSIZE(ModelData, 9736);
#endif
@@ -524,14 +524,14 @@ PACK(typedef struct {
ScriptData_v216 scriptsData[MAX_SCRIPTS]; \
char inputNames[MAX_INPUTS][LEN_INPUT_NAME]; \
uint8_t nPotsToWarn; \
int8_t potPosition[NUM_POTS+NUM_SLIDERS]; \
int8_t potsWarnPosition[NUM_POTS+NUM_SLIDERS]; \
uint8_t spare[2];
#elif defined(PCBSKY9X)
#define MODELDATA_EXTRA_216 \
uint8_t externalModule; \
ModuleData_v216 moduleData[NUM_MODULES+1]; \
uint8_t nPotsToWarn; \
int8_t potPosition[NUM_POTS+NUM_SLIDERS]; \
int8_t potsWarnPosition[NUM_POTS+NUM_SLIDERS]; \
uint8_t rxBattAlarms[2];
#endif
@@ -1070,7 +1070,7 @@ void convertModelData_216_to_217(ModelData &model)
#endif
newModel.potsWarnMode = oldModel.nPotsToWarn >> 6;
newModel.potsWarnEnabled = oldModel.nPotsToWarn & 0x1f;
memcpy(newModel.potsWarnPosition, oldModel.potPosition, sizeof(newModel.potsWarnPosition));
memcpy(newModel.potsWarnPosition, oldModel.potsWarnPosition, sizeof(newModel.potsWarnPosition));
}
void convertModelData_217_to_218(ModelData &model)