mirror of
https://github.com/opentx/opentx.git
synced 2025-07-25 01:05:10 +03:00
Bug when using Switches as Mix inputs
This commit is contained in:
parent
228fb38b67
commit
5923ed5e1e
7 changed files with 46 additions and 45 deletions
|
@ -741,7 +741,7 @@ void menuProcFrsky(uint8_t event)
|
|||
if (g_model.frsky.bars[i].source && (51-g_model.frsky.bars[i].barMax) > g_model.frsky.bars[i].barMin) {
|
||||
lcd_putsiAtt(0, bars_height+bars_height+1+i*(bars_height+6), STR_VTELEMBARS, g_model.frsky.bars[i].source, 0);
|
||||
lcd_rect(25, bars_height+6+i*(bars_height+6), 101, bars_height+2);
|
||||
int16_t value = getValue(CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+g_model.frsky.bars[i].source-1);
|
||||
int16_t value = getValue(CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+g_model.frsky.bars[i].source-1);
|
||||
uint8_t threshold = 0, thresholdX = 0;
|
||||
if (g_model.frsky.bars[i].source <= 2)
|
||||
threshold = g_model.frsky.channels[g_model.frsky.bars[i].source-1].alarms_value[0];
|
||||
|
|
|
@ -1727,13 +1727,13 @@ void menuProcCustomSwitches(uint8_t event)
|
|||
int8_t v1 = cs.v1;
|
||||
CHECK_INCDEC_MODELVAR(event, cs.v1, v1_min, v1_max);
|
||||
if (cstate == CS_VOFS) {
|
||||
if (cs.v1 == CHOUT_BASE+NUM_CHNOUT+1 && v1 < cs.v1) cs.v2 = -98;
|
||||
if (cs.v1 == CSW_CHOUT_BASE+NUM_CHNOUT+1 && v1 < cs.v1) cs.v2 = -98;
|
||||
#ifdef FRSKY
|
||||
if (cs.v1 == CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+1 && v1 < cs.v1) cs.v2 = -128;
|
||||
if (cs.v1 == CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+1 && v1 < cs.v1) cs.v2 = -128;
|
||||
#endif
|
||||
if (cs.v1 == CHOUT_BASE+NUM_CHNOUT && v1 > cs.v1) cs.v2 = 0;
|
||||
if (cs.v1 == CSW_CHOUT_BASE+NUM_CHNOUT && v1 > cs.v1) cs.v2 = 0;
|
||||
#ifdef FRSKY
|
||||
if (cs.v1 == CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS && v1 > cs.v1) cs.v2 = -98;
|
||||
if (cs.v1 == CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS && v1 > cs.v1) cs.v2 = -98;
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -168,6 +168,9 @@ PACK(typedef struct t_LimitData {
|
|||
#define MIX_PPM1 34
|
||||
#define MIX_PPM8 41
|
||||
#define MIX_CH1 42
|
||||
#define MIX_CH9 50
|
||||
#define MIX_CH10 51
|
||||
#define MIX_CH11 52
|
||||
#define MIX_CH16 57
|
||||
|
||||
#define TRIM_ON 0
|
||||
|
|
|
@ -306,22 +306,22 @@ int16_t getValue(uint8_t i)
|
|||
#else
|
||||
return 0;
|
||||
#endif
|
||||
else if(i<PPM_BASE+NUM_CAL_PPM) return (g_ppmIns[i-PPM_BASE] - g_eeGeneral.trainer.calib[i-PPM_BASE])*2;
|
||||
else if(i<PPM_BASE+NUM_PPM) return g_ppmIns[i-PPM_BASE]*2;
|
||||
else if(i<CHOUT_BASE+NUM_CHNOUT) return ex_chans[i-CHOUT_BASE];
|
||||
else if(i<CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS) return s_timerVal[i-CHOUT_BASE-NUM_CHNOUT-1];
|
||||
else if(i<CSW_PPM_BASE+NUM_CAL_PPM) return (g_ppmIns[i-CSW_PPM_BASE] - g_eeGeneral.trainer.calib[i-CSW_PPM_BASE])*2;
|
||||
else if(i<CSW_PPM_BASE+NUM_PPM) return g_ppmIns[i-CSW_PPM_BASE]*2;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT) return ex_chans[i-CSW_CHOUT_BASE];
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS) return s_timerVal[i-CSW_CHOUT_BASE-NUM_CHNOUT-1];
|
||||
#if defined(FRSKY)
|
||||
else if(i<CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+2) return frskyTelemetry[i-CHOUT_BASE-NUM_CHNOUT-MAX_TIMERS].value;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+2) return frskyTelemetry[i-CSW_CHOUT_BASE-NUM_CHNOUT-MAX_TIMERS].value;
|
||||
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
|
||||
else if(i<CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+3) return frskyHubData.baroAltitude_bp + frskyHubData.baroAltitudeOffset;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+3) return frskyHubData.baroAltitude_bp + frskyHubData.baroAltitudeOffset;
|
||||
#endif
|
||||
#if defined(FRSKY_HUB)
|
||||
else if(i<CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+4) return (frskyHubData.rpm / 2);
|
||||
else if(i<CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+5) return frskyHubData.fuelLevel;
|
||||
else if(i<CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+6) return frskyHubData.temperature1;
|
||||
else if(i<CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+7) return frskyHubData.temperature2;
|
||||
else if(i<CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+8) return frskyHubData.gpsSpeed_ap;
|
||||
else if(i<CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+9) return frskyHubData.minCellVolts;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+4) return (frskyHubData.rpm / 2);
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+5) return frskyHubData.fuelLevel;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+6) return frskyHubData.temperature1;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+7) return frskyHubData.temperature2;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+8) return frskyHubData.gpsSpeed_ap;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+9) return frskyHubData.minCellVolts;
|
||||
#endif
|
||||
#endif
|
||||
else return 0;
|
||||
|
@ -384,30 +384,30 @@ bool __getSwitch(int8_t swtch)
|
|||
#ifdef FRSKY
|
||||
#if defined(FRSKY_HUB)
|
||||
// Fill the threshold array
|
||||
if (cs.v1 > CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+2)
|
||||
barsThresholds[cs.v1-CHOUT_BASE-NUM_CHNOUT-MAX_TIMERS-3] = 128 + cs.v2;
|
||||
if (cs.v1 > CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+2)
|
||||
barsThresholds[cs.v1-CSW_CHOUT_BASE-NUM_CHNOUT-MAX_TIMERS-3] = 128 + cs.v2;
|
||||
// TODO CELL?
|
||||
// FUEL, T1, T2, SPEED
|
||||
if (cs.v1 > CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+4)
|
||||
if (cs.v1 > CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+4)
|
||||
y = (128+cs.v2);
|
||||
// RPMs
|
||||
else if (cs.v1 > CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+3)
|
||||
else if (cs.v1 > CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+3)
|
||||
y = (128+cs.v2) * 25;
|
||||
else
|
||||
#endif
|
||||
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
|
||||
// ALT
|
||||
if (cs.v1 > CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+2)
|
||||
if (cs.v1 > CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+2)
|
||||
y = (128+cs.v2) * 4;
|
||||
else
|
||||
#endif
|
||||
// Volts
|
||||
if (cs.v1 > CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS)
|
||||
if (cs.v1 > CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS)
|
||||
y = 128+cs.v2;
|
||||
else
|
||||
#endif
|
||||
// Timers
|
||||
if (cs.v1 > CHOUT_BASE+NUM_CHNOUT)
|
||||
if (cs.v1 > CSW_CHOUT_BASE+NUM_CHNOUT)
|
||||
y = 98+cs.v2;
|
||||
else
|
||||
y = calc100toRESX(cs.v2);
|
||||
|
@ -1238,13 +1238,12 @@ void perOut(uint8_t phase)
|
|||
|
||||
if (k < NUM_STICKS)
|
||||
v = anas[k]; //Switch is on. MAX=FULL=512 or value.
|
||||
else if (k>=CHOUT_BASE && k<CHOUT_BASE+NUM_CHNOUT && k-CHOUT_BASE<i) // if we've already calculated the value - take it instead
|
||||
v = chans[k-CHOUT_BASE] / 100;
|
||||
else if (k>=MIX_3POS && k<MIX_3POS+MAX_SWITCH) {
|
||||
v = getSwitch(k-MIX_3POS+1, 0) ? +1024 : -1024;
|
||||
}
|
||||
else if (k>=MIX_CH1-1 && k<=MIX_CH16-1 && k-MIX_CH1+1<i) // if we've already calculated the value - take it instead
|
||||
v = chans[k-MIX_CH1+1] / 100;
|
||||
else if (k>=MIX_THR-1 && k<=MIX_SWC-1)
|
||||
v = getSwitch(k-MIX_THR+1+1, 0) ? +1024 : -1024;
|
||||
else
|
||||
v = getValue(k < MIX_3POS ? k : k-MAX_SWITCH);
|
||||
v = getValue(k <= MIX_3POS ? k : k-MAX_SWITCH);
|
||||
|
||||
if (md->mixWarn) mixWarning |= 1<<(md->mixWarn-1); // Mix warning
|
||||
|
||||
|
|
|
@ -339,10 +339,10 @@ enum EnumKeys {
|
|||
|
||||
#define NUM_STICKS 4
|
||||
#define NUM_POTS 3
|
||||
#define PPM_BASE (MIX_3POS+3/*CYC1-CYC3*/) // because srcRaw is shifted +1! // TODO use MIX_PPM1
|
||||
#define CSW_PPM_BASE (MIX_3POS+3/*CYC1-CYC3*/) // because srcRaw is shifted +1! // TODO use MIX_PPM1
|
||||
#define NUM_CAL_PPM 4
|
||||
#define NUM_PPM 8
|
||||
#define CHOUT_BASE (PPM_BASE+NUM_PPM)
|
||||
#define CSW_CHOUT_BASE (CSW_PPM_BASE+NUM_PPM)
|
||||
|
||||
#if defined(FRSKY_HUB)
|
||||
#define NUM_TELEMETRY 9
|
||||
|
|
|
@ -164,12 +164,12 @@ void applyTemplate(uint8_t idx)
|
|||
clearCurves();
|
||||
|
||||
//Set up Mixes
|
||||
md=setDest(ICC(STK_AIL)); md->srcRaw=CH(9); md->weight= 50;
|
||||
md=setDest(ICC(STK_AIL)); md->srcRaw=CH(10); md->weight=-100;
|
||||
md=setDest(ICC(STK_AIL)); md->srcRaw=CH(11); md->weight= 100; md->carryTrim=TRIM_OFF;
|
||||
md=setDest(ICC(STK_AIL)); md->srcRaw=MIX_CH9; md->weight= 50;
|
||||
md=setDest(ICC(STK_AIL)); md->srcRaw=MIX_CH10; md->weight=-100;
|
||||
md=setDest(ICC(STK_AIL)); md->srcRaw=MIX_CH11; md->weight= 100; md->carryTrim=TRIM_OFF;
|
||||
|
||||
md=setDest(ICC(STK_ELE)); md->srcRaw=CH(9); md->weight=-100;
|
||||
md=setDest(ICC(STK_ELE)); md->srcRaw=CH(11); md->weight= 100; md->carryTrim=TRIM_OFF;
|
||||
md=setDest(ICC(STK_ELE)); md->srcRaw=MIX_CH9; md->weight=-100;
|
||||
md=setDest(ICC(STK_ELE)); md->srcRaw=MIX_CH11; md->weight= 100; md->carryTrim=TRIM_OFF;
|
||||
|
||||
md=setDest(ICC(STK_THR)); md->srcRaw=SRC_THR; md->weight= 100; md->swtch=DSW_ID0; md->curve=CV(1); md->carryTrim=TRIM_OFF;
|
||||
md=setDest(ICC(STK_THR)); md->srcRaw=SRC_THR; md->weight= 100; md->swtch=DSW_ID1; md->curve=CV(2); md->carryTrim=TRIM_OFF;
|
||||
|
@ -182,12 +182,12 @@ void applyTemplate(uint8_t idx)
|
|||
md=setDest(4); md->srcRaw=MIX_MAX; md->weight=-50; md->swtch= DSW_GEA; md->carryTrim=TRIM_OFF;
|
||||
md=setDest(4); md->srcRaw=STK_P3; md->weight= 40; md->carryTrim=TRIM_OFF;
|
||||
|
||||
md=setDest(5); md->srcRaw=CH(9); md->weight= -50;
|
||||
md=setDest(5); md->srcRaw=CH(10); md->weight=-100;
|
||||
md=setDest(5); md->srcRaw=CH(11); md->weight=-100; md->carryTrim=TRIM_OFF;
|
||||
md=setDest(5); md->srcRaw=MIX_CH9; md->weight= -50;
|
||||
md=setDest(5); md->srcRaw=MIX_CH10; md->weight=-100;
|
||||
md=setDest(5); md->srcRaw=MIX_CH11; md->weight=-100; md->carryTrim=TRIM_OFF;
|
||||
|
||||
md=setDest(8); md->srcRaw=SRC_ELE; md->weight= 60;
|
||||
md=setDest(9); md->srcRaw=SRC_AIL; md->weight=-52;
|
||||
md=setDest(9); md->srcRaw=SRC_AIL; md->weight=-52;
|
||||
md=setDest(10); md->srcRaw=SRC_THR; md->weight= 70; md->swtch=DSW_ID0; md->curve=CV(3); md->carryTrim=TRIM_OFF;
|
||||
md=setDest(10); md->srcRaw=SRC_THR; md->weight= 70; md->swtch=DSW_ID1; md->curve=CV(4); md->carryTrim=TRIM_OFF;
|
||||
md=setDest(10); md->srcRaw=SRC_THR; md->weight= 70; md->swtch=DSW_ID2; md->curve=CV(4); md->carryTrim=TRIM_OFF;
|
||||
|
@ -208,9 +208,9 @@ void applyTemplate(uint8_t idx)
|
|||
md=setDest(15); md->srcRaw=MIX_MAX; md->weight=-110; md->swtch=DSW_SW2; md->mltpx=MLTPX_REP;
|
||||
md=setDest(15); md->srcRaw=MIX_MAX; md->weight= 110; md->swtch=DSW_SW3; md->mltpx=MLTPX_REP;
|
||||
|
||||
setSwitch(1,CS_LESS,CH(15),CH(16));
|
||||
setSwitch(2,CS_VPOS,CH(15), 105);
|
||||
setSwitch(3,CS_VNEG,CH(15), -105);
|
||||
setSwitch(1, CS_LESS, CSW_CHOUT_BASE+15, CSW_CHOUT_BASE+16);
|
||||
setSwitch(2, CS_VPOS, CSW_CHOUT_BASE+15, 105);
|
||||
setSwitch(3, CS_VNEG, CSW_CHOUT_BASE+15, -105);
|
||||
break;
|
||||
|
||||
|
||||
|
|
|
@ -69,7 +69,6 @@
|
|||
#define STK_P2 6
|
||||
#define STK_P3 7
|
||||
|
||||
#define CH(x) (CHOUT_BASE+(x))
|
||||
#define CV(x) (CURVE_BASE+(x)-1)
|
||||
#define CC(x) (channel_order(x)) //need to invert this to work with dest
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue