From 4937d0baba5ed548a952f3ab4602cb27603488b7 Mon Sep 17 00:00:00 2001 From: Armel FAUVEAU Date: Mon, 23 Feb 2026 02:43:30 +0100 Subject: [PATCH] Improve SMeter Calibration --- App/misc.c | 1 + App/misc.h | 1 + App/settings.c | 19 +++++++++------- App/ui/main.c | 55 ++++++++++++----------------------------------- App/ui/main.h | 1 - CMakePresets.json | 2 +- 6 files changed, 28 insertions(+), 51 deletions(-) diff --git a/App/misc.c b/App/misc.c index 00ca1bb9..c4724bcd 100644 --- a/App/misc.c +++ b/App/misc.c @@ -149,6 +149,7 @@ enum BacklightOnRxTx_t gSetting_backlight_on_tx_rx; bool gPowerHigh = false; bool gRemoveOffset = false; #endif + int8_t dBmCorrTable[7] = {-15, -16, -10, -4, -7, -6, -1}; #endif #ifdef ENABLE_AUDIO_BAR diff --git a/App/misc.h b/App/misc.h index e42bcde9..02631d2d 100644 --- a/App/misc.h +++ b/App/misc.h @@ -211,6 +211,7 @@ extern enum BacklightOnRxTx_t gSetting_backlight_on_tx_rx; extern bool gPowerHigh; extern bool gRemoveOffset; #endif + extern int8_t dBmCorrTable[7]; #endif #ifdef ENABLE_AUDIO_BAR diff --git a/App/settings.c b/App/settings.c index b57d47ce..e000c122 100644 --- a/App/settings.c +++ b/App/settings.c @@ -59,7 +59,7 @@ void SETTINGS_InitEEPROM(void) configByte[4] &= (uint8_t)~0x01; // KEY_LOCK = 0 configByte[4] &= (uint8_t)~0x02; // MENU_LOCK = 0 configByte[4] &= (uint8_t)~0x3C; // SET_KEY = 0 - configByte[4] &= (uint8_t)~0x40; // SET_NAV = 0 + //configByte[4] &= (uint8_t)~0x40; // SET_NAV = 0 PY25Q16_WriteBuffer(0x00A000, configByte, sizeof(configByte), false); @@ -97,6 +97,12 @@ void SETTINGS_InitEEPROM(void) if (needsWrite) { PY25Q16_WriteBuffer(0x00A0C8, logoLines, sizeof(logoLines), false); } + + // 5. Reset dBmCorrTable + int8_t buf[7]; + for (uint8_t i = 0; i < 7; i++) + buf[i] = dBmCorrTable[i]; // values from misc.c + PY25Q16_WriteBuffer(0x00A0B9, buf, 7, false); } } @@ -240,13 +246,10 @@ gEeprom.FreqChannel[1] = IS_FREQ_CHANNEL(Data16[5]) ? Data16[5] : (FREQ_CHANNE gEeprom.VOICE_PROMPT = (Data[0] < 3) ? Data[0] : VOICE_PROMPT_ENGLISH; #endif #ifdef ENABLE_RSSI_BAR - if((Data[1] < 200 && Data[1] > 90) && (Data[2] < Data[1]-9 && Data[1] < 160 && Data[2] > 50)) { - gEeprom.S0_LEVEL = Data[1]; - gEeprom.S9_LEVEL = Data[2]; - } - else { - gEeprom.S0_LEVEL = 130; - gEeprom.S9_LEVEL = 76; + for (uint8_t i = 0; i < 7; i++) { + int8_t val = (int8_t)Data[i + 1]; + if (val >= -64 && val <= 64) + dBmCorrTable[i] = val; } #endif diff --git a/App/ui/main.c b/App/ui/main.c index ede9ed5b..44a2a537 100644 --- a/App/ui/main.c +++ b/App/ui/main.c @@ -60,16 +60,6 @@ center_line_t center_line = CENTER_LINE_NONE; } #endif -const int8_t dBmCorrTable[7] = { - -15, // band 1 - -16, // band 2 - -10, // band 3 - -4, // band 4 - -7, // band 5 - -6, // band 6 - -1 // band 7 - }; - const char *VfoStateStr[] = { [VFO_STATE_NORMAL]="", [VFO_STATE_BUSY]="BUSY", @@ -338,38 +328,21 @@ void DisplayRSSIBar(const bool now) #endif + dBmCorrTable[gRxVfo->Band]; - rssi_dBm = -rssi_dBm; + // S9 = -93 dBm, S0 = -141 dBm (IARU standard) + const int16_t s9_dBm = -93; + const int16_t s0_dBm = -141; - // VHF band 2 & 3 strong signal correction - if((gRxVfo->Band == 1 || gRxVfo->Band == 2) && rssi_dBm < 93) { // Band 2 & 3, signal > S9 - if(rssi_dBm <= 63) { - rssi_dBm -= 4; - } - else if(rssi_dBm <= 73) { - rssi_dBm -= 3; - } - else if(rssi_dBm <= 85) { - rssi_dBm -= 1; - } - } - // UHF band 6 strong signal correction - else if(gRxVfo->Band == 5 && rssi_dBm < 93) { // Band 6, signal > S9) - rssi_dBm -= 2; - } - - if(rssi_dBm > 141) rssi_dBm = 141; - if(rssi_dBm < 53) rssi_dBm = 53; - - uint8_t s_level = 0; - uint8_t overS9dBm = 0; + uint8_t s_level = 0; + uint8_t overS9dBm = 0; uint8_t overS9Bars = 0; - if(rssi_dBm >= 93) { - s_level = map(rssi_dBm, 141, 93, 1, 9); - } - else { - s_level = 9; - overS9dBm = map(rssi_dBm, 93, 53, 0, 40); + if (rssi_dBm <= s9_dBm) { + // Signal <= S9 : map between S0 and S9 + s_level = map(rssi_dBm, s0_dBm, s9_dBm, 0, 9); + } else { + // Signal > S9 : compute over-S9 + s_level = 9; + overS9dBm = map(rssi_dBm, s9_dBm, s9_dBm + 40, 0, 40); overS9Bars = map(overS9dBm, 0, 40, 0, 4); } #else @@ -390,12 +363,12 @@ void DisplayRSSIBar(const bool now) #ifdef ENABLE_FEAT_F4HWN if (gSetting_set_gui) { - sprintf(str, "%3d", -rssi_dBm); + sprintf(str, "%3d", rssi_dBm); UI_PrintStringSmallNormal(str, LCD_WIDTH + 8, 0, line - 1); } else { - sprintf(str, "% 4d %s", -rssi_dBm, "dBm"); + sprintf(str, "% 4d %s", rssi_dBm, "dBm"); if(isMainOnly()) GUI_DisplaySmallest(str, 2, 41, false, true); else diff --git a/App/ui/main.h b/App/ui/main.h index 92a1cb36..90fbb9fe 100644 --- a/App/ui/main.h +++ b/App/ui/main.h @@ -36,7 +36,6 @@ enum Vfo_txtr_mode{ typedef enum center_line_t center_line_t; extern center_line_t center_line; -extern const int8_t dBmCorrTable[7]; void UI_DisplayAudioBar(void); void UI_MAIN_TimeSlice500ms(void); diff --git a/CMakePresets.json b/CMakePresets.json index 0701d442..e82784d7 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -70,7 +70,7 @@ "ENABLE_UART_RW_BK_REGS": false, "ENABLE_SWD": false, "VERSION_STRING_1": "v0.22", - "VERSION_STRING_2": "v5.1.0" + "VERSION_STRING_2": "v5.2.0" } }, {