From 0ac40ab41fbdb1d3865f2488b3b1e89eda6fe539 Mon Sep 17 00:00:00 2001 From: bsongis Date: Mon, 15 Sep 2014 10:57:54 +0200 Subject: [PATCH] Automatic Model conversion problem on ARM boards (v216 to v217) --- radio/src/eeprom_conversions.cpp | 44 ++++++++++++++++++++++++++++++-- radio/src/myeeprom.h | 3 ++- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/radio/src/eeprom_conversions.cpp b/radio/src/eeprom_conversions.cpp index d9b859765..8a4a778a6 100644 --- a/radio/src/eeprom_conversions.cpp +++ b/radio/src/eeprom_conversions.cpp @@ -186,6 +186,26 @@ PACK(typedef struct { char name[LEN_EXPOMIX_NAME]; uint8_t spare2[2]; }) MixData_v215; +PACK(typedef struct { + uint8_t destCh; + uint16_t flightModes; + uint8_t mltpx:2; // multiplex method: 0 means +=, 1 means *=, 2 means := + uint8_t carryTrim:1; + uint8_t spare1:5; + int16_t weight; + int8_t swtch; + CurveRef curve; + uint8_t mixWarn:4; // mixer warning + uint8_t spare2:4; + uint8_t delayUp; + uint8_t delayDown; + uint8_t speedUp; + uint8_t speedDown; + uint8_t srcRaw; + int16_t offset; + char name[LEN_EXPOMIX_NAME]; + uint8_t spare3; +}) MixData_v216; #else PACK(typedef struct { uint8_t destCh; @@ -208,6 +228,26 @@ PACK(typedef struct { int16_t offset; char name[LEN_EXPOMIX_NAME]; }) MixData_v215; +PACK(typedef struct { + uint8_t destCh:5; + uint8_t mixWarn:3; // mixer warning + uint16_t flightModes; + uint8_t curveMode:1; + uint8_t noExpo:1; + int8_t carryTrim:3; + uint8_t mltpx:2; // multiplex method: 0 means +=, 1 means *=, 2 means := + uint8_t spare:1; + int16_t weight; + int8_t swtch; + int8_t curveParam; + uint8_t delayUp; + uint8_t delayDown; + uint8_t speedUp; + uint8_t speedDown; + uint8_t srcRaw; + int16_t offset; + char name[LEN_EXPOMIX_NAME]; +}) MixData_v216; #endif PACK(typedef struct { @@ -353,7 +393,7 @@ PACK(typedef struct { uint8_t throttleReversed:1; AVR_FIELD(int8_t ppmDelay) BeepANACenter beepANACenter; // 1<<0->A1.. 1<<6->A7 - MixData mixData[MAX_MIXERS]; + MixData_v216 mixData[MAX_MIXERS]; LimitData_v216 limitData[NUM_CHNOUT]; ExpoData expoData[MAX_EXPOS]; @@ -675,7 +715,7 @@ void ConvertModel_215_to_216(ModelData &model) #endif for (uint8_t i=0; i<64; i++) { - MixData * mix = &newModel.mixData[i]; + MixData_v216 * mix = &newModel.mixData[i]; MixData_v215 * oldMix = &oldModel.mixData[i]; #if defined(PCBTARANIS) mix->destCh = oldMix->destCh; diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index 3a40f014b..44765e119 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -1781,7 +1781,7 @@ enum TelemetryProtocol PROTOCOL_FRSKY_D_SECONDARY }; -PACK(typedef struct t_ModelData { +PACK(typedef struct { ModelHeader header; TimerData timers[MAX_TIMERS]; AVR_FIELD(uint8_t protocol:3) @@ -1822,6 +1822,7 @@ PACK(typedef struct t_ModelData { MODELDATA_EXTRA + ARM_FIELD(uint8_t spare3[188]) // TODO dirty hack for eeprom conversions (we load the model inside the g_model structure) }) ModelData; extern EEGeneral g_eeGeneral;