@@ -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);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user