From a04cdb32da38f4ff9a16543d963bd0ae97a5136c Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 16 Apr 2019 23:34:13 +0200 Subject: [PATCH] Conversion fixes --- radio/src/dataconstants.h | 14 +++- radio/src/datastructs.h | 6 +- radio/src/storage/conversions/CMakeLists.txt | 2 +- .../conversions/conversions_216_218.cpp | 4 +- .../conversions/conversions_218_219.cpp | 2 +- .../src/storage/conversions/datastructs_218.h | 75 +++++++++++-------- 6 files changed, 62 insertions(+), 41 deletions(-) diff --git a/radio/src/dataconstants.h b/radio/src/dataconstants.h index 1f137f1fe..a9799200b 100644 --- a/radio/src/dataconstants.h +++ b/radio/src/dataconstants.h @@ -46,8 +46,20 @@ #define MAX_SCRIPTS 9 #define MAX_INPUTS 32 #define MAX_TRAINER_CHANNELS 16 - #define MAX_TELEMETRY_SENSORS 64 + #define MAX_TELEMETRY_SENSORS 60 #define MAX_CUSTOM_SCREENS 5 +#elif defined(PCBX9) + #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 64 + #define MAX_LOGICAL_SWITCHES 64 + #define MAX_SPECIAL_FUNCTIONS 64 // number of functions assigned to switches + #define MAX_SCRIPTS 7 + #define MAX_INPUTS 32 + #define MAX_TRAINER_CHANNELS 16 + #define MAX_TELEMETRY_SENSORS 60 #elif defined(PCBTARANIS) #define MAX_MODELS 60 #define MAX_OUTPUT_CHANNELS 32 // number of real output channels CH1-CH32 diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h index e0abf2026..03edb89a4 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -915,16 +915,16 @@ static inline void check_struct() CHKSIZE(ModelData, 6117); #elif defined(PCBX9E) CHKSIZE(RadioData, 960); - CHKSIZE(ModelData, 6550); + CHKSIZE(ModelData, 6554); #elif defined(PCBX9D) || defined(PCBX9DP) CHKSIZE(RadioData, 880); - CHKSIZE(ModelData, 6281); + CHKSIZE(ModelData, 6541); #elif defined(PCBSKY9X) CHKSIZE(RadioData, 735); CHKSIZE(ModelData, 5279); #elif defined(PCBHORUS) CHKSIZE(RadioData, 855); - CHKSIZE(ModelData, 9726); + CHKSIZE(ModelData, 9674); #endif #undef CHKSIZE diff --git a/radio/src/storage/conversions/CMakeLists.txt b/radio/src/storage/conversions/CMakeLists.txt index 8dc28553b..eb2df96ee 100644 --- a/radio/src/storage/conversions/CMakeLists.txt +++ b/radio/src/storage/conversions/CMakeLists.txt @@ -6,7 +6,7 @@ if(PCB STREQUAL SKY9X OR PCB STREQUAL AR9X OR PCB STREQUAL 9XRPRO) set(EEPROM_CONVERSIONS 216) endif() -if(PCB STREQUAL X7 OR PCB STREQUAL XLITE) +if(PCB STREQUAL X7 OR PCB STREQUAL XLITE OR PCB STREQUAL X9E) set(EEPROM_CONVERSIONS 218) endif() diff --git a/radio/src/storage/conversions/conversions_216_218.cpp b/radio/src/storage/conversions/conversions_216_218.cpp index e21c57685..bb9363426 100644 --- a/radio/src/storage/conversions/conversions_216_218.cpp +++ b/radio/src/storage/conversions/conversions_216_218.cpp @@ -901,7 +901,7 @@ void convertModelData_216_to_217(ModelData &model) // PPM center range // Telemetry custom screens - assert(sizeof(ModelData_v216) <= sizeof(ModelData)); + static_assert(sizeof(ModelData_v216) <= sizeof(ModelData)); ModelData_v216 oldModel; memcpy(&oldModel, &model, sizeof(oldModel)); @@ -1076,7 +1076,7 @@ void convertModelData_216_to_217(ModelData &model) void convertModelData_217_to_218(ModelData &model) { - assert(sizeof(ModelData_v217) <= sizeof(ModelData)); + static_assert(sizeof(ModelData_v217) <= sizeof(ModelData)); ModelData_v217 oldModel; memcpy(&oldModel, &model, sizeof(oldModel)); diff --git a/radio/src/storage/conversions/conversions_218_219.cpp b/radio/src/storage/conversions/conversions_218_219.cpp index 4052e2df1..6fb9c2fa4 100644 --- a/radio/src/storage/conversions/conversions_218_219.cpp +++ b/radio/src/storage/conversions/conversions_218_219.cpp @@ -34,7 +34,7 @@ typedef ModelData ModelData_v219; void convertModelData_218_to_219(ModelData &model) { - assert(sizeof(ModelData_v218) <= sizeof(ModelData)); + static_assert(sizeof(ModelData_v218) <= sizeof(ModelData)); ModelData_v218 oldModel; memcpy(&oldModel, &model, sizeof(oldModel)); diff --git a/radio/src/storage/conversions/datastructs_218.h b/radio/src/storage/conversions/datastructs_218.h index c19e3d51e..4807f365a 100644 --- a/radio/src/storage/conversions/datastructs_218.h +++ b/radio/src/storage/conversions/datastructs_218.h @@ -80,7 +80,7 @@ #define LEN_FUNCTION_NAME_218 8 #define MAX_CURVES_218 32 #define MAX_CURVE_POINTS_218 512 -#elif defined(CPUARM) +#else #define LEN_MODEL_NAME_218 10 #define LEN_TIMER_NAME_218 3 #define LEN_FLIGHT_MODE_NAME_218 6 @@ -91,11 +91,6 @@ #define LEN_FUNCTION_NAME_218 6 #define MAX_CURVES_218 16 #define MAX_CURVE_POINTS_218 512 -#else - #define LEN_MODEL_NAME_218 10 - #define LEN_FLIGHT_MODE_NAME_218 6 - #define MAX_CURVES_218 8 - #define MAX_CURVE_POINTS_218 (112-MAX_CURVES_218) #endif #if defined(PCBHORUS) @@ -261,26 +256,32 @@ PACK(typedef struct { // Logical Switches data uint8_t duration; }) LogicalSwitchData_v218; +#if defined(PCBTARANIS) +#define CFN_SPARE_TYPE int32_t +#else +#define CFN_SPARE_TYPE int16_t +#endif + PACK(typedef struct { int16_t swtch:9; uint16_t func:7; PACK(union { - PACK(struct { - char name[8]; - }) play; + PACK(struct { + char name[LEN_FUNCTION_NAME_218]; + }) play; - PACK(struct { - int16_t val; - uint8_t mode; - uint8_t param; - int32_t spare2; - }) all; + PACK(struct { + int16_t val; + uint8_t mode; + uint8_t param; + CFN_SPARE_TYPE spare2; + }) all; - PACK(struct { - int32_t val1; - int32_t val2; - }) clear; - }); + PACK(struct { + int32_t val1; + CFN_SPARE_TYPE val2; + }) clear; + }); uint8_t active; }) CustomFunctionData_v218; @@ -305,10 +306,10 @@ PACK(struct FrSkyTelemetryData_v217 { }); #else union FrSkyScreenData { - FrSkyBarData bars[4]; - FrSkyLineData lines[4]; + FrSkyBarData bars[4]; + FrSkyLineData lines[4]; #if defined(PCBTARANIS) - TelemetryScriptData script; + TelemetryScriptData script; #endif }; PACK(struct FrSkyTelemetryData_v217 { @@ -326,13 +327,13 @@ PACK(struct FrSkyTelemetryData_v217 { #endif #if defined(PCBX12S) -#define MODELDATA_EXTRA_218 uint8_t spare:3;uint8_t trainerMode:3;uint8_t potsWarnMode:2; ModuleData_v218 moduleData[NUM_MODULES+1];ScriptData scriptsData[MAX_SCRIPTS_218];char inputNames[MAX_INPUTS_218][LEN_INPUT_NAME_218];;uint8_t potsWarnEnabled;;int8_t potsWarnPosition[NUM_POTS+NUM_SLIDERS];; + #define MODELDATA_EXTRA_218 uint8_t spare:3;uint8_t trainerMode:3;uint8_t potsWarnMode:2; ModuleData_v218 moduleData[NUM_MODULES+1];ScriptData scriptsData[MAX_SCRIPTS_218];char inputNames[MAX_INPUTS_218][LEN_INPUT_NAME_218];;uint8_t potsWarnEnabled;;int8_t potsWarnPosition[NUM_POTS+NUM_SLIDERS];; #elif defined(PCBX10) -#define MODELDATA_EXTRA_218 uint8_t spare:3;;uint8_t trainerMode:3;;uint8_t potsWarnMode:2;; ModuleData_v218 moduleData[NUM_MODULES+1];ScriptData scriptsData[MAX_SCRIPTS_218];;char inputNames[MAX_INPUTS_218][LEN_INPUT_NAME_218];;uint8_t potsWarnEnabled;;int8_t potsWarnPosition[NUM_POTS+NUM_SLIDERS];;uint8_t potsWarnSpares[NUM_DUMMY_ANAS];; + #define MODELDATA_EXTRA_218 uint8_t spare:3;;uint8_t trainerMode:3;;uint8_t potsWarnMode:2;; ModuleData_v218 moduleData[NUM_MODULES+1];ScriptData scriptsData[MAX_SCRIPTS_218];;char inputNames[MAX_INPUTS_218][LEN_INPUT_NAME_218];;uint8_t potsWarnEnabled;;int8_t potsWarnPosition[NUM_POTS+NUM_SLIDERS];;uint8_t potsWarnSpares[NUM_DUMMY_ANAS];; #elif defined(PCBTARANIS) -#define MODELDATA_EXTRA_218 uint8_t spare:3; uint8_t trainerMode:3; uint8_t potsWarnMode:2; ModuleData_v218 moduleData[NUM_MODULES+1]; ScriptData scriptsData[MAX_SCRIPTS_218]; char inputNames[MAX_INPUTS_218][LEN_INPUT_NAME_218]; uint8_t potsWarnEnabled; int8_t potsWarnPosition[NUM_POTS+NUM_SLIDERS]; + #define MODELDATA_EXTRA_218 uint8_t spare:3; uint8_t trainerMode:3; uint8_t potsWarnMode:2; ModuleData_v218 moduleData[NUM_MODULES+1]; ScriptData scriptsData[MAX_SCRIPTS_218]; char inputNames[MAX_INPUTS_218][LEN_INPUT_NAME_218]; uint8_t potsWarnEnabled; int8_t potsWarnPosition[NUM_POTS+NUM_SLIDERS]; #elif defined(PCBSKY9X) -#define MODELDATA_EXTRA_218 uint8_t spare:6; uint8_t potsWarnMode:2; ModuleData_v218 moduleData[NUM_MODULES+1]; char inputNames[MAX_INPUTS_218][LEN_INPUT_NAME_218]; uint8_t potsWarnEnabled; int8_t potsWarnPosition[NUM_POTS+NUM_SLIDERS]; uint8_t rxBattAlarms[2]; + #define MODELDATA_EXTRA_218 uint8_t spare:6; uint8_t potsWarnMode:2; ModuleData_v218 moduleData[NUM_MODULES+1]; char inputNames[MAX_INPUTS_218][LEN_INPUT_NAME_218]; uint8_t potsWarnEnabled; int8_t potsWarnPosition[NUM_POTS+NUM_SLIDERS]; uint8_t rxBattAlarms[2]; #else #define MODELDATA_EXTRA_218 #endif @@ -382,11 +383,23 @@ PACK(typedef struct { #if defined(PCBHORUS) // TODO conversion for custom screens? -#else +#elif defined(PCBTARANIS) uint8_t view; #endif }) ModelData_v218; +#if defined(PCBHORUS) +static_assert(sizeof(ModelData_v218) == 9380); +#elif defined(PCBX9E) +static_assert(sizeof(ModelData_v218) == 6520); +#elif defined(PCBX9D) +static_assert(sizeof(ModelData_v218) == 6507); +#elif defined(PCBXLITE) || defined(PCBX7) +static_assert(sizeof(ModelData_v218) == 6025); +#elif defined(PCBSKY9X) +static_assert(sizeof(ModelData_v218) == 5188); +#endif + #define EXTRA_GENERAL_FIELDS_GENERAL_218 \ uint8_t backlightBright; \ uint32_t globalTimer; \ @@ -453,12 +466,8 @@ PACK(typedef struct { uint8_t rotarySteps; \ char switchNames[NUM_SWITCHES_218][LEN_SWITCH_NAME_218]; \ char anaNames[NUM_STICKS+NUM_POTS+NUM_SLIDERS][LEN_ANA_NAME_218]; -#elif defined(CPUARM) - #define EXTRA_GENERAL_FIELDS_218 EXTRA_GENERAL_FIELDS_GENERAL_218 -#elif defined(PXX) - #define EXTRA_GENERAL_FIELDS_218 uint8_t countryCode; #else - #define EXTRA_GENERAL_FIELDS_218 + #define EXTRA_GENERAL_FIELDS_218 EXTRA_GENERAL_FIELDS_GENERAL_218 #endif #if defined(PCBHORUS)