WiP: Binary storage format conversion

Storage format version is now 220.
This commit is contained in:
Raphael Coeffic
2021-06-05 20:29:09 +02:00
committed by Raphael Coeffic
parent 875c1688b1
commit fc12c869be
5 changed files with 296 additions and 72 deletions
+1 -41
View File
@@ -73,17 +73,6 @@
#define MAX_INPUTS 32
#define MAX_TRAINER_CHANNELS 16
#define MAX_TELEMETRY_SENSORS 40
#elif defined(PCBSKY9X)
#define MAX_MODELS 60
#define MAX_OUTPUT_CHANNELS 32 // number of real output channels CH1-CH32
#define MAX_FLIGHT_MODES 9
#define MAX_MIXERS 64
#define MAX_EXPOS 32
#define MAX_LOGICAL_SWITCHES 64
#define MAX_SPECIAL_FUNCTIONS 64 // number of functions assigned to switches
#define MAX_INPUTS 32
#define MAX_TRAINER_CHANNELS 16
#define MAX_TELEMETRY_SENSORS 40
#else
#warning "Unknown board!"
#endif
@@ -137,7 +126,7 @@ enum CurveType {
#define MAX_CURVE_POINTS 512
#endif
#if defined(PCBFRSKY) || defined(PCBSKY9X) || defined(PCBNV14)
#if defined(PCBFRSKY) || defined(PCBNV14)
#define NUM_MODULES 2
#else
#define NUM_MODULES 1
@@ -205,12 +194,6 @@ enum TrainerMode {
TRAINER_MODE_SLAVE_BLUETOOTH,
TRAINER_MODE_MULTI,
};
#elif defined(PCBSKY9X)
enum ModuleIndex {
EXTERNAL_MODULE,
EXTRA_MODULE,
SPORT_MODULE
};
#endif
#define TRAINER_MODE_MIN() TRAINER_MODE_MASTER_TRAINER_JACK
@@ -515,21 +498,7 @@ enum SwitchSources {
SWSRC_SR2,
#endif
#if defined(PCBSKY9X)
SWSRC_ID0 = SWSRC_FIRST_SWITCH,
SWSRC_ID1,
SWSRC_ID2,
SWSRC_THR,
SWSRC_RUD,
SWSRC_ELE,
SWSRC_AIL,
SWSRC_GEA,
SWSRC_TRN,
SWSRC_TRAINER SKIP = SWSRC_TRN,
SWSRC_LAST_SWITCH SKIP = SWSRC_TRN,
#else
SWSRC_LAST_SWITCH SKIP = SWSRC_FIRST_SWITCH + STORAGE_NUM_SWITCHES_POSITIONS - 1,
#endif
#if NUM_XPOTS > 0
SWSRC_FIRST_MULTIPOS_SWITCH SKIP,
@@ -756,15 +725,6 @@ enum MixSources {
MIXSRC_SP, LUA_EXPORT("sp", "Switch P")
MIXSRC_SQ, LUA_EXPORT("sq", "Switch Q")
MIXSRC_SR, LUA_EXPORT("sr", "Switch R")
#endif
#if defined(PCBSKY9X)
MIXSRC_3POS = MIXSRC_FIRST_SWITCH,
MIXSRC_THR,
MIXSRC_RUD,
MIXSRC_ELE,
MIXSRC_AIL,
MIXSRC_GEA,
MIXSRC_TRN,
#endif
MIXSRC_FIRST_LOGICAL_SWITCH SKIP,
MIXSRC_SW1 = MIXSRC_FIRST_LOGICAL_SWITCH, LUA_EXPORT_MULTIPLE("ls", "Logical switch L%d", MAX_LOGICAL_SWITCHES)
+2 -2
View File
@@ -24,8 +24,8 @@
#include "datastructs.h"
#include "libopenui/src/bitfield.h"
#define EEPROM_VER 219
#define FIRST_CONV_EEPROM_VER 216
#define EEPROM_VER 220
#define FIRST_CONV_EEPROM_VER 219
#define GET_MODULE_PPM_POLARITY(idx) g_model.moduleData[idx].ppm.pulsePol
#define GET_TRAINER_PPM_POLARITY() g_model.trainerData.pulsePol
+2 -29
View File
@@ -1,37 +1,10 @@
if(PCB STREQUAL X9D OR PCB STREQUAL X9D+ OR PCB STREQUAL SKY9X OR PCB STREQUAL AR9X)
set(STORAGE_CONVERSIONS 216)
endif()
if(PCB STREQUAL SKY9X OR PCB STREQUAL AR9X OR PCB STREQUAL 9XRPRO)
set(STORAGE_CONVERSIONS 216)
endif()
if(PCB STREQUAL X7 OR PCB STREQUAL XLITE OR PCB STREQUAL X9E)
set(STORAGE_CONVERSIONS 218)
endif()
if(PCB STREQUAL X12S OR PCB STREQUAL X10)
set(STORAGE_CONVERSIONS 218)
endif()
set(STORAGE_CONVERSIONS 219)
if(STORAGE_CONVERSIONS)
add_definitions(-DSTORAGE_CONVERSIONS=${STORAGE_CONVERSIONS})
set(SRC
${SRC}
storage/conversions/conversions.cpp
storage/conversions/conversions_219_220.cpp
)
endif()
if(STORAGE_CONVERSIONS LESS 218)
set(SRC
${SRC}
storage/conversions/conversions_216_218.cpp
)
endif()
if(STORAGE_CONVERSIONS LESS 219)
set(SRC
${SRC}
storage/conversions/conversions_218_219.cpp
)
endif()
@@ -0,0 +1,136 @@
/*
* Copyright (C) EdgeTX
*
* Based on code named
* opentx - https://github.com/opentx/opentx
* th9x - http://code.google.com/p/th9x
* er9x - http://code.google.com/p/er9x
* gruvin9x - http://code.google.com/p/gruvin9x
*
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include "opentx.h"
#include "datastructs_219.h"
#if defined(COLORLCD)
#include "theme.h"
#endif
//
// Summary of all changes between 219 & 220
//
// All Radios:
// ===========
//
// PACK(struct TimerData {
// - int32_t mode:9; // timer trigger source -> off, abs, stk, stk%, sw/!sw, !m_sw/!m_sw
// - uint32_t start:23;
// - int32_t value:24;
// + uint32_t start:22;
// + int32_t swtch:10;
// + int32_t value:22;
// + uint32_t mode:3; // timer mode (OFF, ON, Start, THs, TH%, THt)
// uint32_t countdownBeep:2;
// uint32_t minuteBeep:1;
// uint32_t persistent:2;
// int32_t countdownStart:2;
// - uint32_t direction:1;
// NOBACKUP(char name[LEN_TIMER_NAME]);
// });
//
//
// COLORLCD:
// =========
//
// - CHKSIZE(CustomScreenData, 610);
// - CHKSIZE(Topbar::PersistentData, 216);
// + CHKSIZE(CustomScreenData, 850);
// + CHKTYPE(TopBarPersistentData, 300);
//
// - CHKSIZE(RadioData, 881);
// - CHKSIZE(ModelData, 9736);
// + CHKSIZE(RadioData, 901);
// + CHKSIZE(ModelData, 11020);
//
// -> RadioData change probably comes from THEME_DATA (added parameter types)
// -> ModelData: +1284 (CustomScreenData x 5 = 1200; TopBar::PersistentData: +84)
//
typedef TimerData TimerData_v220;
void convertModelData_219_to_220(ModelData &model)
{
ModelData* oldModelAllocated = (ModelData*)malloc(sizeof(ModelData));
ModelData& oldModel = *oldModelAllocated;
memcpy(&oldModel, &model, sizeof(ModelData));
ModelData& newModel = (ModelData&)model;
for (uint8_t i=0; i<MAX_TIMERS_219; i++) {
//TODO: convert to new timers v220
//TimerData & timer = newModel.timers[i];
}
#if defined(PCBHORUS)
// Clear CustomScreenData + TopBarPersistentData
// as they cannot be converted (missing option types)
memset(newModel.screenData, 0,
sizeof(newModel.screenData) +
sizeof(newModel.topbarData));
//TODO: set defaults as with new model
#endif
//TODO: convert all names from zchar to "normal" chars
free(oldModelAllocated);
}
#if defined(PCBHORUS)
extern OpenTxTheme * defaultTheme;
#endif
void convertRadioData_219_to_220(RadioData & settings)
{
TRACE("Radio conversion from v219 to v220");
settings.version = 220;
settings.variant = EEPROM_VARIANT;
RadioData* oldSettingsAllocated = (RadioData*)malloc(sizeof(RadioData));
RadioData& oldSettings = *oldSettingsAllocated;
memcpy(&oldSettings, &settings, sizeof(RadioData));
#if defined(PCBHORUS)
// Clear CustomScreenData + TopBarPersistentData
// as they cannot be converted (missing option types)
strcpy(g_eeGeneral.themeName, defaultTheme->getName());
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
free(oldSettingsAllocated);
}
@@ -0,0 +1,155 @@
/*
* Copyright (C) OpenTX
*
* Based on code named
* th9x - http://code.google.com/p/th9x
* er9x - http://code.google.com/p/er9x
* gruvin9x - http://code.google.com/p/gruvin9x
*
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#pragma once
#define MAX_TIMERS_219 3
#define MAX_GVARS_219 9
#if defined(PCBHORUS)
#define NUM_SWITCHES_219 10
#elif defined(PCBXLITE) ||defined(PCBXLITES)
#define NUM_SWITCHES_219 6
#elif defined(RADIO_TLITE) || defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_T8)
#define NUM_SWITCHES_219 8
#elif defined(PCBX7) || defined(PCBX7ACCESS)
#define NUM_SWITCHES_219 8
#elif defined(PCBX9LITES)
#define NUM_SWITCHES_219 7
#elif defined(PCBX9LITE)
#define NUM_SWITCHES_219 5
#elif defined(PCBX9E)
#define NUM_SWITCHES_219 18
#elif defined(RADIO_X9DP2019) || defined(PCBX9D) || defined(PCBX9DP)
#define NUM_SWITCHES_219 9
#else
#error "Unsupported Conversion for Radio"
#endif
#if defined(PCBHORUS)
#define LEN_SWITCH_NAME_219 3
#define LEN_ANA_NAME_219 3
#define LEN_MODEL_FILENAME_219 16
#define LEN_BLUETOOTH_NAME_219 10
#else
#define LEN_SWITCH_NAME_219 3
#define LEN_ANA_NAME_219 3
#define LEN_BLUETOOTH_NAME_219 10
#endif
#define LEN_GVAR_NAME_219 3
#if defined(PCBHORUS)
#define LEN_MODEL_NAME_219 15
#define LEN_TIMER_NAME_219 8
#define LEN_FLIGHT_MODE_NAME_219 10
#define LEN_BITMAP_NAME_219 14
#define LEN_EXPOMIX_NAME_219 6
#define LEN_CHANNEL_NAME_219 6
#define LEN_INPUT_NAME_219 4
#define LEN_CURVE_NAME_219 3
#define LEN_FUNCTION_NAME_219 6
#define MAX_CURVES_219 32
#define MAX_CURVE_POINTS_219 512
#elif LCD_W == 212
#define LEN_MODEL_NAME_219 12
#define LEN_TIMER_NAME_219 8
#define LEN_FLIGHT_MODE_NAME_219 10
#define LEN_BITMAP_NAME_219 10
#define LEN_EXPOMIX_NAME_219 6
#define LEN_CHANNEL_NAME_219 6
#define LEN_INPUT_NAME_219 4
#define LEN_CURVE_NAME_219 3
#define LEN_FUNCTION_NAME_219 8
#define MAX_CURVES_219 32
#define MAX_CURVE_POINTS_219 512
#else
#define LEN_MODEL_NAME_219 10
#define LEN_TIMER_NAME_219 3
#define LEN_FLIGHT_MODE_NAME_219 6
#define LEN_EXPOMIX_NAME_219 6
#define LEN_CHANNEL_NAME_219 4
#define LEN_INPUT_NAME_219 3
#define LEN_CURVE_NAME_219 3
#define LEN_FUNCTION_NAME_219 6
#define MAX_CURVES_219 32
#define MAX_CURVE_POINTS_219 512
#endif
#if defined(PCBHORUS)
#define MAX_MODELS_219 60
#define MAX_OUTPUT_CHANNELS_219 32 // number of real output channels CH1-CH32
#define MAX_FLIGHT_MODES_219 9
#define MAX_MIXERS_219 64
#define MAX_EXPOS_219 64
#define MAX_LOGICAL_SWITCHES_219 64
#define MAX_SPECIAL_FUNCTIONS_219 64 // number of functions assigned to switches
#define MAX_SCRIPTS_219 9
#define MAX_INPUTS_219 32
#define MAX_TRAINER_CHANNELS_219 16
#define MAX_TELEMETRY_SENSORS_219 60
#define MAX_CUSTOM_SCREENS_219 5
#elif defined(PCBTARANIS)
#define MAX_MODELS_219 60
#define MAX_OUTPUT_CHANNELS_219 32 // number of real output channels CH1-CH32
#define MAX_FLIGHT_MODES_219 9
#define MAX_MIXERS_219 64
#define MAX_EXPOS_219 64
#define MAX_LOGICAL_SWITCHES_219 64
#define MAX_SPECIAL_FUNCTIONS_219 64 // number of functions assigned to switches
#define MAX_SCRIPTS_219 7
#define MAX_INPUTS_219 32
#define MAX_TRAINER_CHANNELS_219 16
#if defined(PCBX9D) || defined(PCBX9DP) || defined(PCBX9E)
#define MAX_TELEMETRY_SENSORS_219 60
#else
#define MAX_TELEMETRY_SENSORS_219 40
#endif
#endif
PACK(typedef struct {
int32_t mode:9; // timer trigger source -> off, abs, stk, stk%, sw/!sw, !m_sw/!m_sw
uint32_t start:23;
int32_t value:24;
uint32_t countdownBeep:2;
uint32_t minuteBeep:1;
uint32_t persistent:2;
int32_t countdownStart:2;
uint32_t direction:1;
char name[LEN_TIMER_NAME_219];
}) TimerData_v219;
// #include "chksize.h"
// #define CHKSIZE(x, y) check_size<struct x, y>()
// static inline void check_struct_219()
// {
// #if defined(PCBHORUS)
// CHKSIZE(ModelData_v219, 10664);
// #elif defined(PCBX9E)
// CHKSIZE(ModelData_v219, 6520);
// #elif defined(PCBX9D)
// CHKSIZE(RadioData_v219, 872);
// #endif
// }
// #undef CHKSIZE