Refactor alarm code
- Fixes Alarms bypassing TX restrictions - Adds enumerations - Makes use of mode ALARM_STATE_SITE_ALARM (formely ALARM_STATE_ALARM) instead checking against ALARM_STATE_TXALARM && ALARM_MODE == ALARM_MODE_TONE all over the place
This commit is contained in:
committed by
Krzysiek Egzmont
parent
103bdf212f
commit
cd032c39d2
39
app/action.c
39
app/action.c
@@ -243,29 +243,32 @@ void ACTION_Scan(bool bRestart)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(ENABLE_ALARM) || defined(ENABLE_TX1750)
|
#if defined(ENABLE_ALARM) || defined(ENABLE_TX1750)
|
||||||
static void ACTION_AlarmOr1750(const bool b1750)
|
static void ACTION_AlarmOr1750(const bool b1750)
|
||||||
{
|
{
|
||||||
(void)b1750;
|
|
||||||
gInputBoxIndex = 0;
|
|
||||||
|
|
||||||
#if defined(ENABLE_ALARM) && defined(ENABLE_TX1750)
|
#if defined(ENABLE_ALARM)
|
||||||
gAlarmState = b1750 ? ALARM_STATE_TX1750 : ALARM_STATE_TXALARM;
|
const AlarmState_t alarm_mode = (gEeprom.ALARM_MODE == ALARM_MODE_TONE) ? ALARM_STATE_TXALARM : ALARM_STATE_SITE_ALARM;
|
||||||
gAlarmRunningCounter = 0;
|
gAlarmRunningCounter = 0;
|
||||||
#elif defined(ENABLE_ALARM)
|
#endif
|
||||||
gAlarmState = ALARM_STATE_TXALARM;
|
|
||||||
gAlarmRunningCounter = 0;
|
|
||||||
#else
|
|
||||||
gAlarmState = ALARM_STATE_TX1750;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
gFlagPrepareTX = true;
|
#if defined(ENABLE_ALARM) && defined(ENABLE_TX1750)
|
||||||
|
gAlarmState = b1750 ? ALARM_STATE_TX1750 : alarm_mode;
|
||||||
|
#elif defined(ENABLE_ALARM)
|
||||||
|
gAlarmState = alarm_mode;
|
||||||
|
#else
|
||||||
|
gAlarmState = ALARM_STATE_TX1750;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (gScreenToDisplay != DISPLAY_MENU) // 1of11 .. don't close the menu
|
(void)b1750;
|
||||||
gRequestDisplayScreen = DISPLAY_MAIN;
|
gInputBoxIndex = 0;
|
||||||
}
|
|
||||||
|
gFlagPrepareTX = gAlarmState != ALARM_STATE_OFF;
|
||||||
|
|
||||||
|
if (gScreenToDisplay != DISPLAY_MENU) // 1of11 .. don't close the menu
|
||||||
|
gRequestDisplayScreen = DISPLAY_MAIN;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef ENABLE_FMRADIO
|
#ifdef ENABLE_FMRADIO
|
||||||
void ACTION_FM(void)
|
void ACTION_FM(void)
|
||||||
{
|
{
|
||||||
|
280
app/app.c
280
app/app.c
@@ -646,36 +646,36 @@ static void CheckRadioInterrupts(void)
|
|||||||
g_CTCSS_Lost = false;
|
g_CTCSS_Lost = false;
|
||||||
|
|
||||||
#ifdef ENABLE_VOX
|
#ifdef ENABLE_VOX
|
||||||
if (interrupt_status_bits & BK4819_REG_02_VOX_LOST)
|
if (interrupt_status_bits & BK4819_REG_02_VOX_LOST)
|
||||||
|
{
|
||||||
|
g_VOX_Lost = true;
|
||||||
|
gVoxPauseCountdown = 10;
|
||||||
|
|
||||||
|
if (gEeprom.VOX_SWITCH)
|
||||||
{
|
{
|
||||||
g_VOX_Lost = true;
|
if (gCurrentFunction == FUNCTION_POWER_SAVE && !gRxIdleMode)
|
||||||
gVoxPauseCountdown = 10;
|
|
||||||
|
|
||||||
if (gEeprom.VOX_SWITCH)
|
|
||||||
{
|
{
|
||||||
if (gCurrentFunction == FUNCTION_POWER_SAVE && !gRxIdleMode)
|
gPowerSave_10ms = power_save2_10ms;
|
||||||
{
|
gPowerSaveCountdownExpired = 0;
|
||||||
gPowerSave_10ms = power_save2_10ms;
|
}
|
||||||
gPowerSaveCountdownExpired = 0;
|
|
||||||
}
|
if (gEeprom.DUAL_WATCH != DUAL_WATCH_OFF && (gScheduleDualWatch || gDualWatchCountdown_10ms < dual_watch_count_after_vox_10ms))
|
||||||
|
{
|
||||||
if (gEeprom.DUAL_WATCH != DUAL_WATCH_OFF && (gScheduleDualWatch || gDualWatchCountdown_10ms < dual_watch_count_after_vox_10ms))
|
gDualWatchCountdown_10ms = dual_watch_count_after_vox_10ms;
|
||||||
{
|
gScheduleDualWatch = false;
|
||||||
gDualWatchCountdown_10ms = dual_watch_count_after_vox_10ms;
|
|
||||||
gScheduleDualWatch = false;
|
// let the user see DW is not active
|
||||||
|
gDualWatchActive = false;
|
||||||
// let the user see DW is not active
|
gUpdateStatus = true;
|
||||||
gDualWatchActive = false;
|
|
||||||
gUpdateStatus = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (interrupt_status_bits & BK4819_REG_02_VOX_FOUND)
|
if (interrupt_status_bits & BK4819_REG_02_VOX_FOUND)
|
||||||
{
|
{
|
||||||
g_VOX_Lost = false;
|
g_VOX_Lost = false;
|
||||||
gVoxPauseCountdown = 0;
|
gVoxPauseCountdown = 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (interrupt_status_bits & BK4819_REG_02_SQUELCH_LOST)
|
if (interrupt_status_bits & BK4819_REG_02_SQUELCH_LOST)
|
||||||
@@ -717,87 +717,86 @@ void APP_EndTransmission(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ENABLE_VOX
|
#ifdef ENABLE_VOX
|
||||||
static void HandleVox(void)
|
static void HandleVox(void)
|
||||||
{
|
{
|
||||||
#ifdef ENABLE_DTMF_CALLING
|
#ifdef ENABLE_DTMF_CALLING
|
||||||
if (gSetting_KILLED)
|
if (gSetting_KILLED)
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (gVoxResumeCountdown == 0)
|
if (gVoxResumeCountdown == 0)
|
||||||
{
|
{
|
||||||
if (gVoxPauseCountdown)
|
if (gVoxPauseCountdown)
|
||||||
return;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
g_VOX_Lost = false;
|
|
||||||
gVoxPauseCountdown = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef ENABLE_FMRADIO
|
|
||||||
if (gFmRadioMode)
|
|
||||||
return;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (gCurrentFunction == FUNCTION_RECEIVE || gCurrentFunction == FUNCTION_MONITOR)
|
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if (gScanStateDir != SCAN_OFF)
|
else
|
||||||
|
{
|
||||||
|
g_VOX_Lost = false;
|
||||||
|
gVoxPauseCountdown = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef ENABLE_FMRADIO
|
||||||
|
if (gFmRadioMode)
|
||||||
return;
|
return;
|
||||||
|
#endif
|
||||||
if (gVOX_NoiseDetected)
|
|
||||||
|
if (gCurrentFunction == FUNCTION_RECEIVE || gCurrentFunction == FUNCTION_MONITOR)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (gScanStateDir != SCAN_OFF)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (gVOX_NoiseDetected)
|
||||||
|
{
|
||||||
|
if (g_VOX_Lost)
|
||||||
|
gVoxStopCountdown_10ms = vox_stop_count_down_10ms;
|
||||||
|
else if (gVoxStopCountdown_10ms == 0)
|
||||||
|
gVOX_NoiseDetected = false;
|
||||||
|
|
||||||
|
if (gCurrentFunction == FUNCTION_TRANSMIT && !gPttIsPressed && !gVOX_NoiseDetected)
|
||||||
{
|
{
|
||||||
if (g_VOX_Lost)
|
if (gFlagEndTransmission)
|
||||||
gVoxStopCountdown_10ms = vox_stop_count_down_10ms;
|
|
||||||
else
|
|
||||||
if (gVoxStopCountdown_10ms == 0)
|
|
||||||
gVOX_NoiseDetected = false;
|
|
||||||
|
|
||||||
if (gCurrentFunction == FUNCTION_TRANSMIT && !gPttIsPressed && !gVOX_NoiseDetected)
|
|
||||||
{
|
{
|
||||||
if (gFlagEndTransmission)
|
//if (gCurrentFunction != FUNCTION_FOREGROUND)
|
||||||
|
FUNCTION_Select(FUNCTION_FOREGROUND);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
APP_EndTransmission();
|
||||||
|
|
||||||
|
if (gEeprom.REPEATER_TAIL_TONE_ELIMINATION == 0)
|
||||||
{
|
{
|
||||||
//if (gCurrentFunction != FUNCTION_FOREGROUND)
|
//if (gCurrentFunction != FUNCTION_FOREGROUND)
|
||||||
FUNCTION_Select(FUNCTION_FOREGROUND);
|
FUNCTION_Select(FUNCTION_FOREGROUND);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
gRTTECountdown = gEeprom.REPEATER_TAIL_TONE_ELIMINATION * 10;
|
||||||
APP_EndTransmission();
|
|
||||||
|
|
||||||
if (gEeprom.REPEATER_TAIL_TONE_ELIMINATION == 0)
|
|
||||||
{
|
|
||||||
//if (gCurrentFunction != FUNCTION_FOREGROUND)
|
|
||||||
FUNCTION_Select(FUNCTION_FOREGROUND);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
gRTTECountdown = gEeprom.REPEATER_TAIL_TONE_ELIMINATION * 10;
|
|
||||||
}
|
|
||||||
|
|
||||||
gUpdateStatus = true;
|
|
||||||
gUpdateDisplay = true;
|
|
||||||
gFlagEndTransmission = false;
|
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
|
gUpdateStatus = true;
|
||||||
|
gUpdateDisplay = true;
|
||||||
|
gFlagEndTransmission = false;
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
if (g_VOX_Lost)
|
}
|
||||||
|
|
||||||
|
if (g_VOX_Lost)
|
||||||
|
{
|
||||||
|
gVOX_NoiseDetected = true;
|
||||||
|
|
||||||
|
if (gCurrentFunction == FUNCTION_POWER_SAVE)
|
||||||
|
FUNCTION_Select(FUNCTION_FOREGROUND);
|
||||||
|
|
||||||
|
if (gCurrentFunction != FUNCTION_TRANSMIT && gSerialConfigCountDown_500ms == 0)
|
||||||
{
|
{
|
||||||
gVOX_NoiseDetected = true;
|
|
||||||
|
|
||||||
if (gCurrentFunction == FUNCTION_POWER_SAVE)
|
|
||||||
FUNCTION_Select(FUNCTION_FOREGROUND);
|
|
||||||
|
|
||||||
if (gCurrentFunction != FUNCTION_TRANSMIT && gSerialConfigCountDown_500ms == 0)
|
|
||||||
{
|
|
||||||
#ifdef ENABLE_DTMF_CALLING
|
#ifdef ENABLE_DTMF_CALLING
|
||||||
gDTMF_ReplyState = DTMF_REPLY_NONE;
|
gDTMF_ReplyState = DTMF_REPLY_NONE;
|
||||||
#endif
|
#endif
|
||||||
RADIO_PrepareTX();
|
RADIO_PrepareTX();
|
||||||
gUpdateDisplay = true;
|
gUpdateDisplay = true;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void APP_Update(void)
|
void APP_Update(void)
|
||||||
@@ -910,23 +909,20 @@ void APP_Update(void)
|
|||||||
HandleVox();
|
HandleVox();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (gSchedulePowerSave)
|
if (gSchedulePowerSave) {
|
||||||
{
|
if (gPttIsPressed ||
|
||||||
if (
|
|
||||||
#ifdef ENABLE_FMRADIO
|
|
||||||
gFmRadioMode ||
|
|
||||||
#endif
|
|
||||||
gPttIsPressed ||
|
|
||||||
gKeyBeingHeld ||
|
gKeyBeingHeld ||
|
||||||
gEeprom.BATTERY_SAVE == 0 ||
|
gEeprom.BATTERY_SAVE == 0 ||
|
||||||
gScanStateDir != SCAN_OFF ||
|
gScanStateDir != SCAN_OFF ||
|
||||||
gCssBackgroundScan ||
|
gCssBackgroundScan ||
|
||||||
gScreenToDisplay != DISPLAY_MAIN
|
gScreenToDisplay != DISPLAY_MAIN
|
||||||
|
#ifdef ENABLE_FMRADIO
|
||||||
|
|| gFmRadioMode
|
||||||
|
#endif
|
||||||
#ifdef ENABLE_DTMF_CALLING
|
#ifdef ENABLE_DTMF_CALLING
|
||||||
|| gDTMF_CallState != DTMF_CALL_STATE_NONE
|
|| gDTMF_CallState != DTMF_CALL_STATE_NONE
|
||||||
#endif
|
#endif
|
||||||
)
|
){
|
||||||
{
|
|
||||||
gBatterySaveCountdown_10ms = battery_save_count_10ms;
|
gBatterySaveCountdown_10ms = battery_save_count_10ms;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -1181,7 +1177,7 @@ void APP_TimeSlice10ms(void)
|
|||||||
if (gCurrentFunction == FUNCTION_TRANSMIT)
|
if (gCurrentFunction == FUNCTION_TRANSMIT)
|
||||||
{
|
{
|
||||||
#ifdef ENABLE_ALARM
|
#ifdef ENABLE_ALARM
|
||||||
if (gAlarmState == ALARM_STATE_TXALARM || gAlarmState == ALARM_STATE_ALARM)
|
if (gAlarmState == ALARM_STATE_TXALARM || gAlarmState == ALARM_STATE_SITE_ALARM)
|
||||||
{
|
{
|
||||||
uint16_t Tone;
|
uint16_t Tone;
|
||||||
|
|
||||||
@@ -1203,7 +1199,7 @@ void APP_TimeSlice10ms(void)
|
|||||||
|
|
||||||
if (gAlarmState == ALARM_STATE_TXALARM)
|
if (gAlarmState == ALARM_STATE_TXALARM)
|
||||||
{
|
{
|
||||||
gAlarmState = ALARM_STATE_ALARM;
|
gAlarmState = ALARM_STATE_SITE_ALARM;
|
||||||
|
|
||||||
RADIO_EnableCxCSS();
|
RADIO_EnableCxCSS();
|
||||||
BK4819_SetupPowerAmplifier(0, 0);
|
BK4819_SetupPowerAmplifier(0, 0);
|
||||||
@@ -1353,14 +1349,14 @@ void APP_TimeSlice500ms(void)
|
|||||||
|
|
||||||
// Skipped authentic device check
|
// Skipped authentic device check
|
||||||
|
|
||||||
#ifdef ENABLE_FMRADIO
|
#ifdef ENABLE_FMRADIO
|
||||||
if (gFmRadioCountdown_500ms > 0)
|
if (gFmRadioCountdown_500ms > 0)
|
||||||
{
|
{
|
||||||
gFmRadioCountdown_500ms--;
|
gFmRadioCountdown_500ms--;
|
||||||
if (gFmRadioMode) // 1of11
|
if (gFmRadioMode) // 1of11
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (gBacklightCountdown_500ms > 0 && !gAskToSave && !gCssBackgroundScan &&
|
if (gBacklightCountdown_500ms > 0 && !gAskToSave && !gCssBackgroundScan &&
|
||||||
// don't turn off backlight if user is in backlight menu option
|
// don't turn off backlight if user is in backlight menu option
|
||||||
@@ -1564,30 +1560,29 @@ void APP_TimeSlice500ms(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined(ENABLE_ALARM) || defined(ENABLE_TX1750)
|
#if defined(ENABLE_ALARM) || defined(ENABLE_TX1750)
|
||||||
static void ALARM_Off(void)
|
static void ALARM_Off(void)
|
||||||
{
|
{
|
||||||
gAlarmState = ALARM_STATE_OFF;
|
AUDIO_AudioPathOff();
|
||||||
|
gEnableSpeaker = false;
|
||||||
|
|
||||||
AUDIO_AudioPathOff();
|
if (gAlarmState == ALARM_STATE_TXALARM) {
|
||||||
gEnableSpeaker = false;
|
RADIO_SendEndOfTransmission();
|
||||||
|
RADIO_EnableCxCSS();
|
||||||
if (gEeprom.ALARM_MODE == ALARM_MODE_TONE)
|
|
||||||
{
|
|
||||||
RADIO_SendEndOfTransmission();
|
|
||||||
RADIO_EnableCxCSS();
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef ENABLE_VOX
|
|
||||||
gVoxResumeCountdown = 80;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
SYSTEM_DelayMs(5);
|
|
||||||
|
|
||||||
RADIO_SetupRegisters(true);
|
|
||||||
|
|
||||||
if (gScreenToDisplay != DISPLAY_MENU) // 1of11 .. don't close the menu
|
|
||||||
gRequestDisplayScreen = DISPLAY_MAIN;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gAlarmState = ALARM_STATE_OFF;
|
||||||
|
|
||||||
|
#ifdef ENABLE_VOX
|
||||||
|
gVoxResumeCountdown = 80;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
SYSTEM_DelayMs(5);
|
||||||
|
|
||||||
|
RADIO_SetupRegisters(true);
|
||||||
|
|
||||||
|
if (gScreenToDisplay != DISPLAY_MENU) // 1of11 .. don't close the menu
|
||||||
|
gRequestDisplayScreen = DISPLAY_MAIN;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@@ -1842,22 +1837,21 @@ static void ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if defined(ENABLE_ALARM) || defined(ENABLE_TX1750)
|
#if defined(ENABLE_ALARM) || defined(ENABLE_TX1750)
|
||||||
|
else if ((!bKeyHeld && bKeyPressed) || (gAlarmState == ALARM_STATE_TX1750 && bKeyHeld && !bKeyPressed))
|
||||||
|
{
|
||||||
|
ALARM_Off();
|
||||||
|
|
||||||
|
if (gEeprom.REPEATER_TAIL_TONE_ELIMINATION == 0)
|
||||||
|
FUNCTION_Select(FUNCTION_FOREGROUND);
|
||||||
else
|
else
|
||||||
if ((!bKeyHeld && bKeyPressed) || (gAlarmState == ALARM_STATE_TX1750 && bKeyHeld && !bKeyPressed))
|
gRTTECountdown = gEeprom.REPEATER_TAIL_TONE_ELIMINATION * 10;
|
||||||
{
|
|
||||||
ALARM_Off();
|
|
||||||
|
|
||||||
if (gEeprom.REPEATER_TAIL_TONE_ELIMINATION == 0)
|
if (Key == KEY_PTT)
|
||||||
FUNCTION_Select(FUNCTION_FOREGROUND);
|
gPttWasPressed = true;
|
||||||
else
|
else
|
||||||
gRTTECountdown = gEeprom.REPEATER_TAIL_TONE_ELIMINATION * 10;
|
if (!bKeyHeld)
|
||||||
|
gPttWasReleased = true;
|
||||||
if (Key == KEY_PTT)
|
}
|
||||||
gPttWasPressed = true;
|
|
||||||
else
|
|
||||||
if (!bKeyHeld)
|
|
||||||
gPttWasReleased = true;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else if (Key != KEY_SIDE1 && Key != KEY_SIDE2) {
|
else if (Key != KEY_SIDE1 && Key != KEY_SIDE2) {
|
||||||
|
79
functions.c
79
functions.c
@@ -174,35 +174,33 @@ void FUNCTION_Select(FUNCTION_Type_t Function)
|
|||||||
gDTMF_RX_live_timeout = 0;
|
gDTMF_RX_live_timeout = 0;
|
||||||
memset(gDTMF_RX_live, 0, sizeof(gDTMF_RX_live));
|
memset(gDTMF_RX_live, 0, sizeof(gDTMF_RX_live));
|
||||||
|
|
||||||
#if defined(ENABLE_FMRADIO)
|
#if defined(ENABLE_FMRADIO)
|
||||||
if (gFmRadioMode)
|
if (gFmRadioMode)
|
||||||
BK1080_Init(0, false);
|
BK1080_Init(0, false);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ENABLE_ALARM
|
#ifdef ENABLE_ALARM
|
||||||
if (gAlarmState == ALARM_STATE_TXALARM && gEeprom.ALARM_MODE != ALARM_MODE_TONE)
|
if (gAlarmState == ALARM_STATE_SITE_ALARM)
|
||||||
{
|
{
|
||||||
gAlarmState = ALARM_STATE_ALARM;
|
GUI_DisplayScreen();
|
||||||
|
|
||||||
GUI_DisplayScreen();
|
AUDIO_AudioPathOff();
|
||||||
|
|
||||||
AUDIO_AudioPathOff();
|
SYSTEM_DelayMs(20);
|
||||||
|
BK4819_PlayTone(500, 0);
|
||||||
|
SYSTEM_DelayMs(2);
|
||||||
|
|
||||||
SYSTEM_DelayMs(20);
|
AUDIO_AudioPathOn();
|
||||||
BK4819_PlayTone(500, 0);
|
|
||||||
SYSTEM_DelayMs(2);
|
|
||||||
|
|
||||||
AUDIO_AudioPathOn();
|
gEnableSpeaker = true;
|
||||||
|
|
||||||
gEnableSpeaker = true;
|
SYSTEM_DelayMs(60);
|
||||||
|
BK4819_ExitTxMute();
|
||||||
|
|
||||||
SYSTEM_DelayMs(60);
|
gAlarmToneCounter = 0;
|
||||||
BK4819_ExitTxMute();
|
break;
|
||||||
|
}
|
||||||
gAlarmToneCounter = 0;
|
#endif
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
gUpdateStatus = true;
|
gUpdateStatus = true;
|
||||||
|
|
||||||
@@ -219,24 +217,25 @@ void FUNCTION_Select(FUNCTION_Type_t Function)
|
|||||||
BK4819_PlaySingleTone(2525, 250, 0, gEeprom.DTMF_SIDE_TONE);
|
BK4819_PlaySingleTone(2525, 250, 0, gEeprom.DTMF_SIDE_TONE);
|
||||||
|
|
||||||
#if defined(ENABLE_ALARM) || defined(ENABLE_TX1750)
|
#if defined(ENABLE_ALARM) || defined(ENABLE_TX1750)
|
||||||
if (gAlarmState != ALARM_STATE_OFF)
|
if (gAlarmState != ALARM_STATE_OFF) {
|
||||||
{
|
#ifdef ENABLE_TX1750
|
||||||
#ifdef ENABLE_TX1750
|
if (gAlarmState == ALARM_STATE_TX1750)
|
||||||
if (gAlarmState == ALARM_STATE_TX1750)
|
BK4819_TransmitTone(true, 1750);
|
||||||
BK4819_TransmitTone(true, 1750);
|
#endif
|
||||||
#endif
|
|
||||||
#ifdef ENABLE_ALARM
|
#ifdef ENABLE_ALARM
|
||||||
if (gAlarmState == ALARM_STATE_TXALARM)
|
if (gAlarmState == ALARM_STATE_TXALARM)
|
||||||
BK4819_TransmitTone(true, 500);
|
BK4819_TransmitTone(true, 500);
|
||||||
#endif
|
|
||||||
SYSTEM_DelayMs(2);
|
gAlarmToneCounter = 0;
|
||||||
AUDIO_AudioPathOn();
|
#endif
|
||||||
#ifdef ENABLE_ALARM
|
|
||||||
gAlarmToneCounter = 0;
|
SYSTEM_DelayMs(2);
|
||||||
#endif
|
AUDIO_AudioPathOn();
|
||||||
gEnableSpeaker = true;
|
gEnableSpeaker = true;
|
||||||
break;
|
|
||||||
}
|
break;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (gCurrentVfo->SCRAMBLING_TYPE > 0 && gSetting_ScrambleEnable)
|
if (gCurrentVfo->SCRAMBLING_TYPE > 0 && gSetting_ScrambleEnable)
|
||||||
|
2
misc.h
2
misc.h
@@ -63,7 +63,7 @@ enum {
|
|||||||
enum AlarmState_t {
|
enum AlarmState_t {
|
||||||
ALARM_STATE_OFF = 0,
|
ALARM_STATE_OFF = 0,
|
||||||
ALARM_STATE_TXALARM,
|
ALARM_STATE_TXALARM,
|
||||||
ALARM_STATE_ALARM,
|
ALARM_STATE_SITE_ALARM,
|
||||||
ALARM_STATE_TX1750
|
ALARM_STATE_TX1750
|
||||||
};
|
};
|
||||||
typedef enum AlarmState_t AlarmState_t;
|
typedef enum AlarmState_t AlarmState_t;
|
||||||
|
134
radio.c
134
radio.c
@@ -42,18 +42,19 @@ VFO_Info_t *gCurrentVfo;
|
|||||||
DCS_CodeType_t gCurrentCodeType;
|
DCS_CodeType_t gCurrentCodeType;
|
||||||
VfoState_t VfoState[2];
|
VfoState_t VfoState[2];
|
||||||
|
|
||||||
const char gModulationStr[][4] =
|
const char gModulationStr[MODULATION_UKNOWN][4] = {
|
||||||
{
|
[MODULATION_FM]="FM",
|
||||||
"FM",
|
[MODULATION_AM]="AM",
|
||||||
"AM",
|
[MODULATION_USB]="USB",
|
||||||
"USB",
|
|
||||||
|
|
||||||
#ifdef ENABLE_BYP_RAW_DEMODULATORS
|
#ifdef ENABLE_BYP_RAW_DEMODULATORS
|
||||||
"BYP",
|
[MODULATION_BYP]="BYP",
|
||||||
"RAW"
|
[MODULATION_RAW]="RAW"
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool RADIO_CheckValidChannel(uint16_t Channel, bool bCheckScanList, uint8_t VFO)
|
bool RADIO_CheckValidChannel(uint16_t Channel, bool bCheckScanList, uint8_t VFO)
|
||||||
{ // return true if the channel appears valid
|
{ // return true if the channel appears valid
|
||||||
|
|
||||||
@@ -955,31 +956,23 @@ void RADIO_SetupAGC(bool listeningAM, bool disable)
|
|||||||
|
|
||||||
void RADIO_SetVfoState(VfoState_t State)
|
void RADIO_SetVfoState(VfoState_t State)
|
||||||
{
|
{
|
||||||
if (State == VFO_STATE_NORMAL)
|
if (State == VFO_STATE_NORMAL) {
|
||||||
{
|
|
||||||
VfoState[0] = VFO_STATE_NORMAL;
|
VfoState[0] = VFO_STATE_NORMAL;
|
||||||
VfoState[1] = VFO_STATE_NORMAL;
|
VfoState[1] = VFO_STATE_NORMAL;
|
||||||
gVFOStateResumeCountdown_500ms = 0;
|
} else if (State == VFO_STATE_VOLTAGE_HIGH) {
|
||||||
}
|
VfoState[0] = VFO_STATE_VOLTAGE_HIGH;
|
||||||
else
|
VfoState[1] = VFO_STATE_TX_DISABLE;
|
||||||
{
|
} else {
|
||||||
if (State == VFO_STATE_VOLTAGE_HIGH)
|
// 1of11
|
||||||
{
|
const unsigned int vfo = (gEeprom.CROSS_BAND_RX_TX == CROSS_BAND_OFF) ? gEeprom.RX_VFO : gEeprom.TX_VFO;
|
||||||
VfoState[0] = VFO_STATE_VOLTAGE_HIGH;
|
VfoState[vfo] = State;
|
||||||
VfoState[1] = VFO_STATE_TX_DISABLE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{ // 1of11
|
|
||||||
const unsigned int vfo = (gEeprom.CROSS_BAND_RX_TX == CROSS_BAND_OFF) ? gEeprom.RX_VFO : gEeprom.TX_VFO;
|
|
||||||
VfoState[vfo] = State;
|
|
||||||
}
|
|
||||||
|
|
||||||
gVFOStateResumeCountdown_500ms = vfo_state_resume_countdown_500ms;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gVFOStateResumeCountdown_500ms = (State == VFO_STATE_NORMAL) ? 0 : vfo_state_resume_countdown_500ms;
|
||||||
gUpdateDisplay = true;
|
gUpdateDisplay = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void RADIO_PrepareTX(void)
|
void RADIO_PrepareTX(void)
|
||||||
{
|
{
|
||||||
VfoState_t State = VFO_STATE_NORMAL; // default to OK to TX
|
VfoState_t State = VFO_STATE_NORMAL; // default to OK to TX
|
||||||
@@ -1004,97 +997,84 @@ void RADIO_PrepareTX(void)
|
|||||||
|
|
||||||
RADIO_SelectCurrentVfo();
|
RADIO_SelectCurrentVfo();
|
||||||
|
|
||||||
#if defined(ENABLE_ALARM) && defined(ENABLE_TX1750)
|
if(TX_freq_check(gCurrentVfo->pTX->Frequency) != 0
|
||||||
if (gAlarmState == ALARM_STATE_OFF ||
|
#if defined(ENABLE_ALARM) || defined(ENABLE_TX1750)
|
||||||
gAlarmState == ALARM_STATE_TX1750 ||
|
&& gAlarmState != ALARM_STATE_SITE_ALARM
|
||||||
(gAlarmState == ALARM_STATE_ALARM && gEeprom.ALARM_MODE == ALARM_MODE_TONE))
|
|
||||||
#elif defined(ENABLE_ALARM)
|
|
||||||
if (gAlarmState == ALARM_STATE_OFF ||
|
|
||||||
(gAlarmState == ALARM_STATE_ALARM && gEeprom.ALARM_MODE == ALARM_MODE_TONE))
|
|
||||||
#elif defined(ENABLE_TX1750)
|
|
||||||
if (gAlarmState == ALARM_STATE_OFF ||
|
|
||||||
gAlarmState == ALARM_STATE_TX1750)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
#ifndef ENABLE_TX_WHEN_AM
|
|
||||||
if (gCurrentVfo->Modulation != MODULATION_FM)
|
|
||||||
{ // not allowed to TX if in AM mode
|
|
||||||
State = VFO_STATE_TX_DISABLE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
#endif
|
||||||
if (gSerialConfigCountDown_500ms > 0)
|
) {
|
||||||
{ // TX is disabled or config upload/download in progress
|
// TX frequency not allowed
|
||||||
State = VFO_STATE_TX_DISABLE;
|
State = VFO_STATE_TX_DISABLE;
|
||||||
}
|
} else if (gSerialConfigCountDown_500ms > 0) {
|
||||||
else
|
// TX is disabled or config upload/download in progress
|
||||||
if (TX_freq_check(gCurrentVfo->pTX->Frequency) == 0)
|
State = VFO_STATE_TX_DISABLE;
|
||||||
{ // TX frequency is allowed
|
} else if (gCurrentVfo->BUSY_CHANNEL_LOCK && gCurrentFunction == FUNCTION_RECEIVE) {
|
||||||
if (gCurrentVfo->BUSY_CHANNEL_LOCK && gCurrentFunction == FUNCTION_RECEIVE)
|
// busy RX'ing a station
|
||||||
State = VFO_STATE_BUSY; // busy RX'ing a station
|
State = VFO_STATE_BUSY;
|
||||||
else
|
} else if (gBatteryDisplayLevel == 0) {
|
||||||
if (gBatteryDisplayLevel == 0)
|
// charge your battery !git co
|
||||||
State = VFO_STATE_BAT_LOW; // charge your battery !
|
State = VFO_STATE_BAT_LOW;
|
||||||
else
|
} else if (gBatteryDisplayLevel > 6) {
|
||||||
if (gBatteryDisplayLevel > 6)
|
// over voltage .. this is being a pain
|
||||||
State = VFO_STATE_VOLTAGE_HIGH; // over voltage .. this is being a pain
|
State = VFO_STATE_VOLTAGE_HIGH;
|
||||||
}
|
|
||||||
else
|
|
||||||
State = VFO_STATE_TX_DISABLE; // TX frequency not allowed
|
|
||||||
}
|
}
|
||||||
|
#ifndef ENABLE_TX_WHEN_AM
|
||||||
|
else if (gCurrentVfo->Modulation != MODULATION_FM) {
|
||||||
|
// not allowed to TX if in AM mode
|
||||||
|
State = VFO_STATE_TX_DISABLE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (State != VFO_STATE_NORMAL)
|
if (State != VFO_STATE_NORMAL) {
|
||||||
{ // TX not allowed
|
// TX not allowed
|
||||||
RADIO_SetVfoState(State);
|
RADIO_SetVfoState(State);
|
||||||
|
|
||||||
#if defined(ENABLE_ALARM) || defined(ENABLE_TX1750)
|
#if defined(ENABLE_ALARM) || defined(ENABLE_TX1750)
|
||||||
gAlarmState = ALARM_STATE_OFF;
|
gAlarmState = ALARM_STATE_OFF;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ENABLE_DTMF_CALLING
|
#ifdef ENABLE_DTMF_CALLING
|
||||||
gDTMF_ReplyState = DTMF_REPLY_NONE;
|
gDTMF_ReplyState = DTMF_REPLY_NONE;
|
||||||
#endif
|
#endif
|
||||||
AUDIO_PlayBeep(BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL);
|
AUDIO_PlayBeep(BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TX is allowed
|
// TX is allowed
|
||||||
|
|
||||||
#ifdef ENABLE_DTMF_CALLING
|
#ifdef ENABLE_DTMF_CALLING
|
||||||
if (gDTMF_ReplyState == DTMF_REPLY_ANI)
|
if (gDTMF_ReplyState == DTMF_REPLY_ANI)
|
||||||
{
|
{
|
||||||
if (gDTMF_CallMode == DTMF_CALL_MODE_DTMF)
|
if (gDTMF_CallMode == DTMF_CALL_MODE_DTMF)
|
||||||
{
|
{
|
||||||
gDTMF_IsTx = true;
|
gDTMF_IsTx = true;
|
||||||
gDTMF_CallState = DTMF_CALL_STATE_NONE;
|
gDTMF_CallState = DTMF_CALL_STATE_NONE;
|
||||||
gDTMF_TxStopCountdown_500ms = DTMF_txstop_countdown_500ms;
|
gDTMF_TxStopCountdown_500ms = DTMF_txstop_countdown_500ms;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
gDTMF_IsTx = false;
|
||||||
gDTMF_CallState = DTMF_CALL_STATE_CALL_OUT;
|
gDTMF_CallState = DTMF_CALL_STATE_CALL_OUT;
|
||||||
gDTMF_IsTx = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
FUNCTION_Select(FUNCTION_TRANSMIT);
|
FUNCTION_Select(FUNCTION_TRANSMIT);
|
||||||
|
|
||||||
gTxTimerCountdown_500ms = 0; // no timeout
|
gTxTimerCountdown_500ms = 0; // no timeout
|
||||||
|
|
||||||
#if defined(ENABLE_ALARM) || defined(ENABLE_TX1750)
|
#if defined(ENABLE_ALARM) || defined(ENABLE_TX1750)
|
||||||
if (gAlarmState == ALARM_STATE_OFF)
|
if (gAlarmState == ALARM_STATE_OFF)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (gEeprom.TX_TIMEOUT_TIMER == 0)
|
if (gEeprom.TX_TIMEOUT_TIMER == 0)
|
||||||
gTxTimerCountdown_500ms = 60; // 30 sec
|
gTxTimerCountdown_500ms = 60; // 30 sec
|
||||||
else
|
else if (gEeprom.TX_TIMEOUT_TIMER < (ARRAY_SIZE(gSubMenu_TOT) - 1))
|
||||||
if (gEeprom.TX_TIMEOUT_TIMER < (ARRAY_SIZE(gSubMenu_TOT) - 1))
|
|
||||||
gTxTimerCountdown_500ms = 120 * gEeprom.TX_TIMEOUT_TIMER; // minutes
|
gTxTimerCountdown_500ms = 120 * gEeprom.TX_TIMEOUT_TIMER; // minutes
|
||||||
else
|
else
|
||||||
gTxTimerCountdown_500ms = 120 * 15; // 15 minutes
|
gTxTimerCountdown_500ms = 120 * 15; // 15 minutes
|
||||||
}
|
}
|
||||||
gTxTimeoutReached = false;
|
|
||||||
|
|
||||||
|
gTxTimeoutReached = false;
|
||||||
gFlagEndTransmission = false;
|
gFlagEndTransmission = false;
|
||||||
gRTTECountdown = 0;
|
gRTTECountdown = 0;
|
||||||
|
|
||||||
|
3
radio.h
3
radio.h
@@ -50,7 +50,8 @@ enum VfoState_t
|
|||||||
VFO_STATE_TX_DISABLE,
|
VFO_STATE_TX_DISABLE,
|
||||||
VFO_STATE_TIMEOUT,
|
VFO_STATE_TIMEOUT,
|
||||||
VFO_STATE_ALARM,
|
VFO_STATE_ALARM,
|
||||||
VFO_STATE_VOLTAGE_HIGH
|
VFO_STATE_VOLTAGE_HIGH,
|
||||||
|
_VFO_STATE_LAST_ELEMENT
|
||||||
};
|
};
|
||||||
typedef enum VfoState_t VfoState_t;
|
typedef enum VfoState_t VfoState_t;
|
||||||
|
|
||||||
|
28
ui/main.c
28
ui/main.c
@@ -51,6 +51,16 @@ const int8_t dBmCorrTable[7] = {
|
|||||||
-1 // band 7
|
-1 // band 7
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const char *VfoStateStr[] = {
|
||||||
|
[VFO_STATE_NORMAL]="",
|
||||||
|
[VFO_STATE_BUSY]="BUSY",
|
||||||
|
[VFO_STATE_BAT_LOW]="BAT LOW",
|
||||||
|
[VFO_STATE_TX_DISABLE]="TX DISABLE",
|
||||||
|
[VFO_STATE_TIMEOUT]="TIMEOUT",
|
||||||
|
[VFO_STATE_ALARM]="ALARM",
|
||||||
|
[VFO_STATE_VOLTAGE_HIGH]="VOLT HIGH"
|
||||||
|
};
|
||||||
|
|
||||||
// ***************************************************************************
|
// ***************************************************************************
|
||||||
|
|
||||||
static void DrawSmallAntennaAndBars(uint8_t *p, unsigned int level)
|
static void DrawSmallAntennaAndBars(uint8_t *p, unsigned int level)
|
||||||
@@ -303,10 +313,7 @@ void UI_MAIN_TimeSlice500ms(void)
|
|||||||
|
|
||||||
void UI_DisplayMain(void)
|
void UI_DisplayMain(void)
|
||||||
{
|
{
|
||||||
const unsigned int line0 = 0; // text screen line
|
|
||||||
const unsigned int line1 = 4;
|
|
||||||
char String[22];
|
char String[22];
|
||||||
unsigned int vfo_num;
|
|
||||||
|
|
||||||
center_line = CENTER_LINE_NONE;
|
center_line = CENTER_LINE_NONE;
|
||||||
|
|
||||||
@@ -329,8 +336,10 @@ void UI_DisplayMain(void)
|
|||||||
|
|
||||||
unsigned int activeTxVFO = gRxVfoIsActive ? gEeprom.RX_VFO : gEeprom.TX_VFO;
|
unsigned int activeTxVFO = gRxVfoIsActive ? gEeprom.RX_VFO : gEeprom.TX_VFO;
|
||||||
|
|
||||||
for (vfo_num = 0; vfo_num < 2; vfo_num++)
|
for (unsigned int vfo_num = 0; vfo_num < 2; vfo_num++)
|
||||||
{
|
{
|
||||||
|
const unsigned int line0 = 0; // text screen line
|
||||||
|
const unsigned int line1 = 4;
|
||||||
const unsigned int line = (vfo_num == 0) ? line0 : line1;
|
const unsigned int line = (vfo_num == 0) ? line0 : line1;
|
||||||
const bool isMainVFO = (vfo_num == gEeprom.TX_VFO);
|
const bool isMainVFO = (vfo_num == gEeprom.TX_VFO);
|
||||||
uint8_t *p_line0 = gFrameBuffer[line + 0];
|
uint8_t *p_line0 = gFrameBuffer[line + 0];
|
||||||
@@ -416,7 +425,7 @@ void UI_DisplayMain(void)
|
|||||||
{ // transmitting
|
{ // transmitting
|
||||||
|
|
||||||
#ifdef ENABLE_ALARM
|
#ifdef ENABLE_ALARM
|
||||||
if (gAlarmState == ALARM_STATE_ALARM)
|
if (gAlarmState == ALARM_STATE_SITE_ALARM)
|
||||||
mode = 2;
|
mode = 2;
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
@@ -483,10 +492,10 @@ void UI_DisplayMain(void)
|
|||||||
|
|
||||||
// ************
|
// ************
|
||||||
|
|
||||||
unsigned int state = VfoState[vfo_num];
|
enum VfoState_t state = VfoState[vfo_num];
|
||||||
|
|
||||||
#ifdef ENABLE_ALARM
|
#ifdef ENABLE_ALARM
|
||||||
if (gCurrentFunction == FUNCTION_TRANSMIT && gAlarmState == ALARM_STATE_ALARM) {
|
if (gCurrentFunction == FUNCTION_TRANSMIT && gAlarmState == ALARM_STATE_SITE_ALARM) {
|
||||||
if (activeTxVFO == vfo_num)
|
if (activeTxVFO == vfo_num)
|
||||||
state = VFO_STATE_ALARM;
|
state = VFO_STATE_ALARM;
|
||||||
}
|
}
|
||||||
@@ -496,9 +505,8 @@ void UI_DisplayMain(void)
|
|||||||
|
|
||||||
if (state != VFO_STATE_NORMAL)
|
if (state != VFO_STATE_NORMAL)
|
||||||
{
|
{
|
||||||
const char *state_list[] = {"", "BUSY", "BAT LOW", "TX DISABLE", "TIMEOUT", "ALARM", "VOLT HIGH"};
|
if (state < ARRAY_SIZE(VfoStateStr))
|
||||||
if (state < ARRAY_SIZE(state_list))
|
UI_PrintString(VfoStateStr[state], 31, 0, line, 8);
|
||||||
UI_PrintString(state_list[state], 31, 0, line, 8);
|
|
||||||
}
|
}
|
||||||
else if (gInputBoxIndex > 0 && IS_FREQ_CHANNEL(gEeprom.ScreenChannel[vfo_num]) && gEeprom.TX_VFO == vfo_num)
|
else if (gInputBoxIndex > 0 && IS_FREQ_CHANNEL(gEeprom.ScreenChannel[vfo_num]) && gEeprom.TX_VFO == vfo_num)
|
||||||
{ // user entering a frequency
|
{ // user entering a frequency
|
||||||
|
Reference in New Issue
Block a user