mirror of
https://github.com/opentx/opentx.git
synced 2025-07-23 00:05:17 +03:00
Switches configuration + Switches/Pots/Sliders/Sticks custom names
This commit is contained in:
parent
59d72f93ce
commit
06437b2954
14 changed files with 660 additions and 144 deletions
|
@ -36,6 +36,110 @@
|
||||||
|
|
||||||
#include "opentx.h"
|
#include "opentx.h"
|
||||||
|
|
||||||
|
enum Mix216Sources {
|
||||||
|
MIXSRC216_NONE,
|
||||||
|
|
||||||
|
#if defined(PCBTARANIS)
|
||||||
|
MIXSRC216_FIRST_INPUT,
|
||||||
|
MIXSRC216_LAST_INPUT = MIXSRC216_FIRST_INPUT+MAX_INPUTS-1,
|
||||||
|
|
||||||
|
MIXSRC216_FIRST_LUA,
|
||||||
|
MIXSRC216_LAST_LUA = MIXSRC216_FIRST_LUA+(MAX_SCRIPTS*MAX_SCRIPT_OUTPUTS)-1,
|
||||||
|
#endif
|
||||||
|
|
||||||
|
MIXSRC216_Rud,
|
||||||
|
MIXSRC216_Ele,
|
||||||
|
MIXSRC216_Thr,
|
||||||
|
MIXSRC216_Ail,
|
||||||
|
|
||||||
|
MIXSRC216_FIRST_POT,
|
||||||
|
#if defined(PCBTARANIS)
|
||||||
|
MIXSRC216_POT1 = MIXSRC216_FIRST_POT,
|
||||||
|
MIXSRC216_POT2,
|
||||||
|
MIXSRC216_POT3,
|
||||||
|
MIXSRC216_SLIDER1,
|
||||||
|
MIXSRC216_SLIDER2,
|
||||||
|
MIXSRC216_LAST_POT = MIXSRC216_SLIDER2,
|
||||||
|
#else
|
||||||
|
MIXSRC216_P1 = MIXSRC216_FIRST_POT,
|
||||||
|
MIXSRC216_P2,
|
||||||
|
MIXSRC216_P3,
|
||||||
|
MIXSRC216_LAST_POT = MIXSRC216_P3,
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PCBSKY9X)
|
||||||
|
MIXSRC216_REa,
|
||||||
|
MIXSRC216_LAST_ROTARY_ENCODER = MIXSRC216_REa,
|
||||||
|
#endif
|
||||||
|
|
||||||
|
MIXSRC216_MAX,
|
||||||
|
|
||||||
|
MIXSRC216_CYC1,
|
||||||
|
MIXSRC216_CYC2,
|
||||||
|
MIXSRC216_CYC3,
|
||||||
|
|
||||||
|
MIXSRC216_TrimRud,
|
||||||
|
MIXSRC216_TrimEle,
|
||||||
|
MIXSRC216_TrimThr,
|
||||||
|
MIXSRC216_TrimAil,
|
||||||
|
|
||||||
|
MIXSRC216_FIRST_SWITCH,
|
||||||
|
|
||||||
|
#if defined(PCBTARANIS)
|
||||||
|
MIXSRC216_SA = MIXSRC216_FIRST_SWITCH,
|
||||||
|
MIXSRC216_SB,
|
||||||
|
MIXSRC216_SC,
|
||||||
|
MIXSRC216_SD,
|
||||||
|
MIXSRC216_SE,
|
||||||
|
MIXSRC216_SF,
|
||||||
|
MIXSRC216_SG,
|
||||||
|
MIXSRC216_SH,
|
||||||
|
#else
|
||||||
|
MIXSRC216_3POS = MIXSRC216_FIRST_SWITCH,
|
||||||
|
MIXSRC216_THR,
|
||||||
|
MIXSRC216_RUD,
|
||||||
|
MIXSRC216_ELE,
|
||||||
|
MIXSRC216_AIL,
|
||||||
|
MIXSRC216_GEA,
|
||||||
|
MIXSRC216_TRN,
|
||||||
|
#endif
|
||||||
|
MIXSRC216_FIRST_LOGICAL_SWITCH,
|
||||||
|
MIXSRC216_SW1 = MIXSRC216_FIRST_LOGICAL_SWITCH,
|
||||||
|
MIXSRC216_SW9 = MIXSRC216_SW1 + 8,
|
||||||
|
MIXSRC216_SWA,
|
||||||
|
MIXSRC216_SWB,
|
||||||
|
MIXSRC216_SWC,
|
||||||
|
MIXSRC216_LAST_LOGICAL_SWITCH = MIXSRC216_FIRST_LOGICAL_SWITCH+NUM_LOGICAL_SWITCH-1,
|
||||||
|
|
||||||
|
MIXSRC216_FIRST_TRAINER,
|
||||||
|
MIXSRC216_LAST_TRAINER = MIXSRC216_FIRST_TRAINER+NUM_TRAINER-1,
|
||||||
|
|
||||||
|
MIXSRC216_FIRST_CH,
|
||||||
|
MIXSRC216_CH1 = MIXSRC216_FIRST_CH,
|
||||||
|
MIXSRC216_CH2,
|
||||||
|
MIXSRC216_CH3,
|
||||||
|
MIXSRC216_CH4,
|
||||||
|
MIXSRC216_CH5,
|
||||||
|
MIXSRC216_CH6,
|
||||||
|
MIXSRC216_CH7,
|
||||||
|
MIXSRC216_CH8,
|
||||||
|
MIXSRC216_CH9,
|
||||||
|
MIXSRC216_CH10,
|
||||||
|
MIXSRC216_CH11,
|
||||||
|
MIXSRC216_CH12,
|
||||||
|
MIXSRC216_CH13,
|
||||||
|
MIXSRC216_CH14,
|
||||||
|
MIXSRC216_CH15,
|
||||||
|
MIXSRC216_CH16,
|
||||||
|
MIXSRC216_LAST_CH = MIXSRC216_CH1+NUM_CHNOUT-1,
|
||||||
|
|
||||||
|
MIXSRC216_GVAR1,
|
||||||
|
MIXSRC216_LAST_GVAR = MIXSRC216_GVAR1+MAX_GVARS-1,
|
||||||
|
|
||||||
|
MIXSRC216_FIRST_TELEM,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
enum Telemetry216Source {
|
enum Telemetry216Source {
|
||||||
TELEM216_NONE,
|
TELEM216_NONE,
|
||||||
TELEM216_TX_VOLTAGE,
|
TELEM216_TX_VOLTAGE,
|
||||||
|
@ -441,7 +545,7 @@ PACK(typedef struct {
|
||||||
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5ms increments
|
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5ms increments
|
||||||
uint8_t thrTraceSrc;
|
uint8_t thrTraceSrc;
|
||||||
|
|
||||||
swstate_t switchWarningStates;
|
swarnstate_t switchWarningState;
|
||||||
|
|
||||||
char gvar_names[5][LEN_GVAR_NAME];
|
char gvar_names[5][LEN_GVAR_NAME];
|
||||||
|
|
||||||
|
@ -503,8 +607,8 @@ PACK(typedef struct {
|
||||||
AVR_FIELD(int8_t ppmFrameLength) // 0=22.5ms (10ms-30ms) 0.5ms increments
|
AVR_FIELD(int8_t ppmFrameLength) // 0=22.5ms (10ms-30ms) 0.5ms increments
|
||||||
uint8_t thrTraceSrc;
|
uint8_t thrTraceSrc;
|
||||||
|
|
||||||
swstate_t switchWarningStates;
|
swarnstate_t switchWarningState;
|
||||||
uint8_t nSwToWarn;
|
uint8_t switchWarningEnable;
|
||||||
|
|
||||||
global_gvar_t gvars[MAX_GVARS];
|
global_gvar_t gvars[MAX_GVARS];
|
||||||
|
|
||||||
|
@ -657,17 +761,17 @@ int ConvertSource_215_to_216(int source, bool insertZero=false)
|
||||||
if (source > 0)
|
if (source > 0)
|
||||||
source += MAX_INPUTS + MAX_SCRIPTS*MAX_SCRIPT_OUTPUTS;
|
source += MAX_INPUTS + MAX_SCRIPTS*MAX_SCRIPT_OUTPUTS;
|
||||||
// S3 added
|
// S3 added
|
||||||
if (source > MIXSRC_POT2)
|
if (source > MIXSRC216_POT2)
|
||||||
source += 1;
|
source += 1;
|
||||||
// PPM9-PPM16 added
|
// PPM9-PPM16 added
|
||||||
if (source > MIXSRC_FIRST_TRAINER+7)
|
if (source > MIXSRC216_FIRST_TRAINER+7)
|
||||||
source += 8;
|
source += 8;
|
||||||
// 4 GVARS added
|
// 4 GVARS added
|
||||||
if (source > MIXSRC_GVAR1+4)
|
if (source > MIXSRC216_GVAR1+4)
|
||||||
source += 4;
|
source += 4;
|
||||||
// Telemetry conversions
|
// Telemetry conversions
|
||||||
if (source >= MIXSRC_FIRST_TELEM)
|
if (source >= MIXSRC216_FIRST_TELEM)
|
||||||
source = MIXSRC_FIRST_TELEM + ConvertTelemetrySource_215_to_216(source-MIXSRC_FIRST_TELEM+1) - 1;
|
source = MIXSRC216_FIRST_TELEM + ConvertTelemetrySource_215_to_216(source-MIXSRC216_FIRST_TELEM+1) - 1;
|
||||||
|
|
||||||
return source;
|
return source;
|
||||||
}
|
}
|
||||||
|
@ -695,14 +799,14 @@ int ConvertSource_215_to_216(int source, bool insertZero=false)
|
||||||
if (insertZero)
|
if (insertZero)
|
||||||
source += 1;
|
source += 1;
|
||||||
// PPM9-PPM16 added
|
// PPM9-PPM16 added
|
||||||
if (source > MIXSRC_FIRST_TRAINER+7)
|
if (source > MIXSRC216_FIRST_TRAINER+7)
|
||||||
source += 8;
|
source += 8;
|
||||||
// 4 GVARS added
|
// 4 GVARS added
|
||||||
if (source > MIXSRC_GVAR1+4)
|
if (source > MIXSRC216_GVAR1+4)
|
||||||
source += 4;
|
source += 4;
|
||||||
// Telemetry conversions
|
// Telemetry conversions
|
||||||
if (source >= MIXSRC_FIRST_TELEM)
|
if (source >= MIXSRC216_FIRST_TELEM)
|
||||||
source = MIXSRC_FIRST_TELEM + ConvertTelemetrySource_215_to_216(source-MIXSRC_FIRST_TELEM+1) - 1;
|
source = MIXSRC216_FIRST_TELEM + ConvertTelemetrySource_215_to_216(source-MIXSRC216_FIRST_TELEM+1) - 1;
|
||||||
|
|
||||||
return source;
|
return source;
|
||||||
}
|
}
|
||||||
|
@ -724,8 +828,31 @@ int ConvertSwitch_215_to_216(int swtch)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(PCBTARANIS)
|
||||||
|
int ConvertSwitch_216_to_217(int swtch)
|
||||||
|
{
|
||||||
|
if (swtch < 0)
|
||||||
|
return -ConvertSwitch_216_to_217(-swtch);
|
||||||
|
|
||||||
|
if (swtch >= SWSRC_SI0)
|
||||||
|
swtch += 12;
|
||||||
|
|
||||||
|
return swtch;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
int ConvertSwitch_216_to_217(int swtch)
|
||||||
|
{
|
||||||
|
return swtch;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int ConvertSource_216_to_217(int source)
|
int ConvertSource_216_to_217(int source)
|
||||||
{
|
{
|
||||||
|
#if defined(PCBTARANIS)
|
||||||
|
// SI to SN switches added
|
||||||
|
if (source >= MIXSRC_SI)
|
||||||
|
source += 6;
|
||||||
|
#endif
|
||||||
// Telemetry conversions
|
// Telemetry conversions
|
||||||
if (source >= MIXSRC_FIRST_TELEM)
|
if (source >= MIXSRC_FIRST_TELEM)
|
||||||
source = 0;
|
source = 0;
|
||||||
|
@ -882,7 +1009,7 @@ void ConvertModel_215_to_216(ModelData &model)
|
||||||
for (uint8_t j=chn+1; j<NUM_STICKS; j++) {
|
for (uint8_t j=chn+1; j<NUM_STICKS; j++) {
|
||||||
indexes[j] = i+1;
|
indexes[j] = i+1;
|
||||||
}
|
}
|
||||||
expo->srcRaw = MIXSRC_Rud+chn;
|
expo->srcRaw = MIXSRC216_Rud+chn;
|
||||||
expo->chn = chn;
|
expo->chn = chn;
|
||||||
expo->mode = oldExpo->mode;
|
expo->mode = oldExpo->mode;
|
||||||
expo->swtch = ConvertSwitch_215_to_216(oldExpo->swtch);
|
expo->swtch = ConvertSwitch_215_to_216(oldExpo->swtch);
|
||||||
|
@ -925,7 +1052,7 @@ void ConvertModel_215_to_216(ModelData &model)
|
||||||
ExpoData_v216 * expo = &newModel.expoData[idx];
|
ExpoData_v216 * expo = &newModel.expoData[idx];
|
||||||
memmove(expo+1, expo, (MAX_EXPOS-(idx+1))*sizeof(ExpoData_v216));
|
memmove(expo+1, expo, (MAX_EXPOS-(idx+1))*sizeof(ExpoData_v216));
|
||||||
memclear(expo, sizeof(ExpoData_v216));
|
memclear(expo, sizeof(ExpoData_v216));
|
||||||
expo->srcRaw = MIXSRC_Rud + i;
|
expo->srcRaw = MIXSRC216_Rud + i;
|
||||||
expo->chn = i;
|
expo->chn = i;
|
||||||
expo->weight = 100;
|
expo->weight = 100;
|
||||||
expo->curve.type = CURVE_REF_EXPO;
|
expo->curve.type = CURVE_REF_EXPO;
|
||||||
|
@ -974,41 +1101,41 @@ void ConvertModel_215_to_216(ModelData &model)
|
||||||
else if (cstate == LS_FAMILY_OFS || cstate == LS_FAMILY_COMP || cstate == LS_FAMILY_DIFF) {
|
else if (cstate == LS_FAMILY_OFS || cstate == LS_FAMILY_COMP || cstate == LS_FAMILY_DIFF) {
|
||||||
sw.v1 = ConvertSource_215_to_216(sw.v1);
|
sw.v1 = ConvertSource_215_to_216(sw.v1);
|
||||||
if (cstate == LS_FAMILY_OFS || cstate == LS_FAMILY_DIFF) {
|
if (cstate == LS_FAMILY_OFS || cstate == LS_FAMILY_DIFF) {
|
||||||
if ((uint8_t)sw.v1 >= MIXSRC_FIRST_TELEM) {
|
if ((uint8_t)sw.v1 >= MIXSRC216_FIRST_TELEM) {
|
||||||
switch ((uint8_t)sw.v1) {
|
switch ((uint8_t)sw.v1) {
|
||||||
case MIXSRC_FIRST_TELEM + TELEM216_TIMER1-1:
|
case MIXSRC216_FIRST_TELEM + TELEM216_TIMER1-1:
|
||||||
case MIXSRC_FIRST_TELEM + TELEM216_TIMER2-1:
|
case MIXSRC216_FIRST_TELEM + TELEM216_TIMER2-1:
|
||||||
sw.v2 = (sw.v2+128) * 3;
|
sw.v2 = (sw.v2+128) * 3;
|
||||||
break;
|
break;
|
||||||
case MIXSRC_FIRST_TELEM + TELEM216_ALT-1:
|
case MIXSRC216_FIRST_TELEM + TELEM216_ALT-1:
|
||||||
case MIXSRC_FIRST_TELEM + TELEM216_GPSALT-1:
|
case MIXSRC216_FIRST_TELEM + TELEM216_GPSALT-1:
|
||||||
case MIXSRC_FIRST_TELEM + TELEM216_MIN_ALT-1:
|
case MIXSRC216_FIRST_TELEM + TELEM216_MIN_ALT-1:
|
||||||
case MIXSRC_FIRST_TELEM + TELEM216_MAX_ALT-1:
|
case MIXSRC216_FIRST_TELEM + TELEM216_MAX_ALT-1:
|
||||||
sw.v2 = (sw.v2+128) * 8 - 500;
|
sw.v2 = (sw.v2+128) * 8 - 500;
|
||||||
break;
|
break;
|
||||||
case MIXSRC_FIRST_TELEM + TELEM216_RPM-1:
|
case MIXSRC216_FIRST_TELEM + TELEM216_RPM-1:
|
||||||
case MIXSRC_FIRST_TELEM + TELEM216_MAX_RPM-1:
|
case MIXSRC216_FIRST_TELEM + TELEM216_MAX_RPM-1:
|
||||||
sw.v2 = (sw.v2+128) * 50;
|
sw.v2 = (sw.v2+128) * 50;
|
||||||
break;
|
break;
|
||||||
case MIXSRC_FIRST_TELEM + TELEM216_T1-1:
|
case MIXSRC216_FIRST_TELEM + TELEM216_T1-1:
|
||||||
case MIXSRC_FIRST_TELEM + TELEM216_T2-1:
|
case MIXSRC216_FIRST_TELEM + TELEM216_T2-1:
|
||||||
case MIXSRC_FIRST_TELEM + TELEM216_MAX_T1-1:
|
case MIXSRC216_FIRST_TELEM + TELEM216_MAX_T1-1:
|
||||||
case MIXSRC_FIRST_TELEM + TELEM216_MAX_T2-1:
|
case MIXSRC216_FIRST_TELEM + TELEM216_MAX_T2-1:
|
||||||
sw.v2 = (sw.v2+128) + 30;
|
sw.v2 = (sw.v2+128) + 30;
|
||||||
break;
|
break;
|
||||||
case MIXSRC_FIRST_TELEM + TELEM216_CELL-1:
|
case MIXSRC216_FIRST_TELEM + TELEM216_CELL-1:
|
||||||
case MIXSRC_FIRST_TELEM + TELEM216_HDG-1:
|
case MIXSRC216_FIRST_TELEM + TELEM216_HDG-1:
|
||||||
sw.v2 = (sw.v2+128) * 2;
|
sw.v2 = (sw.v2+128) * 2;
|
||||||
break;
|
break;
|
||||||
case MIXSRC_FIRST_TELEM + TELEM216_DIST-1:
|
case MIXSRC216_FIRST_TELEM + TELEM216_DIST-1:
|
||||||
case MIXSRC_FIRST_TELEM + TELEM216_MAX_DIST-1:
|
case MIXSRC216_FIRST_TELEM + TELEM216_MAX_DIST-1:
|
||||||
sw.v2 = (sw.v2+128) * 8;
|
sw.v2 = (sw.v2+128) * 8;
|
||||||
break;
|
break;
|
||||||
case MIXSRC_FIRST_TELEM + TELEM216_CURRENT-1:
|
case MIXSRC216_FIRST_TELEM + TELEM216_CURRENT-1:
|
||||||
case MIXSRC_FIRST_TELEM + TELEM216_POWER-1:
|
case MIXSRC216_FIRST_TELEM + TELEM216_POWER-1:
|
||||||
sw.v2 = (sw.v2+128) * 5;
|
sw.v2 = (sw.v2+128) * 5;
|
||||||
break;
|
break;
|
||||||
case MIXSRC_FIRST_TELEM + TELEM216_CONSUMPTION-1:
|
case MIXSRC216_FIRST_TELEM + TELEM216_CONSUMPTION-1:
|
||||||
sw.v2 = (sw.v2+128) * 20;
|
sw.v2 = (sw.v2+128) * 20;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -1127,8 +1254,8 @@ void ConvertModel_215_to_216(ModelData &model)
|
||||||
if (newModel.thrTraceSrc >= THROTTLE_SOURCE_S3)
|
if (newModel.thrTraceSrc >= THROTTLE_SOURCE_S3)
|
||||||
newModel.thrTraceSrc += 1;
|
newModel.thrTraceSrc += 1;
|
||||||
#endif
|
#endif
|
||||||
newModel.switchWarningStates = oldModel.switchWarningStates >> 1;
|
newModel.switchWarningState = oldModel.switchWarningState >> 1;
|
||||||
newModel.nSwToWarn = (oldModel.switchWarningStates & 0x01) ? 0xFF : 0;
|
newModel.switchWarningEnable = (oldModel.switchWarningState & 0x01) ? 0xFF : 0;
|
||||||
for (uint8_t i=0; i<5; i++) {
|
for (uint8_t i=0; i<5; i++) {
|
||||||
memcpy(newModel.gvars[i].name, oldModel.gvar_names[i], LEN_GVAR_NAME);
|
memcpy(newModel.gvars[i].name, oldModel.gvar_names[i], LEN_GVAR_NAME);
|
||||||
}
|
}
|
||||||
|
@ -1223,7 +1350,7 @@ void ConvertModel_216_to_217(ModelData &model)
|
||||||
newModel.mixData[i].carryTrim = oldModel.mixData[i].carryTrim;
|
newModel.mixData[i].carryTrim = oldModel.mixData[i].carryTrim;
|
||||||
newModel.mixData[i].mixWarn = oldModel.mixData[i].mixWarn;
|
newModel.mixData[i].mixWarn = oldModel.mixData[i].mixWarn;
|
||||||
newModel.mixData[i].weight = ConvertGVar_216_to_217(oldModel.mixData[i].weight);
|
newModel.mixData[i].weight = ConvertGVar_216_to_217(oldModel.mixData[i].weight);
|
||||||
newModel.mixData[i].swtch = oldModel.mixData[i].swtch;
|
newModel.mixData[i].swtch = ConvertSwitch_216_to_217(oldModel.mixData[i].swtch);
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
newModel.mixData[i].curve = oldModel.mixData[i].curve;
|
newModel.mixData[i].curve = oldModel.mixData[i].curve;
|
||||||
#else
|
#else
|
||||||
|
@ -1265,7 +1392,7 @@ void ConvertModel_216_to_217(ModelData &model)
|
||||||
newModel.expoData[i].curveParam = oldModel.expoData[i].curveParam;
|
newModel.expoData[i].curveParam = oldModel.expoData[i].curveParam;
|
||||||
#endif
|
#endif
|
||||||
newModel.expoData[i].chn = oldModel.expoData[i].chn;
|
newModel.expoData[i].chn = oldModel.expoData[i].chn;
|
||||||
newModel.expoData[i].swtch = oldModel.expoData[i].swtch;
|
newModel.expoData[i].swtch = ConvertSwitch_216_to_217(oldModel.expoData[i].swtch);
|
||||||
newModel.expoData[i].flightModes = oldModel.expoData[i].flightModes;
|
newModel.expoData[i].flightModes = oldModel.expoData[i].flightModes;
|
||||||
newModel.expoData[i].weight = oldModel.expoData[i].weight;
|
newModel.expoData[i].weight = oldModel.expoData[i].weight;
|
||||||
newModel.expoData[i].mode = oldModel.expoData[i].mode;
|
newModel.expoData[i].mode = oldModel.expoData[i].mode;
|
||||||
|
@ -1302,8 +1429,8 @@ void ConvertModel_216_to_217(ModelData &model)
|
||||||
|
|
||||||
memcpy(newModel.flightModeData, oldModel.flightModeData, sizeof(newModel.flightModeData));
|
memcpy(newModel.flightModeData, oldModel.flightModeData, sizeof(newModel.flightModeData));
|
||||||
newModel.thrTraceSrc = oldModel.thrTraceSrc;
|
newModel.thrTraceSrc = oldModel.thrTraceSrc;
|
||||||
newModel.switchWarningStates = oldModel.switchWarningStates;
|
newModel.switchWarningState = oldModel.switchWarningState;
|
||||||
newModel.nSwToWarn = oldModel.nSwToWarn;
|
newModel.switchWarningEnable = oldModel.switchWarningEnable;
|
||||||
memcpy(newModel.gvars, oldModel.gvars, sizeof(newModel.gvars));
|
memcpy(newModel.gvars, oldModel.gvars, sizeof(newModel.gvars));
|
||||||
|
|
||||||
memcpy(&newModel.frsky.rssiAlarms, &oldModel.frsky.rssiAlarms, sizeof(newModel.frsky.rssiAlarms));
|
memcpy(&newModel.frsky.rssiAlarms, &oldModel.frsky.rssiAlarms, sizeof(newModel.frsky.rssiAlarms));
|
||||||
|
|
|
@ -563,7 +563,7 @@ void menuGeneralSetup(uint8_t event)
|
||||||
lcd_putc(lcdLastPos, y, 's');
|
lcd_putc(lcdLastPos, y, 's');
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
lcd_putsiAtt(RADIO_SETUP_2ND_COLUMN, y, STR_MMMINV, 0, attr);
|
lcd_putsiAtt(RADIO_SETUP_2ND_COLUMN, y, STR_MMMINV, 0, attr); // TODO define
|
||||||
}
|
}
|
||||||
if (attr) g_eeGeneral.splashMode = -checkIncDecGen(event, -g_eeGeneral.splashMode, -3, 4);
|
if (attr) g_eeGeneral.splashMode = -checkIncDecGen(event, -g_eeGeneral.splashMode, -3, 4);
|
||||||
#else
|
#else
|
||||||
|
@ -1362,50 +1362,148 @@ void menuGeneralDiagAna(uint8_t event)
|
||||||
|
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
enum menuGeneralHwItems {
|
enum menuGeneralHwItems {
|
||||||
|
ITEM_SETUP_HW_LABEL_STICKS,
|
||||||
|
ITEM_SETUP_HW_STICK1,
|
||||||
|
ITEM_SETUP_HW_STICK2,
|
||||||
|
ITEM_SETUP_HW_STICK3,
|
||||||
|
ITEM_SETUP_HW_STICK4,
|
||||||
|
ITEM_SETUP_HW_LABEL_POTS,
|
||||||
ITEM_SETUP_HW_POT1,
|
ITEM_SETUP_HW_POT1,
|
||||||
ITEM_SETUP_HW_POT2,
|
ITEM_SETUP_HW_POT2,
|
||||||
CASE_REVPLUS(ITEM_SETUP_HW_POT3)
|
CASE_REVPLUS(ITEM_SETUP_HW_POT3)
|
||||||
|
ITEM_SETUP_HW_LS,
|
||||||
|
ITEM_SETUP_HW_RS,
|
||||||
|
ITEM_SETUP_HW_LABEL_SWITCHES,
|
||||||
|
ITEM_SETUP_HW_SA,
|
||||||
|
ITEM_SETUP_HW_SB,
|
||||||
|
ITEM_SETUP_HW_SC,
|
||||||
|
ITEM_SETUP_HW_SD,
|
||||||
|
ITEM_SETUP_HW_SE,
|
||||||
|
ITEM_SETUP_HW_SF,
|
||||||
|
ITEM_SETUP_HW_SG,
|
||||||
|
ITEM_SETUP_HW_SH,
|
||||||
|
ITEM_SETUP_HW_SI,
|
||||||
|
ITEM_SETUP_HW_SJ,
|
||||||
|
ITEM_SETUP_HW_SK,
|
||||||
|
ITEM_SETUP_HW_SL,
|
||||||
|
ITEM_SETUP_HW_SM,
|
||||||
|
ITEM_SETUP_HW_SN,
|
||||||
ITEM_SETUP_HW_UART3_MODE,
|
ITEM_SETUP_HW_UART3_MODE,
|
||||||
ITEM_SETUP_HW_MAX
|
ITEM_SETUP_HW_MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
#define HW_SETTINGS_COLUMN 15*FW
|
#define HW_SETTINGS_COLUMN 15*FW
|
||||||
|
|
||||||
|
#if defined(REVPLUS)
|
||||||
|
#define POTS_ROWS NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, 0, 0
|
||||||
|
#else
|
||||||
|
#define POTS_ROWS NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, 0, 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define SWITCH_ROWS(x) uint8_t(IS_2x2POS(x) ? 0 : HIDDEN_ROW)
|
||||||
|
|
||||||
void menuGeneralHardware(uint8_t event)
|
void menuGeneralHardware(uint8_t event)
|
||||||
{
|
{
|
||||||
MENU(STR_HARDWARE, menuTabGeneral, e_Hardware, ITEM_SETUP_HW_MAX+1, {0});
|
MENU(STR_HARDWARE, menuTabGeneral, e_Hardware, ITEM_SETUP_HW_MAX+1, {0, LABEL(Sticks), 0, 0, 0, 0, LABEL(Pots), POTS_ROWS, LABEL(Switches), NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, SWITCH_ROWS(0), SWITCH_ROWS(1), SWITCH_ROWS(2), SWITCH_ROWS(3), SWITCH_ROWS(4), SWITCH_ROWS(6), 0});
|
||||||
|
|
||||||
uint8_t sub = m_posVert - 1;
|
uint8_t sub = m_posVert - 1;
|
||||||
|
|
||||||
for (uint8_t i=0; i<ITEM_SETUP_HW_MAX; i++) {
|
for (uint8_t i=0; i<LCD_LINES-1; ++i) {
|
||||||
coord_t y = MENU_TITLE_HEIGHT + 1 + i*FH;
|
coord_t y = MENU_TITLE_HEIGHT + 1 + i*FH;
|
||||||
uint8_t attr = (sub == i ? ((s_editMode>0) ? BLINK|INVERS : INVERS) : 0);
|
uint8_t k = i + s_pgOfs;
|
||||||
switch(i) {
|
for (int j=0; j<=k; j++) {
|
||||||
|
if (mstate_tab[j+1] == HIDDEN_ROW)
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
uint8_t attr = (sub == k ? ((s_editMode>0) ? BLINK|INVERS : INVERS) : 0);
|
||||||
|
switch (k) {
|
||||||
|
case ITEM_SETUP_HW_LABEL_STICKS:
|
||||||
|
lcd_putsLeft(y, "Sticks");
|
||||||
|
break;
|
||||||
|
case ITEM_SETUP_HW_STICK1:
|
||||||
|
case ITEM_SETUP_HW_STICK2:
|
||||||
|
case ITEM_SETUP_HW_STICK3:
|
||||||
|
case ITEM_SETUP_HW_STICK4:
|
||||||
|
case ITEM_SETUP_HW_LS:
|
||||||
|
case ITEM_SETUP_HW_RS:
|
||||||
|
{
|
||||||
|
int idx = (k<=ITEM_SETUP_HW_STICK4 ? k-ITEM_SETUP_HW_STICK1 : k-ITEM_SETUP_HW_LS+7);
|
||||||
|
lcd_putsiAtt(INDENT_WIDTH, y, STR_VSRCRAW, idx+1, 0);
|
||||||
|
if (ZEXIST(g_eeGeneral.anaNames[idx]) || attr)
|
||||||
|
editName(HW_SETTINGS_COLUMN, y, g_eeGeneral.anaNames[idx], LEN_ANA_NAME, event, attr);
|
||||||
|
else
|
||||||
|
lcd_putsiAtt(HW_SETTINGS_COLUMN, y, STR_MMMINV, 0, 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ITEM_SETUP_HW_LABEL_POTS:
|
||||||
|
lcd_putsLeft(y, "Pots");
|
||||||
|
break;
|
||||||
case ITEM_SETUP_HW_POT1:
|
case ITEM_SETUP_HW_POT1:
|
||||||
case ITEM_SETUP_HW_POT2:
|
case ITEM_SETUP_HW_POT2:
|
||||||
#if defined(REVPLUS)
|
#if defined(REVPLUS)
|
||||||
case ITEM_SETUP_HW_POT3:
|
case ITEM_SETUP_HW_POT3:
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
int idx = i - ITEM_SETUP_HW_POT1;
|
int idx = k - ITEM_SETUP_HW_POT1;
|
||||||
uint8_t shift = (2*idx);
|
uint8_t shift = (2*idx);
|
||||||
uint8_t mask = (0x03 << shift);
|
uint8_t mask = (0x03 << shift);
|
||||||
putsMixerSource(sizeof(TR_TYPE)*FW, y, MIXSRC_FIRST_POT+idx);
|
lcd_putsiAtt(INDENT_WIDTH, y, STR_VSRCRAW, NUM_STICKS+idx+1, m_posHorz < 0 ? attr : 0);
|
||||||
|
if (ZEXIST(g_eeGeneral.anaNames[NUM_STICKS+idx]) || (attr && m_posHorz == 0))
|
||||||
|
editName(HW_SETTINGS_COLUMN, y, g_eeGeneral.anaNames[NUM_STICKS+idx], LEN_ANA_NAME, event, attr && m_posHorz == 0);
|
||||||
|
else
|
||||||
|
lcd_putsiAtt(HW_SETTINGS_COLUMN, y, STR_MMMINV, 0, 0);
|
||||||
|
|
||||||
uint8_t potType = (g_eeGeneral.potsType & mask) >> shift;
|
uint8_t potType = (g_eeGeneral.potsType & mask) >> shift;
|
||||||
if (potType == POT_TYPE_NONE && i < 2)
|
if (potType == POT_TYPE_NONE && k <= ITEM_SETUP_HW_POT2)
|
||||||
potType = POT_TYPE_DETENT;
|
potType = POT_TYPE_DETENT;
|
||||||
potType = selectMenuItem(HW_SETTINGS_COLUMN, y, STR_TYPE, STR_POTTYPES, potType, 0, POT_TYPE_MAX, attr, event);
|
potType = selectMenuItem(HW_SETTINGS_COLUMN+5*FW, y, "", STR_POTTYPES, potType, 0, POT_TYPE_MAX, m_posHorz == 1 ? attr : 0, event);
|
||||||
if (potType == POT_TYPE_DETENT && i < 2)
|
if (potType == POT_TYPE_DETENT && k <= ITEM_SETUP_HW_POT2)
|
||||||
potType = POT_TYPE_NONE;
|
potType = POT_TYPE_NONE;
|
||||||
g_eeGeneral.potsType &= ~mask;
|
g_eeGeneral.potsType &= ~mask;
|
||||||
g_eeGeneral.potsType |= (potType << shift);
|
g_eeGeneral.potsType |= (potType << shift);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case ITEM_SETUP_HW_LABEL_SWITCHES:
|
||||||
|
lcd_putsLeft(y, "Switches");
|
||||||
|
break;
|
||||||
|
case ITEM_SETUP_HW_SA:
|
||||||
|
case ITEM_SETUP_HW_SB:
|
||||||
|
case ITEM_SETUP_HW_SC:
|
||||||
|
case ITEM_SETUP_HW_SD:
|
||||||
|
case ITEM_SETUP_HW_SE:
|
||||||
|
case ITEM_SETUP_HW_SF:
|
||||||
|
case ITEM_SETUP_HW_SG:
|
||||||
|
case ITEM_SETUP_HW_SH:
|
||||||
|
case ITEM_SETUP_HW_SI:
|
||||||
|
case ITEM_SETUP_HW_SJ:
|
||||||
|
case ITEM_SETUP_HW_SK:
|
||||||
|
case ITEM_SETUP_HW_SL:
|
||||||
|
case ITEM_SETUP_HW_SM:
|
||||||
|
case ITEM_SETUP_HW_SN:
|
||||||
|
{
|
||||||
|
int index = k-ITEM_SETUP_HW_SA;
|
||||||
|
char label[] = INDENT "S*";
|
||||||
|
label[2] = 'A' + index;
|
||||||
|
uint32_t config = SWITCH_CONFIG(index);
|
||||||
|
lcd_putsAtt(0, y, label, m_posHorz < 0 ? attr : 0);
|
||||||
|
if (ZEXIST(g_eeGeneral.switchNames[index]) || (attr && m_posHorz == 0))
|
||||||
|
editName(HW_SETTINGS_COLUMN, y, g_eeGeneral.switchNames[index], LEN_SWITCH_NAME, event, m_posHorz == 0 ? attr : 0);
|
||||||
|
else
|
||||||
|
lcd_putsiAtt(HW_SETTINGS_COLUMN, y, STR_MMMINV, 0, 0);
|
||||||
|
if (k <= ITEM_SETUP_HW_SH) {
|
||||||
|
config = selectMenuItem(HW_SETTINGS_COLUMN+5*FW, y, "", "\007DefaultToggle\0""2POS\0 3POS\0 2x2POS\0", config, 0, 4, m_posHorz == 1 ? attr : 0, event);
|
||||||
|
if (attr && checkIncDec_Ret) {
|
||||||
|
uint32_t mask = 0x0f << (4*index);
|
||||||
|
g_eeGeneral.switchConfig = (g_eeGeneral.switchConfig & ~mask) | (config << (4*index));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
case ITEM_SETUP_HW_UART3_MODE:
|
case ITEM_SETUP_HW_UART3_MODE:
|
||||||
g_eeGeneral.uart3Mode = selectMenuItem(HW_SETTINGS_COLUMN, y, STR_UART3MODE, STR_UART3MODES, g_eeGeneral.uart3Mode, 0, UART_MODE_MAX, attr, event);
|
g_eeGeneral.uart3Mode = selectMenuItem(HW_SETTINGS_COLUMN, y, STR_UART3MODE, STR_UART3MODES, g_eeGeneral.uart3Mode, 0, UART_MODE_MAX, attr, event);
|
||||||
if (attr && checkIncDec_Ret) {
|
if (attr && checkIncDec_Ret) {
|
||||||
uart3Init(g_eeGeneral.uart3Mode, MODEL_TELEMETRY_PROTOCOL());
|
uart3Init(g_eeGeneral.uart3Mode, MODEL_TELEMETRY_PROTOCOL());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -850,7 +850,11 @@ void editName(coord_t x, coord_t y, char *name, uint8_t size, uint8_t event, uin
|
||||||
|
|
||||||
if (c != v) {
|
if (c != v) {
|
||||||
name[cur] = v;
|
name[cur] = v;
|
||||||
|
#if defined(PCBTARANIS)
|
||||||
|
eeDirty(g_menuPos[0] == 0 ? EE_MODEL : EE_GENERAL);
|
||||||
|
#else
|
||||||
eeDirty(EE_MODEL);
|
eeDirty(EE_MODEL);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
lcd_putcAtt(x+editNameCursorPos*FW, y, idx2char(v), ERASEBG|INVERS|FIXEDWIDTH);
|
lcd_putcAtt(x+editNameCursorPos*FW, y, idx2char(v), ERASEBG|INVERS|FIXEDWIDTH);
|
||||||
|
@ -901,6 +905,7 @@ enum menuModelSetupItems {
|
||||||
CASE_CPUARM(ITEM_MODEL_CHECKLIST_DISPLAY)
|
CASE_CPUARM(ITEM_MODEL_CHECKLIST_DISPLAY)
|
||||||
ITEM_MODEL_THROTTLE_WARNING,
|
ITEM_MODEL_THROTTLE_WARNING,
|
||||||
ITEM_MODEL_SWITCHES_WARNING,
|
ITEM_MODEL_SWITCHES_WARNING,
|
||||||
|
CASE_PCBTARANIS(ITEM_MODEL_SWITCHES_WARNING2)
|
||||||
CASE_PCBTARANIS(ITEM_MODEL_POT_WARNING)
|
CASE_PCBTARANIS(ITEM_MODEL_POT_WARNING)
|
||||||
ITEM_MODEL_BEEP_CENTER,
|
ITEM_MODEL_BEEP_CENTER,
|
||||||
CASE_CPUARM(ITEM_MODEL_USE_GLOBAL_FUNCTIONS)
|
CASE_CPUARM(ITEM_MODEL_USE_GLOBAL_FUNCTIONS)
|
||||||
|
@ -993,6 +998,7 @@ void onModelSetupBitmapMenu(const char *result)
|
||||||
void menuModelSetup(uint8_t event)
|
void menuModelSetup(uint8_t event)
|
||||||
{
|
{
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
|
horzpos_t l_posHorz = m_posHorz;
|
||||||
#define IF_INTERNAL_MODULE_ON(x) (g_model.moduleData[INTERNAL_MODULE].rfProtocol == RF_PROTO_OFF ? HIDDEN_ROW : (uint8_t)(x))
|
#define IF_INTERNAL_MODULE_ON(x) (g_model.moduleData[INTERNAL_MODULE].rfProtocol == RF_PROTO_OFF ? HIDDEN_ROW : (uint8_t)(x))
|
||||||
#define IF_EXTERNAL_MODULE_ON(x) (g_model.externalModule == MODULE_TYPE_NONE ? HIDDEN_ROW : (uint8_t)(x))
|
#define IF_EXTERNAL_MODULE_ON(x) (g_model.externalModule == MODULE_TYPE_NONE ? HIDDEN_ROW : (uint8_t)(x))
|
||||||
#define IF_TRAINER_ON(x) (g_model.trainerMode == TRAINER_MODE_SLAVE ? (uint8_t)(x) : HIDDEN_ROW)
|
#define IF_TRAINER_ON(x) (g_model.trainerMode == TRAINER_MODE_SLAVE ? (uint8_t)(x) : HIDDEN_ROW)
|
||||||
|
@ -1007,7 +1013,7 @@ void menuModelSetup(uint8_t event)
|
||||||
#define POT_WARN_ITEMS() ((g_model.nPotsToWarn >> 6) ? (uint8_t)NUM_POTS : (uint8_t)0)
|
#define POT_WARN_ITEMS() ((g_model.nPotsToWarn >> 6) ? (uint8_t)NUM_POTS : (uint8_t)0)
|
||||||
#define TIMER_ROWS 2, 0, CASE_PERSISTENT_TIMERS(0) 0, 0
|
#define TIMER_ROWS 2, 0, CASE_PERSISTENT_TIMERS(0) 0, 0
|
||||||
bool CURSOR_ON_CELL = (m_posHorz >= 0);
|
bool CURSOR_ON_CELL = (m_posHorz >= 0);
|
||||||
MENU_TAB({ 0, 0, CASE_PCBTARANIS(0) TIMER_ROWS, TIMER_ROWS, TIMER_ROWS, 0, 1, 0, CASE_PCBTARANIS(LABEL(Throttle)) 0, 0, 0, CASE_CPUARM(LABEL(PreflightCheck)) CASE_CPUARM(0) 0, 7, POT_WARN_ITEMS(), NAVIGATION_LINE_BY_LINE|(NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS-1), 0, LABEL(InternalModule), 0, IF_INTERNAL_MODULE_ON(1), IF_INTERNAL_MODULE_ON(IS_D8_RX(0) ? (uint8_t)1 : (uint8_t)2), IF_INTERNAL_MODULE_ON(FAILSAFE_ROWS(INTERNAL_MODULE)), LABEL(ExternalModule), (IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0, EXTERNAL_MODULE_CHANNELS_ROWS(), (IS_MODULE_XJT(EXTERNAL_MODULE) && IS_D8_RX(EXTERNAL_MODULE)) ? (uint8_t)1 : (IS_MODULE_PPM(EXTERNAL_MODULE) || IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW, IF_EXTERNAL_MODULE_XJT(FAILSAFE_ROWS(EXTERNAL_MODULE)), LABEL(Trainer), 0, TRAINER_CHANNELS_ROWS(), IF_TRAINER_ON(2)});
|
MENU_TAB({ 0, 0, CASE_PCBTARANIS(0) TIMER_ROWS, TIMER_ROWS, TIMER_ROWS, 0, 1, 0, CASE_PCBTARANIS(LABEL(Throttle)) 0, 0, 0, CASE_CPUARM(LABEL(PreflightCheck)) CASE_CPUARM(0) 0, uint8_t(NAVIGATION_LINE_BY_LINE|getSwitchWarningsAllowed()), ONE_2x2POS_DEFINED() ? TITLE_ROW : HIDDEN_ROW, POT_WARN_ITEMS(), NAVIGATION_LINE_BY_LINE|(NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS-1), 0, LABEL(InternalModule), 0, IF_INTERNAL_MODULE_ON(1), IF_INTERNAL_MODULE_ON(IS_D8_RX(0) ? (uint8_t)1 : (uint8_t)2), IF_INTERNAL_MODULE_ON(FAILSAFE_ROWS(INTERNAL_MODULE)), LABEL(ExternalModule), (IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0, EXTERNAL_MODULE_CHANNELS_ROWS(), (IS_MODULE_XJT(EXTERNAL_MODULE) && IS_D8_RX(EXTERNAL_MODULE)) ? (uint8_t)1 : (IS_MODULE_PPM(EXTERNAL_MODULE) || IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW, IF_EXTERNAL_MODULE_XJT(FAILSAFE_ROWS(EXTERNAL_MODULE)), LABEL(Trainer), 0, TRAINER_CHANNELS_ROWS(), IF_TRAINER_ON(2)});
|
||||||
#elif defined(CPUARM)
|
#elif defined(CPUARM)
|
||||||
#define IF_EXTERNAL_MODULE_XJT(x) (IS_MODULE_XJT(EXTERNAL_MODULE) ? (uint8_t)x : HIDDEN_ROW)
|
#define IF_EXTERNAL_MODULE_XJT(x) (IS_MODULE_XJT(EXTERNAL_MODULE) ? (uint8_t)x : HIDDEN_ROW)
|
||||||
#define IF_EXTERNAL_MODULE_ON(x) (g_model.externalModule == MODULE_TYPE_NONE ? HIDDEN_ROW : (uint8_t)(x))
|
#define IF_EXTERNAL_MODULE_ON(x) (g_model.externalModule == MODULE_TYPE_NONE ? HIDDEN_ROW : (uint8_t)(x))
|
||||||
|
@ -1286,11 +1292,25 @@ void menuModelSetup(uint8_t event)
|
||||||
case ITEM_MODEL_THROTTLE_WARNING:
|
case ITEM_MODEL_THROTTLE_WARNING:
|
||||||
g_model.disableThrottleWarning = !onoffMenuItem(!g_model.disableThrottleWarning, MODEL_SETUP_2ND_COLUMN, y, STR_THROTTLEWARNING, attr, event);
|
g_model.disableThrottleWarning = !onoffMenuItem(!g_model.disableThrottleWarning, MODEL_SETUP_2ND_COLUMN, y, STR_THROTTLEWARNING, attr, event);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#if defined(PCBTARANIS)
|
||||||
|
// TODO something more generic
|
||||||
|
case ITEM_MODEL_SWITCHES_WARNING2:
|
||||||
|
if (i==0) s_pgOfs++;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
case ITEM_MODEL_SWITCHES_WARNING:
|
case ITEM_MODEL_SWITCHES_WARNING:
|
||||||
|
#if defined(PCBTARANIS)
|
||||||
|
// TODO something more generic
|
||||||
|
if (i==LCD_LINES-2) {
|
||||||
|
s_pgOfs++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
lcd_putsLeft(y, STR_SWITCHWARNING);
|
lcd_putsLeft(y, STR_SWITCHWARNING);
|
||||||
swstate_t states = g_model.switchWarningStates;
|
swarnstate_t states = g_model.switchWarningState;
|
||||||
char c;
|
char c;
|
||||||
if (attr) {
|
if (attr) {
|
||||||
s_editMode = 0;
|
s_editMode = 0;
|
||||||
|
@ -1299,11 +1319,11 @@ void menuModelSetup(uint8_t event)
|
||||||
CASE_EVT_ROTARY_BREAK
|
CASE_EVT_ROTARY_BREAK
|
||||||
case EVT_KEY_BREAK(KEY_ENTER):
|
case EVT_KEY_BREAK(KEY_ENTER):
|
||||||
#if defined(CPUM64)
|
#if defined(CPUM64)
|
||||||
g_model.nSwToWarn ^= (1 << m_posHorz);
|
g_model.switchWarningEnable ^= (1 << m_posHorz);
|
||||||
eeDirty(EE_MODEL);
|
eeDirty(EE_MODEL);
|
||||||
#else
|
#elif !defined(PCBTARANIS)
|
||||||
if (m_posHorz < NUM_SWITCHES-1) {
|
if (m_posHorz < NUM_SWITCHES-1) {
|
||||||
g_model.nSwToWarn ^= (1 << m_posHorz);
|
g_model.switchWarningEnable ^= (1 << m_posHorz);
|
||||||
eeDirty(EE_MODEL);
|
eeDirty(EE_MODEL);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -1312,14 +1332,22 @@ void menuModelSetup(uint8_t event)
|
||||||
case EVT_KEY_LONG(KEY_ENTER):
|
case EVT_KEY_LONG(KEY_ENTER):
|
||||||
#if defined(CPUM64)
|
#if defined(CPUM64)
|
||||||
getMovedSwitch();
|
getMovedSwitch();
|
||||||
g_model.switchWarningStates = switches_states;
|
g_model.switchWarningState = switches_states;
|
||||||
AUDIO_WARNING1();
|
AUDIO_WARNING1();
|
||||||
eeDirty(EE_MODEL);
|
eeDirty(EE_MODEL);
|
||||||
|
#elif defined(PCBTARANIS)
|
||||||
|
if (m_posHorz < 0) {
|
||||||
|
s_noHi = NO_HI_LEN;
|
||||||
|
getMovedSwitch();
|
||||||
|
g_model.switchWarningState = switches_states;
|
||||||
|
AUDIO_WARNING1();
|
||||||
|
eeDirty(EE_MODEL);
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
if (m_posHorz == NUM_SWITCHES-1) {
|
if (m_posHorz == NUM_SWITCHES-1) {
|
||||||
s_noHi = NO_HI_LEN;
|
s_noHi = NO_HI_LEN;
|
||||||
getMovedSwitch();
|
getMovedSwitch();
|
||||||
g_model.switchWarningStates = switches_states;
|
g_model.switchWarningState = switches_states;
|
||||||
AUDIO_WARNING1();
|
AUDIO_WARNING1();
|
||||||
eeDirty(EE_MODEL);
|
eeDirty(EE_MODEL);
|
||||||
}
|
}
|
||||||
|
@ -1332,15 +1360,28 @@ void menuModelSetup(uint8_t event)
|
||||||
|
|
||||||
LcdFlags line = attr;
|
LcdFlags line = attr;
|
||||||
|
|
||||||
for (uint8_t i=0; i<NUM_SWITCHES-1; i++) {
|
|
||||||
uint8_t swactive = !(g_model.nSwToWarn & 1 << i);
|
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
c = "\300-\301"[states & 0x03];
|
for (int i=0, current=0; i<NUM_SWITCHES; i++) {
|
||||||
lcd_putcAtt(MODEL_SETUP_2ND_COLUMN+i*(2*FW+1), y, 'A'+i, line && (m_posHorz == i) ? INVERS : 0);
|
div_t qr = div(i, 8);
|
||||||
if (swactive) lcd_putc(MODEL_SETUP_2ND_COLUMN+i*(2*FW+1)+FWNUM+1, y, c);
|
if (SWITCH_WARNING_ALLOWED(i)) {
|
||||||
lcd_putsAtt(MODEL_SETUP_2ND_COLUMN+((NUM_SWITCHES-1)*2*FW+8), y, PSTR("<]"), (m_posHorz == NUM_SWITCHES-1 && !s_noHi) ? line : 0);
|
if (!READ_ONLY() && event==EVT_KEY_BREAK(KEY_ENTER) && line && l_posHorz==current) {
|
||||||
|
g_model.switchWarningEnable ^= (1 << i);
|
||||||
|
eeDirty(EE_MODEL);
|
||||||
|
}
|
||||||
|
uint8_t swactive = !(g_model.switchWarningEnable & (1<<i));
|
||||||
|
c = "\300-\301"[states & 0x03];
|
||||||
|
lcd_putcAtt(MODEL_SETUP_2ND_COLUMN+qr.rem*(2*FW+1), y+FH*qr.quot, 'A'+i, line && (m_posHorz==current) ? INVERS : 0);
|
||||||
|
if (swactive) lcd_putc(lcdNextPos, y+FH*qr.quot, c);
|
||||||
|
++current;
|
||||||
|
}
|
||||||
states >>= 2;
|
states >>= 2;
|
||||||
|
}
|
||||||
|
if (attr && m_posHorz < 0) {
|
||||||
|
lcd_filled_rect(MODEL_SETUP_2ND_COLUMN-1, y-1, 8*(2*FW+1), ONE_2x2POS_DEFINED() ? 2*FH+1 : FH+1);
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
|
for (uint8_t i=0; i<NUM_SWITCHES-1/*not on TRN switch*/; i++) {
|
||||||
|
uint8_t swactive = !(g_model.switchWarningEnable & 1 << i);
|
||||||
attr = 0;
|
attr = 0;
|
||||||
|
|
||||||
if (IS_3POS(i)) {
|
if (IS_3POS(i)) {
|
||||||
|
@ -1361,11 +1402,12 @@ void menuModelSetup(uint8_t event)
|
||||||
lcd_putcAtt(MODEL_SETUP_2ND_COLUMN+i*FW, y, (swactive || (attr & BLINK)) ? c : '-', attr);
|
lcd_putcAtt(MODEL_SETUP_2ND_COLUMN+i*FW, y, (swactive || (attr & BLINK)) ? c : '-', attr);
|
||||||
#if !defined(CPUM64)
|
#if !defined(CPUM64)
|
||||||
lcd_putsAtt(MODEL_SETUP_2ND_COLUMN+(NUM_SWITCHES*FW), y, PSTR("<]"), (m_posHorz == NUM_SWITCHES-1 && !s_noHi) ? line : 0);
|
lcd_putsAtt(MODEL_SETUP_2ND_COLUMN+(NUM_SWITCHES*FW), y, PSTR("<]"), (m_posHorz == NUM_SWITCHES-1 && !s_noHi) ? line : 0);
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
case ITEM_MODEL_POT_WARNING:
|
case ITEM_MODEL_POT_WARNING:
|
||||||
{
|
{
|
||||||
|
@ -1387,10 +1429,9 @@ void menuModelSetup(uint8_t event)
|
||||||
g_model.nPotsToWarn ^= (1 << (m_posHorz-1));
|
g_model.nPotsToWarn ^= (1 << (m_posHorz-1));
|
||||||
eeDirty(EE_MODEL);
|
eeDirty(EE_MODEL);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, PSTR("\004""OFF\0""Man\0""Auto"), potMode, attr & ((m_posHorz == 0) ? attr : !INVERS));
|
lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, PSTR("\004""OFF\0""Man\0""Auto"), potMode, attr & ((m_posHorz == 0) ? attr : !INVERS));
|
||||||
if (potMode) {
|
if (potMode) {
|
||||||
coord_t x = MODEL_SETUP_2ND_COLUMN+5*FW;
|
coord_t x = MODEL_SETUP_2ND_COLUMN+5*FW;
|
||||||
|
|
|
@ -1401,6 +1401,14 @@ bool isSourceAvailable(int source)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(PCBTARANIS)
|
||||||
|
if (source>=MIXSRC_SI && source<=MIXSRC_SN) {
|
||||||
|
if (!IS_2x2POS(source-MIXSRC_SI)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (source>=MIXSRC_SW1 && source<=MIXSRC_LAST_LOGICAL_SWITCH) {
|
if (source>=MIXSRC_SW1 && source<=MIXSRC_LAST_LOGICAL_SWITCH) {
|
||||||
LogicalSwitchData * cs = lswAddress(source-MIXSRC_SW1);
|
LogicalSwitchData * cs = lswAddress(source-MIXSRC_SW1);
|
||||||
return (cs->func != LS_FUNC_NONE);
|
return (cs->func != LS_FUNC_NONE);
|
||||||
|
@ -1487,6 +1495,18 @@ bool isSwitchAvailable(int swtch, SwitchContext context)
|
||||||
swtch = -swtch;
|
swtch = -swtch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(PCBTARANIS)
|
||||||
|
if (swtch == SWSRC_SA1 || swtch == SWSRC_SB1 || swtch == SWSRC_SC1 || swtch == SWSRC_SD1 || swtch == SWSRC_SE1 || swtch == SWSRC_SG1) {
|
||||||
|
return IS_3POS((swtch-SWSRC_SA0)/3);
|
||||||
|
}
|
||||||
|
if (swtch >= SWSRC_SI0 && swtch <= SWSRC_SM2) {
|
||||||
|
return IS_2x2POS((swtch-SWSRC_SI0)/2);
|
||||||
|
}
|
||||||
|
if (swtch >= SWSRC_SN0 && swtch <= SWSRC_SN2) {
|
||||||
|
return IS_2x2POS(6);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
if (swtch >= SWSRC_FIRST_MULTIPOS_SWITCH && swtch <= SWSRC_LAST_MULTIPOS_SWITCH) {
|
if (swtch >= SWSRC_FIRST_MULTIPOS_SWITCH && swtch <= SWSRC_LAST_MULTIPOS_SWITCH) {
|
||||||
int index = (swtch - SWSRC_FIRST_MULTIPOS_SWITCH) / XPOTS_MULTIPOS_COUNT;
|
int index = (swtch - SWSRC_FIRST_MULTIPOS_SWITCH) / XPOTS_MULTIPOS_COUNT;
|
||||||
|
|
|
@ -367,6 +367,8 @@ int8_t switchMenuItem(coord_t x, coord_t y, int8_t value, LcdFlags attr, uint8_t
|
||||||
#define displayGVar(x, y, v, min, max) lcd_outdez8(x, y, v)
|
#define displayGVar(x, y, v, min, max) lcd_outdez8(x, y, v)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void editName(coord_t x, coord_t y, char *name, uint8_t size, uint8_t event, uint8_t active);
|
||||||
|
|
||||||
#define WARNING_TYPE_ASTERISK 0
|
#define WARNING_TYPE_ASTERISK 0
|
||||||
#define WARNING_TYPE_CONFIRM 1
|
#define WARNING_TYPE_CONFIRM 1
|
||||||
#define WARNING_TYPE_INPUT 2
|
#define WARNING_TYPE_INPUT 2
|
||||||
|
|
|
@ -95,6 +95,18 @@ enum EnumKeys {
|
||||||
SW_SG2,
|
SW_SG2,
|
||||||
SW_SH0,
|
SW_SH0,
|
||||||
SW_SH2,
|
SW_SH2,
|
||||||
|
SW_SI0,
|
||||||
|
SW_SI2,
|
||||||
|
SW_SJ0,
|
||||||
|
SW_SJ2,
|
||||||
|
SW_SK0,
|
||||||
|
SW_SK2,
|
||||||
|
SW_SL0,
|
||||||
|
SW_SL2,
|
||||||
|
SW_SM0,
|
||||||
|
SW_SM2,
|
||||||
|
SW_SN0,
|
||||||
|
SW_SN2,
|
||||||
#else
|
#else
|
||||||
SW_ID0=SW_BASE,
|
SW_ID0=SW_BASE,
|
||||||
SW_ID1,
|
SW_ID1,
|
||||||
|
|
|
@ -730,6 +730,20 @@ void putsMixerSource(coord_t x, coord_t y, uint8_t idx, LcdFlags att)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
|
else if (idx < MIXSRC_LAST_POT) {
|
||||||
|
idx = idx-MIXSRC_Rud;
|
||||||
|
if (ZEXIST(g_eeGeneral.anaNames[idx]))
|
||||||
|
lcd_putsnAtt(x, y, g_eeGeneral.anaNames[idx], LEN_ANA_NAME, ZCHAR|att);
|
||||||
|
else
|
||||||
|
lcd_putsiAtt(x, y, STR_VSRCRAW, idx+1, att);
|
||||||
|
}
|
||||||
|
else if (idx >= MIXSRC_FIRST_SWITCH && idx < MIXSRC_FIRST_LOGICAL_SWITCH) {
|
||||||
|
idx = idx-MIXSRC_FIRST_SWITCH;
|
||||||
|
if (ZEXIST(g_eeGeneral.switchNames[idx]))
|
||||||
|
lcd_putsnAtt(x, y, g_eeGeneral.switchNames[idx], LEN_SWITCH_NAME, ZCHAR|att);
|
||||||
|
else
|
||||||
|
lcd_putsiAtt(x, y, STR_VSRCRAW, idx+MIXSRC_FIRST_SWITCH-MIXSRC_Rud+1, att);
|
||||||
|
}
|
||||||
else if (idx < MIXSRC_SW1)
|
else if (idx < MIXSRC_SW1)
|
||||||
lcd_putsiAtt(x, y, STR_VSRCRAW, idx-MIXSRC_Rud+1, att);
|
lcd_putsiAtt(x, y, STR_VSRCRAW, idx-MIXSRC_Rud+1, att);
|
||||||
#else
|
#else
|
||||||
|
@ -794,6 +808,28 @@ void putsModelName(coord_t x, coord_t y, char *name, uint8_t id, LcdFlags att)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(PCBTARANIS)
|
||||||
|
div_t switchInfo(int switchPosition)
|
||||||
|
{
|
||||||
|
if (switchPosition <= SWSRC_SE2) {
|
||||||
|
return div(switchPosition-SWSRC_SA0, 3);
|
||||||
|
}
|
||||||
|
else if (switchPosition <= SWSRC_SF2) {
|
||||||
|
div_t qr = { 5, switchPosition == SWSRC_SF2 ? 2 : 0 };
|
||||||
|
return qr;
|
||||||
|
}
|
||||||
|
else if (switchPosition <= SWSRC_SG2) {
|
||||||
|
div_t qr = { 6, switchPosition-SWSRC_SG0 };
|
||||||
|
return qr;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
div_t qr = div(2*7+switchPosition-SWSRC_SH0, 2);
|
||||||
|
qr.rem *= 2;
|
||||||
|
return qr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void putsSwitches(coord_t x, coord_t y, int8_t idx, LcdFlags att)
|
void putsSwitches(coord_t x, coord_t y, int8_t idx, LcdFlags att)
|
||||||
{
|
{
|
||||||
if (idx == SWSRC_OFF)
|
if (idx == SWSRC_OFF)
|
||||||
|
@ -803,11 +839,22 @@ void putsSwitches(coord_t x, coord_t y, int8_t idx, LcdFlags att)
|
||||||
idx = -idx;
|
idx = -idx;
|
||||||
}
|
}
|
||||||
#if defined(CPUARM) && defined(FLIGHT_MODES)
|
#if defined(CPUARM) && defined(FLIGHT_MODES)
|
||||||
if (idx >= SWSRC_FIRST_FLIGHT_MODE)
|
if (idx >= SWSRC_FIRST_FLIGHT_MODE) {
|
||||||
putsStrIdx(x, y, STR_FP, idx-SWSRC_FIRST_FLIGHT_MODE, att);
|
return putsStrIdx(x, y, STR_FP, idx-SWSRC_FIRST_FLIGHT_MODE, att);
|
||||||
else
|
}
|
||||||
#endif
|
#endif
|
||||||
lcd_putsiAtt(x, y, STR_VSWITCHES, idx, att);
|
#if defined(PCBTARANIS)
|
||||||
|
if (idx >= SWSRC_SA0 && idx <= SWSRC_SN2) {
|
||||||
|
div_t swinfo = switchInfo(idx);
|
||||||
|
if (ZEXIST(g_eeGeneral.switchNames[swinfo.quot])) {
|
||||||
|
lcd_putsnAtt(x, y, g_eeGeneral.switchNames[swinfo.quot], LEN_SWITCH_NAME, ZCHAR|att);
|
||||||
|
char c = "\300-\301"[swinfo.rem];
|
||||||
|
lcd_putcAtt(lcdNextPos, y, c, att);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return lcd_putsiAtt(x, y, STR_VSWITCHES, idx, att);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(FLIGHT_MODES)
|
#if defined(FLIGHT_MODES)
|
||||||
|
|
|
@ -310,6 +310,12 @@ getvalue_t getValue(mixsrc_t i)
|
||||||
else if (i==MIXSRC_SF) return (switchState(SW_SF0) ? -1024 : 1024);
|
else if (i==MIXSRC_SF) return (switchState(SW_SF0) ? -1024 : 1024);
|
||||||
else if (i==MIXSRC_SG) return (switchState(SW_SG0) ? -1024 : (switchState(SW_SG1) ? 0 : 1024));
|
else if (i==MIXSRC_SG) return (switchState(SW_SG0) ? -1024 : (switchState(SW_SG1) ? 0 : 1024));
|
||||||
else if (i==MIXSRC_SH) return (switchState(SW_SH0) ? -1024 : 1024);
|
else if (i==MIXSRC_SH) return (switchState(SW_SH0) ? -1024 : 1024);
|
||||||
|
else if (i==MIXSRC_SI) return (switchState(SW_SI0) ? -1024 : 1024);
|
||||||
|
else if (i==MIXSRC_SJ) return (switchState(SW_SJ0) ? -1024 : 1024);
|
||||||
|
else if (i==MIXSRC_SK) return (switchState(SW_SK0) ? -1024 : 1024);
|
||||||
|
else if (i==MIXSRC_SL) return (switchState(SW_SL0) ? -1024 : 1024);
|
||||||
|
else if (i==MIXSRC_SM) return (switchState(SW_SM0) ? -1024 : 1024);
|
||||||
|
else if (i==MIXSRC_SN) return (switchState(SW_SN0) ? -1024 : 1024);
|
||||||
#else
|
#else
|
||||||
else if (i==MIXSRC_3POS) return (getSwitch(SW_ID0-SW_BASE+1) ? -1024 : (getSwitch(SW_ID1-SW_BASE+1) ? 0 : 1024));
|
else if (i==MIXSRC_3POS) return (getSwitch(SW_ID0-SW_BASE+1) ? -1024 : (getSwitch(SW_ID1-SW_BASE+1) ? 0 : 1024));
|
||||||
// don't use switchState directly to give getSwitch possibility to hack values if needed for switch warning
|
// don't use switchState directly to give getSwitch possibility to hack values if needed for switch warning
|
||||||
|
|
|
@ -377,7 +377,8 @@ PACK(typedef struct {
|
||||||
#define IS_TRAINER_EXTERNAL_MODULE() (g_model.trainerMode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE || g_model.trainerMode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE)
|
#define IS_TRAINER_EXTERNAL_MODULE() (g_model.trainerMode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE || g_model.trainerMode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE)
|
||||||
#define MODELDATA_BITMAP char bitmap[LEN_BITMAP_NAME];
|
#define MODELDATA_BITMAP char bitmap[LEN_BITMAP_NAME];
|
||||||
#define MODELDATA_EXTRA uint8_t externalModule; uint8_t trainerMode; ModuleData moduleData[NUM_MODULES+1]; char curveNames[MAX_CURVES][6]; ScriptData scriptsData[MAX_SCRIPTS]; char inputNames[MAX_INPUTS][LEN_INPUT_NAME]; uint8_t nPotsToWarn; int8_t potPosition[NUM_POTS];
|
#define MODELDATA_EXTRA uint8_t externalModule; uint8_t trainerMode; ModuleData moduleData[NUM_MODULES+1]; char curveNames[MAX_CURVES][6]; ScriptData scriptsData[MAX_SCRIPTS]; char inputNames[MAX_INPUTS][LEN_INPUT_NAME]; uint8_t nPotsToWarn; int8_t potPosition[NUM_POTS];
|
||||||
#define swstate_t uint16_t
|
#define swarnstate_t uint32_t
|
||||||
|
#define swarnenable_t uint16_t
|
||||||
#elif defined(PCBSKY9X)
|
#elif defined(PCBSKY9X)
|
||||||
enum ModuleIndex {
|
enum ModuleIndex {
|
||||||
EXTERNAL_MODULE,
|
EXTERNAL_MODULE,
|
||||||
|
@ -386,11 +387,13 @@ PACK(typedef struct {
|
||||||
};
|
};
|
||||||
#define MODELDATA_BITMAP
|
#define MODELDATA_BITMAP
|
||||||
#define MODELDATA_EXTRA uint8_t externalModule; ModuleData moduleData[NUM_MODULES+1]; uint8_t nPotsToWarn; int8_t potPosition[NUM_POTS]; uint8_t rxBattAlarms[2];
|
#define MODELDATA_EXTRA uint8_t externalModule; ModuleData moduleData[NUM_MODULES+1]; uint8_t nPotsToWarn; int8_t potPosition[NUM_POTS]; uint8_t rxBattAlarms[2];
|
||||||
#define swstate_t uint8_t
|
#define swarnstate_t uint8_t
|
||||||
|
#define swarnenable_t uint8_t
|
||||||
#else
|
#else
|
||||||
#define MODELDATA_BITMAP
|
#define MODELDATA_BITMAP
|
||||||
#define MODELDATA_EXTRA
|
#define MODELDATA_EXTRA
|
||||||
#define swstate_t uint8_t
|
#define swarnstate_t uint8_t
|
||||||
|
#define swarnenable_t uint8_t
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
enum BacklightMode {
|
enum BacklightMode {
|
||||||
|
@ -609,6 +612,16 @@ PACK(typedef struct {
|
||||||
#define CFN_GVAR_CST_MAX 125
|
#define CFN_GVAR_CST_MAX 125
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
enum SwitchConfig {
|
||||||
|
SWITCH_DEFAULT,
|
||||||
|
SWITCH_TOGGLE,
|
||||||
|
SWITCH_2POS,
|
||||||
|
SWITCH_3POS,
|
||||||
|
SWITCH_2x2POS
|
||||||
|
};
|
||||||
|
|
||||||
|
#define LEN_SWITCH_NAME 3
|
||||||
|
#define LEN_ANA_NAME 3
|
||||||
|
|
||||||
#if defined(PCBSTD)
|
#if defined(PCBSTD)
|
||||||
#define N_PCBSTD_FIELD(x)
|
#define N_PCBSTD_FIELD(x)
|
||||||
|
@ -668,16 +681,43 @@ PACK(typedef struct t_EEGeneral {
|
||||||
|
|
||||||
EXTRA_GENERAL_FIELDS
|
EXTRA_GENERAL_FIELDS
|
||||||
|
|
||||||
ARM_FIELD(swstate_t switchUnlockStates)
|
ARM_FIELD(swarnstate_t switchUnlockStates)
|
||||||
|
|
||||||
ARM_FIELD(CustomFunctionData customFn[NUM_CFN])
|
ARM_FIELD(CustomFunctionData customFn[NUM_CFN])
|
||||||
|
|
||||||
|
ARM_FIELD(uint32_t switchConfig)
|
||||||
|
|
||||||
|
ARM_FIELD(char switchNames[NUM_SWITCHES][LEN_SWITCH_NAME])
|
||||||
|
|
||||||
|
ARM_FIELD(char anaNames[NUM_STICKS+NUM_POTS][LEN_ANA_NAME])
|
||||||
|
|
||||||
}) EEGeneral;
|
}) EEGeneral;
|
||||||
|
|
||||||
#define SWITCHES_DELAY() uint8_t(15+g_eeGeneral.switchesDelay)
|
#define SWITCHES_DELAY() uint8_t(15+g_eeGeneral.switchesDelay)
|
||||||
#define SWITCHES_DELAY_NONE (-15)
|
#define SWITCHES_DELAY_NONE (-15)
|
||||||
#define HAPTIC_STRENGTH() (3+g_eeGeneral.hapticStrength)
|
#define HAPTIC_STRENGTH() (3+g_eeGeneral.hapticStrength)
|
||||||
|
|
||||||
|
#if defined(PCBTARANIS)
|
||||||
|
#define SWITCH_CONFIG(x) ((g_eeGeneral.switchConfig >> (4*(x))) & 0x0f)
|
||||||
|
#define SWITCH_DEFAULT_CONFIG(x) ((x)==5 ? SWITCH_2POS : ((x)==7 ? SWITCH_TOGGLE : SWITCH_3POS))
|
||||||
|
int switchConfig(int idx);
|
||||||
|
#define IS_3POS(x) (switchConfig(x) == SWITCH_3POS)
|
||||||
|
#define IS_2x2POS(x) (switchConfig(x) == SWITCH_2x2POS)
|
||||||
|
#define ONE_2x2POS_DEFINED() (g_eeGeneral.switchConfig & 0x44444444)
|
||||||
|
#define IS_TOGGLE(x) (switchConfig(x) == SWITCH_TOGGLE)
|
||||||
|
#define SWITCH_WARNING_ALLOWED(x) (x<8 ? !IS_TOGGLE(x) : IS_2x2POS(x-8))
|
||||||
|
inline int getSwitchWarningsAllowed()
|
||||||
|
{
|
||||||
|
int count = 0;
|
||||||
|
for (int i=0; i<NUM_SWITCHES; ++i) {
|
||||||
|
if (SWITCH_WARNING_ALLOWED(i)) {
|
||||||
|
++count;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
enum CurveRefType {
|
enum CurveRefType {
|
||||||
CURVE_REF_DIFF,
|
CURVE_REF_DIFF,
|
||||||
|
@ -1528,6 +1568,19 @@ enum SwitchSources {
|
||||||
SWSRC_SH0,
|
SWSRC_SH0,
|
||||||
SWSRC_SH2,
|
SWSRC_SH2,
|
||||||
SWSRC_TRAINER = SWSRC_SH2,
|
SWSRC_TRAINER = SWSRC_SH2,
|
||||||
|
SWSRC_SI0,
|
||||||
|
SWSRC_SI2,
|
||||||
|
SWSRC_SJ0,
|
||||||
|
SWSRC_SJ2,
|
||||||
|
SWSRC_SK0,
|
||||||
|
SWSRC_SK2,
|
||||||
|
SWSRC_SL0,
|
||||||
|
SWSRC_SL2,
|
||||||
|
SWSRC_SM0,
|
||||||
|
SWSRC_SM2,
|
||||||
|
SWSRC_SN0,
|
||||||
|
SWSRC_SN2,
|
||||||
|
SWSRC_LAST_SWITCH = SWSRC_SN2,
|
||||||
#else
|
#else
|
||||||
SWSRC_ID0 = SWSRC_FIRST_SWITCH,
|
SWSRC_ID0 = SWSRC_FIRST_SWITCH,
|
||||||
SWSRC_ID1,
|
SWSRC_ID1,
|
||||||
|
@ -1544,10 +1597,9 @@ enum SwitchSources {
|
||||||
SWSRC_GEA,
|
SWSRC_GEA,
|
||||||
SWSRC_TRN,
|
SWSRC_TRN,
|
||||||
SWSRC_TRAINER = SWSRC_TRN,
|
SWSRC_TRAINER = SWSRC_TRN,
|
||||||
|
SWSRC_LAST_SWITCH = SWSRC_TRN,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SWSRC_LAST_SWITCH = SWSRC_TRAINER,
|
|
||||||
|
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
SWSRC_FIRST_MULTIPOS_SWITCH,
|
SWSRC_FIRST_MULTIPOS_SWITCH,
|
||||||
SWSRC_LAST_MULTIPOS_SWITCH = SWSRC_FIRST_MULTIPOS_SWITCH + (NUM_XPOTS*XPOTS_MULTIPOS_COUNT) - 1,
|
SWSRC_LAST_MULTIPOS_SWITCH = SWSRC_FIRST_MULTIPOS_SWITCH + (NUM_XPOTS*XPOTS_MULTIPOS_COUNT) - 1,
|
||||||
|
@ -1639,13 +1691,9 @@ enum MixSources {
|
||||||
#else
|
#else
|
||||||
MIXSRC_P1 = MIXSRC_FIRST_POT,
|
MIXSRC_P1 = MIXSRC_FIRST_POT,
|
||||||
MIXSRC_P2,
|
MIXSRC_P2,
|
||||||
#if defined(EXTRA_3POS)
|
|
||||||
MIXSRC_LAST_POT = MIXSRC_P2,
|
|
||||||
#else
|
|
||||||
MIXSRC_P3,
|
MIXSRC_P3,
|
||||||
MIXSRC_LAST_POT = MIXSRC_P3,
|
MIXSRC_LAST_POT = MIXSRC_P3,
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(PCBSKY9X)
|
#if defined(PCBSKY9X)
|
||||||
MIXSRC_REa,
|
MIXSRC_REa,
|
||||||
|
@ -1684,11 +1732,15 @@ enum MixSources {
|
||||||
MIXSRC_SF, LUA_EXPORT("sf", "Switch F")
|
MIXSRC_SF, LUA_EXPORT("sf", "Switch F")
|
||||||
MIXSRC_SG, LUA_EXPORT("sg", "Switch G")
|
MIXSRC_SG, LUA_EXPORT("sg", "Switch G")
|
||||||
MIXSRC_SH, LUA_EXPORT("sh", "Switch H")
|
MIXSRC_SH, LUA_EXPORT("sh", "Switch H")
|
||||||
|
|
||||||
|
MIXSRC_SI, LUA_EXPORT("si", "Switch I")
|
||||||
|
MIXSRC_SJ, LUA_EXPORT("sj", "Switch J")
|
||||||
|
MIXSRC_SK, LUA_EXPORT("sk", "Switch K")
|
||||||
|
MIXSRC_SL, LUA_EXPORT("sl", "Switch L")
|
||||||
|
MIXSRC_SM, LUA_EXPORT("sm", "Switch M")
|
||||||
|
MIXSRC_SN, LUA_EXPORT("sn", "Switch N")
|
||||||
#else
|
#else
|
||||||
MIXSRC_3POS = MIXSRC_FIRST_SWITCH,
|
MIXSRC_3POS = MIXSRC_FIRST_SWITCH,
|
||||||
#if defined(EXTRA_3POS)
|
|
||||||
MIXSRC_3POS2,
|
|
||||||
#endif
|
|
||||||
MIXSRC_THR,
|
MIXSRC_THR,
|
||||||
MIXSRC_RUD,
|
MIXSRC_RUD,
|
||||||
MIXSRC_ELE,
|
MIXSRC_ELE,
|
||||||
|
@ -1946,8 +1998,8 @@ PACK(typedef struct {
|
||||||
AVR_FIELD(int8_t ppmFrameLength) // 0=22.5ms (10ms-30ms) 0.5ms increments
|
AVR_FIELD(int8_t ppmFrameLength) // 0=22.5ms (10ms-30ms) 0.5ms increments
|
||||||
uint8_t thrTraceSrc;
|
uint8_t thrTraceSrc;
|
||||||
|
|
||||||
swstate_t switchWarningStates;
|
swarnstate_t switchWarningState;
|
||||||
uint8_t nSwToWarn;
|
swarnenable_t switchWarningEnable;
|
||||||
|
|
||||||
MODEL_GVARS_DATA
|
MODEL_GVARS_DATA
|
||||||
|
|
||||||
|
|
|
@ -316,8 +316,7 @@ extern void boardInit();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
#define NUM_SWITCHES 8
|
#define NUM_SWITCHES 14 // 8 physical switches + 6 possible from 3POS
|
||||||
#define IS_3POS(sw) ((sw) != 5 && (sw) != 7)
|
|
||||||
#define NUM_SW_SRCRAW 8
|
#define NUM_SW_SRCRAW 8
|
||||||
#define SWSRC_THR SWSRC_SF2
|
#define SWSRC_THR SWSRC_SF2
|
||||||
#define SWSRC_GEA SWSRC_SG2
|
#define SWSRC_GEA SWSRC_SG2
|
||||||
|
@ -746,7 +745,7 @@ extern volatile GETSWITCH_RECURSIVE_TYPE s_last_switch_value;
|
||||||
#define getSwitchesPosition(...)
|
#define getSwitchesPosition(...)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern swstate_t switches_states;
|
extern swarnstate_t switches_states;
|
||||||
int8_t getMovedSwitch();
|
int8_t getMovedSwitch();
|
||||||
|
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
|
|
|
@ -73,13 +73,21 @@ volatile GETSWITCH_RECURSIVE_TYPE s_last_switch_value = 0;
|
||||||
|
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
tmr10ms_t switchesMidposStart[6] = { 0 };
|
tmr10ms_t switchesMidposStart[6] = { 0 };
|
||||||
uint32_t switchesPos = 0;
|
uint64_t switchesPos = 0;
|
||||||
tmr10ms_t potsLastposStart[NUM_XPOTS];
|
tmr10ms_t potsLastposStart[NUM_XPOTS];
|
||||||
uint8_t potsPos[NUM_XPOTS];
|
uint8_t potsPos[NUM_XPOTS];
|
||||||
|
|
||||||
uint32_t check2PosSwitchPosition(EnumKeys sw)
|
int switchConfig(int idx)
|
||||||
{
|
{
|
||||||
uint32_t result;
|
uint32_t config = SWITCH_CONFIG(idx);
|
||||||
|
if (config == SWITCH_DEFAULT)
|
||||||
|
config = SWITCH_DEFAULT_CONFIG(idx);
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint64_t check2PosSwitchPosition(EnumKeys sw)
|
||||||
|
{
|
||||||
|
uint64_t result;
|
||||||
uint32_t index;
|
uint32_t index;
|
||||||
|
|
||||||
if (switchState(sw))
|
if (switchState(sw))
|
||||||
|
@ -87,7 +95,7 @@ uint32_t check2PosSwitchPosition(EnumKeys sw)
|
||||||
else
|
else
|
||||||
index = sw - SW_SA0 + 1;
|
index = sw - SW_SA0 + 1;
|
||||||
|
|
||||||
result = (1 << index);
|
result = ((int64_t)1 << index);
|
||||||
|
|
||||||
if (!(switchesPos & result)) {
|
if (!(switchesPos & result)) {
|
||||||
PLAY_SWITCH_MOVED(index);
|
PLAY_SWITCH_MOVED(index);
|
||||||
|
@ -136,7 +144,7 @@ uint32_t check3PosSwitchPosition(uint8_t idx, EnumKeys sw, bool startup)
|
||||||
|
|
||||||
void getSwitchesPosition(bool startup)
|
void getSwitchesPosition(bool startup)
|
||||||
{
|
{
|
||||||
uint32_t newPos = 0;
|
uint64_t newPos = 0;
|
||||||
CHECK_3POS(0, SW_SA);
|
CHECK_3POS(0, SW_SA);
|
||||||
CHECK_3POS(1, SW_SB);
|
CHECK_3POS(1, SW_SB);
|
||||||
CHECK_3POS(2, SW_SC);
|
CHECK_3POS(2, SW_SC);
|
||||||
|
@ -145,6 +153,19 @@ void getSwitchesPosition(bool startup)
|
||||||
CHECK_2POS(SW_SF);
|
CHECK_2POS(SW_SF);
|
||||||
CHECK_3POS(5, SW_SG);
|
CHECK_3POS(5, SW_SG);
|
||||||
CHECK_2POS(SW_SH);
|
CHECK_2POS(SW_SH);
|
||||||
|
if (IS_2x2POS(0))
|
||||||
|
CHECK_2POS(SW_SI);
|
||||||
|
if (IS_2x2POS(1))
|
||||||
|
CHECK_2POS(SW_SJ);
|
||||||
|
if (IS_2x2POS(2))
|
||||||
|
CHECK_2POS(SW_SK);
|
||||||
|
if (IS_2x2POS(3))
|
||||||
|
CHECK_2POS(SW_SL);
|
||||||
|
if (IS_2x2POS(4))
|
||||||
|
CHECK_2POS(SW_SM);
|
||||||
|
if (IS_2x2POS(6))
|
||||||
|
CHECK_2POS(SW_SN);
|
||||||
|
|
||||||
switchesPos = newPos;
|
switchesPos = newPos;
|
||||||
|
|
||||||
for (int i=0; i<NUM_XPOTS; i++) {
|
for (int i=0; i<NUM_XPOTS; i++) {
|
||||||
|
@ -445,13 +466,13 @@ bool getSwitch(int8_t swtch)
|
||||||
if (startupWarningState < STARTUP_WARNING_DONE) {
|
if (startupWarningState < STARTUP_WARNING_DONE) {
|
||||||
// if throttle or switch warning is currently active, ignore actual stick position and use wanted values
|
// if throttle or switch warning is currently active, ignore actual stick position and use wanted values
|
||||||
if (cs_idx <= 3) {
|
if (cs_idx <= 3) {
|
||||||
if (!(g_model.nSwToWarn&1)) { // ID1 to ID3 is just one bit in nSwToWarn
|
if (!(g_model.switchWarningEnable&1)) { // ID1 to ID3 is just one bit in switchWarningEnable
|
||||||
result = (cs_idx)==((g_model.switchWarningStates&3)+1); // overwrite result with desired value
|
result = (cs_idx)==((g_model.switchWarningState&3)+1); // overwrite result with desired value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!(g_model.nSwToWarn & (1<<(cs_idx-3)))) {
|
else if (!(g_model.switchWarningEnable & (1<<(cs_idx-3)))) {
|
||||||
// current switch should not be ignored for warning
|
// current switch should not be ignored for warning
|
||||||
result = g_model.switchWarningStates & (1<<(cs_idx-2)); // overwrite result with desired value
|
result = g_model.switchWarningState & (1<<(cs_idx-2)); // overwrite result with desired value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -532,7 +553,7 @@ void evalLogicalSwitches(bool isCurrentPhase)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
swstate_t switches_states = 0;
|
swarnstate_t switches_states = 0;
|
||||||
int8_t getMovedSwitch()
|
int8_t getMovedSwitch()
|
||||||
{
|
{
|
||||||
static tmr10ms_t s_move_last_time = 0;
|
static tmr10ms_t s_move_last_time = 0;
|
||||||
|
@ -540,7 +561,7 @@ int8_t getMovedSwitch()
|
||||||
|
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
for (uint8_t i=0; i<NUM_SWITCHES; i++) {
|
for (uint8_t i=0; i<NUM_SWITCHES; i++) {
|
||||||
swstate_t mask = (0x03 << (i*2));
|
swarnstate_t mask = (0x03 << (i*2));
|
||||||
uint8_t prev = (switches_states & mask) >> (i*2);
|
uint8_t prev = (switches_states & mask) >> (i*2);
|
||||||
uint8_t next = (1024+getValue(MIXSRC_SA+i)) / 1024;
|
uint8_t next = (1024+getValue(MIXSRC_SA+i)) / 1024;
|
||||||
if (prev != next) {
|
if (prev != next) {
|
||||||
|
@ -560,7 +581,7 @@ int8_t getMovedSwitch()
|
||||||
// 4..8 for all other switches if changed to true
|
// 4..8 for all other switches if changed to true
|
||||||
// -4..-8 for all other switches if changed to false
|
// -4..-8 for all other switches if changed to false
|
||||||
// 9 for Trainer switch if changed to true; Change to false is ignored
|
// 9 for Trainer switch if changed to true; Change to false is ignored
|
||||||
swstate_t mask = 0x80;
|
swarnstate_t mask = 0x80;
|
||||||
for (uint8_t i=NUM_PSWITCH; i>1; i--) {
|
for (uint8_t i=NUM_PSWITCH; i>1; i--) {
|
||||||
bool prev;
|
bool prev;
|
||||||
prev = (switches_states & mask);
|
prev = (switches_states & mask);
|
||||||
|
@ -586,11 +607,11 @@ int8_t getMovedSwitch()
|
||||||
void checkSwitches()
|
void checkSwitches()
|
||||||
{
|
{
|
||||||
#if defined(MODULE_ALWAYS_SEND_PULSES)
|
#if defined(MODULE_ALWAYS_SEND_PULSES)
|
||||||
static swstate_t last_bad_switches = 0xff;
|
static swarnstate_t last_bad_switches = 0xff;
|
||||||
#else
|
#else
|
||||||
swstate_t last_bad_switches = 0xff;
|
swarnstate_t last_bad_switches = 0xff;
|
||||||
#endif
|
#endif
|
||||||
swstate_t states = g_model.switchWarningStates;
|
swarnstate_t states = g_model.switchWarningState;
|
||||||
|
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
uint8_t bad_pots = 0, last_bad_pots = 0xff;
|
uint8_t bad_pots = 0, last_bad_pots = 0xff;
|
||||||
|
@ -608,9 +629,9 @@ void checkSwitches()
|
||||||
|
|
||||||
bool warn = false;
|
bool warn = false;
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
for (uint8_t i=0; i<NUM_SWITCHES-1; i++) {
|
for (int i=0; i<NUM_SWITCHES; i++) {
|
||||||
if (!(g_model.nSwToWarn & (1<<i))) {
|
if (SWITCH_WARNING_ALLOWED(i) && !(g_model.switchWarningEnable & (1<<i))) {
|
||||||
swstate_t mask = (0x03 << (i*2));
|
swarnstate_t mask = (0x03 << (i*2));
|
||||||
if (!((states & mask) == (switches_states & mask))) {
|
if (!((states & mask) == (switches_states & mask))) {
|
||||||
warn = true;
|
warn = true;
|
||||||
}
|
}
|
||||||
|
@ -634,7 +655,7 @@ void checkSwitches()
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
for (uint8_t i=0; i<NUM_SWITCHES-1; i++) {
|
for (uint8_t i=0; i<NUM_SWITCHES-1; i++) {
|
||||||
if (!(g_model.nSwToWarn & (1<<i))) {
|
if (!(g_model.switchWarningEnable & (1<<i))) {
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
if ((states & 0x03) != (switches_states & 0x03)) {
|
if ((states & 0x03) != (switches_states & 0x03)) {
|
||||||
warn = true;
|
warn = true;
|
||||||
|
@ -659,16 +680,28 @@ void checkSwitches()
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
if ((last_bad_switches != switches_states) || (last_bad_pots != bad_pots)) {
|
if ((last_bad_switches != switches_states) || (last_bad_pots != bad_pots)) {
|
||||||
MESSAGE(STR_SWITCHWARN, NULL, STR_PRESSANYKEYTOSKIP, ((last_bad_switches == 0xff) || (last_bad_pots == 0xff)) ? AU_SWITCH_ALERT : AU_NONE);
|
MESSAGE(STR_SWITCHWARN, NULL, STR_PRESSANYKEYTOSKIP, ((last_bad_switches == 0xff) || (last_bad_pots == 0xff)) ? AU_SWITCH_ALERT : AU_NONE);
|
||||||
for (uint8_t i=0; i<NUM_SWITCHES-1; i++) {
|
int x = 60, y = 4*FH+3;
|
||||||
if (!(g_model.nSwToWarn & (1<<i))) {
|
for (int i=0; i<NUM_SWITCHES; ++i) {
|
||||||
swstate_t mask = (0x03 << (i*2));
|
if (SWITCH_WARNING_ALLOWED(i) && !(g_model.switchWarningEnable & (1<<i))) {
|
||||||
|
swarnstate_t mask = (0x03 << (i*2));
|
||||||
uint8_t attr = ((states & mask) == (switches_states & mask)) ? 0 : INVERS;
|
uint8_t attr = ((states & mask) == (switches_states & mask)) ? 0 : INVERS;
|
||||||
char c = "\300-\301"[(states & mask) >> (i*2)];
|
if (attr) {
|
||||||
lcd_putcAtt(60+i*(2*FW+FW/2), 4*FH+3, 'A'+i, attr);
|
char c = "\300-\301"[(states & mask) >> (i*2)];
|
||||||
lcd_putcAtt(60+i*(2*FW+FW/2)+FW, 4*FH+3, c, attr);
|
putsMixerSource(x, y, MIXSRC_FIRST_SWITCH+i, attr);
|
||||||
|
lcd_putcAtt(lcdNextPos, y, c, attr);
|
||||||
|
x = lcdNextPos + 3;
|
||||||
|
if (x >= LCD_W - 4*FW && y == 4*FH+3) {
|
||||||
|
y = 6*FH-2;
|
||||||
|
x = 60;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (potMode) {
|
if (potMode) {
|
||||||
|
if (y == 4*FH+3) {
|
||||||
|
y = 6*FH-2;
|
||||||
|
x = 60;
|
||||||
|
}
|
||||||
for (uint8_t i=0; i<NUM_POTS; i++) {
|
for (uint8_t i=0; i<NUM_POTS; i++) {
|
||||||
#if !defined(REVPLUS)
|
#if !defined(REVPLUS)
|
||||||
if (i == POT3-POT1) {
|
if (i == POT3-POT1) {
|
||||||
|
@ -676,22 +709,22 @@ void checkSwitches()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (!(g_model.nPotsToWarn & (1 << i))) {
|
if (!(g_model.nPotsToWarn & (1 << i))) {
|
||||||
uint8_t flags = 0;
|
|
||||||
if (abs(g_model.potPosition[i] - GET_LOWRES_POT_POSITION(i)) > 1) {
|
if (abs(g_model.potPosition[i] - GET_LOWRES_POT_POSITION(i)) > 1) {
|
||||||
switch (i) {
|
lcd_putsiAtt(x, y, STR_VSRCRAW, NUM_STICKS+1+i, INVERS);
|
||||||
|
switch (i) {
|
||||||
case 0:
|
case 0:
|
||||||
case 1:
|
case 1:
|
||||||
case 2:
|
case 2:
|
||||||
lcd_putc(60+i*(5*FW)+2*FW+2, 6*FH-2, g_model.potPosition[i] > GET_LOWRES_POT_POSITION(i) ? 126 : 127);
|
lcd_putcAtt(lcdNextPos, y, g_model.potPosition[i] > GET_LOWRES_POT_POSITION(i) ? 126 : 127, INVERS);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
case 4:
|
case 4:
|
||||||
lcd_putc(60+i*(5*FW)+2*FW+2, 6*FH-2, g_model.potPosition[i] > GET_LOWRES_POT_POSITION(i) ? '\300' : '\301');
|
lcd_putcAtt(lcdNextPos, y, g_model.potPosition[i] > GET_LOWRES_POT_POSITION(i) ? '\300' : '\301', INVERS);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
flags = INVERS;
|
x = lcdNextPos + 3;
|
||||||
}
|
}
|
||||||
lcd_putsiAtt(60+i*(5*FW), 6*FH-2, STR_VSRCRAW, NUM_STICKS+1+i, flags);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -706,7 +739,7 @@ void checkSwitches()
|
||||||
attr = ((states & 0x03) != (switches_states & 0x03)) ? INVERS : 0;
|
attr = ((states & 0x03) != (switches_states & 0x03)) ? INVERS : 0;
|
||||||
else
|
else
|
||||||
attr = (states & (1 << (i+1))) == (switches_states & (1 << (i+1))) ? 0 : INVERS;
|
attr = (states & (1 << (i+1))) == (switches_states & (1 << (i+1))) ? 0 : INVERS;
|
||||||
if (!(g_model.nSwToWarn & (1<<i)))
|
if (!(g_model.switchWarningEnable & (1<<i)))
|
||||||
putsSwitches(x, 5*FH, (i>0?(i+3):(states&0x3)+1), attr);
|
putsSwitches(x, 5*FH, (i>0?(i+3):(states&0x3)+1), attr);
|
||||||
x += 3*FW+FW/2;
|
x += 3*FW+FW/2;
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,7 +131,10 @@ bool switchState(EnumKeys enuk)
|
||||||
|
|
||||||
switch ((uint8_t) enuk) {
|
switch ((uint8_t) enuk) {
|
||||||
case SW_SA0:
|
case SW_SA0:
|
||||||
xxx = (GPIO_PIN_SW_A_H & PIN_SW_A_H) && (~GPIO_PIN_SW_A_L & PIN_SW_A_L);
|
xxx = (GPIO_PIN_SW_A_H & PIN_SW_A_H);
|
||||||
|
if (IS_3POS(0)) {
|
||||||
|
xxx = xxx && (~GPIO_PIN_SW_A_L & PIN_SW_A_L);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SW_SA1:
|
case SW_SA1:
|
||||||
#if defined(REV3)
|
#if defined(REV3)
|
||||||
|
@ -141,21 +144,47 @@ bool switchState(EnumKeys enuk)
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case SW_SA2:
|
case SW_SA2:
|
||||||
xxx = (~GPIO_PIN_SW_A_H & PIN_SW_A_H) && (GPIO_PIN_SW_A_L & PIN_SW_A_L);
|
xxx = (~GPIO_PIN_SW_A_H & PIN_SW_A_H);
|
||||||
|
if (IS_3POS(0)) {
|
||||||
|
xxx = xxx && (GPIO_PIN_SW_A_L & PIN_SW_A_L);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SW_SI0:
|
||||||
|
xxx = GPIO_PIN_SW_A_L & PIN_SW_A_L;
|
||||||
|
break;
|
||||||
|
case SW_SI2:
|
||||||
|
xxx = ~GPIO_PIN_SW_A_L & PIN_SW_A_L;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SW_SB0:
|
case SW_SB0:
|
||||||
xxx = (GPIO_PIN_SW_B_H & PIN_SW_B_H) && (~GPIO_PIN_SW_B_L & PIN_SW_B_L);
|
xxx = (GPIO_PIN_SW_B_H & PIN_SW_B_H);
|
||||||
|
if (IS_3POS(1)) {
|
||||||
|
xxx = xxx && (~GPIO_PIN_SW_B_L & PIN_SW_B_L);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SW_SB1:
|
case SW_SB1:
|
||||||
xxx = (GPIO_PIN_SW_B_H & PIN_SW_B_H) && (GPIO_PIN_SW_B_L & PIN_SW_B_L);
|
xxx = (GPIO_PIN_SW_B_H & PIN_SW_B_H) && (GPIO_PIN_SW_B_L & PIN_SW_B_L);
|
||||||
break;
|
break;
|
||||||
case SW_SB2:
|
case SW_SB2:
|
||||||
xxx = (~GPIO_PIN_SW_B_H & PIN_SW_B_H) && (GPIO_PIN_SW_B_L & PIN_SW_B_L);
|
xxx = (~GPIO_PIN_SW_B_H & PIN_SW_B_H);
|
||||||
|
if (IS_3POS(1)) {
|
||||||
|
xxx = xxx && (GPIO_PIN_SW_B_L & PIN_SW_B_L);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SW_SJ0:
|
||||||
|
xxx = GPIO_PIN_SW_B_L & PIN_SW_B_L;
|
||||||
|
break;
|
||||||
|
case SW_SJ2:
|
||||||
|
xxx = ~GPIO_PIN_SW_B_L & PIN_SW_B_L;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SW_SC0:
|
case SW_SC0:
|
||||||
xxx = (GPIO_PIN_SW_C_H & PIN_SW_C_H) && (~GPIO_PIN_SW_C_L & PIN_SW_C_L);
|
xxx = (GPIO_PIN_SW_C_H & PIN_SW_C_H);
|
||||||
|
if (IS_3POS(2)) {
|
||||||
|
xxx = xxx && (~GPIO_PIN_SW_C_L & PIN_SW_C_L);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SW_SC1:
|
case SW_SC1:
|
||||||
#if defined(REV3)
|
#if defined(REV3)
|
||||||
|
@ -165,11 +194,24 @@ bool switchState(EnumKeys enuk)
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case SW_SC2:
|
case SW_SC2:
|
||||||
xxx = (~GPIO_PIN_SW_C_H & PIN_SW_C_H) && (GPIO_PIN_SW_C_L & PIN_SW_C_L);
|
xxx = (~GPIO_PIN_SW_C_H & PIN_SW_C_H);
|
||||||
|
if (IS_3POS(2)) {
|
||||||
|
xxx = xxx && (GPIO_PIN_SW_C_L & PIN_SW_C_L);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SW_SK0:
|
||||||
|
xxx = GPIO_PIN_SW_C_L & PIN_SW_C_L;
|
||||||
|
break;
|
||||||
|
case SW_SK2:
|
||||||
|
xxx = ~GPIO_PIN_SW_C_L & PIN_SW_C_L;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SW_SD0:
|
case SW_SD0:
|
||||||
xxx = (GPIO_PIN_SW_D_H & PIN_SW_D_H) && (~GPIO_PIN_SW_D_L & PIN_SW_D_L);
|
xxx = (GPIO_PIN_SW_D_H & PIN_SW_D_H);
|
||||||
|
if (IS_3POS(3)) {
|
||||||
|
xxx = xxx && (~GPIO_PIN_SW_D_L & PIN_SW_D_L);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SW_SD1:
|
case SW_SD1:
|
||||||
#if defined(REV3)
|
#if defined(REV3)
|
||||||
|
@ -179,17 +221,40 @@ bool switchState(EnumKeys enuk)
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case SW_SD2:
|
case SW_SD2:
|
||||||
xxx = (~GPIO_PIN_SW_D_H & PIN_SW_D_H) && (GPIO_PIN_SW_D_L & PIN_SW_D_L);
|
xxx = (~GPIO_PIN_SW_D_H & PIN_SW_D_H);
|
||||||
|
if (IS_3POS(3)) {
|
||||||
|
xxx = xxx && (GPIO_PIN_SW_D_L & PIN_SW_D_L);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SW_SL0:
|
||||||
|
xxx = GPIO_PIN_SW_D_L & PIN_SW_D_L;
|
||||||
|
break;
|
||||||
|
case SW_SL2:
|
||||||
|
xxx = ~GPIO_PIN_SW_D_L & PIN_SW_D_L;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SW_SE0:
|
case SW_SE0:
|
||||||
xxx = (~GPIO_PIN_SW_E_H & PIN_SW_E_H) && (GPIO_PIN_SW_E_L & PIN_SW_E_L);
|
xxx = (~GPIO_PIN_SW_E_H & PIN_SW_E_H);
|
||||||
|
if (IS_3POS(4)) {
|
||||||
|
xxx = xxx && (GPIO_PIN_SW_E_L & PIN_SW_E_L);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SW_SE1:
|
case SW_SE1:
|
||||||
xxx = (GPIO_PIN_SW_E_H & PIN_SW_E_H) && (GPIO_PIN_SW_E_L & PIN_SW_E_L);
|
xxx = (GPIO_PIN_SW_E_H & PIN_SW_E_H) && (GPIO_PIN_SW_E_L & PIN_SW_E_L);
|
||||||
break;
|
break;
|
||||||
case SW_SE2:
|
case SW_SE2:
|
||||||
xxx = (GPIO_PIN_SW_E_H & PIN_SW_E_H) && (~GPIO_PIN_SW_E_L & PIN_SW_E_L);
|
xxx = (GPIO_PIN_SW_E_H & PIN_SW_E_H);
|
||||||
|
if (IS_3POS(4)) {
|
||||||
|
xxx = xxx && (~GPIO_PIN_SW_E_L & PIN_SW_E_L);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SW_SM0:
|
||||||
|
xxx = GPIO_PIN_SW_E_L & PIN_SW_E_L;
|
||||||
|
break;
|
||||||
|
case SW_SM2:
|
||||||
|
xxx = ~GPIO_PIN_SW_E_L & PIN_SW_E_L;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SW_SF0:
|
case SW_SF0:
|
||||||
|
@ -200,7 +265,10 @@ bool switchState(EnumKeys enuk)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SW_SG0:
|
case SW_SG0:
|
||||||
xxx = (GPIO_PIN_SW_G_H & PIN_SW_G_H) && (~GPIO_PIN_SW_G_L & PIN_SW_G_L);
|
xxx = (GPIO_PIN_SW_G_H & PIN_SW_G_H);
|
||||||
|
if (IS_3POS(6)) {
|
||||||
|
xxx = xxx && (~GPIO_PIN_SW_G_L & PIN_SW_G_L);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SW_SG1:
|
case SW_SG1:
|
||||||
#if defined(REV3)
|
#if defined(REV3)
|
||||||
|
@ -210,7 +278,17 @@ bool switchState(EnumKeys enuk)
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case SW_SG2:
|
case SW_SG2:
|
||||||
xxx = (~GPIO_PIN_SW_G_H & PIN_SW_G_H) && (GPIO_PIN_SW_G_L & PIN_SW_G_L);
|
xxx = (~GPIO_PIN_SW_G_H & PIN_SW_G_H);
|
||||||
|
if (IS_3POS(6)) {
|
||||||
|
xxx = xxx && (GPIO_PIN_SW_G_L & PIN_SW_G_L);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SW_SN0:
|
||||||
|
xxx = GPIO_PIN_SW_G_L & PIN_SW_G_L;
|
||||||
|
break;
|
||||||
|
case SW_SN2:
|
||||||
|
xxx = ~GPIO_PIN_SW_G_L & PIN_SW_G_L;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SW_SH0:
|
case SW_SH0:
|
||||||
|
|
|
@ -124,7 +124,7 @@ TEST(getSwitch, DISABLED_VfasWithDelay)
|
||||||
(gdb) print Open9xX9D::g_model.logicalSw[0]
|
(gdb) print Open9xX9D::g_model.logicalSw[0]
|
||||||
$3 = {v1 = -39 '\331', v2 = 96, v3 = 0, func = 4 '\004', delay = 5 '\005', duration = 0 '\000', andsw = 0 '\000'}
|
$3 = {v1 = -39 '\331', v2 = 96, v3 = 0, func = 4 '\004', delay = 5 '\005', duration = 0 '\000', andsw = 0 '\000'}
|
||||||
*/
|
*/
|
||||||
g_model.logicalSw[0] = {-39, 96, 0, 4, 5, 0, 0};
|
g_model.logicalSw[0] = {int8_t(MIXSRC_FIRST_TELEM+TELEM_VFAS-1), 96, 0, 4, 5, 0, 0};
|
||||||
frskyData.hub.vfas = 150; //unit is 100mV
|
frskyData.hub.vfas = 150; //unit is 100mV
|
||||||
|
|
||||||
//telemetry streaming is FALSE, so L1 should be FALSE no matter what value Vfas has
|
//telemetry streaming is FALSE, so L1 should be FALSE no matter what value Vfas has
|
||||||
|
@ -228,7 +228,8 @@ TEST(getSwitch, DISABLED_RssiWithDuration)
|
||||||
(gdb) print Open9xX9D::g_model.logicalSw[0]
|
(gdb) print Open9xX9D::g_model.logicalSw[0]
|
||||||
$1 = {v1 = -55 '\311', v2 = 10, v3 = 0, func = 3 '\003', delay = 0 '\000', duration = 5 '\005', andsw = 0 '\000'}
|
$1 = {v1 = -55 '\311', v2 = 10, v3 = 0, func = 3 '\003', delay = 0 '\000', duration = 5 '\005', andsw = 0 '\000'}
|
||||||
*/
|
*/
|
||||||
g_model.logicalSw[0] = {-55, 10, 0, 3, 0, 5, 0};
|
|
||||||
|
g_model.logicalSw[0] = {int8_t(MIXSRC_FIRST_TELEM+TELEM_RSSI_RX-1), 10, 0, 3, 0, 5, 0};
|
||||||
|
|
||||||
EXPECT_EQ(TELEMETRY_STREAMING(), false);
|
EXPECT_EQ(TELEMETRY_STREAMING(), false);
|
||||||
|
|
||||||
|
|
|
@ -429,7 +429,7 @@
|
||||||
|
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
#define TR_POTS_VSRCRAW "S1\0 ""S2\0 ""S3\0 ""LS\0 ""RS\0 "
|
#define TR_POTS_VSRCRAW "S1\0 ""S2\0 ""S3\0 ""LS\0 ""RS\0 "
|
||||||
#define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SD\0 ""SE\0 ""SF\0 ""SG\0 ""SH\0 "
|
#define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SD\0 ""SE\0 ""SF\0 ""SG\0 ""SH\0 ""SI\0 ""SJ\0 ""SK\0 ""SL\0 ""SM\0 ""SN\0 "
|
||||||
#elif defined(EXTRA_3POS)
|
#elif defined(EXTRA_3POS)
|
||||||
#define TR_POTS_VSRCRAW "P1\0 ""P2\0 "
|
#define TR_POTS_VSRCRAW "P1\0 ""P2\0 "
|
||||||
#define TR_SW_VSRCRAW "3P1\0""3P2\0"
|
#define TR_SW_VSRCRAW "3P1\0""3P2\0"
|
||||||
|
@ -461,7 +461,7 @@
|
||||||
|
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
#define TR_6POS_POTS "S11""S12""S13""S14""S15""S16""S21""S22""S23""S24""S25""S26""S31""S32""S33""S34""S35""S36"
|
#define TR_6POS_POTS "S11""S12""S13""S14""S15""S16""S21""S22""S23""S24""S25""S26""S31""S32""S33""S34""S35""S36"
|
||||||
#define TR_VSWITCHES "---""SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF\301""SG\300""SG-""SG\301""SH\300""SH\301" TR_6POS_POTS TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One"
|
#define TR_VSWITCHES "---""SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF\301""SG\300""SG-""SG\301""SH\300""SH\301""SI\300""SI\301""SJ\300""SJ\301""SK\300""SK\301""SL\300""SL\301""SM\300""SM\301""SN\300""SN\301" TR_6POS_POTS TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One"
|
||||||
#elif defined(CPUARM)
|
#elif defined(CPUARM)
|
||||||
#define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One"
|
#define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One"
|
||||||
#else
|
#else
|
||||||
|
@ -788,7 +788,7 @@
|
||||||
#define TR_SD_SPEED "Speed:"
|
#define TR_SD_SPEED "Speed:"
|
||||||
#define TR_SD_SECTORS "Sectors:"
|
#define TR_SD_SECTORS "Sectors:"
|
||||||
#define TR_SD_SIZE "Size:"
|
#define TR_SD_SIZE "Size:"
|
||||||
#define TR_TYPE "Type"
|
#define TR_TYPE INDENT "Type"
|
||||||
#define TR_GLOBAL_VARS "Global Variables"
|
#define TR_GLOBAL_VARS "Global Variables"
|
||||||
#define TR_GLOBAL_V "GLOBAL V."
|
#define TR_GLOBAL_V "GLOBAL V."
|
||||||
#define TR_GLOBAL_VAR "Global Variable"
|
#define TR_GLOBAL_VAR "Global Variable"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue