Fix s-meter displaying for overpowering signals

This commit is contained in:
Krzysiek Egzmont
2023-10-27 18:52:06 +02:00
parent f6791395cc
commit 3b3db88e5e

View File

@@ -156,13 +156,14 @@ static void DisplayRSSIBar(const int16_t rssi, const bool now)
const int16_t rssi_dBm = (rssi / 2) - 160; const int16_t rssi_dBm = (rssi / 2) - 160;
const uint8_t s_level = MIN(MAX((rssi_dBm - s0_dBm) / 6, 0), 9); const uint8_t s_level = MIN(MAX((rssi_dBm - s0_dBm) / 6, 0), 9);
uint8_t overS9Bars = MAX(0, 73 + rssi_dBm)/10; uint8_t overS9dBm = MIN(MAX(73 + rssi_dBm, 0), 99);
uint8_t overS9Bars = MIN(overS9dBm/10, 4);
if(overS9Bars == 0) { if(overS9Bars == 0) {
sprintf(str, "% 4d S%d", rssi_dBm, s_level); sprintf(str, "% 4d S%d", rssi_dBm, s_level);
} }
else { else {
sprintf(str, "% 4d %d0", rssi_dBm, overS9Bars); sprintf(str, "% 4d %2d", rssi_dBm, overS9dBm);
memcpy(p_line + 2 + 7*5, &plus, ARRAY_SIZE(plus)); memcpy(p_line + 2 + 7*5, &plus, ARRAY_SIZE(plus));
} }
@@ -172,7 +173,6 @@ static void DisplayRSSIBar(const int16_t rssi, const bool now)
for(uint8_t j = 0; j < 4; j++) for(uint8_t j = 0; j < 4; j++)
p_line[bar_x + i * 5 + j] = (~(0x7F >> (i+1))) & 0x7F; p_line[bar_x + i * 5 + j] = (~(0x7F >> (i+1))) & 0x7F;
} }
overS9Bars = MIN(overS9Bars, 4);
for(uint8_t i = 0; i < overS9Bars; i++) { // +10 hollow bars for(uint8_t i = 0; i < overS9Bars; i++) { // +10 hollow bars
memcpy(p_line + (bar_x + (i + 9) * 5), &hollowBar, ARRAY_SIZE(hollowBar)); memcpy(p_line + (bar_x + (i + 9) * 5), &hollowBar, ARRAY_SIZE(hollowBar));
} }