0
mirror of https://github.com/OneOfEleven/uv-k5-firmware-custom.git synced 2025-04-28 22:31:25 +03:00

Dual watch count down constants

This commit is contained in:
OneOfEleven 2023-09-13 17:34:56 +01:00
parent fde690a74a
commit d95ba32be5
10 changed files with 119 additions and 71 deletions

View File

@ -91,7 +91,7 @@ static void APP_CheckForIncoming(void)
return; return;
} }
gDualWatchCountdown = 100; gDualWatchCountdown = dual_watch_count_after_rx;
gScheduleDualWatch = false; gScheduleDualWatch = false;
} }
else else
@ -156,7 +156,7 @@ static void APP_HandleIncoming(void)
{ {
if (gRxReceptionMode == RX_MODE_DETECTED) if (gRxReceptionMode == RX_MODE_DETECTED)
{ {
gDualWatchCountdown = 500; gDualWatchCountdown = dual_watch_count_after_1;
gScheduleDualWatch = false; gScheduleDualWatch = false;
gRxReceptionMode = RX_MODE_LISTENING; gRxReceptionMode = RX_MODE_LISTENING;
return; return;
@ -432,7 +432,8 @@ void APP_StartListening(FUNCTION_Type_t Function)
if (gScanState == SCAN_OFF && gCssScanMode == CSS_SCAN_MODE_OFF && gEeprom.DUAL_WATCH != DUAL_WATCH_OFF) if (gScanState == SCAN_OFF && gCssScanMode == CSS_SCAN_MODE_OFF && gEeprom.DUAL_WATCH != DUAL_WATCH_OFF)
{ {
gRxVfoIsActive = true; gRxVfoIsActive = true;
gDualWatchCountdown = 360;
gDualWatchCountdown = dual_watch_count_after_2;
gScheduleDualWatch = false; gScheduleDualWatch = false;
} }
@ -572,17 +573,17 @@ static void DUALWATCH_Alternate(void)
} }
else else
#endif #endif
{ { // toggle between VFO's
gEeprom.RX_CHANNEL = 1 - gEeprom.RX_CHANNEL; gEeprom.RX_CHANNEL = (1 - gEeprom.RX_CHANNEL) & 1;
gRxVfo = &gEeprom.VfoInfo[gEeprom.RX_CHANNEL]; gRxVfo = &gEeprom.VfoInfo[gEeprom.RX_CHANNEL];
} }
RADIO_SetupRegisters(false); RADIO_SetupRegisters(false);
#ifndef DISABLE_NOAA #ifndef DISABLE_NOAA
gDualWatchCountdown = gIsNoaaMode ? 7 : 10; gDualWatchCountdown = gIsNoaaMode ? dual_watch_count_noaa : dual_watch_count_toggle;
#else #else
gDualWatchCountdown = 10; gDualWatchCountdown = dual_watch_count_toggle;
#endif #endif
} }
@ -592,14 +593,17 @@ void APP_CheckRadioInterrupts(void)
return; return;
while (BK4819_ReadRegister(BK4819_REG_0C) & 1u) while (BK4819_ReadRegister(BK4819_REG_0C) & 1u)
{ { // BK chip interrupt request
uint16_t Mask;
uint16_t interrupt_status_bits;
// reset the interrupt ?
BK4819_WriteRegister(BK4819_REG_02, 0); BK4819_WriteRegister(BK4819_REG_02, 0);
Mask = BK4819_ReadRegister(BK4819_REG_02); // fetch the interrupt status bits
interrupt_status_bits = BK4819_ReadRegister(BK4819_REG_02);
if (Mask & BK4819_REG_02_DTMF_5TONE_FOUND) if (interrupt_status_bits & BK4819_REG_02_DTMF_5TONE_FOUND)
{ {
gDTMF_RequestPending = true; gDTMF_RequestPending = true;
gDTMF_RecvTimeout = 5; gDTMF_RecvTimeout = 5;
@ -618,25 +622,25 @@ void APP_CheckRadioInterrupts(void)
DTMF_HandleRequest(); DTMF_HandleRequest();
} }
if (Mask & BK4819_REG_02_CxCSS_TAIL) if (interrupt_status_bits & BK4819_REG_02_CxCSS_TAIL)
g_CxCSS_TAIL_Found = true; g_CxCSS_TAIL_Found = true;
if (Mask & BK4819_REG_02_CDCSS_LOST) if (interrupt_status_bits & BK4819_REG_02_CDCSS_LOST)
{ {
g_CDCSS_Lost = true; g_CDCSS_Lost = true;
gCDCSSCodeType = BK4819_GetCDCSSCodeType(); gCDCSSCodeType = BK4819_GetCDCSSCodeType();
} }
if (Mask & BK4819_REG_02_CDCSS_FOUND) if (interrupt_status_bits & BK4819_REG_02_CDCSS_FOUND)
g_CDCSS_Lost = false; g_CDCSS_Lost = false;
if (Mask & BK4819_REG_02_CTCSS_LOST) if (interrupt_status_bits & BK4819_REG_02_CTCSS_LOST)
g_CTCSS_Lost = true; g_CTCSS_Lost = true;
if (Mask & BK4819_REG_02_CTCSS_FOUND) if (interrupt_status_bits & BK4819_REG_02_CTCSS_FOUND)
g_CTCSS_Lost = false; g_CTCSS_Lost = false;
if (Mask & BK4819_REG_02_VOX_LOST) if (interrupt_status_bits & BK4819_REG_02_VOX_LOST)
{ {
g_VOX_Lost = true; g_VOX_Lost = true;
gVoxPauseCountdown = 10; gVoxPauseCountdown = 10;
@ -649,34 +653,37 @@ void APP_CheckRadioInterrupts(void)
gBatterySaveCountdownExpired = 0; gBatterySaveCountdownExpired = 0;
} }
if (gEeprom.DUAL_WATCH != DUAL_WATCH_OFF && (gScheduleDualWatch || gDualWatchCountdown < 20)) if (gEeprom.DUAL_WATCH != DUAL_WATCH_OFF && (gScheduleDualWatch || gDualWatchCountdown < dual_watch_count_after_vox))
{ {
gDualWatchCountdown = 20; gDualWatchCountdown = dual_watch_count_after_vox;
gScheduleDualWatch = false; gScheduleDualWatch = false;
} }
} }
} }
if (Mask & 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;
} }
if (Mask & BK4819_REG_02_SQUELCH_LOST) if (interrupt_status_bits & BK4819_REG_02_SQUELCH_LOST)
{ {
g_SquelchLost = true; g_SquelchLost = true;
BK4819_ToggleGpioOut(BK4819_GPIO0_PIN28_GREEN, true); BK4819_ToggleGpioOut(BK4819_GPIO0_PIN28_GREEN, true);
} }
if (Mask & BK4819_REG_02_SQUELCH_FOUND) if (interrupt_status_bits & BK4819_REG_02_SQUELCH_FOUND)
{ {
g_SquelchLost = false; g_SquelchLost = false;
BK4819_ToggleGpioOut(BK4819_GPIO0_PIN28_GREEN, false); BK4819_ToggleGpioOut(BK4819_GPIO0_PIN28_GREEN, false);
} }
#ifndef DISABLE_AIRCOPY #ifndef DISABLE_AIRCOPY
if (Mask & BK4819_REG_02_FSK_FIFO_ALMOST_FULL && gScreenToDisplay == DISPLAY_AIRCOPY && gAircopyState == AIRCOPY_TRANSFER && gAirCopyIsSendMode == 0) if (interrupt_status_bits & BK4819_REG_02_FSK_FIFO_ALMOST_FULL &&
gScreenToDisplay == DISPLAY_AIRCOPY &&
gAircopyState == AIRCOPY_TRANSFER &&
gAirCopyIsSendMode == 0)
{ {
unsigned int i; unsigned int i;
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
@ -692,16 +699,17 @@ void APP_EndTransmission(void)
RADIO_SendEndOfTransmission(); RADIO_SendEndOfTransmission();
if (gCurrentVfo->pTX->CodeType != CODE_TYPE_OFF) if (gCurrentVfo->pTX->CodeType != CODE_TYPE_OFF)
{ // CTCSS/CDCSS is enabled { // CTCSS/DCS is enabled
//if (gEeprom.TAIL_NOTE_ELIMINATION && gEeprom.REPEATER_TAIL_TONE_ELIMINATION > 0) //if (gEeprom.TAIL_NOTE_ELIMINATION && gEeprom.REPEATER_TAIL_TONE_ELIMINATION > 0)
if (gEeprom.TAIL_NOTE_ELIMINATION) if (gEeprom.TAIL_NOTE_ELIMINATION)
{ // send the tail tone { // send the CTCSS/DCS tail tone - allows the receivers to mute the usual FM squelch tail/crash
RADIO_EnableCxCSS(); RADIO_EnableCxCSS();
} }
#if 0 #if 0
else else
{ // TX a short blank carrier - gives the receivers time to mute RX audio before we drop carrier { // TX a short blank carrier
// this gives the receivers time to mute RX audio before we drop carrier
BK4819_ExitSubAu(); BK4819_ExitSubAu();
SYSTEM_DelayMs(200); SYSTEM_DelayMs(200);
} }
@ -879,7 +887,9 @@ void APP_Update(void)
{ {
if (!gPttIsPressed && !gFmRadioMode && gDTMF_CallState == DTMF_CALL_STATE_NONE && gCurrentFunction != FUNCTION_POWER_SAVE) if (!gPttIsPressed && !gFmRadioMode && gDTMF_CallState == DTMF_CALL_STATE_NONE && gCurrentFunction != FUNCTION_POWER_SAVE)
{ {
DUALWATCH_Alternate(); gScheduleDualWatch = false;
DUALWATCH_Alternate(); // toggle between the two VFO's
if (gRxVfoIsActive && gScreenToDisplay == DISPLAY_MAIN) if (gRxVfoIsActive && gScreenToDisplay == DISPLAY_MAIN)
GUI_SelectNextDisplay(DISPLAY_MAIN); GUI_SelectNextDisplay(DISPLAY_MAIN);
@ -887,7 +897,6 @@ void APP_Update(void)
gRxVfoIsActive = false; gRxVfoIsActive = false;
gScanPauseMode = false; gScanPauseMode = false;
gRxReceptionMode = RX_MODE_NONE; gRxReceptionMode = RX_MODE_NONE;
gScheduleDualWatch = false;
} }
} }
} }
@ -955,7 +964,7 @@ void APP_Update(void)
if (gEeprom.DUAL_WATCH != DUAL_WATCH_OFF && gScanState == SCAN_OFF && gCssScanMode == CSS_SCAN_MODE_OFF) if (gEeprom.DUAL_WATCH != DUAL_WATCH_OFF && gScanState == SCAN_OFF && gCssScanMode == CSS_SCAN_MODE_OFF)
{ {
DUALWATCH_Alternate(); DUALWATCH_Alternate(); // toggle between the two VFO's
gUpdateRSSI = false; gUpdateRSSI = false;
} }
@ -982,7 +991,7 @@ void APP_Update(void)
} }
else else
{ {
DUALWATCH_Alternate(); DUALWATCH_Alternate(); // toggle between the two VFO's
gUpdateRSSI = true; gUpdateRSSI = true;
gBatterySave = 10; gBatterySave = 10;

View File

@ -604,6 +604,16 @@ void BK4819_TxOn_Beep(void)
void BK4819_ExitSubAu(void) void BK4819_ExitSubAu(void)
{ {
// REG_51 <15> 0 1 = Enable TxCTCSS/CDCSS 0 = Disable
// REG_51 <14> 0 1 = GPIO0Input for CDCSS 0 = Normal Mode.(for BK4819v3)
// REG_51 <13> 0 1 = Transmit negative CDCSS code 0 = Transmit positive CDCSScode
// REG_51 <12> 0 CTCSS/CDCSS mode selection 1 = CTCSS 0 = CDCSS
// REG_51 <11> 0 CDCSS 24/23bit selection 1 = 24bit 0 = 23bit
// REG_51 <10> 0 1050HzDetectionMode 1 = 1050/4 Detect Enable, CTC1 should be set to 1050/4 Hz
// REG_51 <9> 0 Auto CDCSS Bw Mode 1 = Disable 0 = Enable.
// REG_51 <8> 0 Auto CTCSS Bw Mode 0 = Enable 1 = Disable
// REG_51 <6:0> 0 CTCSS/CDCSS Tx Gain1 Tuning 0 = min 127 = max
BK4819_WriteRegister(BK4819_REG_51, 0x0000); BK4819_WriteRegister(BK4819_REG_51, 0x0000);
} }
@ -853,6 +863,17 @@ void BK4819_EnableFrequencyScan(void)
void BK4819_SetScanFrequency(uint32_t Frequency) void BK4819_SetScanFrequency(uint32_t Frequency)
{ {
BK4819_SetFrequency(Frequency); BK4819_SetFrequency(Frequency);
// REG_51 <15> 0 1 = Enable TxCTCSS/CDCSS 0 = Disable
// REG_51 <14> 0 1 = GPIO0 Input for CDCSS 0 = Normal Mode.(for BK4819v3)
// REG_51 <13> 0 1 = Transmit negative CDCSS code 0 = Transmit positive CDCSScode
// REG_51 <12> 0 CTCSS/CDCSS mode selection 1 = CTCSS 0 = CDCSS
// REG_51 <11> 0 CDCSS 24/23bit selection 1 = 24bit 0 = 23bit
// REG_51 <10> 0 1050HzDetectionMode 1 = 1050/4 Detect Enable, CTC1 should be set to 1050/4 Hz
// REG_51 <9> 0 Auto CDCSS Bw Mode 1 = Disable 0 = Enable.
// REG_51 <8> 0 Auto CTCSS Bw Mode 0 = Enable 1 = Disable
// REG_51 <6:0> 0 CTCSS/CDCSS Tx Gain1 Tuning 0 = min 127 = max
BK4819_WriteRegister(BK4819_REG_51, 0 BK4819_WriteRegister(BK4819_REG_51, 0
| BK4819_REG_51_DISABLE_CxCSS | BK4819_REG_51_DISABLE_CxCSS
| BK4819_REG_51_GPIO6_PIN2_NORMAL | BK4819_REG_51_GPIO6_PIN2_NORMAL
@ -862,6 +883,7 @@ void BK4819_SetScanFrequency(uint32_t Frequency)
| BK4819_REG_51_1050HZ_NO_DETECTION | BK4819_REG_51_1050HZ_NO_DETECTION
| BK4819_REG_51_AUTO_CDCSS_BW_DISABLE | BK4819_REG_51_AUTO_CDCSS_BW_DISABLE
| BK4819_REG_51_AUTO_CTCSS_BW_DISABLE); | BK4819_REG_51_AUTO_CTCSS_BW_DISABLE);
BK4819_RX_TurnOn(); BK4819_RX_TurnOn();
} }

BIN
firmware

Binary file not shown.

Binary file not shown.

Binary file not shown.

9
misc.c
View File

@ -30,6 +30,15 @@ const uint32_t gDefaultAesKey[4] = {0x4AA5CC60, 0x0312CC5F, 0xFFD2DABB, 0x6BB
const uint8_t gMicGain_dB2[5] = {3, 8, 16, 24, 31}; const uint8_t gMicGain_dB2[5] = {3, 8, 16, 24, 31};
// 10ms count down resolution
const uint16_t dual_watch_count_after_tx = 3600 / 10; // 3.6 sec after TX ends
const uint16_t dual_watch_count_after_rx = 1000 / 10; // 1 sec after RX ends ?
const uint16_t dual_watch_count_after_1 = 5000 / 10; // 5 sec
const uint16_t dual_watch_count_after_2 = 3600 / 10; // 3.6 sec
const uint16_t dual_watch_count_toggle = 100 / 10; // 100ms between VFO toggles
const uint16_t dual_watch_count_noaa = 70 / 10; // 70ms
const uint16_t dual_watch_count_after_vox = 200 / 10; // 200ms
bool gSetting_350TX; bool gSetting_350TX;
bool gSetting_KILLED; bool gSetting_KILLED;
bool gSetting_200TX; bool gSetting_200TX;

8
misc.h
View File

@ -83,6 +83,14 @@ extern const uint16_t gMin_bat_v;
extern const uint8_t gMicGain_dB2[5]; extern const uint8_t gMicGain_dB2[5];
extern const uint16_t dual_watch_count_after_tx;
extern const uint16_t dual_watch_count_after_rx;
extern const uint16_t dual_watch_count_after_1;
extern const uint16_t dual_watch_count_after_2;
extern const uint16_t dual_watch_count_toggle;
extern const uint16_t dual_watch_count_noaa;
extern const uint16_t dual_watch_count_after_vox;
extern bool gSetting_350TX; extern bool gSetting_350TX;
extern bool gSetting_KILLED; extern bool gSetting_KILLED;
extern bool gSetting_200TX; extern bool gSetting_200TX;

View File

@ -799,8 +799,9 @@ void RADIO_PrepareTX(void)
{ {
if (gEeprom.DUAL_WATCH != DUAL_WATCH_OFF) if (gEeprom.DUAL_WATCH != DUAL_WATCH_OFF)
{ {
gDualWatchCountdown = 360; gDualWatchCountdown = dual_watch_count_after_tx;
gScheduleDualWatch = false; gScheduleDualWatch = false;
if (!gRxVfoIsActive) if (!gRxVfoIsActive)
{ {
gEeprom.RX_CHANNEL = gEeprom.TX_CHANNEL; gEeprom.RX_CHANNEL = gEeprom.TX_CHANNEL;

View File

@ -71,8 +71,7 @@ void SystickHandler(void)
DECREMENT_AND_TRIGGER(gBatterySave, gBatterySaveCountdownExpired); DECREMENT_AND_TRIGGER(gBatterySave, gBatterySaveCountdownExpired);
if (gScanState == SCAN_OFF && gCssScanMode == CSS_SCAN_MODE_OFF && gEeprom.DUAL_WATCH != DUAL_WATCH_OFF) if (gScanState == SCAN_OFF && gCssScanMode == CSS_SCAN_MODE_OFF && gEeprom.DUAL_WATCH != DUAL_WATCH_OFF)
if (gCurrentFunction != FUNCTION_MONITOR && gCurrentFunction != FUNCTION_TRANSMIT) if (gCurrentFunction != FUNCTION_MONITOR && gCurrentFunction != FUNCTION_TRANSMIT && gCurrentFunction != FUNCTION_RECEIVE)
if (gCurrentFunction != FUNCTION_RECEIVE)
DECREMENT_AND_TRIGGER(gDualWatchCountdown, gScheduleDualWatch); DECREMENT_AND_TRIGGER(gDualWatchCountdown, gScheduleDualWatch);
#ifndef DISABLE_NOAA #ifndef DISABLE_NOAA