Spectrum analyzer updated

ffe1573a4b
This commit is contained in:
Krzysiek Egzmont
2023-10-01 12:38:55 +02:00
parent 0f210ff872
commit 4fb8f7b0e7

View File

@@ -57,8 +57,8 @@ PeakInfo peak;
ScanInfo scanInfo; ScanInfo scanInfo;
KeyboardState kbd = {KEY_INVALID, KEY_INVALID, 0}; KeyboardState kbd = {KEY_INVALID, KEY_INVALID, 0};
const char *bwOptions[] = {"25k", "12.5k", "6.25k"}; const char *bwOptions[] = {" 25k", "12.5k", "6.25k"};
const char *modulationTypeOptions[] = {"FM", "AM", "USB"}; const char *modulationTypeOptions[] = {" FM", " AM", "USB"};
const uint8_t modulationTypeTuneSteps[] = {100, 50, 10}; const uint8_t modulationTypeTuneSteps[] = {100, 50, 10};
const uint8_t modTypeReg47Values[] = {1, 7, 5}; const uint8_t modTypeReg47Values[] = {1, 7, 5};
@@ -66,7 +66,7 @@ SpectrumSettings settings = {STEPS_64,
S_STEP_25_0kHz, S_STEP_25_0kHz,
80000, 80000,
3200, 3200,
0, 150,
true, true,
BK4819_FILTER_BW_WIDE, BK4819_FILTER_BW_WIDE,
BK4819_FILTER_BW_WIDE, BK4819_FILTER_BW_WIDE,
@@ -259,8 +259,9 @@ static void SetF(uint32_t f) {
BK4819_SetFrequency(fMeasure); BK4819_SetFrequency(fMeasure);
BK4819_PickRXFilterPathBasedOnFrequency(fMeasure); BK4819_PickRXFilterPathBasedOnFrequency(fMeasure);
uint16_t reg = BK4819_ReadRegister(BK4819_REG_30);
BK4819_WriteRegister(BK4819_REG_30, 0); BK4819_WriteRegister(BK4819_REG_30, 0);
BK4819_WriteRegister(BK4819_REG_30, 0xbff1); BK4819_WriteRegister(BK4819_REG_30, reg);
} }
// Spectrum related // Spectrum related
@@ -294,12 +295,16 @@ static void DeInitSpectrum() {
isInitialized = false; isInitialized = false;
} }
uint8_t GetBWRegValueForScan() { return scanStepBWRegValues[0]; } uint8_t GetBWRegValueForScan() {
return scanStepBWRegValues[settings.scanStepIndex];
}
uint16_t GetRssi() { uint16_t GetRssi() {
SYSTICK_DelayUs(settings.scanDelay); // SYSTICK_DelayUs(800);
/* while ((BK4819_ReadRegister(0x63) & 0b11111111) >= 255) // testing autodelay based on Glitch value
; */ while ((BK4819_ReadRegister(0x63) & 0b11111111) >= 255) {
SYSTICK_DelayUs(100);
}
return BK4819_GetRSSI(); return BK4819_GetRSSI();
} }
@@ -361,7 +366,9 @@ static void RelaunchScan() {
InitScan(); InitScan();
ResetPeak(); ResetPeak();
ToggleRX(false); ToggleRX(false);
#ifdef SPECTRUM_AUTOMATIC_SQUELCH
settings.rssiTriggerLevel = RSSI_MAX_VALUE; settings.rssiTriggerLevel = RSSI_MAX_VALUE;
#endif
preventKeypress = true; preventKeypress = true;
scanInfo.rssiMin = RSSI_MAX_VALUE; scanInfo.rssiMin = RSSI_MAX_VALUE;
} }
@@ -409,6 +416,7 @@ static void UpdateRssiTriggerLevel(bool inc) {
else else
settings.rssiTriggerLevel -= 2; settings.rssiTriggerLevel -= 2;
redrawScreen = true; redrawScreen = true;
redrawStatus = true;
} }
static void UpdateDBMax(bool inc) { static void UpdateDBMax(bool inc) {
@@ -419,8 +427,8 @@ static void UpdateDBMax(bool inc) {
} else { } else {
return; return;
} }
// RelaunchScan();
redrawStatus = true; redrawStatus = true;
redrawScreen = true;
SYSTEM_DelayMs(20); SYSTEM_DelayMs(20);
} }
@@ -435,7 +443,7 @@ static void UpdateScanStep(bool inc) {
settings.frequencyChangeStep = GetBW() >> 1; settings.frequencyChangeStep = GetBW() >> 1;
RelaunchScan(); RelaunchScan();
ResetBlacklist(); ResetBlacklist();
redrawStatus = true; redrawScreen = true;
} }
static void UpdateCurrentFreq(bool inc) { static void UpdateCurrentFreq(bool inc) {
@@ -511,7 +519,7 @@ static void ToggleStepsCount() {
settings.frequencyChangeStep = GetBW() >> 1; settings.frequencyChangeStep = GetBW() >> 1;
RelaunchScan(); RelaunchScan();
ResetBlacklist(); ResetBlacklist();
redrawStatus = true; redrawScreen = true;
} }
static void ResetFreqInput() { static void ResetFreqInput() {
@@ -584,14 +592,15 @@ static void Blacklist() {
// Draw things // Draw things
// applied x2 to prevent initial rounding
uint8_t Rssi2PX(uint16_t rssi, uint8_t pxMin, uint8_t pxMax) { uint8_t Rssi2PX(uint16_t rssi, uint8_t pxMin, uint8_t pxMax) {
const int DB_MIN = settings.dbMin; const int DB_MIN = settings.dbMin << 1;
const int DB_MAX = settings.dbMax; const int DB_MAX = settings.dbMax << 1;
const int DB_RANGE = DB_MAX - DB_MIN; const int DB_RANGE = DB_MAX - DB_MIN;
const uint8_t PX_RANGE = pxMax - pxMin; 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; return ((dbm - DB_MIN) * PX_RANGE + DB_RANGE / 2) / DB_RANGE + pxMin;
} }
@@ -610,8 +619,14 @@ static void DrawSpectrum() {
} }
static void DrawStatus() { 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); 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++) { for (int i = 0; i < 4; i++) {
BOARD_ADC_GetBatteryInfo(&gBatteryVoltages[i], &gBatteryCurrent); BOARD_ADC_GetBatteryInfo(&gBatteryVoltages[i], &gBatteryCurrent);
} }
@@ -653,19 +668,15 @@ static void DrawStatus() {
static void DrawF(uint32_t f) { static void DrawF(uint32_t f) {
sprintf(String, "%u.%05u", f / 100000, f % 100000); 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]); 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]); sprintf(String, "%s", bwOptions[settings.listenBw]);
GUI_DisplaySmallest(String, 107, 7, false, true); GUI_DisplaySmallest(String, 108, 7, false, true);
} }
static void DrawNums() { 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) { if (currentState == SPECTRUM) {
sprintf(String, "%ux", GetStepsCount()); sprintf(String, "%ux", GetStepsCount());
@@ -966,8 +977,6 @@ static void RenderStill() {
GUI_DisplaySmallest(String, 4, 25, false, true); GUI_DisplaySmallest(String, 4, 25, false, true);
sprintf(String, "%d dBm", dbm); sprintf(String, "%d dBm", dbm);
GUI_DisplaySmallest(String, 28, 25, false, true); GUI_DisplaySmallest(String, 28, 25, false, true);
sprintf(String, "V: %d", scanInfo.rssi);
GUI_DisplaySmallest(String, 64, 25, false, true);
if (!monitorMode) { if (!monitorMode) {
uint8_t x = Rssi2PX(settings.rssiTriggerLevel, 0, 121); uint8_t x = Rssi2PX(settings.rssiTriggerLevel, 0, 121);
@@ -1107,7 +1116,6 @@ static void UpdateListening() {
} }
if (currentState == SPECTRUM) { if (currentState == SPECTRUM) {
SetF(fMeasure);
BK4819_WriteRegister(0x43, GetBWRegValueForScan()); BK4819_WriteRegister(0x43, GetBWRegValueForScan());
Measure(); Measure();
BK4819_WriteRegister(0x43, listenBWRegValues[settings.listenBw]); BK4819_WriteRegister(0x43, listenBWRegValues[settings.listenBw]);
@@ -1167,7 +1175,7 @@ void APP_RunSpectrum() {
redrawScreen = false; // we will wait until scan done redrawScreen = false; // we will wait until scan done
newScanStart = true; newScanStart = true;
ToggleRX(false); ToggleRX(true), ToggleRX(false); // hack to prevent noise when squelch off
SetModulation(settings.modulationType = MOD_FM); SetModulation(settings.modulationType = MOD_FM);
BK4819_SetFilterBandwidth(settings.listenBw = BK4819_FILTER_BW_WIDE, false); BK4819_SetFilterBandwidth(settings.listenBw = BK4819_FILTER_BW_WIDE, false);