1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-22 07:45:14 +03:00

Work on timers and the trace function.

The timer2 should be full featured now.
Markers around the splash.
This commit is contained in:
bsongis 2012-01-12 21:08:10 +00:00
parent e96b9d410e
commit 40d36bb0c5
9 changed files with 169 additions and 166 deletions

View file

@ -20,7 +20,11 @@
*/ */
#include "gruvin9x.h" #include "gruvin9x.h"
prog_uchar APM spsMarker[] = { "SPS" };
#include "s9xsplash.lbm" #include "s9xsplash.lbm"
prog_uchar APM speMarker[] = { "SPE" };
#include "menus.h" #include "menus.h"
// MM/SD card Disk IO Support // MM/SD card Disk IO Support
@ -480,7 +484,7 @@ uint8_t keyDown()
return (in); return (in);
} }
#else #else
inline uint8_t keyDown() FORCEINLINE uint8_t keyDown()
{ {
#if defined (PCBV4) #if defined (PCBV4)
return (~PINL) & 0x3F; return (~PINL) & 0x3F;
@ -883,7 +887,7 @@ uint8_t beepAgain = 0;
uint8_t beepAgainOrig = 0; uint8_t beepAgainOrig = 0;
uint8_t beepOn = false; uint8_t beepOn = false;
inline bool checkSlaveMode() FORCEINLINE bool checkSlaveMode()
{ {
// no power -> only phone jack = slave mode // no power -> only phone jack = slave mode
@ -906,177 +910,179 @@ inline bool checkSlaveMode()
} }
uint16_t s_timeCumTot; uint16_t s_timeCumTot;
uint16_t s_timeCumAbs; //laufzeit in 1/16 sec uint16_t s_timeCumThr; // THR in 1/16 sec
uint16_t s_timeCumSw; //laufzeit in 1/16 sec uint16_t s_timeCum16ThrP; // THR% in 1/16 sec
uint16_t s_timeCumThr; //gewichtete laufzeit in 1/16 sec uint8_t s_timerState[2];
uint16_t s_timeCum16ThrP; //gewichtete laufzeit in 1/16 sec
uint8_t s_timerState;
int16_t s_timerVal[2]; int16_t s_timerVal[2];
uint8_t Timer1_pre = 0 ; uint8_t s_timerVal_10ms[2] = {0, 0};
uint8_t Timer2_running = 0 ;
uint8_t Timer2_pre = 0 ;
uint16_t timer2 = 0 ;
uint8_t trimsCheckTimer = 0; uint8_t trimsCheckTimer = 0;
void resetTimer1() void resetTimer(uint8_t idx)
{ {
s_timerState = TMR_OFF; // is changed to RUNNING dep from mode s_timerState[idx] = TMR_OFF; // is changed to RUNNING dep from mode
s_timeCumAbs=0; s_timerVal[idx] = (idx == 0 ? g_model.timer1.val : g_model.timer2.val);
s_timeCumThr=0; s_timerVal_10ms[idx] = 0 ;
s_timeCumSw=0;
s_timeCum16ThrP=0;
Timer1_pre = 0 ;
} }
void resetTimer2() FORCEINLINE void incTimers()
{ {
Timer2_pre = 0 ; static uint8_t lastSwPos[2] = {0, 0};
timer2 = 0 ; static uint16_t s_cnt[2] = {0, 0};
} static uint16_t s_sum[2] = {0, 0};
static uint8_t sw_toggled[2] = {false, false};
static uint16_t s_time_cum_16[2] = {0, 0};
inline void incTimers()
{
TimerData *timer = &g_model.timer1; TimerData *timer = &g_model.timer1;
for (uint8_t i=0; i<1; i++, timer=&g_model.timer2) { for (uint8_t i=0; i<2; i++, timer=&g_model.timer2) {
int8_t tm = timer->mode; int8_t tm = timer->mode;
if (!tm)
continue;
if (s_timerState[i] == TMR_OFF) {
s_timerState[i] = TMR_RUNNING;
s_cnt[i] = 0;
s_sum[i] = 0;
s_time_cum_16[i] = 0;
}
uint8_t atm = abs(tm); uint8_t atm = abs(tm);
// value for time described in timer->mode // value for time described in timer->mode
// OFFABSRUsRU%ELsEL%THsTH%ALsAL%P1P1%P2P2%P3P3% // OFFABSRUsRU%ELsEL%THsTH%ALsAL%P1P1%P2P2%P3P3%
uint16_t val = 0; int16_t val = 0;
if (atm>1 && atm<TMR_VAROFS) { if (atm>1 && atm<TMR_VAROFS) {
val = calibratedStick[CONVERT_MODE(atm/2)-1]; val = calibratedStick[CONVERT_MODE(atm/2)-1];
val = (tm<0 ? RESX-val : val+RESX ) / (RESX/16); val = (tm<0 ? RESX-val : val+RESX ) / (RESX/16);
s_cnt[i]++;
s_sum[i]+=val;
} }
static uint16_t s_time;
static uint16_t s_cnt;
static uint16_t s_sum;
static uint8_t sw_toggled[2] = {false, false};
if (atm>=(TMR_VAROFS+MAX_SWITCH-1)){ // toggeled switch if (atm>=(TMR_VAROFS+MAX_SWITCH-1)){ // toggeled switch
static uint8_t lastSwPos[2] = {0, 0}; if(!(sw_toggled[i] | s_sum[i] | s_cnt[i] | lastSwPos[i])) lastSwPos[i] = tm < 0; // if initializing then init the lastSwPos
if(!(sw_toggled[i] | s_sum | s_cnt | s_time | lastSwPos[i])) lastSwPos[i] = tm < 0; // if initializing then init the lastSwPos
uint8_t swPos = getSwitch(tm>0 ? tm-(TMR_VAROFS+MAX_SWITCH-1-1) : tm+(TMR_VAROFS+MAX_SWITCH-1-1), 0); uint8_t swPos = getSwitch(tm>0 ? tm-(TMR_VAROFS+MAX_SWITCH-1-1) : tm+(TMR_VAROFS+MAX_SWITCH-1-1), 0);
if (swPos && !lastSwPos[i]) sw_toggled[i] = !sw_toggled[i]; // if switch is flipped first time -> change counter state if (swPos && !lastSwPos[i]) sw_toggled[i] = !sw_toggled[i]; // if switch is flipped first time -> change counter state
lastSwPos[i] = swPos; lastSwPos[i] = swPos;
} }
s_cnt++; if ( (s_timerVal_10ms[i] += 1 ) >= 100 ) {
s_sum+=val; s_timerVal_10ms[i] -= 100 ;
if ( (Timer1_pre += 1 ) >= 100 ) { if (timer->val) s_timerVal[0] = timer->val - s_timerVal[0];
Timer1_pre -= 100 ;
s_time += 100;
val = s_sum/s_cnt;
s_sum -= val*s_cnt; //rest
s_cnt = 0;
if (atm<TMR_VAROFS) if (atm==TMRMODE_ABS) {
sw_toggled[i] = false; // not switch - sw timer off s_timerVal[i]++;
else if (atm<(TMR_VAROFS+MAX_SWITCH-1)) }
else if (atm<TMR_VAROFS) {
if (atm&1) {
if (s_cnt[i]) {
val = s_sum[i]/s_cnt[i];
s_sum[i] -= val*s_cnt[i]; //rest
s_cnt[i] = 0;
s_time_cum_16[i] += val/2;
if (s_time_cum_16[i] >= 16) {
s_timerVal[i] ++;
s_time_cum_16[i] -= 16;
}
}
}
else if (val) {
s_timerVal[i]++;
}
}
else if (atm<(TMR_VAROFS+MAX_SWITCH-1)) {
sw_toggled[i] = getSwitch((tm>0 ? tm-(TMR_VAROFS-1) : tm+(TMR_VAROFS-1)), 0); // normal switch sw_toggled[i] = getSwitch((tm>0 ? tm-(TMR_VAROFS-1) : tm+(TMR_VAROFS-1)), 0); // normal switch
}
s_timeCumTot += 1; switch(s_timerState[i])
s_timeCumAbs += 1;
if(val) s_timeCumThr += 1;
if(sw_toggled) s_timeCumSw += 1;
s_timeCum16ThrP += val/2;
s_timerVal[i] = timer->val;
if (atm==TMRMODE_NONE) s_timerState = TMR_OFF;
else if (atm==TMRMODE_ABS) s_timerVal[i] -= s_timeCumAbs;
else if(atm<TMR_VAROFS) s_timerVal[i] -= (atm&1) ? s_timeCum16ThrP/16 : s_timeCumThr;// stick% : stick
else s_timerVal[i] -= s_timeCumSw; //switch
switch(s_timerState)
{ {
case TMR_OFF:
if (tm != TMRMODE_NONE) s_timerState=TMR_RUNNING;
break;
case TMR_RUNNING: case TMR_RUNNING:
if (s_timerVal[i]<=0 && timer->val) s_timerState=TMR_BEEPING; if (timer->val && s_timerVal[i]>=timer->val) s_timerState[i]=TMR_BEEPING;
break; break;
case TMR_BEEPING: case TMR_BEEPING:
if (s_timerVal[i] <= -MAX_ALERT_TIME) s_timerState=TMR_STOPPED; if (s_timerVal[i] >= timer->val + MAX_ALERT_TIME) s_timerState[i]=TMR_STOPPED;
if (timer->val == 0) s_timerState=TMR_RUNNING;
break;
case TMR_STOPPED:
break; break;
} }
static int16_t last_tmr; if (timer->val) s_timerVal[0] = timer->val - s_timerVal[0]; //if counting backwards - display backwards
if (last_tmr != s_timerVal[i]) //beep only if seconds advance
{
if(s_timerState==TMR_RUNNING)
{
if(g_eeGeneral.preBeep && timer->val) // beep when 30, 15, 10, 5,4,3,2,1 seconds remaining
{
if(s_timerVal[i]==30) {beepAgain=2; beepWarn2();} //beep three times
if(s_timerVal[i]==20) {beepAgain=1; beepWarn2();} //beep two times
if(s_timerVal[i]==10) beepWarn2();
if(s_timerVal[i]<= 3) beepWarn2();
if(g_eeGeneral.flashBeep && (s_timerVal[i]==30 || s_timerVal[i]==20 || s_timerVal[i]==10 || s_timerVal[i]<=3))
g_LightOffCounter = FLASH_DURATION;
}
if(g_eeGeneral.minuteBeep && (((timer->dir ? timer->val-s_timerVal[i] : s_timerVal[i])%60)==0)) //short beep every minute
{
beepWarn2();
if(g_eeGeneral.flashBeep) g_LightOffCounter = FLASH_DURATION;
}
}
else if(s_timerState==TMR_BEEPING)
{
beepWarn();
if(g_eeGeneral.flashBeep) g_LightOffCounter = FLASH_DURATION;
}
}
last_tmr = s_timerVal[i];
if(timer->dir) s_timerVal[i] = timer->val-s_timerVal[i]; //if counting backwards - display backwards
} }
} }
if (Timer2_running) { static int16_t last_tmr;
if ( (Timer2_pre += 1 ) >= 100 ) { if (last_tmr != s_timerVal[0]) { // beep only if seconds advance
Timer2_pre -= 100 ; if (s_timerState[0] == TMR_RUNNING) {
timer2 += 1 ; if (g_eeGeneral.preBeep && g_model.timer1.val) { // beep when 30, 15, 10, 5,4,3,2,1 seconds remaining
} if(s_timerVal[0]==30) {beepAgain=2; beepWarn2();} //beep three times
if(s_timerVal[0]==20) {beepAgain=1; beepWarn2();} //beep two times
if(s_timerVal[0]==10) beepWarn2();
if(s_timerVal[0]<= 3) beepWarn2();
if(g_eeGeneral.flashBeep && (s_timerVal[0]==30 || s_timerVal[0]==20 || s_timerVal[0]==10 || s_timerVal[0]<=3))
g_LightOffCounter = FLASH_DURATION;
}
if (g_eeGeneral.minuteBeep && (((timer->val ? timer->val-s_timerVal[0] : s_timerVal[0])%60)==0)) { // short beep every minute
beepWarn2();
if(g_eeGeneral.flashBeep) g_LightOffCounter = FLASH_DURATION;
}
}
else if(s_timerState[0] == TMR_BEEPING)
{
beepWarn();
if(g_eeGeneral.flashBeep) g_LightOffCounter = FLASH_DURATION;
}
last_tmr = s_timerVal[0];
} }
} }
uint8_t s_traceBuf[MAXTRACE]; uint8_t s_traceBuf[MAXTRACE];
uint16_t s_traceWr; uint16_t s_traceWr;
uint16_t s_traceCnt; int8_t s_traceCnt;
inline void trace() // called in perOut - once envery 0.01sec FORCEINLINE void thrTrace() // called in perOut - once envery 0.01sec
{ {
incTimers(); int16_t val = calibratedStick[CONVERT_MODE(3)-1]; // get throttle channel value
uint16_t val = calibratedStick[CONVERT_MODE(3)-1]; // get throttle channel value
val = (g_eeGeneral.throttleReversed ? RESX-val : val+RESX); val = (g_eeGeneral.throttleReversed ? RESX-val : val+RESX);
val /= (RESX/16); // calibrate it val /= (RESX/16); // calibrate it
static uint16_t s_time; static uint16_t s_time_tot;
static uint16_t s_cnt; static uint16_t s_time_trace;
static uint16_t s_sum; static uint8_t s_cnt_1s;
s_cnt++; static uint16_t s_sum_1s;
s_sum+=val; static uint16_t s_cnt_10s;
if((get_tmr10ms()-s_time)<1000) //10 sec static uint16_t s_sum_10s;
return;
s_time= get_tmr10ms(); s_cnt_1s ++;
val = s_sum/s_cnt; s_sum_1s +=val;
s_sum = 0;
s_cnt = 0; uint16_t tmr10ms = get_tmr10ms();
if (tmr10ms - s_time_tot < 100) // 1sec
return;
s_time_tot += 100;
s_timeCumTot += 1;
val = s_sum_1s / s_cnt_1s;
s_timeCum16ThrP += val/2;
if (val) s_timeCumThr += 1;
s_cnt_10s += s_cnt_1s;
s_sum_10s += s_sum_1s;
s_cnt_1s = 0;
s_sum_1s = 0;
if (tmr10ms - s_time_trace < 1000) // 10sec
return;
s_time_trace += 1000;
val = s_sum_10s/s_cnt_10s;
s_sum_10s = 0;
s_cnt_10s = 0;
s_traceCnt++;
s_traceBuf[s_traceWr++] = val; s_traceBuf[s_traceWr++] = val;
if(s_traceWr>=MAXTRACE) s_traceWr=0; if (s_traceWr >= MAXTRACE) s_traceWr=0;
if (s_traceCnt >= 0) s_traceCnt++;
} }
#ifdef HELI #ifdef HELI
@ -1109,7 +1115,7 @@ int32_t act [MAX_MIXERS] = {0};
uint8_t swOn [MAX_MIXERS] = {0}; uint8_t swOn [MAX_MIXERS] = {0};
uint8_t mixWarning; uint8_t mixWarning;
inline void evalTrims(uint8_t phase) FORCEINLINE void evalTrims(uint8_t phase)
{ {
for (uint8_t i=0; i<NUM_STICKS; i++) { for (uint8_t i=0; i<NUM_STICKS; i++) {
// do trim -> throttle trim if applicable // do trim -> throttle trim if applicable
@ -1312,7 +1318,10 @@ void perOut(int16_t *chanOut, uint8_t phase)
for (uint8_t i=CHOUT_BASE; i<NUM_XCHNRAW; i++) anas[i] = chans[i-CHOUT_BASE]; // other mixes previous outputs for (uint8_t i=CHOUT_BASE; i<NUM_XCHNRAW; i++) anas[i] = chans[i-CHOUT_BASE]; // other mixes previous outputs
if(tick10ms) trace(); //trace thr 0..32 (/32) if (tick10ms) {
incTimers();
thrTrace(); // trace thr 0..32 (/32)
}
memset(chans,0,sizeof(chans)); // All outputs to 0 memset(chans,0,sizeof(chans)); // All outputs to 0

View file

@ -488,12 +488,11 @@ extern int16_t getTrimValue(uint8_t phase, uint8_t idx);
extern void setTrimValue(uint8_t phase, uint8_t idx, int16_t trim); extern void setTrimValue(uint8_t phase, uint8_t idx, int16_t trim);
extern uint16_t s_timeCumTot; extern uint16_t s_timeCumTot;
extern uint16_t s_timeCumAbs; //laufzeit in 1/16 sec
extern uint16_t s_timeCumSw; //laufzeit in 1/16 sec
extern uint16_t s_timeCumThr; //gewichtete laufzeit in 1/16 sec extern uint16_t s_timeCumThr; //gewichtete laufzeit in 1/16 sec
extern uint16_t s_timeCum16ThrP; //gewichtete laufzeit in 1/16 sec extern uint16_t s_timeCum16ThrP; //gewichtete laufzeit in 1/16 sec
extern uint8_t s_timerState; extern uint8_t s_timerState[2];
extern int16_t s_timerVal[2]; extern int16_t s_timerVal[2];
extern uint8_t s_timerVal_10ms[2];
extern uint8_t trimsCheckTimer; extern uint8_t trimsCheckTimer;
@ -501,11 +500,7 @@ extern uint8_t trimsCheckTimer;
#define TMR_RUNNING 1 #define TMR_RUNNING 1
#define TMR_BEEPING 2 #define TMR_BEEPING 2
#define TMR_STOPPED 3 #define TMR_STOPPED 3
void resetTimer1(); void resetTimer(uint8_t idx);
extern uint8_t Timer2_running ;
extern uint16_t timer2 ;
void resetTimer2() ;
extern uint8_t g_tmr1Latency_max; extern uint8_t g_tmr1Latency_max;
extern uint8_t g_tmr1Latency_min; extern uint8_t g_tmr1Latency_min;
@ -515,7 +510,7 @@ extern uint16_t g_time_per10;
#define MAXTRACE 120 #define MAXTRACE 120
extern uint8_t s_traceBuf[MAXTRACE]; extern uint8_t s_traceBuf[MAXTRACE];
extern uint16_t s_traceWr; extern uint16_t s_traceWr;
extern uint16_t s_traceCnt; extern int8_t s_traceCnt;
uint16_t getTmr16KHz(); uint16_t getTmr16KHz();
uint16_t stack_free(); uint16_t stack_free();

View file

@ -81,6 +81,7 @@ void doMainScreenGrphics()
} }
} }
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
void displayAltitudeLine(uint8_t x, uint8_t y, uint8_t flags) void displayAltitudeLine(uint8_t x, uint8_t y, uint8_t flags)
{ {
lcd_puts_P(x, y, PSTR("Alt:")); lcd_puts_P(x, y, PSTR("Alt:"));
@ -88,6 +89,7 @@ void displayAltitudeLine(uint8_t x, uint8_t y, uint8_t flags)
lcd_outdezAtt(lcd_lastPos, (flags & DBLSIZE) ? y-FH : y, value, flags|LEFT|UNSIGN); lcd_outdezAtt(lcd_lastPos, (flags & DBLSIZE) ? y-FH : y, value, flags|LEFT|UNSIGN);
lcd_putc(lcd_lastPos, y, 'm') ; lcd_putc(lcd_lastPos, y, 'm') ;
} }
#endif
void menuMainView(uint8_t event) void menuMainView(uint8_t event)
{ {
@ -101,7 +103,7 @@ void menuMainView(uint8_t event)
{ {
case EVT_KEY_BREAK(KEY_MENU): case EVT_KEY_BREAK(KEY_MENU):
if (view_base == e_timer2) { if (view_base == e_timer2) {
Timer2_running = !Timer2_running; // TODO Timer2_running = !Timer2_running;
beepKey(); beepKey();
} }
break; break;
@ -160,11 +162,11 @@ void menuMainView(uint8_t event)
killEvents(event); killEvents(event);
break; break;
case EVT_KEY_FIRST(KEY_EXIT): case EVT_KEY_FIRST(KEY_EXIT):
if(s_timerState==TMR_BEEPING) { if(s_timerState[0]==TMR_BEEPING) {
s_timerState = TMR_STOPPED; s_timerState[0] = TMR_STOPPED;
} }
else if (view == e_timer2) { else if (view == e_timer2) {
resetTimer2(); resetTimer(1);
} }
#ifdef FRSKY #ifdef FRSKY
else if (view_base == e_telemetry) { else if (view_base == e_telemetry) {
@ -172,13 +174,13 @@ void menuMainView(uint8_t event)
} }
#endif #endif
else { else {
resetTimer1(); resetTimer(0);
} }
beepKey(); beepKey();
break; break;
case EVT_KEY_LONG(KEY_EXIT): case EVT_KEY_LONG(KEY_EXIT):
resetTimer1(); resetTimer(0);
resetTimer2(); resetTimer(1);
#ifdef FRSKY #ifdef FRSKY
resetTelemetry(); resetTelemetry();
#endif #endif
@ -206,8 +208,8 @@ void menuMainView(uint8_t event)
putsModelName(0, 0, g_model.name, g_eeGeneral.currModel, 0); putsModelName(0, 0, g_model.name, g_eeGeneral.currModel, 0);
uint8_t att = (g_vbat100mV < g_eeGeneral.vBatWarn ? BLINK : 0); uint8_t att = (g_vbat100mV < g_eeGeneral.vBatWarn ? BLINK : 0);
putsVBat(14*FW,0,att); putsVBat(14*FW,0,att);
if(s_timerState != TMR_OFF){ if (g_model.timer1.mode) {
att = (s_timerState==TMR_BEEPING ? BLINK : 0); att = (s_timerState[0]==TMR_BEEPING ? BLINK : 0);
putsTime(17*FW, 0, s_timerVal[0], att, att); putsTime(17*FW, 0, s_timerVal[0], att, att);
} }
lcd_filled_rect(0, 0, DISPLAY_W, 8); lcd_filled_rect(0, 0, DISPLAY_W, 8);
@ -223,9 +225,9 @@ void menuMainView(uint8_t event)
putsVBat(6*FW-1, 2*FH, att|NO_UNIT); putsVBat(6*FW-1, 2*FH, att|NO_UNIT);
lcd_putc(6*FW, 3*FH, 'V'); lcd_putc(6*FW, 3*FH, 'V');
if (s_timerState != TMR_OFF) { if (g_model.timer1.mode) {
uint8_t att = DBLSIZE | (s_timerState==TMR_BEEPING ? BLINK : 0); uint8_t att = DBLSIZE | (s_timerState[0]==TMR_BEEPING ? BLINK : 0);
putsTime(12*FW+3, FH*2, s_timerVal[0], att,att); putsTime(12*FW+3, FH*2, s_timerVal[0], att, att);
putsTmrMode(s_timerVal[0] >= 0 ? 9*FW-FW/2+5 : 9*FW-FW/2-2, FH*3, g_model.timer1.mode, SHRT_TM_MODE); putsTmrMode(s_timerVal[0] >= 0 ? 9*FW-FW/2+5 : 9*FW-FW/2-2, FH*3, g_model.timer1.mode, SHRT_TM_MODE);
} }
@ -552,7 +554,9 @@ void menuMainView(uint8_t event)
} }
#endif #endif
else { // timer2 else { // timer2
putsTime(33+FW+2, FH*5, timer2, DBLSIZE, DBLSIZE); putsTime(33+FW+2, FH*5, s_timerVal[1], DBLSIZE, DBLSIZE);
putsTmrMode(s_timerVal[1] >= 0 ? 20-FW/2+5 : 20-FW/2-2, FH*6, g_model.timer2.mode, SHRT_TM_MODE);
// lcd_outdezNAtt(33+11*FW, FH*6, s_timerVal_10ms[1], LEADING0, 2); // 1/100s
} }
theFile.DisplayProgressBar(20*FW+1); theFile.DisplayProgressBar(20*FW+1);

View file

@ -387,7 +387,7 @@ void EditName(uint8_t x, uint8_t y, char *name, uint8_t size, uint8_t event, boo
void menuProcModel(uint8_t event) void menuProcModel(uint8_t event)
{ {
lcd_outdezNAtt(7*FW,0,g_eeGeneral.currModel+1,INVERS+LEADING0,2); lcd_outdezNAtt(7*FW,0,g_eeGeneral.currModel+1,INVERS+LEADING0,2);
MENU("SETUP", menuTabModel, e_Model, (g_model.protocol ? 10 : 11), {0,sizeof(g_model.name)-1,3,3,0,0,0,0,6,2,1}); MENU("SETUP", menuTabModel, e_Model, (g_model.protocol ? 10 : 11), {0,sizeof(g_model.name)-1,2,2,0,0,0,0,6,2,1});
uint8_t sub = m_posVert; uint8_t sub = m_posVert;
uint8_t y = 1*FH; uint8_t y = 1*FH;
@ -407,7 +407,6 @@ void menuProcModel(uint8_t event)
putsTime(14*FW-3, y, timer->val, putsTime(14*FW-3, y, timer->val,
(sub==subN && m_posHorz==1 ? ((s_editMode>0) ? BLINK : INVERS):0), (sub==subN && m_posHorz==1 ? ((s_editMode>0) ? BLINK : INVERS):0),
(sub==subN && m_posHorz==2 ? ((s_editMode>0) ? BLINK : INVERS):0) ); (sub==subN && m_posHorz==2 ? ((s_editMode>0) ? BLINK : INVERS):0) );
lcd_putsnAtt(19*FW, y, PSTR("\x7e\x7f")+1-timer->dir,1,sub==subN && m_posHorz==3 ? ((s_editMode>0) ? BLINK : INVERS) : 0);
if (sub==subN && (s_editMode>0 || p1valdiff)) { if (sub==subN && (s_editMode>0 || p1valdiff)) {
uint16_t timer_val = timer->val; uint16_t timer_val = timer->val;
switch (m_posHorz) { switch (m_posHorz) {
@ -429,9 +428,6 @@ void menuProcModel(uint8_t event)
if ((int16_t)timer_val < 0) timer_val=0; if ((int16_t)timer_val < 0) timer_val=0;
break; break;
} }
case 3:
CHECK_INCDEC_MODELVAR(event, timer->dir, 0, 1);
break;
} }
timer->val = timer_val; timer->val = timer_val;
} }

View file

@ -114,7 +114,7 @@ PACK(typedef struct t_LimitData {
int8_t min; int8_t min;
int8_t max; int8_t max;
bool revert; bool revert;
int16_t offset; int16_t offset;
}) LimitData; }) LimitData;
#define MIX_P1 5 #define MIX_P1 5
@ -240,9 +240,7 @@ PACK(typedef struct t_PhaseData {
PACK(typedef struct t_TimerData { PACK(typedef struct t_TimerData {
int8_t mode; // timer trigger source -> off, abs, stk, stk%, sw/!sw, !m_sw/!m_sw int8_t mode; // timer trigger source -> off, abs, stk, stk%, sw/!sw, !m_sw/!m_sw
uint16_t val:14; uint16_t val;
uint16_t persistent:1;
uint16_t dir:1; // 0=>Count Down, 1=>Count Up
}) TimerData; }) TimerData;
PACK(typedef struct t_ModelData { PACK(typedef struct t_ModelData {

View file

@ -102,8 +102,6 @@ uint8_t Translate()
g_model.name[i] = char2idx(g_model.name[i]); g_model.name[i] = char2idx(g_model.name[i]);
g_model.timer1.mode = v3->tmrMode; g_model.timer1.mode = v3->tmrMode;
g_model.timer1.val = v3->tmrVal; g_model.timer1.val = v3->tmrVal;
g_model.timer1.persistent = 0;
g_model.timer1.dir = v3->tmrDir;
g_model.protocol = v3->protocol; g_model.protocol = v3->protocol;
g_model.ppmNCH = v3->ppmNCH; g_model.ppmNCH = v3->ppmNCH;
g_model.thrTrim = v3->thrTrim; g_model.thrTrim = v3->thrTrim;
@ -119,8 +117,6 @@ uint8_t Translate()
g_model.beepANACenter = v3->beepANACenter; g_model.beepANACenter = v3->beepANACenter;
g_model.timer2.mode = 0; g_model.timer2.mode = 0;
g_model.timer2.val = 0; g_model.timer2.val = 0;
g_model.timer2.persistent = 0;
g_model.timer2.dir = 0;
for (uint8_t i=0; i<MAX_MIXERS; i++) { for (uint8_t i=0; i<MAX_MIXERS; i++) {
memmove(&g_model.mixData[i], &v3->mixData[i], sizeof(MixData)); // MixData size changed! memmove(&g_model.mixData[i], &v3->mixData[i], sizeof(MixData)); // MixData size changed!
g_model.mixData[i].mixWarn = g_model.mixData[i].phase; g_model.mixData[i].mixWarn = g_model.mixData[i].phase;
@ -294,8 +290,9 @@ void eeLoadModel(uint8_t id)
eeCheck(true); eeCheck(true);
} }
resetTimer1(); // TODO optim: resetAll()
resetTimer2(); resetTimer(0);
resetTimer(1);
#ifdef FRSKY #ifdef FRSKY
resetTelemetry(); resetTelemetry();
FRSKY_setModelAlarms(); FRSKY_setModelAlarms();

View file

@ -124,7 +124,9 @@ void *main_thread(void *)
while (main_thread_running) { while (main_thread_running) {
perMain(); perMain();
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
frskyHubData.baroAltitude = 500; frskyHubData.baroAltitude = 500;
#endif
sleep(1/*ms*/); sleep(1/*ms*/);
} }

View file

@ -409,7 +409,9 @@ int main(int argc,char **argv)
th9xSim->show(); // Otherwise the main window gets centred across my two monitors, split down the middle. th9xSim->show(); // Otherwise the main window gets centred across my two monitors, split down the middle.
#endif #endif
#ifdef FRSKY
frskyStreaming = 1; frskyStreaming = 1;
#endif
StartEepromThread(); StartEepromThread();
StartMainThread(); StartMainThread();

View file

@ -35,18 +35,18 @@ void menuProcStatistic(uint8_t event)
break; break;
} }
lcd_puts_P( 1*FW, FH*1, PSTR("TME")); lcd_puts_P( 1*FW, FH*1, PSTR("TM1"));
putsTime( 5*FW, FH*1, s_timeCumAbs, 0, 0); putsTime( 5*FW, FH*1, s_timerVal[0], 0, 0);
lcd_puts_P( 17*FW, FH*1, PSTR("TSW")); lcd_puts_P( 17*FW, FH*1, PSTR("TM2"));
putsTime( 11*FW, FH*1, s_timeCumSw, 0, 0); putsTime( 12*FW, FH*1, s_timerVal[1], 0, 0);
lcd_puts_P( 1*FW, FH*2, PSTR("STK")); lcd_puts_P( 1*FW, FH*2, PSTR("STK"));
putsTime( 5*FW, FH*2, s_timeCumThr, 0, 0); putsTime( 5*FW, FH*2, s_timeCumThr, 0, 0);
lcd_puts_P( 17*FW, FH*2, PSTR("ST%")); lcd_puts_P( 17*FW, FH*2, PSTR("ST%"));
putsTime( 11*FW, FH*2, s_timeCum16ThrP/16, 0, 0); putsTime( 12*FW, FH*2, s_timeCum16ThrP/16, 0, 0);
lcd_puts_P( 17*FW, FH*0, PSTR("TOT")); lcd_puts_P( 17*FW, FH*0, PSTR("TOT"));
putsTime( 11*FW, FH*0, s_timeCumTot, 0, 0); putsTime( 12*FW, FH*0, s_timeCumTot, 0, 0);
uint16_t traceRd = s_traceCnt>MAXTRACE ? s_traceWr : 0; uint16_t traceRd = s_traceCnt>MAXTRACE ? s_traceWr : 0;
uint8_t x=5; uint8_t x=5;