From 4fb8f7b0e7854ddcebe7dffbdf1cc18e27b85e2c Mon Sep 17 00:00:00 2001 From: Krzysiek Egzmont Date: Sun, 1 Oct 2023 12:38:55 +0200 Subject: [PATCH] Spectrum analyzer updated https://github.com/fagci/uv-k5-firmware-fagci-mod/tree/ffe1573a4b6726a9d870f30d8ef567189c95c936 --- app/spectrum.c | 60 ++++++++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 26 deletions(-) diff --git a/app/spectrum.c b/app/spectrum.c index f9f02e5..90a5b28 100644 --- a/app/spectrum.c +++ b/app/spectrum.c @@ -57,8 +57,8 @@ PeakInfo peak; ScanInfo scanInfo; KeyboardState kbd = {KEY_INVALID, KEY_INVALID, 0}; -const char *bwOptions[] = {"25k", "12.5k", "6.25k"}; -const char *modulationTypeOptions[] = {"FM", "AM", "USB"}; +const char *bwOptions[] = {" 25k", "12.5k", "6.25k"}; +const char *modulationTypeOptions[] = {" FM", " AM", "USB"}; const uint8_t modulationTypeTuneSteps[] = {100, 50, 10}; const uint8_t modTypeReg47Values[] = {1, 7, 5}; @@ -66,7 +66,7 @@ SpectrumSettings settings = {STEPS_64, S_STEP_25_0kHz, 80000, 3200, - 0, + 150, true, BK4819_FILTER_BW_WIDE, BK4819_FILTER_BW_WIDE, @@ -259,8 +259,9 @@ static void SetF(uint32_t f) { BK4819_SetFrequency(fMeasure); BK4819_PickRXFilterPathBasedOnFrequency(fMeasure); + uint16_t reg = BK4819_ReadRegister(BK4819_REG_30); BK4819_WriteRegister(BK4819_REG_30, 0); - BK4819_WriteRegister(BK4819_REG_30, 0xbff1); + BK4819_WriteRegister(BK4819_REG_30, reg); } // Spectrum related @@ -294,12 +295,16 @@ static void DeInitSpectrum() { isInitialized = false; } -uint8_t GetBWRegValueForScan() { return scanStepBWRegValues[0]; } +uint8_t GetBWRegValueForScan() { + return scanStepBWRegValues[settings.scanStepIndex]; +} uint16_t GetRssi() { - SYSTICK_DelayUs(settings.scanDelay); - /* while ((BK4819_ReadRegister(0x63) & 0b11111111) >= 255) - ; */ + // SYSTICK_DelayUs(800); + // testing autodelay based on Glitch value + while ((BK4819_ReadRegister(0x63) & 0b11111111) >= 255) { + SYSTICK_DelayUs(100); + } return BK4819_GetRSSI(); } @@ -361,7 +366,9 @@ static void RelaunchScan() { InitScan(); ResetPeak(); ToggleRX(false); +#ifdef SPECTRUM_AUTOMATIC_SQUELCH settings.rssiTriggerLevel = RSSI_MAX_VALUE; +#endif preventKeypress = true; scanInfo.rssiMin = RSSI_MAX_VALUE; } @@ -409,6 +416,7 @@ static void UpdateRssiTriggerLevel(bool inc) { else settings.rssiTriggerLevel -= 2; redrawScreen = true; + redrawStatus = true; } static void UpdateDBMax(bool inc) { @@ -419,8 +427,8 @@ static void UpdateDBMax(bool inc) { } else { return; } - // RelaunchScan(); redrawStatus = true; + redrawScreen = true; SYSTEM_DelayMs(20); } @@ -435,7 +443,7 @@ static void UpdateScanStep(bool inc) { settings.frequencyChangeStep = GetBW() >> 1; RelaunchScan(); ResetBlacklist(); - redrawStatus = true; + redrawScreen = true; } static void UpdateCurrentFreq(bool inc) { @@ -511,7 +519,7 @@ static void ToggleStepsCount() { settings.frequencyChangeStep = GetBW() >> 1; RelaunchScan(); ResetBlacklist(); - redrawStatus = true; + redrawScreen = true; } static void ResetFreqInput() { @@ -584,14 +592,15 @@ static void Blacklist() { // Draw things +// applied x2 to prevent initial rounding uint8_t Rssi2PX(uint16_t rssi, uint8_t pxMin, uint8_t pxMax) { - const int DB_MIN = settings.dbMin; - const int DB_MAX = settings.dbMax; + const int DB_MIN = settings.dbMin << 1; + const int DB_MAX = settings.dbMax << 1; const int DB_RANGE = DB_MAX - DB_MIN; const uint8_t PX_RANGE = pxMax - pxMin; - int dbm = clamp(Rssi2DBm(rssi), DB_MIN, DB_MAX); + int dbm = clamp(rssi - (160 << 1), DB_MIN, DB_MAX); return ((dbm - DB_MIN) * PX_RANGE + DB_RANGE / 2) / DB_RANGE + pxMin; } @@ -610,8 +619,14 @@ static void DrawSpectrum() { } static void DrawStatus() { +#ifdef SPECTRUM_EXTRA_VALUES + sprintf(String, "%d/%d P:%d T:%d", settings.dbMin, settings.dbMax, + Rssi2DBm(peak.rssi), Rssi2DBm(settings.rssiTriggerLevel)); +#else sprintf(String, "%d/%d", settings.dbMin, settings.dbMax); - GUI_DisplaySmallest(String, 0, 2, true, true); +#endif + GUI_DisplaySmallest(String, 0, 1, true, true); + for (int i = 0; i < 4; i++) { BOARD_ADC_GetBatteryInfo(&gBatteryVoltages[i], &gBatteryCurrent); } @@ -653,19 +668,15 @@ static void DrawStatus() { static void DrawF(uint32_t f) { sprintf(String, "%u.%05u", f / 100000, f % 100000); - UI_PrintStringSmall(String, 0, 127, 0); + UI_PrintStringSmall(String, 8, 127, 0); sprintf(String, "%s", modulationTypeOptions[settings.modulationType]); - GUI_DisplaySmallest(String, 115, 1, false, true); + GUI_DisplaySmallest(String, 116, 1, false, true); sprintf(String, "%s", bwOptions[settings.listenBw]); - GUI_DisplaySmallest(String, 107, 7, false, true); + GUI_DisplaySmallest(String, 108, 7, false, true); } static void DrawNums() { - sprintf(String, "P:%d", Rssi2DBm(peak.rssi)); - GUI_DisplaySmallest(String, 32, 8, false, true); - sprintf(String, "T:%d", Rssi2DBm(settings.rssiTriggerLevel)); - GUI_DisplaySmallest(String, 64, 8, false, true); if (currentState == SPECTRUM) { sprintf(String, "%ux", GetStepsCount()); @@ -966,8 +977,6 @@ static void RenderStill() { GUI_DisplaySmallest(String, 4, 25, false, true); sprintf(String, "%d dBm", dbm); GUI_DisplaySmallest(String, 28, 25, false, true); - sprintf(String, "V: %d", scanInfo.rssi); - GUI_DisplaySmallest(String, 64, 25, false, true); if (!monitorMode) { uint8_t x = Rssi2PX(settings.rssiTriggerLevel, 0, 121); @@ -1107,7 +1116,6 @@ static void UpdateListening() { } if (currentState == SPECTRUM) { - SetF(fMeasure); BK4819_WriteRegister(0x43, GetBWRegValueForScan()); Measure(); BK4819_WriteRegister(0x43, listenBWRegValues[settings.listenBw]); @@ -1167,7 +1175,7 @@ void APP_RunSpectrum() { redrawScreen = false; // we will wait until scan done newScanStart = true; - ToggleRX(false); + ToggleRX(true), ToggleRX(false); // hack to prevent noise when squelch off SetModulation(settings.modulationType = MOD_FM); BK4819_SetFilterBandwidth(settings.listenBw = BK4819_FILTER_BW_WIDE, false);