From 673d1b57ab1237fb3a87c9c7a598a057ea190666 Mon Sep 17 00:00:00 2001 From: mrkusypl Date: Fri, 1 May 2026 19:39:59 +0200 Subject: [PATCH 1/2] Refactoring of beep handling (94 B) --- App/app/app.c | 2 +- App/app/breakout.c | 6 +- App/audio.c | 124 ++++++++++------------------------------- App/audio.h | 9 ++- App/driver/backlight.c | 4 +- App/driver/bk4819.h | 2 + App/driver/bk4829.c | 34 +++++------ 7 files changed, 60 insertions(+), 121 deletions(-) diff --git a/App/app/app.c b/App/app/app.c index 555340e3..043f23b8 100644 --- a/App/app/app.c +++ b/App/app/app.c @@ -994,7 +994,7 @@ void APP_Update(void) APP_EndTransmission(); - AUDIO_PlayBeep(BEEP_880HZ_60MS_DOUBLE_BEEP); + AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP); RADIO_SetVfoState(VFO_STATE_TIMEOUT); diff --git a/App/app/breakout.c b/App/app/breakout.c index 560fb090..6b626ea6 100644 --- a/App/app/breakout.c +++ b/App/app/breakout.c @@ -70,11 +70,9 @@ void reset(void) // PlayBeep void playBeep(uint16_t tone) { - BK4819_PlayTone(tone, true); // 500 Hz ON AUDIO_AudioPathOn(); - BK4819_ExitTxMute(); - SYSTEM_DelayMs(100); - BK4819_EnterTxMute(); + BK4819_PrepareToPlayTone(true); + BK4819_PlayToneRaw(tone, 100); AUDIO_AudioPathOff(); } diff --git a/App/audio.c b/App/audio.c index 2a61b6d3..a1249d64 100644 --- a/App/audio.c +++ b/App/audio.c @@ -33,31 +33,34 @@ #include "settings.h" #include "ui/ui.h" +static const uint16_t BEEP_Classic_array[][3] = { +// Tone Duration Repeats + {0, 0, 0 }, // BEEP_NONE + {1000, 60, 1 }, // BEEP_1KHZ_60MS_OPTIONAL + {500, 60, 2 }, // BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL +#ifdef ENABLE_DTMF_CALLING + {880, 200, 1 }, // BEEP_880HZ_200MS + {880, 500, 1 }, // BEEP_880HZ_500MS +#endif + {500, 60, 2 }, // BEEP_500HZ_60MS_DOUBLE_BEEP +#ifdef ENABLE_FEAT_F4HWN + {400, 30, 1 }, // BEEP_400HZ_30MS + {500, 30, 1 }, // BEEP_500HZ_30MS + {600, 30, 1 }, // BEEP_600HZ_30MS +#endif + {880, 60, 3 } // BEEP_880HZ_60MS_TRIPLE_BEEP +}; BEEP_Type_t gBeepToPlay = BEEP_NONE; -static void AUDIO_PlayBeepPulse(void) { - BK4819_ExitTxMute(); - SYSTEM_DelayMs(60); - BK4819_EnterTxMute(); - SYSTEM_DelayMs(20); -} - void AUDIO_PlayBeep(BEEP_Type_t Beep) { + if (Beep == BEEP_NONE) + return; - if (Beep != BEEP_880HZ_60MS_DOUBLE_BEEP && - Beep != BEEP_500HZ_60MS_DOUBLE_BEEP && -#ifdef ENABLE_DTMF_CALLING - Beep != BEEP_880HZ_200MS && - Beep != BEEP_880HZ_500MS && -#endif -#ifdef ENABLE_FEAT_F4HWN - Beep != BEEP_400HZ_30MS && - Beep != BEEP_500HZ_30MS && - Beep != BEEP_600HZ_30MS && -#endif - !gEeprom.BEEP_CONTROL) + if ((Beep == BEEP_1KHZ_60MS_OPTIONAL || + Beep == BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL) && + !gEeprom.BEEP_CONTROL) return; if (gCurrentFunction == FUNCTION_RECEIVE) @@ -80,40 +83,6 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) uint16_t ToneConfig = BK4819_ReadRegister(BK4819_REG_71); - uint16_t ToneFrequency; - switch (Beep) - { - default: - case BEEP_NONE: - ToneFrequency = 220; - break; - case BEEP_1KHZ_60MS_OPTIONAL: - ToneFrequency = 1000; - break; - case BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL: - case BEEP_500HZ_60MS_DOUBLE_BEEP: - ToneFrequency = 500; - break; - case BEEP_880HZ_60MS_DOUBLE_BEEP: -#ifndef ENABLE_FEAT_F4HWN - case BEEP_880HZ_200MS: - case BEEP_880HZ_500MS: -#endif - ToneFrequency = 880; - break; -#ifdef ENABLE_FEAT_F4HWN - case BEEP_400HZ_30MS: - ToneFrequency = 400; - break; - case BEEP_500HZ_30MS: - ToneFrequency = 500; - break; - case BEEP_600HZ_30MS: - ToneFrequency = 600; - break; -#endif - } - #ifdef ENABLE_FEAT_F4HWN if(Beep == BEEP_400HZ_30MS || Beep == BEEP_500HZ_30MS || Beep == BEEP_600HZ_30MS) { @@ -121,52 +90,17 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) } #endif - BK4819_PlayTone(ToneFrequency, true); - - SYSTEM_DelayMs(2); - AUDIO_AudioPathOn(); SYSTEM_DelayMs(60); - uint16_t Duration; - switch (Beep) - { - case BEEP_880HZ_60MS_DOUBLE_BEEP: - AUDIO_PlayBeepPulse(); - [[fallthrough]]; - case BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL: - case BEEP_500HZ_60MS_DOUBLE_BEEP: - AUDIO_PlayBeepPulse(); - [[fallthrough]]; - case BEEP_1KHZ_60MS_OPTIONAL: - BK4819_ExitTxMute(); - Duration = 60; - break; -#ifdef ENABLE_FEAT_F4HWN - case BEEP_400HZ_30MS: - case BEEP_500HZ_30MS: - case BEEP_600HZ_30MS: - BK4819_ExitTxMute(); - Duration = 30; - break; -#endif -#ifndef ENABLE_FEAT_F4HWN - case BEEP_880HZ_200MS: - BK4819_ExitTxMute(); - Duration = 200; - break; - case BEEP_880HZ_500MS: -#endif - default: - BK4819_ExitTxMute(); - Duration = 500; - break; - } + BK4819_PrepareToPlayTone(true); - SYSTEM_DelayMs(Duration); - BK4819_EnterTxMute(); - SYSTEM_DelayMs(20); + for (uint8_t i = 0; i < BEEP_Classic_array[Beep][BEEP_REPEATS]; i++) { + BK4819_PlayToneRaw( BEEP_Classic_array[Beep][BEEP_TONE], + BEEP_Classic_array[Beep][BEEP_DURATION]); + SYSTEM_DelayMs(20); + } AUDIO_AudioPathOff(); @@ -182,7 +116,6 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) SYSTEM_DelayMs(10); #endif - if (gEnableSpeaker) AUDIO_AudioPathOn(); @@ -197,7 +130,6 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) #ifdef ENABLE_VOX gVoxResumeCountdown = 80; #endif - } #ifdef ENABLE_VOICE diff --git a/App/audio.h b/App/audio.h index 210fd956..22790dbb 100644 --- a/App/audio.h +++ b/App/audio.h @@ -22,6 +22,13 @@ #include "driver/gpio.h" +enum { + BEEP_TONE = 0, + BEEP_DURATION, + BEEP_REPEATS +}; + + enum BEEP_Type_t { BEEP_NONE = 0, @@ -37,7 +44,7 @@ enum BEEP_Type_t BEEP_500HZ_30MS, BEEP_600HZ_30MS, #endif - BEEP_880HZ_60MS_DOUBLE_BEEP + BEEP_880HZ_60MS_TRIPLE_BEEP }; typedef enum BEEP_Type_t BEEP_Type_t; diff --git a/App/driver/backlight.c b/App/driver/backlight.c index dc925803..31e08f33 100644 --- a/App/driver/backlight.c +++ b/App/driver/backlight.c @@ -109,8 +109,8 @@ static void BACKLIGHT_Sound(void) { if (gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_SOUND || gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_ALL) { - AUDIO_PlayBeep(BEEP_880HZ_60MS_DOUBLE_BEEP); - AUDIO_PlayBeep(BEEP_880HZ_60MS_DOUBLE_BEEP); + AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP); + AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP); } gK5startup = false; diff --git a/App/driver/bk4819.h b/App/driver/bk4819.h index 94f40748..0800f2c5 100644 --- a/App/driver/bk4819.h +++ b/App/driver/bk4819.h @@ -105,7 +105,9 @@ void BK4819_SetCompander(const unsigned int mode); void BK4819_DisableVox(void); void BK4819_DisableDTMF(void); void BK4819_EnableDTMF(void); +void BK4819_PrepareToPlayTone(bool bTuningGainSwitch); void BK4819_PlayTone(uint16_t Frequency, bool bTuningGainSwitch); +void BK4819_PlayToneRaw(const unsigned int tone_Hz, const unsigned int delay); void BK4819_PlaySingleTone(const unsigned int tone_Hz, const unsigned int delay, const unsigned int level, const bool play_speaker); void BK4819_EnterTxMute(void); void BK4819_ExitTxMute(void); diff --git a/App/driver/bk4829.c b/App/driver/bk4829.c index ada22059..d79d6576 100644 --- a/App/driver/bk4829.c +++ b/App/driver/bk4829.c @@ -1031,7 +1031,7 @@ void BK4819_EnableDTMF(void) (15u << BK4819_REG_24_SHIFT_MAX_SYMBOLS)); // 0 ~ 15 } -void BK4819_PlayTone(uint16_t Frequency, bool bTuningGainSwitch) +void BK4819_PrepareToPlayTone(bool bTuningGainSwitch) { uint16_t ToneConfig = BK4819_REG_70_ENABLE_TONE1; @@ -1046,10 +1046,23 @@ void BK4819_PlayTone(uint16_t Frequency, bool bTuningGainSwitch) BK4819_WriteRegister(BK4819_REG_30, 0); BK4819_WriteRegister(BK4819_REG_30, BK4819_REG_30_ENABLE_AF_DAC | BK4819_REG_30_ENABLE_DISC_MODE | BK4819_REG_30_ENABLE_TX_DSP); +} + +void BK4819_PlayTone(uint16_t Frequency, bool bTuningGainSwitch) +{ + BK4819_PrepareToPlayTone(bTuningGainSwitch); BK4819_WriteRegister(BK4819_REG_71, scale_freq(Frequency)); } +void BK4819_PlayToneRaw(const unsigned int tone_Hz, const unsigned int delay) { + BK4819_WriteRegister(BK4819_REG_71, scale_freq(tone_Hz)); + + BK4819_ExitTxMute(); + SYSTEM_DelayMs(delay); + BK4819_EnterTxMute(); +} + // level 0 ~ 127 void BK4819_PlaySingleTone(const unsigned int tone_Hz, const unsigned int delay, const unsigned int level, const bool play_speaker) { @@ -1069,11 +1082,7 @@ void BK4819_PlaySingleTone(const unsigned int tone_Hz, const unsigned int delay, BK4819_EnableTXLink(); SYSTEM_DelayMs(50); - BK4819_WriteRegister(BK4819_REG_71, scale_freq(tone_Hz)); - - BK4819_ExitTxMute(); - SYSTEM_DelayMs(delay); - BK4819_EnterTxMute(); + BK4819_PlayToneRaw(tone_Hz, delay); if (play_speaker) { @@ -1767,17 +1776,8 @@ static void BK4819_PlayRogerNormal(void) BK4819_EnableTXLink(); SYSTEM_DelayMs(50); - BK4819_WriteRegister(BK4819_REG_71, scale_freq(tone1_Hz)); - - BK4819_ExitTxMute(); - SYSTEM_DelayMs(80); - BK4819_EnterTxMute(); - - BK4819_WriteRegister(BK4819_REG_71, scale_freq(tone2_Hz)); - - BK4819_ExitTxMute(); - SYSTEM_DelayMs(80); - BK4819_EnterTxMute(); + BK4819_PlayToneRaw(tone1_Hz, 80); + BK4819_PlayToneRaw(tone2_Hz, 80); BK4819_WriteRegister(BK4819_REG_70, 0x0000); BK4819_WriteRegister(BK4819_REG_30, 0xC1FE); // 1 1 0000 0 1 1111 1 1 1 0 From 1e03dc4af038105a4b6b0440313a111576c0175c Mon Sep 17 00:00:00 2001 From: mrkusypl Date: Sat, 2 May 2026 00:35:43 +0200 Subject: [PATCH 2/2] Minor changes to the refactoring of beep handling --- App/audio.c | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/App/audio.c b/App/audio.c index a1249d64..7b09141b 100644 --- a/App/audio.c +++ b/App/audio.c @@ -33,22 +33,21 @@ #include "settings.h" #include "ui/ui.h" -static const uint16_t BEEP_Classic_array[][3] = { -// Tone Duration Repeats - {0, 0, 0 }, // BEEP_NONE - {1000, 60, 1 }, // BEEP_1KHZ_60MS_OPTIONAL - {500, 60, 2 }, // BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL +static const uint16_t BEEP_Classic_array[][3] = { /* Tone Duration Repeats */ + [BEEP_NONE] = {0, 0, 0 }, + [BEEP_1KHZ_60MS_OPTIONAL] = {1000, 60, 1 }, + [BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL] = {500, 60, 2 }, #ifdef ENABLE_DTMF_CALLING - {880, 200, 1 }, // BEEP_880HZ_200MS - {880, 500, 1 }, // BEEP_880HZ_500MS + [BEEP_880HZ_200MS] = {880, 200, 1 }, + [BEEP_880HZ_500MS] = {880, 500, 1 }, #endif - {500, 60, 2 }, // BEEP_500HZ_60MS_DOUBLE_BEEP + [BEEP_500HZ_60MS_DOUBLE_BEEP] = {500, 60, 2 }, #ifdef ENABLE_FEAT_F4HWN - {400, 30, 1 }, // BEEP_400HZ_30MS - {500, 30, 1 }, // BEEP_500HZ_30MS - {600, 30, 1 }, // BEEP_600HZ_30MS + [BEEP_400HZ_30MS] = {400, 30, 1 }, + [BEEP_500HZ_30MS] = {500, 30, 1 }, + [BEEP_600HZ_30MS] = {600, 30, 1 }, #endif - {880, 60, 3 } // BEEP_880HZ_60MS_TRIPLE_BEEP + [BEEP_880HZ_60MS_TRIPLE_BEEP] = {880, 60, 3 } }; BEEP_Type_t gBeepToPlay = BEEP_NONE; @@ -69,6 +68,9 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) if (gCurrentFunction == FUNCTION_MONITOR) return; + if (Beep >= ARRAY_SIZE(BEEP_Classic_array)) + return; + #ifdef ENABLE_FMRADIO if (gFmRadioMode) BK1080_Mute(true); @@ -90,12 +92,14 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) } #endif + BK4819_PrepareToPlayTone(true); + + SYSTEM_DelayMs(2); + AUDIO_AudioPathOn(); SYSTEM_DelayMs(60); - BK4819_PrepareToPlayTone(true); - for (uint8_t i = 0; i < BEEP_Classic_array[Beep][BEEP_REPEATS]; i++) { BK4819_PlayToneRaw( BEEP_Classic_array[Beep][BEEP_TONE], BEEP_Classic_array[Beep][BEEP_DURATION]);