diff --git a/Makefile b/Makefile index 60113a7..624ef70 100644 --- a/Makefile +++ b/Makefile @@ -46,7 +46,7 @@ ENABLE_FASTER_CHANNEL_SCAN := 1 ENABLE_RX_SIGNAL_BAR := 1 ENABLE_TX_TIMEOUT_BAR := 0 ENABLE_TX_AUDIO_BAR := 1 -ENABLE_COPY_CHAN_TO_VFO := 1 +ENABLE_COPY_CHAN_TO_VFO_TO_CHAN := 1 #ENABLE_PANADAPTER := 0 #ENABLE_SINGLE_VFO_CHAN := 0 @@ -369,8 +369,8 @@ endif ifeq ($(ENABLE_TX_TIMEOUT_BAR),1) CFLAGS += -DENABLE_TX_TIMEOUT_BAR endif -ifeq ($(ENABLE_COPY_CHAN_TO_VFO),1) - CFLAGS += -DENABLE_COPY_CHAN_TO_VFO +ifeq ($(ENABLE_COPY_CHAN_TO_VFO_TO_CHAN),1) + CFLAGS += -DENABLE_COPY_CHAN_TO_VFO_TO_CHAN endif ifeq ($(ENABLE_SINGLE_VFO_CHAN),1) CFLAGS += -DENABLE_SINGLE_VFO_CHAN diff --git a/README.md b/README.md index f1d5d57..eb4d13b 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,7 @@ ENABLE_FASTER_CHANNEL_SCAN := 1 increases the channel scan speed, bu ENABLE_RX_SIGNAL_BAR := 1 enable a dBm/Sn RSSI bar graph level inplace of the little antenna symbols ENABLE_TX_TIMEOUT_BAR := 0 show the remainng TX time ENABLE_TX_AUDIO_BAR := 1 enable TX audio level bar, includes remaining TX time (in seconds) -ENABLE_COPY_CHAN_TO_VFO := 1 copy current channel into the other VFO. Long press Menu key ('M') +ENABLE_COPY_CHAN_TO_VFO_TO_CHAN := 1 long press M, copy channel to VFO, or VFO to channel #ENABLE_BAND_SCOPE := 0 not yet implemented - spectrum/pan-adapter #ENABLE_SINGLE_VFO_CHAN := 0 not yet implemented - single VFO on display when possible ``` diff --git a/app/main.c b/app/main.c index 32fbf66..470ce17 100644 --- a/app/main.c +++ b/app/main.c @@ -24,6 +24,9 @@ #include "app/generic.h" #include "app/main.h" #include "app/search.h" +#ifdef ENABLE_SPECTRUM +// #include "app/spectrum.h" +#endif #include "audio.h" #include "board.h" #include "driver/bk4819.h" @@ -35,9 +38,7 @@ #include "settings.h" #include "ui/inputbox.h" #include "ui/ui.h" -#ifdef ENABLE_SPECTRUM -// #include "app/spectrum.h" -#endif +#include "ui/menu.h" void toggle_chan_scanlist(void) { // toggle the selected channels scanlist setting @@ -587,7 +588,7 @@ void MAIN_Key_MENU(const bool key_pressed, const bool key_held) { if (key_pressed && !key_held) { // key just pressed - g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; + AUDIO_PlayBeep(BEEP_1KHZ_60MS_OPTIONAL); } if (key_held) @@ -609,21 +610,14 @@ void MAIN_Key_MENU(const bool key_pressed, const bool key_held) g_fkey_pressed = false; g_update_status = true; - #ifdef ENABLE_COPY_CHAN_TO_VFO - - if (g_eeprom.vfo_open && g_css_scan_mode == CSS_SCAN_MODE_OFF) - { - - if (g_scan_state_dir != SCAN_STATE_DIR_OFF) - { - if (g_current_function != FUNCTION_INCOMING || - g_rx_reception_mode == RX_MODE_NONE || - g_scan_pause_10ms == 0) - { // scan is running (not paused) - return; - } - } + #ifdef ENABLE_COPY_CHAN_TO_VFO_TO_CHAN + if (g_scan_state_dir == SCAN_STATE_DIR_OFF && + g_css_scan_mode == CSS_SCAN_MODE_OFF && + g_eeprom.dual_watch == DUAL_WATCH_OFF && + g_eeprom.vfo_open) + { // not scanning + const unsigned int vfo = get_RX_VFO(); if (IS_USER_CHANNEL(g_eeprom.screen_channel[vfo])) @@ -647,6 +641,21 @@ void MAIN_Key_MENU(const bool key_pressed, const bool key_held) g_update_status = true; g_update_display = true; } + else + if (IS_FREQ_CHANNEL(g_eeprom.screen_channel[vfo])) + { // copy VFO to channel + + #ifdef ENABLE_VOICE + g_another_voice_id = VOICE_ID_MENU; + #endif + +// g_request_display_screen = DISPLAY_MENU; + GUI_SelectNextDisplay(DISPLAY_MENU); + g_menu_cursor = MENU_MEM_SAVE; + g_flag_refresh_menu = true; + g_ask_for_confirmation = 0; + g_is_in_sub_menu = true; + } } else { @@ -671,6 +680,7 @@ void MAIN_Key_MENU(const bool key_pressed, const bool key_held) { g_flag_refresh_menu = true; g_request_display_screen = DISPLAY_MENU; + #ifdef ENABLE_VOICE g_another_voice_id = VOICE_ID_MENU; #endif diff --git a/audio.c b/audio.c index a9a590f..dd6aaa1 100644 --- a/audio.c +++ b/audio.c @@ -75,28 +75,28 @@ beep_type_t g_beep_to_play = BEEP_NONE; void AUDIO_PlayBeep(beep_type_t Beep) { - uint16_t ToneConfig; - uint16_t ToneFrequency; - uint16_t Duration; + const uint16_t ToneConfig = BK4819_ReadRegister(BK4819_REG_71); + uint16_t ToneFrequency; + uint16_t Duration; - if (Beep != BEEP_880HZ_60MS_TRIPLE_BEEP && - Beep != BEEP_500HZ_60MS_DOUBLE_BEEP && - Beep != BEEP_440HZ_500MS && - Beep != BEEP_880HZ_200MS && - Beep != BEEP_880HZ_500MS && - !g_eeprom.beep_control) - return; + if (!g_eeprom.beep_control) + { // beep not enabled + if (Beep != BEEP_880HZ_60MS_TRIPLE_BEEP && + Beep != BEEP_500HZ_60MS_DOUBLE_BEEP && + Beep != BEEP_440HZ_500MS && + Beep != BEEP_880HZ_200MS && + Beep != BEEP_880HZ_500MS) + { + return; + } + } #ifdef ENABLE_AIRCOPY // if (g_screen_to_display == DISPLAY_AIRCOPY || g_aircopy_state != AIRCOPY_READY) // return; #endif - if (g_current_function == FUNCTION_RECEIVE) + if (g_current_function == FUNCTION_RECEIVE || g_current_function == FUNCTION_MONITOR) return; - if (g_current_function == FUNCTION_MONITOR) - return; - - ToneConfig = BK4819_ReadRegister(BK4819_REG_71); GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER); @@ -110,7 +110,9 @@ void AUDIO_PlayBeep(beep_type_t Beep) #endif #endif - SYSTEM_DelayMs(20); + // whats this for ? +// SYSTEM_DelayMs(20); + SYSTEM_DelayMs(2); switch (Beep) { @@ -118,17 +120,21 @@ void AUDIO_PlayBeep(beep_type_t Beep) 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_440HZ_40MS_OPTIONAL: case BEEP_440HZ_500MS: ToneFrequency = 440; break; + case BEEP_880HZ_40MS_OPTIONAL: case BEEP_880HZ_60MS_TRIPLE_BEEP: case BEEP_880HZ_200MS: @@ -138,9 +144,7 @@ void AUDIO_PlayBeep(beep_type_t Beep) } BK4819_StartTone1(ToneFrequency, 96, true); - SYSTEM_DelayMs(2); - GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER); SYSTEM_DelayMs(60); @@ -190,18 +194,25 @@ void AUDIO_PlayBeep(beep_type_t Beep) #pragma GCC diagnostic pop SYSTEM_DelayMs(Duration); - BK4819_EnterTxMute(); - SYSTEM_DelayMs(20); - GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER); + BK4819_EnterTxMute(); + +// SYSTEM_DelayMs(20); + SYSTEM_DelayMs(2); #ifdef ENABLE_VOX g_vox_resume_count_down = 80; #endif - SYSTEM_DelayMs(5); + GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER); + +// SYSTEM_DelayMs(5); + SYSTEM_DelayMs(2); BK4819_TurnsOffTones_TurnsOnRX(); - SYSTEM_DelayMs(5); +// SYSTEM_DelayMs(5); + SYSTEM_DelayMs(2); + + // restore the register BK4819_WriteRegister(BK4819_REG_71, ToneConfig); if (g_enable_speaker) @@ -224,7 +235,7 @@ void AUDIO_PlayBeep(beep_type_t Beep) if (g_eeprom.voice_prompt == VOICE_PROMPT_OFF) return; - + GPIO_SetBit(&GPIOA->DATA, GPIOA_PIN_VOICE_0); SYSTEM_DelayMs(20); GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_VOICE_0); @@ -273,7 +284,7 @@ void AUDIO_PlayBeep(beep_type_t Beep) if (g_current_function == FUNCTION_RECEIVE || g_current_function == FUNCTION_MONITOR) BK4819_SetAF(BK4819_AF_MUTE); #endif - + #ifdef ENABLE_FMRADIO #ifdef MUTE_AUDIO_FOR_VOICE if (g_fm_radio_mode) @@ -288,7 +299,7 @@ void AUDIO_PlayBeep(beep_type_t Beep) #endif SYSTEM_DelayMs(5); - + AUDIO_PlayVoice(VoiceID); if (g_voice_write_index == 1) @@ -445,10 +456,10 @@ void AUDIO_PlayBeep(beep_type_t Beep) // *********************** // unmute the radios audio - + if (g_current_function == FUNCTION_RECEIVE || g_current_function == FUNCTION_MONITOR) BK4819_SetAF(g_rx_vfo->am_mode ? BK4819_AF_AM : BK4819_AF_FM); - + #ifdef ENABLE_FMRADIO if (g_fm_radio_mode) BK1080_Mute(false); @@ -458,7 +469,7 @@ void AUDIO_PlayBeep(beep_type_t Beep) GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER); // ********************** - + #ifdef ENABLE_VOX g_vox_resume_count_down = 80; #endif diff --git a/audio.h b/audio.h index 5bfc4a9..fb60320 100644 --- a/audio.h +++ b/audio.h @@ -20,8 +20,7 @@ #include #include -enum beep_type_e -{ +enum beep_type_e { BEEP_NONE = 0, BEEP_1KHZ_60MS_OPTIONAL, BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL, @@ -35,18 +34,16 @@ enum beep_type_e }; typedef enum beep_type_e beep_type_t; -extern beep_type_t g_beep_to_play; +extern beep_type_t g_beep_to_play; void AUDIO_PlayBeep(beep_type_t Beep); -enum -{ +enum { VOICE_ID_CHI_BASE = 0x10U, - VOICE_ID_ENG_BASE = 0x60U, + VOICE_ID_ENG_BASE = 0x60U }; -enum voice_id_e -{ +enum voice_id_e { VOICE_ID_0 = 0x00U, VOICE_ID_1 = 0x01U, VOICE_ID_2 = 0x02U, @@ -123,11 +120,11 @@ enum voice_id_e VOICE_ID_80 = 0x49U, VOICE_ID_90 = 0x4AU, VOICE_ID_END = 0x4BU, - + VOICE_ID_INVALID = 0xFFU, }; typedef enum voice_id_e voice_id_t; - + #ifdef ENABLE_VOICE extern voice_id_t g_voice_id[8]; extern uint8_t g_voice_read_index; @@ -135,7 +132,7 @@ typedef enum voice_id_e voice_id_t; extern volatile uint16_t g_count_down_to_play_next_voice_10ms; extern volatile bool g_flag_play_queued_voice; extern voice_id_t g_another_voice_id; - + void AUDIO_PlayVoice(uint8_t VoiceID); void AUDIO_PlaySingleVoice(bool flag); void AUDIO_SetVoiceID(uint8_t Index, voice_id_t VoiceID); @@ -144,4 +141,3 @@ typedef enum voice_id_e voice_id_t; #endif #endif - diff --git a/firmware.bin b/firmware.bin index 80fe3a6..366df91 100644 Binary files a/firmware.bin and b/firmware.bin differ diff --git a/firmware.packed.bin b/firmware.packed.bin index 0de14de..e47fc25 100644 Binary files a/firmware.packed.bin and b/firmware.packed.bin differ diff --git a/ui/menu.c b/ui/menu.c index 8ffbb55..686dfd5 100644 --- a/ui/menu.c +++ b/ui/menu.c @@ -1234,14 +1234,17 @@ void UI_DisplayMenu(void) if (g_menu_cursor == MENU_RX_CTCSS || g_menu_cursor == MENU_TX_CTCSS || - g_menu_cursor == MENU_RX_CDCSS || - g_menu_cursor == MENU_TX_CDCSS || + g_menu_cursor == MENU_RX_CDCSS || + g_menu_cursor == MENU_TX_CDCSS || g_menu_cursor == MENU_DTMF_LIST) { - unsigned int Offset; - NUMBER_ToDigits(g_sub_menu_selection, String); - Offset = (g_menu_cursor == MENU_DTMF_LIST) ? 2 : 3; - UI_Displaysmall_digits(Offset, String + (8 - Offset), 105, 0, false); + if (g_is_in_sub_menu) + { + unsigned int Offset; + NUMBER_ToDigits(g_sub_menu_selection, String); + Offset = (g_menu_cursor == MENU_DTMF_LIST) ? 2 : 3; + UI_Displaysmall_digits(Offset, String + (8 - Offset), 105, 0, false); + } } if ((g_menu_cursor == MENU_RESET || diff --git a/ui/ui.c b/ui/ui.c index f5f7d69..2b66d90 100644 --- a/ui/ui.c +++ b/ui/ui.c @@ -95,7 +95,7 @@ void GUI_SelectNextDisplay(gui_display_type_t Display) g_ask_for_confirmation = 0; g_ask_to_save = false; g_ask_to_delete = false; - g_fkey_pressed = false; + g_fkey_pressed = false; g_update_status = true; }