WiP: conversions and storage format v220

This commit is contained in:
Raphael Coeffic
2021-06-05 20:29:09 +02:00
committed by Raphael Coeffic
parent ecb1146b13
commit 599bbdf314
6 changed files with 263 additions and 285 deletions
+1 -28
View File
@@ -729,7 +729,7 @@ PACK(struct TrainerData {
NOBACKUP(uint8_t spare5:1 SKIP); \
NOBACKUP(uint8_t blOffBright:7); \
NOBACKUP(char bluetoothName[LEN_BLUETOOTH_NAME]);
#elif defined(PCBTARANIS) || defined(PCBNV14)
#elif defined(PCBTARANIS) //|| defined(PCBNV14)
#if defined(STORAGE_BLUETOOTH)
#define BLUETOOTH_FIELDS \
uint8_t spare5 SKIP; \
@@ -747,18 +747,6 @@ PACK(struct TrainerData {
char switchNames[STORAGE_NUM_SWITCHES][LEN_SWITCH_NAME]; \
char anaNames[NUM_STICKS+STORAGE_NUM_POTS+STORAGE_NUM_SLIDERS][LEN_ANA_NAME]; \
BLUETOOTH_FIELDS
#elif defined(PCBSKY9X)
#define EXTRA_GENERAL_FIELDS \
int8_t txCurrentCalibration; \
int8_t spare5 SKIP; \
uint8_t mAhWarn; \
uint16_t mAhUsed; \
int8_t temperatureCalib; \
uint8_t optrexDisplay; \
uint8_t sticksGain; \
uint8_t rotarySteps; \
char switchNames[STORAGE_NUM_SWITCHES][LEN_SWITCH_NAME]; \
char anaNames[NUM_STICKS+STORAGE_NUM_POTS+STORAGE_NUM_SLIDERS][LEN_ANA_NAME];
#else
#define EXTRA_GENERAL_FIELDS
#endif
@@ -932,18 +920,6 @@ static inline void check_struct()
CHKTYPE(TopBarPersistentData, 300);
#elif defined(PCBNV14)
// TODO
#elif defined(PCBSKY9X)
CHKSIZE(MixData, 20);
CHKSIZE(ExpoData, 17);
CHKSIZE(LimitData, 11);
CHKSIZE(CustomFunctionData, 9);
CHKSIZE(FlightModeData, 36);
CHKSIZE(TimerData, 11);
CHKSIZE(SwashRingData, 8);
CHKSIZE(FrSkyBarData, 5);
CHKSIZE(FrSkyLineData, 2);
CHKSIZE(ModelHeader, 12);
CHKTYPE(CurveHeader, 4);
#else
// Common for all variants
CHKSIZE(LimitData, 5);
@@ -986,9 +962,6 @@ static inline void check_struct()
#elif defined(PCBX9D) || defined(PCBX9DP)
CHKSIZE(RadioData, 898);
CHKSIZE(ModelData, 6604);
#elif defined(PCBSKY9X)
CHKSIZE(RadioData, 735);
CHKSIZE(ModelData, 5301);
#elif defined(PCBHORUS)
CHKSIZE(RadioData, 901);
CHKSIZE(ModelData, 11020);
+12 -64
View File
@@ -25,24 +25,9 @@ void convertRadioData(int version)
{
TRACE("convertRadioData(%d)", version);
#if STORAGE_CONVERSIONS < 217
if (version == 216) {
version = 217;
convertRadioData_216_to_217(g_eeGeneral);
}
#endif
#if STORAGE_CONVERSIONS < 218
if (version == 217) {
version = 218;
convertRadioData_217_to_218(g_eeGeneral);
}
#endif
#if STORAGE_CONVERSIONS < 219
if (version == 218) {
version = 219;
convertRadioData_218_to_219(g_eeGeneral);
#if STORAGE_CONVERSIONS < 220
if (version == 219) {
convertRadioData_219_to_220(g_eeGeneral);
}
#endif
}
@@ -51,24 +36,10 @@ void convertModelData(int version)
{
TRACE("convertModelData(%d)", version);
#if STORAGE_CONVERSIONS < 217
if (version == 216) {
version = 217;
convertModelData_216_to_217(g_model);
}
#endif
#if STORAGE_CONVERSIONS < 218
if (version == 217) {
version = 218;
convertModelData_217_to_218(g_model);
}
#endif
#if STORAGE_CONVERSIONS < 219
if (version == 218) {
#if STORAGE_CONVERSIONS < 220
if (version == 219) {
version = 219;
convertModelData_218_to_219(g_model);
convertModelData_219_to_220(g_model);
}
#endif
}
@@ -90,14 +61,8 @@ bool eeConvert()
const char *msg = NULL;
switch (g_eeGeneral.version) {
case 216:
msg = "EEprom Data v216";
break;
case 217:
msg = "EEprom Data v217";
break;
case 218:
msg = "EEprom Data v218";
case 219:
msg = "EEprom Data v219";
break;
default:
return false;
@@ -106,9 +71,6 @@ bool eeConvert()
int conversionVersionStart = g_eeGeneral.version;
// Information to the user and wait for key press
#if defined(PCBSKY9X)
g_eeGeneral.optrexDisplay = 0;
#endif
g_eeGeneral.backlightMode = e_backlight_mode_on;
g_eeGeneral.backlightBright = 0;
g_eeGeneral.contrast = 25;
@@ -121,24 +83,10 @@ bool eeConvert()
eeLoadGeneralSettingsData();
int version = conversionVersionStart;
#if STORAGE_CONVERSIONS < 217
if (version == 216) {
version = 217;
convertRadioData_216_to_217(g_eeGeneral);
}
#endif
#if STORAGE_CONVERSIONS < 218
if (version == 217) {
version = 218;
convertRadioData_217_to_218(g_eeGeneral);
}
#endif
#if STORAGE_CONVERSIONS < 219
if (version == 218) {
version = 219;
convertRadioData_218_to_219(g_eeGeneral);
#if STORAGE_CONVERSIONS < 220
if (version == 219) {
version = 220;
convertRadioData_219_to_220(g_eeGeneral);
}
#endif
+14 -9
View File
@@ -24,14 +24,19 @@ void convertModelData(int version);
bool eeConvert();
void eeConvertModel(int id, int version);
// Conversions 216 to 217
void convertModelData_216_to_217(ModelData &model);
void convertRadioData_216_to_217(RadioData &settings);
// // Conversions 216 to 217
// void convertModelData_216_to_217(ModelData &model);
// void convertRadioData_216_to_217(RadioData &settings);
// Conversions 217 to 218
void convertModelData_217_to_218(ModelData &model);
void convertRadioData_217_to_218(RadioData &settings);
// // Conversions 217 to 218
// void convertModelData_217_to_218(ModelData &model);
// void convertRadioData_217_to_218(RadioData &settings);
// Conversions 218 to 219
void convertModelData_218_to_219(ModelData &model);
void convertRadioData_218_to_219(RadioData &settings);
// // Conversions 218 to 219
// void convertModelData_218_to_219(ModelData &model);
// void convertRadioData_218_to_219(RadioData &settings);
// Conversions 219 to 220
void convertModelData_219_to_220(ModelData &model);
void convertRadioData_219_to_220(RadioData &settings);
@@ -68,6 +68,18 @@
typedef TimerData TimerData_v220;
static void convertToStr(char* str, size_t len)
{
for (int c = 0; c < len; c++) {
str[c] = zchar2char(str[c]);
}
// Trim string
while(len > 0 && str[len-1]) {
if (str[len - 1] != ' ' && str[len - 1] != '\0') break;
str[--len] = '\0';
}
}
void convertModelData_219_to_220(ModelData &model)
{
ModelData* oldModelAllocated = (ModelData*)malloc(sizeof(ModelData));
@@ -76,11 +88,77 @@ void convertModelData_219_to_220(ModelData &model)
memcpy(&oldModel, &model, sizeof(ModelData));
ModelData& newModel = (ModelData&)model;
convertToStr(model.header.name, LEN_MODEL_NAME_219);
for (uint8_t i=0; i<MAX_TIMERS_219; i++) {
//TODO: convert to new timers v220
//TimerData & timer = newModel.timers[i];
TimerData& timer = newModel.timers[i];
convertToStr(timer.name, LEN_TIMER_NAME_219);
}
// MixData::name
for (uint8_t i=0; i<MAX_MIXERS_219; ++i) {
convertToStr(model.mixData[i].name, LEN_EXPOMIX_NAME_219);
}
// LimitData::name
for (uint8_t i=0; i<MAX_OUTPUT_CHANNELS_219; ++i) {
convertToStr(model.limitData[i].name, LEN_CHANNEL_NAME_219);
}
// ExpoData::name
for (uint8_t i=0; i<MAX_EXPOS_219; ++i) {
convertToStr(model.expoData[i].name, LEN_EXPOMIX_NAME_219);
}
// CurveHeader.name
for (uint8_t i=0; i<MAX_CURVES_219; ++i) {
convertToStr(model.expoData[i].name, LEN_CURVE_NAME_219);
}
// CustomFunctionData::play.name
for (uint8_t i = 0; i < MAX_SPECIAL_FUNCTIONS_219; ++i) {
CustomFunctionData* cfn = &(model.customFn[i]);
if (cfn->func == FUNC_PLAY_TRACK || cfn->func == FUNC_BACKGND_MUSIC) {
convertToStr(cfn->play.name, LEN_FUNCTION_NAME_219);
}
}
// GVarData::name ?
for (uint8_t i=0; i<MAX_GVARS_219; ++i) {
convertToStr(model.gvars[i].name, LEN_GVAR_NAME_219);
}
// ScriptData::name ?
// ScriptData::file ?
for (uint8_t i=0; i<MAX_SCRIPTS_219; ++i) {
convertToStr(model.scriptsData[i].file, LEN_SCRIPT_FILENAME);
convertToStr(model.scriptsData[i].name, LEN_SCRIPT_NAME);
}
// Input names
for (uint8_t i=0; i<MAX_INPUTS_219; ++i) {
convertToStr(model.inputNames[i], LEN_INPUT_NAME_219);
}
// Telemetry names
for (uint8_t i=0; i<MAX_TELEMETRY_SENSORS_219; ++i) {
convertToStr(model.telemetrySensors[i].label, TELEM_LABEL_LEN_219);
}
// FlightModeData name
for (uint8_t i=0; i<MAX_FLIGHT_MODES_219; ++i) {
convertToStr(model.flightModeData[i].name, LEN_FLIGHT_MODE_NAME_219);
}
//
// TODO: convert all names from zchar to "normal" chars
//
// g_model.header.bitmap ???? really ????
// TelemetryScriptData::file ?
// ModuleData::pxx2.receiverName
#if defined(PCBHORUS)
// Clear CustomScreenData + TopBarPersistentData
// as they cannot be converted (missing option types)
@@ -89,9 +167,6 @@ void convertModelData_219_to_220(ModelData &model)
sizeof(newModel.topbarData));
//TODO: set defaults as with new model
#endif
//TODO: convert all names from zchar to "normal" chars
free(oldModelAllocated);
}
@@ -117,20 +192,19 @@ void convertRadioData_219_to_220(RadioData & settings)
defaultTheme->init();
#endif
//
// TODO: convert all names from zchar to "normal" chars
//
// g_model.telemetrySensors[i].label
// g_model.header.name
// g_model.header.bitmap // ???? really ????
// timer.name
// fm->name
// expo->name
// g_model.inputNames[chn]
// mix->name
// CurveHeader.name
// cfn->play.name
// limit->name
for (int i = 0; i < NUM_SWITCHES_219; ++i) {
char* sw_name = &(settings.switchNames[i][0]);
convertToStr(sw_name, LEN_SWITCH_NAME_219);
}
for (int i = 0; i < NUM_STICKS_219 + NUM_POTS_219 + NUM_SLIDERS_219; ++i) {
char* sw_name = &(settings.anaNames[i][0]);
convertToStr(sw_name, LEN_ANA_NAME_219);
}
#if defined(PCBHORUS) || defined(PCBNV14)
convertToStr(settings.bluetoothName, LEN_BLUETOOTH_NAME_219);
#endif
free(oldSettingsAllocated);
}
@@ -43,6 +43,25 @@
#error "Unsupported Conversion for Radio"
#endif
#if defined(PCBHORUS)
#define NUM_POTS_219 5
#define NUM_SLIDERS_219 4
#elif defined(PCBX9LITE)
#define NUM_POTS_219 1
#define NUM_SLIDERS_219 0
#elif defined(RADIO_T8) || defined(RADIO_TLITE) || defined(PCBXLITE) || defined(PCBX7)
#define NUM_POTS_219 2
#define NUM_SLIDERS_219 0
#elif defined(PCBX9E)
#define NUM_POTS_219 4
#define NUM_SLIDERS_219 4
#else
#define NUM_POTS_219 3
#define NUM_SLIDERS_219 2
#endif
#define NUM_STICKS_219 4
#if defined(PCBHORUS)
#define LEN_SWITCH_NAME_219 3
#define LEN_ANA_NAME_219 3
@@ -55,6 +74,7 @@
#endif
#define LEN_GVAR_NAME_219 3
#define TELEM_LABEL_LEN_219 4
#if defined(PCBHORUS)
#define LEN_MODEL_NAME_219 15
+124 -166
View File
@@ -31,106 +31,14 @@ void loadEEPROMFile(const char * filename)
#endif
#if defined(PCBX9DP)
#warning "TODO Make those tests on conversions work!"
//TEST(Conversions, ConversionX9DPFrom22)
//{
// loadEEPROMFile(TESTS_PATH "/eeprom_22_x9d+.bin");
//
// eepromOpen();
// eeLoadGeneralSettingsData();
// convertRadioData_218_to_219(g_eeGeneral);
// eeConvertModel(0, 218);
// eeLoadModel(0);
//
// EXPECT_EQ(-30, g_eeGeneral.vBatMin);
// EXPECT_EQ(8, g_eeGeneral.speakerVolume);
// EXPECT_EQ('e', g_eeGeneral.ttsLanguage[0]);
// EXPECT_EQ('n', g_eeGeneral.ttsLanguage[1]);
//
// EXPECT_EQ(SWSRC_TELEMETRY_STREAMING, g_eeGeneral.customFn[0].swtch);
// EXPECT_EQ(FUNC_LOGS, g_eeGeneral.customFn[0].func);
// EXPECT_EQ(20, g_eeGeneral.customFn[0].all.val);
//
// EXPECT_ZSTREQ("Tes", g_eeGeneral.switchNames[0]);
// EXPECT_EQ(SWITCH_3POS, SWITCH_CONFIG(0));
//
// EXPECT_ZSTREQ("Test", g_model.header.name);
// EXPECT_EQ(TMRMODE_COUNT - 1 + SWSRC_SA0, g_model.timers[0].mode);
// EXPECT_EQ(80, g_model.mixData[0].weight);
// EXPECT_EQ(-100, g_model.limitData[0].max); // 90.0
// EXPECT_EQ(80, g_model.expoData[0].weight);
// EXPECT_EQ(CURVE_REF_CUSTOM, g_model.expoData[0].curve.type);
// EXPECT_EQ(1, g_model.expoData[0].curve.value);
// EXPECT_EQ(CURVE_REF_EXPO, g_model.expoData[1].curve.type);
// EXPECT_EQ(20, g_model.expoData[1].curve.value);
// EXPECT_EQ(SWASH_TYPE_120X, g_model.swashR.type);
// EXPECT_EQ(10, g_model.flightModeData[0].gvars[0]);
// EXPECT_ZSTREQ("Tes", g_model.gvars[0].name);
// EXPECT_EQ(MODULE_TYPE_R9M_PXX1, g_model.moduleData[EXTERNAL_MODULE].type);
// EXPECT_EQ(MODULE_SUBTYPE_R9M_FCC, g_model.moduleData[EXTERNAL_MODULE].subType);
// EXPECT_ZSTREQ("Thr", g_model.inputNames[0]);
// EXPECT_ZSTREQ("Tes", g_model.telemetrySensors[0].label);
// EXPECT_EQ(10, g_model.telemetrySensors[0].id);
// EXPECT_EQ(9, g_model.telemetrySensors[0].frskyInstance.physID);
// EXPECT_EQ(MIXSRC_FIRST_TELEM, g_model.logicalSw[0].v1);
//}
//
//TEST(Conversions, ConversionX9DPFrom23)
//{
// loadEEPROMFile(TESTS_PATH "/eeprom_23_x9d+.bin");
//
// eepromOpen();
// eeLoadGeneralSettingsData();
// eeLoadModel(0);
//
// EXPECT_EQ(-30, g_eeGeneral.vBatMin);
// EXPECT_EQ(8, g_eeGeneral.speakerVolume);
// EXPECT_EQ('e', g_eeGeneral.ttsLanguage[0]);
// EXPECT_EQ('n', g_eeGeneral.ttsLanguage[1]);
//
// EXPECT_EQ(SWSRC_TELEMETRY_STREAMING, g_eeGeneral.customFn[0].swtch);
// EXPECT_EQ(FUNC_LOGS, g_eeGeneral.customFn[0].func);
// EXPECT_EQ(20, g_eeGeneral.customFn[0].all.val);
//
// EXPECT_ZSTREQ("Tes", g_eeGeneral.switchNames[0]);
// EXPECT_EQ(SWITCH_3POS, SWITCH_CONFIG(0));
//
// EXPECT_ZSTREQ("Test", g_model.header.name);
// EXPECT_EQ(TMRMODE_COUNT - 1 + SWSRC_SA0, g_model.timers[0].mode);
// EXPECT_EQ(80, g_model.mixData[0].weight);
// EXPECT_EQ(-100, g_model.limitData[0].max); // 90.0
// EXPECT_EQ(80, g_model.expoData[0].weight);
// EXPECT_EQ(10, g_model.flightModeData[0].gvars[0]);
// EXPECT_ZSTREQ("Tes", g_model.gvars[0].name);
// EXPECT_ZSTREQ("Test", g_model.flightModeData[0].name);
//
//#if defined(INTERNAL_MODULE_PXX2)
// EXPECT_EQ(MODULE_TYPE_ISRM_PXX2, g_model.moduleData[INTERNAL_MODULE].type);
// EXPECT_EQ(MODULE_SUBTYPE_ISRM_PXX2_ACCST_D16, g_model.moduleData[INTERNAL_MODULE].subType);
//#else
// EXPECT_EQ(MODULE_TYPE_NONE, g_model.moduleData[INTERNAL_MODULE].type);
//#endif
//
// EXPECT_EQ(MODULE_TYPE_R9M_PXX1, g_model.moduleData[EXTERNAL_MODULE].type);
// EXPECT_EQ(MODULE_SUBTYPE_R9M_FCC, g_model.moduleData[EXTERNAL_MODULE].subType);
//
// EXPECT_ZSTREQ("Rud", g_model.inputNames[0]);
// EXPECT_ZSTREQ("Tes", g_model.telemetrySensors[0].label);
// EXPECT_EQ(10, g_model.telemetrySensors[0].id);
// EXPECT_EQ(10, g_model.telemetrySensors[0].frskyInstance.physID);
// EXPECT_EQ(MIXSRC_FIRST_TELEM, g_model.logicalSw[0].v1);
//}
#endif
#if defined(PCBXLITE) && !defined(PCBXLITES)
TEST(Conversions, ConversionXLiteFrom22)
TEST(Conversions, ConversionX9DPFrom23)
{
loadEEPROMFile(TESTS_PATH "/eeprom_22_xlite.bin");
loadEEPROMFile(TESTS_PATH "/eeprom_23_x9d+.bin");
eepromOpen();
eeLoadGeneralSettingsData();
convertRadioData_218_to_219(g_eeGeneral);
eeConvertModel(0, 218);
convertRadioData_219_to_220(g_eeGeneral);
eeConvertModel(0, 219);
eeLoadModel(0);
EXPECT_EQ(-30, g_eeGeneral.vBatMin);
@@ -142,87 +50,137 @@ TEST(Conversions, ConversionXLiteFrom22)
EXPECT_EQ(FUNC_LOGS, g_eeGeneral.customFn[0].func);
EXPECT_EQ(20, g_eeGeneral.customFn[0].all.val);
EXPECT_ZSTREQ("Tes", g_eeGeneral.switchNames[0]);
EXPECT_STREQ("Tes", g_eeGeneral.switchNames[0]); // ZSTREQ
EXPECT_EQ(SWITCH_3POS, SWITCH_CONFIG(0));
EXPECT_ZSTREQ("Test", g_model.header.name);
EXPECT_EQ(MODULE_TYPE_R9M_PXX1, g_model.moduleData[EXTERNAL_MODULE].type);
EXPECT_EQ(MODULE_SUBTYPE_R9M_EU, g_model.moduleData[EXTERNAL_MODULE].subType);
EXPECT_STREQ("Test", g_model.header.name); // ZSTREQ
EXPECT_EQ(TMRMODE_COUNT - 1 + SWSRC_SA0, g_model.timers[0].mode); // new!
EXPECT_EQ(80, g_model.mixData[0].weight);
EXPECT_EQ(80, g_model.expoData[0].weight);
EXPECT_EQ(MIXSRC_FIRST_TRAINER, g_model.mixData[4].srcRaw);
EXPECT_EQ(SWSRC_TELEMETRY_STREAMING, g_model.mixData[4].swtch);
EXPECT_EQ(SWASH_TYPE_120X, g_model.swashR.type);
EXPECT_ZSTREQ("Thr", g_model.inputNames[0]);
EXPECT_ZSTREQ("Tes", g_model.telemetrySensors[0].label);
EXPECT_EQ(10, g_model.telemetrySensors[0].id);
EXPECT_EQ(8, g_model.telemetrySensors[0].frskyInstance.physID);
EXPECT_EQ(-100, g_model.limitData[0].max); // 90.0
EXPECT_EQ(LS_FUNC_VPOS, g_model.logicalSw[0].func);
EXPECT_EQ(MIXSRC_FIRST_TRAINER, g_model.logicalSw[0].v1);
EXPECT_EQ(0, g_model.logicalSw[0].v2);
EXPECT_EQ(TELEMETRY_SCREEN_TYPE_VALUES, g_model.screensType & 0x03);
EXPECT_EQ(MIXSRC_FIRST_TRAINER, g_model.screens[0].lines[0].sources[0]);
EXPECT_EQ(MIXSRC_TIMER3, g_model.screens[0].lines[0].sources[1]);
}
#endif
#if defined(PCBX7)
TEST(Conversions, ConversionX7From22)
{
loadEEPROMFile(TESTS_PATH "/eeprom_22_x7.bin");
eepromOpen();
eeLoadGeneralSettingsData();
convertRadioData_218_to_219(g_eeGeneral);
eeConvertModel(0, 218);
eeLoadModel(0);
EXPECT_EQ(-30, g_eeGeneral.vBatMin);
EXPECT_EQ(8, g_eeGeneral.speakerVolume);
EXPECT_EQ('e', g_eeGeneral.ttsLanguage[0]);
EXPECT_EQ('n', g_eeGeneral.ttsLanguage[1]);
EXPECT_EQ(SWSRC_TELEMETRY_STREAMING, g_eeGeneral.customFn[0].swtch);
EXPECT_EQ(FUNC_LOGS, g_eeGeneral.customFn[0].func);
EXPECT_EQ(20, g_eeGeneral.customFn[0].all.val);
EXPECT_ZSTREQ("Tes", g_eeGeneral.switchNames[0]);
EXPECT_EQ(SWITCH_3POS, SWITCH_CONFIG(0));
EXPECT_ZSTREQ("Test", g_model.header.name);
EXPECT_EQ(MODULE_TYPE_R9M_PXX1, g_model.moduleData[EXTERNAL_MODULE].type);
EXPECT_EQ(MODULE_SUBTYPE_R9M_EU, g_model.moduleData[EXTERNAL_MODULE].subType);
EXPECT_EQ(80, g_model.mixData[0].weight);
EXPECT_EQ(80, g_model.expoData[0].weight);
EXPECT_EQ(MIXSRC_FIRST_TRAINER, g_model.mixData[4].srcRaw);
EXPECT_EQ(SWSRC_TELEMETRY_STREAMING, g_model.mixData[4].swtch);
EXPECT_EQ(SWASH_TYPE_120X, g_model.swashR.type);
EXPECT_ZSTREQ("Thr", g_model.inputNames[0]);
EXPECT_ZSTREQ("Tes", g_model.telemetrySensors[0].label);
EXPECT_EQ(10, g_model.telemetrySensors[0].id);
EXPECT_EQ(9, g_model.telemetrySensors[0].frskyInstance.physID);
EXPECT_EQ(-100, g_model.limitData[0].max); // 90.0
EXPECT_EQ(10, g_model.flightModeData[0].gvars[0]);
EXPECT_ZSTREQ("FMtest", g_model.flightModeData[1].name);
EXPECT_EQ(45, g_model.flightModeData[1].swtch);
EXPECT_ZSTREQ("Tes", g_model.gvars[0].name);
EXPECT_STREQ("Tes", g_model.gvars[0].name); // ZSTREQ
EXPECT_STREQ("Test", g_model.flightModeData[0].name); // ZSTREQ
EXPECT_EQ(LS_FUNC_VPOS, g_model.logicalSw[0].func);
EXPECT_EQ(MIXSRC_FIRST_TRAINER, g_model.logicalSw[0].v1);
EXPECT_EQ(0, g_model.logicalSw[0].v2);
#if defined(INTERNAL_MODULE_PXX2)
EXPECT_EQ(MODULE_TYPE_ISRM_PXX2, g_model.moduleData[INTERNAL_MODULE].type);
EXPECT_EQ(MODULE_SUBTYPE_ISRM_PXX2_ACCST_D16, g_model.moduleData[INTERNAL_MODULE].subType);
#else
EXPECT_EQ(MODULE_TYPE_NONE, g_model.moduleData[INTERNAL_MODULE].type);
#endif
EXPECT_EQ(TELEMETRY_SCREEN_TYPE_VALUES, g_model.screensType & 0x03);
EXPECT_EQ(MIXSRC_FIRST_TRAINER, g_model.screens[0].lines[0].sources[0]);
EXPECT_EQ(MIXSRC_TIMER3, g_model.screens[0].lines[0].sources[1]);
EXPECT_EQ(MODULE_TYPE_R9M_PXX1, g_model.moduleData[EXTERNAL_MODULE].type);
EXPECT_EQ(MODULE_SUBTYPE_R9M_FCC, g_model.moduleData[EXTERNAL_MODULE].subType);
EXPECT_STREQ("Rud", g_model.inputNames[0]); // ZSTREQ
EXPECT_STREQ("Tes", g_model.telemetrySensors[0].label); // ZSTREQ
EXPECT_EQ(10, g_model.telemetrySensors[0].id);
EXPECT_EQ(10, g_model.telemetrySensors[0].frskyInstance.physID);
EXPECT_EQ(MIXSRC_FIRST_TELEM, g_model.logicalSw[0].v1);
}
#endif
// #if defined(PCBXLITE) && !defined(PCBXLITES)
// TEST(Conversions, ConversionXLiteFrom22)
// {
// loadEEPROMFile(TESTS_PATH "/eeprom_22_xlite.bin");
// eepromOpen();
// eeLoadGeneralSettingsData();
// convertRadioData_218_to_219(g_eeGeneral);
// eeConvertModel(0, 218);
// eeLoadModel(0);
// EXPECT_EQ(-30, g_eeGeneral.vBatMin);
// EXPECT_EQ(8, g_eeGeneral.speakerVolume);
// EXPECT_EQ('e', g_eeGeneral.ttsLanguage[0]);
// EXPECT_EQ('n', g_eeGeneral.ttsLanguage[1]);
// EXPECT_EQ(SWSRC_TELEMETRY_STREAMING, g_eeGeneral.customFn[0].swtch);
// EXPECT_EQ(FUNC_LOGS, g_eeGeneral.customFn[0].func);
// EXPECT_EQ(20, g_eeGeneral.customFn[0].all.val);
// EXPECT_ZSTREQ("Tes", g_eeGeneral.switchNames[0]);
// EXPECT_EQ(SWITCH_3POS, SWITCH_CONFIG(0));
// EXPECT_ZSTREQ("Test", g_model.header.name);
// EXPECT_EQ(MODULE_TYPE_R9M_PXX1, g_model.moduleData[EXTERNAL_MODULE].type);
// EXPECT_EQ(MODULE_SUBTYPE_R9M_EU, g_model.moduleData[EXTERNAL_MODULE].subType);
// EXPECT_EQ(80, g_model.mixData[0].weight);
// EXPECT_EQ(80, g_model.expoData[0].weight);
// EXPECT_EQ(MIXSRC_FIRST_TRAINER, g_model.mixData[4].srcRaw);
// EXPECT_EQ(SWSRC_TELEMETRY_STREAMING, g_model.mixData[4].swtch);
// EXPECT_EQ(SWASH_TYPE_120X, g_model.swashR.type);
// EXPECT_ZSTREQ("Thr", g_model.inputNames[0]);
// EXPECT_ZSTREQ("Tes", g_model.telemetrySensors[0].label);
// EXPECT_EQ(10, g_model.telemetrySensors[0].id);
// EXPECT_EQ(8, g_model.telemetrySensors[0].frskyInstance.physID);
// EXPECT_EQ(-100, g_model.limitData[0].max); // 90.0
// EXPECT_EQ(LS_FUNC_VPOS, g_model.logicalSw[0].func);
// EXPECT_EQ(MIXSRC_FIRST_TRAINER, g_model.logicalSw[0].v1);
// EXPECT_EQ(0, g_model.logicalSw[0].v2);
// EXPECT_EQ(TELEMETRY_SCREEN_TYPE_VALUES, g_model.screensType & 0x03);
// EXPECT_EQ(MIXSRC_FIRST_TRAINER, g_model.screens[0].lines[0].sources[0]);
// EXPECT_EQ(MIXSRC_TIMER3, g_model.screens[0].lines[0].sources[1]);
// }
// #endif
// #if defined(PCBX7)
// TEST(Conversions, ConversionX7From22)
// {
// loadEEPROMFile(TESTS_PATH "/eeprom_22_x7.bin");
// eepromOpen();
// eeLoadGeneralSettingsData();
// convertRadioData_218_to_219(g_eeGeneral);
// eeConvertModel(0, 218);
// eeLoadModel(0);
// EXPECT_EQ(-30, g_eeGeneral.vBatMin);
// EXPECT_EQ(8, g_eeGeneral.speakerVolume);
// EXPECT_EQ('e', g_eeGeneral.ttsLanguage[0]);
// EXPECT_EQ('n', g_eeGeneral.ttsLanguage[1]);
// EXPECT_EQ(SWSRC_TELEMETRY_STREAMING, g_eeGeneral.customFn[0].swtch);
// EXPECT_EQ(FUNC_LOGS, g_eeGeneral.customFn[0].func);
// EXPECT_EQ(20, g_eeGeneral.customFn[0].all.val);
// EXPECT_ZSTREQ("Tes", g_eeGeneral.switchNames[0]);
// EXPECT_EQ(SWITCH_3POS, SWITCH_CONFIG(0));
// EXPECT_ZSTREQ("Test", g_model.header.name);
// EXPECT_EQ(MODULE_TYPE_R9M_PXX1, g_model.moduleData[EXTERNAL_MODULE].type);
// EXPECT_EQ(MODULE_SUBTYPE_R9M_EU, g_model.moduleData[EXTERNAL_MODULE].subType);
// EXPECT_EQ(80, g_model.mixData[0].weight);
// EXPECT_EQ(80, g_model.expoData[0].weight);
// EXPECT_EQ(MIXSRC_FIRST_TRAINER, g_model.mixData[4].srcRaw);
// EXPECT_EQ(SWSRC_TELEMETRY_STREAMING, g_model.mixData[4].swtch);
// EXPECT_EQ(SWASH_TYPE_120X, g_model.swashR.type);
// EXPECT_ZSTREQ("Thr", g_model.inputNames[0]);
// EXPECT_ZSTREQ("Tes", g_model.telemetrySensors[0].label);
// EXPECT_EQ(10, g_model.telemetrySensors[0].id);
// EXPECT_EQ(9, g_model.telemetrySensors[0].frskyInstance.physID);
// EXPECT_EQ(-100, g_model.limitData[0].max); // 90.0
// EXPECT_EQ(10, g_model.flightModeData[0].gvars[0]);
// EXPECT_ZSTREQ("FMtest", g_model.flightModeData[1].name);
// EXPECT_EQ(45, g_model.flightModeData[1].swtch);
// EXPECT_ZSTREQ("Tes", g_model.gvars[0].name);
// EXPECT_EQ(LS_FUNC_VPOS, g_model.logicalSw[0].func);
// EXPECT_EQ(MIXSRC_FIRST_TRAINER, g_model.logicalSw[0].v1);
// EXPECT_EQ(0, g_model.logicalSw[0].v2);
// EXPECT_EQ(TELEMETRY_SCREEN_TYPE_VALUES, g_model.screensType & 0x03);
// EXPECT_EQ(MIXSRC_FIRST_TRAINER, g_model.screens[0].lines[0].sources[0]);
// EXPECT_EQ(MIXSRC_TIMER3, g_model.screens[0].lines[0].sources[1]);
// }
// #endif
#if 0 //TODO defined(PCBX10) && !defined(RADIO_FAMILY_T16)
TEST(Conversions, ConversionX10From22)
{