1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-26 17:55:19 +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) { 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_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); 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; uint8_t threshold = 0, thresholdX = 0;
if (g_model.frsky.bars[i].source <= 2) if (g_model.frsky.bars[i].source <= 2)
threshold = g_model.frsky.channels[g_model.frsky.bars[i].source-1].alarms_value[0]; 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; int8_t v1 = cs.v1;
CHECK_INCDEC_MODELVAR(event, cs.v1, v1_min, v1_max); CHECK_INCDEC_MODELVAR(event, cs.v1, v1_min, v1_max);
if (cstate == CS_VOFS) { 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 #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 #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 #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 #endif
} }
break; break;

View file

@ -168,6 +168,9 @@ PACK(typedef struct t_LimitData {
#define MIX_PPM1 34 #define MIX_PPM1 34
#define MIX_PPM8 41 #define MIX_PPM8 41
#define MIX_CH1 42 #define MIX_CH1 42
#define MIX_CH9 50
#define MIX_CH10 51
#define MIX_CH11 52
#define MIX_CH16 57 #define MIX_CH16 57
#define TRIM_ON 0 #define TRIM_ON 0

View file

@ -306,22 +306,22 @@ int16_t getValue(uint8_t i)
#else #else
return 0; return 0;
#endif #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<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<PPM_BASE+NUM_PPM) return g_ppmIns[i-PPM_BASE]*2; else if(i<CSW_PPM_BASE+NUM_PPM) return g_ppmIns[i-CSW_PPM_BASE]*2;
else if(i<CHOUT_BASE+NUM_CHNOUT) return ex_chans[i-CHOUT_BASE]; else if(i<CSW_CHOUT_BASE+NUM_CHNOUT) return ex_chans[i-CSW_CHOUT_BASE];
else if(i<CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS) return s_timerVal[i-CHOUT_BASE-NUM_CHNOUT-1]; else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS) return s_timerVal[i-CSW_CHOUT_BASE-NUM_CHNOUT-1];
#if defined(FRSKY) #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) #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 #endif
#if defined(FRSKY_HUB) #if defined(FRSKY_HUB)
else if(i<CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+4) return (frskyHubData.rpm / 2); else if(i<CSW_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<CSW_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<CSW_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<CSW_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<CSW_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+9) return frskyHubData.minCellVolts;
#endif #endif
#endif #endif
else return 0; else return 0;
@ -384,30 +384,30 @@ bool __getSwitch(int8_t swtch)
#ifdef FRSKY #ifdef FRSKY
#if defined(FRSKY_HUB) #if defined(FRSKY_HUB)
// Fill the threshold array // Fill the threshold array
if (cs.v1 > CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+2) if (cs.v1 > CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+2)
barsThresholds[cs.v1-CHOUT_BASE-NUM_CHNOUT-MAX_TIMERS-3] = 128 + cs.v2; barsThresholds[cs.v1-CSW_CHOUT_BASE-NUM_CHNOUT-MAX_TIMERS-3] = 128 + cs.v2;
// TODO CELL? // TODO CELL?
// FUEL, T1, T2, SPEED // 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); y = (128+cs.v2);
// RPMs // 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; y = (128+cs.v2) * 25;
else else
#endif #endif
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH) #if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
// ALT // 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; y = (128+cs.v2) * 4;
else else
#endif #endif
// Volts // Volts
if (cs.v1 > CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS) if (cs.v1 > CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS)
y = 128+cs.v2; y = 128+cs.v2;
else else
#endif #endif
// Timers // Timers
if (cs.v1 > CHOUT_BASE+NUM_CHNOUT) if (cs.v1 > CSW_CHOUT_BASE+NUM_CHNOUT)
y = 98+cs.v2; y = 98+cs.v2;
else else
y = calc100toRESX(cs.v2); y = calc100toRESX(cs.v2);
@ -1238,13 +1238,12 @@ void perOut(uint8_t phase)
if (k < NUM_STICKS) if (k < NUM_STICKS)
v = anas[k]; //Switch is on. MAX=FULL=512 or value. 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 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-CHOUT_BASE] / 100; v = chans[k-MIX_CH1+1] / 100;
else if (k>=MIX_3POS && k<MIX_3POS+MAX_SWITCH) { else if (k>=MIX_THR-1 && k<=MIX_SWC-1)
v = getSwitch(k-MIX_3POS+1, 0) ? +1024 : -1024; v = getSwitch(k-MIX_THR+1+1, 0) ? +1024 : -1024;
}
else 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 if (md->mixWarn) mixWarning |= 1<<(md->mixWarn-1); // Mix warning

View file

@ -339,10 +339,10 @@ enum EnumKeys {
#define NUM_STICKS 4 #define NUM_STICKS 4
#define NUM_POTS 3 #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_CAL_PPM 4
#define NUM_PPM 8 #define NUM_PPM 8
#define CHOUT_BASE (PPM_BASE+NUM_PPM) #define CSW_CHOUT_BASE (CSW_PPM_BASE+NUM_PPM)
#if defined(FRSKY_HUB) #if defined(FRSKY_HUB)
#define NUM_TELEMETRY 9 #define NUM_TELEMETRY 9

View file

@ -164,12 +164,12 @@ void applyTemplate(uint8_t idx)
clearCurves(); clearCurves();
//Set up Mixes //Set up Mixes
md=setDest(ICC(STK_AIL)); md->srcRaw=CH(9); md->weight= 50; md=setDest(ICC(STK_AIL)); md->srcRaw=MIX_CH9; md->weight= 50;
md=setDest(ICC(STK_AIL)); md->srcRaw=CH(10); md->weight=-100; md=setDest(ICC(STK_AIL)); md->srcRaw=MIX_CH10; 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_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=MIX_CH9; 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_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_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; 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=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(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=MIX_CH9; md->weight= -50;
md=setDest(5); md->srcRaw=CH(10); md->weight=-100; md=setDest(5); md->srcRaw=MIX_CH10; md->weight=-100;
md=setDest(5); md->srcRaw=CH(11); md->weight=-100; md->carryTrim=TRIM_OFF; 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(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_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_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; 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_SW2; md->mltpx=MLTPX_REP;
md=setDest(15); md->srcRaw=MIX_MAX; md->weight= 110; md->swtch=DSW_SW3; 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(1, CS_LESS, CSW_CHOUT_BASE+15, CSW_CHOUT_BASE+16);
setSwitch(2,CS_VPOS,CH(15), 105); setSwitch(2, CS_VPOS, CSW_CHOUT_BASE+15, 105);
setSwitch(3,CS_VNEG,CH(15), -105); setSwitch(3, CS_VNEG, CSW_CHOUT_BASE+15, -105);
break; break;

View file

@ -69,7 +69,6 @@
#define STK_P2 6 #define STK_P2 6
#define STK_P3 7 #define STK_P3 7
#define CH(x) (CHOUT_BASE+(x))
#define CV(x) (CURVE_BASE+(x)-1) #define CV(x) (CURVE_BASE+(x)-1)
#define CC(x) (channel_order(x)) //need to invert this to work with dest #define CC(x) (channel_order(x)) //need to invert this to work with dest