Merge branch 'origin/next'

This commit is contained in:
Kjell Kernen
2014-02-11 04:38:03 +01:00
2 changed files with 119 additions and 98 deletions
+104 -84
View File
@@ -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;
@@ -260,7 +281,7 @@ void ConvertModel_215_to_216(ModelData &model)
memcpy(&g_model.header, &oldModel.header, sizeof(g_model.header));
for (uint8_t i=0; i<2; i++) {
g_model.timers[i].mode = oldModel.timers[i].mode;
g_model.timers[i].mode = oldModel.timers[i].mode > 4 ? ConvertSwitch_215_to_216(oldModel.timers[i].mode): oldModel.timers[i].mode;
g_model.timers[i].start = oldModel.timers[i].start;
g_model.timers[i].minuteBeep = oldModel.timers[i].minuteBeep;
g_model.timers[i].persistent = oldModel.timers[i].persistent;
@@ -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,63 +436,65 @@ 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
}
for (uint8_t i=0; i<32; i++) {
CustomFnData & fn = g_model.funcSw[i];
fn.swtch = oldModel.funcSw[i].swtch;
fn.swtch = ConvertSwitch_215_to_216(oldModel.funcSw[i].swtch);
fn.func = oldModel.funcSw[i].func;
if (fn.func <= 15) {
fn.all.param = fn.func;
@@ -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
+15 -14
View File
@@ -4543,10 +4543,11 @@ void menuModelLogicalSwitches(uint8_t event)
// CSW params
uint8_t cstate = cswFamily(cs->func);
#if defined(CPUARM)
int16_t v1_min=0, v1_max=MIXSRC_LAST_TELEM, v2_min=0, v2_max=MIXSRC_LAST_TELEM;
int16_t v1_unsigned=(uint8_t)cs->v1, v1_min=0, v1_max=MIXSRC_LAST_TELEM, v2_min=0, v2_max=MIXSRC_LAST_TELEM;
int16_t v3_min=0, v3_max=100;
#else
int8_t v1_min=0, v1_max=MIXSRC_LAST_TELEM, v2_min=0, v2_max=MIXSRC_LAST_TELEM;
uint8_t v1_unsigned = cs->v1;
#endif
if (cstate == LS_FAMILY_BOOL || cstate == LS_FAMILY_STICKY) {
@@ -4582,7 +4583,7 @@ void menuModelLogicalSwitches(uint8_t event)
}
#endif
else if (cstate == LS_FAMILY_COMP) {
putsMixerSource(CSW_2ND_COLUMN, y, cs->v1, attr1);
putsMixerSource(CSW_2ND_COLUMN, y, v1_unsigned, attr1);
putsMixerSource(CSW_3RD_COLUMN, y, cs->v2, attr2);
INCDEC_SET_FLAG(INCDEC_SOURCE);
INCDEC_ENABLE_CHECK(isSourceAvailable);
@@ -4596,7 +4597,7 @@ void menuModelLogicalSwitches(uint8_t event)
INCDEC_ENABLE_CHECK(NULL);
}
else {
putsMixerSource(CSW_2ND_COLUMN, y, cs->v1, attr1);
putsMixerSource(CSW_2ND_COLUMN, y, v1_unsigned, attr1);
if (horz == 1) {
INCDEC_SET_FLAG(INCDEC_SOURCE);
INCDEC_ENABLE_CHECK(isSourceAvailable);
@@ -4606,11 +4607,11 @@ void menuModelLogicalSwitches(uint8_t event)
INCDEC_ENABLE_CHECK(NULL);
}
#if defined(FRSKY)
if (cs->v1 >= MIXSRC_FIRST_TELEM) {
putsTelemetryChannel(CSW_3RD_COLUMN, y, cs->v1 - MIXSRC_FIRST_TELEM, convertCswTelemValue(cs), LEFT|attr2);
v2_max = maxTelemValue(cs->v1 - MIXSRC_FIRST_TELEM + 1);
if (v1_unsigned >= MIXSRC_FIRST_TELEM) {
putsTelemetryChannel(CSW_3RD_COLUMN, y, v1_unsigned - MIXSRC_FIRST_TELEM, convertCswTelemValue(cs), LEFT|attr2);
v2_max = maxTelemValue(v1_unsigned - MIXSRC_FIRST_TELEM + 1);
#if defined(CPUARM)
v2_min = minTelemValue(cs->v1 - MIXSRC_FIRST_TELEM + 1);
v2_min = minTelemValue(v1_unsigned - MIXSRC_FIRST_TELEM + 1);
if (cs->v2 < v2_min || cs->v2 > v2_max) {
cs->v2 = 0;
eeDirty(EE_MODEL);
@@ -4635,8 +4636,8 @@ void menuModelLogicalSwitches(uint8_t event)
v2_min = -125; v2_max = 125;
}
#else
if (cs->v1 >= MIXSRC_FIRST_TELEM) {
putsTelemetryChannel(CSW_3RD_COLUMN, y, cs->v1 - MIXSRC_FIRST_TELEM, convertCswTelemValue(cs), LEFT|attr2);
if (v1_unsigned >= MIXSRC_FIRST_TELEM) {
putsTelemetryChannel(CSW_3RD_COLUMN, y, v1_unsigned - MIXSRC_FIRST_TELEM, convertCswTelemValue(cs), LEFT|attr2);
v2_min = -128; v2_max = 127;
}
else {
@@ -4711,17 +4712,17 @@ void menuModelLogicalSwitches(uint8_t event)
break;
}
case LS_FIELD_V1:
cs->v1 = CHECK_INCDEC_PARAM(event, cs->v1, v1_min, v1_max);
cs->v1 = CHECK_INCDEC_PARAM(event, v1_unsigned, v1_min, v1_max);
break;
case LS_FIELD_V2:
cs->v2 = CHECK_INCDEC_PARAM(event, cs->v2, v2_min, v2_max);
#if defined(PCBTARANIS)
if (cstate==LS_FAMILY_OFS && cs->v1!=0 && event==EVT_KEY_LONG(KEY_ENTER)) {
if (cstate==LS_FAMILY_OFS && v1_unsigned!=0 && event==EVT_KEY_LONG(KEY_ENTER)) {
killEvents(event);
getvalue_t x = getValue(cs->v1);
if (cs->v1 < MIXSRC_GVAR1)
getvalue_t x = getValue(v1_unsigned);
if (v1_unsigned < MIXSRC_GVAR1)
cs->v2 = calcRESXto100(x);
else if (cs->v1 - MIXSRC_FIRST_TELEM + 1 == TELEM_ALT)
else if (v1_unsigned - MIXSRC_FIRST_TELEM + 1 == TELEM_ALT)
cs->v2 *= 100;
eeDirty(EE_MODEL);
}