From 59aa647c3d994d078714810acc5841c166d7f339 Mon Sep 17 00:00:00 2001 From: bsongis Date: Fri, 28 Mar 2014 17:26:37 +0100 Subject: [PATCH] ModelData size on Sky9x was too big --- companion/src/eeprominterface.h | 1 - .../src/firmwares/opentx/opentxeeprom.cpp | 34 +++++++++++++++++-- radio/src/eeprom_raw.cpp | 7 ++-- radio/src/myeeprom.h | 19 +++++------ 4 files changed, 45 insertions(+), 16 deletions(-) diff --git a/companion/src/eeprominterface.h b/companion/src/eeprominterface.h index d1cabb2c6..d63423310 100644 --- a/companion/src/eeprominterface.h +++ b/companion/src/eeprominterface.h @@ -593,7 +593,6 @@ class MixData { MixData() { clear(); } unsigned int destCh; // 1..C9X_NUM_CHNOUT RawSource srcRaw; - unsigned int srcVariant; int weight; RawSwitch swtch; CurveReference curve; //0=symmetrisch diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index b27ea1e06..1091b65a2 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -788,7 +788,7 @@ class MixField: public TransformedField { internalField.Append(new SwitchField<8>(mix.swtch, board, version)); internalField.Append(new CurveReferenceField(mix.curve, board, version)); internalField.Append(new UnsignedField<4>(mix.mixWarn)); - internalField.Append(new UnsignedField<4>(mix.srcVariant)); + internalField.Append(new SpareBitsField<4>()); internalField.Append(new UnsignedField<8>(mix.delayUp)); internalField.Append(new UnsignedField<8>(mix.delayDown)); internalField.Append(new UnsignedField<8>(mix.speedUp)); @@ -798,6 +798,26 @@ class MixField: public TransformedField { internalField.Append(new ZCharField<8>(mix.name)); internalField.Append(new SpareBitsField<8>()); } + else if (IS_ARM(board) && version >= 216) { + internalField.Append(new UnsignedField<4>(_destCh)); + internalField.Append(new UnsignedField<4>(mix.mixWarn)); + internalField.Append(new UnsignedField<16>(mix.phases)); + internalField.Append(new BoolField<1>(_curveMode)); + internalField.Append(new BoolField<1>(mix.noExpo)); + internalField.Append(new SignedField<3>(mix.carryTrim)); + internalField.Append(new UnsignedField<2>((unsigned int &)mix.mltpx)); + internalField.Append(new SpareBitsField<1>()); + internalField.Append(new SignedField<16>(_weight)); + internalField.Append(new SwitchField<8>(mix.swtch, board, version)); + internalField.Append(new SignedField<8>(_curveParam)); + internalField.Append(new UnsignedField<8>(mix.delayUp)); + internalField.Append(new UnsignedField<8>(mix.delayDown)); + internalField.Append(new UnsignedField<8>(mix.speedUp)); + internalField.Append(new UnsignedField<8>(mix.speedDown)); + internalField.Append(new SourceField<8>(mix.srcRaw, board, version, FLAG_NOTELEMETRY)); + internalField.Append(new SignedField<16>(_offset)); + internalField.Append(new ZCharField<6>(mix.name)); + } else if (IS_ARM(board)) { internalField.Append(new UnsignedField<8>(_destCh)); internalField.Append(new UnsignedField<16>(mix.phases)); @@ -814,7 +834,7 @@ class MixField: public TransformedField { internalField.Append(new SignedField<8>(_curveParam)); if (version >= 214) { internalField.Append(new UnsignedField<4>(mix.mixWarn)); - internalField.Append(new UnsignedField<4>(mix.srcVariant)); + internalField.Append(new SpareBitsField<4>()); } else { internalField.Append(new UnsignedField<8>(mix.mixWarn)); @@ -996,6 +1016,16 @@ class InputField: public TransformedField { internalField.Append(new CurveReferenceField(expo.curve, board, version)); internalField.Append(new SpareBitsField<8>()); } + else if (IS_ARM(board) && version >= 216) { + internalField.Append(new UnsignedField<2>(expo.mode, "Mode")); + internalField.Append(new UnsignedField<4>(expo.chn, "Channel")); + internalField.Append(new BoolField<2>(_curveMode)); + internalField.Append(new SwitchField<8>(expo.swtch, board, version)); + internalField.Append(new UnsignedField<16>(expo.phases, "Phases")); + internalField.Append(new SignedField<8>(_weight, "Weight")); + internalField.Append(new ZCharField<6>(expo.name)); + internalField.Append(new SignedField<8>(_curveParam)); + } else if (IS_ARM(board)) { internalField.Append(new UnsignedField<8>(expo.mode, "Mode")); internalField.Append(new UnsignedField<8>(expo.chn, "Channel")); diff --git a/radio/src/eeprom_raw.cpp b/radio/src/eeprom_raw.cpp index 095c18fc4..be60bef20 100644 --- a/radio/src/eeprom_raw.cpp +++ b/radio/src/eeprom_raw.cpp @@ -359,9 +359,10 @@ void eeLoadModel(uint8_t id) memset(&g_model, 0, sizeof(g_model)); #if defined(SIMU) - if (size > 0 && size != sizeof(g_model)) { - printf("Model data read=%d bytes vs %d bytes\n", size, (int)sizeof(ModelData)); - } + if (sizeof(struct t_eeprom_header) + sizeof(g_model) > 4096) + TRACE("Model data size can't exceed %d bytes (%d bytes)", int(4096-sizeof(struct t_eeprom_header)), (int)sizeof(g_model)); + else if (size > 0 && size != sizeof(g_model)) + TRACE("Model data read=%d bytes vs %d bytes\n", size, (int)sizeof(ModelData)); #endif if (size > sizeof(g_model)) { diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index afe5e0bb0..7eba2afc4 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -457,13 +457,13 @@ PACK(typedef struct t_ExpoData { #define EXPO_VALID(ed) ((ed)->mode) #define EXPO_MODE_ENABLE(ed, v) (((v)<0 && ((ed)->mode&1)) || ((v)>=0 && ((ed)->mode&2))) #elif defined(CPUARM) -PACK(typedef struct t_ExpoData { - uint8_t mode; // 0=end, 1=pos, 2=neg, 3=both - uint8_t chn; +PACK(typedef struct { + uint8_t mode:2; // 0=end, 1=pos, 2=neg, 3=both + uint8_t chn:4; + uint8_t curveMode:2; int8_t swtch; uint16_t phases; int8_t weight; - uint8_t curveMode; char name[LEN_EXPOMIX_NAME]; int8_t curveParam; }) ExpoData; @@ -560,7 +560,7 @@ PACK(typedef struct t_MixData { int8_t swtch; CurveRef curve; uint8_t mixWarn:4; // mixer warning - uint8_t srcVariant:4; + uint8_t spare2:4; uint8_t delayUp; uint8_t delayDown; uint8_t speedUp; @@ -568,11 +568,12 @@ PACK(typedef struct t_MixData { uint8_t srcRaw; int16_t offset; char name[LEN_EXPOMIX_NAME]; - uint8_t spare2; + uint8_t spare3; }) MixData; #else -PACK(typedef struct t_MixData { - uint8_t destCh; +PACK(typedef struct { + uint8_t destCh:4; + uint8_t mixWarn:4; // mixer warning uint16_t phases; uint8_t curveMode:1; uint8_t noExpo:1; @@ -582,8 +583,6 @@ PACK(typedef struct t_MixData { int16_t weight; int8_t swtch; int8_t curveParam; - uint8_t mixWarn:4; // mixer warning - uint8_t srcVariant:4; uint8_t delayUp; uint8_t delayDown; uint8_t speedUp;