From a5fef987df9615d3c0c60c00754ba54dea65a49e Mon Sep 17 00:00:00 2001 From: bsongis Date: Fri, 17 Feb 2012 17:01:52 +0000 Subject: [PATCH] Flash saving: around 100bytes (saved in TRAINER menu). UNSTABLE_BANDGAP option removed (always used). Keys react a little better in simu. --- src/Makefile | 10 ---- src/general_menus.cpp | 129 ++++++++++++++++++++---------------------- src/open9x.cpp | 40 +------------ src/open9x.h | 5 -- src/simu.cpp | 2 +- 5 files changed, 64 insertions(+), 122 deletions(-) diff --git a/src/Makefile b/src/Makefile index 79d2edd1f..d837c48d7 100644 --- a/src/Makefile +++ b/src/Makefile @@ -71,10 +71,6 @@ HAPTIC = NO # SPLASH on START SPLASH = YES -# BATT voltage algorithm. -# Values = BANDGAP, UNSTABLE_BANDGAP (default for stock board) -BATT = UNSTABLE_BANDGAP - # Decimals display in the main view (PPM calibration, # Values = YES, NO DECIMALS = YES @@ -311,14 +307,8 @@ else else CPPSRC += beeper.cpp endif - - # If BandGap is not rock solid - ifeq ($(BATT), UNSTABLE_BANDGAP) - CPPDEFS += -DBATT_UNSTABLE_BANDGAP - endif endif - ### Global Build-Option Directives ### ifeq ($(DECIMALS), YES) diff --git a/src/general_menus.cpp b/src/general_menus.cpp index c4d415557..1e71b5e07 100644 --- a/src/general_menus.cpp +++ b/src/general_menus.cpp @@ -421,71 +421,75 @@ void menuProcTrainer(uint8_t event) { MENU(STR_MENUTRAINER, menuTabDiag, e_Trainer, 7, {0, 2, 2, 2, 2, 0/*, 0*/}); - int8_t sub = m_posVert; - uint8_t subSub = m_posHorz; uint8_t y; bool edit; uint8_t blink ; if (SLAVE_MODE) { // i am the slave lcd_puts(7*FW, 3*FH, STR_SLAVE); - return; } + else { + lcd_puts(3*FW, 1*FH, STR_MODESRC); - lcd_puts(3*FW, 1*FH, STR_MODESRC); + y = 2*FH; + blink = (s_editMode>0) ? BLINK : INVERS ; - sub--; - y = 2*FH; - blink = (s_editMode>0) ? BLINK : INVERS ; + for (uint8_t i=1; i<=NUM_STICKS; i++) { + uint8_t chan = channel_order(i); - for (uint8_t i=0; i0); - edit = (sub==i && subSub==0); - lcd_putsnAtt(4*FW, y, STR_TRNMODE+LEN_TRNMODE*td->mode, LEN_TRNMODE, edit ? blink : 0); - if (edit && s_editMode>0) - CHECK_INCDEC_GENVAR(event, td->mode, 0, 2); + switch(j) { + case 0: + lcd_putsnAtt(4*FW, y, STR_TRNMODE+LEN_TRNMODE*td->mode, LEN_TRNMODE, edit ? blink : 0); + if (incdec) + CHECK_INCDEC_GENVAR(event, td->mode, 0, 2); + break; - edit = (sub==i && subSub==1); - lcd_outdezAtt(11*FW, y, td->studWeight, edit ? blink : 0); - if (edit && s_editMode>0) - CHECK_INCDEC_GENVAR(event, td->studWeight, -100, 100); + case 1: + lcd_outdezAtt(11*FW, y, td->studWeight, edit ? blink : 0); + if (incdec) + CHECK_INCDEC_GENVAR(event, td->studWeight, -100, 100); + break; - edit = (sub==i && subSub==2); - lcd_putsnAtt(12*FW, y, STR_TRNCHN+LEN_TRNCHN*td->srcChn, LEN_TRNCHN, edit ? blink : 0); - if (edit && s_editMode>0) - CHECK_INCDEC_GENVAR(event, td->srcChn, 0, 3); + case 2: + lcd_putsnAtt(12*FW, y, STR_TRNCHN+LEN_TRNCHN*td->srcChn, LEN_TRNCHN, edit ? blink : 0); + if (incdec) + CHECK_INCDEC_GENVAR(event, td->srcChn, 0, 3); + break; + } + } + y += FH; + } - edit = (sub==i && subSub==3); + edit = (m_posVert==5); + lcd_puts(0*FW, 6*FH, STR_MULTIPLIER); + lcd_outdezAtt(13*FW, 6*FH, g_eeGeneral.PPM_Multiplier+10, (edit ? INVERS : 0)|PREC1); + if (edit) CHECK_INCDEC_GENVAR(event, g_eeGeneral.PPM_Multiplier, -10, 40); - y += FH; - } - - lcd_puts(0*FW, y, STR_MULTIPLIER); - lcd_outdezAtt(13*FW, y, g_eeGeneral.PPM_Multiplier+10, (sub==4 ? INVERS : 0)|PREC1); - if(sub==4) CHECK_INCDEC_GENVAR(event, g_eeGeneral.PPM_Multiplier, -10, 40); - y += FH; - - edit = (sub==5); - lcd_putsAtt(0*FW, y, STR_CAL, edit ? INVERS : 0); - for (uint8_t i=0; i<4; i++) { - uint8_t x = (i*8+16)*FW/2; + edit = (m_posVert==6); + lcd_putsAtt(0*FW, 7*FH, STR_CAL, edit ? INVERS : 0); + for (uint8_t i=0; i<4; i++) { + uint8_t x = (i*8+16)*FW/2; #if defined (DECIMALS_DISPLAYED) - lcd_outdezAtt(x , y, (g_ppmIns[i]-g_eeGeneral.trainer.calib[i])*2, PREC1); + lcd_outdezAtt(x, 7*FH, (g_ppmIns[i]-g_eeGeneral.trainer.calib[i])*2, PREC1); #else - lcd_outdezAtt(x , y, (g_ppmIns[i]-g_eeGeneral.trainer.calib[i])/5, 0); + lcd_outdezAtt(x, 7*FH, (g_ppmIns[i]-g_eeGeneral.trainer.calib[i])/5, 0); #endif - } + } - if (edit) { - if (event==EVT_KEY_FIRST(KEY_MENU)){ - memcpy(g_eeGeneral.trainer.calib, g_ppmIns, sizeof(g_eeGeneral.trainer.calib)); - eeDirty(EE_GENERAL); - AUDIO_KEYPAD_UP(); + if (edit) { + if (event==EVT_KEY_FIRST(KEY_MENU)){ + memcpy(g_eeGeneral.trainer.calib, g_ppmIns, sizeof(g_eeGeneral.trainer.calib)); + eeDirty(EE_GENERAL); + AUDIO_KEYPAD_UP(); + } } } } @@ -494,11 +498,11 @@ void menuProcDiagVers(uint8_t event) { SIMPLE_MENU(STR_MENUVERSION, menuTabDiag, e_Vers, 1); - lcd_putsLeft( 2*FH,stamp1 ); - lcd_putsLeft( 3*FH,stamp2 ); - lcd_putsLeft( 4*FH,stamp3 ); - lcd_putsLeft( 5*FH,stamp4 ); - lcd_putsLeft( 7*FH,STR_EEPROMV); + lcd_putsLeft(2*FH, stamp1); + lcd_putsLeft(3*FH, stamp2); + lcd_putsLeft(4*FH, stamp3); + lcd_putsLeft(5*FH, stamp4); + lcd_putsLeft(7*FH, STR_EEPROMV); lcd_outdezAtt(8*FW, 7*FH, g_eeGeneral.myVers, LEFT); } @@ -506,8 +510,7 @@ void menuProcDiagKeys(uint8_t event) { SIMPLE_MENU(STR_MENUDIAG, menuTabDiag, e_Keys, 1); - for(uint8_t i=0; i<9; i++) - { + for(uint8_t i=0; i<9; i++) { uint8_t y=i*FH; //+FH; if(i>(SW_ID0-SW_BASE_DIAG)) y-=FH; //overwrite ID0 bool t=keyState((EnumKeys)(SW_BASE_DIAG+i)); @@ -515,8 +518,7 @@ void menuProcDiagKeys(uint8_t event) lcd_putcAtt(11*FW+2, y, t+'0', t ? INVERS : 0); } - for(uint8_t i=0; i<6; i++) - { + for(uint8_t i=0; i<6; i++) { uint8_t y=(5-i)*FH+2*FH; bool t=keyState((EnumKeys)(KEY_MENU+i)); lcd_putsn(0, y, STR_VKEYS+LEN_VKEYS*i, LEN_VKEYS); @@ -532,14 +534,13 @@ void menuProcDiagKeys(uint8_t event) #endif lcd_puts(14*FW, 3*FH, STR_VTRIM); - for(uint8_t i=0; i<4; i++) - { + for(uint8_t i=0; i<4; i++) { uint8_t y=i*FH+FH*4; lcd_img(14*FW, y, sticks,i,0); bool tm=keyState((EnumKeys)(TRM_BASE+2*i)); bool tp=keyState((EnumKeys)(TRM_BASE+2*i+1)); - lcd_putcAtt(18*FW, y, tm+'0',tm ? INVERS : 0); - lcd_putcAtt(20*FW, y, tp+'0',tp ? INVERS : 0); + lcd_putcAtt(18*FW, y, tm+'0', tm ? INVERS : 0); + lcd_putcAtt(20*FW, y, tp+'0', tp ? INVERS : 0); } } @@ -547,27 +548,21 @@ void menuProcDiagAna(uint8_t event) { SIMPLE_MENU(STR_MENUANA, menuTabDiag, e_Ana, 2); - int8_t sub = m_posVert ; - - for(uint8_t i=0; i<8; i++) - { + for (uint8_t i=0; i<8; i++) { uint8_t y=i*FH; putsStrIdx(4*FW, y, PSTR("A"), i+1); lcd_outhex4( 8*FW, y, anaIn(i)); - if(i<7) + if (i<7) lcd_outdez8(17*FW, y, (int32_t)calibratedStick[i]*100/1024); else - putsVolts(17*FW, y, g_vbat100mV, (sub==1 ? INVERS : 0)); + putsVolts(17*FW, y, g_vbat100mV, (m_posVert==1 ? INVERS : 0)); } - // lcd_outdezAtt( 21*FW, 3*FH, g_eeGeneral.vBatCalib, 0) ; - // lcd_outdezAtt( 21*FW, 4*FH, abRunningAvg, 0) ; // Display raw BandGap result (debug) lcd_puts( 19*FW, 5*FH, STR_BG) ; lcd_outdezAtt(21*FW, 6*FH, BandGap, 0); lcd_outdezAtt(21*FW, 7*FH, anaIn(7)*35/512, PREC1); - if(sub==1) CHECK_INCDEC_GENVAR(event, g_eeGeneral.vBatCalib, -127, 127); - + if (m_posVert==1) CHECK_INCDEC_GENVAR(event, g_eeGeneral.vBatCalib, -127, 127); } void menuProcDiagCalib(uint8_t event) diff --git a/src/open9x.cpp b/src/open9x.cpp index 64c0a540a..aa2c704d3 100644 --- a/src/open9x.cpp +++ b/src/open9x.cpp @@ -885,13 +885,7 @@ void getADC_bandgap() #endif // SIMU - -#ifndef BATT_UNSTABLE_BANDGAP -uint16_t abRunningAvg = 0; -uint8_t g_vbat100mV; -#else uint16_t g_vbat100mV = 0; -#endif volatile uint8_t tick10ms = 0; uint16_t g_LightOffCounter; @@ -1735,49 +1729,17 @@ void perMain() case 2: { -/* -Gruvin: - Interesting fault with new unit. Sample is reading 0x06D0 (around 12.3V) but - we're only seeing around 0.2V displayed! (Calibrate = 0) - - Long story short, the higher voltage of the new 8-pack of AA alkaline cells I put in the stock - '9X, plus just a tiny bit of calibration applied, were causing an overflow in the 16-bit math, - causing a wrap-around to a very small voltage. - - See the wiki (VoltageAveraging) if you're interested in my long-winded analysis. -*/ - -#ifndef BATT_UNSTABLE_BANDGAP - // initialize to first sample if on first averaging cycle - if (abRunningAvg == 0) abRunningAvg = anaIn(7); - - // G: Running average (virtual 7 stored plus current sample) for batt volts to stablise display - // Average the raw samples so the calibrartion screen updates instantly - int32_t ab = ((abRunningAvg * 7) + anaIn(7)) / 8; - abRunningAvg = (uint16_t)ab; - - // Calculation By Mike Blandford - // Resistor divide on battery voltage is 5K1 and 2K7 giving a fraction of 2.7/7.8 - // If battery voltage = 10V then A2D voltage = 3.462V - // 11 bit A2D count is 1417 (3.462/5*2048). - // 1417*18/256 = 99 (actually 99.6) to represent 9.9 volts. - // Erring on the side of low is probably best. - - g_vbat100mV = (ab*16 + (ab*g_eeGeneral.vBatCalib)/8)/BandGap; -#else int32_t instant_vbat = anaIn(7); instant_vbat = (instant_vbat*16 + instant_vbat*g_eeGeneral.vBatCalib/8) / BandGap; if (g_vbat100mV == 0 || g_menuStack[0] != menuMainView) g_vbat100mV = instant_vbat; g_vbat100mV = (instant_vbat + g_vbat100mV*7) / 8; -#endif static uint8_t s_batCheck; s_batCheck+=32; - if(s_batCheck==0 && g_vbat100mV50) { + if (s_batCheck==0 && g_vbat100mV50) { AUDIO_ERROR(); if (g_eeGeneral.flashBeep) g_LightOffCounter = FLASH_DURATION; } - } break; } diff --git a/src/open9x.h b/src/open9x.h index bd010ca6b..818f6fd21 100644 --- a/src/open9x.h +++ b/src/open9x.h @@ -619,12 +619,7 @@ extern const char stamp2[]; extern const char stamp3[]; extern const char stamp4[]; -#ifndef BATT_UNSTABLE_BANDGAP -extern uint16_t abRunningAvg; -extern uint8_t g_vbat100mV; -#else extern uint16_t g_vbat100mV; -#endif extern volatile uint16_t g_tmr10ms; extern volatile uint8_t g_blinkTmr10ms; extern uint8_t g_beepCnt; diff --git a/src/simu.cpp b/src/simu.cpp index a760f09d6..49c59110f 100644 --- a/src/simu.cpp +++ b/src/simu.cpp @@ -242,7 +242,7 @@ long Open9xSim::onTimeout(FXObject*,FXSelector,void*) per10ms(); refreshDiplay(); - getApp()->addTimeout(this,2,10); + getApp()->addTimeout(this,2,5); return 0; }