From 5b4f0a0bbb867319a7c06291259ea61d258f9de0 Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Wed, 12 Aug 2015 21:01:37 +0200 Subject: [PATCH] Re #2671: fixes difference between top and main LCD TX battery bars, code made more readable with macros --- radio/releasenotes.txt | 1 + radio/src/gui/9X/lcd.cpp | 2 +- radio/src/gui/9X/view_main.cpp | 16 ++++++++-------- radio/src/gui/Taranis/lcd.cpp | 2 +- radio/src/gui/Taranis/view_main.cpp | 4 +--- radio/src/main_arm.cpp | 3 +-- radio/src/opentx.cpp | 2 +- radio/src/opentx.h | 12 ++++++++++-- radio/src/targets/taranis/top_lcd_driver.cpp | 10 +++++----- 9 files changed, 29 insertions(+), 23 deletions(-) diff --git a/radio/releasenotes.txt b/radio/releasenotes.txt index 050ac9ae4..5e9a31238 100644 --- a/radio/releasenotes.txt +++ b/radio/releasenotes.txt @@ -8,6 +8,7 @@
  • Timers range extended (it was limited to around 9 hours before) (#2702)
  • Fixed: Playing two background sounds at once causes sound to stop (#2704)
  • Several fixes to the SD card manager menu (#2623)
  • +
  • Fixed the difference between top and main LCD TX battery bars on 9Xe (#2671)
  • [Sky9x / 9XR-PRO] diff --git a/radio/src/gui/9X/lcd.cpp b/radio/src/gui/9X/lcd.cpp index de9173505..1c6751f1a 100755 --- a/radio/src/gui/9X/lcd.cpp +++ b/radio/src/gui/9X/lcd.cpp @@ -587,7 +587,7 @@ void drawFilledRect(coord_t x, scoord_t y, coord_t w, coord_t h, uint8_t pat, Lc void lcdDrawTelemetryTopBar() { putsModelName(0, 0, g_model.header.name, g_eeGeneral.currModel, 0); - uint8_t att = (g_vbat100mV < g_eeGeneral.vBatWarn ? BLINK : 0); + uint8_t att = (IS_TXBATT_WARNING() ? BLINK : 0); putsVBat(14*FW,0,att); if (g_model.timers[0].mode) { att = (timersStates[0].val<0 ? BLINK : 0); diff --git a/radio/src/gui/9X/view_main.cpp b/radio/src/gui/9X/view_main.cpp index 3073c633f..fcb69b76c 100644 --- a/radio/src/gui/9X/view_main.cpp +++ b/radio/src/gui/9X/view_main.cpp @@ -208,13 +208,13 @@ void displayBattVoltage() putsVBat(VBATT_X-8, VBATT_Y+1, 0); drawFilledRect(VBATT_X-25, VBATT_Y+9, 22, 5); lcd_vline(VBATT_X-3, VBATT_Y+10, 3); - uint8_t count = limit(2, 20 * (g_vbat100mV - g_eeGeneral.vBatMin - 90) / (30 + g_eeGeneral.vBatMax - g_eeGeneral.vBatMin), 20); + uint8_t count = GET_TXBATT_BARS(); for (uint8_t i=0; i g_eeGeneral.vBatWarn || BLINK_ON_PHASE) + if (!IS_TXBATT_WARNING() || BLINK_ON_PHASE) drawFilledRect(VBATT_X-26, VBATT_Y, 25, 15); #else - LcdFlags att = (g_vbat100mV <= g_eeGeneral.vBatWarn ? BLINK|INVERS : 0) | BIGSIZE; + LcdFlags att = (IS_TXBATT_WARNING() ? BLINK|INVERS : 0) | BIGSIZE; putsVBat(VBATT_X-1, VBATT_Y, att|NO_UNIT); lcd_putc(VBATT_X, VBATTUNIT_Y, 'V'); #endif @@ -223,15 +223,15 @@ void displayBattVoltage() #if defined(PCBSKY9X) void displayVoltageOrAlarm() { - if (g_vbat100mV > g_eeGeneral.vBatWarn && g_eeGeneral.temperatureWarn && getTemperature() >= g_eeGeneral.temperatureWarn) { + if (IS_TXBATT_WARNING()) { + displayBattVoltage(); + } + else if (g_eeGeneral.temperatureWarn && getTemperature() >= g_eeGeneral.temperatureWarn) { putsValueWithUnit(6*FW-1, 2*FH, getTemperature(), UNIT_TEMPERATURE, BLINK|INVERS|DBLSIZE); } - else if (g_vbat100mV > g_eeGeneral.vBatWarn && g_eeGeneral.mAhWarn && (g_eeGeneral.mAhUsed + Current_used * (488 + g_eeGeneral.currentCalib)/8192/36) / 500 >= g_eeGeneral.mAhWarn) { + else if (g_eeGeneral.mAhWarn && (g_eeGeneral.mAhUsed + Current_used * (488 + g_eeGeneral.currentCalib)/8192/36) / 500 >= g_eeGeneral.mAhWarn) { putsValueWithUnit(7*FW-1, 2*FH, (g_eeGeneral.mAhUsed + Current_used*(488 + g_eeGeneral.currentCalib)/8192/36)/10, UNIT_MAH, BLINK|INVERS|DBLSIZE); } - else { - displayBattVoltage(); - } } #else #define displayVoltageOrAlarm() displayBattVoltage() diff --git a/radio/src/gui/Taranis/lcd.cpp b/radio/src/gui/Taranis/lcd.cpp index 6c5b69982..3d5030080 100755 --- a/radio/src/gui/Taranis/lcd.cpp +++ b/radio/src/gui/Taranis/lcd.cpp @@ -547,7 +547,7 @@ void drawFilledRect(coord_t x, scoord_t y, coord_t w, coord_t h, uint8_t pat, Lc void lcdDrawTelemetryTopBar() { putsModelName(0, 0, g_model.header.name, g_eeGeneral.currModel, 0); - uint8_t att = (g_vbat100mV < g_eeGeneral.vBatWarn ? BLINK : 0); + uint8_t att = (IS_TXBATT_WARNING() ? BLINK : 0); putsVBat(16*FW+1,0,att); if (g_model.timers[0].mode) { att = (timersStates[0].val<0 ? BLINK : 0); diff --git a/radio/src/gui/Taranis/view_main.cpp b/radio/src/gui/Taranis/view_main.cpp index 4932ec4c0..4b6f9b256 100755 --- a/radio/src/gui/Taranis/view_main.cpp +++ b/radio/src/gui/Taranis/view_main.cpp @@ -209,7 +209,6 @@ void displayTopBarGauge(coord_t x, int count, bool blinking=false) { if (!blinking || BLINK_ON_PHASE) drawFilledRect(x+1, BAR_Y+2, 11, 5, SOLID, ERASE); - count = min(10, count); for (int i=0; i 0) { diff --git a/radio/src/main_arm.cpp b/radio/src/main_arm.cpp index f8045105a..17369470c 100644 --- a/radio/src/main_arm.cpp +++ b/radio/src/main_arm.cpp @@ -191,8 +191,7 @@ void perMain() setTopSecondTimer(g_eeGeneral.globalTimer + sessionTimer); setTopRssi(TELEMETRY_RSSI()); setTopBatteryValue(g_vbat100mV); - int state = 5 * (g_vbat100mV - g_eeGeneral.vBatMin - 90) / (30 + g_eeGeneral.vBatMax - g_eeGeneral.vBatMin); - setTopBatteryState(state, g_vbat100mV <= g_eeGeneral.vBatWarn); + setTopBatteryState(GET_TXBATT_BARS(), IS_TXBATT_WARNING()); topLcdRefreshEnd(); #endif diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 3ba3a085c..f3f5938f9 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -2054,7 +2054,7 @@ void checkBattery() } else #endif - if (g_vbat100mV <= g_eeGeneral.vBatWarn && g_vbat100mV>50) { + if (IS_TXBATT_WARNING() && g_vbat100mV>50) { AUDIO_TX_BATTERY_LOW(); } #if defined(PCBSKY9X) diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 4b6c424ff..7ef82bdfb 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -1126,8 +1126,16 @@ extern const char eeprom_stamp[]; extern const char vers_stamp[]; #endif -extern uint8_t g_vbat100mV; -#define g_blinkTmr10ms (*(uint8_t*)&g_tmr10ms) +extern uint8_t g_vbat100mV; +#if defined(CPUARM) + #define GET_TXBATT_BARS() (min(10, 10 * (g_vbat100mV - g_eeGeneral.vBatMin - 90) / (30 + g_eeGeneral.vBatMax - g_eeGeneral.vBatMin))) +#else + #define GET_TXBATT_BARS() (limit(2, 20 * (g_vbat100mV - g_eeGeneral.vBatMin - 90) / (30 + g_eeGeneral.vBatMax - g_eeGeneral.vBatMin), 20)) +#endif +#define IS_TXBATT_WARNING() (g_vbat100mV <= g_eeGeneral.vBatWarn) + + +#define g_blinkTmr10ms (*(uint8_t*)&g_tmr10ms) extern uint8_t g_beepCnt; extern uint8_t g_beepVal[5]; diff --git a/radio/src/targets/taranis/top_lcd_driver.cpp b/radio/src/targets/taranis/top_lcd_driver.cpp index ca590d0bd..e6e86c54b 100755 --- a/radio/src/targets/taranis/top_lcd_driver.cpp +++ b/radio/src/targets/taranis/top_lcd_driver.cpp @@ -347,13 +347,13 @@ void setTopBatteryState(int state, uint8_t blinking) Ht1621Data1[4] |= 0x40; // Battery border // TODO this is not working for me, the border is ALWAYS on if (state > 0) Ht1621Data1[7] |= 0x80; - if (state > 1) - Ht1621Data1[9] |= 0x80; if (state > 2) - Ht1621Data1[5] |= 0x80; - if (state > 3) - Ht1621Data1[10] |= 0x80; + Ht1621Data1[9] |= 0x80; if (state > 4) + Ht1621Data1[5] |= 0x80; + if (state > 6) + Ht1621Data1[10] |= 0x80; + if (state > 8) Ht1621Data1[4] |= 0x80; } }