Code factorisation in EEPROM conversions
This commit is contained in:
@@ -220,6 +220,19 @@ void ConvertGeneralSettings_215_to_216(EEGeneral &settings)
|
||||
}
|
||||
|
||||
#if defined(PCBTARANIS)
|
||||
int ConvertSource_215_to_216(int source, bool insertZero=false)
|
||||
{
|
||||
if (insertZero)
|
||||
source += 1;
|
||||
// Virtual Inputs and Lua Outputs added
|
||||
if (source > 0)
|
||||
source += MAX_INPUTS + MAX_SCRIPTS*MAX_SCRIPT_OUTPUTS;
|
||||
// 4 GVARS added
|
||||
if (source > MIXSRC_GVAR1+4)
|
||||
source += 4;
|
||||
return source;
|
||||
}
|
||||
|
||||
int ConvertSwitch_215_to_216(int swtch)
|
||||
{
|
||||
if (swtch <= SWSRC_LAST_SWITCH)
|
||||
@@ -228,7 +241,15 @@ int ConvertSwitch_215_to_216(int swtch)
|
||||
return swtch + (2*4) + (2*6); // 4 trims and 2 * 6-pos added as switches
|
||||
}
|
||||
#else
|
||||
inline int ConvertSwitch_215_to_216(int swtch)
|
||||
int ConvertSource_215_to_216(int source, bool removeZero=false)
|
||||
{
|
||||
// 4 GVARS added
|
||||
if (source > MIXSRC_GVAR1+4)
|
||||
source += 4;
|
||||
return source;
|
||||
}
|
||||
|
||||
int ConvertSwitch_215_to_216(int swtch)
|
||||
{
|
||||
if (swtch <= SWSRC_LAST_SWITCH)
|
||||
return swtch;
|
||||
@@ -277,43 +298,44 @@ void ConvertModel_215_to_216(ModelData &model)
|
||||
g_model.beepANACenter = oldModel.beepANACenter;
|
||||
|
||||
for (uint8_t i=0; i<64; i++) {
|
||||
MixData & mix = g_model.mixData[i];
|
||||
#if defined(PCBTARANIS)
|
||||
g_model.mixData[i].destCh = oldModel.mixData[i].destCh;
|
||||
g_model.mixData[i].phases = oldModel.mixData[i].phases;
|
||||
g_model.mixData[i].mltpx = oldModel.mixData[i].mltpx;
|
||||
g_model.mixData[i].weight = oldModel.mixData[i].weight;
|
||||
g_model.mixData[i].swtch = ConvertSwitch_215_to_216(oldModel.mixData[i].swtch);
|
||||
mix.destCh = oldModel.mixData[i].destCh;
|
||||
mix.phases = oldModel.mixData[i].phases;
|
||||
mix.mltpx = oldModel.mixData[i].mltpx;
|
||||
mix.weight = oldModel.mixData[i].weight;
|
||||
mix.swtch = ConvertSwitch_215_to_216(oldModel.mixData[i].swtch);
|
||||
if (oldModel.mixData[i].curveMode==0/*differential*/) {
|
||||
g_model.mixData[i].curve.type = CURVE_REF_DIFF;
|
||||
g_model.mixData[i].curve.value = oldModel.mixData[i].curveParam;
|
||||
mix.curve.type = CURVE_REF_DIFF;
|
||||
mix.curve.value = oldModel.mixData[i].curveParam;
|
||||
}
|
||||
else if (oldModel.mixData[i].curveParam <= 6) {
|
||||
g_model.mixData[i].curve.type = CURVE_REF_FUNC;
|
||||
g_model.mixData[i].curve.value = oldModel.mixData[i].curveParam;
|
||||
mix.curve.type = CURVE_REF_FUNC;
|
||||
mix.curve.value = oldModel.mixData[i].curveParam;
|
||||
}
|
||||
else {
|
||||
g_model.mixData[i].curve.type = CURVE_REF_CUSTOM;
|
||||
g_model.mixData[i].curve.value = oldModel.mixData[i].curveParam - 6;
|
||||
mix.curve.type = CURVE_REF_CUSTOM;
|
||||
mix.curve.value = oldModel.mixData[i].curveParam - 6;
|
||||
}
|
||||
g_model.mixData[i].mixWarn = oldModel.mixData[i].mixWarn;
|
||||
g_model.mixData[i].delayUp = oldModel.mixData[i].delayUp;
|
||||
g_model.mixData[i].delayDown = oldModel.mixData[i].delayDown;
|
||||
g_model.mixData[i].speedUp = oldModel.mixData[i].speedUp;
|
||||
g_model.mixData[i].speedDown = oldModel.mixData[i].speedDown;
|
||||
g_model.mixData[i].srcRaw = oldModel.mixData[i].srcRaw;
|
||||
if (g_model.mixData[i].srcRaw > 4 || oldModel.mixData[i].noExpo)
|
||||
g_model.mixData[i].srcRaw += MAX_INPUTS + MAX_SCRIPTS*MAX_SCRIPT_OUTPUTS;
|
||||
g_model.mixData[i].offset = oldModel.mixData[i].offset;
|
||||
memcpy(g_model.mixData[i].name, oldModel.mixData[i].name, LEN_EXPOMIX_NAME);
|
||||
mix.mixWarn = oldModel.mixData[i].mixWarn;
|
||||
mix.delayUp = oldModel.mixData[i].delayUp;
|
||||
mix.delayDown = oldModel.mixData[i].delayDown;
|
||||
mix.speedUp = oldModel.mixData[i].speedUp;
|
||||
mix.speedDown = oldModel.mixData[i].speedDown;
|
||||
mix.srcRaw = oldModel.mixData[i].srcRaw;
|
||||
if (mix.srcRaw > 4 || oldModel.mixData[i].noExpo)
|
||||
mix.srcRaw = ConvertSource_215_to_216(mix.srcRaw);
|
||||
mix.offset = oldModel.mixData[i].offset;
|
||||
memcpy(mix.name, oldModel.mixData[i].name, LEN_EXPOMIX_NAME);
|
||||
#else
|
||||
memcpy(&g_model.mixData[i], &oldModel.mixData[i], sizeof(g_model.mixData[i]));
|
||||
memcpy(&mix, &oldModel.mixData[i], sizeof(mix));
|
||||
#endif
|
||||
if (g_model.mixData[i].weight <= -508)
|
||||
g_model.mixData[i].weight = g_model.mixData[i].weight + 512 - 4096;
|
||||
else if (g_model.mixData[i].weight >= 507)
|
||||
g_model.mixData[i].weight = g_model.mixData[i].weight - 512 + 4096;
|
||||
if (mix.weight <= -508)
|
||||
mix.weight = mix.weight + 512 - 4096;
|
||||
else if (mix.weight >= 507)
|
||||
mix.weight = mix.weight - 512 + 4096;
|
||||
else
|
||||
g_model.mixData[i].offset = g_model.mixData[i].offset * g_model.mixData[i].weight / 100;
|
||||
mix.offset = mix.offset * mix.weight / 100;
|
||||
}
|
||||
for (uint8_t i=0; i<32; i++) {
|
||||
g_model.limitData[i].min = 10 * oldModel.limitData[i].min;
|
||||
@@ -414,57 +436,59 @@ void ConvertModel_215_to_216(ModelData &model)
|
||||
sw.andsw = oldModel.customSw[i].andsw;
|
||||
#if defined(PCBTARANIS)
|
||||
uint8_t cstate = cswFamily(sw.func);
|
||||
if (cstate == LS_FAMILY_OFS || cstate == LS_FAMILY_COMP || cstate == LS_FAMILY_DIFF) {
|
||||
if (sw.v1 > 0) sw.v1 += MAX_INPUTS + MAX_SCRIPTS*MAX_SCRIPT_OUTPUTS;
|
||||
if (sw.v1 > MIXSRC_GVAR1+4) sw.v1 += 4;
|
||||
if (cstate == LS_FAMILY_BOOL) {
|
||||
sw.v1 = ConvertSwitch_215_to_216(sw.v1);
|
||||
sw.v2 = ConvertSwitch_215_to_216(sw.v2);
|
||||
}
|
||||
if (cstate == LS_FAMILY_OFS || cstate == LS_FAMILY_DIFF) {
|
||||
if (sw.v1 >= MIXSRC_FIRST_TELEM) {
|
||||
switch ((uint8_t)sw.v1) {
|
||||
case MIXSRC_FIRST_TELEM + TELEM_TM1-1:
|
||||
case MIXSRC_FIRST_TELEM + TELEM_TM2-1:
|
||||
sw.v2 = (sw.v2+128) * 3;
|
||||
break;
|
||||
case MIXSRC_FIRST_TELEM + TELEM_ALT-1:
|
||||
case MIXSRC_FIRST_TELEM + TELEM_GPSALT-1:
|
||||
case MIXSRC_FIRST_TELEM + TELEM_MIN_ALT-1:
|
||||
case MIXSRC_FIRST_TELEM + TELEM_MAX_ALT-1:
|
||||
sw.v2 = (sw.v2+128) * 8 - 500;
|
||||
break;
|
||||
case MIXSRC_FIRST_TELEM + TELEM_RPM-1:
|
||||
case MIXSRC_FIRST_TELEM + TELEM_MAX_RPM-1:
|
||||
sw.v2 = (sw.v2+128) * 50;
|
||||
break;
|
||||
case MIXSRC_FIRST_TELEM + TELEM_T1-1:
|
||||
case MIXSRC_FIRST_TELEM + TELEM_T2-1:
|
||||
case MIXSRC_FIRST_TELEM + TELEM_MAX_T1-1:
|
||||
case MIXSRC_FIRST_TELEM + TELEM_MAX_T2-1:
|
||||
sw.v2 = (sw.v2+128) + 30;
|
||||
break;
|
||||
case MIXSRC_FIRST_TELEM + TELEM_CELL-1:
|
||||
case MIXSRC_FIRST_TELEM + TELEM_HDG-1:
|
||||
sw.v2 = (sw.v2+128) * 2;
|
||||
break;
|
||||
case MIXSRC_FIRST_TELEM + TELEM_DIST-1:
|
||||
case MIXSRC_FIRST_TELEM + TELEM_MAX_DIST-1:
|
||||
sw.v2 = (sw.v2+128) * 8;
|
||||
break;
|
||||
case MIXSRC_FIRST_TELEM + TELEM_CURRENT-1:
|
||||
case MIXSRC_FIRST_TELEM + TELEM_POWER-1:
|
||||
sw.v2 = (sw.v2+128) * 5;
|
||||
break;
|
||||
case MIXSRC_FIRST_TELEM + TELEM_CONSUMPTION-1:
|
||||
sw.v2 = (sw.v2+128) * 20;
|
||||
break;
|
||||
default:
|
||||
sw.v2 += 128;
|
||||
break;
|
||||
else if (cstate == LS_FAMILY_OFS || cstate == LS_FAMILY_COMP || cstate == LS_FAMILY_DIFF) {
|
||||
sw.v1 = ConvertSource_215_to_216(sw.v1);
|
||||
if (cstate == LS_FAMILY_OFS || cstate == LS_FAMILY_DIFF) {
|
||||
if (sw.v1 >= MIXSRC_FIRST_TELEM) {
|
||||
switch ((uint8_t)sw.v1) {
|
||||
case MIXSRC_FIRST_TELEM + TELEM_TM1-1:
|
||||
case MIXSRC_FIRST_TELEM + TELEM_TM2-1:
|
||||
sw.v2 = (sw.v2+128) * 3;
|
||||
break;
|
||||
case MIXSRC_FIRST_TELEM + TELEM_ALT-1:
|
||||
case MIXSRC_FIRST_TELEM + TELEM_GPSALT-1:
|
||||
case MIXSRC_FIRST_TELEM + TELEM_MIN_ALT-1:
|
||||
case MIXSRC_FIRST_TELEM + TELEM_MAX_ALT-1:
|
||||
sw.v2 = (sw.v2+128) * 8 - 500;
|
||||
break;
|
||||
case MIXSRC_FIRST_TELEM + TELEM_RPM-1:
|
||||
case MIXSRC_FIRST_TELEM + TELEM_MAX_RPM-1:
|
||||
sw.v2 = (sw.v2+128) * 50;
|
||||
break;
|
||||
case MIXSRC_FIRST_TELEM + TELEM_T1-1:
|
||||
case MIXSRC_FIRST_TELEM + TELEM_T2-1:
|
||||
case MIXSRC_FIRST_TELEM + TELEM_MAX_T1-1:
|
||||
case MIXSRC_FIRST_TELEM + TELEM_MAX_T2-1:
|
||||
sw.v2 = (sw.v2+128) + 30;
|
||||
break;
|
||||
case MIXSRC_FIRST_TELEM + TELEM_CELL-1:
|
||||
case MIXSRC_FIRST_TELEM + TELEM_HDG-1:
|
||||
sw.v2 = (sw.v2+128) * 2;
|
||||
break;
|
||||
case MIXSRC_FIRST_TELEM + TELEM_DIST-1:
|
||||
case MIXSRC_FIRST_TELEM + TELEM_MAX_DIST-1:
|
||||
sw.v2 = (sw.v2+128) * 8;
|
||||
break;
|
||||
case MIXSRC_FIRST_TELEM + TELEM_CURRENT-1:
|
||||
case MIXSRC_FIRST_TELEM + TELEM_POWER-1:
|
||||
sw.v2 = (sw.v2+128) * 5;
|
||||
break;
|
||||
case MIXSRC_FIRST_TELEM + TELEM_CONSUMPTION-1:
|
||||
sw.v2 = (sw.v2+128) * 20;
|
||||
break;
|
||||
default:
|
||||
sw.v2 += 128;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (cstate == LS_FAMILY_COMP) {
|
||||
if (sw.v2 > 0) sw.v2 += MAX_INPUTS + MAX_SCRIPTS*MAX_SCRIPT_OUTPUTS;
|
||||
if (sw.v2 > MIXSRC_GVAR1+4) sw.v2 += 4;
|
||||
if (cstate == LS_FAMILY_COMP) {
|
||||
sw.v2 = ConvertSource_215_to_216(sw.v2);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@@ -537,17 +561,13 @@ void ConvertModel_215_to_216(ModelData &model)
|
||||
}
|
||||
if (fn.func == FUNC_PLAY_VALUE || fn.func == FUNC_VOLUME || (IS_ADJUST_GV_FUNC(fn.func) && fn.all.mode == FUNC_ADJUST_GVAR_SOURCE)) {
|
||||
#if defined(PCBTARANIS)
|
||||
fn.all.param += 1 + MAX_INPUTS + MAX_SCRIPTS*MAX_SCRIPT_OUTPUTS;
|
||||
fn.all.param = ConvertSource_215_to_216(fn.all.param, true);
|
||||
#endif
|
||||
if (fn.all.param > MIXSRC_GVAR1+4) fn.all.param += 4;
|
||||
}
|
||||
}
|
||||
|
||||
g_model.swashR = oldModel.swashR;
|
||||
#if defined(PCBTARANIS)
|
||||
if (g_model.swashR.collectiveSource > 0) g_model.swashR.collectiveSource += MAX_INPUTS + MAX_SCRIPTS*MAX_SCRIPT_OUTPUTS;
|
||||
if (g_model.swashR.collectiveSource > MIXSRC_GVAR1+4) g_model.swashR.collectiveSource += 4;
|
||||
#endif
|
||||
g_model.swashR.collectiveSource = ConvertSource_215_to_216(g_model.swashR.collectiveSource);
|
||||
|
||||
for (uint8_t i=0; i<9; i++) {
|
||||
memcpy(&g_model.phaseData[i], &oldModel.phaseData[i], sizeof(oldModel.phaseData[i])); // the last 4 gvars will remain blank
|
||||
|
||||
Reference in New Issue
Block a user