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;
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);