diff --git a/Makefile b/Makefile index 42521d3..1636995 100644 --- a/Makefile +++ b/Makefile @@ -147,9 +147,7 @@ ifeq ($(ENABLE_FMRADIO), 1) OBJS += driver/bk1080.o endif OBJS += driver/bk4819.o -ifeq ($(filter $(ENABLE_AIRCOPY) $(ENABLE_UART) $(ENABLE_MDC1200), 1), 1) - OBJS += driver/crc.o -endif +OBJS += driver/crc.o OBJS += driver/eeprom.o ifeq ($(ENABLE_OVERLAY),1) OBJS += driver/flash.o diff --git a/app/action.c b/app/action.c index b573767..e0a2818 100644 --- a/app/action.c +++ b/app/action.c @@ -65,7 +65,7 @@ static void ACTION_FlashLight(void) case FLASHLIGHT_SOS: #ifdef ENABLE_FLASH_LIGHT_SOS_TONE - BK4819_StopTones(g_current_function == FUNCTION_TRANSMIT); + BK4819_stop_tones(g_current_function == FUNCTION_TRANSMIT); #endif // Fallthrough @@ -104,7 +104,7 @@ void ACTION_Monitor(void) g_beep_to_play = BEEP_NONE; if (!g_squelch_open && GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER)) - BK4819_StopTones(g_current_function == FUNCTION_TRANSMIT); + BK4819_stop_tones(g_current_function == FUNCTION_TRANSMIT); #ifdef ENABLE_NOAA // if (g_rx_vfo->channel_save >= NOAA_CHANNEL_FIRST && g_noaa_mode) diff --git a/app/app.c b/app/app.c index 4422c9f..87c30e7 100644 --- a/app/app.c +++ b/app/app.c @@ -1562,7 +1562,7 @@ void APP_process_flash_light_10ms(void) GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_FLASHLIGHT); #ifdef ENABLE_FLASH_LIGHT_SOS_TONE if (!g_squelch_open && !g_monitor_enabled && !GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER)) - BK4819_StartTone1(880, 50, g_current_function == FUNCTION_TRANSMIT, true); + BK4819_start_tone(880, 70, g_current_function == FUNCTION_TRANSMIT, false); #endif } } @@ -1573,7 +1573,7 @@ void APP_process_flash_light_10ms(void) GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_FLASHLIGHT); // OFF #ifdef ENABLE_FLASH_LIGHT_SOS_TONE if (!g_squelch_open && !g_monitor_enabled && GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER)) - BK4819_StopTones(g_current_function == FUNCTION_TRANSMIT); + BK4819_stop_tones(g_current_function == FUNCTION_TRANSMIT); #endif } } diff --git a/app/menu.c b/app/menu.c index 1c51411..d798ad7 100644 --- a/app/menu.c +++ b/app/menu.c @@ -764,16 +764,6 @@ void MENU_AcceptSetting(void) case MENU_ROGER_MODE: g_eeprom.config.setting.roger_mode = g_sub_menu_selection; - if (g_eeprom.config.setting.roger_mode != ROGER_MODE_OFF) - { - if (g_tx_vfo->channel.dtmf_ptt_id_tx_mode == PTT_ID_TX_DOWN || - g_tx_vfo->channel.dtmf_ptt_id_tx_mode == PTT_ID_BOTH || - g_tx_vfo->channel.dtmf_ptt_id_tx_mode == PTT_ID_APOLLO) - { - g_tx_vfo->channel.dtmf_ptt_id_tx_mode = PTT_ID_OFF; // // disable PTT ID tail - g_request_save_channel = 1; - } - } break; case MENU_MOD_MODE: diff --git a/audio.c b/audio.c index 13070c8..f104d50 100644 --- a/audio.c +++ b/audio.c @@ -173,7 +173,7 @@ void AUDIO_PlayBeep(beep_type_t Beep) break; } - BK4819_StartTone1(ToneFrequency, 10, false, false); + BK4819_start_tone(ToneFrequency, 10, false, true); SYSTEM_DelayMs(2); GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER); diff --git a/driver/bk4819.c b/driver/bk4819.c index d6b3321..f716b41 100644 --- a/driver/bk4819.c +++ b/driver/bk4819.c @@ -814,9 +814,9 @@ void BK4819_EnableDTMF(void) (15u << BK4819_REG_24_SHIFT_MAX_SYMBOLS)); // 0 ~ 15 } -void BK4819_StartTone1(const uint16_t frequency, const unsigned int level, const bool tx, const bool tx_unmute) +void BK4819_start_tone(const uint16_t frequency, const unsigned int level, const bool tx, const bool tx_mute) { -// (void)tx_unmute; + SYSTEM_DelayMs(1); GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER); @@ -868,14 +868,18 @@ void BK4819_StartTone1(const uint16_t frequency, const unsigned int level, const BK4819_SetAF(BK4819_AF_TONE); // RX // BK4819_SetAF(BK4819_AF_BEEP); // TX - if (tx_unmute) + if (!tx_mute) BK4819_write_reg(0x50, 0x3B20); // 0011 1011 0010 0000 GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER); + + SYSTEM_DelayMs(1); } -void BK4819_StopTones(const bool tx) +void BK4819_stop_tones(const bool tx) { + SYSTEM_DelayMs(1); + GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER); SYSTEM_DelayMs(1); @@ -923,34 +927,37 @@ void BK4819_StopTones(const bool tx) SYSTEM_DelayMs(1); BK4819_ExitTxMute(); + + SYSTEM_DelayMs(1); } -void BK4819_PlayTone(const unsigned int tone_Hz, const unsigned int delay, const unsigned int level) +void BK4819_PlayRoger(const unsigned int type) { - const uint16_t prev_af = BK4819_read_reg(0x47); - BK4819_StartTone1(tone_Hz, level, g_current_function == FUNCTION_TRANSMIT, true); - SYSTEM_DelayMs(delay - 2); - BK4819_StopTones(g_current_function == FUNCTION_TRANSMIT); - BK4819_write_reg(0x47, prev_af); -} + uint32_t tone1_Hz; + uint32_t tone2_Hz; -void BK4819_PlayRoger(void) -{ - #if 0 - const uint32_t tone1_Hz = 500; - const uint32_t tone2_Hz = 700; - #else - // motorola - const uint32_t tone1_Hz = 1540; - const uint32_t tone2_Hz = 1310; - #endif + switch (type) + { + case 1: + tone1_Hz = 1540; + tone2_Hz = 1310; + break; + case 2: + tone1_Hz = 500; + tone2_Hz = 700; + break; + default: + return; + } const uint16_t prev_af = BK4819_read_reg(0x47); - BK4819_StartTone1(tone1_Hz, 96, true, true); - SYSTEM_DelayMs(80 - 2); - BK4819_StartTone1(tone2_Hz, 96, true, true); - SYSTEM_DelayMs(80); - BK4819_StopTones(true); + + BK4819_start_tone(tone1_Hz, 10, true, false); + SYSTEM_DelayMs(150); + BK4819_write_reg(0x71, scale_freq(tone2_Hz)); + SYSTEM_DelayMs(150); + BK4819_stop_tones(true); + BK4819_write_reg(0x47, prev_af); } diff --git a/driver/bk4819.h b/driver/bk4819.h index a8e2b15..75ca739 100644 --- a/driver/bk4819.h +++ b/driver/bk4819.h @@ -104,15 +104,20 @@ bool BK4819_CompanderEnabled(void); void BK4819_SetCompander(const unsigned int mode); void BK4819_DisableVox(void); + void BK4819_DisableDTMF(void); void BK4819_EnableDTMF(void); -void BK4819_StartTone1(const uint16_t frequency, const unsigned int level, const bool tx, const bool tx_unmute); -void BK4819_StopTones(const bool tx); -void BK4819_PlayTone(const unsigned int tone_Hz, const unsigned int delay, const unsigned int level); + +void BK4819_start_tone(const uint16_t frequency, const unsigned int level, const bool tx, const bool tx_mute); +void BK4819_stop_tones(const bool tx); + void BK4819_EnterTxMute(void); void BK4819_ExitTxMute(void); + void BK4819_set_mic_gain(unsigned int level); + void BK4819_Sleep(void); + void BK4819_TurnsOffTones_TurnsOnRX(void); #ifdef ENABLE_AIRCOPY @@ -161,7 +166,7 @@ uint8_t BK4819_get_CDCSS_code_type(void); uint8_t BK4819_GetCTCShift(void); uint8_t BK4819_GetCTCType(void); -void BK4819_PlayRoger(void); +void BK4819_PlayRoger(const unsigned int type); #ifdef ENABLE_MDC1200 void BK4819_enable_mdc1200_rx(const bool enable); diff --git a/firmware.bin b/firmware.bin index c3ad7a2..9fdb3a7 100644 Binary files a/firmware.bin and b/firmware.bin differ diff --git a/firmware.packed.bin b/firmware.packed.bin index 56d1a46..bcc5b37 100644 Binary files a/firmware.packed.bin and b/firmware.packed.bin differ diff --git a/functions.c b/functions.c index 9b3cc3c..307eda6 100644 --- a/functions.c +++ b/functions.c @@ -220,7 +220,7 @@ void FUNCTION_Select(function_type_t Function) GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER); SYSTEM_DelayMs(2); - BK4819_StartTone1(500, 28, g_current_function == FUNCTION_TRANSMIT, true); + BK4819_start_tone(500, 28, g_current_function == FUNCTION_TRANSMIT, false); SYSTEM_DelayMs(2); GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER); @@ -267,25 +267,27 @@ void FUNCTION_Select(function_type_t Function) if (g_current_vfo->channel.mdc1200_mode == MDC1200_MODE_BOT || g_current_vfo->channel.mdc1200_mode == MDC1200_MODE_BOTH) { #ifdef ENABLE_MDC1200_SIDE_BEEP -// BK4819_StartTone1(880, 10, true, false); +// BK4819_start_tone(880, 10, true, true); // SYSTEM_DelayMs(120); -// BK4819_StopTones(true); +// BK4819_stop_tones(true); #endif SYSTEM_DelayMs(30); BK4819_send_MDC1200(MDC1200_OP_CODE_PTT_ID, 0x80, g_eeprom.config.setting.mdc1200_id, true); #ifdef ENABLE_MDC1200_SIDE_BEEP - BK4819_StartTone1(880, 10, true, false); + BK4819_start_tone(880, 10, true, true); SYSTEM_DelayMs(120); - BK4819_StopTones(true); + BK4819_stop_tones(true); #endif } else #endif if (g_current_vfo->channel.dtmf_ptt_id_tx_mode == PTT_ID_APOLLO) { - BK4819_PlayTone(APOLLO_TONE1_HZ, APOLLO_TONE_MS, 0); + BK4819_start_tone(APOLLO_TONE1_HZ, 28, true, false); + SYSTEM_DelayMs(APOLLO_TONE_MS); + BK4819_stop_tones(true); } } diff --git a/radio.c b/radio.c index 8b7868b..8a99a0b 100644 --- a/radio.c +++ b/radio.c @@ -1203,28 +1203,29 @@ void RADIO_tx_eot(void) GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER); } else - if (g_eeprom.config.setting.roger_mode == ROGER_MODE_ROGER) - { - BK4819_PlayRoger(); - } - else #ifdef ENABLE_MDC1200 -// if (g_eeprom.config.setting.roger_mode == ROGER_MODE_MDC) if (g_current_vfo->channel.mdc1200_mode == MDC1200_MODE_EOT || g_current_vfo->channel.mdc1200_mode == MDC1200_MODE_BOTH) { BK4819_send_MDC1200(MDC1200_OP_CODE_POST_ID, 0x00, g_eeprom.config.setting.mdc1200_id, false); #ifdef ENABLE_MDC1200_SIDE_BEEP - BK4819_StartTone1(880, 10, true, false); + BK4819_start_tone(880, 10, true, true); SYSTEM_DelayMs(120); - BK4819_StopTones(true); + BK4819_stop_tones(true); #endif } else #endif if (g_current_vfo->channel.dtmf_ptt_id_tx_mode == PTT_ID_APOLLO) { - BK4819_PlayTone(APOLLO_TONE2_HZ, APOLLO_TONE_MS, 28); + BK4819_start_tone(APOLLO_TONE2_HZ, 28, true, false); + SYSTEM_DelayMs(APOLLO_TONE_MS); + BK4819_stop_tones(true); + } + else + if (g_eeprom.config.setting.roger_mode != ROGER_MODE_OFF) + { + BK4819_PlayRoger(g_eeprom.config.setting.roger_mode); } BK4819_ExitDTMF_TX(true); diff --git a/settings.h b/settings.h index 0171e9b..d8b52d4 100644 --- a/settings.h +++ b/settings.h @@ -109,8 +109,8 @@ typedef enum alarm_mode_e alarm_mode_t; enum roger_mode_e { ROGER_MODE_OFF = 0, - ROGER_MODE_ROGER, - ROGER_MODE_MDC + ROGER_MODE_ROGER1, + ROGER_MODE_ROGER2 }; typedef enum roger_mode_e roger_mode_t; diff --git a/ui/menu.c b/ui/menu.c index 911039f..dc9e750 100644 --- a/ui/menu.c +++ b/ui/menu.c @@ -311,11 +311,11 @@ const char g_sub_menu_pwr_on_msg[4][14] = "NONE" }; -const char g_sub_menu_roger_mode[2][16] = +const char g_sub_menu_roger_mode[3][15] = { "OFF", - "TX END\nROGER", -// "TX END\nMDC1200" + "TX END\nROGER 1", + "TX END\nROGER 2" }; const char g_sub_menu_reset[2][4] = diff --git a/ui/menu.h b/ui/menu.h index dca2caf..d54a78b 100644 --- a/ui/menu.h +++ b/ui/menu.h @@ -185,7 +185,7 @@ extern const char g_sub_menu_ptt_id[5][16]; extern const char g_sub_menu_mdc1200_mode[4][8]; #endif extern const char g_sub_menu_pwr_on_msg[4][14]; -extern const char g_sub_menu_roger_mode[2][16]; +extern const char g_sub_menu_roger_mode[3][15]; extern const char g_sub_menu_reset[2][4]; extern const char g_sub_menu_backlight[8][7]; extern const char g_sub_menu_rx_tx[4][6];