diff --git a/Makefile b/Makefile index fd5754e..7afef6c 100644 --- a/Makefile +++ b/Makefile @@ -32,6 +32,7 @@ ENABLE_F_CAL_MENU := 0 ENABLE_TX_UNLOCK := 0 ENABLE_CTCSS_TAIL_PHASE_SHIFT := 1 ENABLE_BOOT_BEEPS := 0 +ENABLE_DTMF_CALL_FLASH_LIGHT := 1 ENABLE_SHOW_CHARGE_LEVEL := 0 ENABLE_REVERSE_BAT_SYMBOL := 1 ENABLE_FREQ_SEARCH_TIMEOUT := 0 @@ -320,6 +321,9 @@ endif ifeq ($(ENABLE_BOOT_BEEPS),1) CFLAGS += -DENABLE_BOOT_BEEPS endif +ifeq ($(ENABLE_DTMF_CALL_FLASH_LIGHT),1) + CFLAGS += -DENABLE_DTMF_CALL_FLASH_LIGHT +endif ifeq ($(ENABLE_SHOW_CHARGE_LEVEL),1) CFLAGS += -DENABLE_SHOW_CHARGE_LEVEL endif diff --git a/README.md b/README.md index a7936d5..12a7043 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,7 @@ ENABLE_F_CAL_MENU := 0 enable/disable the radios hidden fre ENABLE_TX_UNLOCK := 0 '1' = allow TX everywhere EXCEPT airband (108~136) .. TX harmonic content will cause interference to other services, do so entirely at your own risk ! ENABLE_CTCSS_TAIL_PHASE_SHIFT := 1 standard CTCSS tail phase shift rather than QS's own 55Hz tone method ENABLE_BOOT_BEEPS := 0 gives user audio feedback on volume knob position at boot-up +ENABLE_DTMF_CALL_FLASH_LIGHT := 1 flash the flash light LED when a DTMF call is received ENABLE_SHOW_CHARGE_LEVEL := 0 show the charge level when the radio is on charge ENABLE_REVERSE_BAT_SYMBOL := 1 mirror the battery symbol on the status bar (+ pole on the right) ENABLE_FREQ_SEARCH_TIMEOUT := 1 timeout if FREQ not found when using F+4 search function diff --git a/app/app.c b/app/app.c index abd66e8..05339f5 100644 --- a/app/app.c +++ b/app/app.c @@ -2062,7 +2062,7 @@ void APP_time_slice_500ms(void) g_css_scan_mode == CSS_SCAN_MODE_OFF && g_screen_to_display != DISPLAY_AIRCOPY) { - if (g_screen_to_display != DISPLAY_MENU || g_menu_cursor != MENU_ABR) // don't turn off backlight if user is in backlight menu option + if (g_screen_to_display != DISPLAY_MENU || g_menu_cursor != MENU_AUTO_BACKLITE) // don't turn off backlight if user is in backlight menu option if (--g_backlight_count_down == 0) if (g_eeprom.backlight < (ARRAY_SIZE(g_sub_menu_backlight) - 1)) GPIO_ClearBit(&GPIOB->DATA, GPIOB_PIN_BACKLIGHT); // turn backlight off @@ -2277,7 +2277,16 @@ void APP_time_slice_500ms(void) if (g_dtmf_decode_ring_count_down_500ms > 0) { // make "ring-ring" sound g_dtmf_decode_ring_count_down_500ms--; + + #ifdef ENABLE_DTMF_CALL_FLASH_LIGHT + GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_FLASHLIGHT); // light on + #endif + AUDIO_PlayBeep(BEEP_880HZ_200MS); + + #ifdef ENABLE_DTMF_CALL_FLASH_LIGHT + GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_FLASHLIGHT); // light off + #endif } } else diff --git a/app/menu.c b/app/menu.c index 143dd6d..bb3e1b7 100644 --- a/app/menu.c +++ b/app/menu.c @@ -81,7 +81,7 @@ void MENU_start_css_scan(int8_t Direction) g_css_scan_mode = CSS_SCAN_MODE_SCANNING; g_update_status = true; - g_menu_scroll_direction = Direction; + g_MENU_SCRAMBLERoll_direction = Direction; RADIO_select_vfos(); @@ -112,7 +112,7 @@ int MENU_GetLimits(uint8_t Cursor, int32_t *pMin, int32_t *pMax) *pMax = ARRAY_SIZE(STEP_FREQ_TABLE) - 1; break; - case MENU_ABR: + case MENU_AUTO_BACKLITE: *pMin = 0; *pMax = ARRAY_SIZE(g_sub_menu_backlight) - 1; break; @@ -122,24 +122,24 @@ int MENU_GetLimits(uint8_t Cursor, int32_t *pMin, int32_t *pMax) *pMax = ARRAY_SIZE(g_sub_menu_freq_lock) - 1; break; - case MENU_MDF: + case MENU_MEM_DISP: *pMin = 0; - *pMax = ARRAY_SIZE(g_sub_menu_mdf) - 1; + *pMax = ARRAY_SIZE(g_sub_MENU_MEM_DISP) - 1; break; - case MENU_TXP: + case MENU_TX_POWER: *pMin = 0; - *pMax = ARRAY_SIZE(g_sub_menu_txp) - 1; + *pMax = ARRAY_SIZE(g_sub_MENU_TX_POWER) - 1; break; - case MENU_SFT_D: + case MENU_SHIFT_DIR: *pMin = 0; *pMax = ARRAY_SIZE(g_sub_menu_shift_dir) - 1; break; - case MENU_TDR: + case MENU_DUAL_WATCH: *pMin = 0; -// *pMax = ARRAY_SIZE(g_sub_menu_tdr) - 1; +// *pMax = ARRAY_SIZE(g_sub_MENU_DUAL_WATCH) - 1; *pMax = ARRAY_SIZE(g_sub_menu_off_on) - 1; break; @@ -148,9 +148,9 @@ int MENU_GetLimits(uint8_t Cursor, int32_t *pMin, int32_t *pMax) *pMax = 20; break; - case MENU_XB: + case MENU_CROSS_VFO: *pMin = 0; - *pMax = ARRAY_SIZE(g_sub_menu_xb) - 1; + *pMax = ARRAY_SIZE(g_sub_MENU_CROSS_VFO) - 1; break; #ifdef ENABLE_VOICE @@ -160,43 +160,43 @@ int MENU_GetLimits(uint8_t Cursor, int32_t *pMin, int32_t *pMax) break; #endif - case MENU_SC_REV: + case MENU_SCAN_CAR_RESUME: *pMin = 0; - *pMax = ARRAY_SIZE(g_sub_menu_sc_rev) - 1; + *pMax = ARRAY_SIZE(g_sub_MENU_SCAN_CAR_RESUME) - 1; break; - case MENU_ROGER: + case MENU_ROGER_MODE: *pMin = 0; - *pMax = ARRAY_SIZE(g_sub_menu_roger_mode) - 1; + *pMax = ARRAY_SIZE(g_sub_MENU_ROGER_MODE_mode) - 1; break; - case MENU_PONMSG: + case MENU_PON_MSG: *pMin = 0; *pMax = ARRAY_SIZE(g_sub_menu_pwr_on_msg) - 1; break; - case MENU_R_DCS: - case MENU_T_DCS: + case MENU_RX_CDCSS: + case MENU_TX_CDCSS: *pMin = 0; *pMax = 208; //*pMax = (ARRAY_SIZE(DCS_OPTIONS) * 2); break; - case MENU_R_CTCS: - case MENU_T_CTCS: + case MENU_RX_CTCSS: + case MENU_TX_CTCSS: *pMin = 0; *pMax = ARRAY_SIZE(CTCSS_OPTIONS) - 1; break; - case MENU_W_N: + case MENU_BANDWIDTH: *pMin = 0; - *pMax = ARRAY_SIZE(g_sub_menu_w_n) - 1; + *pMax = ARRAY_SIZE(g_sub_MENU_BANDWIDTH) - 1; break; #ifdef ENABLE_ALARM - case MENU_AL_MOD: + case MENU_ALARM_MODE: *pMin = 0; - *pMax = ARRAY_SIZE(g_sub_menu_AL_MOD) - 1; + *pMax = ARRAY_SIZE(g_sub_MENU_ALARM_MODE) - 1; break; #endif @@ -214,7 +214,7 @@ int MENU_GetLimits(uint8_t Cursor, int32_t *pMin, int32_t *pMax) break; case MENU_COMPAND: - case MENU_ABR_ON_TX_RX: + case MENU_AUTO_BACKLITE_ON_TX_RX: *pMin = 0; *pMax = ARRAY_SIZE(g_sub_menu_rx_tx) - 1; break; @@ -229,7 +229,7 @@ int MENU_GetLimits(uint8_t Cursor, int32_t *pMin, int32_t *pMax) #ifdef ENABLE_AM_FIX_TEST1 case MENU_AM_FIX_TEST1: *pMin = 0; - *pMax = ARRAY_SIZE(g_sub_menu_AM_fix_test1) - 1; + *pMax = ARRAY_SIZE(g_sub_MENU_AM_FIX_test1) - 1; break; #endif @@ -242,41 +242,41 @@ int MENU_GetLimits(uint8_t Cursor, int32_t *pMin, int32_t *pMax) #ifdef ENABLE_RSSI_BAR case MENU_RX_BAR: #endif - case MENU_BCL: + case MENU_BUSY_CHAN_LOCK: case MENU_BEEP: - case MENU_AUTOLK: + case MENU_AUTO_KEY_LOCK: case MENU_S_ADD1: case MENU_S_ADD2: case MENU_STE: - case MENU_D_ST: - case MENU_D_DCD: - case MENU_D_LIVE_DEC: - case MENU_AM: + case MENU_DTMF_ST: + case MENU_DTMF_DCD: + case MENU_DTMF_LIVE_DEC: + case MENU_MOD_MODE: *pMin = 0; *pMax = ARRAY_SIZE(g_sub_menu_off_on) - 1; break; #ifdef ENABLE_NOAA - case MENU_NOAA_S: + case MENU_NOAA_SCAN: #endif - case MENU_350TX: - case MENU_174TX: - case MENU_470TX: - case MENU_350EN: - case MENU_SCREN: + case MENU_350_TX: + case MENU_174_TX: + case MENU_470_TX: + case MENU_350_EN: + case MENU_SCRAMBLER_EN: case MENU_TX_EN: *pMin = 0; *pMax = ARRAY_SIZE(g_sub_menu_DIS_EN) - 1; break; - case MENU_SCR: + case MENU_SCRAMBLER: *pMin = 0; - *pMax = ARRAY_SIZE(g_sub_menu_SCRAMBLER) - 1; + *pMax = ARRAY_SIZE(g_sub_MENU_SCRAMBLERAMBLER) - 1; break; - case MENU_TOT: + case MENU_TX_TO: *pMin = 0; - *pMax = ARRAY_SIZE(g_sub_menu_TOT) - 1; + *pMax = ARRAY_SIZE(g_sub_MENU_TX_TO) - 1; break; #ifdef ENABLE_VOX @@ -287,9 +287,9 @@ int MENU_GetLimits(uint8_t Cursor, int32_t *pMin, int32_t *pMax) *pMax = 10; break; - case MENU_MEM_CH: + case MENU_MEM_SAVE: case MENU_1_CALL: - case MENU_DEL_CH: + case MENU_MEM_DEL: case MENU_MEM_NAME: *pMin = 0; *pMax = USER_CHANNEL_LAST; @@ -301,12 +301,12 @@ int MENU_GetLimits(uint8_t Cursor, int32_t *pMin, int32_t *pMax) *pMax = USER_CHANNEL_LAST; break; - case MENU_SAVE: + case MENU_BAT_SAVE: *pMin = 0; - *pMax = ARRAY_SIZE(g_sub_menu_SAVE) - 1; + *pMax = ARRAY_SIZE(g_sub_MENU_BAT_SAVE) - 1; break; - case MENU_MIC: + case MENU_MIC_GAIN: *pMin = 0; *pMax = 4; break; @@ -317,9 +317,9 @@ int MENU_GetLimits(uint8_t Cursor, int32_t *pMin, int32_t *pMax) *pMax = 2; break; - case MENU_D_RSP: + case MENU_DTMF_RSP: *pMin = 0; - *pMax = ARRAY_SIZE(g_sub_menu_D_RSP) - 1; + *pMax = ARRAY_SIZE(g_sub_MENU_DTMF_RSP) - 1; break; case MENU_PTT_ID: @@ -332,17 +332,17 @@ int MENU_GetLimits(uint8_t Cursor, int32_t *pMin, int32_t *pMax) *pMax = ARRAY_SIZE(g_sub_menu_BAT_TXT) - 1; break; - case MENU_D_HOLD: + case MENU_DTMF_HOLD: *pMin = DTMF_HOLD_MIN; *pMax = DTMF_HOLD_MAX; break; - case MENU_D_PRE: + case MENU_DTMF_PRE: *pMin = 3; *pMax = 99; break; - case MENU_D_LIST: + case MENU_DTMF_LIST: *pMin = 1; *pMax = 16; break; @@ -354,7 +354,7 @@ int MENU_GetLimits(uint8_t Cursor, int32_t *pMin, int32_t *pMax) break; #endif - case MENU_BATCAL: + case MENU_BAT_CAL: *pMin = 1600; // 0 *pMax = 2200; // 2300 break; @@ -399,17 +399,17 @@ void MENU_AcceptSetting(void) } return; - case MENU_TXP: + case MENU_TX_POWER: g_tx_vfo->output_power = g_sub_menu_selection; g_request_save_channel = 1; return; - case MENU_T_DCS: + case MENU_TX_CDCSS: pConfig = &g_tx_vfo->freq_config_tx; // Fallthrough - case MENU_R_DCS: + case MENU_RX_CDCSS: if (g_sub_menu_selection == 0) { if (pConfig->code_type != CODE_TYPE_DIGITAL && pConfig->code_type != CODE_TYPE_REVERSE_DIGITAL) @@ -439,9 +439,9 @@ void MENU_AcceptSetting(void) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wimplicit-fallthrough=" - case MENU_T_CTCS: + case MENU_TX_CTCSS: pConfig = &g_tx_vfo->freq_config_tx; - case MENU_R_CTCS: + case MENU_RX_CTCSS: if (g_sub_menu_selection == 0) { if (pConfig->code_type != CODE_TYPE_CONTINUOUS_TONE) @@ -469,7 +469,7 @@ void MENU_AcceptSetting(void) #pragma GCC diagnostic pop - case MENU_SFT_D: + case MENU_SHIFT_DIR: g_tx_vfo->tx_offset_freq_dir = g_sub_menu_selection; g_request_save_channel = 1; return; @@ -479,12 +479,12 @@ void MENU_AcceptSetting(void) g_request_save_channel = 1; return; - case MENU_W_N: + case MENU_BANDWIDTH: g_tx_vfo->channel_bandwidth = g_sub_menu_selection; g_request_save_channel = 1; return; - case MENU_SCR: + case MENU_SCRAMBLER: g_tx_vfo->scrambling_type = g_sub_menu_selection; #if 0 if (g_sub_menu_selection > 0 && g_setting_scramble_enable) @@ -495,12 +495,12 @@ void MENU_AcceptSetting(void) g_request_save_channel= 1; return; - case MENU_BCL: + case MENU_BUSY_CHAN_LOCK: g_tx_vfo->busy_channel_lock = g_sub_menu_selection; g_request_save_channel = 1; return; - case MENU_MEM_CH: + case MENU_MEM_SAVE: g_tx_vfo->channel_save = g_sub_menu_selection; #if 0 g_eeprom.user_channel[0] = g_sub_menu_selection; @@ -529,7 +529,7 @@ void MENU_AcceptSetting(void) g_flag_reconfigure_vfos = true; return; - case MENU_SAVE: + case MENU_BAT_SAVE: g_eeprom.battery_save = g_sub_menu_selection; break; @@ -544,11 +544,11 @@ void MENU_AcceptSetting(void) break; #endif - case MENU_ABR: + case MENU_AUTO_BACKLITE: g_eeprom.backlight = g_sub_menu_selection; break; - case MENU_ABR_ON_TX_RX: + case MENU_AUTO_BACKLITE_ON_TX_RX: g_setting_backlight_on_tx_rx = g_sub_menu_selection; break; @@ -557,7 +557,7 @@ void MENU_AcceptSetting(void) ST7565_SetContrast(g_setting_contrast); break; - case MENU_TDR: + case MENU_DUAL_WATCH: // g_eeprom.dual_watch = g_sub_menu_selection; g_eeprom.dual_watch = (g_sub_menu_selection > 0) ? 1 + g_eeprom.tx_vfo : DUAL_WATCH_OFF; @@ -569,7 +569,7 @@ void MENU_AcceptSetting(void) g_eeprom.scan_hold_time_500ms = g_sub_menu_selection; break; - case MENU_XB: + case MENU_CROSS_VFO: if (IS_NOAA_CHANNEL(g_eeprom.screen_channel[0])) return; if (IS_NOAA_CHANNEL(g_eeprom.screen_channel[1])) @@ -584,7 +584,7 @@ void MENU_AcceptSetting(void) g_eeprom.beep_control = g_sub_menu_selection; break; - case MENU_TOT: + case MENU_TX_TO: g_eeprom.tx_timeout_timer = g_sub_menu_selection; break; @@ -595,15 +595,15 @@ void MENU_AcceptSetting(void) break; #endif - case MENU_SC_REV: + case MENU_SCAN_CAR_RESUME: g_eeprom.scan_resume_mode = g_sub_menu_selection; break; - case MENU_MDF: + case MENU_MEM_DISP: g_eeprom.channel_display_mode = g_sub_menu_selection; break; - case MENU_AUTOLK: + case MENU_AUTO_KEY_LOCK: g_eeprom.auto_keypad_lock = g_sub_menu_selection; g_key_lock_count_down_500ms = key_lock_timeout_500ms; break; @@ -630,7 +630,7 @@ void MENU_AcceptSetting(void) g_eeprom.repeater_tail_tone_elimination = g_sub_menu_selection; break; - case MENU_MIC: + case MENU_MIC_GAIN: g_eeprom.mic_sensitivity = g_sub_menu_selection; BOARD_EEPROM_LoadCalibration(); g_flag_reconfigure_vfos = true; @@ -667,24 +667,24 @@ void MENU_AcceptSetting(void) break; #ifdef ENABLE_ALARM - case MENU_AL_MOD: + case MENU_ALARM_MODE: g_eeprom.alarm_mode = g_sub_menu_selection; break; #endif - case MENU_D_ST: + case MENU_DTMF_ST: g_eeprom.dtmf_side_tone = g_sub_menu_selection; break; - case MENU_D_RSP: + case MENU_DTMF_RSP: g_eeprom.dtmf_decode_response = g_sub_menu_selection; break; - case MENU_D_HOLD: + case MENU_DTMF_HOLD: g_eeprom.dtmf_auto_reset_time = g_sub_menu_selection; break; - case MENU_D_PRE: + case MENU_DTMF_PRE: g_eeprom.dtmf_preload_time = g_sub_menu_selection * 10; break; @@ -704,13 +704,13 @@ void MENU_AcceptSetting(void) g_setting_battery_text = g_sub_menu_selection; break; - case MENU_D_DCD: + case MENU_DTMF_DCD: g_tx_vfo->dtmf_decoding_enable = g_sub_menu_selection; DTMF_clear_RX(); g_request_save_channel = 1; return; - case MENU_D_LIVE_DEC: + case MENU_DTMF_LIVE_DEC: g_setting_live_dtmf_decoder = g_sub_menu_selection; g_dtmf_rx_live_timeout = 0; memset(g_dtmf_rx_live, 0, sizeof(g_dtmf_rx_live)); @@ -720,7 +720,7 @@ void MENU_AcceptSetting(void) g_update_status = true; break; - case MENU_D_LIST: + case MENU_DTMF_LIST: g_dtmf_chosen_contact = g_sub_menu_selection - 1; if (g_dtmf_is_contact_valid) { @@ -732,11 +732,11 @@ void MENU_AcceptSetting(void) } return; - case MENU_PONMSG: + case MENU_PON_MSG: g_eeprom.pwr_on_display_mode = g_sub_menu_selection; break; - case MENU_ROGER: + case MENU_ROGER_MODE: g_eeprom.roger_mode = g_sub_menu_selection; if (g_eeprom.roger_mode != ROGER_MODE_OFF) { @@ -750,7 +750,7 @@ void MENU_AcceptSetting(void) } break; - case MENU_AM: + case MENU_MOD_MODE: g_tx_vfo->am_mode = g_sub_menu_selection; g_request_save_channel = 1; return; @@ -772,13 +772,13 @@ void MENU_AcceptSetting(void) #endif #ifdef ENABLE_NOAA - case MENU_NOAA_S: + case MENU_NOAA_SCAN: g_eeprom.noaa_auto_scan = g_sub_menu_selection; g_flag_reconfigure_vfos = true; break; #endif - case MENU_DEL_CH: + case MENU_MEM_DEL: SETTINGS_UpdateChannel(g_sub_menu_selection, NULL, false); g_vfo_configure_mode = VFO_CONFIGURE_RELOAD; g_flag_reset_vfos = true; @@ -804,7 +804,7 @@ void MENU_AcceptSetting(void) BOARD_FactoryReset(g_sub_menu_selection); return; - case MENU_350TX: + case MENU_350_TX: g_setting_350_tx_enable = g_sub_menu_selection; break; @@ -812,21 +812,21 @@ void MENU_AcceptSetting(void) g_setting_freq_lock = g_sub_menu_selection; break; - case MENU_174TX: + case MENU_174_TX: g_setting_174_tx_enable = g_sub_menu_selection; break; - case MENU_470TX: + case MENU_470_TX: g_setting_470_tx_enable = g_sub_menu_selection; break; - case MENU_350EN: + case MENU_350_EN: g_setting_350_enable = g_sub_menu_selection; g_vfo_configure_mode = VFO_CONFIGURE_RELOAD; g_flag_reset_vfos = true; break; - case MENU_SCREN: + case MENU_SCRAMBLER_EN: g_setting_scramble_enable = g_sub_menu_selection; g_flag_reconfigure_vfos = true; break; @@ -841,7 +841,7 @@ void MENU_AcceptSetting(void) return; #endif - case MENU_BATCAL: + case MENU_BAT_CAL: { uint16_t buf[4]; @@ -869,18 +869,18 @@ void MENU_SelectNextCode(void) { int32_t UpperLimit; - if (g_menu_cursor == MENU_R_DCS) + if (g_menu_cursor == MENU_RX_CDCSS) UpperLimit = 208; //UpperLimit = ARRAY_SIZE(DCS_OPTIONS); else - if (g_menu_cursor == MENU_R_CTCS) + if (g_menu_cursor == MENU_RX_CTCSS) UpperLimit = ARRAY_SIZE(CTCSS_OPTIONS) - 1; else return; - g_sub_menu_selection = NUMBER_AddWithWraparound(g_sub_menu_selection, g_menu_scroll_direction, 1, UpperLimit); + g_sub_menu_selection = NUMBER_AddWithWraparound(g_sub_menu_selection, g_MENU_SCRAMBLERoll_direction, 1, UpperLimit); - if (g_menu_cursor == MENU_R_DCS) + if (g_menu_cursor == MENU_RX_CDCSS) { if (g_sub_menu_selection > 104) { @@ -934,11 +934,11 @@ void MENU_ShowCurrentSetting(void) g_sub_menu_selection = g_tx_vfo->step_setting; break; - case MENU_TXP: + case MENU_TX_POWER: g_sub_menu_selection = g_tx_vfo->output_power; break; - case MENU_R_DCS: + case MENU_RX_CDCSS: switch (g_tx_vfo->freq_config_rx.code_type) { case CODE_TYPE_DIGITAL: @@ -957,11 +957,11 @@ void MENU_ShowCurrentSetting(void) g_sub_menu_selection = 0; break; - case MENU_R_CTCS: + case MENU_RX_CTCSS: g_sub_menu_selection = (g_tx_vfo->freq_config_rx.code_type == CODE_TYPE_CONTINUOUS_TONE) ? g_tx_vfo->freq_config_rx.code + 1 : 0; break; - case MENU_T_DCS: + case MENU_TX_CDCSS: switch (g_tx_vfo->freq_config_tx.code_type) { case CODE_TYPE_DIGITAL: @@ -976,11 +976,11 @@ void MENU_ShowCurrentSetting(void) } break; - case MENU_T_CTCS: + case MENU_TX_CTCSS: g_sub_menu_selection = (g_tx_vfo->freq_config_tx.code_type == CODE_TYPE_CONTINUOUS_TONE) ? g_tx_vfo->freq_config_tx.code + 1 : 0; break; - case MENU_SFT_D: + case MENU_SHIFT_DIR: g_sub_menu_selection = g_tx_vfo->tx_offset_freq_dir; break; @@ -988,19 +988,19 @@ void MENU_ShowCurrentSetting(void) g_sub_menu_selection = g_tx_vfo->tx_offset_freq; break; - case MENU_W_N: + case MENU_BANDWIDTH: g_sub_menu_selection = g_tx_vfo->channel_bandwidth; break; - case MENU_SCR: + case MENU_SCRAMBLER: g_sub_menu_selection = g_tx_vfo->scrambling_type; break; - case MENU_BCL: + case MENU_BUSY_CHAN_LOCK: g_sub_menu_selection = g_tx_vfo->busy_channel_lock; break; - case MENU_MEM_CH: + case MENU_MEM_SAVE: #if 0 g_sub_menu_selection = g_eeprom.user_channel[0]; #else @@ -1012,7 +1012,7 @@ void MENU_ShowCurrentSetting(void) g_sub_menu_selection = g_eeprom.user_channel[g_eeprom.tx_vfo]; break; - case MENU_SAVE: + case MENU_BAT_SAVE: g_sub_menu_selection = g_eeprom.battery_save; break; @@ -1022,14 +1022,14 @@ void MENU_ShowCurrentSetting(void) break; #endif - case MENU_ABR: + case MENU_AUTO_BACKLITE: g_sub_menu_selection = g_eeprom.backlight; g_backlight_count_down = 0; GPIO_SetBit(&GPIOB->DATA, GPIOB_PIN_BACKLIGHT); // turn the backlight ON while in backlight menu break; - case MENU_ABR_ON_TX_RX: + case MENU_AUTO_BACKLITE_ON_TX_RX: g_sub_menu_selection = g_setting_backlight_on_tx_rx; break; @@ -1037,7 +1037,7 @@ void MENU_ShowCurrentSetting(void) g_sub_menu_selection = g_setting_contrast; break; - case MENU_TDR: + case MENU_DUAL_WATCH: // g_sub_menu_selection = g_eeprom.dual_watch; g_sub_menu_selection = (g_eeprom.dual_watch == DUAL_WATCH_OFF) ? 0 : 1; break; @@ -1046,7 +1046,7 @@ void MENU_ShowCurrentSetting(void) g_sub_menu_selection = g_eeprom.scan_hold_time_500ms; break; - case MENU_XB: + case MENU_CROSS_VFO: g_sub_menu_selection = g_eeprom.cross_vfo_rx_tx; break; @@ -1054,7 +1054,7 @@ void MENU_ShowCurrentSetting(void) g_sub_menu_selection = g_eeprom.beep_control; break; - case MENU_TOT: + case MENU_TX_TO: g_sub_menu_selection = g_eeprom.tx_timeout_timer; break; @@ -1064,15 +1064,15 @@ void MENU_ShowCurrentSetting(void) break; #endif - case MENU_SC_REV: + case MENU_SCAN_CAR_RESUME: g_sub_menu_selection = g_eeprom.scan_resume_mode; break; - case MENU_MDF: + case MENU_MEM_DISP: g_sub_menu_selection = g_eeprom.channel_display_mode; break; - case MENU_AUTOLK: + case MENU_AUTO_KEY_LOCK: g_sub_menu_selection = g_eeprom.auto_keypad_lock; break; @@ -1092,7 +1092,7 @@ void MENU_ShowCurrentSetting(void) g_sub_menu_selection = g_eeprom.repeater_tail_tone_elimination; break; - case MENU_MIC: + case MENU_MIC_GAIN: g_sub_menu_selection = g_eeprom.mic_sensitivity; break; @@ -1129,20 +1129,20 @@ void MENU_ShowCurrentSetting(void) break; #ifdef ENABLE_ALARM - case MENU_AL_MOD: + case MENU_ALARM_MODE: g_sub_menu_selection = g_eeprom.alarm_mode; break; #endif - case MENU_D_ST: + case MENU_DTMF_ST: g_sub_menu_selection = g_eeprom.dtmf_side_tone; break; - case MENU_D_RSP: + case MENU_DTMF_RSP: g_sub_menu_selection = g_eeprom.dtmf_decode_response; break; - case MENU_D_HOLD: + case MENU_DTMF_HOLD: g_sub_menu_selection = g_eeprom.dtmf_auto_reset_time; if (g_sub_menu_selection <= DTMF_HOLD_MIN) @@ -1170,7 +1170,7 @@ void MENU_ShowCurrentSetting(void) break; - case MENU_D_PRE: + case MENU_DTMF_PRE: g_sub_menu_selection = g_eeprom.dtmf_preload_time / 10; break; @@ -1182,27 +1182,27 @@ void MENU_ShowCurrentSetting(void) g_sub_menu_selection = g_setting_battery_text; return; - case MENU_D_DCD: + case MENU_DTMF_DCD: g_sub_menu_selection = g_tx_vfo->dtmf_decoding_enable; break; - case MENU_D_LIST: + case MENU_DTMF_LIST: g_sub_menu_selection = g_dtmf_chosen_contact + 1; break; - case MENU_D_LIVE_DEC: + case MENU_DTMF_LIVE_DEC: g_sub_menu_selection = g_setting_live_dtmf_decoder; break; - case MENU_PONMSG: + case MENU_PON_MSG: g_sub_menu_selection = g_eeprom.pwr_on_display_mode; break; - case MENU_ROGER: + case MENU_ROGER_MODE: g_sub_menu_selection = g_eeprom.roger_mode; break; - case MENU_AM: + case MENU_MOD_MODE: g_sub_menu_selection = g_tx_vfo->am_mode; break; @@ -1219,12 +1219,12 @@ void MENU_ShowCurrentSetting(void) #endif #ifdef ENABLE_NOAA - case MENU_NOAA_S: + case MENU_NOAA_SCAN: g_sub_menu_selection = g_eeprom.noaa_auto_scan; break; #endif - case MENU_DEL_CH: + case MENU_MEM_DEL: #if 0 g_sub_menu_selection = RADIO_FindNextChannel(g_eeprom.user_channel[0], 1, false, 1); #else @@ -1248,7 +1248,7 @@ void MENU_ShowCurrentSetting(void) g_sub_menu_selection = g_eeprom.key2_long_press_action; break; - case MENU_350TX: + case MENU_350_TX: g_sub_menu_selection = g_setting_350_tx_enable; break; @@ -1256,19 +1256,19 @@ void MENU_ShowCurrentSetting(void) g_sub_menu_selection = g_setting_freq_lock; break; - case MENU_174TX: + case MENU_174_TX: g_sub_menu_selection = g_setting_174_tx_enable; break; - case MENU_470TX: + case MENU_470_TX: g_sub_menu_selection = g_setting_470_tx_enable; break; - case MENU_350EN: + case MENU_350_EN: g_sub_menu_selection = g_setting_350_enable; break; - case MENU_SCREN: + case MENU_SCRAMBLER_EN: g_sub_menu_selection = g_setting_scramble_enable; break; @@ -1282,7 +1282,7 @@ void MENU_ShowCurrentSetting(void) break; #endif - case MENU_BATCAL: + case MENU_BAT_CAL: g_sub_menu_selection = g_battery_calibration[3]; break; @@ -1401,8 +1401,8 @@ static void MENU_Key_0_to_9(key_code_t Key, bool key_pressed, bool key_held) return; } - if (g_menu_cursor == MENU_MEM_CH || - g_menu_cursor == MENU_DEL_CH || + if (g_menu_cursor == MENU_MEM_SAVE || + g_menu_cursor == MENU_MEM_DEL || g_menu_cursor == MENU_1_CALL || g_menu_cursor == MENU_MEM_NAME) { // enter 3-digit channel number @@ -1535,12 +1535,12 @@ static void MENU_Key_MENU(const bool key_pressed, const bool key_held) if (!g_is_in_sub_menu) { #ifdef ENABLE_VOICE - if (g_menu_cursor != MENU_SCR) + if (g_menu_cursor != MENU_SCRAMBLER) g_another_voice_id = g_menu_list[g_menu_list_sorted[g_menu_cursor]].voice_id; #endif #if 1 - if (g_menu_cursor == MENU_DEL_CH || g_menu_cursor == MENU_MEM_NAME) + if (g_menu_cursor == MENU_MEM_DEL || g_menu_cursor == MENU_MEM_NAME) if (!RADIO_CheckValidChannel(g_sub_menu_selection, false, 0)) return; // invalid channel #endif @@ -1548,7 +1548,7 @@ static void MENU_Key_MENU(const bool key_pressed, const bool key_held) g_ask_for_confirmation = 0; g_is_in_sub_menu = true; -// if (g_menu_cursor != MENU_D_LIST) +// if (g_menu_cursor != MENU_DTMF_LIST) { g_input_box_index = 0; g_edit_index = -1; @@ -1605,8 +1605,8 @@ static void MENU_Key_MENU(const bool key_pressed, const bool key_held) if (g_is_in_sub_menu) { if (g_menu_cursor == MENU_RESET || - g_menu_cursor == MENU_MEM_CH || - g_menu_cursor == MENU_DEL_CH || + g_menu_cursor == MENU_MEM_SAVE || + g_menu_cursor == MENU_MEM_DEL || g_menu_cursor == MENU_MEM_NAME) { switch (g_ask_for_confirmation) @@ -1655,7 +1655,7 @@ static void MENU_Key_MENU(const bool key_pressed, const bool key_held) } #ifdef ENABLE_VOICE - if (g_menu_cursor == MENU_SCR) + if (g_menu_cursor == MENU_SCRAMBLER) g_another_voice_id = (g_sub_menu_selection == 0) ? VOICE_ID_SCRAMBLER_OFF : VOICE_ID_SCRAMBLER_ON; else g_another_voice_id = VOICE_ID_CONFIRM; @@ -1694,7 +1694,7 @@ static void MENU_Key_STAR(const bool key_pressed, const bool key_held) if (IS_NOT_NOAA_CHANNEL(g_rx_vfo->channel_save) && g_rx_vfo->am_mode == 0) { - if (g_menu_cursor == MENU_R_CTCS || g_menu_cursor == MENU_R_DCS) + if (g_menu_cursor == MENU_RX_CTCSS || g_menu_cursor == MENU_RX_CDCSS) { // scan CTCSS or DCS to find the tone/code of the incoming signal if (g_css_scan_mode == CSS_SCAN_MODE_OFF) @@ -1782,7 +1782,7 @@ static void MENU_Key_UP_DOWN(bool key_pressed, bool key_held, int8_t Direction) g_request_display_screen = DISPLAY_MENU; - if (g_menu_cursor != MENU_ABR && g_eeprom.backlight == 0) + if (g_menu_cursor != MENU_AUTO_BACKLITE && g_eeprom.backlight == 0) { g_backlight_count_down = 0; GPIO_ClearBit(&GPIOB->DATA, GPIOB_PIN_BACKLIGHT); // turn the backlight OFF @@ -1814,7 +1814,7 @@ static void MENU_Key_UP_DOWN(bool key_pressed, bool key_held, int8_t Direction) switch (g_menu_cursor) { - case MENU_DEL_CH: + case MENU_MEM_DEL: case MENU_1_CALL: case MENU_MEM_NAME: bCheckScanList = false; @@ -1905,11 +1905,11 @@ void MENU_process_key(key_code_t Key, bool key_pressed, bool key_held) if (g_screen_to_display == DISPLAY_MENU) { - if (g_menu_cursor == MENU_VOL || + if (g_menu_cursor == MENU_VOLTAGE || #ifdef ENABLE_F_CAL_MENU g_menu_cursor == MENU_F_CALI || #endif - g_menu_cursor == MENU_BATCAL) + g_menu_cursor == MENU_BAT_CAL) { g_menu_count_down = menu_timeout_long_500ms; } diff --git a/firmware.bin b/firmware.bin index b7c59db..f744a92 100644 Binary files a/firmware.bin and b/firmware.bin differ diff --git a/firmware.packed.bin b/firmware.packed.bin index 97f2127..d0799ae 100644 Binary files a/firmware.packed.bin and b/firmware.packed.bin differ diff --git a/frequencies.c b/frequencies.c index 7331ca0..71cd235 100644 --- a/frequencies.c +++ b/frequencies.c @@ -70,9 +70,11 @@ const freq_band_table_t FREQ_BAND_TABLE[7] = #ifdef ENABLE_1250HZ_STEP // includes 1.25kHz step const uint16_t STEP_FREQ_TABLE[7] = {125, 250, 625, 1000, 1250, 2500, 833}; +// const uint16_t STEP_FREQ_TABLE[7] = {125, 250, 625, 1000, 1250, 2500, 833, 10, 50}; #else // QS steps (*10 Hz) const uint16_t STEP_FREQ_TABLE[7] = {250, 500, 625, 1000, 1250, 2500, 833}; +// const uint16_t STEP_FREQ_TABLE[7] = {250, 500, 625, 1000, 1250, 2500, 833, 10, 50}; #endif frequency_band_t FREQUENCY_GetBand(uint32_t Frequency) diff --git a/frequencies.h b/frequencies.h index 7ca4b40..d32d513 100644 --- a/frequencies.h +++ b/frequencies.h @@ -56,8 +56,10 @@ extern const freq_band_table_t FREQ_BAND_TABLE[7]; STEP_10_0kHz, STEP_12_5kHz, STEP_25_0kHz, - STEP_8_33kHz -}; + STEP_8_33kHz, +// STEP_100Hz, +// STEP_500Hz + }; #else // QS steps enum step_setting_e { @@ -67,12 +69,15 @@ extern const freq_band_table_t FREQ_BAND_TABLE[7]; STEP_10_0kHz, STEP_12_5kHz, STEP_25_0kHz, - STEP_8_33kHz + STEP_8_33kHz, +// STEP_100Hz, +// STEP_500Hz }; #endif typedef enum step_setting_e step_setting_t; extern const uint16_t STEP_FREQ_TABLE[7]; +//extern const uint16_t STEP_FREQ_TABLE[9]; #ifdef ENABLE_NOAA extern const uint32_t NOAA_FREQUENCY_TABLE[10]; diff --git a/helper/battery.c b/helper/battery.c index cb35210..f48a2f4 100644 --- a/helper/battery.c +++ b/helper/battery.c @@ -106,7 +106,7 @@ void BATTERY_GetReadings(const bool bDisplayBatteryLevel) g_battery_voltage_average = (Voltage * 760) / g_battery_calibration[3]; - if ((g_screen_to_display == DISPLAY_MENU) && g_menu_cursor == MENU_VOL) + if ((g_screen_to_display == DISPLAY_MENU) && g_menu_cursor == MENU_VOLTAGE) g_update_display = true; if (g_usb_current < 501) diff --git a/radio.c b/radio.c index a2e2518..93f9572 100644 --- a/radio.c +++ b/radio.c @@ -266,7 +266,7 @@ void RADIO_configure_channel(const unsigned int VFO, const unsigned int configur g_eeprom.vfo_info[VFO].step_freq = STEP_FREQ_TABLE[Tmp]; Tmp = Data[7]; - if (Tmp > (ARRAY_SIZE(g_sub_menu_SCRAMBLER) - 1)) + if (Tmp > (ARRAY_SIZE(g_sub_MENU_SCRAMBLERAMBLER) - 1)) Tmp = 0; g_eeprom.vfo_info[VFO].scrambling_type = Tmp; @@ -1079,7 +1079,7 @@ void RADIO_PrepareTX(void) if (g_eeprom.tx_timeout_timer == 0) g_tx_timer_count_down_500ms = 60; // 30 sec else - if (g_eeprom.tx_timeout_timer < (ARRAY_SIZE(g_sub_menu_TOT) - 1)) + if (g_eeprom.tx_timeout_timer < (ARRAY_SIZE(g_sub_MENU_TX_TO) - 1)) g_tx_timer_count_down_500ms = 120 * g_eeprom.tx_timeout_timer; // minutes else g_tx_timer_count_down_500ms = 120 * 15; // 15 minutes diff --git a/ui/main.c b/ui/main.c index e23a561..4366799 100644 --- a/ui/main.c +++ b/ui/main.c @@ -91,7 +91,7 @@ void draw_bar(uint8_t *line, const int len, const int max_width) if (g_eeprom.tx_timeout_timer == 0) timeout_secs = 30; // 30 sec else - if (g_eeprom.tx_timeout_timer < (ARRAY_SIZE(g_sub_menu_TOT) - 1)) + if (g_eeprom.tx_timeout_timer < (ARRAY_SIZE(g_sub_MENU_TX_TO) - 1)) timeout_secs = 60 * g_eeprom.tx_timeout_timer; // minutes else timeout_secs = 60 * 15; // 15 minutes diff --git a/ui/menu.c b/ui/menu.c index 64fb552..a9f2526 100644 --- a/ui/menu.c +++ b/ui/menu.c @@ -46,112 +46,121 @@ const t_menu_item g_menu_list[] = { // text, voice ID, menu ID - {"SQL", VOICE_ID_SQUELCH, MENU_SQL }, - {"STEP", VOICE_ID_FREQUENCY_STEP, MENU_STEP }, - {"W/N", VOICE_ID_CHANNEL_BANDWIDTH, MENU_W_N }, - {"Tx PWR", VOICE_ID_POWER, MENU_TXP }, // was "TXP" - {"Rx DCS", VOICE_ID_DCS, MENU_R_DCS }, // was "R_DCS" - {"Rx CTS", VOICE_ID_CTCSS, MENU_R_CTCS }, // was "R_CTCS" - {"Tx DCS", VOICE_ID_DCS, MENU_T_DCS }, // was "T_DCS" - {"Tx CTS", VOICE_ID_CTCSS, MENU_T_CTCS }, // was "T_CTCS" - {"Tx DIR", VOICE_ID_TX_OFFSET_FREQ_DIR, MENU_SFT_D }, // was "SFT_D" - {"Tx OFS", VOICE_ID_TX_OFFSET_FREQ, MENU_OFFSET }, // was "OFFSET" - {"Tx TO", VOICE_ID_TRANSMIT_OVER_TIME, MENU_TOT }, // was "TOT" - {"Tx VFO", VOICE_ID_INVALID, MENU_XB }, // was "WX" - {"Dual W", VOICE_ID_DUAL_STANDBY, MENU_TDR }, // was "TDR" - {"S HOLD", VOICE_ID_INVALID, MENU_SCAN_HOLD }, - {"SCRAM", VOICE_ID_SCRAMBLER_ON, MENU_SCR }, // was "SCR" - {"BCL", VOICE_ID_BUSY_LOCKOUT, MENU_BCL }, - {"CH SAV", VOICE_ID_MEMORY_CHANNEL, MENU_MEM_CH }, // was "MEM-CH" - {"CH NAM", VOICE_ID_INVALID, MENU_MEM_NAME }, - {"CH DEL", VOICE_ID_DELETE_CHANNEL, MENU_DEL_CH }, // was "DEL-CH" - {"CH DIS", VOICE_ID_INVALID, MENU_MDF }, // was "MDF" - {"BatSAV", VOICE_ID_SAVE_MODE, MENU_SAVE }, // was "SAVE" + {"SQL", VOICE_ID_SQUELCH, MENU_SQL }, + {"STEP", VOICE_ID_FREQUENCY_STEP, MENU_STEP }, + {"W/N", VOICE_ID_CHANNEL_BANDWIDTH, MENU_BANDWIDTH }, + {"Tx PWR", VOICE_ID_POWER, MENU_TX_POWER }, // was "TXP" + {"Rx DCS", VOICE_ID_DCS, MENU_RX_CDCSS }, // was "R_DCS" + {"Rx CTS", VOICE_ID_CTCSS, MENU_RX_CTCSS }, // was "R_CTCS" + {"Tx DCS", VOICE_ID_DCS, MENU_TX_CDCSS }, // was "T_DCS" + {"Tx CTS", VOICE_ID_CTCSS, MENU_TX_CTCSS }, // was "T_CTCS" + {"Tx DIR", VOICE_ID_TX_OFFSET_FREQ_DIR, MENU_SHIFT_DIR }, // was "SFT_D" + {"Tx OFS", VOICE_ID_TX_OFFSET_FREQ, MENU_OFFSET }, // was "OFFSET" + {"Tx TO", VOICE_ID_TRANSMIT_OVER_TIME, MENU_TX_TO }, // was "TOT" + {"Tx VFO", VOICE_ID_INVALID, MENU_CROSS_VFO }, // was "WX" + {"Dual W", VOICE_ID_DUAL_STANDBY, MENU_DUAL_WATCH }, // was "TDR" + {"S HOLD", VOICE_ID_INVALID, MENU_SCAN_HOLD }, + {"SCRAM", VOICE_ID_SCRAMBLER_ON, MENU_SCRAMBLER }, // was "SCR" + {"BCL", VOICE_ID_BUSY_LOCKOUT, MENU_BUSY_CHAN_LOCK }, + {"CH SAV", VOICE_ID_MEMORY_CHANNEL, MENU_MEM_SAVE }, // was "MEM-CH" + {"CH NAM", VOICE_ID_INVALID, MENU_MEM_NAME }, + {"CH DEL", VOICE_ID_DELETE_CHANNEL, MENU_MEM_DEL }, // was "DEL-CH" + {"CH DIS", VOICE_ID_INVALID, MENU_MEM_DISP }, // was "MDF" + {"BatSAV", VOICE_ID_SAVE_MODE, MENU_BAT_SAVE }, // was "SAVE" #ifdef ENABLE_VOX - {"VOX", VOICE_ID_VOX, MENU_VOX }, + {"VOX", VOICE_ID_VOX, MENU_VOX }, #endif - {"BL ", VOICE_ID_INVALID, MENU_ABR }, // was "ABR" - {"BL TRX", VOICE_ID_INVALID, MENU_ABR_ON_TX_RX }, - {"CTRAST", VOICE_ID_INVALID, MENU_CONTRAST }, - {"BEEP", VOICE_ID_BEEP_PROMPT, MENU_BEEP }, -#ifdef ENABLE_VOICE - {"VOICE", VOICE_ID_VOICE_PROMPT, MENU_VOICE }, + {"BL ", VOICE_ID_INVALID, MENU_AUTO_BACKLITE }, // was "ABR" + {"BL TRX", VOICE_ID_INVALID, MENU_AUTO_BACKLITE_ON_TX_RX}, + {"CTRAST", VOICE_ID_INVALID, MENU_CONTRAST }, + {"BEEP", VOICE_ID_BEEP_PROMPT, MENU_BEEP }, +#ifdef ENABLE_VOICE + {"VOICE", VOICE_ID_VOICE_PROMPT, MENU_VOICE }, #endif - {"SC REV", VOICE_ID_INVALID, MENU_SC_REV }, // was "SC_REV" - {"KeyLOC", VOICE_ID_INVALID, MENU_AUTOLK }, // was "AUTOLk" - {"S ADD1", VOICE_ID_INVALID, MENU_S_ADD1 }, - {"S ADD2", VOICE_ID_INVALID, MENU_S_ADD2 }, - {"STE", VOICE_ID_INVALID, MENU_STE }, - {"RP STE", VOICE_ID_INVALID, MENU_RP_STE }, - {"MIC GN", VOICE_ID_INVALID, MENU_MIC }, - {"COMPND", VOICE_ID_INVALID, MENU_COMPAND }, -#ifdef ENABLE_AUDIO_BAR - {"Tx BAR", VOICE_ID_INVALID, MENU_TX_BAR }, -#endif -#ifdef ENABLE_RSSI_BAR - {"Rx BAR", VOICE_ID_INVALID, MENU_RX_BAR }, -#endif - {"1 CALL", VOICE_ID_INVALID, MENU_1_CALL }, - {"SLIST", VOICE_ID_INVALID, MENU_S_LIST }, - {"SLIST1", VOICE_ID_INVALID, MENU_SLIST1 }, - {"SLIST2", VOICE_ID_INVALID, MENU_SLIST2 }, + {"SC REV", VOICE_ID_INVALID, MENU_SCAN_CAR_RESUME }, // was "SC_REV" + {"KeyLOC", VOICE_ID_INVALID, MENU_AUTO_KEY_LOCK }, // was "AUTOLk" + {"S ADD1", VOICE_ID_INVALID, MENU_S_ADD1 }, + {"S ADD2", VOICE_ID_INVALID, MENU_S_ADD2 }, + {"STE", VOICE_ID_INVALID, MENU_STE }, + {"RP STE", VOICE_ID_INVALID, MENU_RP_STE }, + {"MIC GN", VOICE_ID_INVALID, MENU_MIC_GAIN }, + {"COMPND", VOICE_ID_INVALID, MENU_COMPAND }, +#ifdef ENABLE_AUDIO_BAR + {"Tx BAR", VOICE_ID_INVALID, MENU_TX_BAR }, +#endif +#ifdef ENABLE_RSSI_BAR + {"Rx BAR", VOICE_ID_INVALID, MENU_RX_BAR }, +#endif + {"1 CALL", VOICE_ID_INVALID, MENU_1_CALL }, + {"SLIST", VOICE_ID_INVALID, MENU_S_LIST }, + {"SLIST1", VOICE_ID_INVALID, MENU_SLIST1 }, + {"SLIST2", VOICE_ID_INVALID, MENU_SLIST2 }, #ifdef ENABLE_ALARM - {"SOS AL", VOICE_ID_INVALID, MENU_AL_MOD }, // was "ALMODE" -#endif - {"ANI ID", VOICE_ID_ANI_CODE, MENU_ANI_ID }, - {"UpCODE", VOICE_ID_INVALID, MENU_UPCODE }, - {"DnCODE", VOICE_ID_INVALID, MENU_DWCODE }, // was "DWCODE" - {"PTT ID", VOICE_ID_INVALID, MENU_PTT_ID }, - {"D ST", VOICE_ID_INVALID, MENU_D_ST }, - {"D RSP", VOICE_ID_INVALID, MENU_D_RSP }, - {"D HOLD", VOICE_ID_INVALID, MENU_D_HOLD }, - {"D PRE", VOICE_ID_INVALID, MENU_D_PRE }, - {"D DCD", VOICE_ID_INVALID, MENU_D_DCD }, - {"D LIST", VOICE_ID_INVALID, MENU_D_LIST }, - {"D LIVE", VOICE_ID_INVALID, MENU_D_LIVE_DEC }, // live DTMF decoder - {"PonMSG", VOICE_ID_INVALID, MENU_PONMSG }, - {"ROGER", VOICE_ID_INVALID, MENU_ROGER }, - {"BatVOL", VOICE_ID_INVALID, MENU_VOL }, // was "VOL" - {"BatTXT", VOICE_ID_INVALID, MENU_BAT_TXT }, - {"MODE", VOICE_ID_INVALID, MENU_AM }, // was "AM" -#ifdef ENABLE_AM_FIX - {"AM FIX", VOICE_ID_INVALID, MENU_AM_FIX }, -#endif -#ifdef ENABLE_AM_FIX_TEST1 - {"AM FT1", VOICE_ID_INVALID, MENU_AM_FIX_TEST1 }, -#endif -#ifdef ENABLE_NOAA - {"NOAA-S", VOICE_ID_INVALID, MENU_NOAA_S }, -#endif - {"Side1S", VOICE_ID_INVALID, MENU_SIDE1_SHORT }, - {"Side1L", VOICE_ID_INVALID, MENU_SIDE1_LONG }, - {"Side2S", VOICE_ID_INVALID, MENU_SIDE2_SHORT }, - {"Side2L", VOICE_ID_INVALID, MENU_SIDE2_LONG }, - {"VER", VOICE_ID_INVALID, MENU_VERSION }, - {"RESET", VOICE_ID_INITIALISATION, MENU_RESET }, // might be better to move this to the hidden menu items ? + {"SOS AL", VOICE_ID_INVALID, MENU_ALARM_MODE }, // was "ALMODE" +#endif + {"ANI ID", VOICE_ID_ANI_CODE, MENU_ANI_ID }, + {"UpCODE", VOICE_ID_INVALID, MENU_UP_CODE }, + {"DnCODE", VOICE_ID_INVALID, MENU_DN_CODE }, // was "DWCODE" + {"PTT ID", VOICE_ID_INVALID, MENU_PTT_ID }, + {"D ST", VOICE_ID_INVALID, MENU_DTMF_ST }, + {"D RSP", VOICE_ID_INVALID, MENU_DTMF_RSP }, + {"D HOLD", VOICE_ID_INVALID, MENU_DTMF_HOLD }, + {"D PRE", VOICE_ID_INVALID, MENU_DTMF_PRE }, + {"D DCD", VOICE_ID_INVALID, MENU_DTMF_DCD }, + {"D LIST", VOICE_ID_INVALID, MENU_DTMF_LIST }, + {"D LIVE", VOICE_ID_INVALID, MENU_DTMF_LIVE_DEC }, // live DTMF decoder + {"PonMSG", VOICE_ID_INVALID, MENU_PON_MSG }, + {"ROGER", VOICE_ID_INVALID, MENU_ROGER_MODE }, + {"BatVOL", VOICE_ID_INVALID, MENU_VOLTAGE }, // was "VOL" + {"BatTXT", VOICE_ID_INVALID, MENU_BAT_TXT }, + {"MODE", VOICE_ID_INVALID, MENU_MOD_MODE }, // was "AM" +#ifdef ENABLE_AM_FIX + {"AM FIX", VOICE_ID_INVALID, MENU_AM_FIX }, +#endif +#ifdef ENABLE_AM_FIX_TEST1 + {"AM FT1", VOICE_ID_INVALID, MENU_AM_FIX_TEST1 }, +#endif +#ifdef ENABLE_NOAA + {"NOAA-S", VOICE_ID_INVALID, MENU_NOAA_SCAN }, +#endif + {"Side1S", VOICE_ID_INVALID, MENU_SIDE1_SHORT }, + {"Side1L", VOICE_ID_INVALID, MENU_SIDE1_LONG }, + {"Side2S", VOICE_ID_INVALID, MENU_SIDE2_SHORT }, + {"Side2L", VOICE_ID_INVALID, MENU_SIDE2_LONG }, + {"VER", VOICE_ID_INVALID, MENU_VERSION }, + {"RESET", VOICE_ID_INITIALISATION, MENU_RESET }, // might be better to move this to the hidden menu items ? + // ************************************ + // ************************************ + // ************************************ // hidden menu items from here on // enabled by pressing both the PTT and upper side button at power-on - {"F LOCK", VOICE_ID_INVALID, MENU_FREQ_LOCK }, // country/area specific - {"Tx 174", VOICE_ID_INVALID, MENU_174TX }, // was "200TX" - {"Tx 350", VOICE_ID_INVALID, MENU_350TX }, // was "350TX" - {"Tx 470", VOICE_ID_INVALID, MENU_470TX }, // was "500TX" - {"350 EN", VOICE_ID_INVALID, MENU_350EN }, // was "350EN" - {"SCR EN", VOICE_ID_INVALID, MENU_SCREN }, // was "SCREN" - {"Tx EN", VOICE_ID_INVALID, MENU_TX_EN }, // enable TX -#ifdef ENABLE_F_CAL_MENU - {"F CAL", VOICE_ID_INVALID, MENU_F_CALI }, // reference xtal calibration -#endif - {"BatCAL", VOICE_ID_INVALID, MENU_BATCAL }, // battery voltage calibration + {"BatCAL", VOICE_ID_INVALID, MENU_BAT_CAL }, // battery voltage calibration + +#ifdef ENABLE_F_CAL_MENU + {"F CAL", VOICE_ID_INVALID, MENU_F_CALI }, // reference xtal calibration +#endif + + {"F LOCK", VOICE_ID_INVALID, MENU_FREQ_LOCK }, // country/area specific + {"Tx 174", VOICE_ID_INVALID, MENU_174_TX }, // was "200TX" + {"Tx 350", VOICE_ID_INVALID, MENU_350_TX }, // was "350TX" + {"Tx 470", VOICE_ID_INVALID, MENU_470_TX }, // was "500TX" + {"350 EN", VOICE_ID_INVALID, MENU_350_EN }, // was "350EN" + {"SCR EN", VOICE_ID_INVALID, MENU_SCRAMBLER_EN }, // was "SCREN" + {"Tx EN", VOICE_ID_INVALID, MENU_TX_EN }, // enable TX + + // ************************************ + // ************************************ + // ************************************ }; -// number of hidden menu items at the end of the list - KEEP THIS UP-TO-DATE +// number of hidden menu items at the end of the list - KEEP THIS CORRECT const unsigned int g_hidden_menu_count = 9; // *************************************************************************************** -const char g_sub_menu_txp[3][5] = +const char g_sub_MENU_TX_POWER[3][5] = { "LOW", "MID", @@ -165,7 +174,7 @@ const char g_sub_menu_shift_dir[3][4] = "-" }; -const char g_sub_menu_w_n[2][7] = +const char g_sub_MENU_BANDWIDTH[2][7] = { "WIDE", "NARROW" @@ -177,7 +186,7 @@ const char g_sub_menu_off_on[2][4] = "ON" }; -const char g_sub_menu_SAVE[5][9] = +const char g_sub_MENU_BAT_SAVE[5][9] = { "OFF", "1:1 50%", @@ -186,7 +195,7 @@ const char g_sub_menu_SAVE[5][9] = "1:4 80%" }; -const char g_sub_menu_TOT[11][7] = +const char g_sub_MENU_TX_TO[11][7] = { "30 sec", "1 min", @@ -201,14 +210,14 @@ const char g_sub_menu_TOT[11][7] = "15 min" }; -const char g_sub_menu_tdr[3][10] = +const char g_sub_MENU_DUAL_WATCH[3][10] = { "OFF", "LOWER\nVFO", "UPPER\nVFO", }; -const char g_sub_menu_xb[3][10] = +const char g_sub_MENU_CROSS_VFO[3][10] = { "RX\nVFO", "UPPER\nVFO", @@ -224,14 +233,14 @@ const char g_sub_menu_xb[3][10] = }; #endif -const char g_sub_menu_sc_rev[3][13] = +const char g_sub_MENU_SCAN_CAR_RESUME[3][13] = { "TIME", "CARRIER", "SEARCH" }; -const char g_sub_menu_mdf[4][15] = +const char g_sub_MENU_MEM_DISP[4][15] = { "FREQ", "CHANNEL\nNUMBER", @@ -240,14 +249,14 @@ const char g_sub_menu_mdf[4][15] = }; #ifdef ENABLE_ALARM - const char g_sub_menu_AL_MOD[2][5] = + const char g_sub_MENU_ALARM_MODE[2][5] = { "SITE", "TONE" }; #endif -const char g_sub_menu_D_RSP[4][9] = +const char g_sub_MENU_DTMF_RSP[4][9] = { "NONE", "RING", @@ -272,7 +281,7 @@ const char g_sub_menu_pwr_on_msg[4][14] = "NONE" }; -const char g_sub_menu_roger_mode[3][16] = +const char g_sub_MENU_ROGER_MODE_mode[3][16] = { "OFF", "TX END\nROGER", @@ -329,7 +338,7 @@ const char g_sub_menu_rx_tx[4][6] = }; #ifdef ENABLE_AM_FIX_TEST1 - const char g_sub_menu_AM_fix_test1[4][8] = + const char g_sub_MENU_AM_FIX_test1[4][8] = { "LNA-S 0", "LNA-S 1", @@ -351,7 +360,7 @@ const char g_sub_menu_DIS_EN[2][9] = "ENABLED" }; -const char g_sub_menu_SCRAMBLER[11][7] = +const char g_sub_MENU_SCRAMBLERAMBLER[11][7] = { "OFF", "2600Hz", @@ -387,7 +396,7 @@ uint8_t g_menu_list_sorted[ARRAY_SIZE(g_menu_list)]; bool g_is_in_sub_menu; uint8_t g_menu_cursor; -int8_t g_menu_scroll_direction; +int8_t g_MENU_SCRAMBLERoll_direction; int32_t g_sub_menu_selection; // edit box @@ -397,6 +406,24 @@ int g_edit_index; // *************************************************************************************** +void sort_list(const unsigned int start, const unsigned int length) +{ + const unsigned int end = start + length; + unsigned int i; + for (i = start; i < end; i++) + { + unsigned int k; + for (k = 0; k < end; k++) + { + if (g_menu_list[k].menu_id == i) + { + g_menu_list_sorted[i] = k; + break; + } + } + } +} + void UI_SortMenu(const bool hide_hidden) { // sort the menu order according to the MENU-ID value (enum list in id/menu.h) @@ -404,7 +431,7 @@ void UI_SortMenu(const bool hide_hidden) // this means the menu order is entirely determined by the enum list (found in id/menu.h) // it now no longer depends on the order of entries in the above const list (they can be any order) - unsigned int i; +// unsigned int i; unsigned int hidden_menu_count = g_hidden_menu_count; @@ -412,30 +439,17 @@ void UI_SortMenu(const bool hide_hidden) hidden_menu_count--; #endif - g_menu_list_count = ARRAY_SIZE(g_menu_list_sorted); + g_menu_list_count = ARRAY_SIZE(g_menu_list); - for (i = 0; i < g_menu_list_count; i++) - g_menu_list_sorted[i] = g_menu_list[i].menu_id; + // linear index array +// for (i = 0; i < ARRAY_SIZE(g_menu_list_sorted); i++) +// g_menu_list_sorted[i] = i; - // don't sort the hidden entries at the end, keep them at the end of the list + // sort non-hidden entries at the beginning + sort_list(0, g_menu_list_count - hidden_menu_count); - for (i = 0; i < (g_menu_list_count - hidden_menu_count - 1); i++) - { - unsigned int k; - unsigned int menu_id1 = g_menu_list_sorted[i]; - for (k = i + 1; k < (g_menu_list_count - hidden_menu_count); k++) - { - unsigned int menu_id2 = g_menu_list_sorted[k]; - if (menu_id2 < menu_id1) - { // swap - const unsigned int id = menu_id1; - menu_id1 = menu_id2; - menu_id2 = id; - g_menu_list_sorted[i] = menu_id1; - g_menu_list_sorted[k] = menu_id2; - } - } - } + // sort the hidden entries at the end + sort_list(g_menu_list_count - hidden_menu_count, hidden_menu_count); if (hide_hidden) g_menu_list_count -= hidden_menu_count; // hide the hidden menu items @@ -523,9 +537,7 @@ void UI_DisplayMenu(void) if (menu_index >= 0 && menu_index < (int)g_menu_list_count) { // current menu item strcpy(String, g_menu_list[g_menu_list_sorted[menu_index]].name); -// strcat(String, ":"); UI_PrintString(String, 0, 0, 0, 8); -// UI_PrintStringSmall(String, 0, 0, 0); } } #endif @@ -545,7 +557,7 @@ void UI_DisplayMenu(void) sprintf(String, "%d", g_sub_menu_selection); break; - case MENU_MIC: + case MENU_MIC_GAIN: { // display the mic gain in actual dB rather than just an index number const uint8_t mic = g_mic_gain_dB_2[g_sub_menu_selection]; sprintf(String, "+%u.%01udB", mic / 2, mic % 2); @@ -556,12 +568,12 @@ void UI_DisplayMenu(void) sprintf(String, "%d.%02ukHz", STEP_FREQ_TABLE[g_sub_menu_selection] / 100, STEP_FREQ_TABLE[g_sub_menu_selection] % 100); break; - case MENU_TXP: - strcpy(String, g_sub_menu_txp[g_sub_menu_selection]); + case MENU_TX_POWER: + strcpy(String, g_sub_MENU_TX_POWER[g_sub_menu_selection]); break; - case MENU_R_DCS: - case MENU_T_DCS: + case MENU_RX_CDCSS: + case MENU_TX_CDCSS: strcpy(String, "CDCSS\n"); if (g_sub_menu_selection == 0) strcat(String, "OFF"); @@ -572,14 +584,14 @@ void UI_DisplayMenu(void) sprintf(String + strlen(String), "D%03oI", DCS_OPTIONS[g_sub_menu_selection - 105]); break; - case MENU_R_CTCS: - case MENU_T_CTCS: + case MENU_RX_CTCSS: + case MENU_TX_CTCSS: { strcpy(String, "CTCSS\n"); #if 1 // set CTCSS as the user adjusts it unsigned int Code; - freq_config_t *pConfig = (g_menu_cursor == MENU_R_CTCS) ? &g_tx_vfo->freq_config_rx : &g_tx_vfo->freq_config_tx; + freq_config_t *pConfig = (g_menu_cursor == MENU_RX_CTCSS) ? &g_tx_vfo->freq_config_rx : &g_tx_vfo->freq_config_tx; if (g_sub_menu_selection == 0) { strcat(String, "OFF"); @@ -613,7 +625,7 @@ void UI_DisplayMenu(void) break; } - case MENU_SFT_D: + case MENU_SHIFT_DIR: strcpy(String, g_sub_menu_shift_dir[g_sub_menu_selection]); break; @@ -643,13 +655,13 @@ void UI_DisplayMenu(void) already_printed = true; break; - case MENU_W_N: - strcpy(String, g_sub_menu_w_n[g_sub_menu_selection]); + case MENU_BANDWIDTH: + strcpy(String, g_sub_MENU_BANDWIDTH[g_sub_menu_selection]); break; - case MENU_SCR: + case MENU_SCRAMBLER: strcpy(String, "INVERT\n"); - strcat(String, g_sub_menu_SCRAMBLER[g_sub_menu_selection]); + strcat(String, g_sub_MENU_SCRAMBLERAMBLER[g_sub_menu_selection]); #if 1 if (g_sub_menu_selection > 0 && g_setting_scramble_enable) @@ -668,28 +680,28 @@ void UI_DisplayMenu(void) break; #endif - case MENU_ABR: + case MENU_AUTO_BACKLITE: strcpy(String, "BACKLITE\n"); strcat(String, g_sub_menu_backlight[g_sub_menu_selection]); break; - case MENU_ABR_ON_TX_RX: + case MENU_AUTO_BACKLITE_ON_TX_RX: strcpy(String, "BACKLITE\n"); strcat(String, g_sub_menu_rx_tx[g_sub_menu_selection]); break; - case MENU_AM: + case MENU_MOD_MODE: strcpy(String, (g_sub_menu_selection == 0) ? "FM" : "AM"); break; #ifdef ENABLE_AM_FIX_TEST1 case MENU_AM_FIX_TEST1: - strcpy(String, g_sub_menu_AM_fix_test1[g_sub_menu_selection]); + strcpy(String, g_sub_MENU_AM_FIX_test1[g_sub_menu_selection]); // g_setting_am_fix = g_sub_menu_selection; break; #endif - case MENU_AUTOLK: + case MENU_AUTO_KEY_LOCK: if (g_sub_menu_selection == 0) strcpy(String, "OFF"); else @@ -722,13 +734,13 @@ void UI_DisplayMenu(void) strcpy(String, g_sub_menu_off_on[g_sub_menu_selection]); break; - case MENU_BCL: + case MENU_BUSY_CHAN_LOCK: strcpy(String, "BSY CH TX\nLOCKOUT\n"); strcat(String, g_sub_menu_off_on[g_sub_menu_selection]); break; - case MENU_D_DCD: - case MENU_D_LIVE_DEC: + case MENU_DTMF_DCD: + case MENU_DTMF_LIVE_DEC: strcpy(String, "DTMF\nDECODE\n"); strcat(String, g_sub_menu_off_on[g_sub_menu_selection]); break; @@ -743,39 +755,39 @@ void UI_DisplayMenu(void) strcat(String + strlen(String), g_sub_menu_off_on[g_sub_menu_selection]); break; - case MENU_D_ST: + case MENU_DTMF_ST: strcpy(String, "DTMF\nSIDETONE\n"); strcat(String, g_sub_menu_off_on[g_sub_menu_selection]); break; #ifdef ENABLE_NOAA - case MENU_NOAA_S: + case MENU_NOAA_SCAN: strcpy(String, "SCAN\n"); strcat(String, g_sub_menu_DIS_EN[g_sub_menu_selection]); break; #endif - case MENU_350TX: + case MENU_350_EN: strcpy(String, "350 ~ 400\n"); strcat(String, g_sub_menu_DIS_EN[g_sub_menu_selection]); break; - case MENU_174TX: - strcpy(String, "174 ~ 350\n"); + case MENU_350_TX: + strcpy(String, "TX\n350 ~ 400\n"); strcat(String, g_sub_menu_DIS_EN[g_sub_menu_selection]); break; - case MENU_470TX: - strcpy(String, "470 ~ 600\n"); + case MENU_174_TX: + strcpy(String, "TX\n174 ~ 350\n"); strcat(String, g_sub_menu_DIS_EN[g_sub_menu_selection]); break; - case MENU_350EN: - strcpy(String, "350 ~ 400\n"); + case MENU_470_TX: + strcpy(String, "TX\n470 ~ 600\n"); strcat(String, g_sub_menu_DIS_EN[g_sub_menu_selection]); break; - case MENU_SCREN: + case MENU_SCRAMBLER_EN: strcpy(String, "SCRAMBLER\n"); strcat(String, g_sub_menu_DIS_EN[g_sub_menu_selection]); break; @@ -785,9 +797,9 @@ void UI_DisplayMenu(void) strcat(String, g_sub_menu_DIS_EN[g_sub_menu_selection]); break; - case MENU_MEM_CH: + case MENU_MEM_SAVE: case MENU_1_CALL: - case MENU_DEL_CH: + case MENU_MEM_DEL: { char s[11]; const bool valid = RADIO_CheckValidChannel(g_sub_menu_selection, false, 0); @@ -848,12 +860,12 @@ void UI_DisplayMenu(void) break; } - case MENU_SAVE: - strcpy(String, g_sub_menu_SAVE[g_sub_menu_selection]); + case MENU_BAT_SAVE: + strcpy(String, g_sub_MENU_BAT_SAVE[g_sub_menu_selection]); break; - case MENU_TDR: -// strcpy(String, g_sub_menu_tdr[g_sub_menu_selection]); + case MENU_DUAL_WATCH: +// strcpy(String, g_sub_MENU_DUAL_WATCH[g_sub_menu_selection]); strcpy(String, g_sub_menu_off_on[g_sub_menu_selection]); break; @@ -862,12 +874,12 @@ void UI_DisplayMenu(void) sprintf(String + strlen(String), "%d.%d sec", g_sub_menu_selection / 2, 5 * (g_sub_menu_selection % 2)); break; - case MENU_XB: - strcpy(String, g_sub_menu_xb[g_sub_menu_selection]); + case MENU_CROSS_VFO: + strcpy(String, g_sub_MENU_CROSS_VFO[g_sub_menu_selection]); break; - case MENU_TOT: - strcpy(String, g_sub_menu_TOT[g_sub_menu_selection]); + case MENU_TX_TO: + strcpy(String, g_sub_MENU_TX_TO[g_sub_menu_selection]); break; #ifdef ENABLE_VOICE @@ -876,13 +888,13 @@ void UI_DisplayMenu(void) break; #endif - case MENU_SC_REV: + case MENU_SCAN_CAR_RESUME: strcpy(String, "SCAN\nRESUME\n"); - strcat(String, g_sub_menu_sc_rev[g_sub_menu_selection]); + strcat(String, g_sub_MENU_SCAN_CAR_RESUME[g_sub_menu_selection]); break; - case MENU_MDF: - strcpy(String, g_sub_menu_mdf[g_sub_menu_selection]); + case MENU_MEM_DISP: + strcpy(String, g_sub_MENU_MEM_DISP[g_sub_menu_selection]); break; case MENU_RP_STE: @@ -900,9 +912,9 @@ void UI_DisplayMenu(void) break; #ifdef ENABLE_ALARM - case MENU_AL_MOD: + case MENU_ALARM_MODE: strcpy(String, "TX ALARM\n"); - sprintf(String + strlen(String), g_sub_menu_AL_MOD[g_sub_menu_selection]); + sprintf(String + strlen(String), g_sub_MENU_ALARM_MODE[g_sub_menu_selection]); break; #endif @@ -911,22 +923,22 @@ void UI_DisplayMenu(void) strcat(String, g_eeprom.ani_dtmf_id); break; - case MENU_UPCODE: + case MENU_UP_CODE: strcpy(String, "PTT DTMF\nBEGIN\n"); strcat(String, g_eeprom.dtmf_key_up_code); break; - case MENU_DWCODE: + case MENU_DN_CODE: strcpy(String, "PTT DTMF\nEND\n"); strcat(String, g_eeprom.dtmf_key_down_code); break; - case MENU_D_RSP: + case MENU_DTMF_RSP: strcpy(String, "DTMF\nRESPONSE\n"); - strcat(String, g_sub_menu_D_RSP[g_sub_menu_selection]); + strcat(String, g_sub_MENU_DTMF_RSP[g_sub_menu_selection]); break; - case MENU_D_HOLD: + case MENU_DTMF_HOLD: // only allow 5, 10, 20, 30, 40, 50 or "STAY ON SCREEN" (60) switch (g_sub_menu_selection) { @@ -954,7 +966,7 @@ void UI_DisplayMenu(void) break; - case MENU_D_PRE: + case MENU_DTMF_PRE: strcpy(String, "TX DTMF\nDELAY\n"); // sprintf(String + strlen(String), "%d*10ms", g_sub_menu_selection); sprintf(String + strlen(String), "%dms", 10 * g_sub_menu_selection); @@ -969,7 +981,7 @@ void UI_DisplayMenu(void) strcpy(String, g_sub_menu_BAT_TXT[g_sub_menu_selection]); break; - case MENU_D_LIST: + case MENU_DTMF_LIST: g_dtmf_is_contact_valid = DTMF_GetContact((int)g_sub_menu_selection - 1, Contact); strcpy(String, "DTMF\n"); if (!g_dtmf_is_contact_valid) @@ -985,15 +997,15 @@ void UI_DisplayMenu(void) } break; - case MENU_PONMSG: + case MENU_PON_MSG: strcpy(String, g_sub_menu_pwr_on_msg[g_sub_menu_selection]); break; - case MENU_ROGER: - strcpy(String, g_sub_menu_roger_mode[g_sub_menu_selection]); + case MENU_ROGER_MODE: + strcpy(String, g_sub_MENU_ROGER_MODE_mode[g_sub_menu_selection]); break; - case MENU_VOL: + case MENU_VOLTAGE: sprintf(String, "%u.%02uV\n%u%%\ncurr %u", g_battery_voltage_average / 100, g_battery_voltage_average % 100, BATTERY_VoltsToPercent(g_battery_voltage_average), @@ -1050,7 +1062,10 @@ void UI_DisplayMenu(void) break; case MENU_FREQ_LOCK: - strcpy(String, g_sub_menu_freq_lock[g_sub_menu_selection]); + if (g_sub_menu_selection == 0) + strcpy(String, "136 ~ 174\n400 ~ 470\n+ other\noptions"); + else + strcpy(String, g_sub_menu_freq_lock[g_sub_menu_selection]); break; #ifdef ENABLE_F_CAL_MENU @@ -1068,7 +1083,7 @@ void UI_DisplayMenu(void) break; #endif - case MENU_BATCAL: + case MENU_BAT_CAL: { const uint16_t vol = (uint32_t)g_battery_voltage_average * g_battery_calibration[3] / g_sub_menu_selection; sprintf(String, "%u.%02uV\n%u", vol / 100, vol % 100, g_sub_menu_selection); @@ -1179,33 +1194,33 @@ void UI_DisplayMenu(void) } } - if ((g_menu_cursor == MENU_R_CTCS || g_menu_cursor == MENU_R_DCS) && g_css_scan_mode != CSS_SCAN_MODE_OFF) + if ((g_menu_cursor == MENU_RX_CTCSS || g_menu_cursor == MENU_RX_CDCSS) && g_css_scan_mode != CSS_SCAN_MODE_OFF) UI_PrintString("SCAN", menu_item_x1, menu_item_x2, 4, 8); - if (g_menu_cursor == MENU_UPCODE) + if (g_menu_cursor == MENU_UP_CODE) if (strlen(g_eeprom.dtmf_key_up_code) > 8) UI_PrintString(g_eeprom.dtmf_key_up_code + 8, menu_item_x1, menu_item_x2, 4, 8); - if (g_menu_cursor == MENU_DWCODE) + if (g_menu_cursor == MENU_DN_CODE) if (strlen(g_eeprom.dtmf_key_down_code) > 8) UI_PrintString(g_eeprom.dtmf_key_down_code + 8, menu_item_x1, menu_item_x2, 4, 8); - if (g_menu_cursor == MENU_R_CTCS || - g_menu_cursor == MENU_T_CTCS || - g_menu_cursor == MENU_R_DCS || - g_menu_cursor == MENU_T_DCS || - g_menu_cursor == MENU_D_LIST) + 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_DTMF_LIST) { unsigned int Offset; NUMBER_ToDigits(g_sub_menu_selection, String); - Offset = (g_menu_cursor == MENU_D_LIST) ? 2 : 3; + 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 || - g_menu_cursor == MENU_MEM_CH || + g_menu_cursor == MENU_MEM_SAVE || g_menu_cursor == MENU_MEM_NAME || - g_menu_cursor == MENU_DEL_CH) && g_ask_for_confirmation) + g_menu_cursor == MENU_MEM_DEL) && g_ask_for_confirmation) { // display confirmation strcpy(String, (g_ask_for_confirmation == 1) ? "SURE?" : "WAIT!"); UI_PrintString(String, menu_item_x1, menu_item_x2, 5, 8); diff --git a/ui/menu.h b/ui/menu.h index cc3cc7a..e410830 100644 --- a/ui/menu.h +++ b/ui/menu.h @@ -42,42 +42,42 @@ enum MENU_SQL = 0, MENU_STEP, - MENU_W_N, - MENU_TXP, - MENU_R_DCS, - MENU_R_CTCS, - MENU_T_DCS, - MENU_T_CTCS, - MENU_SFT_D, + MENU_BANDWIDTH, + MENU_TX_POWER, + MENU_RX_CDCSS, + MENU_RX_CTCSS, + MENU_TX_CDCSS, + MENU_TX_CTCSS, + MENU_SHIFT_DIR, MENU_OFFSET, - MENU_TOT, - MENU_XB, - MENU_TDR, + MENU_TX_TO, + MENU_CROSS_VFO, + MENU_DUAL_WATCH, MENU_SCAN_HOLD, - MENU_SCR, - MENU_BCL, - MENU_MEM_CH, + MENU_SCRAMBLER, + MENU_BUSY_CHAN_LOCK, + MENU_MEM_SAVE, MENU_MEM_NAME, - MENU_DEL_CH, - MENU_MDF, - MENU_SAVE, + MENU_MEM_DEL, + MENU_MEM_DISP, + MENU_BAT_SAVE, #ifdef ENABLE_VOX MENU_VOX, #endif - MENU_ABR, - MENU_ABR_ON_TX_RX, + MENU_AUTO_BACKLITE, + MENU_AUTO_BACKLITE_ON_TX_RX, MENU_CONTRAST, MENU_BEEP, #ifdef ENABLE_VOICE MENU_VOICE, #endif - MENU_SC_REV, - MENU_AUTOLK, + MENU_SCAN_CAR_RESUME, + MENU_AUTO_KEY_LOCK, MENU_S_ADD1, MENU_S_ADD2, MENU_STE, MENU_RP_STE, - MENU_MIC, + MENU_MIC_GAIN, MENU_COMPAND, #ifdef ENABLE_AUDIO_BAR MENU_TX_BAR, @@ -90,24 +90,24 @@ enum MENU_SLIST1, MENU_SLIST2, #ifdef ENABLE_ALARM - MENU_AL_MOD, + MENU_ALARM_MODE, #endif MENU_ANI_ID, - MENU_UPCODE, - MENU_DWCODE, + MENU_UP_CODE, + MENU_DN_CODE, MENU_PTT_ID, - MENU_D_ST, - MENU_D_RSP, - MENU_D_HOLD, - MENU_D_PRE, - MENU_D_DCD, - MENU_D_LIST, - MENU_D_LIVE_DEC, - MENU_PONMSG, - MENU_ROGER, - MENU_VOL, + MENU_DTMF_ST, + MENU_DTMF_RSP, + MENU_DTMF_HOLD, + MENU_DTMF_PRE, + MENU_DTMF_DCD, + MENU_DTMF_LIST, + MENU_DTMF_LIVE_DEC, + MENU_PON_MSG, + MENU_ROGER_MODE, + MENU_VOLTAGE, MENU_BAT_TXT, - MENU_AM, + MENU_MOD_MODE, #ifdef ENABLE_AM_FIX MENU_AM_FIX, #endif @@ -115,7 +115,7 @@ enum MENU_AM_FIX_TEST1, #endif #ifdef ENABLE_NOAA - MENU_NOAA_S, + MENU_NOAA_SCAN, #endif MENU_SIDE1_SHORT, MENU_SIDE1_LONG, @@ -124,50 +124,53 @@ enum MENU_VERSION, MENU_RESET, + // ************************************ + // ************************************ // ************************************ // items after here are normally hidden - MENU_FREQ_LOCK, - MENU_174TX, - MENU_350TX, - MENU_470TX, - MENU_350EN, - MENU_SCREN, - - MENU_TX_EN, // enable TX -#ifdef ENABLE_F_CAL_MENU - MENU_F_CALI, // reference xtal calibration -#endif - MENU_BATCAL, // battery voltage calibration + MENU_BAT_CAL, // battery voltage calibration +#ifdef ENABLE_F_CAL_MENU + MENU_F_CALI, // 26MHz reference xtal calibration +#endif + + MENU_SCRAMBLER_EN, // scrambler enable/disable + MENU_FREQ_LOCK, // lock to a selected region + MENU_174_TX, // 174~350MHz TX enable/disable + MENU_350_EN, // 350~400MHz enable/disable + MENU_350_TX, // 350~400MHz TX enable/disable + MENU_470_TX, // 470MHz and up TX enable/disable + MENU_TX_EN, // can disable the TX entirely + + // ************************************ + // ************************************ // ************************************ }; -extern const unsigned int g_hidden_menu_count; - extern const t_menu_item g_menu_list[]; extern uint8_t g_menu_list_sorted[]; -extern const char g_sub_menu_txp[3][5]; +extern const char g_sub_MENU_TX_POWER[3][5]; extern const char g_sub_menu_shift_dir[3][4]; -extern const char g_sub_menu_w_n[2][7]; +extern const char g_sub_MENU_BANDWIDTH[2][7]; extern const char g_sub_menu_off_on[2][4]; -extern const char g_sub_menu_SAVE[5][9]; -extern const char g_sub_menu_TOT[11][7]; -extern const char g_sub_menu_tdr[3][10]; -extern const char g_sub_menu_xb[3][10]; +extern const char g_sub_MENU_BAT_SAVE[5][9]; +extern const char g_sub_MENU_TX_TO[11][7]; +extern const char g_sub_MENU_DUAL_WATCH[3][10]; +extern const char g_sub_MENU_CROSS_VFO[3][10]; #ifdef ENABLE_VOICE extern const char g_sub_menu_voice[3][4]; #endif -extern const char g_sub_menu_sc_rev[3][13]; -extern const char g_sub_menu_mdf[4][15]; +extern const char g_sub_MENU_SCAN_CAR_RESUME[3][13]; +extern const char g_sub_MENU_MEM_DISP[4][15]; #ifdef ENABLE_ALARM - extern const char g_sub_menu_AL_MOD[2][5]; + extern const char g_sub_MENU_ALARM_MODE[2][5]; #endif -extern const char g_sub_menu_D_RSP[4][9]; +extern const char g_sub_MENU_DTMF_RSP[4][9]; extern const char g_sub_menu_PTT_ID[5][15]; extern const char g_sub_menu_pwr_on_msg[4][14]; -extern const char g_sub_menu_roger_mode[3][16]; +extern const char g_sub_MENU_ROGER_MODE_mode[3][16]; extern const char g_sub_menu_RESET[2][4]; #ifdef ENABLE_TX_UNLOCK extern const char g_sub_menu_freq_lock[7][9]; @@ -177,17 +180,17 @@ 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]; #ifdef ENABLE_AM_FIX_TEST1 - extern const char g_sub_menu_AM_fix_test1[4][8]; + extern const char g_sub_MENU_AM_FIX_test1[4][8]; #endif extern const char g_sub_menu_BAT_TXT[3][8]; extern const char g_sub_menu_DIS_EN[2][9]; -extern const char g_sub_menu_SCRAMBLER[11][7]; +extern const char g_sub_MENU_SCRAMBLERAMBLER[11][7]; extern const char g_sub_menu_SIDE_BUTT[9][16]; extern bool g_is_in_sub_menu; extern uint8_t g_menu_cursor; -extern int8_t g_menu_scroll_direction; +extern int8_t g_MENU_SCRAMBLERoll_direction; extern int32_t g_sub_menu_selection; extern char g_edit_original[17];