#44 Channel/frequency scanner remember last found channel
This commit is contained in:
22
app/app.c
22
app/app.c
@@ -482,27 +482,7 @@ void APP_StartListening(FUNCTION_Type_t Function, const bool reset_am_fix)
|
|||||||
BACKLIGHT_TurnOn();
|
BACKLIGHT_TurnOn();
|
||||||
|
|
||||||
if (gScanStateDir != SCAN_OFF)
|
if (gScanStateDir != SCAN_OFF)
|
||||||
{
|
SCANNER_Found();
|
||||||
switch (gEeprom.SCAN_RESUME_MODE)
|
|
||||||
{
|
|
||||||
case SCAN_RESUME_TO:
|
|
||||||
if (!gScanPauseMode)
|
|
||||||
{
|
|
||||||
gScanPauseDelayIn_10ms = scan_pause_delay_in_1_10ms;
|
|
||||||
gScheduleScanListen = false;
|
|
||||||
gScanPauseMode = true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SCAN_RESUME_CO:
|
|
||||||
case SCAN_RESUME_SE:
|
|
||||||
gScanPauseDelayIn_10ms = 0;
|
|
||||||
gScheduleScanListen = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
gScanKeepResult = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef ENABLE_NOAA
|
#ifdef ENABLE_NOAA
|
||||||
if (IS_NOAA_CHANNEL(gRxVfo->CHANNEL_SAVE) && gIsNoaaMode)
|
if (IS_NOAA_CHANNEL(gRxVfo->CHANNEL_SAVE) && gIsNoaaMode)
|
||||||
|
@@ -53,10 +53,11 @@ typedef enum {
|
|||||||
SCAN_NEXT_NUM
|
SCAN_NEXT_NUM
|
||||||
} scan_next_chan_t;
|
} scan_next_chan_t;
|
||||||
|
|
||||||
|
|
||||||
scan_next_chan_t currentScanList;
|
scan_next_chan_t currentScanList;
|
||||||
uint8_t restoreMrChannel;
|
uint32_t initialFrqOrChan;
|
||||||
uint32_t restoreFrequency;
|
|
||||||
uint8_t initialCROSS_BAND_RX_TX;
|
uint8_t initialCROSS_BAND_RX_TX;
|
||||||
|
uint32_t lastFoundFrqOrChan;
|
||||||
|
|
||||||
static void SCANNER_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
|
static void SCANNER_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
|
||||||
{
|
{
|
||||||
@@ -421,6 +422,37 @@ void SCANNER_Start(void)
|
|||||||
gScanProgressIndicator = 0;
|
gScanProgressIndicator = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SCANNER_Found()
|
||||||
|
{
|
||||||
|
switch (gEeprom.SCAN_RESUME_MODE)
|
||||||
|
{
|
||||||
|
case SCAN_RESUME_TO:
|
||||||
|
if (!gScanPauseMode)
|
||||||
|
{
|
||||||
|
gScanPauseDelayIn_10ms = scan_pause_delay_in_1_10ms;
|
||||||
|
gScheduleScanListen = false;
|
||||||
|
gScanPauseMode = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SCAN_RESUME_CO:
|
||||||
|
case SCAN_RESUME_SE:
|
||||||
|
gScanPauseDelayIn_10ms = 0;
|
||||||
|
gScheduleScanListen = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IS_MR_CHANNEL(gRxVfo->CHANNEL_SAVE)) { //memory scan
|
||||||
|
lastFoundFrqOrChan = gRxVfo->CHANNEL_SAVE;
|
||||||
|
}
|
||||||
|
else { // frequency scan
|
||||||
|
lastFoundFrqOrChan = gRxVfo->freq_config_RX.Frequency;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
gScanKeepResult = true;
|
||||||
|
}
|
||||||
|
|
||||||
void SCANNER_Stop(void)
|
void SCANNER_Stop(void)
|
||||||
{
|
{
|
||||||
if(initialCROSS_BAND_RX_TX != CROSS_BAND_OFF) {
|
if(initialCROSS_BAND_RX_TX != CROSS_BAND_OFF) {
|
||||||
@@ -430,33 +462,30 @@ void SCANNER_Stop(void)
|
|||||||
|
|
||||||
gScanStateDir = SCAN_OFF;
|
gScanStateDir = SCAN_OFF;
|
||||||
|
|
||||||
if (gScanKeepResult) {
|
const uint32_t chFr = gScanKeepResult ? lastFoundFrqOrChan : initialFrqOrChan;
|
||||||
if (IS_MR_CHANNEL(gRxVfo->CHANNEL_SAVE)) {
|
const bool channelChanged = chFr != initialFrqOrChan;
|
||||||
|
if (IS_MR_CHANNEL(gNextMrChannel)) {
|
||||||
|
gEeprom.MrChannel[gEeprom.RX_VFO] = chFr;
|
||||||
|
gEeprom.ScreenChannel[gEeprom.RX_VFO] = chFr;
|
||||||
|
RADIO_ConfigureChannel(gEeprom.RX_VFO, VFO_CONFIGURE_RELOAD);
|
||||||
|
|
||||||
|
if(channelChanged) {
|
||||||
SETTINGS_SaveVfoIndices();
|
SETTINGS_SaveVfoIndices();
|
||||||
gUpdateStatus = true;
|
gUpdateStatus = true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
|
gRxVfo->freq_config_RX.Frequency = chFr;
|
||||||
RADIO_ApplyOffset(gRxVfo);
|
RADIO_ApplyOffset(gRxVfo);
|
||||||
RADIO_ConfigureSquelchAndOutputPower(gRxVfo);
|
RADIO_ConfigureSquelchAndOutputPower(gRxVfo);
|
||||||
|
if(channelChanged) {
|
||||||
SETTINGS_SaveChannel(gRxVfo->CHANNEL_SAVE, gEeprom.RX_VFO, gRxVfo, 1);
|
SETTINGS_SaveChannel(gRxVfo->CHANNEL_SAVE, gEeprom.RX_VFO, gRxVfo, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
if (IS_MR_CHANNEL(gNextMrChannel)) {
|
|
||||||
gEeprom.MrChannel[gEeprom.RX_VFO] = restoreMrChannel;
|
|
||||||
gEeprom.ScreenChannel[gEeprom.RX_VFO] = restoreMrChannel;
|
|
||||||
|
|
||||||
RADIO_ConfigureChannel(gEeprom.RX_VFO, VFO_CONFIGURE_RELOAD);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
gRxVfo->freq_config_RX.Frequency = restoreFrequency;
|
|
||||||
RADIO_ApplyOffset(gRxVfo);
|
|
||||||
RADIO_ConfigureSquelchAndOutputPower(gRxVfo);
|
|
||||||
}
|
|
||||||
RADIO_SetupRegisters(true);
|
RADIO_SetupRegisters(true);
|
||||||
gUpdateDisplay = true;
|
gUpdateDisplay = true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
static void NextFreqChannel(void)
|
static void NextFreqChannel(void)
|
||||||
{
|
{
|
||||||
@@ -472,7 +501,6 @@ static void NextFreqChannel(void)
|
|||||||
gScanPauseDelayIn_10ms = scan_pause_delay_in_6_10ms;
|
gScanPauseDelayIn_10ms = scan_pause_delay_in_6_10ms;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
gScanKeepResult = false;
|
|
||||||
gUpdateDisplay = true;
|
gUpdateDisplay = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -543,9 +571,7 @@ static void NextMemChannel(void)
|
|||||||
chan = RADIO_FindNextChannel(gNextMrChannel + gScanStateDir, gScanStateDir, (gEeprom.SCAN_LIST_DEFAULT < 2) ? true : false, gEeprom.SCAN_LIST_DEFAULT);
|
chan = RADIO_FindNextChannel(gNextMrChannel + gScanStateDir, gScanStateDir, (gEeprom.SCAN_LIST_DEFAULT < 2) ? true : false, gEeprom.SCAN_LIST_DEFAULT);
|
||||||
if (chan == 0xFF)
|
if (chan == 0xFF)
|
||||||
{ // no valid channel found
|
{ // no valid channel found
|
||||||
|
|
||||||
chan = MR_CHANNEL_FIRST;
|
chan = MR_CHANNEL_FIRST;
|
||||||
// return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gNextMrChannel = chan;
|
gNextMrChannel = chan;
|
||||||
@@ -568,8 +594,6 @@ static void NextMemChannel(void)
|
|||||||
gScanPauseDelayIn_10ms = scan_pause_delay_in_3_10ms;
|
gScanPauseDelayIn_10ms = scan_pause_delay_in_3_10ms;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
gScanKeepResult = false;
|
|
||||||
|
|
||||||
if (enabled)
|
if (enabled)
|
||||||
if (++currentScanList >= SCAN_NEXT_NUM)
|
if (++currentScanList >= SCAN_NEXT_NUM)
|
||||||
currentScanList = SCAN_NEXT_CHAN_SCANLIST1; // back round we go
|
currentScanList = SCAN_NEXT_CHAN_SCANLIST1; // back round we go
|
||||||
@@ -580,6 +604,7 @@ void SCANNER_ScanChannels(const bool storeBackupSettings, const int8_t scan_dire
|
|||||||
if (storeBackupSettings) {
|
if (storeBackupSettings) {
|
||||||
initialCROSS_BAND_RX_TX = gEeprom.CROSS_BAND_RX_TX;
|
initialCROSS_BAND_RX_TX = gEeprom.CROSS_BAND_RX_TX;
|
||||||
gEeprom.CROSS_BAND_RX_TX = CROSS_BAND_OFF;
|
gEeprom.CROSS_BAND_RX_TX = CROSS_BAND_OFF;
|
||||||
|
gScanKeepResult = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
RADIO_SelectVfos();
|
RADIO_SelectVfos();
|
||||||
@@ -590,14 +615,18 @@ void SCANNER_ScanChannels(const bool storeBackupSettings, const int8_t scan_dire
|
|||||||
|
|
||||||
if (IS_MR_CHANNEL(gNextMrChannel))
|
if (IS_MR_CHANNEL(gNextMrChannel))
|
||||||
{ // channel mode
|
{ // channel mode
|
||||||
if (storeBackupSettings)
|
if (storeBackupSettings) {
|
||||||
restoreMrChannel = gNextMrChannel;
|
initialFrqOrChan = gRxVfo->CHANNEL_SAVE;
|
||||||
|
lastFoundFrqOrChan = initialFrqOrChan;
|
||||||
|
}
|
||||||
NextMemChannel();
|
NextMemChannel();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // frequency mode
|
{ // frequency mode
|
||||||
if (storeBackupSettings)
|
if (storeBackupSettings) {
|
||||||
restoreFrequency = gRxVfo->freq_config_RX.Frequency;
|
initialFrqOrChan = gRxVfo->freq_config_RX.Frequency;
|
||||||
|
lastFoundFrqOrChan = initialFrqOrChan;
|
||||||
|
}
|
||||||
NextFreqChannel();
|
NextFreqChannel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -605,7 +634,6 @@ void SCANNER_ScanChannels(const bool storeBackupSettings, const int8_t scan_dire
|
|||||||
gScheduleScanListen = false;
|
gScheduleScanListen = false;
|
||||||
gRxReceptionMode = RX_MODE_NONE;
|
gRxReceptionMode = RX_MODE_NONE;
|
||||||
gScanPauseMode = false;
|
gScanPauseMode = false;
|
||||||
gScanKeepResult = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SCANNER_ContinueScanning()
|
void SCANNER_ContinueScanning()
|
||||||
|
@@ -57,6 +57,7 @@ extern bool gScanKeepResult;
|
|||||||
|
|
||||||
void SCANNER_ProcessKeys(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld);
|
void SCANNER_ProcessKeys(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld);
|
||||||
void SCANNER_Start(void);
|
void SCANNER_Start(void);
|
||||||
|
void SCANNER_Found();
|
||||||
void SCANNER_Stop(void);
|
void SCANNER_Stop(void);
|
||||||
void SCANNER_ScanChannels(const bool storeBackupSettings, const int8_t scan_direction);
|
void SCANNER_ScanChannels(const bool storeBackupSettings, const int8_t scan_direction);
|
||||||
void SCANNER_ContinueScanning();
|
void SCANNER_ContinueScanning();
|
||||||
|
Reference in New Issue
Block a user