WIP: display detected CSS code during scan range

This commit is contained in:
Armel FAUVEAU committed 2026-05-23 02:40:19 +02:00
1 parent 6cceb26814
commit dbc520cf8d
4 files changed
+95

No files matched your search

+4
View File
@@ -1762,6 +1762,10 @@ void APP_TimeSlice10ms(void)
SCANNER_TimeSlice10ms(); SCANNER_TimeSlice10ms();
#ifdef ENABLE_SCAN_RANGES
CHFRSCANNER_UpdateCssDetection();
#endif
#ifdef ENABLE_AIRCOPY #ifdef ENABLE_AIRCOPY
if (gScreenToDisplay == DISPLAY_AIRCOPY && gAircopyState == AIRCOPY_TRANSFER && gAirCopyIsSendMode == 1) { if (gScreenToDisplay == DISPLAY_AIRCOPY && gAircopyState == AIRCOPY_TRANSFER && gAirCopyIsSendMode == 1) {
if (!AIRCOPY_SendMessage()) { if (!AIRCOPY_SendMessage()) {
+54
View File
@@ -20,6 +20,10 @@ bool gScanPauseMode;
#ifdef ENABLE_SCAN_RANGES #ifdef ENABLE_SCAN_RANGES
uint32_t gScanRangeStart; uint32_t gScanRangeStart;
uint32_t gScanRangeStop; uint32_t gScanRangeStop;
DCS_CodeType_t gScanRangeCssType = CODE_TYPE_OFF;
uint8_t gScanRangeCssCode = 0xFF;
static uint8_t scanRangeCssCandidate = 0xFF;
static uint8_t scanRangeCssHitCount = 0;
#define SCAN_RANGE_SKIP_MAX 32 #define SCAN_RANGE_SKIP_MAX 32
#if (SCAN_RANGE_SKIP_MAX & (SCAN_RANGE_SKIP_MAX - 1)) != 0 #if (SCAN_RANGE_SKIP_MAX & (SCAN_RANGE_SKIP_MAX - 1)) != 0
@@ -182,6 +186,56 @@ bool CHFRSCANNER_HasScanRangeExcludedOrdinal(uint32_t first_ordinal, uint32_t la
return false; return false;
} }
void CHFRSCANNER_UpdateCssDetection(void)
{
if (!gScanRangeStart || !FUNCTION_IsRx())
{
gScanRangeCssType = CODE_TYPE_OFF;
gScanRangeCssCode = 0xFF;
scanRangeCssCandidate = 0xFF;
scanRangeCssHitCount = 0;
return;
}
uint32_t cdcssFreq;
uint16_t ctcssFreq;
const BK4819_CssScanResult_t result = BK4819_GetCxCSSScanResult(&cdcssFreq, &ctcssFreq);
if (result == BK4819_CSS_RESULT_CDCSS)
{
const uint8_t Code = DCS_GetCdcssCode(cdcssFreq);
if (Code != 0xFF && Code != gScanRangeCssCode)
{
gScanRangeCssType = CODE_TYPE_DIGITAL;
gScanRangeCssCode = Code;
scanRangeCssCandidate = 0xFF;
scanRangeCssHitCount = 0;
gUpdateDisplay = true;
}
}
else if (result == BK4819_CSS_RESULT_CTCSS)
{
const uint8_t Code = DCS_GetCtcssCode(ctcssFreq);
if (Code != 0xFF)
{
if (Code == scanRangeCssCandidate)
{
if (++scanRangeCssHitCount >= 2 && Code != gScanRangeCssCode)
{
gScanRangeCssType = CODE_TYPE_CONTINUOUS_TONE;
gScanRangeCssCode = Code;
gUpdateDisplay = true;
}
}
else
{
scanRangeCssCandidate = Code;
scanRangeCssHitCount = 1;
}
}
}
}
#endif #endif
static void CHFRSCANNER_AbortActiveReception(void) static void CHFRSCANNER_AbortActiveReception(void)
+3
View File
@@ -15,8 +15,11 @@ extern bool gScanPauseMode;
#ifdef ENABLE_SCAN_RANGES #ifdef ENABLE_SCAN_RANGES
extern uint32_t gScanRangeStart; extern uint32_t gScanRangeStart;
extern uint32_t gScanRangeStop; extern uint32_t gScanRangeStop;
extern DCS_CodeType_t gScanRangeCssType;
extern uint8_t gScanRangeCssCode;
bool CHFRSCANNER_ExcludeCurrentScanRange(void); bool CHFRSCANNER_ExcludeCurrentScanRange(void);
bool CHFRSCANNER_HasScanRangeExcludedOrdinal(uint32_t first_ordinal, uint32_t last_ordinal); bool CHFRSCANNER_HasScanRangeExcludedOrdinal(uint32_t first_ordinal, uint32_t last_ordinal);
void CHFRSCANNER_UpdateCssDetection(void);
#endif #endif
void CHFRSCANNER_Found(void); void CHFRSCANNER_Found(void);
+34
View File
@@ -1267,6 +1267,16 @@ void UI_DisplayMain(void)
UI_FormatFrequency(gScanRangeStop, String); UI_FormatFrequency(gScanRangeStop, String);
UI_PrintStringSmallNormal(String, 56, 0, line + shift + 1); UI_PrintStringSmallNormal(String, 56, 0, line + shift + 1);
if (!isMainOnly() && gScanRangeCssCode != 0xFF)
{
if (gScanRangeCssType == CODE_TYPE_CONTINUOUS_TONE)
sprintf(String, "CTCSS %u.%uHz", CTCSS_Options[gScanRangeCssCode] / 10, CTCSS_Options[gScanRangeCssCode] % 10);
else
sprintf(String, "DCS D%03o%c", DCS_Options[gScanRangeCssCode],
gScanRangeCssType == CODE_TYPE_REVERSE_DIGITAL ? 'I' : 'N');
UI_PrintStringSmallNormal(String, 6, 0, line + 2);
}
if (!isMainOnly()) if (!isMainOnly())
continue; continue;
} }
@@ -1280,6 +1290,17 @@ void UI_DisplayMain(void)
UI_PrintStringSmallNormal(String, 56, 0, line); UI_PrintStringSmallNormal(String, 56, 0, line);
UI_FormatFrequency(gScanRangeStop, String); UI_FormatFrequency(gScanRangeStop, String);
UI_PrintStringSmallNormal(String, 56, 0, line + 1); UI_PrintStringSmallNormal(String, 56, 0, line + 1);
if (gScanRangeCssCode != 0xFF)
{
if (gScanRangeCssType == CODE_TYPE_CONTINUOUS_TONE)
sprintf(String, "CTCSS:%u.%uHz", CTCSS_Options[gScanRangeCssCode] / 10, CTCSS_Options[gScanRangeCssCode] % 10);
else
sprintf(String, "DCS:D%03o%c", DCS_Options[gScanRangeCssCode],
gScanRangeCssType == CODE_TYPE_REVERSE_DIGITAL ? 'I' : 'N');
UI_PrintStringSmallNormal(String, 2, 0, line + 2);
}
continue; continue;
#endif #endif
} }
@@ -2099,6 +2120,18 @@ void UI_DisplayMain(void)
UI_MAIN_PrintAGC(false); UI_MAIN_PrintAGC(false);
#endif #endif
#if defined(ENABLE_SCAN_RANGES) && defined(ENABLE_FEAT_F4HWN)
if (isMainOnly() && gScanRangeStart && gScanRangeCssCode != 0xFF)
{
if (gScanRangeCssType == CODE_TYPE_CONTINUOUS_TONE)
sprintf(String, "CTCSS %u.%uHz", CTCSS_Options[gScanRangeCssCode] / 10, CTCSS_Options[gScanRangeCssCode] % 10);
else
sprintf(String, "DCS D%03o%c", DCS_Options[gScanRangeCssCode],
gScanRangeCssType == CODE_TYPE_REVERSE_DIGITAL ? 'I' : 'N');
UI_PrintStringSmallNormal(String, 2, 0, 6);
}
#endif
if (center_line == CENTER_LINE_NONE) if (center_line == CENTER_LINE_NONE)
{ // we're free to use the middle line { // we're free to use the middle line
@@ -2152,6 +2185,7 @@ void UI_DisplayMain(void)
else else
#endif #endif
#ifdef ENABLE_RSSI_BAR #ifdef ENABLE_RSSI_BAR
if (rx) { if (rx) {
center_line = CENTER_LINE_RSSI; center_line = CENTER_LINE_RSSI;