]> git.tnoah.ca Git - lora-radio.git/commitdiff
Clear signal bars on BLE device disconnect
authorMark Qvist <mark@unsigned.io>
Tue, 1 Oct 2024 12:58:43 +0000 (14:58 +0200)
committerMark Qvist <mark@unsigned.io>
Tue, 1 Oct 2024 12:58:43 +0000 (14:58 +0200)
Display.h

index 82e6264cd3a8ad65eeb4c5eacea890eae4533c32..d849d85385075b68a034b3fae35ed2f6ffe27fdc 100644 (file)
--- 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);
     }
   }