1
0
Fork 0
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:
bsongis 2012-03-05 15:42:31 +00:00
parent 228fb38b67
commit 5923ed5e1e
7 changed files with 46 additions and 45 deletions

View file

@ -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];

View file

@ -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;

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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;

View file

@ -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