From e5028c88d67d82ef17a5cda00c8f9541321608e5 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Tue, 1 Oct 2024 14:58:43 +0200 Subject: [PATCH] Clear signal bars on BLE device disconnect --- Display.h | 77 +++++++++++++++++++++++++++++-------------------------- 1 file changed, 41 insertions(+), 36 deletions(-) diff --git a/Display.h b/Display.h index 82e6264..d849d85 100644 --- a/Display.h +++ b/Display.h @@ -265,7 +265,7 @@ void draw_battery_bars(int px, int py) { if (pmu_ready) { if (battery_ready) { if (battery_installed) { - float battery_value = battery_percent; + float battery_value = battery_percent; if (battery_state == BATTERY_STATE_CHARGING) { battery_value = charge_tick; @@ -309,47 +309,52 @@ void draw_battery_bars(int px, int py) { #define Q_SNR_MIN_BASE -9.0 #define Q_SNR_MAX 6.0 void draw_quality_bars(int px, int py) { - signed char t_snr = (signed int)last_snr_raw; - int snr_int = (int)t_snr; - float snr_min = Q_SNR_MIN_BASE-(int)lora_sf*Q_SNR_STEP; - float snr_span = (Q_SNR_MAX-snr_min); - float snr = ((int)snr_int) * 0.25; - float quality = ((snr-snr_min)/(snr_span))*100; - if (quality > 100.0) quality = 100.0; - if (quality < 0.0) quality = 0.0; - stat_area.fillRect(px, py, 13, 7, SSD1306_BLACK); - // Serial.printf("Last SNR: %.2f\n, quality: %.2f\n", snr, quality); - if (quality > 0) stat_area.drawLine(px+0*2, py+7, px+0*2, py+6, SSD1306_WHITE); - if (quality > 15) stat_area.drawLine(px+1*2, py+7, px+1*2, py+5, SSD1306_WHITE); - if (quality > 30) stat_area.drawLine(px+2*2, py+7, px+2*2, py+4, SSD1306_WHITE); - if (quality > 45) stat_area.drawLine(px+3*2, py+7, px+3*2, py+3, SSD1306_WHITE); - if (quality > 60) stat_area.drawLine(px+4*2, py+7, px+4*2, py+2, SSD1306_WHITE); - if (quality > 75) stat_area.drawLine(px+5*2, py+7, px+5*2, py+1, SSD1306_WHITE); - if (quality > 90) stat_area.drawLine(px+6*2, py+7, px+6*2, py+0, SSD1306_WHITE); + if (radio_online) { + signed char t_snr = (signed int)last_snr_raw; + int snr_int = (int)t_snr; + float snr_min = Q_SNR_MIN_BASE-(int)lora_sf*Q_SNR_STEP; + float snr_span = (Q_SNR_MAX-snr_min); + float snr = ((int)snr_int) * 0.25; + float quality = ((snr-snr_min)/(snr_span))*100; + if (quality > 100.0) quality = 100.0; + if (quality < 0.0) quality = 0.0; + + // Serial.printf("Last SNR: %.2f\n, quality: %.2f\n", snr, quality); + if (quality > 0) stat_area.drawLine(px+0*2, py+7, px+0*2, py+6, SSD1306_WHITE); + if (quality > 15) stat_area.drawLine(px+1*2, py+7, px+1*2, py+5, SSD1306_WHITE); + if (quality > 30) stat_area.drawLine(px+2*2, py+7, px+2*2, py+4, SSD1306_WHITE); + if (quality > 45) stat_area.drawLine(px+3*2, py+7, px+3*2, py+3, SSD1306_WHITE); + if (quality > 60) stat_area.drawLine(px+4*2, py+7, px+4*2, py+2, SSD1306_WHITE); + if (quality > 75) stat_area.drawLine(px+5*2, py+7, px+5*2, py+1, SSD1306_WHITE); + if (quality > 90) stat_area.drawLine(px+6*2, py+7, px+6*2, py+0, SSD1306_WHITE); + } } #define S_RSSI_MIN -135.0 #define S_RSSI_MAX -75.0 #define S_RSSI_SPAN (S_RSSI_MAX-S_RSSI_MIN) void draw_signal_bars(int px, int py) { - int rssi_val = last_rssi; - if (rssi_val < S_RSSI_MIN) rssi_val = S_RSSI_MIN; - if (rssi_val > S_RSSI_MAX) rssi_val = S_RSSI_MAX; - int signal = ((rssi_val - S_RSSI_MIN)*(1.0/S_RSSI_SPAN))*100.0; - - if (signal > 100.0) signal = 100.0; - if (signal < 0.0) signal = 0.0; - stat_area.fillRect(px, py, 13, 7, SSD1306_BLACK); - // Serial.printf("Last SNR: %.2f\n, quality: %.2f\n", snr, quality); - if (signal > 85) stat_area.drawLine(px+0*2, py+7, px+0*2, py+0, SSD1306_WHITE); - if (signal > 72) stat_area.drawLine(px+1*2, py+7, px+1*2, py+1, SSD1306_WHITE); - if (signal > 59) stat_area.drawLine(px+2*2, py+7, px+2*2, py+2, SSD1306_WHITE); - if (signal > 46) stat_area.drawLine(px+3*2, py+7, px+3*2, py+3, SSD1306_WHITE); - if (signal > 33) stat_area.drawLine(px+4*2, py+7, px+4*2, py+4, SSD1306_WHITE); - if (signal > 20) stat_area.drawLine(px+5*2, py+7, px+5*2, py+5, SSD1306_WHITE); - if (signal > 7) stat_area.drawLine(px+6*2, py+7, px+6*2, py+6, SSD1306_WHITE); + + if (radio_online) { + int rssi_val = last_rssi; + if (rssi_val < S_RSSI_MIN) rssi_val = S_RSSI_MIN; + if (rssi_val > S_RSSI_MAX) rssi_val = S_RSSI_MAX; + int signal = ((rssi_val - S_RSSI_MIN)*(1.0/S_RSSI_SPAN))*100.0; + + if (signal > 100.0) signal = 100.0; + if (signal < 0.0) signal = 0.0; + + // Serial.printf("Last SNR: %.2f\n, quality: %.2f\n", snr, quality); + if (signal > 85) stat_area.drawLine(px+0*2, py+7, px+0*2, py+0, SSD1306_WHITE); + if (signal > 72) stat_area.drawLine(px+1*2, py+7, px+1*2, py+1, SSD1306_WHITE); + if (signal > 59) stat_area.drawLine(px+2*2, py+7, px+2*2, py+2, SSD1306_WHITE); + if (signal > 46) stat_area.drawLine(px+3*2, py+7, px+3*2, py+3, SSD1306_WHITE); + if (signal > 33) stat_area.drawLine(px+4*2, py+7, px+4*2, py+4, SSD1306_WHITE); + if (signal > 20) stat_area.drawLine(px+5*2, py+7, px+5*2, py+5, SSD1306_WHITE); + if (signal > 7) stat_area.drawLine(px+6*2, py+7, px+6*2, py+6, SSD1306_WHITE); + } } #define WF_RSSI_MAX -60 @@ -388,9 +393,9 @@ void draw_stat_area() { draw_lora_icon(45, 8); draw_mw_icon(45, 30); draw_battery_bars(4, 58); + draw_quality_bars(28, 56); + draw_signal_bars(44, 56); if (radio_online) { - draw_quality_bars(28, 56); - draw_signal_bars(44, 56); draw_waterfall(27, 4); } }