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