From 0bb34d230cd00420ee8b996021b6c655616fac76 Mon Sep 17 00:00:00 2001 From: OneOfEleven Date: Sun, 8 Oct 2023 20:23:37 +0100 Subject: [PATCH] Renamed lots more --- am_fix.c | 24 +- app/action.c | 182 +++--- app/aircopy.c | 140 ++--- app/app.c | 1327 ++++++++++++++++++++++--------------------- app/app.h | 6 +- app/dtmf.c | 250 ++++---- app/dtmf.h | 129 ++--- app/fm.c | 310 +++++----- app/fm.h | 24 +- app/generic.c | 162 +++--- app/main.c | 464 +++++++-------- app/menu.c | 995 ++++++++++++++++---------------- app/menu.h | 2 +- app/scanner.c | 242 ++++---- app/scanner.h | 14 +- app/spectrum.c | 66 +-- app/uart.c | 110 ++-- audio.c | 66 +-- audio.h | 19 +- bitmaps.c | 30 +- bitmaps.h | 30 +- board.c | 110 ++-- dcs.c | 18 +- dcs.h | 5 +- driver/backlight.c | 18 +- driver/backlight.h | 2 +- driver/bk4819.c | 12 +- driver/bk4819.h | 30 +- driver/keyboard.c | 2 +- driver/keyboard.h | 2 +- driver/st7565.c | 14 +- driver/st7565.h | 4 +- driver/uart.c | 17 +- firmware.bin | Bin 56792 -> 60248 bytes firmware.packed.bin | Bin 56810 -> 60266 bytes font.c | 18 +- font.h | 12 +- frequencies.c | 24 +- frequencies.h | 4 +- functions.c | 116 ++-- functions.h | 9 +- helper/battery.c | 88 +-- helper/battery.h | 24 +- helper/boot.c | 12 +- main.c | 42 +- misc.c | 333 +++++------ misc.h | 290 +++++----- radio.c | 438 +++++++------- radio.h | 54 +- scheduler.c | 64 +-- settings.c | 60 +- settings.h | 40 +- ui/aircopy.c | 22 +- ui/fmradio.c | 24 +- ui/helper.c | 68 +-- ui/helper.h | 4 +- ui/inputbox.c | 12 +- ui/inputbox.h | 4 +- ui/lock.c | 38 +- ui/main.c | 242 ++++---- ui/main.h | 4 +- ui/menu.c | 420 +++++++------- ui/menu.h | 76 +-- ui/scanner.c | 10 +- ui/status.c | 58 +- ui/ui.c | 41 +- ui/ui.h | 20 +- ui/welcome.c | 16 +- 68 files changed, 3748 insertions(+), 3765 deletions(-) diff --git a/am_fix.c b/am_fix.c index 09d67e9..ab2c3d5 100644 --- a/am_fix.c +++ b/am_fix.c @@ -223,7 +223,7 @@ #ifdef ENABLE_AM_FIX_TEST1 // user manually sets the table index .. used to calibrate the desired dB gain table - unsigned int gain_table_index[2] = {1 + gSetting_AM_fix_test1, 1 + gSetting_AM_fix_test1}; + unsigned int gain_table_index[2] = {1 + g_setting_am_fix_test1, 1 + g_setting_am_fix_test1}; #else unsigned int gain_table_index[2] = {original_index, original_index}; #endif @@ -256,7 +256,7 @@ for (i = 0; i < 2; i++) { #ifdef ENABLE_AM_FIX_TEST1 - gain_table_index[i] = 1 + gSetting_AM_fix_test1; + gain_table_index[i] = 1 + g_setting_am_fix_test1; #else gain_table_index[i] = original_index; // re-start with original QS setting #endif @@ -293,7 +293,7 @@ rssi_gain_diff[vfo] = 0; #ifdef ENABLE_AM_FIX_TEST1 -// gain_table_index[vfo] = 1 + gSetting_AM_fix_test1; +// gain_table_index[vfo] = 1 + g_setting_am_fix_test1; #else // gain_table_index[vfo] = original_index; // re-start with original QS setting #endif @@ -313,7 +313,7 @@ int16_t diff_dB; int16_t rssi; - switch (gCurrentFunction) + switch (g_current_function) { case FUNCTION_TRANSMIT: case FUNCTION_BAND_SCOPE: @@ -337,7 +337,7 @@ if (++counter >= display_update_rate) { // trigger a display update counter = 0; - gUpdateDisplay = true; + g_update_display = true; } } #endif @@ -353,26 +353,26 @@ #ifdef ENABLE_AM_FIX_SHOW_DATA { const int16_t new_rssi = rssi - rssi_gain_diff[vfo]; - if (gCurrentRSSI[vfo] != new_rssi) + if (g_current_rssi[vfo] != new_rssi) { - gCurrentRSSI[vfo] = new_rssi; + g_current_rssi[vfo] = new_rssi; if (counter == 0) { // trigger a display update counter = 1; - gUpdateDisplay = true; + g_update_display = true; } } } #else - gCurrentRSSI[vfo] = rssi - rssi_gain_diff[vfo]; + g_current_rssi[vfo] = rssi - rssi_gain_diff[vfo]; #endif #ifdef ENABLE_AM_FIX_TEST1 // user is manually adjusting a gain register - don't do anything automatically { - int i = 1 + (int)gSetting_AM_fix_test1; + int i = 1 + (int)g_setting_am_fix_test1; i = (i < 1) ? 1 : (i > ((int)ARRAY_SIZE(gain_table) - 1) ? ARRAY_SIZE(gain_table) - 1 : i; if (gain_table_index[vfo] == i) @@ -460,13 +460,13 @@ } // save the corrected RSSI level - gCurrentRSSI[vfo] = rssi - rssi_gain_diff[vfo]; + g_current_rssi[vfo] = rssi - rssi_gain_diff[vfo]; #ifdef ENABLE_AM_FIX_SHOW_DATA if (counter == 0) { counter = 1; - gUpdateDisplay = true; + g_update_display = true; } #endif } diff --git a/app/action.c b/app/action.c index 8156119..f495921 100644 --- a/app/action.c +++ b/app/action.c @@ -38,94 +38,94 @@ static void ACTION_FlashLight(void) { - switch (gFlashLightState) + switch (g_flash_light_state) { case 0: - gFlashLightState++; + g_flash_light_state++; GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_FLASHLIGHT); break; case 1: - gFlashLightState++; + g_flash_light_state++; break; default: - gFlashLightState = 0; + g_flash_light_state = 0; GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_FLASHLIGHT); } } void ACTION_Power(void) { - if (++gTxVfo->output_power > OUTPUT_POWER_HIGH) - gTxVfo->output_power = OUTPUT_POWER_LOW; + if (++g_tx_vfo->output_power > OUTPUT_POWER_HIGH) + g_tx_vfo->output_power = OUTPUT_POWER_LOW; - gRequestSaveChannel = 1; - //gRequestSaveChannel = 2; // auto save the channel + g_request_save_channel = 1; + //g_request_save_channel = 2; // auto save the channel #ifdef ENABLE_VOICE g_another_voice_id = VOICE_ID_POWER; #endif - gRequestDisplayScreen = gScreenToDisplay; + g_request_display_screen = g_screen_to_display; } void ACTION_Monitor(void) { - if (gCurrentFunction != FUNCTION_MONITOR) + if (g_current_function != FUNCTION_MONITOR) { // enable the monitor RADIO_SelectVfos(); #ifdef ENABLE_NOAA - if (gRxVfo->channel_save >= NOAA_CHANNEL_FIRST && gIsNoaaMode) - gNoaaChannel = gRxVfo->channel_save - NOAA_CHANNEL_FIRST; + if (g_rx_vfo->channel_save >= NOAA_CHANNEL_FIRST && g_is_noaa_mode) + g_noaa_channel = g_rx_vfo->channel_save - NOAA_CHANNEL_FIRST; #endif RADIO_SetupRegisters(true); APP_StartListening(FUNCTION_MONITOR, false); return; } - gMonitor = false; + g_monitor_enabled = false; - if (gScanStateDir != SCAN_OFF) + if (g_scan_state_dir != SCAN_OFF) { - gScanPauseDelayIn_10ms = scan_pause_delay_in_1_10ms; - gScheduleScanListen = false; + g_scan_pause_delay_in_10ms = scan_pause_delay_in_1_10ms; + g_schedule_scan_listen = false; gScanPauseMode = true; } #ifdef ENABLE_NOAA - if (g_eeprom.dual_watch == DUAL_WATCH_OFF && gIsNoaaMode) + if (g_eeprom.dual_watch == DUAL_WATCH_OFF && g_is_noaa_mode) { - gNOAA_Countdown_10ms = NOAA_countdown_10ms; - gScheduleNOAA = false; + g_noaa_count_down_10ms = noaa_count_down_10ms; + g_schedule_noaa = false; } #endif RADIO_SetupRegisters(true); #ifdef ENABLE_FMRADIO - if (gFmRadioMode) + if (g_fm_radio_mode) { FM_Start(); - gRequestDisplayScreen = DISPLAY_FM; + g_request_display_screen = DISPLAY_FM; } else #endif - gRequestDisplayScreen = gScreenToDisplay; + g_request_display_screen = g_screen_to_display; } void ACTION_Scan(bool bRestart) { #ifdef ENABLE_FMRADIO - if (gFmRadioMode) + if (g_fm_radio_mode) { - if (gCurrentFunction != FUNCTION_RECEIVE && - gCurrentFunction != FUNCTION_MONITOR && - gCurrentFunction != FUNCTION_TRANSMIT) + if (g_current_function != FUNCTION_RECEIVE && + g_current_function != FUNCTION_MONITOR && + g_current_function != FUNCTION_TRANSMIT) { GUI_SelectNextDisplay(DISPLAY_FM); - gMonitor = false; + g_monitor_enabled = false; - if (gFM_ScanState != FM_SCAN_OFF) + if (g_fm_scan_state != FM_SCAN_OFF) { FM_PlayAndUpdate(); @@ -139,15 +139,15 @@ void ACTION_Scan(bool bRestart) if (bRestart) { - gFM_AutoScan = true; - gFM_ChannelPosition = 0; + g_fm_auto_scan = true; + g_fm_channel_position = 0; FM_EraseChannels(); Frequency = g_eeprom.fm_lower_limit; } else { - gFM_AutoScan = false; - gFM_ChannelPosition = 0; + g_fm_auto_scan = false; + g_fm_channel_position = 0; Frequency = g_eeprom.fm_frequency_playing; } @@ -164,39 +164,39 @@ void ACTION_Scan(bool bRestart) } #endif - if (gScreenToDisplay != DISPLAY_SCANNER) + if (g_screen_to_display != DISPLAY_SCANNER) { // not scanning - gMonitor = false; + g_monitor_enabled = false; DTMF_clear_RX(); - gDTMF_RX_live_timeout = 0; - memset(gDTMF_RX_live, 0, sizeof(gDTMF_RX_live)); + g_dtmf_rx_live_timeout = 0; + memset(g_dtmf_rx_live, 0, sizeof(g_dtmf_rx_live)); RADIO_SelectVfos(); #ifdef ENABLE_NOAA - if (IS_NOT_NOAA_CHANNEL(gRxVfo->channel_save)) + if (IS_NOT_NOAA_CHANNEL(g_rx_vfo->channel_save)) #endif { GUI_SelectNextDisplay(DISPLAY_MAIN); - if (gScanStateDir != SCAN_OFF) + if (g_scan_state_dir != SCAN_OFF) { // already scanning - if (gNextChannel <= USER_CHANNEL_LAST) + if (g_next_channel <= USER_CHANNEL_LAST) { // channel mode // keep scanning but toggle between scan lists g_eeprom.scan_list_default = (g_eeprom.scan_list_default + 1) % 3; // jump to the next channel - CHANNEL_Next(true, gScanStateDir); - gScanPauseDelayIn_10ms = 1; - gScheduleScanListen = false; + CHANNEL_Next(true, g_scan_state_dir); + g_scan_pause_delay_in_10ms = 1; + g_schedule_scan_listen = false; - gUpdateStatus = true; + g_update_status = true; } else { // stop scanning @@ -219,30 +219,30 @@ void ACTION_Scan(bool bRestart) #endif // clear the other vfo's rssi level (to hide the antenna symbol) - gVFO_RSSI_bar_level[(g_eeprom.rx_vfo + 1) & 1u] = 0; + g_vfo_rssi_bar_level[(g_eeprom.rx_vfo + 1) & 1u] = 0; // let the user see DW is not active - gDualWatchActive = false; - gUpdateStatus = true; + g_dual_watch_active = false; + g_update_status = true; } } } else // if (!bRestart) - if (!bRestart && gNextChannel <= USER_CHANNEL_LAST) + if (!bRestart && g_next_channel <= USER_CHANNEL_LAST) { // channel mode, keep scanning but toggle between scan lists g_eeprom.scan_list_default = (g_eeprom.scan_list_default + 1) % 3; // jump to the next channel - CHANNEL_Next(true, gScanStateDir); - gScanPauseDelayIn_10ms = 1; - gScheduleScanListen = false; + CHANNEL_Next(true, g_scan_state_dir); + g_scan_pause_delay_in_10ms = 1; + g_schedule_scan_listen = false; - gUpdateStatus = true; + g_update_status = true; } else { // stop scanning - gMonitor = false; + g_monitor_enabled = false; SCANNER_Stop(); @@ -250,7 +250,7 @@ void ACTION_Scan(bool bRestart) g_another_voice_id = VOICE_ID_SCANNING_STOP; #endif - gRequestDisplayScreen = DISPLAY_MAIN; + g_request_display_screen = DISPLAY_MAIN; } } @@ -258,34 +258,34 @@ void ACTION_Scan(bool bRestart) void ACTION_Vox(void) { g_eeprom.vox_switch = !g_eeprom.vox_switch; - gRequestSaveSettings = true; - gFlagReconfigureVfos = true; + g_request_save_settings = true; + g_flag_reconfigure_vfos = true; #ifdef ENABLE_VOICE g_another_voice_id = VOICE_ID_VOX; #endif - gUpdateStatus = true; + g_update_status = true; } #endif #if defined(ENABLE_ALARM) || defined(ENABLE_TX1750) static void ACTION_AlarmOr1750(const bool b1750) { - gInputBoxIndex = 0; + g_input_box_index = 0; #if defined(ENABLE_ALARM) && defined(ENABLE_TX1750) - gAlarmState = b1750 ? ALARM_STATE_TX1750 : ALARM_STATE_TXALARM; - gAlarmRunningCounter = 0; + g_alarm_state = b1750 ? ALARM_STATE_TX1750 : ALARM_STATE_TXALARM; + g_alarm_running_counter = 0; #elif defined(ENABLE_ALARM) - gAlarmState = ALARM_STATE_TXALARM; - gAlarmRunningCounter = 0; + g_alarm_state = ALARM_STATE_TXALARM; + g_alarm_running_counter = 0; #else - gAlarmState = ALARM_STATE_TX1750; + g_alarm_state = ALARM_STATE_TX1750; #endif - gFlagPrepareTX = true; + g_flag_prepare_tx = true; - if (gScreenToDisplay != DISPLAY_MENU) // 1of11 .. don't close the menu - gRequestDisplayScreen = DISPLAY_MAIN; + if (g_screen_to_display != DISPLAY_MENU) // 1of11 .. don't close the menu + g_request_display_screen = DISPLAY_MAIN; } #endif @@ -293,54 +293,54 @@ void ACTION_Scan(bool bRestart) #ifdef ENABLE_FMRADIO void ACTION_FM(void) { - if (gCurrentFunction != FUNCTION_TRANSMIT && gCurrentFunction != FUNCTION_MONITOR) + if (g_current_function != FUNCTION_TRANSMIT && g_current_function != FUNCTION_MONITOR) { - if (gFmRadioMode) + if (g_fm_radio_mode) { FM_TurnOff(); - gInputBoxIndex = 0; + g_input_box_index = 0; #ifdef ENABLE_VOX - gVoxResumeCountdown = 80; + g_vox_resume_count_down = 80; #endif - gFlagReconfigureVfos = true; + g_flag_reconfigure_vfos = true; - gRequestDisplayScreen = DISPLAY_MAIN; + g_request_display_screen = DISPLAY_MAIN; return; } - gMonitor = false; + g_monitor_enabled = false; RADIO_SelectVfos(); RADIO_SetupRegisters(true); FM_Start(); - gInputBoxIndex = 0; + g_input_box_index = 0; - gRequestDisplayScreen = DISPLAY_FM; + g_request_display_screen = DISPLAY_FM; } } #endif -void ACTION_Handle(key_code_t Key, bool bKeyPressed, bool bKeyHeld) +void ACTION_Handle(key_code_t Key, bool key_pressed, bool key_held) { uint8_t Short = ACTION_OPT_NONE; uint8_t Long = ACTION_OPT_NONE; - if (gScreenToDisplay == DISPLAY_MAIN && gDTMF_InputMode) + if (g_screen_to_display == DISPLAY_MAIN && g_dtmf_input_mode) { - if (Key == KEY_SIDE1 && !bKeyHeld && bKeyPressed) + if (Key == KEY_SIDE1 && !key_held && key_pressed) { - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; - if (gDTMF_InputBox_Index > 0) + if (g_dtmf_input_box_index > 0) { - gDTMF_InputBox[--gDTMF_InputBox_Index] = '-'; - if (gDTMF_InputBox_Index > 0) + g_dtmf_input_box[--g_dtmf_input_box_index] = '-'; + if (g_dtmf_input_box_index > 0) { - gPttWasReleased = true; - gRequestDisplayScreen = DISPLAY_MAIN; + g_ptt_was_released = true; + g_request_display_screen = DISPLAY_MAIN; return; } } @@ -349,11 +349,11 @@ void ACTION_Handle(key_code_t Key, bool bKeyPressed, bool bKeyHeld) g_another_voice_id = VOICE_ID_CANCEL; #endif - gRequestDisplayScreen = DISPLAY_MAIN; - gDTMF_InputMode = false; + g_request_display_screen = DISPLAY_MAIN; + g_dtmf_input_mode = false; } - gPttWasReleased = true; + g_ptt_was_released = true; return; } @@ -369,20 +369,20 @@ void ACTION_Handle(key_code_t Key, bool bKeyPressed, bool bKeyHeld) Long = g_eeprom.key2_long_press_action; } - if (!bKeyHeld && bKeyPressed) + if (!key_held && key_pressed) { - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; return; } - if (bKeyHeld || bKeyPressed) + if (key_held || key_pressed) { - if (!bKeyHeld) + if (!key_held) return; Short = Long; - if (!bKeyPressed) + if (!key_pressed) return; } diff --git a/app/aircopy.c b/app/aircopy.c index 8e9cd85..4fd5fcb 100644 --- a/app/aircopy.c +++ b/app/aircopy.c @@ -30,99 +30,99 @@ static const uint16_t Obfuscation[8] = {0x6C16, 0xE614, 0x912E, 0x400D, 0x3521, 0x40D5, 0x0313, 0x80E9}; -AIRCOPY_State_t gAircopyState; -uint16_t gAirCopyBlockNumber; -uint16_t gErrorsDuringAirCopy; -uint8_t gAirCopyIsSendMode; +aircopy_state_t g_aircopy_state; +uint16_t g_air_copy_block_number; +uint16_t g_errors_during_air_copyy; +uint8_t g_air_copy_is_send_mode; -uint16_t g_FSK_Buffer[36]; +uint16_t g_fsk_buffer[36]; void AIRCOPY_SendMessage(void) { unsigned int i; - g_FSK_Buffer[1] = (gAirCopyBlockNumber & 0x3FF) << 6; + g_fsk_buffer[1] = (g_air_copy_block_number & 0x3FF) << 6; - EEPROM_ReadBuffer(g_FSK_Buffer[1], &g_FSK_Buffer[2], 64); + EEPROM_ReadBuffer(g_fsk_buffer[1], &g_fsk_buffer[2], 64); - g_FSK_Buffer[34] = CRC_Calculate(&g_FSK_Buffer[1], 2 + 64); + g_fsk_buffer[34] = CRC_Calculate(&g_fsk_buffer[1], 2 + 64); for (i = 0; i < 34; i++) - g_FSK_Buffer[i + 1] ^= Obfuscation[i % 8]; + g_fsk_buffer[i + 1] ^= Obfuscation[i % 8]; - if (++gAirCopyBlockNumber >= 0x78) - gAircopyState = AIRCOPY_COMPLETE; + if (++g_air_copy_block_number >= 0x78) + g_aircopy_state = AIRCOPY_COMPLETE; RADIO_SetTxParameters(); - BK4819_SendFSKData(g_FSK_Buffer); + BK4819_SendFSKData(g_fsk_buffer); BK4819_SetupPowerAmplifier(0, 0); BK4819_ToggleGpioOut(BK4819_GPIO5_PIN1, false); - gAircopySendCountdown = 30; + g_air_copy_send_count_down = 30; } void AIRCOPY_StorePacket(void) { uint16_t Status; - if (gFSKWriteIndex < 36) + if (g_fsk_wite_index < 36) return; - gFSKWriteIndex = 0; - gUpdateDisplay = true; - Status = BK4819_ReadRegister(BK4819_REG_0B); + g_fsk_wite_index = 0; + g_update_display = true; + Status = BK4819_ReadRegister(BK4819_REG_0B); BK4819_PrepareFSKReceive(); // Doc says bit 4 should be 1 = CRC OK, 0 = CRC FAIL, but original firmware checks for FAIL. - if ((Status & 0x0010U) == 0 && g_FSK_Buffer[0] == 0xABCD && g_FSK_Buffer[35] == 0xDCBA) + if ((Status & 0x0010U) == 0 && g_fsk_buffer[0] == 0xABCD && g_fsk_buffer[35] == 0xDCBA) { uint16_t CRC; unsigned int i; for (i = 0; i < 34; i++) - g_FSK_Buffer[i + 1] ^= Obfuscation[i % 8]; + g_fsk_buffer[i + 1] ^= Obfuscation[i % 8]; - CRC = CRC_Calculate(&g_FSK_Buffer[1], 2 + 64); - if (g_FSK_Buffer[34] == CRC) + CRC = CRC_Calculate(&g_fsk_buffer[1], 2 + 64); + if (g_fsk_buffer[34] == CRC) { const uint16_t *pData; uint16_t Offset; - Offset = g_FSK_Buffer[1]; + Offset = g_fsk_buffer[1]; if (Offset < 0x1E00) { - pData = &g_FSK_Buffer[2]; + pData = &g_fsk_buffer[2]; for (i = 0; i < 8; i++) { EEPROM_WriteBuffer(Offset, pData); pData += 4; Offset += 8; } - - if (Offset == 0x1E00) - gAircopyState = AIRCOPY_COMPLETE; - gAirCopyBlockNumber++; + if (Offset == 0x1E00) + g_aircopy_state = AIRCOPY_COMPLETE; + + g_air_copy_block_number++; return; } } } - gErrorsDuringAirCopy++; + g_errors_during_air_copyy++; } -static void AIRCOPY_Key_DIGITS(key_code_t Key, bool bKeyPressed, bool bKeyHeld) +static void AIRCOPY_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held) { - if (!bKeyHeld && bKeyPressed) + if (!key_held && key_pressed) { uint32_t Frequency; unsigned int i; INPUTBOX_Append(Key); - gRequestDisplayScreen = DISPLAY_AIRCOPY; - if (gInputBoxIndex < 6) + g_request_display_screen = DISPLAY_AIRCOPY; + if (g_input_box_index < 6) { #ifdef ENABLE_VOICE g_another_voice_id = (voice_id_t)Key; @@ -130,24 +130,24 @@ static void AIRCOPY_Key_DIGITS(key_code_t Key, bool bKeyPressed, bool bKeyHeld) return; } - gInputBoxIndex = 0; + g_input_box_index = 0; - NUMBER_Get(gInputBox, &Frequency); + NUMBER_Get(g_input_box, &Frequency); - for (i = 0; i < ARRAY_SIZE(frequencyBandTable); i++) + for (i = 0; i < ARRAY_SIZE(FREQ_BAND_TABLE); i++) { - if (Frequency >= frequencyBandTable[i].lower && Frequency < frequencyBandTable[i].upper) + if (Frequency >= FREQ_BAND_TABLE[i].lower && Frequency < FREQ_BAND_TABLE[i].upper) { #ifdef ENABLE_VOICE - g_another_voice_id = (voice_id_t)Key; + g_another_voice_id = (voice_id_t)Key; #endif - gRxVfo->band = i; - Frequency += 75; - Frequency = FREQUENCY_FloorToStep(Frequency, gRxVfo->step_freq, 0); - gRxVfo->freq_config_rx.frequency = Frequency; - gRxVfo->freq_config_tx.frequency = Frequency; - RADIO_ConfigureSquelchAndOutputPower(gRxVfo); - gCurrentVfo = gRxVfo; + g_rx_vfo->band = i; + Frequency += 75; + Frequency = FREQUENCY_FloorToStep(Frequency, g_rx_vfo->step_freq, 0); + g_rx_vfo->freq_config_rx.frequency = Frequency; + g_rx_vfo->freq_config_tx.frequency = Frequency; + RADIO_ConfigureSquelchAndOutputPower(g_rx_vfo); + g_current_vfo = g_rx_vfo; RADIO_SetupRegisters(true); BK4819_SetupAircopy(); BK4819_ResetFSK(); @@ -155,54 +155,54 @@ static void AIRCOPY_Key_DIGITS(key_code_t Key, bool bKeyPressed, bool bKeyHeld) } } - gRequestDisplayScreen = DISPLAY_AIRCOPY; + g_request_display_screen = DISPLAY_AIRCOPY; } } -static void AIRCOPY_Key_EXIT(bool bKeyPressed, bool bKeyHeld) +static void AIRCOPY_Key_EXIT(bool key_pressed, bool key_held) { - if (!bKeyHeld && bKeyPressed) + if (!key_held && key_pressed) { - if (gInputBoxIndex == 0) + if (g_input_box_index == 0) { - gFSKWriteIndex = 0; - gAirCopyBlockNumber = 0; - gErrorsDuringAirCopy = 0; - gInputBoxIndex = 0; - gAirCopyIsSendMode = 0; + g_fsk_wite_index = 0; + g_air_copy_block_number = 0; + g_errors_during_air_copyy = 0; + g_input_box_index = 0; + g_air_copy_is_send_mode = 0; BK4819_PrepareFSKReceive(); - gAircopyState = AIRCOPY_TRANSFER; + g_aircopy_state = AIRCOPY_TRANSFER; } else - gInputBox[--gInputBoxIndex] = 10; + g_input_box[--g_input_box_index] = 10; - gRequestDisplayScreen = DISPLAY_AIRCOPY; + g_request_display_screen = DISPLAY_AIRCOPY; } } -static void AIRCOPY_Key_MENU(bool bKeyPressed, bool bKeyHeld) +static void AIRCOPY_Key_MENU(bool key_pressed, bool key_held) { - if (!bKeyHeld && bKeyPressed) + if (!key_held && key_pressed) { - gFSKWriteIndex = 0; - gAirCopyBlockNumber = 0; - gInputBoxIndex = 0; - gAirCopyIsSendMode = 1; - g_FSK_Buffer[0] = 0xABCD; - g_FSK_Buffer[1] = 0; - g_FSK_Buffer[35] = 0xDCBA; + g_fsk_wite_index = 0; + g_air_copy_block_number = 0; + g_input_box_index = 0; + g_air_copy_is_send_mode = 1; + g_fsk_buffer[0] = 0xABCD; + g_fsk_buffer[1] = 0; + g_fsk_buffer[35] = 0xDCBA; AIRCOPY_SendMessage(); GUI_DisplayScreen(); - gAircopyState = AIRCOPY_TRANSFER; + g_aircopy_state = AIRCOPY_TRANSFER; } } -void AIRCOPY_ProcessKeys(key_code_t Key, bool bKeyPressed, bool bKeyHeld) +void AIRCOPY_ProcessKeys(key_code_t Key, bool key_pressed, bool key_held) { switch (Key) { @@ -216,13 +216,13 @@ void AIRCOPY_ProcessKeys(key_code_t Key, bool bKeyPressed, bool bKeyHeld) case KEY_7: case KEY_8: case KEY_9: - AIRCOPY_Key_DIGITS(Key, bKeyPressed, bKeyHeld); + AIRCOPY_Key_DIGITS(Key, key_pressed, key_held); break; case KEY_MENU: - AIRCOPY_Key_MENU(bKeyPressed, bKeyHeld); + AIRCOPY_Key_MENU(key_pressed, key_held); break; case KEY_EXIT: - AIRCOPY_Key_EXIT(bKeyPressed, bKeyHeld); + AIRCOPY_Key_EXIT(key_pressed, key_held); break; default: break; diff --git a/app/app.c b/app/app.c index e5b52a9..504d87c 100644 --- a/app/app.c +++ b/app/app.c @@ -69,7 +69,7 @@ const uint8_t orig_lna = 2; // -14dB const uint8_t orig_mixer = 3; // 0dB const uint8_t orig_pga = 6; // -3dB -static void APP_ProcessKey(key_code_t Key, bool bKeyPressed, bool bKeyHeld); +static void APP_ProcessKey(key_code_t Key, bool key_pressed, bool key_held); static void updateRSSI(const int vfo) { @@ -77,54 +77,54 @@ static void updateRSSI(const int vfo) #ifdef ENABLE_AM_FIX // add RF gain adjust compensation - if (g_eeprom.VfoInfo[vfo].am_mode && gSetting_AM_fix) + if (g_eeprom.vfo_info[vfo].am_mode && g_setting_am_fix) rssi -= rssi_gain_diff[vfo]; #endif - if (gCurrentRSSI[vfo] == rssi) + if (g_current_rssi[vfo] == rssi) return; // no change - gCurrentRSSI[vfo] = rssi; + g_current_rssi[vfo] = rssi; UI_UpdateRSSI(rssi, vfo); } static void APP_CheckForIncoming(void) { - if (!g_SquelchLost) + if (!g_squelch_lost) return; // squelch is closed // squelch is open - if (gScanStateDir == SCAN_OFF) + if (g_scan_state_dir == SCAN_OFF) { // not RF scanning - if (gCssScanMode != CSS_SCAN_MODE_OFF && gRxReceptionMode == RX_MODE_NONE) + if (g_css_scan_mode != CSS_SCAN_MODE_OFF && g_rx_reception_mode == RX_MODE_NONE) { // CTCSS/DTS scanning - gScanPauseDelayIn_10ms = scan_pause_delay_in_5_10ms; - gScheduleScanListen = false; - gRxReceptionMode = RX_MODE_DETECTED; + g_scan_pause_delay_in_10ms = scan_pause_delay_in_5_10ms; + g_schedule_scan_listen = false; + g_rx_reception_mode = RX_MODE_DETECTED; } if (g_eeprom.dual_watch == DUAL_WATCH_OFF) { // dual watch is disabled #ifdef ENABLE_NOAA - if (gIsNoaaMode) + if (g_is_noaa_mode) { - gNOAA_Countdown_10ms = NOAA_countdown_3_10ms; - gScheduleNOAA = false; + g_noaa_count_down_10ms = noaa_count_down_3_10ms; + g_schedule_noaa = false; } #endif - if (gCurrentFunction != FUNCTION_INCOMING) + if (g_current_function != FUNCTION_INCOMING) { FUNCTION_Select(FUNCTION_INCOMING); - //gUpdateDisplay = true; + //g_update_display = true; updateRSSI(g_eeprom.rx_vfo); - gUpdateRSSI = true; + g_update_rssi = true; } return; @@ -132,127 +132,127 @@ static void APP_CheckForIncoming(void) // dual watch is enabled and we're RX'ing a signal - if (gRxReceptionMode != RX_MODE_NONE) + if (g_rx_reception_mode != RX_MODE_NONE) { - if (gCurrentFunction != FUNCTION_INCOMING) + if (g_current_function != FUNCTION_INCOMING) { FUNCTION_Select(FUNCTION_INCOMING); - //gUpdateDisplay = true; + //g_update_display = true; updateRSSI(g_eeprom.rx_vfo); - gUpdateRSSI = true; + g_update_rssi = true; } return; } - gDualWatchCountdown_10ms = dual_watch_count_after_rx_10ms; - gScheduleDualWatch = false; + g_dual_watch_count_down_10ms = dual_watch_count_after_rx_10ms; + g_schedule_dual_watch = false; // let the user see DW is not active - gDualWatchActive = false; - gUpdateStatus = true; + g_dual_watch_active = false; + g_update_status = true; } else { // RF scanning - if (gRxReceptionMode != RX_MODE_NONE) + if (g_rx_reception_mode != RX_MODE_NONE) { - if (gCurrentFunction != FUNCTION_INCOMING) + if (g_current_function != FUNCTION_INCOMING) { FUNCTION_Select(FUNCTION_INCOMING); - //gUpdateDisplay = true; + //g_update_display = true; updateRSSI(g_eeprom.rx_vfo); - gUpdateRSSI = true; + g_update_rssi = true; } return; } - gScanPauseDelayIn_10ms = scan_pause_delay_in_3_10ms; - gScheduleScanListen = false; + g_scan_pause_delay_in_10ms = scan_pause_delay_in_3_10ms; + g_schedule_scan_listen = false; } - gRxReceptionMode = RX_MODE_DETECTED; + g_rx_reception_mode = RX_MODE_DETECTED; - if (gCurrentFunction != FUNCTION_INCOMING) + if (g_current_function != FUNCTION_INCOMING) { FUNCTION_Select(FUNCTION_INCOMING); - //gUpdateDisplay = true; + //g_update_display = true; updateRSSI(g_eeprom.rx_vfo); - gUpdateRSSI = true; + g_update_rssi = true; } } static void APP_HandleIncoming(void) { - bool bFlag; + bool flag; - if (!g_SquelchLost) + if (!g_squelch_lost) { // squelch is closed - if (gDTMF_RX_index > 0) + if (g_dtmf_rx_index > 0) DTMF_clear_RX(); - if (gCurrentFunction != FUNCTION_FOREGROUND) + if (g_current_function != FUNCTION_FOREGROUND) { FUNCTION_Select(FUNCTION_FOREGROUND); - gUpdateDisplay = true; + g_update_display = true; } return; } - bFlag = (gScanStateDir == SCAN_OFF && gCurrentcode_type == CODE_TYPE_OFF); + flag = (g_scan_state_dir == SCAN_OFF && g_current_code_type == CODE_TYPE_OFF); #ifdef ENABLE_NOAA - if (IS_NOAA_CHANNEL(gRxVfo->channel_save) && gNOAACountdown_10ms > 0) + if (IS_NOAA_CHANNEL(g_rx_vfo->channel_save) && g_noaa_count_down_10ms > 0) { - gNOAACountdown_10ms = 0; - bFlag = true; + g_noaa_count_down_10ms = 0; + flag = true; } #endif - if (g_CTCSS_lost && gCurrentcode_type == CODE_TYPE_CONTINUOUS_TONE) + if (g_CTCSS_lost && g_current_code_type == CODE_TYPE_CONTINUOUS_TONE) { - bFlag = true; - gFoundCTCSS = false; + flag = true; + g_found_CTCSS = false; } - if (g_CDCSS_lost && g_CDCSS_code_type == CDCSS_POSITIVE_CODE && (gCurrentcode_type == CODE_TYPE_DIGITAL || gCurrentcode_type == CODE_TYPE_REVERSE_DIGITAL)) + if (g_CDCSS_lost && g_CDCSS_code_type == CDCSS_POSITIVE_CODE && (g_current_code_type == CODE_TYPE_DIGITAL || g_current_code_type == CODE_TYPE_REVERSE_DIGITAL)) { - gFoundCDCSS = false; + g_found_CDCSS = false; } else - if (!bFlag) + if (!flag) return; - if (gScanStateDir == SCAN_OFF && gCssScanMode == CSS_SCAN_MODE_OFF) + if (g_scan_state_dir == SCAN_OFF && g_css_scan_mode == CSS_SCAN_MODE_OFF) { // not scanning - if (gRxVfo->DTMF_decoding_enable || gSetting_KILLED) + if (g_rx_vfo->dtmf_decoding_enable || g_setting_killed) { // DTMF DCD is enabled DTMF_HandleRequest(); - if (gDTMF_CallState == DTMF_CALL_STATE_NONE) + if (g_dtmf_call_state == DTMF_CALL_STATE_NONE) { - if (gRxReceptionMode == RX_MODE_DETECTED) + if (g_rx_reception_mode == RX_MODE_DETECTED) { - gDualWatchCountdown_10ms = dual_watch_count_after_1_10ms; - gScheduleDualWatch = false; + g_dual_watch_count_down_10ms = dual_watch_count_after_1_10ms; + g_schedule_dual_watch = false; - gRxReceptionMode = RX_MODE_LISTENING; + g_rx_reception_mode = RX_MODE_LISTENING; // let the user see DW is not active - gDualWatchActive = false; - gUpdateStatus = true; + g_dual_watch_active = false; + g_update_status = true; - gUpdateDisplay = true; + g_update_display = true; return; } } } } - APP_StartListening(gMonitor ? FUNCTION_MONITOR : FUNCTION_RECEIVE, false); + APP_StartListening(g_monitor_enabled ? FUNCTION_MONITOR : FUNCTION_RECEIVE, false); } static void APP_HandleReceive(void) @@ -263,32 +263,32 @@ static void APP_HandleReceive(void) uint8_t Mode = END_OF_RX_MODE_SKIP; - if (gFlagTailNoteEliminationComplete) + if (g_flag_tail_tone_elimination_complete) { Mode = END_OF_RX_MODE_END; goto Skip; } - if (gScanStateDir != SCAN_OFF && IS_FREQ_CHANNEL(gNextChannel)) + if (g_scan_state_dir != SCAN_OFF && IS_FREQ_CHANNEL(g_next_channel)) { - if (g_SquelchLost) + if (g_squelch_lost) return; Mode = END_OF_RX_MODE_END; goto Skip; } - switch (gCurrentcode_type) + switch (g_current_code_type) { default: case CODE_TYPE_OFF: break; case CODE_TYPE_CONTINUOUS_TONE: - if (gFoundCTCSS && gFoundCTCSSCountdown_10ms == 0) + if (g_found_CTCSS && g_found_CTCSS_count_down_10ms == 0) { - gFoundCTCSS = false; - gFoundCDCSS = false; + g_found_CTCSS = false; + g_found_CDCSS = false; Mode = END_OF_RX_MODE_END; goto Skip; } @@ -296,33 +296,33 @@ static void APP_HandleReceive(void) case CODE_TYPE_DIGITAL: case CODE_TYPE_REVERSE_DIGITAL: - if (gFoundCDCSS && gFoundCDCSSCountdown_10ms == 0) + if (g_found_CDCSS && g_found_CDCSS_count_down_10ms == 0) { - gFoundCTCSS = false; - gFoundCDCSS = false; + g_found_CTCSS = false; + g_found_CDCSS = false; Mode = END_OF_RX_MODE_END; goto Skip; } break; } - if (g_SquelchLost) + if (g_squelch_lost) { #ifdef ENABLE_NOAA - if (!gEndOfRxDetectedMaybe && IS_NOT_NOAA_CHANNEL(gRxVfo->channel_save)) + if (!g_end_of_rx_detected_maybe && IS_NOT_NOAA_CHANNEL(g_rx_vfo->channel_save)) #else - if (!gEndOfRxDetectedMaybe) + if (!g_end_of_rx_detected_maybe) #endif { - switch (gCurrentcode_type) + switch (g_current_code_type) { case CODE_TYPE_OFF: if (g_eeprom.squelch_level) { - if (g_CxCSS_tailL_found) + if (g_CxCSS_tail_found) { Mode = END_OF_RX_MODE_TTE; - g_CxCSS_tailL_found = false; + g_CxCSS_tail_found = false; } } break; @@ -330,19 +330,19 @@ static void APP_HandleReceive(void) case CODE_TYPE_CONTINUOUS_TONE: if (g_CTCSS_lost) { - gFoundCTCSS = false; + g_found_CTCSS = false; } else - if (!gFoundCTCSS) + if (!g_found_CTCSS) { - gFoundCTCSS = true; - gFoundCTCSSCountdown_10ms = 100; // 1 sec + g_found_CTCSS = true; + g_found_CTCSS_count_down_10ms = 100; // 1 sec } - if (g_CxCSS_tailL_found) + if (g_CxCSS_tail_found) { Mode = END_OF_RX_MODE_TTE; - g_CxCSS_tailL_found = false; + g_CxCSS_tail_found = false; } break; @@ -350,21 +350,21 @@ static void APP_HandleReceive(void) case CODE_TYPE_REVERSE_DIGITAL: if (g_CDCSS_lost && g_CDCSS_code_type == CDCSS_POSITIVE_CODE) { - gFoundCDCSS = false; + g_found_CDCSS = false; } else - if (!gFoundCDCSS) + if (!g_found_CDCSS) { - gFoundCDCSS = true; - gFoundCDCSSCountdown_10ms = 100; // 1 sec + g_found_CDCSS = true; + g_found_CDCSS_count_down_10ms = 100; // 1 sec } - if (g_CxCSS_tailL_found) + if (g_CxCSS_tail_found) { if (BK4819_GetCTCType() == 1) Mode = END_OF_RX_MODE_TTE; - g_CxCSS_tailL_found = false; + g_CxCSS_tail_found = false; } break; @@ -374,15 +374,15 @@ static void APP_HandleReceive(void) else Mode = END_OF_RX_MODE_END; - if (!gEndOfRxDetectedMaybe && + if (!g_end_of_rx_detected_maybe && Mode == END_OF_RX_MODE_SKIP && - gNextTimeslice40ms && + g_next_time_slice_40ms && g_eeprom.tail_note_elimination && - (gCurrentcode_type == CODE_TYPE_DIGITAL || gCurrentcode_type == CODE_TYPE_REVERSE_DIGITAL) && + (g_current_code_type == CODE_TYPE_DIGITAL || g_current_code_type == CODE_TYPE_REVERSE_DIGITAL) && BK4819_GetCTCType() == 1) Mode = END_OF_RX_MODE_TTE; else - gNextTimeslice40ms = false; + g_next_time_slice_40ms = false; Skip: switch (Mode) @@ -394,13 +394,13 @@ Skip: RADIO_SetupRegisters(true); #ifdef ENABLE_NOAA - if (IS_NOAA_CHANNEL(gRxVfo->channel_save)) - gNOAACountdown_10ms = 300; // 3 sec + if (IS_NOAA_CHANNEL(g_rx_vfo->channel_save)) + g_noaa_count_down_10ms = 300; // 3 sec #endif - gUpdateDisplay = true; + g_update_display = true; - if (gScanStateDir != SCAN_OFF) + if (g_scan_state_dir != SCAN_OFF) { switch (g_eeprom.scan_resume_mode) { @@ -408,8 +408,8 @@ Skip: break; case SCAN_RESUME_CO: - gScanPauseDelayIn_10ms = scan_pause_delay_in_7_10ms; - gScheduleScanListen = false; + g_scan_pause_delay_in_10ms = scan_pause_delay_in_7_10ms; + g_schedule_scan_listen = false; break; case SCAN_RESUME_SE: @@ -425,10 +425,10 @@ Skip: { GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); - gTailNoteEliminationCountdown_10ms = 20; - gFlagTailNoteEliminationComplete = false; - gEndOfRxDetectedMaybe = true; - gEnableSpeaker = false; + g_tail_tone_elimination_count_down_10ms = 20; + g_flag_tail_tone_elimination_complete = false; + g_end_of_rx_detected_maybe = true; + g_enable_speaker = false; } break; } @@ -436,7 +436,7 @@ Skip: static void APP_HandleFunction(void) { - switch (gCurrentFunction) + switch (g_current_function) { case FUNCTION_FOREGROUND: APP_CheckForIncoming(); @@ -466,46 +466,46 @@ static void APP_HandleFunction(void) } } -void APP_StartListening(FUNCTION_Type_t Function, const bool reset_am_fix) +void APP_StartListening(function_type_t Function, const bool reset_am_fix) { const unsigned int chan = g_eeprom.rx_vfo; -// const unsigned int chan = gRxVfo->channel_save; +// const unsigned int chan = g_rx_vfo->channel_save; - if (gSetting_KILLED) + if (g_setting_killed) return; #ifdef ENABLE_FMRADIO - if (gFmRadioMode) + if (g_fm_radio_mode) BK1080_Init(0, false); #endif // clear the other vfo's rssi level (to hide the antenna symbol) - gVFO_RSSI_bar_level[(chan + 1) & 1u] = 0; + g_vfo_rssi_bar_level[(chan + 1) & 1u] = 0; GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); - gEnableSpeaker = true; + g_enable_speaker = true; - if (gSetting_backlight_on_tx_rx >= 2) + if (g_setting_backlight_on_tx_rx >= 2) backlight_turn_on(); - if (gScanStateDir != SCAN_OFF) + if (g_scan_state_dir != SCAN_OFF) { switch (g_eeprom.scan_resume_mode) { case SCAN_RESUME_TO: if (!gScanPauseMode) { - gScanPauseDelayIn_10ms = scan_pause_delay_in_1_10ms; - gScheduleScanListen = false; + g_scan_pause_delay_in_10ms = scan_pause_delay_in_1_10ms; + g_schedule_scan_listen = false; gScanPauseMode = true; } break; case SCAN_RESUME_CO: case SCAN_RESUME_SE: - gScanPauseDelayIn_10ms = 0; - gScheduleScanListen = false; + g_scan_pause_delay_in_10ms = 0; + g_schedule_scan_listen = false; break; } @@ -513,34 +513,34 @@ void APP_StartListening(FUNCTION_Type_t Function, const bool reset_am_fix) } #ifdef ENABLE_NOAA - if (IS_NOAA_CHANNEL(gRxVfo->channel_save) && gIsNoaaMode) + if (IS_NOAA_CHANNEL(g_rx_vfo->channel_save) && g_is_noaa_mode) { - gRxVfo->channel_save = gNoaaChannel + NOAA_CHANNEL_FIRST; - gRxVfo->pRX->frequency = NoaaFrequencyTable[gNoaaChannel]; - gRxVfo->pTX->frequency = NoaaFrequencyTable[gNoaaChannel]; - g_eeprom.screen_channel[chan] = gRxVfo->channel_save; + g_rx_vfo->channel_save = g_noaa_channel + NOAA_CHANNEL_FIRST; + g_rx_vfo->pRX->frequency = NoaaFrequencyTable[g_noaa_channel]; + g_rx_vfo->pTX->frequency = NoaaFrequencyTable[g_noaa_channel]; + g_eeprom.screen_channel[chan] = g_rx_vfo->channel_save; - gNOAA_Countdown_10ms = 500; // 5 sec - gScheduleNOAA = false; + g_noaa_count_down_10ms = 500; // 5 sec + g_schedule_noaa = false; } #endif - if (gCssScanMode != CSS_SCAN_MODE_OFF) - gCssScanMode = CSS_SCAN_MODE_FOUND; + if (g_css_scan_mode != CSS_SCAN_MODE_OFF) + g_css_scan_mode = CSS_SCAN_MODE_FOUND; - if (gScanStateDir == SCAN_OFF && - gCssScanMode == CSS_SCAN_MODE_OFF && + if (g_scan_state_dir == SCAN_OFF && + g_css_scan_mode == CSS_SCAN_MODE_OFF && g_eeprom.dual_watch != DUAL_WATCH_OFF) { // not scanning, dual watch is enabled - gDualWatchCountdown_10ms = dual_watch_count_after_2_10ms; - gScheduleDualWatch = false; + g_dual_watch_count_down_10ms = dual_watch_count_after_2_10ms; + g_schedule_dual_watch = false; - gRxVfoIsActive = true; + g_rx_vfo_is_active = true; // let the user see DW is not active - gDualWatchActive = false; - gUpdateStatus = true; + g_dual_watch_active = false; + g_update_status = true; } { // RF RX front end gain @@ -552,7 +552,7 @@ void APP_StartListening(FUNCTION_Type_t Function, const bool reset_am_fix) uint16_t pga = orig_pga; #ifdef ENABLE_AM_FIX - if (gRxVfo->am_mode && gSetting_AM_fix) + if (g_rx_vfo->am_mode && g_setting_am_fix) { // AM RX mode if (reset_am_fix) AM_fix_reset(chan); // TODO: only reset it when moving channel/frequency @@ -577,32 +577,32 @@ void APP_StartListening(FUNCTION_Type_t Function, const bool reset_am_fix) #ifdef ENABLE_VOICE if (g_voice_write_index == 0) // AM/FM RX mode will be set when the voice has finished #endif - BK4819_SetAF(gRxVfo->am_mode ? BK4819_AF_AM : BK4819_AF_FM); // no need, set it now + BK4819_SetAF(g_rx_vfo->am_mode ? BK4819_AF_AM : BK4819_AF_FM); // no need, set it now FUNCTION_Select(Function); #ifdef ENABLE_FMRADIO - if (Function == FUNCTION_MONITOR || gFmRadioMode) + if (Function == FUNCTION_MONITOR || g_fm_radio_mode) #else if (Function == FUNCTION_MONITOR) #endif { // squelch is disabled - if (gScreenToDisplay != DISPLAY_MENU) // 1of11 .. don't close the menu + if (g_screen_to_display != DISPLAY_MENU) // 1of11 .. don't close the menu GUI_SelectNextDisplay(DISPLAY_MAIN); } else - gUpdateDisplay = true; + g_update_display = true; - gUpdateStatus = true; + g_update_status = true; } -uint32_t APP_SetFrequencyByStep(VFO_Info_t *pInfo, int8_t Step) +uint32_t APP_SetFrequencyByStep(vfo_info_t *pInfo, int8_t Step) { uint32_t Frequency = pInfo->freq_config_rx.frequency + (Step * pInfo->step_freq); if (pInfo->step_freq == 833) { - const uint32_t Lower = frequencyBandTable[pInfo->band].lower; + const uint32_t Lower = FREQ_BAND_TABLE[pInfo->band].lower; const uint32_t Delta = Frequency - Lower; uint32_t Base = (Delta / 2500) * 2500; const uint32_t Index = ((Delta - Base) % 2500) / 833; @@ -613,31 +613,31 @@ uint32_t APP_SetFrequencyByStep(VFO_Info_t *pInfo, int8_t Step) Frequency = Lower + Base + (Index * 833); } - if (Frequency >= frequencyBandTable[pInfo->band].upper) - Frequency = frequencyBandTable[pInfo->band].lower; + if (Frequency >= FREQ_BAND_TABLE[pInfo->band].upper) + Frequency = FREQ_BAND_TABLE[pInfo->band].lower; else - if (Frequency < frequencyBandTable[pInfo->band].lower) - Frequency = FREQUENCY_FloorToStep(frequencyBandTable[pInfo->band].upper, pInfo->step_freq, frequencyBandTable[pInfo->band].lower); + if (Frequency < FREQ_BAND_TABLE[pInfo->band].lower) + Frequency = FREQUENCY_FloorToStep(FREQ_BAND_TABLE[pInfo->band].upper, pInfo->step_freq, FREQ_BAND_TABLE[pInfo->band].lower); return Frequency; } static void FREQ_NextChannel(void) { - gRxVfo->freq_config_rx.frequency = APP_SetFrequencyByStep(gRxVfo, gScanStateDir); + g_rx_vfo->freq_config_rx.frequency = APP_SetFrequencyByStep(g_rx_vfo, g_scan_state_dir); - RADIO_ApplyOffset(gRxVfo); - RADIO_ConfigureSquelchAndOutputPower(gRxVfo); + RADIO_ApplyOffset(g_rx_vfo); + RADIO_ConfigureSquelchAndOutputPower(g_rx_vfo); RADIO_SetupRegisters(true); #ifdef ENABLE_FASTER_CHANNEL_SCAN - gScanPauseDelayIn_10ms = 9; // 90ms + g_scan_pause_delay_in_10ms = 9; // 90ms #else - gScanPauseDelayIn_10ms = scan_pause_delay_in_6_10ms; + g_scan_pause_delay_in_10ms = scan_pause_delay_in_6_10ms; #endif bScanKeepFrequency = false; - gUpdateDisplay = true; + g_update_display = true; } static void USER_NextChannel(void) @@ -646,7 +646,7 @@ static void USER_NextChannel(void) const bool enabled = (g_eeprom.scan_list_default < 2) ? g_eeprom.scan_list_enabled[g_eeprom.scan_list_default] : true; const int chan1 = (g_eeprom.scan_list_default < 2) ? g_eeprom.scan_list_priority_ch1[g_eeprom.scan_list_default] : -1; const int chan2 = (g_eeprom.scan_list_default < 2) ? g_eeprom.scan_list_priority_ch2[g_eeprom.scan_list_default] : -1; - const unsigned int prev_chan = gNextChannel; + const unsigned int prev_chan = g_next_channel; unsigned int chan = 0; if (enabled) @@ -654,17 +654,17 @@ static void USER_NextChannel(void) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wimplicit-fallthrough=" - switch (gCurrentScanList) + switch (g_current_scan_list) { case SCAN_NEXT_CHAN_SCANLIST1: - prevChannel = gNextChannel; + prevChannel = g_next_channel; if (chan1 >= 0) { if (RADIO_CheckValidChannel(chan1, false, 0)) { - gCurrentScanList = SCAN_NEXT_CHAN_SCANLIST1; - gNextChannel = chan1; + g_current_scan_list = SCAN_NEXT_CHAN_SCANLIST1; + g_next_channel = chan1; break; } } @@ -674,14 +674,14 @@ static void USER_NextChannel(void) { if (RADIO_CheckValidChannel(chan2, false, 0)) { - gCurrentScanList = SCAN_NEXT_CHAN_SCANLIST2; - gNextChannel = chan2; + g_current_scan_list = SCAN_NEXT_CHAN_SCANLIST2; + g_next_channel = chan2; break; } } // this bit doesn't yet work if the other VFO is a frequency - case SCAN_NEXT_CHAN_dual_watch: + case SCAN_NEXT_CHAN_DUAL_WATCH: // dual watch is enabled - include the other VFO in the scan // if (g_eeprom.dual_watch != DUAL_WATCH_OFF) // { @@ -689,16 +689,16 @@ static void USER_NextChannel(void) // chan = g_eeprom.screen_channel[chan]; // if (chan <= USER_CHANNEL_LAST) // { -// gCurrentScanList = SCAN_NEXT_CHAN_dual_watch; -// gNextChannel = chan; +// g_current_scan_list = SCAN_NEXT_CHAN_DUAL_WATCH; +// g_next_channel = chan; // break; // } // } default: case SCAN_NEXT_CHAN_USER: - gCurrentScanList = SCAN_NEXT_CHAN_USER; - gNextChannel = prevChannel; + g_current_scan_list = SCAN_NEXT_CHAN_USER; + g_next_channel = prevChannel; chan = 0xff; break; } @@ -708,7 +708,7 @@ static void USER_NextChannel(void) if (!enabled || chan == 0xff) { - chan = RADIO_FindNextChannel(gNextChannel + gScanStateDir, gScanStateDir, (g_eeprom.scan_list_default < 2) ? true : false, g_eeprom.scan_list_default); + chan = RADIO_FindNextChannel(g_next_channel + g_scan_state_dir, g_scan_state_dir, (g_eeprom.scan_list_default < 2) ? true : false, g_eeprom.scan_list_default); if (chan == 0xFF) { // no valid channel found @@ -716,81 +716,81 @@ static void USER_NextChannel(void) // return; } - gNextChannel = chan; + g_next_channel = chan; } - if (gNextChannel != prev_chan) + if (g_next_channel != prev_chan) { - g_eeprom.user_channel[g_eeprom.rx_vfo] = gNextChannel; - g_eeprom.screen_channel[g_eeprom.rx_vfo] = gNextChannel; + g_eeprom.user_channel[g_eeprom.rx_vfo] = g_next_channel; + g_eeprom.screen_channel[g_eeprom.rx_vfo] = g_next_channel; RADIO_ConfigureChannel(g_eeprom.rx_vfo, VFO_CONFIGURE_RELOAD); RADIO_SetupRegisters(true); - gUpdateDisplay = true; + g_update_display = true; } #ifdef ENABLE_FASTER_CHANNEL_SCAN - gScanPauseDelayIn_10ms = 9; // 90ms .. <= ~60ms it misses signals (squelch response and/or PLL lock time) ? + g_scan_pause_delay_in_10ms = 9; // 90ms .. <= ~60ms it misses signals (squelch response and/or PLL lock time) ? #else - gScanPauseDelayIn_10ms = scan_pause_delay_in_3_10ms; + g_scan_pause_delay_in_10ms = scan_pause_delay_in_3_10ms; #endif bScanKeepFrequency = false; if (enabled) - if (++gCurrentScanList >= SCAN_NEXT_NUM) - gCurrentScanList = SCAN_NEXT_CHAN_SCANLIST1; // back round we go + if (++g_current_scan_list >= SCAN_NEXT_NUM) + g_current_scan_list = SCAN_NEXT_CHAN_SCANLIST1; // back round we go } #ifdef ENABLE_NOAA static void NOAA_IncreaseChannel(void) { - if (++gNoaaChannel > 9) - gNoaaChannel = 0; + if (++g_noaa_channel > 9) + g_noaa_channel = 0; } #endif static void DUALWATCH_Alternate(void) { #ifdef ENABLE_NOAA - if (gIsNoaaMode) + if (g_is_noaa_mode) { if (IS_NOT_NOAA_CHANNEL(g_eeprom.screen_channel[0]) || IS_NOT_NOAA_CHANNEL(g_eeprom.screen_channel[1])) g_eeprom.rx_vfo = (g_eeprom.rx_vfo + 1) & 1; else g_eeprom.rx_vfo = 0; - gRxVfo = &g_eeprom.VfoInfo[g_eeprom.rx_vfo]; + g_rx_vfo = &g_eeprom.vfo_info[g_eeprom.rx_vfo]; - if (g_eeprom.VfoInfo[0].channel_save >= NOAA_CHANNEL_FIRST) + if (g_eeprom.vfo_info[0].channel_save >= NOAA_CHANNEL_FIRST) NOAA_IncreaseChannel(); } else #endif { // toggle between VFO's g_eeprom.rx_vfo = (g_eeprom.rx_vfo + 1) & 1; - gRxVfo = &g_eeprom.VfoInfo[g_eeprom.rx_vfo]; + g_rx_vfo = &g_eeprom.vfo_info[g_eeprom.rx_vfo]; - if (!gDualWatchActive) + if (!g_dual_watch_active) { // let the user see DW is active - gDualWatchActive = true; - gUpdateStatus = true; + g_dual_watch_active = true; + g_update_status = true; } } RADIO_SetupRegisters(false); #ifdef ENABLE_NOAA - gDualWatchCountdown_10ms = gIsNoaaMode ? dual_watch_count_noaa_10ms : dual_watch_count_toggle_10ms; + g_dual_watch_count_down_10ms = g_is_noaa_mode ? dual_watch_count_noaa_10ms : dual_watch_count_toggle_10ms; #else - gDualWatchCountdown_10ms = dual_watch_count_toggle_10ms; + g_dual_watch_count_down_10ms = dual_watch_count_toggle_10ms; #endif } void APP_CheckRadioInterrupts(void) { - if (gScreenToDisplay == DISPLAY_SCANNER) + if (g_screen_to_display == DISPLAY_SCANNER) return; while (BK4819_ReadRegister(BK4819_REG_0C) & 1u) @@ -817,33 +817,33 @@ void APP_CheckRadioInterrupts(void) const char c = DTMF_GetCharacter(BK4819_GetDTMF_5TONE_Code()); if (c != 0xff) { - if (gCurrentFunction != FUNCTION_TRANSMIT) + if (g_current_function != FUNCTION_TRANSMIT) { - if (gSetting_live_DTMF_decoder) + if (g_setting_live_dtmf_decoder) { - size_t len = strlen(gDTMF_RX_live); - if (len >= (sizeof(gDTMF_RX_live) - 1)) + size_t len = strlen(g_dtmf_rx_live); + if (len >= (sizeof(g_dtmf_rx_live) - 1)) { // make room - memmove(&gDTMF_RX_live[0], &gDTMF_RX_live[1], sizeof(gDTMF_RX_live) - 1); + memmove(&g_dtmf_rx_live[0], &g_dtmf_rx_live[1], sizeof(g_dtmf_rx_live) - 1); len--; } - gDTMF_RX_live[len++] = c; - gDTMF_RX_live[len] = 0; - gDTMF_RX_live_timeout = DTMF_RX_live_timeout_500ms; // time till we delete it - gUpdateDisplay = true; + g_dtmf_rx_live[len++] = c; + g_dtmf_rx_live[len] = 0; + g_dtmf_rx_live_timeout = dtmf_rx_live_timeout_500ms; // time till we delete it + g_update_display = true; } - if (gRxVfo->DTMF_decoding_enable || gSetting_KILLED) + if (g_rx_vfo->dtmf_decoding_enable || g_setting_killed) { - if (gDTMF_RX_index >= (sizeof(gDTMF_RX) - 1)) + if (g_dtmf_rx_index >= (sizeof(g_dtmf_rx) - 1)) { // make room - memmove(&gDTMF_RX[0], &gDTMF_RX[1], sizeof(gDTMF_RX) - 1); - gDTMF_RX_index--; + memmove(&g_dtmf_rx[0], &g_dtmf_rx[1], sizeof(g_dtmf_rx) - 1); + g_dtmf_rx_index--; } - gDTMF_RX[gDTMF_RX_index++] = c; - gDTMF_RX[gDTMF_RX_index] = 0; - gDTMF_RX_timeout = DTMF_RX_timeout_500ms; // time till we delete it - gDTMF_RX_pending = true; + g_dtmf_rx[g_dtmf_rx_index++] = c; + g_dtmf_rx[g_dtmf_rx_index] = 0; + g_dtmf_rx_timeout = dtmf_rx_timeout_500ms; // time till we delete it + g_dtmf_rx_pending = true; DTMF_HandleRequest(); } @@ -852,7 +852,7 @@ void APP_CheckRadioInterrupts(void) } if (interrupt_status_bits & BK4819_REG_02_CxCSS_TAIL) - g_CxCSS_tailL_found = true; + g_CxCSS_tail_found = true; if (interrupt_status_bits & BK4819_REG_02_CDCSS_LOST) { @@ -877,20 +877,20 @@ void APP_CheckRadioInterrupts(void) if (g_eeprom.vox_switch) { - if (gCurrentFunction == FUNCTION_POWER_SAVE && !g_rx_idle_mode) + if (g_current_function == FUNCTION_POWER_SAVE && !g_rx_idle_mode) { - gPowerSave_10ms = power_save2_10ms; - gPowerSaveCountdownExpired = 0; + g_power_save_10ms = power_save2_10ms; + g_power_save_count_down_expired = 0; } - if (g_eeprom.dual_watch != DUAL_WATCH_OFF && (gScheduleDualWatch || gDualWatchCountdown_10ms < dual_watch_count_after_vox_10ms)) + if (g_eeprom.dual_watch != DUAL_WATCH_OFF && (g_schedule_dual_watch || g_dual_watch_count_down_10ms < dual_watch_count_after_vox_10ms)) { - gDualWatchCountdown_10ms = dual_watch_count_after_vox_10ms; - gScheduleDualWatch = false; + g_dual_watch_count_down_10ms = dual_watch_count_after_vox_10ms; + g_schedule_dual_watch = false; // let the user see DW is not active - gDualWatchActive = false; - gUpdateStatus = true; + g_dual_watch_active = false; + g_update_status = true; } } } @@ -904,25 +904,25 @@ void APP_CheckRadioInterrupts(void) if (interrupt_status_bits & BK4819_REG_02_SQUELCH_LOST) { - g_SquelchLost = true; + g_squelch_lost = true; BK4819_ToggleGpioOut(BK4819_GPIO0_PIN28_GREEN, true); } if (interrupt_status_bits & BK4819_REG_02_SQUELCH_FOUND) { - g_SquelchLost = false; + g_squelch_lost = false; BK4819_ToggleGpioOut(BK4819_GPIO0_PIN28_GREEN, false); } #ifdef ENABLE_AIRCOPY if (interrupt_status_bits & BK4819_REG_02_FSK_FIFO_ALMOST_FULL && - gScreenToDisplay == DISPLAY_AIRCOPY && - gAircopyState == AIRCOPY_TRANSFER && - gAirCopyIsSendMode == 0) + g_screen_to_display == DISPLAY_AIRCOPY && + g_aircopy_state == AIRCOPY_TRANSFER && + g_air_copy_is_send_mode == 0) { unsigned int i; for (i = 0; i < 4; i++) - g_FSK_Buffer[gFSKWriteIndex++] = BK4819_ReadRegister(BK4819_REG_5F); + g_fsk_buffer[g_fsk_wite_index++] = BK4819_ReadRegister(BK4819_REG_5F); AIRCOPY_StorePacket(); } #endif @@ -934,7 +934,7 @@ void APP_EndTransmission(void) RADIO_SendEndOfTransmission(); - if (gCurrentVfo->pTX->code_type != CODE_TYPE_OFF) + if (g_current_vfo->pTX->code_type != CODE_TYPE_OFF) { // CTCSS/DCS is enabled //if (g_eeprom.tail_note_elimination && g_eeprom.repeater_tail_tone_elimination > 0) @@ -958,10 +958,10 @@ void APP_EndTransmission(void) #ifdef ENABLE_VOX static void APP_HandleVox(void) { - if (gSetting_KILLED) + if (g_setting_killed) return; - if (gVoxResumeCountdown == 0) + if (g_vox_resume_count_down == 0) { if (g_vox_pause_count_down) return; @@ -973,29 +973,29 @@ void APP_EndTransmission(void) } #ifdef ENABLE_FMRADIO - if (gFmRadioMode) + if (g_fm_radio_mode) return; #endif - if (gCurrentFunction == FUNCTION_RECEIVE || gCurrentFunction == FUNCTION_MONITOR) + if (g_current_function == FUNCTION_RECEIVE || g_current_function == FUNCTION_MONITOR) return; - if (gScanStateDir != SCAN_OFF || gCssScanMode != CSS_SCAN_MODE_OFF) + if (g_scan_state_dir != SCAN_OFF || g_css_scan_mode != CSS_SCAN_MODE_OFF) return; - if (gVOX_NoiseDetected) + if (g_vox_noise_detected) { if (g_vox_lost) - gVoxStopCountdown_10ms = vox_stop_count_down_10ms; + g_vox_stop_count_down_10ms = vox_stop_count_down_10ms; else - if (gVoxStopCountdown_10ms == 0) - gVOX_NoiseDetected = false; + if (g_vox_stop_count_down_10ms == 0) + g_vox_noise_detected = false; - if (gCurrentFunction == FUNCTION_TRANSMIT && !gPttIsPressed && !gVOX_NoiseDetected) + if (g_current_function == FUNCTION_TRANSMIT && !g_ptt_is_pressed && !g_vox_noise_detected) { - if (gFlagEndTransmission) + if (g_flag_end_tx) { - //if (gCurrentFunction != FUNCTION_FOREGROUND) + //if (g_current_function != FUNCTION_FOREGROUND) FUNCTION_Select(FUNCTION_FOREGROUND); } else @@ -1004,32 +1004,32 @@ void APP_EndTransmission(void) if (g_eeprom.repeater_tail_tone_elimination == 0) { - //if (gCurrentFunction != FUNCTION_FOREGROUND) + //if (g_current_function != FUNCTION_FOREGROUND) FUNCTION_Select(FUNCTION_FOREGROUND); } else - gRTTECountdown = g_eeprom.repeater_tail_tone_elimination * 10; + g_rtte_count_down = g_eeprom.repeater_tail_tone_elimination * 10; } - gUpdateStatus = true; - gUpdateDisplay = true; - gFlagEndTransmission = false; + g_update_status = true; + g_update_display = true; + g_flag_end_tx = false; } return; } if (g_vox_lost) { - gVOX_NoiseDetected = true; + g_vox_noise_detected = true; - if (gCurrentFunction == FUNCTION_POWER_SAVE) + if (g_current_function == FUNCTION_POWER_SAVE) FUNCTION_Select(FUNCTION_FOREGROUND); - if (gCurrentFunction != FUNCTION_TRANSMIT && gSerialConfigCountDown_500ms == 0) + if (g_current_function != FUNCTION_TRANSMIT && g_serial_config_count_down_500ms == 0) { - gDTMF_ReplyState = DTMF_REPLY_NONE; + g_dtmf_reply_state = DTMF_REPLY_NONE; RADIO_PrepareTX(); - gUpdateDisplay = true; + g_update_display = true; } } } @@ -1045,126 +1045,126 @@ void APP_Update(void) } #endif - if (gCurrentFunction == FUNCTION_TRANSMIT && (gTxTimeoutReached || gSerialConfigCountDown_500ms > 0)) + if (g_current_function == FUNCTION_TRANSMIT && (g_tx_timeout_reached || g_serial_config_count_down_500ms > 0)) { // transmitter timed out or must de-key - gTxTimeoutReached = false; + g_tx_timeout_reached = false; - gFlagEndTransmission = true; + g_flag_end_tx = true; APP_EndTransmission(); AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP); - RADIO_SetVfoState(VFO_STATE_TIMEOUT); + RADIO_Setg_vfo_state(VFO_STATE_TIMEOUT); GUI_DisplayScreen(); } - if (gReducedService) + if (g_reduced_service) return; - if (gCurrentFunction != FUNCTION_TRANSMIT) + if (g_current_function != FUNCTION_TRANSMIT) APP_HandleFunction(); #ifdef ENABLE_FMRADIO -// if (gFmRadioCountdown_500ms > 0) - if (gFmRadioMode && gFmRadioCountdown_500ms > 0) // 1of11 +// if (g_fm_radio_count_down_500ms > 0) + if (g_fm_radio_mode && g_fm_radio_count_down_500ms > 0) // 1of11 return; #endif #ifdef ENABLE_VOICE - if (gScreenToDisplay != DISPLAY_SCANNER && gScanStateDir != SCAN_OFF && gScheduleScanListen && !gPttIsPressed && g_voice_write_index == 0) + if (g_screen_to_display != DISPLAY_SCANNER && g_scan_state_dir != SCAN_OFF && g_schedule_scan_listen && !g_ptt_is_pressed && g_voice_write_index == 0) #else - if (gScreenToDisplay != DISPLAY_SCANNER && gScanStateDir != SCAN_OFF && gScheduleScanListen && !gPttIsPressed) + if (g_screen_to_display != DISPLAY_SCANNER && g_scan_state_dir != SCAN_OFF && g_schedule_scan_listen && !g_ptt_is_pressed) #endif { // scanning - if (IS_FREQ_CHANNEL(gNextChannel)) + if (IS_FREQ_CHANNEL(g_next_channel)) { - if (gCurrentFunction == FUNCTION_INCOMING) - APP_StartListening(gMonitor ? FUNCTION_MONITOR : FUNCTION_RECEIVE, true); + if (g_current_function == FUNCTION_INCOMING) + APP_StartListening(g_monitor_enabled ? FUNCTION_MONITOR : FUNCTION_RECEIVE, true); else FREQ_NextChannel(); // switch to next frequency } else { - if (gCurrentcode_type == CODE_TYPE_OFF && gCurrentFunction == FUNCTION_INCOMING) - APP_StartListening(gMonitor ? FUNCTION_MONITOR : FUNCTION_RECEIVE, true); + if (g_current_code_type == CODE_TYPE_OFF && g_current_function == FUNCTION_INCOMING) + APP_StartListening(g_monitor_enabled ? FUNCTION_MONITOR : FUNCTION_RECEIVE, true); else USER_NextChannel(); // switch to next channel } gScanPauseMode = false; - gRxReceptionMode = RX_MODE_NONE; - gScheduleScanListen = false; + g_rx_reception_mode = RX_MODE_NONE; + g_schedule_scan_listen = false; } #ifdef ENABLE_VOICE - if (gCssScanMode == CSS_SCAN_MODE_SCANNING && gScheduleScanListen && g_voice_write_index == 0) + if (g_css_scan_mode == CSS_SCAN_MODE_SCANNING && g_schedule_scan_listen && g_voice_write_index == 0) #else - if (gCssScanMode == CSS_SCAN_MODE_SCANNING && gScheduleScanListen) + if (g_css_scan_mode == CSS_SCAN_MODE_SCANNING && g_schedule_scan_listen) #endif { MENU_SelectNextCode(); - gScheduleScanListen = false; + g_schedule_scan_listen = false; } #ifdef ENABLE_NOAA #ifdef ENABLE_VOICE - if (g_eeprom.dual_watch == DUAL_WATCH_OFF && gIsNoaaMode && gScheduleNOAA && g_voice_write_index == 0) + if (g_eeprom.dual_watch == DUAL_WATCH_OFF && g_is_noaa_mode && g_schedule_noaa && g_voice_write_index == 0) #else - if (g_eeprom.dual_watch == DUAL_WATCH_OFF && gIsNoaaMode && gScheduleNOAA) + if (g_eeprom.dual_watch == DUAL_WATCH_OFF && g_is_noaa_mode && g_schedule_noaa) #endif { NOAA_IncreaseChannel(); RADIO_SetupRegisters(false); - gNOAA_Countdown_10ms = 7; // 70ms - gScheduleNOAA = false; + g_noaa_count_down_10ms = 7; // 70ms + g_schedule_noaa = false; } #endif // toggle between the VFO's if dual watch is enabled - if (gScreenToDisplay != DISPLAY_SCANNER && g_eeprom.dual_watch != DUAL_WATCH_OFF) + if (g_screen_to_display != DISPLAY_SCANNER && g_eeprom.dual_watch != DUAL_WATCH_OFF) { #ifdef ENABLE_VOICE - if (gScheduleDualWatch && g_voice_write_index == 0) + if (g_schedule_dual_watch && g_voice_write_index == 0) #else - if (gScheduleDualWatch) + if (g_schedule_dual_watch) #endif { - if (gScanStateDir == SCAN_OFF && gCssScanMode == CSS_SCAN_MODE_OFF) + if (g_scan_state_dir == SCAN_OFF && g_css_scan_mode == CSS_SCAN_MODE_OFF) { - if (!gPttIsPressed && + if (!g_ptt_is_pressed && #ifdef ENABLE_FMRADIO - !gFmRadioMode && + !g_fm_radio_mode && #endif - gDTMF_CallState == DTMF_CALL_STATE_NONE && - gCurrentFunction != FUNCTION_POWER_SAVE) + g_dtmf_call_state == DTMF_CALL_STATE_NONE && + g_current_function != FUNCTION_POWER_SAVE) { DUALWATCH_Alternate(); // toggle between the two VFO's - if (gRxVfoIsActive && gScreenToDisplay == DISPLAY_MAIN) + if (g_rx_vfo_is_active && g_screen_to_display == DISPLAY_MAIN) GUI_SelectNextDisplay(DISPLAY_MAIN); - gRxVfoIsActive = false; + g_rx_vfo_is_active = false; gScanPauseMode = false; - gRxReceptionMode = RX_MODE_NONE; - gScheduleDualWatch = false; + g_rx_reception_mode = RX_MODE_NONE; + g_schedule_dual_watch = false; } } } } #ifdef ENABLE_FMRADIO - if (gScheduleFM && - gFM_ScanState != FM_SCAN_OFF && - gCurrentFunction != FUNCTION_MONITOR && - gCurrentFunction != FUNCTION_RECEIVE && - gCurrentFunction != FUNCTION_TRANSMIT) + if (g_schedule_fm && + g_fm_scan_state != FM_SCAN_OFF && + g_current_function != FUNCTION_MONITOR && + g_current_function != FUNCTION_RECEIVE && + g_current_function != FUNCTION_TRANSMIT) { // switch to FM radio mode FM_Play(); - gScheduleFM = false; + g_schedule_fm = false; } #endif @@ -1173,62 +1173,62 @@ void APP_Update(void) APP_HandleVox(); #endif - if (gSchedulePowerSave) + if (g_schedule_power_save) { #ifdef ENABLE_NOAA if ( #ifdef ENABLE_FMRADIO - gFmRadioMode || + g_fm_radio_mode || #endif - gPttIsPressed || - gKeyBeingHeld || + g_ptt_is_pressed || + g_key_being_held || g_eeprom.battery_save == 0 || - gScanStateDir != SCAN_OFF || - gCssScanMode != CSS_SCAN_MODE_OFF || - gScreenToDisplay != DISPLAY_MAIN || - gDTMF_CallState != DTMF_CALL_STATE_NONE) + g_scan_state_dir != SCAN_OFF || + g_css_scan_mode != CSS_SCAN_MODE_OFF || + g_screen_to_display != DISPLAY_MAIN || + g_dtmf_call_state != DTMF_CALL_STATE_NONE) { - gBatterySaveCountdown_10ms = battery_save_count_10ms; + g_battery_save_count_down_10ms = battery_save_count_10ms; } else - if ((IS_NOT_NOAA_CHANNEL(g_eeprom.screen_channel[0]) && IS_NOT_NOAA_CHANNEL(g_eeprom.screen_channel[1])) || !gIsNoaaMode) + if ((IS_NOT_NOAA_CHANNEL(g_eeprom.screen_channel[0]) && IS_NOT_NOAA_CHANNEL(g_eeprom.screen_channel[1])) || !g_is_noaa_mode) { - //if (gCurrentFunction != FUNCTION_POWER_SAVE) + //if (g_current_function != FUNCTION_POWER_SAVE) FUNCTION_Select(FUNCTION_POWER_SAVE); } else { - gBatterySaveCountdown_10ms = battery_save_count_10ms; + g_battery_save_count_down_10ms = battery_save_count_10ms; } #else if ( #ifdef ENABLE_FMRADIO - gFmRadioMode || + g_fm_radio_mode || #endif - gPttIsPressed || - gKeyBeingHeld || + g_ptt_is_pressed || + g_key_being_held || g_eeprom.battery_save == 0 || - gScanStateDir != SCAN_OFF || - gCssScanMode != CSS_SCAN_MODE_OFF || - gScreenToDisplay != DISPLAY_MAIN || - gDTMF_CallState != DTMF_CALL_STATE_NONE) + g_scan_state_dir != SCAN_OFF || + g_css_scan_mode != CSS_SCAN_MODE_OFF || + g_screen_to_display != DISPLAY_MAIN || + g_dtmf_call_state != DTMF_CALL_STATE_NONE) { - gBatterySaveCountdown_10ms = battery_save_count_10ms; + g_battery_save_count_down_10ms = battery_save_count_10ms; } else { - //if (gCurrentFunction != FUNCTION_POWER_SAVE) + //if (g_current_function != FUNCTION_POWER_SAVE) FUNCTION_Select(FUNCTION_POWER_SAVE); } - gSchedulePowerSave = false; + g_schedule_power_save = false; #endif } #ifdef ENABLE_VOICE - if (gPowerSaveCountdownExpired && gCurrentFunction == FUNCTION_POWER_SAVE && g_voice_write_index == 0) + if (g_power_save_count_down_expired && g_current_function == FUNCTION_POWER_SAVE && g_voice_write_index == 0) #else - if (gPowerSaveCountdownExpired && gCurrentFunction == FUNCTION_POWER_SAVE) + if (g_power_save_count_down_expired && g_current_function == FUNCTION_POWER_SAVE) #endif { // wake up, enable RX then go back to sleep @@ -1242,28 +1242,28 @@ void APP_Update(void) #endif if (g_eeprom.dual_watch != DUAL_WATCH_OFF && - gScanStateDir == SCAN_OFF && - gCssScanMode == CSS_SCAN_MODE_OFF) + g_scan_state_dir == SCAN_OFF && + g_css_scan_mode == CSS_SCAN_MODE_OFF) { // dual watch mode, toggle between the two VFO's DUALWATCH_Alternate(); - gUpdateRSSI = false; + g_update_rssi = false; } FUNCTION_Init(); - gPowerSave_10ms = power_save1_10ms; // come back here in a bit + g_power_save_10ms = power_save1_10ms; // come back here in a bit g_rx_idle_mode = false; // RX is awake } else - if (g_eeprom.dual_watch == DUAL_WATCH_OFF || gScanStateDir != SCAN_OFF || gCssScanMode != CSS_SCAN_MODE_OFF || gUpdateRSSI) + if (g_eeprom.dual_watch == DUAL_WATCH_OFF || g_scan_state_dir != SCAN_OFF || g_css_scan_mode != CSS_SCAN_MODE_OFF || g_update_rssi) { // dual watch mode, go back to sleep updateRSSI(g_eeprom.rx_vfo); // go back to sleep - gPowerSave_10ms = g_eeprom.battery_save * 10; + g_power_save_10ms = g_eeprom.battery_save * 10; g_rx_idle_mode = true; BK4819_DisableVox(); @@ -1278,11 +1278,11 @@ void APP_Update(void) // toggle between the two VFO's DUALWATCH_Alternate(); - gUpdateRSSI = true; - gPowerSave_10ms = power_save1_10ms; + g_update_rssi = true; + g_power_save_10ms = power_save1_10ms; } - gPowerSaveCountdownExpired = false; + g_power_save_count_down_expired = false; } } @@ -1292,41 +1292,41 @@ void APP_CheckKeys(void) key_code_t Key; #ifdef ENABLE_AIRCOPY - if (gSetting_KILLED || (gScreenToDisplay == DISPLAY_AIRCOPY && gAircopyState != AIRCOPY_READY)) + if (g_setting_killed || (g_screen_to_display == DISPLAY_AIRCOPY && g_aircopy_state != AIRCOPY_READY)) return; #else - if (gSetting_KILLED) + if (g_setting_killed) return; #endif - if (gPttIsPressed) + if (g_ptt_is_pressed) { - if (GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT) || gSerialConfigCountDown_500ms > 0) + if (GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT) || g_serial_config_count_down_500ms > 0) { // PTT released or serial comms config in progress - if (++gPttDebounceCounter >= 3 || gSerialConfigCountDown_500ms > 0) // 30ms + if (++g_ptt_debounce_counter >= 3 || g_serial_config_count_down_500ms > 0) // 30ms { // stop transmitting APP_ProcessKey(KEY_PTT, false, false); - gPttIsPressed = false; + g_ptt_is_pressed = false; if (g_key_reading_1 != KEY_INVALID) - gPttWasReleased = true; + g_ptt_was_released = true; } } else - gPttDebounceCounter = 0; + g_ptt_debounce_counter = 0; } else - if (!GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT) && gSerialConfigCountDown_500ms == 0) + if (!GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT) && g_serial_config_count_down_500ms == 0) { // PTT pressed - if (++gPttDebounceCounter >= 3) // 30ms + if (++g_ptt_debounce_counter >= 3) // 30ms { // start transmitting - boot_counter_10ms = 0; // cancel the boot-up screen - gPttDebounceCounter = 0; - gPttIsPressed = true; + g_boot_counter_10ms = 0; // cancel the boot-up screen + g_ptt_debounce_counter = 0; + g_ptt_is_pressed = true; APP_ProcessKey(KEY_PTT, true, false); } } else - gPttDebounceCounter = 0; + g_ptt_debounce_counter = 0; // ***************** @@ -1338,17 +1338,17 @@ void APP_CheckKeys(void) // g_key_reading_0 = KEY_INVALID; // g_key_reading_1 = KEY_INVALID; // g_debounce_counter = 0; -// gKeyBeingHeld = false; +// g_key_being_held = false; // return; } - boot_counter_10ms = 0; // cancel boot screen/beeps + g_boot_counter_10ms = 0; // cancel boot screen/beeps if (g_key_reading_0 != Key) { // new key pressed if (g_key_reading_0 != KEY_INVALID && Key != KEY_INVALID) - APP_ProcessKey(g_key_reading_1, false, gKeyBeingHeld); // key pressed without releasing previous key + APP_ProcessKey(g_key_reading_1, false, g_key_being_held); // key pressed without releasing previous key g_key_reading_0 = Key; g_debounce_counter = 0; @@ -1362,7 +1362,7 @@ void APP_CheckKeys(void) { if (g_key_reading_1 != KEY_INVALID) { - APP_ProcessKey(g_key_reading_1, false, gKeyBeingHeld); + APP_ProcessKey(g_key_reading_1, false, g_key_being_held); g_key_reading_1 = KEY_INVALID; } } @@ -1372,7 +1372,7 @@ void APP_CheckKeys(void) APP_ProcessKey(Key, true, false); } - gKeyBeingHeld = false; + g_key_being_held = false; return; } @@ -1385,7 +1385,7 @@ void APP_CheckKeys(void) { // initial key repeat delay after pressed if (Key != KEY_PTT) { - gKeyBeingHeld = true; + g_key_being_held = true; APP_ProcessKey(Key, true, true); } } @@ -1393,7 +1393,7 @@ void APP_CheckKeys(void) { // key repeat if (Key == KEY_UP || Key == KEY_DOWN) { - gKeyBeingHeld = true; + g_key_being_held = true; if ((g_debounce_counter % key_repeat_10ms) == 0) APP_ProcessKey(Key, true, true); } @@ -1407,17 +1407,17 @@ void APP_CheckKeys(void) void APP_TimeSlice10ms(void) { - gFlashLightBlinkCounter++; + g_flash_light_bBlink_counter++; #ifdef ENABLE_BOOT_BEEPS - if (boot_counter_10ms > 0) - if ((boot_counter_10ms % 25) == 0) + if (g_boot_counter_10ms > 0) + if ((g_boot_counter_10ms % 25) == 0) AUDIO_PlayBeep(BEEP_880HZ_40MS_OPTIONAL); #endif #ifdef ENABLE_AM_FIX -// if (g_eeprom.VfoInfo[g_eeprom.rx_vfo].am_mode && gSetting_AM_fix) - if (gRxVfo->am_mode && gSetting_AM_fix) +// if (g_eeprom.vfo_info[g_eeprom.rx_vfo].am_mode && g_setting_am_fix) + if (g_rx_vfo->am_mode && g_setting_am_fix) AM_fix_10ms(g_eeprom.rx_vfo); #endif @@ -1428,73 +1428,73 @@ void APP_TimeSlice10ms(void) __enable_irq(); } - if (gReducedService) + if (g_reduced_service) return; - if (gCurrentFunction != FUNCTION_POWER_SAVE || !g_rx_idle_mode) + if (g_current_function != FUNCTION_POWER_SAVE || !g_rx_idle_mode) APP_CheckRadioInterrupts(); - if (gCurrentFunction == FUNCTION_TRANSMIT) + if (g_current_function == FUNCTION_TRANSMIT) { // transmitting #ifdef ENABLE_AUDIO_BAR - if (gSetting_mic_bar && (gFlashLightBlinkCounter % (150 / 10)) == 0) // once every 150ms + if (g_setting_mic_bar && (g_flash_light_bBlink_counter % (150 / 10)) == 0) // once every 150ms UI_DisplayAudioBar(); #endif } - if (gUpdateDisplay) + if (g_update_display) { - gUpdateDisplay = false; + g_update_display = false; GUI_DisplayScreen(); } - if (gUpdateStatus) + if (g_update_status) UI_DisplayStatus(false); // Skipping authentic device checks #ifdef ENABLE_FMRADIO - if (gFmRadioMode && gFmRadioCountdown_500ms > 0) // 1of11 + if (g_fm_radio_mode && g_fm_radio_count_down_500ms > 0) // 1of11 return; #endif - if (gFlashLightState == FLASHLIGHT_BLINK && (gFlashLightBlinkCounter & 15u) == 0) + if (g_flash_light_state == FLASHLIGHT_BLINK && (g_flash_light_bBlink_counter & 15u) == 0) GPIO_FlipBit(&GPIOC->DATA, GPIOC_PIN_FLASHLIGHT); #ifdef ENABLE_VOX - if (gVoxResumeCountdown > 0) - gVoxResumeCountdown--; + if (g_vox_resume_count_down > 0) + g_vox_resume_count_down--; if (g_vox_pause_count_down > 0) g_vox_pause_count_down--; #endif - if (gCurrentFunction == FUNCTION_TRANSMIT) + if (g_current_function == FUNCTION_TRANSMIT) { #ifdef ENABLE_ALARM - if (gAlarmState == ALARM_STATE_TXALARM || gAlarmState == ALARM_STATE_ALARM) + if (g_alarm_state == ALARM_STATE_TXALARM || g_alarm_state == ALARM_STATE_ALARM) { uint16_t Tone; - gAlarmRunningCounter++; - gAlarmToneCounter++; + g_alarm_running_counter++; + g_alarm_tone_counter++; - Tone = 500 + (gAlarmToneCounter * 25); + Tone = 500 + (g_alarm_tone_counter * 25); if (Tone > 1500) { Tone = 500; - gAlarmToneCounter = 0; + g_alarm_tone_counter = 0; } BK4819_SetScrambleFrequencyControlWord(Tone); - if (g_eeprom.alarm_mode == ALARM_MODE_TONE && gAlarmRunningCounter == 512) + if (g_eeprom.alarm_mode == ALARM_MODE_TONE && g_alarm_running_counter == 512) { - gAlarmRunningCounter = 0; + g_alarm_running_counter = 0; - if (gAlarmState == ALARM_STATE_TXALARM) + if (g_alarm_state == ALARM_STATE_TXALARM) { - gAlarmState = ALARM_STATE_ALARM; + g_alarm_state = ALARM_STATE_ALARM; RADIO_EnableCxCSS(); BK4819_SetupPowerAmplifier(0, 0); @@ -1506,7 +1506,7 @@ void APP_TimeSlice10ms(void) } else { - gAlarmState = ALARM_STATE_TXALARM; + g_alarm_state = ALARM_STATE_TXALARM; GUI_DisplayScreen(); @@ -1516,31 +1516,31 @@ void APP_TimeSlice10ms(void) SYSTEM_DelayMs(2); GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); - gEnableSpeaker = true; - gAlarmToneCounter = 0; + g_enable_speaker = true; + g_alarm_tone_counter = 0; } } } #endif // repeater tail tone elimination - if (gRTTECountdown > 0) + if (g_rtte_count_down > 0) { - if (--gRTTECountdown == 0) + if (--g_rtte_count_down == 0) { - //if (gCurrentFunction != FUNCTION_FOREGROUND) + //if (g_current_function != FUNCTION_FOREGROUND) FUNCTION_Select(FUNCTION_FOREGROUND); - gUpdateStatus = true; - gUpdateDisplay = true; + g_update_status = true; + g_update_display = true; } } } #ifdef ENABLE_FMRADIO - if (gFmRadioMode && gFM_RestoreCountdown_10ms > 0) + if (g_fm_radio_mode && g_fm_restore_count_down_10ms > 0) { - if (--gFM_RestoreCountdown_10ms == 0) + if (--g_fm_restore_count_down_10ms == 0) { // switch back to FM radio mode FM_Start(); GUI_SelectNextDisplay(DISPLAY_FM); @@ -1548,16 +1548,16 @@ void APP_TimeSlice10ms(void) } #endif - if (gScreenToDisplay == DISPLAY_SCANNER) + if (g_screen_to_display == DISPLAY_SCANNER) { uint32_t Result; int32_t Delta; - BK4819_CssScanResult_t ScanResult; + BK4819_CSS_scan_result_t ScanResult; uint16_t CtcssFreq; - if (gScanDelay_10ms > 0) + if (g_scan_delay_10ms > 0) { - if (--gScanDelay_10ms > 0) + if (--g_scan_delay_10ms > 0) { APP_CheckKeys(); return; @@ -1587,7 +1587,7 @@ void APP_TimeSlice10ms(void) gScanFrequency = Result; #else { // round to nearest step multiple - const uint32_t step = StepFrequencyTable[gStepSetting]; + const uint32_t step = STEP_FREQ_TABLE[g_step_setting]; gScanFrequency = ((Result + (step / 2)) / step) * step; } #endif @@ -1609,10 +1609,10 @@ void APP_TimeSlice10ms(void) gScanCssState = SCAN_CSS_STATE_SCANNING; GUI_SelectNextDisplay(DISPLAY_SCANNER); - gUpdateStatus = true; + g_update_status = true; } - gScanDelay_10ms = scan_freq_css_delay_10ms; + g_scan_delay_10ms = scan_freq_css_delay_10ms; break; case SCAN_CSS_STATE_SCANNING: @@ -1631,7 +1631,7 @@ void APP_TimeSlice10ms(void) gScanCssResultType = CODE_TYPE_DIGITAL; gScanCssState = SCAN_CSS_STATE_FOUND; gScanUseCssResult = true; - gUpdateStatus = true; + g_update_status = true; } } else @@ -1646,7 +1646,7 @@ void APP_TimeSlice10ms(void) { gScanCssState = SCAN_CSS_STATE_FOUND; gScanUseCssResult = true; - gUpdateStatus = true; + g_update_status = true; } } else @@ -1660,7 +1660,7 @@ void APP_TimeSlice10ms(void) if (gScanCssState == SCAN_CSS_STATE_OFF || gScanCssState == SCAN_CSS_STATE_SCANNING) { // re-start scan BK4819_SetScanFrequency(gScanFrequency); - gScanDelay_10ms = scan_freq_css_delay_10ms; + g_scan_delay_10ms = scan_freq_css_delay_10ms; break; } @@ -1673,11 +1673,11 @@ void APP_TimeSlice10ms(void) } #ifdef ENABLE_AIRCOPY - if (gScreenToDisplay == DISPLAY_AIRCOPY && gAircopyState == AIRCOPY_TRANSFER && gAirCopyIsSendMode == 1) + if (g_screen_to_display == DISPLAY_AIRCOPY && g_aircopy_state == AIRCOPY_TRANSFER && g_air_copy_is_send_mode == 1) { - if (gAircopySendCountdown > 0) + if (g_air_copy_send_count_down > 0) { - if (--gAircopySendCountdown == 0) + if (--g_air_copy_send_count_down == 0) { AIRCOPY_SendMessage(); GUI_DisplayScreen(); @@ -1691,22 +1691,22 @@ void APP_TimeSlice10ms(void) void cancelUserInputModes(void) { - if (gDTMF_InputMode || gDTMF_InputBox_Index > 0) + if (g_dtmf_input_mode || g_dtmf_input_box_index > 0) { DTMF_clear_input_box(); - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; - gRequestDisplayScreen = DISPLAY_MAIN; - gUpdateDisplay = true; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_request_display_screen = DISPLAY_MAIN; + g_update_display = true; } - if (g_was_f_key_pressed || gKeyInputCountdown > 0 || gInputBoxIndex > 0) + if (g_f_key_was_pressed || g_key_input_count_down > 0 || g_input_box_index > 0) { - g_was_f_key_pressed = false; - gInputBoxIndex = 0; - gKeyInputCountdown = 0; - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; - gUpdateStatus = true; - gUpdateDisplay = true; + g_f_key_was_pressed = false; + g_input_box_index = 0; + g_key_input_count_down = 0; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_update_status = true; + g_update_display = true; } } @@ -1717,76 +1717,76 @@ void APP_TimeSlice500ms(void) // Skipped authentic device check - if (gKeypadLocked > 0) - if (--gKeypadLocked == 0) - gUpdateDisplay = true; + if (g_keypad_locked > 0) + if (--g_keypad_locked == 0) + g_update_display = true; - if (gKeyInputCountdown > 0) + if (g_key_input_count_down > 0) { - if (--gKeyInputCountdown == 0) + if (--g_key_input_count_down == 0) { cancelUserInputModes(); - if (gBeepToPlay != BEEP_NONE) + if (g_beep_to_play != BEEP_NONE) { - AUDIO_PlayBeep(gBeepToPlay); - gBeepToPlay = BEEP_NONE; + AUDIO_PlayBeep(g_beep_to_play); + g_beep_to_play = BEEP_NONE; } } } - if (gDTMF_RX_live_timeout > 0) + if (g_dtmf_rx_live_timeout > 0) { #ifdef ENABLE_RSSI_BAR if (center_line == CENTER_LINE_DTMF_DEC || center_line == CENTER_LINE_NONE) // wait till the center line is free for us to use before timing out #endif { - if (--gDTMF_RX_live_timeout == 0) + if (--g_dtmf_rx_live_timeout == 0) { - if (gDTMF_RX_live[0] != 0) + if (g_dtmf_rx_live[0] != 0) { - memset(gDTMF_RX_live, 0, sizeof(gDTMF_RX_live)); - gUpdateDisplay = true; + memset(g_dtmf_rx_live, 0, sizeof(g_dtmf_rx_live)); + g_update_display = true; } } } } - if (gMenuCountdown > 0) - if (--gMenuCountdown == 0) - exit_menu = (gScreenToDisplay == DISPLAY_MENU); // exit menu mode + if (g_menu_count_down > 0) + if (--g_menu_count_down == 0) + exit_menu = (g_screen_to_display == DISPLAY_MENU); // exit menu mode - if (gDTMF_RX_timeout > 0) - if (--gDTMF_RX_timeout == 0) + if (g_dtmf_rx_timeout > 0) + if (--g_dtmf_rx_timeout == 0) DTMF_clear_RX(); // Skipped authentic device check #ifdef ENABLE_FMRADIO - if (gFmRadioCountdown_500ms > 0) + if (g_fm_radio_count_down_500ms > 0) { - gFmRadioCountdown_500ms--; - if (gFmRadioMode) // 1of11 + g_fm_radio_count_down_500ms--; + if (g_fm_radio_mode) // 1of11 return; } #endif - if (gBacklightCountdown > 0 && !gAskToSave && gCssScanMode == CSS_SCAN_MODE_OFF) - if (gScreenToDisplay != DISPLAY_MENU || gMenuCursor != MENU_ABR) // don't turn off backlight if user is in backlight menu option - if (--gBacklightCountdown == 0) - if (g_eeprom.backlight < (ARRAY_SIZE(gSubMenu_backlight) - 1)) + if (g_backlight_count_down > 0 && !g_ask_to_save && g_css_scan_mode == CSS_SCAN_MODE_OFF) + 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_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 - if (gSerialConfigCountDown_500ms > 0) + if (g_serial_config_count_down_500ms > 0) { } - if (gReducedService) + if (g_reduced_service) { - BOARD_ADC_GetBatteryInfo(&gBatteryCurrentVoltage, &gBatteryCurrent); + BOARD_ADC_GetBatteryInfo(&g_battery_current_voltage, &g_battery_current); - if (gBatteryCurrent > 500 || gBatteryCalibration[3] < gBatteryCurrentVoltage) + if (g_battery_current > 500 || g_battery_calibration[3] < g_battery_current_voltage) { #ifdef ENABLE_OVERLAY overlay_FLASH_RebootToBootloader(); @@ -1798,62 +1798,62 @@ void APP_TimeSlice500ms(void) return; } - gBatteryCheckCounter++; + g_battery_check_counter++; // Skipped authentic device check - if ((gBatteryCheckCounter & 1) == 0) + if ((g_battery_check_counter & 1) == 0) { - BOARD_ADC_GetBatteryInfo(&gBatteryVoltages[gBatteryVoltageIndex++], &gBatteryCurrent); - if (gBatteryVoltageIndex > 3) - gBatteryVoltageIndex = 0; + BOARD_ADC_GetBatteryInfo(&g_battery_voltages[g_battery_voltage_index++], &g_battery_current); + if (g_battery_voltage_index > 3) + g_battery_voltage_index = 0; BATTERY_GetReadings(true); } // regular display updates (once every 2 sec) - if need be - if ((gBatteryCheckCounter & 3) == 0) + if ((g_battery_check_counter & 3) == 0) { - if (gChargingWithTypeC || gSetting_battery_text > 0) - gUpdateStatus = true; + if (g_charging_with_type_c || g_setting_battery_text > 0) + g_update_status = true; #ifdef ENABLE_SHOW_CHARGE_LEVEL - if (gChargingWithTypeC) - gUpdateDisplay = true; + if (g_charging_with_type_c) + g_update_display = true; #endif } #ifdef ENABLE_FMRADIO - if ((gFM_ScanState == FM_SCAN_OFF || gAskToSave) && gCssScanMode == CSS_SCAN_MODE_OFF) + if ((g_fm_scan_state == FM_SCAN_OFF || g_ask_to_save) && g_css_scan_mode == CSS_SCAN_MODE_OFF) #else - if (gCssScanMode == CSS_SCAN_MODE_OFF) + if (g_css_scan_mode == CSS_SCAN_MODE_OFF) #endif { #ifdef ENABLE_AIRCOPY - if (gScanStateDir == SCAN_OFF && gScreenToDisplay != DISPLAY_AIRCOPY && (gScreenToDisplay != DISPLAY_SCANNER || gScanCssState >= SCAN_CSS_STATE_FOUND)) + if (g_scan_state_dir == SCAN_OFF && g_screen_to_display != DISPLAY_AIRCOPY && (g_screen_to_display != DISPLAY_SCANNER || gScanCssState >= SCAN_CSS_STATE_FOUND)) #else - if (gScanStateDir == SCAN_OFF && (gScreenToDisplay != DISPLAY_SCANNER || gScanCssState >= SCAN_CSS_STATE_FOUND)) + if (g_scan_state_dir == SCAN_OFF && (g_screen_to_display != DISPLAY_SCANNER || gScanCssState >= SCAN_CSS_STATE_FOUND)) #endif { - if (g_eeprom.auto_keypad_lock && gKeyLockCountdown > 0 && !gDTMF_InputMode) + if (g_eeprom.auto_keypad_lock && g_key_lock_count_down > 0 && !g_dtmf_input_mode) { - if (--gKeyLockCountdown == 0) + if (--g_key_lock_count_down == 0) g_eeprom.key_lock = true; // lock the keyboard - gUpdateStatus = true; // lock symbol needs showing + g_update_status = true; // lock symbol needs showing } if (exit_menu) { - gMenuCountdown = 0; + g_menu_count_down = 0; if (g_eeprom.backlight == 0) { - gBacklightCountdown = 0; + g_backlight_count_down = 0; GPIO_ClearBit(&GPIOB->DATA, GPIOB_PIN_BACKLIGHT); // turn the backlight OFF } - if (gInputBoxIndex > 0 || gDTMF_InputMode) + if (g_input_box_index > 0 || g_dtmf_input_mode) AUDIO_PlayBeep(BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL); /* - if (gScreenToDisplay == DISPLAY_SCANNER) + if (g_screen_to_display == DISPLAY_SCANNER) { BK4819_StopScan(); @@ -1865,23 +1865,23 @@ void APP_TimeSlice500ms(void) */ DTMF_clear_input_box(); - g_was_f_key_pressed = false; - gInputBoxIndex = 0; + g_f_key_was_pressed = false; + g_input_box_index = 0; - gAskToSave = false; - gAskToDelete = false; + g_ask_to_save = false; + g_ask_to_delete = false; - gUpdateStatus = true; - gUpdateDisplay = true; + g_update_status = true; + g_update_display = true; { - GUI_DisplayType_t disp = DISPLAY_INVALID; + gui_display_type_t disp = DISPLAY_INVALID; #ifdef ENABLE_FMRADIO - if (gFmRadioMode && - gCurrentFunction != FUNCTION_RECEIVE && - gCurrentFunction != FUNCTION_MONITOR && - gCurrentFunction != FUNCTION_TRANSMIT) + if (g_fm_radio_mode && + g_current_function != FUNCTION_RECEIVE && + g_current_function != FUNCTION_MONITOR && + g_current_function != FUNCTION_TRANSMIT) { disp = DISPLAY_FM; } @@ -1890,7 +1890,7 @@ void APP_TimeSlice500ms(void) if (disp == DISPLAY_INVALID) { #ifndef ENABLE_CODE_SCAN_TIMEOUT - if (gScreenToDisplay != DISPLAY_SCANNER) + if (g_screen_to_display != DISPLAY_SCANNER) #endif disp = DISPLAY_MAIN; } @@ -1902,20 +1902,20 @@ void APP_TimeSlice500ms(void) } } - if (gCurrentFunction != FUNCTION_POWER_SAVE && gCurrentFunction != FUNCTION_TRANSMIT) + if (g_current_function != FUNCTION_POWER_SAVE && g_current_function != FUNCTION_TRANSMIT) updateRSSI(g_eeprom.rx_vfo); #ifdef ENABLE_FMRADIO - if (!gPttIsPressed && gFM_ResumeCountdown_500ms > 0) + if (!g_ptt_is_pressed && g_fm_resume_count_down_500ms > 0) { - if (--gFM_ResumeCountdown_500ms == 0) + if (--g_fm_resume_count_down_500ms == 0) { - RADIO_SetVfoState(VFO_STATE_NORMAL); + RADIO_Setg_vfo_state(VFO_STATE_NORMAL); - if (gCurrentFunction != FUNCTION_RECEIVE && - gCurrentFunction != FUNCTION_TRANSMIT && - gCurrentFunction != FUNCTION_MONITOR && - gFmRadioMode) + if (g_current_function != FUNCTION_RECEIVE && + g_current_function != FUNCTION_TRANSMIT && + g_current_function != FUNCTION_MONITOR && + g_fm_radio_mode) { // switch back to FM radio mode FM_Start(); GUI_SelectNextDisplay(DISPLAY_FM); @@ -1924,25 +1924,25 @@ void APP_TimeSlice500ms(void) } #endif - if (gLowBattery) + if (g_low_battery) { - gLowBatteryBlink = ++gLowBatteryCountdown & 1; + g_low_battery_blink = ++g_low_batteryCountdown & 1; - UI_DisplayBattery(0, gLowBatteryBlink); + UI_DisplayBattery(0, g_low_battery_blink); - if (gCurrentFunction != FUNCTION_TRANSMIT) + if (g_current_function != FUNCTION_TRANSMIT) { // not transmitting - if (gLowBatteryCountdown < 30) + if (g_low_batteryCountdown < 30) { - if (gLowBatteryCountdown == 29 && !gChargingWithTypeC) + if (g_low_batteryCountdown == 29 && !g_charging_with_type_c) AUDIO_PlayBeep(BEEP_500HZ_60MS_DOUBLE_BEEP); } else { - gLowBatteryCountdown = 0; + g_low_batteryCountdown = 0; - if (!gChargingWithTypeC) + if (!g_charging_with_type_c) { // not on charge AUDIO_PlayBeep(BEEP_500HZ_60MS_DOUBLE_BEEP); @@ -1951,20 +1951,20 @@ void APP_TimeSlice500ms(void) AUDIO_SetVoiceID(0, VOICE_ID_LOW_VOLTAGE); #endif - if (gBatteryDisplayLevel == 0) + if (g_battery_display_level == 0) { #ifdef ENABLE_VOICE AUDIO_PlaySingleVoice(true); #endif - gReducedService = true; + g_reduced_service = true; - //if (gCurrentFunction != FUNCTION_POWER_SAVE) + //if (g_current_function != FUNCTION_POWER_SAVE) FUNCTION_Select(FUNCTION_POWER_SAVE); ST7565_HardwareReset(); - if (g_eeprom.backlight < (ARRAY_SIZE(gSubMenu_backlight) - 1)) + if (g_eeprom.backlight < (ARRAY_SIZE(g_sub_menu_backlight) - 1)) GPIO_ClearBit(&GPIOB->DATA, GPIOB_PIN_BACKLIGHT); // turn the backlight off } #ifdef ENABLE_VOICE @@ -1976,7 +1976,7 @@ void APP_TimeSlice500ms(void) } } - if (gScreenToDisplay == DISPLAY_SCANNER && + if (g_screen_to_display == DISPLAY_SCANNER && gScannerEditState == SCAN_EDIT_STATE_NONE && gScanCssState < SCAN_CSS_STATE_FOUND) { @@ -1985,63 +1985,63 @@ void APP_TimeSlice500ms(void) #ifdef ENABLE_CODE_SCAN_TIMEOUT if (gScanProgressIndicator > 32) { - if (gScanCssState == SCAN_CSS_STATE_SCANNING && !gScanSingleFrequency) + if (gScanCssState == SCAN_CSS_STATE_SCANNING && !g_scan_single_frequency) gScanCssState = SCAN_CSS_STATE_FOUND; else gScanCssState = SCAN_CSS_STATE_FAILED; - gUpdateStatus = true; + g_update_status = true; } #endif - gUpdateDisplay = true; + g_update_display = true; } - if (gCurrentFunction != FUNCTION_TRANSMIT) + if (g_current_function != FUNCTION_TRANSMIT) { - if (gDTMF_DecodeRingCountdown_500ms > 0) + if (g_dtmf_decode_ring_count_down_500ms > 0) { // make "ring-ring" sound - gDTMF_DecodeRingCountdown_500ms--; + g_dtmf_decode_ring_count_down_500ms--; AUDIO_PlayBeep(BEEP_880HZ_200MS); } } else - gDTMF_DecodeRingCountdown_500ms = 0; + g_dtmf_decode_ring_count_down_500ms = 0; - if (gDTMF_CallState != DTMF_CALL_STATE_NONE && - gCurrentFunction != FUNCTION_TRANSMIT && - gCurrentFunction != FUNCTION_RECEIVE) + if (g_dtmf_call_state != DTMF_CALL_STATE_NONE && + g_current_function != FUNCTION_TRANSMIT && + g_current_function != FUNCTION_RECEIVE) { - if (gDTMF_auto_reset_time_500ms > 0) + if (g_dtmf_auto_reset_time_500ms > 0) { - if (--gDTMF_auto_reset_time_500ms == 0) + if (--g_dtmf_auto_reset_time_500ms == 0) { - if (gDTMF_CallState == DTMF_CALL_STATE_RECEIVED && g_eeprom.DTMF_auto_reset_time >= DTMF_HOLD_MAX) - gDTMF_CallState = DTMF_CALL_STATE_RECEIVED_STAY; // keep message on-screen till a key is pressed + if (g_dtmf_call_state == DTMF_CALL_STATE_RECEIVED && g_eeprom.dtmf_auto_reset_time >= DTMF_HOLD_MAX) + g_dtmf_call_state = DTMF_CALL_STATE_RECEIVED_STAY; // keep message on-screen till a key is pressed else - gDTMF_CallState = DTMF_CALL_STATE_NONE; - gUpdateDisplay = true; + g_dtmf_call_state = DTMF_CALL_STATE_NONE; + g_update_display = true; } } -// if (gDTMF_CallState != DTMF_CALL_STATE_RECEIVED_STAY) +// if (g_dtmf_call_state != DTMF_CALL_STATE_RECEIVED_STAY) // { -// gDTMF_CallState = DTMF_CALL_STATE_NONE; -// gUpdateDisplay = true; +// g_dtmf_call_state = DTMF_CALL_STATE_NONE; +// g_update_display = true; // } } - if (gDTMF_IsTx && gDTMF_TxStopCountdown_500ms > 0) + if (g_dtmf_is_tx && g_dtmf_tx_stop_count_down_500ms > 0) { - if (--gDTMF_TxStopCountdown_500ms == 0) + if (--g_dtmf_tx_stop_count_down_500ms == 0) { - gDTMF_IsTx = false; - gUpdateDisplay = true; + g_dtmf_is_tx = false; + g_update_display = true; } } #ifdef ENABLE_SHOW_TX_TIMEOUT - if (gCurrentFunction == FUNCTION_TRANSMIT && (gTxTimerCountdown_500ms & 1)) + if (g_current_function == FUNCTION_TRANSMIT && (g_tx_timer_count_down_500ms & 1)) UI_DisplayTXCountdown(true); #endif } @@ -2049,10 +2049,10 @@ void APP_TimeSlice500ms(void) #if defined(ENABLE_ALARM) || defined(ENABLE_TX1750) static void ALARM_Off(void) { - gAlarmState = ALARM_STATE_OFF; + g_alarm_state = ALARM_STATE_OFF; GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); - gEnableSpeaker = false; + g_enable_speaker = false; if (g_eeprom.alarm_mode == ALARM_MODE_TONE) { @@ -2061,96 +2061,99 @@ void APP_TimeSlice500ms(void) } #ifdef ENABLE_VOX - gVoxResumeCountdown = 80; + g_vox_resume_count_down = 80; #endif SYSTEM_DelayMs(5); RADIO_SetupRegisters(true); - if (gScreenToDisplay != DISPLAY_MENU) // 1of11 .. don't close the menu - gRequestDisplayScreen = DISPLAY_MAIN; + if (g_screen_to_display != DISPLAY_MENU) // 1of11 .. don't close the menu + g_request_display_screen = DISPLAY_MAIN; } #endif -void CHANNEL_Next(const bool bFlag, const int8_t scan_direction) +void CHANNEL_Next(const bool flag, const int8_t scan_direction) { RADIO_SelectVfos(); - gNextChannel = gRxVfo->channel_save; - gCurrentScanList = SCAN_NEXT_CHAN_SCANLIST1; - gScanStateDir = scan_direction; + g_next_channel = g_rx_vfo->channel_save; + g_current_scan_list = SCAN_NEXT_CHAN_SCANLIST1; + g_scan_state_dir = scan_direction; - if (gNextChannel <= USER_CHANNEL_LAST) + if (g_next_channel <= USER_CHANNEL_LAST) { // channel mode - if (bFlag) - gRestoreUSER_CHANNEL = gNextChannel; + if (flag) + g_restore_channel = g_next_channel; USER_NextChannel(); } else { // frequency mode - if (bFlag) - gRestoreFrequency = gRxVfo->freq_config_rx.frequency; + if (flag) + g_restore_frequency = g_rx_vfo->freq_config_rx.frequency; FREQ_NextChannel(); } - gScanPauseDelayIn_10ms = scan_pause_delay_in_2_10ms; - gScheduleScanListen = false; - gRxReceptionMode = RX_MODE_NONE; + g_scan_pause_delay_in_10ms = scan_pause_delay_in_2_10ms; + g_schedule_scan_listen = false; + g_rx_reception_mode = RX_MODE_NONE; gScanPauseMode = false; bScanKeepFrequency = false; } -static void APP_ProcessKey(const key_code_t Key, const bool bKeyPressed, const bool bKeyHeld) +static void APP_ProcessKey(const key_code_t Key, const bool key_pressed, const bool key_held) { - bool bFlag = false; + bool flag = false; // if (Key == KEY_INVALID) // return; + if (Key != KEY_INVALID && Key != KEY_PTT) + RADIO_Setg_vfo_state(VFO_STATE_NORMAL); // reset the state + const bool backlight_was_on = GPIO_CheckBit(&GPIOB->DATA, GPIOB_PIN_BACKLIGHT); if (Key == KEY_EXIT && !backlight_was_on && g_eeprom.backlight > 0) { // just turn the light on for now so the user can see what's what backlight_turn_on(); - gBeepToPlay = BEEP_NONE; + g_beep_to_play = BEEP_NONE; return; } - if (gCurrentFunction == FUNCTION_POWER_SAVE) + if (g_current_function == FUNCTION_POWER_SAVE) FUNCTION_Select(FUNCTION_FOREGROUND); - gBatterySaveCountdown_10ms = battery_save_count_10ms; + g_battery_save_count_down_10ms = battery_save_count_10ms; if (g_eeprom.auto_keypad_lock) - gKeyLockCountdown = 30; // 15 seconds + g_key_lock_count_down = 30; // 15 seconds - if (!bKeyPressed) + if (!key_pressed) { - if (gFlagSaveVfo) + if (g_flag_SaveVfo) { SETTINGS_SaveVfoIndices(); - gFlagSaveVfo = false; + g_flag_SaveVfo = false; } - if (gFlagSaveSettings) + if (g_flag_SaveSettings) { SETTINGS_SaveSettings(); - gFlagSaveSettings = false; + g_flag_SaveSettings = false; } #ifdef ENABLE_FMRADIO - if (gFlagSaveFM) + if (g_flag_SaveFM) { SETTINGS_SaveFM(); - gFlagSaveFM = false; + g_flag_SaveFM = false; } #endif - if (gFlagSaveChannel) + if (g_flag_SaveChannel) { - SETTINGS_SaveChannel(gTxVfo->channel_save, g_eeprom.tx_vfo, gTxVfo, gFlagSaveChannel); - gFlagSaveChannel = false; + SETTINGS_SaveChannel(g_tx_vfo->channel_save, g_eeprom.tx_vfo, g_tx_vfo, g_flag_SaveChannel); + g_flag_SaveChannel = false; RADIO_ConfigureChannel(g_eeprom.tx_vfo, VFO_CONFIGURE); RADIO_SetupRegisters(true); @@ -2160,77 +2163,77 @@ static void APP_ProcessKey(const key_code_t Key, const bool bKeyPressed, const b } else { - if (Key != KEY_PTT || gSetting_backlight_on_tx_rx == 1 || gSetting_backlight_on_tx_rx == 3) + if (Key != KEY_PTT || g_setting_backlight_on_tx_rx == 1 || g_setting_backlight_on_tx_rx == 3) backlight_turn_on(); - if (Key == KEY_EXIT && bKeyHeld) + if (Key == KEY_EXIT && key_held) { // exit key held pressed // clear the live DTMF decoder - if (gDTMF_RX_live[0] != 0) + if (g_dtmf_rx_live[0] != 0) { - memset(gDTMF_RX_live, 0, sizeof(gDTMF_RX_live)); - gDTMF_RX_live_timeout = 0; - gUpdateDisplay = true; + memset(g_dtmf_rx_live, 0, sizeof(g_dtmf_rx_live)); + g_dtmf_rx_live_timeout = 0; + g_update_display = true; } // cancel user input cancelUserInputModes(); } - if (gScreenToDisplay == DISPLAY_MENU) // 1of11 - gMenuCountdown = menu_timeout_500ms; + if (g_screen_to_display == DISPLAY_MENU) // 1of11 + g_menu_count_down = menu_timeout_500ms; - if (gDTMF_DecodeRingCountdown_500ms > 0) + if (g_dtmf_decode_ring_count_down_500ms > 0) { // cancel the ringing - gDTMF_DecodeRingCountdown_500ms = 0; + g_dtmf_decode_ring_count_down_500ms = 0; AUDIO_PlayBeep(BEEP_1KHZ_60MS_OPTIONAL); if (Key != KEY_PTT) { - gPttWasReleased = true; + g_ptt_was_released = true; return; } } } - if (g_eeprom.key_lock && gCurrentFunction != FUNCTION_TRANSMIT && Key != KEY_PTT) + if (g_eeprom.key_lock && g_current_function != FUNCTION_TRANSMIT && Key != KEY_PTT) { // keyboard is locked if (Key == KEY_F) { // function/key-lock key - if (!bKeyPressed) + if (!key_pressed) return; - if (!bKeyHeld) + if (!key_held) { // keypad is locked, tell the user AUDIO_PlayBeep(BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL); - gKeypadLocked = 4; // 2 seconds - gUpdateDisplay = true; + g_keypad_locked = 4; // 2 seconds + g_update_display = true; return; } } else if (Key != KEY_SIDE1 && Key != KEY_SIDE2) { - if (!bKeyPressed || bKeyHeld) + if (!key_pressed || key_held) return; // keypad is locked, tell the user AUDIO_PlayBeep(BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL); - gKeypadLocked = 4; // 2 seconds - gUpdateDisplay = true; + g_keypad_locked = 4; // 2 seconds + g_update_display = true; return; } } if ((Key >= KEY_0 && Key <= KEY_9) || Key == KEY_F) { - if (gScanStateDir != SCAN_OFF || gCssScanMode != CSS_SCAN_MODE_OFF) + if (g_scan_state_dir != SCAN_OFF || g_css_scan_mode != CSS_SCAN_MODE_OFF) { // FREQ/CTCSS/DCS scanning - if (bKeyPressed && !bKeyHeld) + if (key_pressed && !key_held) AUDIO_PlayBeep(BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL); return; } @@ -2238,48 +2241,48 @@ static void APP_ProcessKey(const key_code_t Key, const bool bKeyPressed, const b if (Key == KEY_PTT) { - if (gPttWasPressed) + if (g_ptt_was_pressed) { - bFlag = bKeyHeld; - if (!bKeyPressed) + flag = key_held; + if (!key_pressed) { - bFlag = true; - gPttWasPressed = false; + flag = true; + g_ptt_was_pressed = false; } } } else - if (gPttWasReleased) + if (g_ptt_was_released) { - if (bKeyHeld) - bFlag = true; - if (!bKeyPressed) + if (key_held) + flag = true; + if (!key_pressed) { - bFlag = true; - gPttWasReleased = false; + flag = true; + g_ptt_was_released = false; } } - if (g_was_f_key_pressed && (Key == KEY_PTT || Key == KEY_EXIT || Key == KEY_SIDE1 || Key == KEY_SIDE2)) + if (g_f_key_was_pressed && (Key == KEY_PTT || Key == KEY_EXIT || Key == KEY_SIDE1 || Key == KEY_SIDE2)) { // cancel the F-key - g_was_f_key_pressed = false; - gUpdateStatus = true; + g_f_key_was_pressed = false; + g_update_status = true; } - if (!bFlag) + if (!flag) { - if (gCurrentFunction == FUNCTION_TRANSMIT) + if (g_current_function == FUNCTION_TRANSMIT) { // transmitting #if defined(ENABLE_ALARM) || defined(ENABLE_TX1750) - if (gAlarmState == ALARM_STATE_OFF) + if (g_alarm_state == ALARM_STATE_OFF) #endif { char Code; if (Key == KEY_PTT) { - GENERIC_Key_PTT(bKeyPressed); + GENERIC_Key_PTT(key_pressed); goto Skip; } @@ -2296,84 +2299,84 @@ static void APP_ProcessKey(const key_code_t Key, const bool bKeyPressed, const b // transmit DTMF keys } - if (!bKeyPressed || bKeyHeld) + if (!key_pressed || key_held) { - if (!bKeyPressed) + if (!key_pressed) { GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); - gEnableSpeaker = false; + g_enable_speaker = false; BK4819_ExitDTMF_TX(false); - if (gCurrentVfo->scrambling_type == 0 || !gSetting_ScrambleEnable) + if (g_current_vfo->scrambling_type == 0 || !g_setting_scramble_enable) BK4819_DisableScramble(); else - BK4819_EnableScramble(gCurrentVfo->scrambling_type - 1); + BK4819_EnableScramble(g_current_vfo->scrambling_type - 1); } } else { - if (g_eeprom.DTMF_side_tone) + if (g_eeprom.dtmf_side_tone) { // user will here the DTMF tones in speaker GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); - gEnableSpeaker = true; + g_enable_speaker = true; } BK4819_DisableScramble(); if (Code == 0xFE) - BK4819_TransmitTone(g_eeprom.DTMF_side_tone, 1750); + BK4819_TransmitTone(g_eeprom.dtmf_side_tone, 1750); else - BK4819_PlayDTMFEx(g_eeprom.DTMF_side_tone, Code); + BK4819_PlayDTMFEx(g_eeprom.dtmf_side_tone, Code); } } #if defined(ENABLE_ALARM) || defined(ENABLE_TX1750) else - if ((!bKeyHeld && bKeyPressed) || (gAlarmState == ALARM_STATE_TX1750 && bKeyHeld && !bKeyPressed)) + if ((!key_held && key_pressed) || (g_alarm_state == ALARM_STATE_TX1750 && key_held && !key_pressed)) { ALARM_Off(); if (g_eeprom.repeater_tail_tone_elimination == 0) FUNCTION_Select(FUNCTION_FOREGROUND); else - gRTTECountdown = g_eeprom.repeater_tail_tone_elimination * 10; + g_rtte_count_down = g_eeprom.repeater_tail_tone_elimination * 10; if (Key == KEY_PTT) - gPttWasPressed = true; + g_ptt_was_pressed = true; else - if (!bKeyHeld) - gPttWasReleased = true; + if (!key_held) + g_ptt_was_released = true; } #endif } else if (Key != KEY_SIDE1 && Key != KEY_SIDE2) { - switch (gScreenToDisplay) + switch (g_screen_to_display) { case DISPLAY_MAIN: - MAIN_ProcessKeys(Key, bKeyPressed, bKeyHeld); -// bKeyHeld = false; // allow the channel setting to be saved + MAIN_ProcessKeys(Key, key_pressed, key_held); +// key_held = false; // allow the channel setting to be saved break; #ifdef ENABLE_FMRADIO case DISPLAY_FM: - FM_ProcessKeys(Key, bKeyPressed, bKeyHeld); + FM_ProcessKeys(Key, key_pressed, key_held); break; #endif case DISPLAY_MENU: - MENU_ProcessKeys(Key, bKeyPressed, bKeyHeld); + MENU_ProcessKeys(Key, key_pressed, key_held); break; case DISPLAY_SCANNER: - SCANNER_ProcessKeys(Key, bKeyPressed, bKeyHeld); + SCANNER_ProcessKeys(Key, key_pressed, key_held); break; #ifdef ENABLE_AIRCOPY case DISPLAY_AIRCOPY: - AIRCOPY_ProcessKeys(Key, bKeyPressed, bKeyHeld); + AIRCOPY_ProcessKeys(Key, key_pressed, key_held); break; #endif @@ -2384,111 +2387,111 @@ static void APP_ProcessKey(const key_code_t Key, const bool bKeyPressed, const b } else #ifdef ENABLE_AIRCOPY - if (gScreenToDisplay != DISPLAY_SCANNER && gScreenToDisplay != DISPLAY_AIRCOPY) + if (g_screen_to_display != DISPLAY_SCANNER && g_screen_to_display != DISPLAY_AIRCOPY) #else - if (gScreenToDisplay != DISPLAY_SCANNER) + if (g_screen_to_display != DISPLAY_SCANNER) #endif { - ACTION_Handle(Key, bKeyPressed, bKeyHeld); + ACTION_Handle(Key, key_pressed, key_held); } else - if (!bKeyHeld && bKeyPressed) - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + if (!key_held && key_pressed) + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; } Skip: - if (gBeepToPlay != BEEP_NONE) + if (g_beep_to_play != BEEP_NONE) { - AUDIO_PlayBeep(gBeepToPlay); - gBeepToPlay = BEEP_NONE; + AUDIO_PlayBeep(g_beep_to_play); + g_beep_to_play = BEEP_NONE; } - if (gFlagAcceptSetting) + if (g_flag_AcceptSetting) { - gMenuCountdown = menu_timeout_500ms; + g_menu_count_down = menu_timeout_500ms; MENU_AcceptSetting(); - gFlagRefreshSetting = true; - gFlagAcceptSetting = false; + g_flag_refresh_menu = true; + g_flag_AcceptSetting = false; } - if (gFlagStopScan) + if (g_flag_stop_scan) { BK4819_StopScan(); - gFlagStopScan = false; + g_flag_stop_scan = false; } - if (gRequestSaveSettings) + if (g_request_save_settings) { - if (!bKeyHeld) + if (!key_held) SETTINGS_SaveSettings(); else - gFlagSaveSettings = 1; - gRequestSaveSettings = false; - gUpdateStatus = true; + g_flag_SaveSettings = 1; + g_request_save_settings = false; + g_update_status = true; } #ifdef ENABLE_FMRADIO - if (gRequestSaveFM) + if (g_request_save_fm) { - if (!bKeyHeld) + if (!key_held) SETTINGS_SaveFM(); else - gFlagSaveFM = true; - gRequestSaveFM = false; + g_flag_SaveFM = true; + g_request_save_fm = false; } #endif - if (gRequestSaveVFO) + if (g_request_save_vfo) { - if (!bKeyHeld) + if (!key_held) SETTINGS_SaveVfoIndices(); else - gFlagSaveVfo = true; - gRequestSaveVFO = false; + g_flag_SaveVfo = true; + g_request_save_vfo = false; } - if (gRequestSaveChannel > 0) + if (g_request_save_channel > 0) { - if (!bKeyHeld) + if (!key_held) { - SETTINGS_SaveChannel(gTxVfo->channel_save, g_eeprom.tx_vfo, gTxVfo, gRequestSaveChannel); + SETTINGS_SaveChannel(g_tx_vfo->channel_save, g_eeprom.tx_vfo, g_tx_vfo, g_request_save_channel); - if (gScreenToDisplay != DISPLAY_SCANNER) - if (gVfoConfigureMode == VFO_CONFIGURE_NONE) // 'if' is so as we don't wipe out previously setting this variable elsewhere - gVfoConfigureMode = VFO_CONFIGURE; + if (g_screen_to_display != DISPLAY_SCANNER) + if (g_vfo_configure_mode == VFO_CONFIGURE_NONE) // 'if' is so as we don't wipe out previously setting this variable elsewhere + g_vfo_configure_mode = VFO_CONFIGURE; } else { - gFlagSaveChannel = gRequestSaveChannel; + g_flag_SaveChannel = g_request_save_channel; - if (gRequestDisplayScreen == DISPLAY_INVALID) - gRequestDisplayScreen = DISPLAY_MAIN; + if (g_request_display_screen == DISPLAY_INVALID) + g_request_display_screen = DISPLAY_MAIN; } - gRequestSaveChannel = 0; + g_request_save_channel = 0; } - if (gVfoConfigureMode != VFO_CONFIGURE_NONE) + if (g_vfo_configure_mode != VFO_CONFIGURE_NONE) { - if (gFlagResetVfos) + if (g_flag_reset_vfos) { - RADIO_ConfigureChannel(0, gVfoConfigureMode); - RADIO_ConfigureChannel(1, gVfoConfigureMode); + RADIO_ConfigureChannel(0, g_vfo_configure_mode); + RADIO_ConfigureChannel(1, g_vfo_configure_mode); } else - RADIO_ConfigureChannel(g_eeprom.tx_vfo, gVfoConfigureMode); + RADIO_ConfigureChannel(g_eeprom.tx_vfo, g_vfo_configure_mode); - if (gRequestDisplayScreen == DISPLAY_INVALID) - gRequestDisplayScreen = DISPLAY_MAIN; + if (g_request_display_screen == DISPLAY_INVALID) + g_request_display_screen = DISPLAY_MAIN; - gFlagReconfigureVfos = true; - gVfoConfigureMode = VFO_CONFIGURE_NONE; - gFlagResetVfos = false; + g_flag_reconfigure_vfos = true; + g_vfo_configure_mode = VFO_CONFIGURE_NONE; + g_flag_reset_vfos = false; } - if (gFlagReconfigureVfos) + if (g_flag_reconfigure_vfos) { RADIO_SelectVfos(); @@ -2498,33 +2501,33 @@ Skip: RADIO_SetupRegisters(true); - gDTMF_auto_reset_time_500ms = 0; - gDTMF_CallState = DTMF_CALL_STATE_NONE; - gDTMF_TxStopCountdown_500ms = 0; - gDTMF_IsTx = false; + g_dtmf_auto_reset_time_500ms = 0; + g_dtmf_call_state = DTMF_CALL_STATE_NONE; + g_dtmf_tx_stop_count_down_500ms = 0; + g_dtmf_is_tx = false; - gVFO_RSSI_bar_level[0] = 0; - gVFO_RSSI_bar_level[1] = 0; + g_vfo_rssi_bar_level[0] = 0; + g_vfo_rssi_bar_level[1] = 0; - gFlagReconfigureVfos = false; + g_flag_reconfigure_vfos = false; - if (gMonitor) + if (g_monitor_enabled) ACTION_Monitor(); // 1of11 } - if (gFlagRefreshSetting) + if (g_flag_refresh_menu) { - gFlagRefreshSetting = false; - gMenuCountdown = menu_timeout_500ms; + g_flag_refresh_menu = false; + g_menu_count_down = menu_timeout_500ms; MENU_ShowCurrentSetting(); } - if (gFlagStartScan) + if (g_flag_start_scan) { - gFlagStartScan = false; + g_flag_start_scan = false; - gMonitor = false; + g_monitor_enabled = false; #ifdef ENABLE_VOICE AUDIO_SetVoiceID(0, VOICE_ID_SCANNING_BEGIN); @@ -2533,13 +2536,13 @@ Skip: SCANNER_Start(); - gRequestDisplayScreen = DISPLAY_SCANNER; + g_request_display_screen = DISPLAY_SCANNER; } - if (gFlagPrepareTX) + if (g_flag_prepare_tx) { RADIO_PrepareTX(); - gFlagPrepareTX = false; + g_flag_prepare_tx = false; } #ifdef ENABLE_VOICE @@ -2552,8 +2555,8 @@ Skip: } #endif - GUI_SelectNextDisplay(gRequestDisplayScreen); - gRequestDisplayScreen = DISPLAY_INVALID; + GUI_SelectNextDisplay(g_request_display_screen); + g_request_display_screen = DISPLAY_INVALID; - gUpdateDisplay = true; + g_update_display = true; } diff --git a/app/app.h b/app/app.h index 6f958da..64231be 100644 --- a/app/app.h +++ b/app/app.h @@ -29,9 +29,9 @@ extern const uint8_t orig_mixer; extern const uint8_t orig_pga; void APP_EndTransmission(void); -void CHANNEL_Next(const bool bFlag, const int8_t scan_direction); -void APP_StartListening(FUNCTION_Type_t Function, const bool reset_am_fix); -uint32_t APP_SetFrequencyByStep(VFO_Info_t *pInfo, int8_t Step); +void CHANNEL_Next(const bool flag, const int8_t scan_direction); +void APP_StartListening(function_type_t Function, const bool reset_am_fix); +uint32_t APP_SetFrequencyByStep(vfo_info_t *pInfo, int8_t Step); void APP_Update(void); void APP_TimeSlice10ms(void); void APP_TimeSlice500ms(void); diff --git a/app/dtmf.c b/app/dtmf.c index 872f6be..662b52e 100644 --- a/app/dtmf.c +++ b/app/dtmf.c @@ -33,42 +33,42 @@ #include "settings.h" #include "ui/ui.h" -char gDTMF_String[15]; +char g_dtmf_string[15]; + +char g_dtmf_input_box[15]; +uint8_t g_dtmf_input_box_index; +bool g_dtmf_input_mode; +uint8_t g_dtmf_prev_index; + +char g_dtmf_rx[17]; +uint8_t g_dtmf_rx_index; +uint8_t g_dtmf_rx_timeout; +bool g_dtmf_rx_pending; + +char g_dtmf_rx_live[20]; +uint8_t g_dtmf_rx_live_timeout; -char gDTMF_InputBox[15]; -uint8_t gDTMF_InputBox_Index = 0; -bool gDTMF_InputMode = false; -uint8_t gDTMF_PreviousIndex = 0; - -char gDTMF_RX[17]; -uint8_t gDTMF_RX_index = 0; -uint8_t gDTMF_RX_timeout = 0; -bool gDTMF_RX_pending = false; - -char gDTMF_RX_live[20]; -uint8_t gDTMF_RX_live_timeout = 0; - -bool gIsDtmfContactValid; -char gDTMF_ID[4]; -char gDTMF_Caller[4]; -char gDTMF_Callee[4]; -DTMF_State_t gDTMF_State; -uint8_t gDTMF_DecodeRingCountdown_500ms; -uint8_t gDTMF_chosen_contact; -uint8_t gDTMF_auto_reset_time_500ms; -DTMF_CallState_t gDTMF_CallState; -DTMF_ReplyState_t gDTMF_ReplyState; -DTMF_CallMode_t gDTMF_CallMode; -bool gDTMF_IsTx; -uint8_t gDTMF_TxStopCountdown_500ms; -bool gDTMF_IsGroupCall; +bool g_dtmf_is_contact_valid; +char g_dtmf_id[4]; +char g_dtmf_caller[4]; +char g_dtmf_callee[4]; +dtmf_state_t g_dtmf_state; +uint8_t g_dtmf_decode_ring_count_down_500ms; +uint8_t g_dtmf_chosen_contact; +uint8_t g_dtmf_auto_reset_time_500ms; +dtmf_call_state_t g_dtmf_call_state; +dtmf_reply_state_t g_dtmf_reply_state; +dtmf_call_mode_t g_dtmf_call_mode; +bool g_dtmf_is_tx; +uint8_t g_dtmf_tx_stop_count_down_500ms; +bool g_dtmf_IsGroupCall; void DTMF_clear_RX(void) { - gDTMF_RX_timeout = 0; - gDTMF_RX_index = 0; - gDTMF_RX_pending = false; - memset(gDTMF_RX, 0, sizeof(gDTMF_RX)); + g_dtmf_rx_timeout = 0; + g_dtmf_rx_index = 0; + g_dtmf_rx_pending = false; + memset(g_dtmf_rx, 0, sizeof(g_dtmf_rx)); } bool DTMF_ValidateCodes(char *pCode, const unsigned int size) @@ -162,20 +162,20 @@ bool DTMF_CompareMessage(const char *pMsg, const char *pTemplate, const unsigned { if (pMsg[i] != pTemplate[i]) { - if (!bCheckGroup || pMsg[i] != g_eeprom.DTMF_group_call_code) + if (!bCheckGroup || pMsg[i] != g_eeprom.dtmf_group_call_code) return false; - gDTMF_IsGroupCall = true; + g_dtmf_IsGroupCall = true; } } return true; } -DTMF_CallMode_t DTMF_CheckGroupCall(const char *pMsg, const unsigned int size) +dtmf_call_mode_t DTMF_CheckGroupCall(const char *pMsg, const unsigned int size) { unsigned int i; for (i = 0; i < size; i++) - if (pMsg[i] == g_eeprom.DTMF_group_call_code) + if (pMsg[i] == g_eeprom.dtmf_group_call_code) break; return (i < size) ? DTMF_CALL_MODE_GROUP : DTMF_CALL_MODE_NOT_GROUP; @@ -183,21 +183,21 @@ DTMF_CallMode_t DTMF_CheckGroupCall(const char *pMsg, const unsigned int size) void DTMF_clear_input_box(void) { - memset(gDTMF_InputBox, 0, sizeof(gDTMF_InputBox)); - gDTMF_InputBox_Index = 0; - gDTMF_InputMode = false; + memset(g_dtmf_input_box, 0, sizeof(g_dtmf_input_box)); + g_dtmf_input_box_index = 0; + g_dtmf_input_mode = false; } void DTMF_Append(const char code) { - if (gDTMF_InputBox_Index == 0) + if (g_dtmf_input_box_index == 0) { - memset(gDTMF_InputBox, '-', sizeof(gDTMF_InputBox) - 1); - gDTMF_InputBox[sizeof(gDTMF_InputBox) - 1] = 0; + memset(g_dtmf_input_box, '-', sizeof(g_dtmf_input_box) - 1); + g_dtmf_input_box[sizeof(g_dtmf_input_box) - 1] = 0; } - if (gDTMF_InputBox_Index < (sizeof(gDTMF_InputBox) - 1)) - gDTMF_InputBox[gDTMF_InputBox_Index++] = code; + if (g_dtmf_input_box_index < (sizeof(g_dtmf_input_box) - 1)) + g_dtmf_input_box[g_dtmf_input_box_index++] = code; } void DTMF_HandleRequest(void) @@ -206,45 +206,45 @@ void DTMF_HandleRequest(void) char String[20]; unsigned int Offset; - if (!gDTMF_RX_pending) + if (!g_dtmf_rx_pending) return; // nothing new received - if (gScanStateDir != SCAN_OFF || gCssScanMode != CSS_SCAN_MODE_OFF) + if (g_scan_state_dir != SCAN_OFF || g_css_scan_mode != CSS_SCAN_MODE_OFF) { // we're busy scanning DTMF_clear_RX(); return; } - if (!gRxVfo->DTMF_decoding_enable && !gSetting_KILLED) + if (!g_rx_vfo->dtmf_decoding_enable && !g_setting_killed) { // D-DCD is disabled or we're alive DTMF_clear_RX(); return; } - gDTMF_RX_pending = false; + g_dtmf_rx_pending = false; - if (gDTMF_RX_index >= 9) + if (g_dtmf_rx_index >= 9) { // look for the KILL code - sprintf(String, "%s%c%s", g_eeprom.ani_DTMF_id, g_eeprom.DTMF_separate_code, g_eeprom.kill_code); + sprintf(String, "%s%c%s", g_eeprom.ani_dtmf_id, g_eeprom.dtmf_separate_code, g_eeprom.kill_code); - Offset = gDTMF_RX_index - strlen(String); + Offset = g_dtmf_rx_index - strlen(String); - if (DTMF_CompareMessage(gDTMF_RX + Offset, String, strlen(String), true)) + if (DTMF_CompareMessage(g_dtmf_rx + Offset, String, strlen(String), true)) { // bugger if (g_eeprom.permit_remote_kill) { - gSetting_KILLED = true; // oooerr ! + g_setting_killed = true; // oooerr ! DTMF_clear_RX(); SETTINGS_SaveSettings(); - gDTMF_ReplyState = DTMF_REPLY_AB; + g_dtmf_reply_state = DTMF_REPLY_AB; #ifdef ENABLE_FMRADIO - if (gFmRadioMode) + if (g_fm_radio_mode) { FM_TurnOff(); GUI_SelectNextDisplay(DISPLAY_MAIN); @@ -253,133 +253,133 @@ void DTMF_HandleRequest(void) } else { - gDTMF_ReplyState = DTMF_REPLY_NONE; + g_dtmf_reply_state = DTMF_REPLY_NONE; } - gDTMF_CallState = DTMF_CALL_STATE_NONE; + g_dtmf_call_state = DTMF_CALL_STATE_NONE; - gUpdateDisplay = true; - gUpdateStatus = true; + g_update_display = true; + g_update_status = true; return; } } - if (gDTMF_RX_index >= 9) + if (g_dtmf_rx_index >= 9) { // look for the REVIVE code - sprintf(String, "%s%c%s", g_eeprom.ani_DTMF_id, g_eeprom.DTMF_separate_code, g_eeprom.revive_code); + sprintf(String, "%s%c%s", g_eeprom.ani_dtmf_id, g_eeprom.dtmf_separate_code, g_eeprom.revive_code); - Offset = gDTMF_RX_index - strlen(String); + Offset = g_dtmf_rx_index - strlen(String); - if (DTMF_CompareMessage(gDTMF_RX + Offset, String, strlen(String), true)) + if (DTMF_CompareMessage(g_dtmf_rx + Offset, String, strlen(String), true)) { // shit, we're back ! - gSetting_KILLED = false; + g_setting_killed = false; DTMF_clear_RX(); SETTINGS_SaveSettings(); - gDTMF_ReplyState = DTMF_REPLY_AB; - gDTMF_CallState = DTMF_CALL_STATE_NONE; + g_dtmf_reply_state = DTMF_REPLY_AB; + g_dtmf_call_state = DTMF_CALL_STATE_NONE; - gUpdateDisplay = true; - gUpdateStatus = true; + g_update_display = true; + g_update_status = true; return; } } - if (gDTMF_RX_index >= 2) + if (g_dtmf_rx_index >= 2) { // look for ACK reply strcpy(String, "AB"); - Offset = gDTMF_RX_index - strlen(String); + Offset = g_dtmf_rx_index - strlen(String); - if (DTMF_CompareMessage(gDTMF_RX + Offset, String, strlen(String), true)) + if (DTMF_CompareMessage(g_dtmf_rx + Offset, String, strlen(String), true)) { // ends with "AB" - if (gDTMF_ReplyState != DTMF_REPLY_NONE) // 1of11 -// if (gDTMF_CallState != DTMF_CALL_STATE_NONE) // 1of11 -// if (gDTMF_CallState == DTMF_CALL_STATE_CALL_OUT) // 1of11 + if (g_dtmf_reply_state != DTMF_REPLY_NONE) // 1of11 +// if (g_dtmf_call_state != DTMF_CALL_STATE_NONE) // 1of11 +// if (g_dtmf_call_state == DTMF_CALL_STATE_CALL_OUT) // 1of11 { - gDTMF_State = DTMF_STATE_TX_SUCC; + g_dtmf_state = DTMF_STATE_TX_SUCC; DTMF_clear_RX(); - gUpdateDisplay = true; + g_update_display = true; return; } } } - if (gDTMF_CallState == DTMF_CALL_STATE_CALL_OUT && - gDTMF_CallMode == DTMF_CALL_MODE_NOT_GROUP && - gDTMF_RX_index >= 9) + if (g_dtmf_call_state == DTMF_CALL_STATE_CALL_OUT && + g_dtmf_call_mode == DTMF_CALL_MODE_NOT_GROUP && + g_dtmf_rx_index >= 9) { // waiting for a reply - sprintf(String, "%s%c%s", gDTMF_String, g_eeprom.DTMF_separate_code, "AAAAA"); + sprintf(String, "%s%c%s", g_dtmf_string, g_eeprom.dtmf_separate_code, "AAAAA"); - Offset = gDTMF_RX_index - strlen(String); + Offset = g_dtmf_rx_index - strlen(String); - if (DTMF_CompareMessage(gDTMF_RX + Offset, String, strlen(String), false)) + if (DTMF_CompareMessage(g_dtmf_rx + Offset, String, strlen(String), false)) { // we got a response - gDTMF_State = DTMF_STATE_CALL_OUT_RSP; + g_dtmf_state = DTMF_STATE_CALL_OUT_RSP; DTMF_clear_RX(); - gUpdateDisplay = true; + g_update_display = true; } } - if (gSetting_KILLED || gDTMF_CallState != DTMF_CALL_STATE_NONE) + if (g_setting_killed || g_dtmf_call_state != DTMF_CALL_STATE_NONE) { // we've been killed or expecting a reply return; } - if (gDTMF_RX_index >= 7) + if (g_dtmf_rx_index >= 7) { // see if we're being called - gDTMF_IsGroupCall = false; + g_dtmf_IsGroupCall = false; - sprintf(String, "%s%c", g_eeprom.ani_DTMF_id, g_eeprom.DTMF_separate_code); + sprintf(String, "%s%c", g_eeprom.ani_dtmf_id, g_eeprom.dtmf_separate_code); - Offset = gDTMF_RX_index - strlen(String) - 3; + Offset = g_dtmf_rx_index - strlen(String) - 3; - if (DTMF_CompareMessage(gDTMF_RX + Offset, String, strlen(String), true)) + if (DTMF_CompareMessage(g_dtmf_rx + Offset, String, strlen(String), true)) { // it's for us ! - gDTMF_CallState = DTMF_CALL_STATE_RECEIVED; + g_dtmf_call_state = DTMF_CALL_STATE_RECEIVED; - memset(gDTMF_Callee, 0, sizeof(gDTMF_Callee)); - memset(gDTMF_Caller, 0, sizeof(gDTMF_Caller)); - memmove(gDTMF_Callee, gDTMF_RX + Offset + 0, 3); - memmove(gDTMF_Caller, gDTMF_RX + Offset + 4, 3); + memset(g_dtmf_callee, 0, sizeof(g_dtmf_callee)); + memset(g_dtmf_caller, 0, sizeof(g_dtmf_caller)); + memmove(g_dtmf_callee, g_dtmf_rx + Offset + 0, 3); + memmove(g_dtmf_caller, g_dtmf_rx + Offset + 4, 3); DTMF_clear_RX(); - gUpdateDisplay = true; + g_update_display = true; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wimplicit-fallthrough=" - switch (g_eeprom.DTMF_decode_response) + switch (g_eeprom.dtmf_decode_response) { case DTMF_DEC_RESPONSE_BOTH: - gDTMF_DecodeRingCountdown_500ms = DTMF_decode_ring_countdown_500ms; + g_dtmf_decode_ring_count_down_500ms = dtmf_decode_ring_countdown_500ms; case DTMF_DEC_RESPONSE_REPLY: - gDTMF_ReplyState = DTMF_REPLY_AAAAA; + g_dtmf_reply_state = DTMF_REPLY_AAAAA; break; case DTMF_DEC_RESPONSE_RING: - gDTMF_DecodeRingCountdown_500ms = DTMF_decode_ring_countdown_500ms; + g_dtmf_decode_ring_count_down_500ms = dtmf_decode_ring_countdown_500ms; break; default: case DTMF_DEC_RESPONSE_NONE: - gDTMF_DecodeRingCountdown_500ms = 0; - gDTMF_ReplyState = DTMF_REPLY_NONE; + g_dtmf_decode_ring_count_down_500ms = 0; + g_dtmf_reply_state = DTMF_REPLY_NONE; break; } #pragma GCC diagnostic pop - if (gDTMF_IsGroupCall) - gDTMF_ReplyState = DTMF_REPLY_NONE; + if (g_dtmf_IsGroupCall) + g_dtmf_reply_state = DTMF_REPLY_NONE; } } } @@ -390,16 +390,16 @@ void DTMF_Reply(void) char String[20]; const char *pString = NULL; - switch (gDTMF_ReplyState) + switch (g_dtmf_reply_state) { case DTMF_REPLY_ANI: - if (gDTMF_CallMode == DTMF_CALL_MODE_DTMF) + if (g_dtmf_call_mode == DTMF_CALL_MODE_DTMF) { - pString = gDTMF_String; + pString = g_dtmf_string; } else { // append our ID code onto the end of the DTMF code to send - sprintf(String, "%s%c%s", gDTMF_String, g_eeprom.DTMF_separate_code, g_eeprom.ani_DTMF_id); + sprintf(String, "%s%c%s", g_dtmf_string, g_eeprom.dtmf_separate_code, g_eeprom.ani_dtmf_id); pString = String; } break; @@ -409,54 +409,54 @@ void DTMF_Reply(void) break; case DTMF_REPLY_AAAAA: - sprintf(String, "%s%c%s", g_eeprom.ani_DTMF_id, g_eeprom.DTMF_separate_code, "AAAAA"); + sprintf(String, "%s%c%s", g_eeprom.ani_dtmf_id, g_eeprom.dtmf_separate_code, "AAAAA"); pString = String; break; default: case DTMF_REPLY_NONE: - if (gDTMF_CallState != DTMF_CALL_STATE_NONE || - gCurrentVfo->DTMF_ptt_id_tx_mode == PTT_ID_APOLLO || - gCurrentVfo->DTMF_ptt_id_tx_mode == PTT_ID_OFF || - gCurrentVfo->DTMF_ptt_id_tx_mode == PTT_ID_TX_DOWN) + if (g_dtmf_call_state != DTMF_CALL_STATE_NONE || + g_current_vfo->dtmf_ptt_id_tx_mode == PTT_ID_APOLLO || + g_current_vfo->dtmf_ptt_id_tx_mode == PTT_ID_OFF || + g_current_vfo->dtmf_ptt_id_tx_mode == PTT_ID_TX_DOWN) { - gDTMF_ReplyState = DTMF_REPLY_NONE; + g_dtmf_reply_state = DTMF_REPLY_NONE; return; } // send TX-UP DTMF - pString = g_eeprom.DTMF_up_code; + pString = g_eeprom.dtmf_up_code; break; } - gDTMF_ReplyState = DTMF_REPLY_NONE; + g_dtmf_reply_state = DTMF_REPLY_NONE; if (pString == NULL) return; - Delay = (g_eeprom.DTMF_preload_time < 200) ? 200 : g_eeprom.DTMF_preload_time; + Delay = (g_eeprom.dtmf_preload_time < 200) ? 200 : g_eeprom.dtmf_preload_time; - if (g_eeprom.DTMF_side_tone) + if (g_eeprom.dtmf_side_tone) { // the user will also hear the transmitted tones GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); - gEnableSpeaker = true; + g_enable_speaker = true; } SYSTEM_DelayMs(Delay); - BK4819_EnterDTMF_TX(g_eeprom.DTMF_side_tone); + BK4819_EnterDTMF_TX(g_eeprom.dtmf_side_tone); BK4819_PlayDTMFString( pString, 1, - g_eeprom.DTMF_first_code_persist_time, - g_eeprom.DTMF_hash_code_persist_time, - g_eeprom.DTMF_code_persist_time, - g_eeprom.DTMF_code_interval_time); + g_eeprom.dtmf_first_code_persist_time, + g_eeprom.dtmf_hash_code_persist_time, + g_eeprom.dtmf_code_persist_time, + g_eeprom.dtmf_code_interval_time); GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); - gEnableSpeaker = false; + g_enable_speaker = false; BK4819_ExitDTMF_TX(false); } diff --git a/app/dtmf.h b/app/dtmf.h index d06ba86..232b82b 100644 --- a/app/dtmf.h +++ b/app/dtmf.h @@ -22,88 +22,85 @@ #define MAX_DTMF_CONTACTS 16 -enum DTMF_State_t { - DTMF_STATE_0 = 0, - DTMF_STATE_TX_SUCC, - DTMF_STATE_CALL_OUT_RSP -}; - -typedef enum DTMF_State_t DTMF_State_t; - -enum DTMF_CallState_t { - DTMF_CALL_STATE_NONE = 0, - DTMF_CALL_STATE_CALL_OUT, - DTMF_CALL_STATE_RECEIVED, - DTMF_CALL_STATE_RECEIVED_STAY -}; - -enum DTMF_DecodeResponse_t { - DTMF_DEC_RESPONSE_NONE = 0, - DTMF_DEC_RESPONSE_RING, - DTMF_DEC_RESPONSE_REPLY, - DTMF_DEC_RESPONSE_BOTH -}; - -typedef enum DTMF_CallState_t DTMF_CallState_t; - -enum DTMF_ReplyState_t { - DTMF_REPLY_NONE = 0, - DTMF_REPLY_ANI, - DTMF_REPLY_AB, - DTMF_REPLY_AAAAA -}; - -typedef enum DTMF_ReplyState_t DTMF_ReplyState_t; - -enum DTMF_CallMode_t { - DTMF_CALL_MODE_NOT_GROUP = 0, - DTMF_CALL_MODE_GROUP, - DTMF_CALL_MODE_DTMF -}; - enum { // seconds DTMF_HOLD_MIN = 5, DTMF_HOLD_MAX = 60 }; -typedef enum DTMF_CallMode_t DTMF_CallMode_t; +enum dtmf_state_e { + DTMF_STATE_0 = 0, + DTMF_STATE_TX_SUCC, + DTMF_STATE_CALL_OUT_RSP +}; +typedef enum dtmf_state_e dtmf_state_t; -extern char gDTMF_String[15]; +enum dtmf_call_state_e { + DTMF_CALL_STATE_NONE = 0, + DTMF_CALL_STATE_CALL_OUT, + DTMF_CALL_STATE_RECEIVED, + DTMF_CALL_STATE_RECEIVED_STAY +}; +typedef enum dtmf_call_state_e dtmf_call_state_t; -extern char gDTMF_InputBox[15]; -extern uint8_t gDTMF_InputBox_Index; -extern bool gDTMF_InputMode; -extern uint8_t gDTMF_PreviousIndex; +enum dtmf_decode_response_e { + DTMF_DEC_RESPONSE_NONE = 0, + DTMF_DEC_RESPONSE_RING, + DTMF_DEC_RESPONSE_REPLY, + DTMF_DEC_RESPONSE_BOTH +}; +typedef enum dtmf_decode_response_e dtmf_decode_response_t; -extern char gDTMF_RX[17]; -extern uint8_t gDTMF_RX_index; -extern uint8_t gDTMF_RX_timeout; -extern bool gDTMF_RX_pending; +enum dtmf_reply_state_e { + DTMF_REPLY_NONE = 0, + DTMF_REPLY_ANI, + DTMF_REPLY_AB, + DTMF_REPLY_AAAAA +}; +typedef enum dtmf_reply_state_e dtmf_reply_state_t; -extern char gDTMF_RX_live[20]; -extern uint8_t gDTMF_RX_live_timeout; +enum dtmf_call_mode_e { + DTMF_CALL_MODE_NOT_GROUP = 0, + DTMF_CALL_MODE_GROUP, + DTMF_CALL_MODE_DTMF +}; +typedef enum dtmf_call_mode_e dtmf_call_mode_t; -extern bool gIsDtmfContactValid; -extern char gDTMF_ID[4]; -extern char gDTMF_Caller[4]; -extern char gDTMF_Callee[4]; -extern DTMF_State_t gDTMF_State; -extern uint8_t gDTMF_DecodeRingCountdown_500ms; -extern uint8_t gDTMF_chosen_contact; -extern uint8_t gDTMF_auto_reset_time_500ms; -extern DTMF_CallState_t gDTMF_CallState; -extern DTMF_ReplyState_t gDTMF_ReplyState; -extern DTMF_CallMode_t gDTMF_CallMode; -extern bool gDTMF_IsTx; -extern uint8_t gDTMF_TxStopCountdown_500ms; +extern char g_dtmf_string[15]; + +extern char g_dtmf_input_box[15]; +extern uint8_t g_dtmf_input_box_index; +extern bool g_dtmf_input_mode; +extern uint8_t g_dtmf_prev_index; + +extern char g_dtmf_rx[17]; +extern uint8_t g_dtmf_rx_index; +extern uint8_t g_dtmf_rx_timeout; +extern bool g_dtmf_rx_pending; + +extern char g_dtmf_rx_live[20]; +extern uint8_t g_dtmf_rx_live_timeout; + +extern bool g_dtmf_is_contact_valid; +extern char g_dtmf_id[4]; +extern char g_dtmf_caller[4]; +extern char g_dtmf_callee[4]; +extern dtmf_state_t g_dtmf_state; +extern uint8_t g_dtmf_decode_ring_count_down_500ms; +extern uint8_t g_dtmf_chosen_contact; +extern uint8_t g_dtmf_auto_reset_time_500ms; +extern dtmf_call_state_t g_dtmf_call_state; +extern dtmf_reply_state_t g_dtmf_reply_state; +extern dtmf_call_mode_t g_dtmf_call_mode; +extern bool g_dtmf_is_tx; +extern uint8_t g_dtmf_tx_stop_count_down_500ms; void DTMF_clear_RX(void); bool DTMF_ValidateCodes(char *pCode, const unsigned int size); bool DTMF_GetContact(const int Index, char *pContact); bool DTMF_FindContact(const char *pContact, char *pResult); char DTMF_GetCharacter(const unsigned int code); -bool DTMF_CompareMessage(const char *pDTMF, const char *pTemplate, const unsigned int size, const bool bFlag); -DTMF_CallMode_t DTMF_CheckGroupCall(const char *pDTMF, const unsigned int size); +bool DTMF_CompareMessage(const char *pDTMF, const char *pTemplate, const unsigned int size, const bool flag); +dtmf_call_mode_t DTMF_CheckGroupCall(const char *pDTMF, const unsigned int size); void DTMF_clear_input_box(void); void DTMF_Append(const char vode); void DTMF_HandleRequest(void); diff --git a/app/fm.c b/app/fm.c index 5beae5b..a6650be 100644 --- a/app/fm.c +++ b/app/fm.c @@ -36,33 +36,33 @@ #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) #endif -uint16_t gFM_Channels[20]; -bool gFmRadioMode; -uint8_t gFmRadioCountdown_500ms; -volatile uint16_t gFmPlayCountdown_10ms; -volatile int8_t gFM_ScanState; -bool gFM_AutoScan; -uint8_t gFM_ChannelPosition; -bool gFM_FoundFrequency; -bool gFM_AutoScan; -uint8_t gFM_ResumeCountdown_500ms; -uint16_t gFM_RestoreCountdown_10ms; +uint16_t g_fm_channels[20]; +bool g_fm_radio_mode; +uint8_t g_fm_radio_count_down_500ms; +volatile uint16_t g_fm_play_count_down_10ms; +volatile int8_t g_fm_scan_state; +bool g_fm_auto_scan; +uint8_t g_fm_channel_position; +bool g_fm_found_frequency; +bool g_fm_auto_scan; +uint8_t g_fm_resume_count_down_500ms; +uint16_t g_fm_restore_count_down_10ms; bool FM_CheckValidChannel(uint8_t Channel) { - return (Channel < ARRAY_SIZE(gFM_Channels) && (gFM_Channels[Channel] >= 760 && gFM_Channels[Channel] < 1080)) ? true : false; + return (Channel < ARRAY_SIZE(g_fm_channels) && (g_fm_channels[Channel] >= 760 && g_fm_channels[Channel] < 1080)) ? true : false; } uint8_t FM_FindNextChannel(uint8_t Channel, uint8_t Direction) { unsigned int i; - for (i = 0; i < ARRAY_SIZE(gFM_Channels); i++) + for (i = 0; i < ARRAY_SIZE(g_fm_channels); i++) { if (Channel == 0xFF) - Channel = ARRAY_SIZE(gFM_Channels) - 1; + Channel = ARRAY_SIZE(g_fm_channels) - 1; else - if (Channel >= ARRAY_SIZE(gFM_Channels)) + if (Channel >= ARRAY_SIZE(g_fm_channels)) Channel = 0; if (FM_CheckValidChannel(Channel)) return Channel; @@ -85,7 +85,7 @@ int FM_ConfigureChannelState(void) return -1; } g_eeprom.fm_selected_channel = Channel; - g_eeprom.fm_frequency_playing = gFM_Channels[Channel]; + g_eeprom.fm_frequency_playing = g_fm_channels[Channel]; } return 0; @@ -93,17 +93,17 @@ int FM_ConfigureChannelState(void) void FM_TurnOff(void) { - gFmRadioMode = false; - gFM_ScanState = FM_SCAN_OFF; - gFM_RestoreCountdown_10ms = 0; + g_fm_radio_mode = false; + g_fm_scan_state = FM_SCAN_OFF; + g_fm_restore_count_down_10ms = 0; GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); - gEnableSpeaker = false; + g_enable_speaker = false; BK1080_Init(0, false); - gUpdateStatus = true; + g_update_status = true; } void FM_EraseChannels(void) @@ -115,24 +115,24 @@ void FM_EraseChannels(void) for (i = 0; i < 5; i++) EEPROM_WriteBuffer(0x0E40 + (i * 8), Template); - memset(gFM_Channels, 0xFF, sizeof(gFM_Channels)); + memset(g_fm_channels, 0xFF, sizeof(g_fm_channels)); } -void FM_Tune(uint16_t Frequency, int8_t Step, bool bFlag) +void FM_Tune(uint16_t Frequency, int8_t Step, bool flag) { GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); - gEnableSpeaker = false; + g_enable_speaker = false; - gFmPlayCountdown_10ms = (gFM_ScanState == FM_SCAN_OFF) ? fm_play_countdown_noscan_10ms : fm_play_countdown_scan_10ms; + g_fm_play_count_down_10ms = (g_fm_scan_state == FM_SCAN_OFF) ? fm_play_countdown_noscan_10ms : fm_play_countdown_scan_10ms; - gScheduleFM = false; - gFM_FoundFrequency = false; - gAskToSave = false; - gAskToDelete = false; + g_schedule_fm = false; + g_fm_found_frequency = false; + g_ask_to_save = false; + g_ask_to_delete = false; g_eeprom.fm_frequency_playing = Frequency; - if (!bFlag) + if (!flag) { Frequency += Step; if (Frequency < g_eeprom.fm_lower_limit) @@ -144,16 +144,16 @@ void FM_Tune(uint16_t Frequency, int8_t Step, bool bFlag) g_eeprom.fm_frequency_playing = Frequency; } - gFM_ScanState = Step; + g_fm_scan_state = Step; BK1080_SetFrequency(g_eeprom.fm_frequency_playing); } void FM_PlayAndUpdate(void) { - gFM_ScanState = FM_SCAN_OFF; + g_fm_scan_state = FM_SCAN_OFF; - if (gFM_AutoScan) + if (g_fm_auto_scan) { g_eeprom.fm_is_channel_mode = true; g_eeprom.fm_selected_channel = 0; @@ -163,13 +163,13 @@ void FM_PlayAndUpdate(void) BK1080_SetFrequency(g_eeprom.fm_frequency_playing); SETTINGS_SaveFM(); - gFmPlayCountdown_10ms = 0; - gScheduleFM = false; - gAskToSave = false; + g_fm_play_count_down_10ms = 0; + g_schedule_fm = false; + g_ask_to_save = false; GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); - gEnableSpeaker = true; + g_enable_speaker = true; } int FM_CheckFrequencyLock(uint16_t Frequency, uint16_t LowerLimit) @@ -224,33 +224,33 @@ Bail: return ret; } -static void FM_Key_DIGITS(key_code_t Key, bool bKeyPressed, bool bKeyHeld) +static void FM_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held) { #define STATE_FREQ_MODE 0 #define STATE_USER_MODE 1 #define STATE_SAVE 2 - if (!bKeyHeld && bKeyPressed) + if (!key_held && key_pressed) { - if (!g_was_f_key_pressed) + if (!g_f_key_was_pressed) { uint8_t State; - if (gAskToDelete) + if (g_ask_to_delete) { - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } - if (gAskToSave) + if (g_ask_to_save) { State = STATE_SAVE; } else { - if (gFM_ScanState != FM_SCAN_OFF) + if (g_fm_scan_state != FM_SCAN_OFF) { - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } @@ -259,32 +259,32 @@ static void FM_Key_DIGITS(key_code_t Key, bool bKeyPressed, bool bKeyHeld) INPUTBOX_Append(Key); - gRequestDisplayScreen = DISPLAY_FM; + g_request_display_screen = DISPLAY_FM; if (State == STATE_FREQ_MODE) { - if (gInputBoxIndex == 1) + if (g_input_box_index == 1) { - if (gInputBox[0] > 1) + if (g_input_box[0] > 1) { - gInputBox[1] = gInputBox[0]; - gInputBox[0] = 0; - gInputBoxIndex = 2; + g_input_box[1] = g_input_box[0]; + g_input_box[0] = 0; + g_input_box_index = 2; } } else - if (gInputBoxIndex > 3) + if (g_input_box_index > 3) { uint32_t Frequency; - gInputBoxIndex = 0; - NUMBER_Get(gInputBox, &Frequency); + g_input_box_index = 0; + NUMBER_Get(g_input_box, &Frequency); Frequency /= 10000; if (Frequency < g_eeprom.fm_lower_limit || g_eeprom.fm_upper_limit < Frequency) { - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; - gRequestDisplayScreen = DISPLAY_FM; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_request_display_screen = DISPLAY_FM; return; } @@ -296,17 +296,17 @@ static void FM_Key_DIGITS(key_code_t Key, bool bKeyPressed, bool bKeyHeld) g_eeprom.fm_frequency_playing = g_eeprom.fm_selected_frequency; BK1080_SetFrequency(g_eeprom.fm_frequency_playing); - gRequestSaveFM = true; + g_request_save_fm = true; return; } } else - if (gInputBoxIndex == 2) + if (g_input_box_index == 2) { uint8_t Channel; - gInputBoxIndex = 0; - Channel = ((gInputBox[0] * 10) + gInputBox[1]) - 1; + g_input_box_index = 0; + Channel = ((g_input_box[0] * 10) + g_input_box[1]) - 1; if (State == STATE_USER_MODE) { @@ -316,9 +316,9 @@ static void FM_Key_DIGITS(key_code_t Key, bool bKeyPressed, bool bKeyHeld) g_another_voice_id = (voice_id_t)Key; #endif g_eeprom.fm_selected_channel = Channel; - g_eeprom.fm_frequency_playing = gFM_Channels[Channel]; + g_eeprom.fm_frequency_playing = g_fm_channels[Channel]; BK1080_SetFrequency(g_eeprom.fm_frequency_playing); - gRequestSaveFM = true; + g_request_save_fm = true; return; } } @@ -328,13 +328,13 @@ static void FM_Key_DIGITS(key_code_t Key, bool bKeyPressed, bool bKeyHeld) #ifdef ENABLE_VOICE g_another_voice_id = (voice_id_t)Key; #endif - gRequestDisplayScreen = DISPLAY_FM; - gInputBoxIndex = 0; - gFM_ChannelPosition = Channel; + g_request_display_screen = DISPLAY_FM; + g_input_box_index = 0; + g_fm_channel_position = Channel; return; } - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } @@ -345,10 +345,10 @@ static void FM_Key_DIGITS(key_code_t Key, bool bKeyPressed, bool bKeyHeld) return; } - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; - g_was_f_key_pressed = false; - gUpdateStatus = true; - gRequestDisplayScreen = DISPLAY_FM; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; + g_f_key_was_pressed = false; + g_update_status = true; + g_request_display_screen = DISPLAY_FM; switch (Key) { @@ -362,10 +362,10 @@ static void FM_Key_DIGITS(key_code_t Key, bool bKeyPressed, bool bKeyHeld) if (!FM_ConfigureChannelState()) { BK1080_SetFrequency(g_eeprom.fm_frequency_playing); - gRequestSaveFM = true; + g_request_save_fm = true; } else - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; break; case KEY_2: @@ -377,55 +377,55 @@ static void FM_Key_DIGITS(key_code_t Key, bool bKeyPressed, bool bKeyHeld) break; default: - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; break; } } } -static void FM_Key_EXIT(bool bKeyPressed, bool bKeyHeld) +static void FM_Key_EXIT(bool key_pressed, bool key_held) { - if (bKeyHeld) + if (key_held) return; - if (!bKeyPressed) + if (!key_pressed) return; - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; - if (gFM_ScanState == FM_SCAN_OFF) + if (g_fm_scan_state == FM_SCAN_OFF) { - if (gInputBoxIndex == 0) + if (g_input_box_index == 0) { - if (!gAskToSave && !gAskToDelete) + if (!g_ask_to_save && !g_ask_to_delete) { ACTION_FM(); return; } - gAskToSave = false; - gAskToDelete = false; + g_ask_to_save = false; + g_ask_to_delete = false; } else { - gInputBox[--gInputBoxIndex] = 10; + g_input_box[--g_input_box_index] = 10; - if (gInputBoxIndex) + if (g_input_box_index) { - if (gInputBoxIndex != 1) + if (g_input_box_index != 1) { - gRequestDisplayScreen = DISPLAY_FM; + g_request_display_screen = DISPLAY_FM; return; } - if (gInputBox[0] != 0) + if (g_input_box[0] != 0) { - gRequestDisplayScreen = DISPLAY_FM; + g_request_display_screen = DISPLAY_FM; return; } } - gInputBoxIndex = 0; + g_input_box_index = 0; } #ifdef ENABLE_VOICE @@ -440,107 +440,107 @@ static void FM_Key_EXIT(bool bKeyPressed, bool bKeyHeld) #endif } - gRequestDisplayScreen = DISPLAY_FM; + g_request_display_screen = DISPLAY_FM; } -static void FM_Key_MENU(bool bKeyPressed, bool bKeyHeld) +static void FM_Key_MENU(bool key_pressed, bool key_held) { - if (bKeyHeld) + if (key_held) return; - if (!bKeyPressed) + if (!key_pressed) return; - gRequestDisplayScreen = DISPLAY_FM; - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_request_display_screen = DISPLAY_FM; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; - if (gFM_ScanState == FM_SCAN_OFF) + if (g_fm_scan_state == FM_SCAN_OFF) { if (!g_eeprom.fm_is_channel_mode) { - if (gAskToSave) + if (g_ask_to_save) { - gFM_Channels[gFM_ChannelPosition] = g_eeprom.fm_frequency_playing; - gAskToSave = false; - gRequestSaveFM = true; + g_fm_channels[g_fm_channel_position] = g_eeprom.fm_frequency_playing; + g_ask_to_save = false; + g_request_save_fm = true; } else - gAskToSave = true; + g_ask_to_save = true; } else { - if (gAskToDelete) + if (g_ask_to_delete) { - gFM_Channels[g_eeprom.fm_selected_channel] = 0xFFFF; + g_fm_channels[g_eeprom.fm_selected_channel] = 0xFFFF; FM_ConfigureChannelState(); BK1080_SetFrequency(g_eeprom.fm_frequency_playing); - gRequestSaveFM = true; - gAskToDelete = false; + g_request_save_fm = true; + g_ask_to_delete = false; } else - gAskToDelete = true; + g_ask_to_delete = true; } } else { - if (gFM_AutoScan || !gFM_FoundFrequency) + if (g_fm_auto_scan || !g_fm_found_frequency) { - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; - gInputBoxIndex = 0; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_input_box_index = 0; return; } - if (gAskToSave) + if (g_ask_to_save) { - gFM_Channels[gFM_ChannelPosition] = g_eeprom.fm_frequency_playing; - gAskToSave = false; - gRequestSaveFM = true; + g_fm_channels[g_fm_channel_position] = g_eeprom.fm_frequency_playing; + g_ask_to_save = false; + g_request_save_fm = true; } else - gAskToSave = true; + g_ask_to_save = true; } } -static void FM_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Step) +static void FM_Key_UP_DOWN(bool key_pressed, bool key_held, int8_t Step) { - if (bKeyHeld || !bKeyPressed) + if (key_held || !key_pressed) { - if (gInputBoxIndex) + if (g_input_box_index) return; - if (!bKeyPressed) + if (!key_pressed) return; } else { - if (gInputBoxIndex) + if (g_input_box_index) { - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; } - if (gAskToSave) + if (g_ask_to_save) { - gRequestDisplayScreen = DISPLAY_FM; - gFM_ChannelPosition = NUMBER_AddWithWraparound(gFM_ChannelPosition, Step, 0, 19); + g_request_display_screen = DISPLAY_FM; + g_fm_channel_position = NUMBER_AddWithWraparound(g_fm_channel_position, Step, 0, 19); return; } - if (gFM_ScanState != FM_SCAN_OFF) + if (g_fm_scan_state != FM_SCAN_OFF) { - if (gFM_AutoScan) + if (g_fm_auto_scan) { - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } FM_Tune(g_eeprom.fm_frequency_playing, Step, false); - gRequestDisplayScreen = DISPLAY_FM; + g_request_display_screen = DISPLAY_FM; return; } @@ -551,7 +551,7 @@ static void FM_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Step) goto Bail; g_eeprom.fm_selected_channel = Channel; - g_eeprom.fm_frequency_playing = gFM_Channels[Channel]; + g_eeprom.fm_frequency_playing = g_fm_channels[Channel]; } else { @@ -566,15 +566,15 @@ static void FM_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Step) g_eeprom.fm_selected_frequency = g_eeprom.fm_frequency_playing; } - gRequestSaveFM = true; + g_request_save_fm = true; Bail: BK1080_SetFrequency(g_eeprom.fm_frequency_playing); - gRequestDisplayScreen = DISPLAY_FM; + g_request_display_screen = DISPLAY_FM; } -void FM_ProcessKeys(key_code_t Key, bool bKeyPressed, bool bKeyHeld) +void FM_ProcessKeys(key_code_t Key, bool key_pressed, bool key_held) { switch (Key) { @@ -588,29 +588,29 @@ void FM_ProcessKeys(key_code_t Key, bool bKeyPressed, bool bKeyHeld) case KEY_7: case KEY_8: case KEY_9: - FM_Key_DIGITS(Key, bKeyPressed, bKeyHeld); + FM_Key_DIGITS(Key, key_pressed, key_held); break; case KEY_MENU: - FM_Key_MENU(bKeyPressed, bKeyHeld); + FM_Key_MENU(key_pressed, key_held); return; case KEY_UP: - FM_Key_UP_DOWN(bKeyPressed, bKeyHeld, 1); + FM_Key_UP_DOWN(key_pressed, key_held, 1); break; case KEY_DOWN: - FM_Key_UP_DOWN(bKeyPressed, bKeyHeld, -1); + FM_Key_UP_DOWN(key_pressed, key_held, -1); break;; case KEY_EXIT: - FM_Key_EXIT(bKeyPressed, bKeyHeld); + FM_Key_EXIT(key_pressed, key_held); break; case KEY_F: - GENERIC_Key_F(bKeyPressed, bKeyHeld); + GENERIC_Key_F(key_pressed, key_held); break; case KEY_PTT: - GENERIC_Key_PTT(bKeyPressed); + GENERIC_Key_PTT(key_pressed); break; default: - if (!bKeyHeld && bKeyPressed) - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + if (!key_held && key_pressed) + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; break; } } @@ -619,25 +619,25 @@ void FM_Play(void) { if (!FM_CheckFrequencyLock(g_eeprom.fm_frequency_playing, g_eeprom.fm_lower_limit)) { - if (!gFM_AutoScan) + if (!g_fm_auto_scan) { - gFmPlayCountdown_10ms = 0; - gFM_FoundFrequency = true; + g_fm_play_count_down_10ms = 0; + g_fm_found_frequency = true; if (!g_eeprom.fm_is_channel_mode) g_eeprom.fm_selected_frequency = g_eeprom.fm_frequency_playing; GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); - gEnableSpeaker = true; + g_enable_speaker = true; GUI_SelectNextDisplay(DISPLAY_FM); return; } - if (gFM_ChannelPosition < 20) - gFM_Channels[gFM_ChannelPosition++] = g_eeprom.fm_frequency_playing; + if (g_fm_channel_position < 20) + g_fm_channels[g_fm_channel_position++] = g_eeprom.fm_frequency_playing; - if (gFM_ChannelPosition >= 20) + if (g_fm_channel_position >= 20) { FM_PlayAndUpdate(); GUI_SelectNextDisplay(DISPLAY_FM); @@ -645,26 +645,26 @@ void FM_Play(void) } } - if (gFM_AutoScan && g_eeprom.fm_frequency_playing >= g_eeprom.fm_upper_limit) + if (g_fm_auto_scan && g_eeprom.fm_frequency_playing >= g_eeprom.fm_upper_limit) FM_PlayAndUpdate(); else - FM_Tune(g_eeprom.fm_frequency_playing, gFM_ScanState, false); + FM_Tune(g_eeprom.fm_frequency_playing, g_fm_scan_state, false); GUI_SelectNextDisplay(DISPLAY_FM); } void FM_Start(void) { - gFmRadioMode = true; - gFM_ScanState = FM_SCAN_OFF; - gFM_RestoreCountdown_10ms = 0; + g_fm_radio_mode = true; + g_fm_scan_state = FM_SCAN_OFF; + g_fm_restore_count_down_10ms = 0; BK1080_Init(g_eeprom.fm_frequency_playing, true); GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); - gEnableSpeaker = true; - gUpdateStatus = true; + g_enable_speaker = true; + g_update_status = true; } #endif diff --git a/app/fm.h b/app/fm.h index 41947dc..57ed849 100644 --- a/app/fm.h +++ b/app/fm.h @@ -28,19 +28,19 @@ enum { FM_SCAN_OFF = 0U, }; -extern uint16_t gFM_Channels[20]; -extern bool gFmRadioMode; -extern uint8_t gFmRadioCountdown_500ms; -extern volatile uint16_t gFmPlayCountdown_10ms; -extern volatile int8_t gFM_ScanState; -extern bool gFM_AutoScan; -extern uint8_t gFM_ChannelPosition; +extern uint16_t g_fm_channels[20]; +extern bool g_fm_radio_mode; +extern uint8_t g_fm_radio_count_down_500ms; +extern volatile uint16_t g_fm_play_count_down_10ms; +extern volatile int8_t g_fm_scan_state; +extern bool g_fm_auto_scan; +extern uint8_t g_fm_channel_position; // Doubts about whether this should be signed or not -extern uint16_t gFM_FrequencyDeviation; -extern bool gFM_FoundFrequency; -extern bool gFM_AutoScan; -extern uint8_t gFM_ResumeCountdown_500ms; -extern uint16_t gFM_RestoreCountdown_10ms; +extern uint16_t g_fm_frequency_deviation; +extern bool g_fm_found_frequency; +extern bool g_fm_auto_scan; +extern uint8_t g_fm_resume_count_down_500ms; +extern uint16_t g_fm_restore_count_down_10ms; bool FM_CheckValidChannel(uint8_t Channel); uint8_t FM_FindNextChannel(uint8_t Channel, uint8_t Direction); diff --git a/app/generic.c b/app/generic.c index 25c223c..332c64e 100644 --- a/app/generic.c +++ b/app/generic.c @@ -33,31 +33,31 @@ #include "ui/inputbox.h" #include "ui/ui.h" -void GENERIC_Key_F(bool bKeyPressed, bool bKeyHeld) +void GENERIC_Key_F(bool key_pressed, bool key_held) { - if (gInputBoxIndex > 0) + if (g_input_box_index > 0) { - if (!bKeyHeld && bKeyPressed) - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + if (!key_held && key_pressed) + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } - if (bKeyHeld || !bKeyPressed) + if (key_held || !key_pressed) { - if (bKeyHeld || bKeyPressed) + if (key_held || key_pressed) { - if (!bKeyHeld) + if (!key_held) return; - if (!bKeyPressed) + if (!key_pressed) return; - if (gScreenToDisplay != DISPLAY_MENU && - gScreenToDisplay != DISPLAY_FM && + if (g_screen_to_display != DISPLAY_MENU && + g_screen_to_display != DISPLAY_FM && #ifdef ENABLE_FMRADIO - !gFmRadioMode && + !g_fm_radio_mode && #endif - gCurrentFunction != FUNCTION_TRANSMIT) + g_current_function != FUNCTION_TRANSMIT) { // toggle the keyboad lock #ifdef ENABLE_VOICE @@ -66,65 +66,65 @@ void GENERIC_Key_F(bool bKeyPressed, bool bKeyHeld) g_eeprom.key_lock = !g_eeprom.key_lock; - gRequestSaveSettings = true; + g_request_save_settings = true; } } else { #ifdef ENABLE_FMRADIO - if ((gFmRadioMode || gScreenToDisplay != DISPLAY_MAIN) && gScreenToDisplay != DISPLAY_FM) + if ((g_fm_radio_mode || g_screen_to_display != DISPLAY_MAIN) && g_screen_to_display != DISPLAY_FM) return; #else - if (gScreenToDisplay != DISPLAY_MAIN) + if (g_screen_to_display != DISPLAY_MAIN) return; #endif - g_was_f_key_pressed = !g_was_f_key_pressed; + g_f_key_was_pressed = !g_f_key_was_pressed; - if (g_was_f_key_pressed) - gKeyInputCountdown = key_input_timeout_500ms; + if (g_f_key_was_pressed) + g_key_input_count_down = key_input_timeout_500ms; #ifdef ENABLE_VOICE - if (!g_was_f_key_pressed) + if (!g_f_key_was_pressed) g_another_voice_id = VOICE_ID_CANCEL; #endif - gUpdateStatus = true; + g_update_status = true; } } else { - if (gScreenToDisplay != DISPLAY_FM) + if (g_screen_to_display != DISPLAY_FM) { - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; return; } #ifdef ENABLE_FMRADIO - if (gFM_ScanState == FM_SCAN_OFF) + if (g_fm_scan_state == FM_SCAN_OFF) { - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; return; } #endif - gBeepToPlay = BEEP_440HZ_500MS; + g_beep_to_play = BEEP_440HZ_500MS; - gPttWasReleased = true; + g_ptt_was_released = true; } } -void GENERIC_Key_PTT(bool bKeyPressed) +void GENERIC_Key_PTT(bool key_pressed) { - gInputBoxIndex = 0; + g_input_box_index = 0; - if (!bKeyPressed || gSerialConfigCountDown_500ms > 0) + if (!key_pressed || g_serial_config_count_down_500ms > 0) { // PTT released - if (gCurrentFunction == FUNCTION_TRANSMIT) + if (g_current_function == FUNCTION_TRANSMIT) { // we are transmitting .. stop - if (gFlagEndTransmission) + if (g_flag_end_tx) { FUNCTION_Select(FUNCTION_FOREGROUND); } @@ -135,19 +135,19 @@ void GENERIC_Key_PTT(bool bKeyPressed) if (g_eeprom.repeater_tail_tone_elimination == 0) FUNCTION_Select(FUNCTION_FOREGROUND); else - gRTTECountdown = g_eeprom.repeater_tail_tone_elimination * 10; + g_rtte_count_down = g_eeprom.repeater_tail_tone_elimination * 10; } - gFlagEndTransmission = false; + g_flag_end_tx = false; #ifdef ENABLE_VOX - gVOX_NoiseDetected = false; + g_vox_noise_detected = false; #endif - RADIO_SetVfoState(VFO_STATE_NORMAL); + RADIO_Setg_vfo_state(VFO_STATE_NORMAL); - if (gScreenToDisplay != DISPLAY_MENU) // 1of11 .. don't close the menu - gRequestDisplayScreen = DISPLAY_MAIN; + if (g_screen_to_display != DISPLAY_MENU) // 1of11 .. don't close the menu + g_request_display_screen = DISPLAY_MAIN; } return; @@ -155,25 +155,25 @@ void GENERIC_Key_PTT(bool bKeyPressed) // PTT pressed - if (gScanStateDir != SCAN_OFF || // frequency/channel scanning - gScreenToDisplay == DISPLAY_SCANNER || // CTCSS/CDCSS scanning - gCssScanMode != CSS_SCAN_MODE_OFF) // " " + if (g_scan_state_dir != SCAN_OFF || // frequency/channel scanning + g_screen_to_display == DISPLAY_SCANNER || // CTCSS/CDCSS scanning + g_css_scan_mode != CSS_SCAN_MODE_OFF) // " " { // we're scanning .. stop - if (gScreenToDisplay == DISPLAY_SCANNER) + if (g_screen_to_display == DISPLAY_SCANNER) { // CTCSS/CDCSS scanning .. stop - g_eeprom.cross_vfo_rx_tx = gBackup_cross_vfo_rx_tx; - gFlagStopScan = true; - gVfoConfigureMode = VFO_CONFIGURE_RELOAD; - gFlagResetVfos = true; + g_eeprom.cross_vfo_rx_tx = g_backup_cross_vfo_rx_tx; + g_flag_stop_scan = true; + g_vfo_configure_mode = VFO_CONFIGURE_RELOAD; + g_flag_reset_vfos = true; } else - if (gScanStateDir != SCAN_OFF) + if (g_scan_state_dir != SCAN_OFF) { // frequency/channel scanning . .stop SCANNER_Stop(); } else - if (gCssScanMode != CSS_SCAN_MODE_OFF) + if (g_css_scan_mode != CSS_SCAN_MODE_OFF) { // CTCSS/CDCSS scanning .. stop MENU_StopCssScan(); @@ -186,87 +186,87 @@ void GENERIC_Key_PTT(bool bKeyPressed) } #ifdef ENABLE_FMRADIO - if (gFM_ScanState != FM_SCAN_OFF) + if (g_fm_scan_state != FM_SCAN_OFF) { // FM radio is scanning .. stop FM_PlayAndUpdate(); #ifdef ENABLE_VOICE g_another_voice_id = VOICE_ID_SCANNING_STOP; #endif - gRequestDisplayScreen = DISPLAY_FM; + g_request_display_screen = DISPLAY_FM; goto cancel_tx; } #endif #ifdef ENABLE_FMRADIO - if (gScreenToDisplay == DISPLAY_FM) + if (g_screen_to_display == DISPLAY_FM) goto start_tx; // listening to the FM radio .. start TX'ing #endif - if (gCurrentFunction == FUNCTION_TRANSMIT && gRTTECountdown == 0) + if (g_current_function == FUNCTION_TRANSMIT && g_rtte_count_down == 0) { // already transmitting - gInputBoxIndex = 0; + g_input_box_index = 0; return; } - if (gScreenToDisplay != DISPLAY_MENU) // 1of11 .. don't close the menu - gRequestDisplayScreen = DISPLAY_MAIN; + if (g_screen_to_display != DISPLAY_MENU) // 1of11 .. don't close the menu + g_request_display_screen = DISPLAY_MAIN; - if (!gDTMF_InputMode && gDTMF_InputBox_Index == 0) + if (!g_dtmf_input_mode && g_dtmf_input_box_index == 0) goto start_tx; // wasn't entering a DTMF code .. start TX'ing (maybe) // was entering a DTMF string - if (gDTMF_InputBox_Index > 0 || gDTMF_PreviousIndex > 0) + if (g_dtmf_input_box_index > 0 || g_dtmf_prev_index > 0) { // going to transmit a DTMF string - if (gDTMF_InputBox_Index == 0 && gDTMF_PreviousIndex > 0) - gDTMF_InputBox_Index = gDTMF_PreviousIndex; // use the previous DTMF string + if (g_dtmf_input_box_index == 0 && g_dtmf_prev_index > 0) + g_dtmf_input_box_index = g_dtmf_prev_index; // use the previous DTMF string - if (gDTMF_InputBox_Index < sizeof(gDTMF_InputBox)) - gDTMF_InputBox[gDTMF_InputBox_Index] = 0; // NULL term the string + if (g_dtmf_input_box_index < sizeof(g_dtmf_input_box)) + g_dtmf_input_box[g_dtmf_input_box_index] = 0; // NULL term the string #if 0 // append our DTMF ID to the inputted DTMF code - // IF the user inputted code is exactly 3 digits long - if (gDTMF_InputBox_Index == 3) - gDTMF_CallMode = DTMF_CheckGroupCall(gDTMF_InputBox, 3); + if (g_dtmf_input_box_index == 3) + g_dtmf_call_mode = DTMF_CheckGroupCall(g_dtmf_input_box, 3); else - gDTMF_CallMode = DTMF_CALL_MODE_DTMF; + g_dtmf_call_mode = DTMF_CALL_MODE_DTMF; #else // append our DTMF ID to the inputted DTMF code - // IF the user inputted code is exactly 3 digits long and D-DCD is enabled - if (gDTMF_InputBox_Index == 3 && gTxVfo->DTMF_decoding_enable > 0) - gDTMF_CallMode = DTMF_CheckGroupCall(gDTMF_InputBox, 3); + if (g_dtmf_input_box_index == 3 && g_tx_vfo->dtmf_decoding_enable > 0) + g_dtmf_call_mode = DTMF_CheckGroupCall(g_dtmf_input_box, 3); else - gDTMF_CallMode = DTMF_CALL_MODE_DTMF; + g_dtmf_call_mode = DTMF_CALL_MODE_DTMF; #endif // remember the DTMF string - gDTMF_PreviousIndex = gDTMF_InputBox_Index; - strcpy(gDTMF_String, gDTMF_InputBox); + g_dtmf_prev_index = g_dtmf_input_box_index; + strcpy(g_dtmf_string, g_dtmf_input_box); - gDTMF_ReplyState = DTMF_REPLY_ANI; - gDTMF_State = DTMF_STATE_0; + g_dtmf_reply_state = DTMF_REPLY_ANI; + g_dtmf_state = DTMF_STATE_0; } DTMF_clear_input_box(); start_tx: // request start TX - gFlagPrepareTX = true; + g_flag_prepare_tx = true; goto done; - + cancel_tx: - if (gPttIsPressed) + if (g_ptt_is_pressed) { - gPttIsPressed = false; - gPttWasPressed = true; + g_ptt_is_pressed = false; + g_ptt_was_pressed = true; } -done: - gPttDebounceCounter = 0; - if (gScreenToDisplay != DISPLAY_MENU && gRequestDisplayScreen != DISPLAY_FM) // 1of11 .. don't close the menu - gRequestDisplayScreen = DISPLAY_MAIN; - gUpdateStatus = true; - gUpdateDisplay = true; +done: + g_ptt_debounce_counter = 0; + if (g_screen_to_display != DISPLAY_MENU && g_request_display_screen != DISPLAY_FM) // 1of11 .. don't close the menu + g_request_display_screen = DISPLAY_MAIN; + g_update_status = true; + g_update_display = true; } diff --git a/app/main.c b/app/main.c index 75b380e..4853ca9 100644 --- a/app/main.c +++ b/app/main.c @@ -41,28 +41,28 @@ void toggle_chan_scanlist(void) { // toggle the selected channels scanlist setting - if (gScreenToDisplay == DISPLAY_SCANNER || !IS_USER_CHANNEL(gTxVfo->channel_save)) + if (g_screen_to_display == DISPLAY_SCANNER || !IS_USER_CHANNEL(g_tx_vfo->channel_save)) return; - if (gTxVfo->scanlist_1_participation) + if (g_tx_vfo->scanlist_1_participation) { - if (gTxVfo->scanlist_2_participation) - gTxVfo->scanlist_1_participation = 0; + if (g_tx_vfo->scanlist_2_participation) + g_tx_vfo->scanlist_1_participation = 0; else - gTxVfo->scanlist_2_participation = 1; + g_tx_vfo->scanlist_2_participation = 1; } else { - if (gTxVfo->scanlist_2_participation) - gTxVfo->scanlist_2_participation = 0; + if (g_tx_vfo->scanlist_2_participation) + g_tx_vfo->scanlist_2_participation = 0; else - gTxVfo->scanlist_1_participation = 1; + g_tx_vfo->scanlist_1_participation = 1; } - SETTINGS_UpdateChannel(gTxVfo->channel_save, gTxVfo, true); + SETTINGS_UpdateChannel(g_tx_vfo->channel_save, g_tx_vfo, true); - gVfoConfigureMode = VFO_CONFIGURE; - gFlagResetVfos = true; + g_vfo_configure_mode = VFO_CONFIGURE; + g_flag_reset_vfos = true; } static void processFKeyFunction(const key_code_t Key, const bool beep) @@ -70,15 +70,15 @@ static void processFKeyFunction(const key_code_t Key, const bool beep) uint8_t Band; uint8_t Vfo = g_eeprom.tx_vfo; - if (gScreenToDisplay == DISPLAY_MENU) + if (g_screen_to_display == DISPLAY_MENU) { // if (beep) - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } - + // if (beep) - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; switch (Key) { @@ -95,34 +95,34 @@ static void processFKeyFunction(const key_code_t Key, const bool beep) break; case KEY_1: - if (!IS_FREQ_CHANNEL(gTxVfo->channel_save)) + if (!IS_FREQ_CHANNEL(g_tx_vfo->channel_save)) { - g_was_f_key_pressed = false; - gUpdateStatus = true; - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_f_key_was_pressed = false; + g_update_status = true; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; return; } - Band = gTxVfo->band + 1; - if (gSetting_350EN || Band != BAND5_350MHz) + Band = g_tx_vfo->band + 1; + if (g_setting_350_enable || Band != BAND5_350MHz) { if (Band > BAND7_470MHz) Band = BAND1_50MHz; } else Band = BAND6_400MHz; - gTxVfo->band = Band; + g_tx_vfo->band = Band; g_eeprom.screen_channel[Vfo] = FREQ_CHANNEL_FIRST + Band; g_eeprom.freq_channel[Vfo] = FREQ_CHANNEL_FIRST + Band; - gRequestSaveVFO = true; - gVfoConfigureMode = VFO_CONFIGURE_RELOAD; + g_request_save_vfo = true; + g_vfo_configure_mode = VFO_CONFIGURE_RELOAD; - gRequestDisplayScreen = DISPLAY_MAIN; + g_request_display_screen = DISPLAY_MAIN; if (beep) - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; break; @@ -141,33 +141,33 @@ static void processFKeyFunction(const key_code_t Key, const bool beep) else g_eeprom.tx_vfo = (Vfo + 1) & 1u; - gRequestSaveSettings = 1; - gFlagReconfigureVfos = true; + g_request_save_settings = 1; + g_flag_reconfigure_vfos = true; - gRequestDisplayScreen = DISPLAY_MAIN; + g_request_display_screen = DISPLAY_MAIN; if (beep) - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; break; case KEY_3: #ifdef ENABLE_NOAA - if (g_eeprom.vfo_open && IS_NOT_NOAA_CHANNEL(gTxVfo->channel_save)) + if (g_eeprom.vfo_open && IS_NOT_NOAA_CHANNEL(g_tx_vfo->channel_save)) #else if (g_eeprom.vfo_open) #endif { uint8_t Channel; - if (IS_USER_CHANNEL(gTxVfo->channel_save)) + if (IS_USER_CHANNEL(g_tx_vfo->channel_save)) { // swap to frequency mode g_eeprom.screen_channel[Vfo] = g_eeprom.freq_channel[g_eeprom.tx_vfo]; #ifdef ENABLE_VOICE g_another_voice_id = VOICE_ID_FREQUENCY_MODE; #endif - gRequestSaveVFO = true; - gVfoConfigureMode = VFO_CONFIGURE_RELOAD; + g_request_save_vfo = true; + g_vfo_configure_mode = VFO_CONFIGURE_RELOAD; break; } @@ -180,34 +180,34 @@ static void processFKeyFunction(const key_code_t Key, const bool beep) AUDIO_SetDigitVoice(1, Channel + 1); g_another_voice_id = (voice_id_t)0xFE; #endif - gRequestSaveVFO = true; - gVfoConfigureMode = VFO_CONFIGURE_RELOAD; + g_request_save_vfo = true; + g_vfo_configure_mode = VFO_CONFIGURE_RELOAD; break; } } if (beep) - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; break; case KEY_4: - g_was_f_key_pressed = false; - gFlagStartScan = true; - gScanSingleFrequency = false; - gBackup_cross_vfo_rx_tx = g_eeprom.cross_vfo_rx_tx; + g_f_key_was_pressed = false; + g_flag_start_scan = true; + g_scan_single_frequency = false; + g_backup_cross_vfo_rx_tx = g_eeprom.cross_vfo_rx_tx; g_eeprom.cross_vfo_rx_tx = CROSS_BAND_OFF; - gUpdateStatus = true; + g_update_status = true; // if (beep) -// gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; +// g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; break; case KEY_5: #ifdef ENABLE_NOAA - if (IS_NOT_NOAA_CHANNEL(gTxVfo->channel_save)) + if (IS_NOT_NOAA_CHANNEL(g_tx_vfo->channel_save)) { g_eeprom.screen_channel[Vfo] = g_eeprom.noaa_channel[g_eeprom.tx_vfo]; } @@ -218,8 +218,8 @@ static void processFKeyFunction(const key_code_t Key, const bool beep) g_another_voice_id = VOICE_ID_FREQUENCY_MODE; #endif } - gRequestSaveVFO = true; - gVfoConfigureMode = VFO_CONFIGURE_RELOAD; + g_request_save_vfo = true; + g_vfo_configure_mode = VFO_CONFIGURE_RELOAD; #else #ifdef ENABLE_VOX @@ -242,8 +242,8 @@ static void processFKeyFunction(const key_code_t Key, const bool beep) break; case KEY_8: - gTxVfo->frequency_reverse = gTxVfo->frequency_reverse == false; - gRequestSaveChannel = 1; + g_tx_vfo->frequency_reverse = g_tx_vfo->frequency_reverse == false; + g_request_save_channel = 1; break; case KEY_9: @@ -256,42 +256,42 @@ static void processFKeyFunction(const key_code_t Key, const bool beep) AUDIO_SetDigitVoice(1, g_eeprom.chan_1_call + 1); g_another_voice_id = (voice_id_t)0xFE; #endif - gRequestSaveVFO = true; - gVfoConfigureMode = VFO_CONFIGURE_RELOAD; + g_request_save_vfo = true; + g_vfo_configure_mode = VFO_CONFIGURE_RELOAD; break; } if (beep) - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; break; default: - gUpdateStatus = true; - g_was_f_key_pressed = false; + g_update_status = true; + g_f_key_was_pressed = false; if (beep) - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; break; } } -static void MAIN_Key_DIGITS(key_code_t Key, bool bKeyPressed, bool bKeyHeld) +static void MAIN_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held) { - if (bKeyHeld) + if (key_held) { // key held down - if (bKeyPressed) + if (key_pressed) { - if (gScreenToDisplay == DISPLAY_MAIN) + if (g_screen_to_display == DISPLAY_MAIN) { - if (gInputBoxIndex > 0) + if (g_input_box_index > 0) { // delete any inputted chars - gInputBoxIndex = 0; - gRequestDisplayScreen = DISPLAY_MAIN; + g_input_box_index = 0; + g_request_display_screen = DISPLAY_MAIN; } - g_was_f_key_pressed = false; - gUpdateStatus = true; + g_f_key_was_pressed = false; + g_update_status = true; processFKeyFunction(Key, false); } @@ -300,44 +300,44 @@ static void MAIN_Key_DIGITS(key_code_t Key, bool bKeyPressed, bool bKeyHeld) return; } - if (bKeyPressed) + if (key_pressed) { // key is pressed - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; // beep when key is pressed + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; // beep when key is pressed return; // don't use the key till it's released } - if (!g_was_f_key_pressed) + if (!g_f_key_was_pressed) { // F-key wasn't pressed const uint8_t Vfo = g_eeprom.tx_vfo; - gKeyInputCountdown = key_input_timeout_500ms; + g_key_input_count_down = key_input_timeout_500ms; INPUTBOX_Append(Key); - gRequestDisplayScreen = DISPLAY_MAIN; + g_request_display_screen = DISPLAY_MAIN; - if (IS_USER_CHANNEL(gTxVfo->channel_save)) + if (IS_USER_CHANNEL(g_tx_vfo->channel_save)) { // user is entering channel number uint16_t Channel; - if (gInputBoxIndex != 3) + if (g_input_box_index != 3) { #ifdef ENABLE_VOICE g_another_voice_id = (voice_id_t)Key; #endif - gRequestDisplayScreen = DISPLAY_MAIN; + g_request_display_screen = DISPLAY_MAIN; return; } - gInputBoxIndex = 0; + g_input_box_index = 0; - Channel = ((gInputBox[0] * 100) + (gInputBox[1] * 10) + gInputBox[2]) - 1; + Channel = ((g_input_box[0] * 100) + (g_input_box[1] * 10) + g_input_box[2]) - 1; if (!RADIO_CheckValidChannel(Channel, false, 0)) { - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } @@ -347,21 +347,21 @@ static void MAIN_Key_DIGITS(key_code_t Key, bool bKeyPressed, bool bKeyHeld) g_eeprom.user_channel[Vfo] = (uint8_t)Channel; g_eeprom.screen_channel[Vfo] = (uint8_t)Channel; - gRequestSaveVFO = true; - gVfoConfigureMode = VFO_CONFIGURE_RELOAD; + g_request_save_vfo = true; + g_vfo_configure_mode = VFO_CONFIGURE_RELOAD; return; } // #ifdef ENABLE_NOAA -// if (IS_NOT_NOAA_CHANNEL(gTxVfo->channel_save)) +// if (IS_NOT_NOAA_CHANNEL(g_tx_vfo->channel_save)) // #endif - if (IS_FREQ_CHANNEL(gTxVfo->channel_save)) + if (IS_FREQ_CHANNEL(g_tx_vfo->channel_save)) { // user is entering a frequency uint32_t Frequency; - if (gInputBoxIndex < 6) + if (g_input_box_index < 6) { #ifdef ENABLE_VOICE g_another_voice_id = (voice_id_t)Key; @@ -370,14 +370,14 @@ static void MAIN_Key_DIGITS(key_code_t Key, bool bKeyPressed, bool bKeyHeld) return; } - gInputBoxIndex = 0; + g_input_box_index = 0; - NUMBER_Get(gInputBox, &Frequency); + NUMBER_Get(g_input_box, &Frequency); // clamp the frequency entered to some valid value - if (Frequency < frequencyBandTable[0].lower) + if (Frequency < FREQ_BAND_TABLE[0].lower) { - Frequency = frequencyBandTable[0].lower; + Frequency = FREQ_BAND_TABLE[0].lower; } else if (Frequency >= BX4819_band1.upper && Frequency < BX4819_band2.lower) @@ -386,9 +386,9 @@ static void MAIN_Key_DIGITS(key_code_t Key, bool bKeyPressed, bool bKeyHeld) Frequency = (Frequency < center) ? BX4819_band1.upper : BX4819_band2.lower; } else - if (Frequency > frequencyBandTable[ARRAY_SIZE(frequencyBandTable) - 1].upper) + if (Frequency > FREQ_BAND_TABLE[ARRAY_SIZE(FREQ_BAND_TABLE) - 1].upper) { - Frequency = frequencyBandTable[ARRAY_SIZE(frequencyBandTable) - 1].upper; + Frequency = FREQ_BAND_TABLE[ARRAY_SIZE(FREQ_BAND_TABLE) - 1].upper; } { @@ -398,9 +398,9 @@ static void MAIN_Key_DIGITS(key_code_t Key, bool bKeyPressed, bool bKeyHeld) g_another_voice_id = (voice_id_t)Key; #endif - if (gTxVfo->band != band) + if (g_tx_vfo->band != band) { - gTxVfo->band = band; + g_tx_vfo->band = band; g_eeprom.screen_channel[Vfo] = band + FREQ_CHANNEL_FIRST; g_eeprom.freq_channel[Vfo] = band + FREQ_CHANNEL_FIRST; @@ -410,42 +410,42 @@ static void MAIN_Key_DIGITS(key_code_t Key, bool bKeyPressed, bool bKeyHeld) } // Frequency += 75; // is this meant to be rounding ? - Frequency += gTxVfo->step_freq / 2; // no idea, but this is + Frequency += g_tx_vfo->step_freq / 2; // no idea, but this is - Frequency = FREQUENCY_FloorToStep(Frequency, gTxVfo->step_freq, frequencyBandTable[gTxVfo->band].lower); + Frequency = FREQUENCY_FloorToStep(Frequency, g_tx_vfo->step_freq, FREQ_BAND_TABLE[g_tx_vfo->band].lower); if (Frequency >= BX4819_band1.upper && Frequency < BX4819_band2.lower) { // clamp the frequency to the limit const uint32_t center = (BX4819_band1.upper + BX4819_band2.lower) / 2; - Frequency = (Frequency < center) ? BX4819_band1.upper - gTxVfo->step_freq : BX4819_band2.lower; + Frequency = (Frequency < center) ? BX4819_band1.upper - g_tx_vfo->step_freq : BX4819_band2.lower; } - gTxVfo->freq_config_rx.frequency = Frequency; + g_tx_vfo->freq_config_rx.frequency = Frequency; - gRequestSaveChannel = 1; + g_request_save_channel = 1; return; } } #ifdef ENABLE_NOAA else - if (IS_NOAA_CHANNEL(gTxVfo->channel_save)) + if (IS_NOAA_CHANNEL(g_tx_vfo->channel_save)) { // user is entering NOAA channel uint8_t Channel; - if (gInputBoxIndex != 2) + if (g_input_box_index != 2) { #ifdef ENABLE_VOICE g_another_voice_id = (voice_id_t)Key; #endif - gRequestDisplayScreen = DISPLAY_MAIN; + g_request_display_screen = DISPLAY_MAIN; return; } - gInputBoxIndex = 0; + g_input_box_index = 0; - Channel = (gInputBox[0] * 10) + gInputBox[1]; + Channel = (g_input_box[0] * 10) + g_input_box[1]; if (Channel >= 1 && Channel <= ARRAY_SIZE(NoaaFrequencyTable)) { Channel += NOAA_CHANNEL_FIRST; @@ -454,52 +454,52 @@ static void MAIN_Key_DIGITS(key_code_t Key, bool bKeyPressed, bool bKeyHeld) #endif g_eeprom.noaa_channel[Vfo] = Channel; g_eeprom.screen_channel[Vfo] = Channel; - gRequestSaveVFO = true; - gVfoConfigureMode = VFO_CONFIGURE_RELOAD; + g_request_save_vfo = true; + g_vfo_configure_mode = VFO_CONFIGURE_RELOAD; return; } } #endif - gRequestDisplayScreen = DISPLAY_MAIN; - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_request_display_screen = DISPLAY_MAIN; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } - g_was_f_key_pressed = false; - gUpdateStatus = true; + g_f_key_was_pressed = false; + g_update_status = true; processFKeyFunction(Key, true); } -static void MAIN_Key_EXIT(bool bKeyPressed, bool bKeyHeld) +static void MAIN_Key_EXIT(bool key_pressed, bool key_held) { - if (!bKeyHeld && bKeyPressed) + if (!key_held && key_pressed) { // exit key pressed - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; - if (gDTMF_CallState != DTMF_CALL_STATE_NONE && gCurrentFunction != FUNCTION_TRANSMIT) + if (g_dtmf_call_state != DTMF_CALL_STATE_NONE && g_current_function != FUNCTION_TRANSMIT) { // clear CALL mode being displayed - gDTMF_CallState = DTMF_CALL_STATE_NONE; - gUpdateDisplay = true; + g_dtmf_call_state = DTMF_CALL_STATE_NONE; + g_update_display = true; return; } #ifdef ENABLE_FMRADIO - if (!gFmRadioMode) + if (!g_fm_radio_mode) #endif { - if (gScanStateDir == SCAN_OFF) + if (g_scan_state_dir == SCAN_OFF) { - if (gInputBoxIndex == 0) + if (g_input_box_index == 0) return; - gInputBox[--gInputBoxIndex] = 10; + g_input_box[--g_input_box_index] = 10; - gKeyInputCountdown = key_input_timeout_500ms; + g_key_input_count_down = key_input_timeout_500ms; #ifdef ENABLE_VOICE - if (gInputBoxIndex == 0) + if (g_input_box_index == 0) g_another_voice_id = VOICE_ID_CANCEL; #endif } @@ -512,7 +512,7 @@ static void MAIN_Key_EXIT(bool bKeyPressed, bool bKeyHeld) #endif } - gRequestDisplayScreen = DISPLAY_MAIN; + g_request_display_screen = DISPLAY_MAIN; return; } @@ -523,88 +523,88 @@ static void MAIN_Key_EXIT(bool bKeyPressed, bool bKeyHeld) return; } - if (bKeyHeld && bKeyPressed) + if (key_held && key_pressed) { // exit key held down - if (gInputBoxIndex > 0 || gDTMF_InputBox_Index > 0 || gDTMF_InputMode) + if (g_input_box_index > 0 || g_dtmf_input_box_index > 0 || g_dtmf_input_mode) { // cancel key input mode (channel/frequency entry) - gDTMF_InputMode = false; - gDTMF_InputBox_Index = 0; - memset(gDTMF_String, 0, sizeof(gDTMF_String)); - gInputBoxIndex = 0; - gRequestDisplayScreen = DISPLAY_MAIN; - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_dtmf_input_mode = false; + g_dtmf_input_box_index = 0; + memset(g_dtmf_string, 0, sizeof(g_dtmf_string)); + g_input_box_index = 0; + g_request_display_screen = DISPLAY_MAIN; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; } } } -static void MAIN_Key_MENU(const bool bKeyPressed, const bool bKeyHeld) +static void MAIN_Key_MENU(const bool key_pressed, const bool key_held) { - if (bKeyPressed && !bKeyHeld) + if (key_pressed && !key_held) // menu key pressed - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; - if (bKeyHeld) + if (key_held) { // menu key held down (long press) - if (bKeyPressed) + if (key_pressed) { // long press MENU key - g_was_f_key_pressed = false; + g_f_key_was_pressed = false; - if (gScreenToDisplay == DISPLAY_MAIN) + if (g_screen_to_display == DISPLAY_MAIN) { - if (gInputBoxIndex > 0) + if (g_input_box_index > 0) { // delete any inputted chars - gInputBoxIndex = 0; - gRequestDisplayScreen = DISPLAY_MAIN; + g_input_box_index = 0; + g_request_display_screen = DISPLAY_MAIN; } - g_was_f_key_pressed = false; - gUpdateStatus = true; + g_f_key_was_pressed = false; + g_update_status = true; #ifdef ENABLE_COPY_CHAN_TO_VFO - if (g_eeprom.vfo_open && gCssScanMode == CSS_SCAN_MODE_OFF) + if (g_eeprom.vfo_open && g_css_scan_mode == CSS_SCAN_MODE_OFF) { - if (gScanStateDir != SCAN_OFF) + if (g_scan_state_dir != SCAN_OFF) { - if (gCurrentFunction != FUNCTION_INCOMING || - gRxReceptionMode == RX_MODE_NONE || - gScanPauseDelayIn_10ms == 0) + if (g_current_function != FUNCTION_INCOMING || + g_rx_reception_mode == RX_MODE_NONE || + g_scan_pause_delay_in_10ms == 0) { // scan is running (not paused) return; } } - - const unsigned int vfo = get_rx_VFO(); + + const unsigned int vfo = get_RX_VFO(); if (IS_USER_CHANNEL(g_eeprom.screen_channel[vfo])) { // copy channel to VFO, then swap to the VFO - - const unsigned int channel = FREQ_CHANNEL_FIRST + g_eeprom.VfoInfo[vfo].band; + + const unsigned int channel = FREQ_CHANNEL_FIRST + g_eeprom.vfo_info[vfo].band; g_eeprom.screen_channel[vfo] = channel; - g_eeprom.VfoInfo[vfo].channel_save = channel; + g_eeprom.vfo_info[vfo].channel_save = channel; g_eeprom.tx_vfo = vfo; RADIO_SelectVfos(); - RADIO_ApplyOffset(gRxVfo); - RADIO_ConfigureSquelchAndOutputPower(gRxVfo); + RADIO_ApplyOffset(g_rx_vfo); + RADIO_ConfigureSquelchAndOutputPower(g_rx_vfo); RADIO_SetupRegisters(true); - //SETTINGS_SaveChannel(channel, g_eeprom.rx_vfo, gRxVfo, 1); + g_request_save_vfo = true; - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; - gUpdateStatus = true; - gUpdateDisplay = true; + g_update_status = true; + g_update_display = true; } } else { - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; } #endif @@ -614,121 +614,121 @@ static void MAIN_Key_MENU(const bool bKeyPressed, const bool bKeyHeld) return; } - if (!bKeyPressed && !gDTMF_InputMode) + if (!key_pressed && !g_dtmf_input_mode) { // menu key released - const bool bFlag = (gInputBoxIndex == 0); - gInputBoxIndex = 0; + const bool flag = (g_input_box_index == 0); + g_input_box_index = 0; - if (bFlag) + if (flag) { - gFlagRefreshSetting = true; - gRequestDisplayScreen = DISPLAY_MENU; + g_flag_refresh_menu = true; + g_request_display_screen = DISPLAY_MENU; #ifdef ENABLE_VOICE g_another_voice_id = VOICE_ID_MENU; #endif } else { - gRequestDisplayScreen = DISPLAY_MAIN; + g_request_display_screen = DISPLAY_MAIN; } } } -static void MAIN_Key_STAR(bool bKeyPressed, bool bKeyHeld) +static void MAIN_Key_STAR(bool key_pressed, bool key_held) { - if (gCurrentFunction == FUNCTION_TRANSMIT) + if (g_current_function == FUNCTION_TRANSMIT) return; - - if (gInputBoxIndex > 0) + + if (g_input_box_index > 0) { // entering a frequency or DTMF string - if (!bKeyHeld && bKeyPressed) - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + if (!key_held && key_pressed) + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } - if (bKeyHeld && !g_was_f_key_pressed) + if (key_held && !g_f_key_was_pressed) { // long press .. toggle scanning - if (!bKeyPressed) + if (!key_pressed) return; // released ACTION_Scan(false); - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; return; } - if (bKeyPressed) + if (key_pressed) { // just pressed -// gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; - gBeepToPlay = BEEP_880HZ_40MS_OPTIONAL; +// g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; + g_beep_to_play = BEEP_880HZ_40MS_OPTIONAL; return; } - + // just released - - if (!g_was_f_key_pressed) + + if (!g_f_key_was_pressed) { // pressed without the F-key #ifdef ENABLE_NOAA - if (gScanStateDir == SCAN_OFF && IS_NOT_NOAA_CHANNEL(gTxVfo->channel_save)) + if (g_scan_state_dir == SCAN_OFF && IS_NOT_NOAA_CHANNEL(g_tx_vfo->channel_save)) #else - if (gScanStateDir == SCAN_OFF) + if (g_scan_state_dir == SCAN_OFF) #endif { // start entering a DTMF string - memmove(gDTMF_InputBox, gDTMF_String, MIN(sizeof(gDTMF_InputBox), sizeof(gDTMF_String) - 1)); - gDTMF_InputBox_Index = 0; - gDTMF_InputMode = true; + memmove(g_dtmf_input_box, g_dtmf_string, MIN(sizeof(g_dtmf_input_box), sizeof(g_dtmf_string) - 1)); + g_dtmf_input_box_index = 0; + g_dtmf_input_mode = true; - gKeyInputCountdown = key_input_timeout_500ms; + g_key_input_count_down = key_input_timeout_500ms; - gRequestDisplayScreen = DISPLAY_MAIN; + g_request_display_screen = DISPLAY_MAIN; } } else { // with the F-key - g_was_f_key_pressed = false; + g_f_key_was_pressed = false; #ifdef ENABLE_NOAA - if (IS_NOAA_CHANNEL(gTxVfo->channel_save)) + if (IS_NOAA_CHANNEL(g_tx_vfo->channel_save)) { - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; - } + } #endif // scan the CTCSS/DCS code - gFlagStartScan = true; - gScanSingleFrequency = true; - gBackup_cross_vfo_rx_tx = g_eeprom.cross_vfo_rx_tx; + g_flag_start_scan = true; + g_scan_single_frequency = true; + g_backup_cross_vfo_rx_tx = g_eeprom.cross_vfo_rx_tx; g_eeprom.cross_vfo_rx_tx = CROSS_BAND_OFF; } - - gPttWasReleased = true; - gUpdateStatus = true; + g_ptt_was_released = true; + + g_update_status = true; } -static void MAIN_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Direction) +static void MAIN_Key_UP_DOWN(bool key_pressed, bool key_held, int8_t Direction) { uint8_t Channel = g_eeprom.screen_channel[g_eeprom.tx_vfo]; - if (bKeyHeld || !bKeyPressed) + if (key_held || !key_pressed) { // long press - if (gInputBoxIndex > 0) + if (g_input_box_index > 0) return; - if (!bKeyPressed) + if (!key_pressed) { - if (!bKeyHeld) + if (!key_held) return; if (IS_FREQ_CHANNEL(Channel)) return; #ifdef ENABLE_VOICE - AUDIO_SetDigitVoice(0, gTxVfo->channel_save + 1); + AUDIO_SetDigitVoice(0, g_tx_vfo->channel_save + 1); g_another_voice_id = (voice_id_t)0xFE; #endif @@ -737,16 +737,16 @@ static void MAIN_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Direction) } else { - if (gInputBoxIndex > 0) + if (g_input_box_index > 0) { - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; } - if (gScanStateDir == SCAN_OFF) + if (g_scan_state_dir == SCAN_OFF) { #ifdef ENABLE_NOAA if (IS_NOT_NOAA_CHANNEL(Channel)) @@ -756,17 +756,17 @@ static void MAIN_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Direction) if (IS_FREQ_CHANNEL(Channel)) { // step/down in frequency - const uint32_t frequency = APP_SetFrequencyByStep(gTxVfo, Direction); + const uint32_t frequency = APP_SetFrequencyByStep(g_tx_vfo, Direction); if (RX_freq_check(frequency) < 0) { // frequency not allowed - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } - gTxVfo->freq_config_rx.frequency = frequency; + g_tx_vfo->freq_config_rx.frequency = frequency; - gRequestSaveChannel = 1; + g_request_save_channel = 1; return; } @@ -777,10 +777,10 @@ static void MAIN_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Direction) if (Channel == Next) return; - g_eeprom.user_channel[g_eeprom.tx_vfo] = Next; + g_eeprom.user_channel[g_eeprom.tx_vfo] = Next; g_eeprom.screen_channel[g_eeprom.tx_vfo] = Next; - if (!bKeyHeld) + if (!key_held) { #ifdef ENABLE_VOICE AUDIO_SetDigitVoice(0, Next + 1); @@ -797,40 +797,40 @@ static void MAIN_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Direction) } #endif - gRequestSaveVFO = true; - gVfoConfigureMode = VFO_CONFIGURE_RELOAD; + g_request_save_vfo = true; + g_vfo_configure_mode = VFO_CONFIGURE_RELOAD; return; } // jump to the next channel CHANNEL_Next(false, Direction); - gScanPauseDelayIn_10ms = 1; - gScheduleScanListen = false; + g_scan_pause_delay_in_10ms = 1; + g_schedule_scan_listen = false; - gPttWasReleased = true; + g_ptt_was_released = true; } -void MAIN_ProcessKeys(key_code_t Key, bool bKeyPressed, bool bKeyHeld) +void MAIN_ProcessKeys(key_code_t Key, bool key_pressed, bool key_held) { #ifdef ENABLE_FMRADIO - if (gFmRadioMode && Key != KEY_PTT && Key != KEY_EXIT) + if (g_fm_radio_mode && Key != KEY_PTT && Key != KEY_EXIT) { - if (!bKeyHeld && bKeyPressed) - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + if (!key_held && key_pressed) + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } #endif - if (gDTMF_InputMode && bKeyPressed && !bKeyHeld) + if (g_dtmf_input_mode && key_pressed && !key_held) { const char Character = DTMF_GetCharacter(Key); if (Character != 0xFF) { // add key to DTMF string DTMF_Append(Character); - gKeyInputCountdown = key_input_timeout_500ms; - gRequestDisplayScreen = DISPLAY_MAIN; - gPttWasReleased = true; - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_key_input_count_down = key_input_timeout_500ms; + g_request_display_screen = DISPLAY_MAIN; + g_ptt_was_released = true; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; return; } } @@ -853,32 +853,32 @@ void MAIN_ProcessKeys(key_code_t Key, bool bKeyPressed, bool bKeyHeld) case KEY_7: case KEY_8: case KEY_9: - MAIN_Key_DIGITS(Key, bKeyPressed, bKeyHeld); + MAIN_Key_DIGITS(Key, key_pressed, key_held); break; case KEY_MENU: - MAIN_Key_MENU(bKeyPressed, bKeyHeld); + MAIN_Key_MENU(key_pressed, key_held); break; case KEY_UP: - MAIN_Key_UP_DOWN(bKeyPressed, bKeyHeld, 1); + MAIN_Key_UP_DOWN(key_pressed, key_held, 1); break; case KEY_DOWN: - MAIN_Key_UP_DOWN(bKeyPressed, bKeyHeld, -1); + MAIN_Key_UP_DOWN(key_pressed, key_held, -1); break; case KEY_EXIT: - MAIN_Key_EXIT(bKeyPressed, bKeyHeld); + MAIN_Key_EXIT(key_pressed, key_held); break; case KEY_STAR: - MAIN_Key_STAR(bKeyPressed, bKeyHeld); + MAIN_Key_STAR(key_pressed, key_held); break; case KEY_F: - GENERIC_Key_F(bKeyPressed, bKeyHeld); + GENERIC_Key_F(key_pressed, key_held); break; case KEY_PTT: - GENERIC_Key_PTT(bKeyPressed); + GENERIC_Key_PTT(key_pressed); break; default: - if (!bKeyHeld && bKeyPressed) - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + if (!key_held && key_pressed) + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; break; } } diff --git a/app/menu.c b/app/menu.c index a358973..2e4f7af 100644 --- a/app/menu.c +++ b/app/menu.c @@ -77,23 +77,23 @@ void MENU_StartCssScan(int8_t Direction) { - gCssScanMode = CSS_SCAN_MODE_SCANNING; - gUpdateStatus = true; + g_css_scan_mode = CSS_SCAN_MODE_SCANNING; + g_update_status = true; - gMenuScrollDirection = Direction; + g_menu_scroll_direction = Direction; RADIO_SelectVfos(); MENU_SelectNextCode(); - gScanPauseDelayIn_10ms = scan_pause_delay_in_2_10ms; - gScheduleScanListen = false; + g_scan_pause_delay_in_10ms = scan_pause_delay_in_2_10ms; + g_schedule_scan_listen = false; } void MENU_StopCssScan(void) { - gCssScanMode = CSS_SCAN_MODE_OFF; - gUpdateStatus = true; + g_css_scan_mode = CSS_SCAN_MODE_OFF; + g_update_status = true; RADIO_SetupRegisters(true); } @@ -109,89 +109,89 @@ int MENU_GetLimits(uint8_t Cursor, int32_t *pMin, int32_t *pMax) case MENU_STEP: *pMin = 0; - *pMax = ARRAY_SIZE(StepFrequencyTable) - 1; + *pMax = ARRAY_SIZE(STEP_FREQ_TABLE) - 1; break; case MENU_ABR: *pMin = 0; - *pMax = ARRAY_SIZE(gSubMenu_backlight) - 1; + *pMax = ARRAY_SIZE(g_sub_menu_backlight) - 1; break; case MENU_F_LOCK: *pMin = 0; - *pMax = ARRAY_SIZE(gSubMenu_F_LOCK) - 1; + *pMax = ARRAY_SIZE(g_sub_menu_f_lock) - 1; break; case MENU_MDF: *pMin = 0; - *pMax = ARRAY_SIZE(gSubMenu_MDF) - 1; + *pMax = ARRAY_SIZE(g_sub_menu_mdf) - 1; break; case MENU_TXP: *pMin = 0; - *pMax = ARRAY_SIZE(gSubMenu_TXP) - 1; + *pMax = ARRAY_SIZE(g_sub_menu_txp) - 1; break; case MENU_SFT_D: *pMin = 0; - *pMax = ARRAY_SIZE(gSubMenu_SFT_D) - 1; + *pMax = ARRAY_SIZE(g_sub_menu_shift_dir) - 1; break; case MENU_TDR: *pMin = 0; -// *pMax = ARRAY_SIZE(gSubMenu_TDR) - 1; - *pMax = ARRAY_SIZE(gSubMenu_OFF_ON) - 1; +// *pMax = ARRAY_SIZE(g_sub_menu_tdr) - 1; + *pMax = ARRAY_SIZE(g_sub_menu_off_on) - 1; break; case MENU_XB: *pMin = 0; - *pMax = ARRAY_SIZE(gSubMenu_XB) - 1; + *pMax = ARRAY_SIZE(g_sub_menu_xb) - 1; break; #ifdef ENABLE_VOICE case MENU_VOICE: *pMin = 0; - *pMax = ARRAY_SIZE(gSubMenu_VOICE) - 1; + *pMax = ARRAY_SIZE(g_sub_menu_voice) - 1; break; #endif case MENU_SC_REV: *pMin = 0; - *pMax = ARRAY_SIZE(gSubMenu_SC_REV) - 1; + *pMax = ARRAY_SIZE(g_sub_menu_sc_rev) - 1; break; case MENU_ROGER: *pMin = 0; - *pMax = ARRAY_SIZE(gSubMenu_ROGER) - 1; + *pMax = ARRAY_SIZE(g_sub_menu_roger_mode) - 1; break; case MENU_PONMSG: *pMin = 0; - *pMax = ARRAY_SIZE(gSubMenu_PONMSG) - 1; + *pMax = ARRAY_SIZE(g_sub_menu_pwr_on_msg) - 1; break; case MENU_R_DCS: case MENU_T_DCS: *pMin = 0; *pMax = 208; - //*pMax = (ARRAY_SIZE(DCS_Options) * 2); + //*pMax = (ARRAY_SIZE(DCS_OPTIONS) * 2); break; case MENU_R_CTCS: case MENU_T_CTCS: *pMin = 0; - *pMax = ARRAY_SIZE(CTCSS_Options) - 1; + *pMax = ARRAY_SIZE(CTCSS_OPTIONS) - 1; break; case MENU_W_N: *pMin = 0; - *pMax = ARRAY_SIZE(gSubMenu_W_N) - 1; + *pMax = ARRAY_SIZE(g_sub_menu_w_n) - 1; break; #ifdef ENABLE_ALARM case MENU_AL_MOD: *pMin = 0; - *pMax = ARRAY_SIZE(gSubMenu_AL_MOD) - 1; + *pMax = ARRAY_SIZE(g_sub_menu_AL_MOD) - 1; break; #endif @@ -200,24 +200,24 @@ int MENU_GetLimits(uint8_t Cursor, int32_t *pMin, int32_t *pMax) case MENU_SIDE2_SHORT: case MENU_SIDE2_LONG: *pMin = 0; - *pMax = ARRAY_SIZE(gSubMenu_SIDE_BUTT) - 1; + *pMax = ARRAY_SIZE(g_sub_menu_SIDE_BUTT) - 1; break; case MENU_RESET: *pMin = 0; - *pMax = ARRAY_SIZE(gSubMenu_RESET) - 1; + *pMax = ARRAY_SIZE(g_sub_menu_RESET) - 1; break; case MENU_COMPAND: case MENU_ABR_ON_TX_RX: *pMin = 0; - *pMax = ARRAY_SIZE(gSubMenu_RX_TX) - 1; + *pMax = ARRAY_SIZE(g_sub_menu_rx_tx) - 1; break; #ifdef ENABLE_AM_FIX_TEST1 case MENU_AM_FIX_TEST1: *pMin = 0; - *pMax = ARRAY_SIZE(gSubMenu_AM_fix_test1) - 1; + *pMax = ARRAY_SIZE(g_sub_menu_AM_fix_test1) - 1; break; #endif @@ -247,17 +247,17 @@ int MENU_GetLimits(uint8_t Cursor, int32_t *pMin, int32_t *pMax) case MENU_SCREN: case MENU_TX_EN: *pMin = 0; - *pMax = ARRAY_SIZE(gSubMenu_OFF_ON) - 1; + *pMax = ARRAY_SIZE(g_sub_menu_off_on) - 1; break; case MENU_SCR: *pMin = 0; - *pMax = ARRAY_SIZE(gSubMenu_SCRAMBLER) - 1; + *pMax = ARRAY_SIZE(g_sub_menu_SCRAMBLER) - 1; break; case MENU_TOT: *pMin = 0; - *pMax = ARRAY_SIZE(gSubMenu_TOT) - 1; + *pMax = ARRAY_SIZE(g_sub_menu_TOT) - 1; break; #ifdef ENABLE_VOX @@ -284,7 +284,7 @@ int MENU_GetLimits(uint8_t Cursor, int32_t *pMin, int32_t *pMax) case MENU_SAVE: *pMin = 0; - *pMax = ARRAY_SIZE(gSubMenu_SAVE) - 1; + *pMax = ARRAY_SIZE(g_sub_menu_SAVE) - 1; break; case MENU_MIC: @@ -300,17 +300,17 @@ int MENU_GetLimits(uint8_t Cursor, int32_t *pMin, int32_t *pMax) case MENU_D_RSP: *pMin = 0; - *pMax = ARRAY_SIZE(gSubMenu_D_RSP) - 1; + *pMax = ARRAY_SIZE(g_sub_menu_D_RSP) - 1; break; case MENU_PTT_ID: *pMin = 0; - *pMax = ARRAY_SIZE(gSubMenu_PTT_ID) - 1; + *pMax = ARRAY_SIZE(g_sub_menu_PTT_ID) - 1; break; case MENU_BAT_TXT: *pMin = 0; - *pMax = ARRAY_SIZE(gSubMenu_BAT_TXT) - 1; + *pMax = ARRAY_SIZE(g_sub_menu_BAT_TXT) - 1; break; case MENU_D_HOLD: @@ -352,86 +352,86 @@ void MENU_AcceptSetting(void) int32_t Min; int32_t Max; uint8_t Code; - FREQ_Config_t *pConfig = &gTxVfo->freq_config_rx; + freq_config_t *pConfig = &g_tx_vfo->freq_config_rx; - if (!MENU_GetLimits(gMenuCursor, &Min, &Max)) + if (!MENU_GetLimits(g_menu_cursor, &Min, &Max)) { - if (gSubMenuSelection < Min) gSubMenuSelection = Min; + if (g_sub_menu_selection < Min) g_sub_menu_selection = Min; else - if (gSubMenuSelection > Max) gSubMenuSelection = Max; + if (g_sub_menu_selection > Max) g_sub_menu_selection = Max; } - switch (gMenuCursor) + switch (g_menu_cursor) { default: return; case MENU_SQL: - g_eeprom.squelch_level = gSubMenuSelection; - gVfoConfigureMode = VFO_CONFIGURE; + g_eeprom.squelch_level = g_sub_menu_selection; + g_vfo_configure_mode = VFO_CONFIGURE; break; case MENU_STEP: - gTxVfo->step_setting = gSubMenuSelection; - if (IS_FREQ_CHANNEL(gTxVfo->channel_save)) + g_tx_vfo->step_setting = g_sub_menu_selection; + if (IS_FREQ_CHANNEL(g_tx_vfo->channel_save)) { - gRequestSaveChannel = 1; + g_request_save_channel = 1; return; } return; case MENU_TXP: - gTxVfo->output_power = gSubMenuSelection; - gRequestSaveChannel = 1; + g_tx_vfo->output_power = g_sub_menu_selection; + g_request_save_channel = 1; return; case MENU_T_DCS: - pConfig = &gTxVfo->freq_config_tx; + pConfig = &g_tx_vfo->freq_config_tx; // Fallthrough case MENU_R_DCS: - if (gSubMenuSelection == 0) + if (g_sub_menu_selection == 0) { if (pConfig->code_type != CODE_TYPE_DIGITAL && pConfig->code_type != CODE_TYPE_REVERSE_DIGITAL) { - gRequestSaveChannel = 1; + g_request_save_channel = 1; return; } Code = 0; pConfig->code_type = CODE_TYPE_OFF; } else - if (gSubMenuSelection < 105) + if (g_sub_menu_selection < 105) { pConfig->code_type = CODE_TYPE_DIGITAL; - Code = gSubMenuSelection - 1; + Code = g_sub_menu_selection - 1; } else { pConfig->code_type = CODE_TYPE_REVERSE_DIGITAL; - Code = gSubMenuSelection - 105; + Code = g_sub_menu_selection - 105; } pConfig->code = Code; - gRequestSaveChannel = 1; + g_request_save_channel = 1; return; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wimplicit-fallthrough=" case MENU_T_CTCS: - pConfig = &gTxVfo->freq_config_tx; + pConfig = &g_tx_vfo->freq_config_tx; case MENU_R_CTCS: - if (gSubMenuSelection == 0) + if (g_sub_menu_selection == 0) { if (pConfig->code_type != CODE_TYPE_CONTINUOUS_TONE) { - gRequestSaveChannel = 1; + g_request_save_channel = 1; return; } - Code = 0; - pConfig->code = Code; + Code = 0; + pConfig->code = Code; pConfig->code_type = CODE_TYPE_OFF; BK4819_ExitSubAu(); @@ -439,106 +439,106 @@ void MENU_AcceptSetting(void) else { pConfig->code_type = CODE_TYPE_CONTINUOUS_TONE; - Code = gSubMenuSelection - 1; - pConfig->code = Code; + Code = g_sub_menu_selection - 1; + pConfig->code = Code; - BK4819_SetCTCSSFrequency(CTCSS_Options[Code]); + BK4819_SetCTCSSFrequency(CTCSS_OPTIONS[Code]); } - gRequestSaveChannel = 1; + g_request_save_channel = 1; return; #pragma GCC diagnostic pop case MENU_SFT_D: - gTxVfo->tx_offset_freq_dir = gSubMenuSelection; - gRequestSaveChannel = 1; + g_tx_vfo->tx_offset_freq_dir = g_sub_menu_selection; + g_request_save_channel = 1; return; case MENU_OFFSET: - gTxVfo->tx_offset_freq = gSubMenuSelection; - gRequestSaveChannel = 1; + g_tx_vfo->tx_offset_freq = g_sub_menu_selection; + g_request_save_channel = 1; return; case MENU_W_N: - gTxVfo->channel_bandwidth = gSubMenuSelection; - gRequestSaveChannel = 1; + g_tx_vfo->channel_bandwidth = g_sub_menu_selection; + g_request_save_channel = 1; return; case MENU_SCR: - gTxVfo->scrambling_type = gSubMenuSelection; + g_tx_vfo->scrambling_type = g_sub_menu_selection; #if 0 - if (gSubMenuSelection > 0 && gSetting_ScrambleEnable) - BK4819_EnableScramble(gSubMenuSelection - 1); + if (g_sub_menu_selection > 0 && g_setting_scramble_enable) + BK4819_EnableScramble(g_sub_menu_selection - 1); else BK4819_DisableScramble(); #endif - gRequestSaveChannel = 1; + g_request_save_channel= 1; return; case MENU_BCL: - gTxVfo->busy_channel_lock = gSubMenuSelection; - gRequestSaveChannel = 1; + g_tx_vfo->busy_channel_lock = g_sub_menu_selection; + g_request_save_channel = 1; return; case MENU_MEM_CH: - gTxVfo->channel_save = gSubMenuSelection; + g_tx_vfo->channel_save = g_sub_menu_selection; #if 0 - g_eeprom.user_channel[0] = gSubMenuSelection; + g_eeprom.user_channel[0] = g_sub_menu_selection; #else - g_eeprom.user_channel[g_eeprom.tx_vfo] = gSubMenuSelection; + g_eeprom.user_channel[g_eeprom.tx_vfo] = g_sub_menu_selection; #endif - gRequestSaveChannel = 2; - gVfoConfigureMode = VFO_CONFIGURE_RELOAD; - gFlagResetVfos = true; + g_request_save_channel = 2; + g_vfo_configure_mode = VFO_CONFIGURE_RELOAD; + g_flag_reset_vfos = true; return; case MENU_MEM_NAME: { // trailing trim for (int i = 9; i >= 0; i--) { - if (edit[i] != ' ' && edit[i] != '_' && edit[i] != 0x00 && edit[i] != 0xff) + if (g_edit[i] != ' ' && g_edit[i] != '_' && g_edit[i] != 0x00 && g_edit[i] != 0xff) break; - edit[i] = ' '; + g_edit[i] = ' '; } } // save the channel name - memset(gTxVfo->name, 0, sizeof(gTxVfo->name)); - memmove(gTxVfo->name, edit, 10); - SETTINGS_SaveChannel(gSubMenuSelection, g_eeprom.tx_vfo, gTxVfo, 3); - gFlagReconfigureVfos = true; + memset(g_tx_vfo->name, 0, sizeof(g_tx_vfo->name)); + memmove(g_tx_vfo->name, g_edit, 10); + SETTINGS_SaveChannel(g_sub_menu_selection, g_eeprom.tx_vfo, g_tx_vfo, 3); + g_flag_reconfigure_vfos = true; return; case MENU_SAVE: - g_eeprom.battery_save = gSubMenuSelection; + g_eeprom.battery_save = g_sub_menu_selection; break; #ifdef ENABLE_VOX case MENU_VOX: - g_eeprom.vox_switch = gSubMenuSelection != 0; + g_eeprom.vox_switch = g_sub_menu_selection != 0; if (g_eeprom.vox_switch) - g_eeprom.vox_level = gSubMenuSelection - 1; + g_eeprom.vox_level = g_sub_menu_selection - 1; BOARD_EEPROM_LoadMoreSettings(); - gFlagReconfigureVfos = true; - gUpdateStatus = true; + g_flag_reconfigure_vfos = true; + g_update_status = true; break; #endif case MENU_ABR: - g_eeprom.backlight = gSubMenuSelection; + g_eeprom.backlight = g_sub_menu_selection; break; case MENU_ABR_ON_TX_RX: - gSetting_backlight_on_tx_rx = gSubMenuSelection; + g_setting_backlight_on_tx_rx = g_sub_menu_selection; break; case MENU_TDR: -// g_eeprom.dual_watch = gSubMenuSelection; - g_eeprom.dual_watch = (gSubMenuSelection > 0) ? 1 + g_eeprom.tx_vfo : DUAL_WATCH_OFF; +// 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; - gFlagReconfigureVfos = true; - gUpdateStatus = true; + g_flag_reconfigure_vfos = true; + g_update_status = true; break; case MENU_XB: @@ -549,244 +549,244 @@ void MENU_AcceptSetting(void) return; #endif - g_eeprom.cross_vfo_rx_tx = gSubMenuSelection; - gFlagReconfigureVfos = true; - gUpdateStatus = true; + g_eeprom.cross_vfo_rx_tx = g_sub_menu_selection; + g_flag_reconfigure_vfos = true; + g_update_status = true; break; case MENU_BEEP: - g_eeprom.beep_control = gSubMenuSelection; + g_eeprom.beep_control = g_sub_menu_selection; break; case MENU_TOT: - g_eeprom.tx_timeout_timer = gSubMenuSelection; + g_eeprom.tx_timeout_timer = g_sub_menu_selection; break; #ifdef ENABLE_VOICE case MENU_VOICE: - g_eeprom.voice_prompt = gSubMenuSelection; - gUpdateStatus = true; + g_eeprom.voice_prompt = g_sub_menu_selection; + g_update_status = true; break; #endif case MENU_SC_REV: - g_eeprom.scan_resume_mode = gSubMenuSelection; + g_eeprom.scan_resume_mode = g_sub_menu_selection; break; case MENU_MDF: - g_eeprom.channel_display_mode = gSubMenuSelection; + g_eeprom.channel_display_mode = g_sub_menu_selection; break; case MENU_AUTOLK: - g_eeprom.auto_keypad_lock = gSubMenuSelection; - gKeyLockCountdown = 30; + g_eeprom.auto_keypad_lock = g_sub_menu_selection; + g_key_lock_count_down = 30; break; case MENU_S_ADD1: - gTxVfo->scanlist_1_participation = gSubMenuSelection; - SETTINGS_UpdateChannel(gTxVfo->channel_save, gTxVfo, true); - gVfoConfigureMode = VFO_CONFIGURE; - gFlagResetVfos = true; + g_tx_vfo->scanlist_1_participation = g_sub_menu_selection; + SETTINGS_UpdateChannel(g_tx_vfo->channel_save, g_tx_vfo, true); + g_vfo_configure_mode = VFO_CONFIGURE; + g_flag_reset_vfos = true; return; case MENU_S_ADD2: - gTxVfo->scanlist_2_participation = gSubMenuSelection; - SETTINGS_UpdateChannel(gTxVfo->channel_save, gTxVfo, true); - gVfoConfigureMode = VFO_CONFIGURE; - gFlagResetVfos = true; + g_tx_vfo->scanlist_2_participation = g_sub_menu_selection; + SETTINGS_UpdateChannel(g_tx_vfo->channel_save, g_tx_vfo, true); + g_vfo_configure_mode = VFO_CONFIGURE; + g_flag_reset_vfos = true; return; case MENU_STE: - g_eeprom.tail_note_elimination = gSubMenuSelection; + g_eeprom.tail_note_elimination = g_sub_menu_selection; break; case MENU_RP_STE: - g_eeprom.repeater_tail_tone_elimination = gSubMenuSelection; + g_eeprom.repeater_tail_tone_elimination = g_sub_menu_selection; break; case MENU_MIC: - g_eeprom.mic_sensitivity = gSubMenuSelection; + g_eeprom.mic_sensitivity = g_sub_menu_selection; BOARD_EEPROM_LoadMoreSettings(); - gFlagReconfigureVfos = true; + g_flag_reconfigure_vfos = true; break; #ifdef ENABLE_AUDIO_BAR case MENU_MIC_BAR: - gSetting_mic_bar = gSubMenuSelection; + g_setting_mic_bar = g_sub_menu_selection; break; #endif case MENU_COMPAND: - gTxVfo->compander = gSubMenuSelection; - SETTINGS_UpdateChannel(gTxVfo->channel_save, gTxVfo, true); - gVfoConfigureMode = VFO_CONFIGURE; - gFlagResetVfos = true; -// gRequestSaveChannel = 1; + g_tx_vfo->compander = g_sub_menu_selection; + SETTINGS_UpdateChannel(g_tx_vfo->channel_save, g_tx_vfo, true); + g_vfo_configure_mode = VFO_CONFIGURE; + g_flag_reset_vfos = true; +// g_request_save_channel = 1; return; case MENU_1_CALL: - g_eeprom.chan_1_call = gSubMenuSelection; + g_eeprom.chan_1_call = g_sub_menu_selection; break; case MENU_S_LIST: - g_eeprom.scan_list_default = gSubMenuSelection; + g_eeprom.scan_list_default = g_sub_menu_selection; break; #ifdef ENABLE_ALARM case MENU_AL_MOD: - g_eeprom.alarm_mode = gSubMenuSelection; + g_eeprom.alarm_mode = g_sub_menu_selection; break; #endif case MENU_D_ST: - g_eeprom.DTMF_side_tone = gSubMenuSelection; + g_eeprom.dtmf_side_tone = g_sub_menu_selection; break; case MENU_D_RSP: - g_eeprom.DTMF_decode_response = gSubMenuSelection; + g_eeprom.dtmf_decode_response = g_sub_menu_selection; break; case MENU_D_HOLD: - g_eeprom.DTMF_auto_reset_time = gSubMenuSelection; + g_eeprom.dtmf_auto_reset_time = g_sub_menu_selection; break; case MENU_D_PRE: - g_eeprom.DTMF_preload_time = gSubMenuSelection * 10; + g_eeprom.dtmf_preload_time = g_sub_menu_selection * 10; break; case MENU_PTT_ID: - gTxVfo->DTMF_ptt_id_tx_mode = gSubMenuSelection; - gRequestSaveChannel = 1; + g_tx_vfo->dtmf_ptt_id_tx_mode = g_sub_menu_selection; + g_request_save_channel = 1; return; case MENU_BAT_TXT: - gSetting_battery_text = gSubMenuSelection; + g_setting_battery_text = g_sub_menu_selection; break; case MENU_D_DCD: - gTxVfo->DTMF_decoding_enable = gSubMenuSelection; + g_tx_vfo->dtmf_decoding_enable = g_sub_menu_selection; DTMF_clear_RX(); - gRequestSaveChannel = 1; + g_request_save_channel = 1; return; case MENU_D_LIVE_DEC: - gSetting_live_DTMF_decoder = gSubMenuSelection; - gDTMF_RX_live_timeout = 0; - memset(gDTMF_RX_live, 0, sizeof(gDTMF_RX_live)); - if (!gSetting_live_DTMF_decoder) + 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)); + if (!g_setting_live_dtmf_decoder) BK4819_DisableDTMF(); - gFlagReconfigureVfos = true; - gUpdateStatus = true; + g_flag_reconfigure_vfos = true; + g_update_status = true; break; case MENU_D_LIST: - gDTMF_chosen_contact = gSubMenuSelection - 1; - if (gIsDtmfContactValid) + g_dtmf_chosen_contact = g_sub_menu_selection - 1; + if (g_dtmf_is_contact_valid) { GUI_SelectNextDisplay(DISPLAY_MAIN); - gDTMF_InputMode = true; - gDTMF_InputBox_Index = 3; - memmove(gDTMF_InputBox, gDTMF_ID, 4); - gRequestDisplayScreen = DISPLAY_INVALID; + g_dtmf_input_mode = true; + g_dtmf_input_box_index = 3; + memmove(g_dtmf_input_box, g_dtmf_id, 4); + g_request_display_screen = DISPLAY_INVALID; } return; case MENU_PONMSG: - g_eeprom.pwr_on_display_mode = gSubMenuSelection; + g_eeprom.pwr_on_display_mode = g_sub_menu_selection; break; case MENU_ROGER: - g_eeprom.roger_mode = gSubMenuSelection; + g_eeprom.roger_mode = g_sub_menu_selection; break; case MENU_AM: - gTxVfo->am_mode = gSubMenuSelection; - gRequestSaveChannel = 1; + g_tx_vfo->am_mode = g_sub_menu_selection; + g_request_save_channel = 1; return; #ifdef ENABLE_AM_FIX case MENU_AM_FIX: - gSetting_AM_fix = gSubMenuSelection; - gVfoConfigureMode = VFO_CONFIGURE_RELOAD; - gFlagResetVfos = true; + g_setting_am_fix = g_sub_menu_selection; + g_vfo_configure_mode = VFO_CONFIGURE_RELOAD; + g_flag_reset_vfos = true; break; #endif #ifdef ENABLE_AM_FIX_TEST1 case MENU_AM_FIX_TEST1: - gSetting_AM_fix_test1 = gSubMenuSelection; - gVfoConfigureMode = VFO_CONFIGURE_RELOAD; - gFlagResetVfos = true; + g_setting_am_fix_test1 = g_sub_menu_selection; + g_vfo_configure_mode = VFO_CONFIGURE_RELOAD; + g_flag_reset_vfos = true; break; #endif #ifdef ENABLE_NOAA case MENU_NOAA_S: - g_eeprom.NOAA_auto_scan = gSubMenuSelection; - gFlagReconfigureVfos = true; + g_eeprom.noaa_auto_scan = g_sub_menu_selection; + g_flag_reconfigure_vfos = true; break; #endif case MENU_DEL_CH: - SETTINGS_UpdateChannel(gSubMenuSelection, NULL, false); - gVfoConfigureMode = VFO_CONFIGURE_RELOAD; - gFlagResetVfos = true; + SETTINGS_UpdateChannel(g_sub_menu_selection, NULL, false); + g_vfo_configure_mode = VFO_CONFIGURE_RELOAD; + g_flag_reset_vfos = true; return; case MENU_SIDE1_SHORT: - g_eeprom.key1_short_press_action = gSubMenuSelection; + g_eeprom.key1_short_press_action = g_sub_menu_selection; break; case MENU_SIDE1_LONG: - g_eeprom.key1_long_press_action = gSubMenuSelection; + g_eeprom.key1_long_press_action = g_sub_menu_selection; break; case MENU_SIDE2_SHORT: - g_eeprom.key2_short_press_action = gSubMenuSelection; + g_eeprom.key2_short_press_action = g_sub_menu_selection; break; case MENU_SIDE2_LONG: - g_eeprom.key2_long_press_action = gSubMenuSelection; + g_eeprom.key2_long_press_action = g_sub_menu_selection; break; case MENU_RESET: - BOARD_FactoryReset(gSubMenuSelection); + BOARD_FactoryReset(g_sub_menu_selection); return; case MENU_350TX: - gSetting_350TX = gSubMenuSelection; + g_setting_350_tx_enable = g_sub_menu_selection; break; case MENU_F_LOCK: - gSetting_F_LOCK = gSubMenuSelection; + g_setting_f_lock = g_sub_menu_selection; break; case MENU_200TX: - gSetting_200TX = gSubMenuSelection; + g_setting_200_tx_enable = g_sub_menu_selection; break; case MENU_500TX: - gSetting_500TX = gSubMenuSelection; + g_setting_500_tx_enable = g_sub_menu_selection; break; case MENU_350EN: - gSetting_350EN = gSubMenuSelection; - gVfoConfigureMode = VFO_CONFIGURE_RELOAD; - gFlagResetVfos = true; + g_setting_350_enable = g_sub_menu_selection; + g_vfo_configure_mode = VFO_CONFIGURE_RELOAD; + g_flag_reset_vfos = true; break; case MENU_SCREN: - gSetting_ScrambleEnable = gSubMenuSelection; - gFlagReconfigureVfos = true; + g_setting_scramble_enable = g_sub_menu_selection; + g_flag_reconfigure_vfos = true; break; case MENU_TX_EN: - gSetting_TX_EN = gSubMenuSelection; + g_Setting_tx_enable = g_sub_menu_selection; break; #ifdef ENABLE_F_CAL_MENU case MENU_F_CALI: - writeXtalFreqCal(gSubMenuSelection, true); + writeXtalFreqCal(g_sub_menu_selection, true); return; #endif @@ -794,66 +794,66 @@ void MENU_AcceptSetting(void) { uint16_t buf[4]; - gBatteryCalibration[0] = (520ul * gSubMenuSelection) / 760; // 5.20V empty, blinking above this value, reduced functionality below - gBatteryCalibration[1] = (700ul * gSubMenuSelection) / 760; // 7.00V, ~5%, 1 bars above this value - gBatteryCalibration[2] = (745ul * gSubMenuSelection) / 760; // 7.45V, ~17%, 2 bars above this value - gBatteryCalibration[3] = gSubMenuSelection; // 7.6V, ~29%, 3 bars above this value - gBatteryCalibration[4] = (788ul * gSubMenuSelection) / 760; // 7.88V, ~65%, 4 bars above this value - gBatteryCalibration[5] = 2300; - EEPROM_WriteBuffer(0x1F40, gBatteryCalibration); + g_battery_calibration[0] = (520ul * g_sub_menu_selection) / 760; // 5.20V empty, blinking above this value, reduced functionality below + g_battery_calibration[1] = (700ul * g_sub_menu_selection) / 760; // 7.00V, ~5%, 1 bars above this value + g_battery_calibration[2] = (745ul * g_sub_menu_selection) / 760; // 7.45V, ~17%, 2 bars above this value + g_battery_calibration[3] = g_sub_menu_selection; // 7.6V, ~29%, 3 bars above this value + g_battery_calibration[4] = (788ul * g_sub_menu_selection) / 760; // 7.88V, ~65%, 4 bars above this value + g_battery_calibration[5] = 2300; + EEPROM_WriteBuffer(0x1F40, g_battery_calibration); EEPROM_ReadBuffer( 0x1F48, buf, sizeof(buf)); - buf[0] = gBatteryCalibration[4]; - buf[1] = gBatteryCalibration[5]; + buf[0] = g_battery_calibration[4]; + buf[1] = g_battery_calibration[5]; EEPROM_WriteBuffer(0x1F48, buf); break; } } - gRequestSaveSettings = true; + g_request_save_settings = true; } void MENU_SelectNextCode(void) { int32_t UpperLimit; - if (gMenuCursor == MENU_R_DCS) + if (g_menu_cursor == MENU_R_DCS) UpperLimit = 208; - //UpperLimit = ARRAY_SIZE(DCS_Options); + //UpperLimit = ARRAY_SIZE(DCS_OPTIONS); else - if (gMenuCursor == MENU_R_CTCS) - UpperLimit = ARRAY_SIZE(CTCSS_Options) - 1; + if (g_menu_cursor == MENU_R_CTCS) + UpperLimit = ARRAY_SIZE(CTCSS_OPTIONS) - 1; else return; - gSubMenuSelection = NUMBER_AddWithWraparound(gSubMenuSelection, gMenuScrollDirection, 1, UpperLimit); + g_sub_menu_selection = NUMBER_AddWithWraparound(g_sub_menu_selection, g_menu_scroll_direction, 1, UpperLimit); - if (gMenuCursor == MENU_R_DCS) + if (g_menu_cursor == MENU_R_DCS) { - if (gSubMenuSelection > 104) + if (g_sub_menu_selection > 104) { - gSelectedcode_type = CODE_TYPE_REVERSE_DIGITAL; - gSelectedCode = gSubMenuSelection - 105; + g_selected_code_type = CODE_TYPE_REVERSE_DIGITAL; + g_selected_code = g_sub_menu_selection - 105; } else { - gSelectedcode_type = CODE_TYPE_DIGITAL; - gSelectedCode = gSubMenuSelection - 1; + g_selected_code_type = CODE_TYPE_DIGITAL; + g_selected_code = g_sub_menu_selection - 1; } } else { - gSelectedcode_type = CODE_TYPE_CONTINUOUS_TONE; - gSelectedCode = gSubMenuSelection - 1; + g_selected_code_type = CODE_TYPE_CONTINUOUS_TONE; + g_selected_code = g_sub_menu_selection - 1; } RADIO_SetupRegisters(true); - gScanPauseDelayIn_10ms = (gSelectedcode_type == CODE_TYPE_CONTINUOUS_TONE) ? scan_pause_delay_in_3_10ms : scan_pause_delay_in_4_10ms; + g_scan_pause_delay_in_10ms = (g_selected_code_type == CODE_TYPE_CONTINUOUS_TONE) ? scan_pause_delay_in_3_10ms : scan_pause_delay_in_4_10ms; - gUpdateDisplay = true; + g_update_display = true; } static void MENU_ClampSelection(int8_t Direction) @@ -861,364 +861,364 @@ static void MENU_ClampSelection(int8_t Direction) int32_t Min; int32_t Max; - if (!MENU_GetLimits(gMenuCursor, &Min, &Max)) + if (!MENU_GetLimits(g_menu_cursor, &Min, &Max)) { - int32_t Selection = gSubMenuSelection; + int32_t Selection = g_sub_menu_selection; if (Selection < Min) Selection = Min; else if (Selection > Max) Selection = Max; - gSubMenuSelection = NUMBER_AddWithWraparound(Selection, Direction, Min, Max); + g_sub_menu_selection = NUMBER_AddWithWraparound(Selection, Direction, Min, Max); } } void MENU_ShowCurrentSetting(void) { - switch (gMenuCursor) + switch (g_menu_cursor) { case MENU_SQL: - gSubMenuSelection = g_eeprom.squelch_level; + g_sub_menu_selection = g_eeprom.squelch_level; break; case MENU_STEP: - gSubMenuSelection = gTxVfo->step_setting; + g_sub_menu_selection = g_tx_vfo->step_setting; break; case MENU_TXP: - gSubMenuSelection = gTxVfo->output_power; + g_sub_menu_selection = g_tx_vfo->output_power; break; case MENU_R_DCS: - switch (gTxVfo->freq_config_rx.code_type) + switch (g_tx_vfo->freq_config_rx.code_type) { case CODE_TYPE_DIGITAL: - gSubMenuSelection = gTxVfo->freq_config_rx.code + 1; + g_sub_menu_selection = g_tx_vfo->freq_config_rx.code + 1; break; case CODE_TYPE_REVERSE_DIGITAL: - gSubMenuSelection = gTxVfo->freq_config_rx.code + 105; + g_sub_menu_selection = g_tx_vfo->freq_config_rx.code + 105; break; default: - gSubMenuSelection = 0; + g_sub_menu_selection = 0; break; } break; case MENU_RESET: - gSubMenuSelection = 0; + g_sub_menu_selection = 0; break; case MENU_R_CTCS: - gSubMenuSelection = (gTxVfo->freq_config_rx.code_type == CODE_TYPE_CONTINUOUS_TONE) ? gTxVfo->freq_config_rx.code + 1 : 0; + 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: - switch (gTxVfo->freq_config_tx.code_type) + switch (g_tx_vfo->freq_config_tx.code_type) { case CODE_TYPE_DIGITAL: - gSubMenuSelection = gTxVfo->freq_config_tx.code + 1; + g_sub_menu_selection = g_tx_vfo->freq_config_tx.code + 1; break; case CODE_TYPE_REVERSE_DIGITAL: - gSubMenuSelection = gTxVfo->freq_config_tx.code + 105; + g_sub_menu_selection = g_tx_vfo->freq_config_tx.code + 105; break; default: - gSubMenuSelection = 0; + g_sub_menu_selection = 0; break; } break; case MENU_T_CTCS: - gSubMenuSelection = (gTxVfo->freq_config_tx.code_type == CODE_TYPE_CONTINUOUS_TONE) ? gTxVfo->freq_config_tx.code + 1 : 0; + 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: - gSubMenuSelection = gTxVfo->tx_offset_freq_dir; + g_sub_menu_selection = g_tx_vfo->tx_offset_freq_dir; break; case MENU_OFFSET: - gSubMenuSelection = gTxVfo->tx_offset_freq; + g_sub_menu_selection = g_tx_vfo->tx_offset_freq; break; case MENU_W_N: - gSubMenuSelection = gTxVfo->channel_bandwidth; + g_sub_menu_selection = g_tx_vfo->channel_bandwidth; break; case MENU_SCR: - gSubMenuSelection = gTxVfo->scrambling_type; + g_sub_menu_selection = g_tx_vfo->scrambling_type; break; case MENU_BCL: - gSubMenuSelection = gTxVfo->busy_channel_lock; + g_sub_menu_selection = g_tx_vfo->busy_channel_lock; break; case MENU_MEM_CH: #if 0 - gSubMenuSelection = g_eeprom.user_channel[0]; + g_sub_menu_selection = g_eeprom.user_channel[0]; #else - gSubMenuSelection = g_eeprom.user_channel[g_eeprom.tx_vfo]; + g_sub_menu_selection = g_eeprom.user_channel[g_eeprom.tx_vfo]; #endif break; case MENU_MEM_NAME: - gSubMenuSelection = g_eeprom.user_channel[g_eeprom.tx_vfo]; + g_sub_menu_selection = g_eeprom.user_channel[g_eeprom.tx_vfo]; break; case MENU_SAVE: - gSubMenuSelection = g_eeprom.battery_save; + g_sub_menu_selection = g_eeprom.battery_save; break; #ifdef ENABLE_VOX case MENU_VOX: - gSubMenuSelection = g_eeprom.vox_switch ? g_eeprom.vox_level + 1 : 0; + g_sub_menu_selection = g_eeprom.vox_switch ? g_eeprom.vox_level + 1 : 0; break; #endif case MENU_ABR: - gSubMenuSelection = g_eeprom.backlight; + g_sub_menu_selection = g_eeprom.backlight; - gBacklightCountdown = 0; + 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: - gSubMenuSelection = gSetting_backlight_on_tx_rx; + g_sub_menu_selection = g_setting_backlight_on_tx_rx; break; case MENU_TDR: -// gSubMenuSelection = g_eeprom.dual_watch; - gSubMenuSelection = (g_eeprom.dual_watch == DUAL_WATCH_OFF) ? 0 : 1; +// g_sub_menu_selection = g_eeprom.dual_watch; + g_sub_menu_selection = (g_eeprom.dual_watch == DUAL_WATCH_OFF) ? 0 : 1; break; case MENU_XB: - gSubMenuSelection = g_eeprom.cross_vfo_rx_tx; + g_sub_menu_selection = g_eeprom.cross_vfo_rx_tx; break; case MENU_BEEP: - gSubMenuSelection = g_eeprom.beep_control; + g_sub_menu_selection = g_eeprom.beep_control; break; case MENU_TOT: - gSubMenuSelection = g_eeprom.tx_timeout_timer; + g_sub_menu_selection = g_eeprom.tx_timeout_timer; break; #ifdef ENABLE_VOICE case MENU_VOICE: - gSubMenuSelection = g_eeprom.voice_prompt; + g_sub_menu_selection = g_eeprom.voice_prompt; break; #endif case MENU_SC_REV: - gSubMenuSelection = g_eeprom.scan_resume_mode; + g_sub_menu_selection = g_eeprom.scan_resume_mode; break; case MENU_MDF: - gSubMenuSelection = g_eeprom.channel_display_mode; + g_sub_menu_selection = g_eeprom.channel_display_mode; break; case MENU_AUTOLK: - gSubMenuSelection = g_eeprom.auto_keypad_lock; + g_sub_menu_selection = g_eeprom.auto_keypad_lock; break; case MENU_S_ADD1: - gSubMenuSelection = gTxVfo->scanlist_1_participation; + g_sub_menu_selection = g_tx_vfo->scanlist_1_participation; break; case MENU_S_ADD2: - gSubMenuSelection = gTxVfo->scanlist_2_participation; + g_sub_menu_selection = g_tx_vfo->scanlist_2_participation; break; case MENU_STE: - gSubMenuSelection = g_eeprom.tail_note_elimination; + g_sub_menu_selection = g_eeprom.tail_note_elimination; break; case MENU_RP_STE: - gSubMenuSelection = g_eeprom.repeater_tail_tone_elimination; + g_sub_menu_selection = g_eeprom.repeater_tail_tone_elimination; break; case MENU_MIC: - gSubMenuSelection = g_eeprom.mic_sensitivity; + g_sub_menu_selection = g_eeprom.mic_sensitivity; break; #ifdef ENABLE_AUDIO_BAR case MENU_MIC_BAR: - gSubMenuSelection = gSetting_mic_bar; + g_sub_menu_selection = g_setting_mic_bar; break; #endif case MENU_COMPAND: - gSubMenuSelection = gTxVfo->compander; + g_sub_menu_selection = g_tx_vfo->compander; return; case MENU_1_CALL: - gSubMenuSelection = g_eeprom.chan_1_call; + g_sub_menu_selection = g_eeprom.chan_1_call; break; case MENU_S_LIST: - gSubMenuSelection = g_eeprom.scan_list_default; + g_sub_menu_selection = g_eeprom.scan_list_default; break; case MENU_SLIST1: - gSubMenuSelection = RADIO_FindNextChannel(0, 1, true, 0); + g_sub_menu_selection = RADIO_FindNextChannel(0, 1, true, 0); break; case MENU_SLIST2: - gSubMenuSelection = RADIO_FindNextChannel(0, 1, true, 1); + g_sub_menu_selection = RADIO_FindNextChannel(0, 1, true, 1); break; #ifdef ENABLE_ALARM case MENU_AL_MOD: - gSubMenuSelection = g_eeprom.alarm_mode; + g_sub_menu_selection = g_eeprom.alarm_mode; break; #endif case MENU_D_ST: - gSubMenuSelection = g_eeprom.DTMF_side_tone; + g_sub_menu_selection = g_eeprom.dtmf_side_tone; break; case MENU_D_RSP: - gSubMenuSelection = g_eeprom.DTMF_decode_response; + g_sub_menu_selection = g_eeprom.dtmf_decode_response; break; case MENU_D_HOLD: - gSubMenuSelection = g_eeprom.DTMF_auto_reset_time; + g_sub_menu_selection = g_eeprom.dtmf_auto_reset_time; - if (gSubMenuSelection <= DTMF_HOLD_MIN) - gSubMenuSelection = DTMF_HOLD_MIN; + if (g_sub_menu_selection <= DTMF_HOLD_MIN) + g_sub_menu_selection = DTMF_HOLD_MIN; else - if (gSubMenuSelection <= 10) - gSubMenuSelection = 10; + if (g_sub_menu_selection <= 10) + g_sub_menu_selection = 10; else - if (gSubMenuSelection <= 20) - gSubMenuSelection = 20; + if (g_sub_menu_selection <= 20) + g_sub_menu_selection = 20; else - if (gSubMenuSelection <= 30) - gSubMenuSelection = 30; + if (g_sub_menu_selection <= 30) + g_sub_menu_selection = 30; else - if (gSubMenuSelection <= 40) - gSubMenuSelection = 40; + if (g_sub_menu_selection <= 40) + g_sub_menu_selection = 40; else - if (gSubMenuSelection <= 50) - gSubMenuSelection = 50; + if (g_sub_menu_selection <= 50) + g_sub_menu_selection = 50; else - if (gSubMenuSelection < DTMF_HOLD_MAX) - gSubMenuSelection = 50; + if (g_sub_menu_selection < DTMF_HOLD_MAX) + g_sub_menu_selection = 50; else - gSubMenuSelection = DTMF_HOLD_MAX; + g_sub_menu_selection = DTMF_HOLD_MAX; break; case MENU_D_PRE: - gSubMenuSelection = g_eeprom.DTMF_preload_time / 10; + g_sub_menu_selection = g_eeprom.dtmf_preload_time / 10; break; case MENU_PTT_ID: - gSubMenuSelection = gTxVfo->DTMF_ptt_id_tx_mode; + g_sub_menu_selection = g_tx_vfo->dtmf_ptt_id_tx_mode; break; case MENU_BAT_TXT: - gSubMenuSelection = gSetting_battery_text; + g_sub_menu_selection = g_setting_battery_text; return; case MENU_D_DCD: - gSubMenuSelection = gTxVfo->DTMF_decoding_enable; + g_sub_menu_selection = g_tx_vfo->dtmf_decoding_enable; break; case MENU_D_LIST: - gSubMenuSelection = gDTMF_chosen_contact + 1; + g_sub_menu_selection = g_dtmf_chosen_contact + 1; break; case MENU_D_LIVE_DEC: - gSubMenuSelection = gSetting_live_DTMF_decoder; + g_sub_menu_selection = g_setting_live_dtmf_decoder; break; case MENU_PONMSG: - gSubMenuSelection = g_eeprom.pwr_on_display_mode; + g_sub_menu_selection = g_eeprom.pwr_on_display_mode; break; case MENU_ROGER: - gSubMenuSelection = g_eeprom.roger_mode; + g_sub_menu_selection = g_eeprom.roger_mode; break; case MENU_AM: - gSubMenuSelection = gTxVfo->am_mode; + g_sub_menu_selection = g_tx_vfo->am_mode; break; #ifdef ENABLE_AM_FIX case MENU_AM_FIX: - gSubMenuSelection = gSetting_AM_fix; + g_sub_menu_selection = g_setting_am_fix; break; #endif #ifdef ENABLE_AM_FIX_TEST1 case MENU_AM_FIX_TEST1: - gSubMenuSelection = gSetting_AM_fix_test1; + g_sub_menu_selection = g_setting_am_fix_test1; break; #endif #ifdef ENABLE_NOAA case MENU_NOAA_S: - gSubMenuSelection = g_eeprom.NOAA_auto_scan; + g_sub_menu_selection = g_eeprom.noaa_auto_scan; break; #endif case MENU_DEL_CH: #if 0 - gSubMenuSelection = RADIO_FindNextChannel(g_eeprom.user_channel[0], 1, false, 1); + g_sub_menu_selection = RADIO_FindNextChannel(g_eeprom.user_channel[0], 1, false, 1); #else - gSubMenuSelection = RADIO_FindNextChannel(g_eeprom.user_channel[g_eeprom.tx_vfo], 1, false, 1); + g_sub_menu_selection = RADIO_FindNextChannel(g_eeprom.user_channel[g_eeprom.tx_vfo], 1, false, 1); #endif break; case MENU_SIDE1_SHORT: - gSubMenuSelection = g_eeprom.key1_short_press_action; + g_sub_menu_selection = g_eeprom.key1_short_press_action; break; case MENU_SIDE1_LONG: - gSubMenuSelection = g_eeprom.key1_long_press_action; + g_sub_menu_selection = g_eeprom.key1_long_press_action; break; case MENU_SIDE2_SHORT: - gSubMenuSelection = g_eeprom.key2_short_press_action; + g_sub_menu_selection = g_eeprom.key2_short_press_action; break; case MENU_SIDE2_LONG: - gSubMenuSelection = g_eeprom.key2_long_press_action; + g_sub_menu_selection = g_eeprom.key2_long_press_action; break; case MENU_350TX: - gSubMenuSelection = gSetting_350TX; + g_sub_menu_selection = g_setting_350_tx_enable; break; case MENU_F_LOCK: - gSubMenuSelection = gSetting_F_LOCK; + g_sub_menu_selection = g_setting_f_lock; break; case MENU_200TX: - gSubMenuSelection = gSetting_200TX; + g_sub_menu_selection = g_setting_200_tx_enable; break; case MENU_500TX: - gSubMenuSelection = gSetting_500TX; + g_sub_menu_selection = g_setting_500_tx_enable; break; case MENU_350EN: - gSubMenuSelection = gSetting_350EN; + g_sub_menu_selection = g_setting_350_enable; break; case MENU_SCREN: - gSubMenuSelection = gSetting_ScrambleEnable; + g_sub_menu_selection = g_setting_scramble_enable; break; case MENU_TX_EN: - gSubMenuSelection = gSetting_TX_EN; + g_sub_menu_selection = g_Setting_tx_enable; break; #ifdef ENABLE_F_CAL_MENU case MENU_F_CALI: - gSubMenuSelection = g_eeprom.BK4819_xtal_freq_low; + g_sub_menu_selection = g_eeprom.BK4819_xtal_freq_low; break; #endif case MENU_BATCAL: - gSubMenuSelection = gBatteryCalibration[3]; + g_sub_menu_selection = g_battery_calibration[3]; break; default: @@ -1226,34 +1226,34 @@ void MENU_ShowCurrentSetting(void) } } -static void MENU_Key_0_to_9(key_code_t Key, bool bKeyPressed, bool bKeyHeld) +static void MENU_Key_0_to_9(key_code_t Key, bool key_pressed, bool key_held) { uint8_t Offset; int32_t Min; int32_t Max; uint16_t Value = 0; - if (bKeyHeld || !bKeyPressed) + if (key_held || !key_pressed) return; - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; - if (gMenuCursor == MENU_MEM_NAME && edit_index >= 0) + if (g_menu_cursor == MENU_MEM_NAME && g_edit_index >= 0) { // currently editing the channel name - if (edit_index < 10) + if (g_edit_index < 10) { if (Key >= KEY_0 && Key <= KEY_9) { - edit[edit_index] = '0' + Key - KEY_0; + g_edit[g_edit_index] = '0' + Key - KEY_0; - if (++edit_index >= 10) + if (++g_edit_index >= 10) { // exit edit - gFlagAcceptSetting = false; - gAskForConfirmation = 1; + g_flag_AcceptSetting = false; + g_ask_for_confirmation = 1; } - gRequestDisplayScreen = DISPLAY_MENU; + g_request_display_screen = DISPLAY_MENU; } } @@ -1262,39 +1262,39 @@ static void MENU_Key_0_to_9(key_code_t Key, bool bKeyPressed, bool bKeyHeld) INPUTBOX_Append(Key); - gRequestDisplayScreen = DISPLAY_MENU; + g_request_display_screen = DISPLAY_MENU; - if (!gIsInSubMenu) + if (!g_is_in_sub_menu) { #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wimplicit-fallthrough=" - switch (gInputBoxIndex) + switch (g_input_box_index) { case 2: - gInputBoxIndex = 0; + g_input_box_index = 0; - Value = (gInputBox[0] * 10) + gInputBox[1]; + Value = (g_input_box[0] * 10) + g_input_box[1]; - if (Value > 0 && Value <= gMenuListCount) + if (Value > 0 && Value <= g_menu_list_count) { - gMenuCursor = Value - 1; - gFlagRefreshSetting = true; + g_menu_cursor = Value - 1; + g_flag_refresh_menu = true; return; } - if (Value <= gMenuListCount) + if (Value <= g_menu_list_count) break; - gInputBox[0] = gInputBox[1]; - gInputBoxIndex = 1; + g_input_box[0] = g_input_box[1]; + g_input_box_index = 1; case 1: - Value = gInputBox[0]; - if (Value > 0 && Value <= gMenuListCount) + Value = g_input_box[0]; + if (Value > 0 && Value <= g_menu_list_count) { - gMenuCursor = Value - 1; - gFlagRefreshSetting = true; + g_menu_cursor = Value - 1; + g_flag_refresh_menu = true; return; } break; @@ -1302,17 +1302,17 @@ static void MENU_Key_0_to_9(key_code_t Key, bool bKeyPressed, bool bKeyHeld) #pragma GCC diagnostic pop - gInputBoxIndex = 0; + g_input_box_index = 0; - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } - if (gMenuCursor == MENU_OFFSET) + if (g_menu_cursor == MENU_OFFSET) { uint32_t Frequency; - if (gInputBoxIndex < 6) + if (g_input_box_index < 6) { // invalid frequency #ifdef ENABLE_VOICE g_another_voice_id = (voice_id_t)Key; @@ -1324,104 +1324,107 @@ static void MENU_Key_0_to_9(key_code_t Key, bool bKeyPressed, bool bKeyHeld) g_another_voice_id = (voice_id_t)Key; #endif - NUMBER_Get(gInputBox, &Frequency); - gSubMenuSelection = FREQUENCY_FloorToStep(Frequency + 75, gTxVfo->step_freq, 0); + NUMBER_Get(g_input_box, &Frequency); + g_sub_menu_selection = FREQUENCY_FloorToStep(Frequency + 75, g_tx_vfo->step_freq, 0); - gInputBoxIndex = 0; + g_input_box_index = 0; return; } - if (gMenuCursor == MENU_MEM_CH || gMenuCursor == MENU_DEL_CH || gMenuCursor == MENU_1_CALL || gMenuCursor == MENU_MEM_NAME) + if (g_menu_cursor == MENU_MEM_CH || + g_menu_cursor == MENU_DEL_CH || + g_menu_cursor == MENU_1_CALL || + g_menu_cursor == MENU_MEM_NAME) { // enter 3-digit channel number - if (gInputBoxIndex < 3) + if (g_input_box_index < 3) { #ifdef ENABLE_VOICE g_another_voice_id = (voice_id_t)Key; #endif - gRequestDisplayScreen = DISPLAY_MENU; + g_request_display_screen = DISPLAY_MENU; return; } - gInputBoxIndex = 0; + g_input_box_index = 0; - Value = ((gInputBox[0] * 100) + (gInputBox[1] * 10) + gInputBox[2]) - 1; + Value = ((g_input_box[0] * 100) + (g_input_box[1] * 10) + g_input_box[2]) - 1; if (Value <= USER_CHANNEL_LAST) - { + { // user channel #ifdef ENABLE_VOICE g_another_voice_id = (voice_id_t)Key; #endif - gSubMenuSelection = Value; + g_sub_menu_selection = Value; return; } - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } - if (MENU_GetLimits(gMenuCursor, &Min, &Max)) + if (MENU_GetLimits(g_menu_cursor, &Min, &Max)) { - gInputBoxIndex = 0; - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_input_box_index = 0; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } Offset = (Max >= 100) ? 3 : (Max >= 10) ? 2 : 1; - switch (gInputBoxIndex) + switch (g_input_box_index) { case 1: - Value = gInputBox[0]; + Value = g_input_box[0]; break; case 2: - Value = (gInputBox[0] * 10) + gInputBox[1]; + Value = (g_input_box[0] * 10) + g_input_box[1]; break; case 3: - Value = (gInputBox[0] * 100) + (gInputBox[1] * 10) + gInputBox[2]; + Value = (g_input_box[0] * 100) + (g_input_box[1] * 10) + g_input_box[2]; break; } - if (Offset == gInputBoxIndex) - gInputBoxIndex = 0; + if (Offset == g_input_box_index) + g_input_box_index = 0; if (Value <= Max) { - gSubMenuSelection = Value; + g_sub_menu_selection = Value; return; } - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; } -static void MENU_Key_EXIT(bool bKeyPressed, bool bKeyHeld) +static void MENU_Key_EXIT(bool key_pressed, bool key_held) { - if (bKeyHeld || !bKeyPressed) + if (key_held || !key_pressed) return; - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; - if (gCssScanMode == CSS_SCAN_MODE_OFF) + if (g_css_scan_mode == CSS_SCAN_MODE_OFF) { - if (gIsInSubMenu) + if (g_is_in_sub_menu) { - if (gInputBoxIndex == 0 || gMenuCursor != MENU_OFFSET) + if (g_input_box_index == 0 || g_menu_cursor != MENU_OFFSET) { - gAskForConfirmation = 0; - gIsInSubMenu = false; - gInputBoxIndex = 0; - gFlagRefreshSetting = true; + g_ask_for_confirmation = 0; + g_is_in_sub_menu = false; + g_input_box_index = 0; + g_flag_refresh_menu = true; #ifdef ENABLE_VOICE g_another_voice_id = VOICE_ID_CANCEL; #endif } else - gInputBox[--gInputBoxIndex] = 10; + g_input_box[--g_input_box_index] = 10; // *********************** - gRequestDisplayScreen = DISPLAY_MENU; + g_request_display_screen = DISPLAY_MENU; return; } @@ -1429,11 +1432,11 @@ static void MENU_Key_EXIT(bool bKeyPressed, bool bKeyHeld) g_another_voice_id = VOICE_ID_CANCEL; #endif - gRequestDisplayScreen = DISPLAY_MAIN; + g_request_display_screen = DISPLAY_MAIN; if (g_eeprom.backlight == 0) { - gBacklightCountdown = 0; + g_backlight_count_down = 0; GPIO_ClearBit(&GPIOB->DATA, GPIOB_PIN_BACKLIGHT); // turn the backlight OFF } } @@ -1445,109 +1448,109 @@ static void MENU_Key_EXIT(bool bKeyPressed, bool bKeyHeld) g_another_voice_id = VOICE_ID_SCANNING_STOP; #endif - gRequestDisplayScreen = DISPLAY_MENU; + g_request_display_screen = DISPLAY_MENU; } - gPttWasReleased = true; + g_ptt_was_released = true; } -static void MENU_Key_MENU(const bool bKeyPressed, const bool bKeyHeld) +static void MENU_Key_MENU(const bool key_pressed, const bool key_held) { - if (bKeyHeld || !bKeyPressed) + if (key_held || !key_pressed) return; - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; - gRequestDisplayScreen = DISPLAY_MENU; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; + g_request_display_screen = DISPLAY_MENU; - if (!gIsInSubMenu) + if (!g_is_in_sub_menu) { #ifdef ENABLE_VOICE - if (gMenuCursor != MENU_SCR) - g_another_voice_id = MenuList[MenuList_sorted[gMenuCursor]].voice_id; + if (g_menu_cursor != MENU_SCR) + g_another_voice_id = g_menu_list[g_menu_list_sorted[g_menu_cursor]].voice_id; #endif #if 1 - if (gMenuCursor == MENU_DEL_CH || gMenuCursor == MENU_MEM_NAME) - if (!RADIO_CheckValidChannel(gSubMenuSelection, false, 0)) + if (g_menu_cursor == MENU_DEL_CH || g_menu_cursor == MENU_MEM_NAME) + if (!RADIO_CheckValidChannel(g_sub_menu_selection, false, 0)) return; // invalid channel #endif - gAskForConfirmation = 0; - gIsInSubMenu = true; + g_ask_for_confirmation = 0; + g_is_in_sub_menu = true; -// if (gMenuCursor != MENU_D_LIST) +// if (g_menu_cursor != MENU_D_LIST) { - gInputBoxIndex = 0; - edit_index = -1; + g_input_box_index = 0; + g_edit_index = -1; } return; } - if (gMenuCursor == MENU_MEM_NAME) + if (g_menu_cursor == MENU_MEM_NAME) { - if (edit_index < 0) + if (g_edit_index < 0) { // enter channel name edit mode - if (!RADIO_CheckValidChannel(gSubMenuSelection, false, 0)) + if (!RADIO_CheckValidChannel(g_sub_menu_selection, false, 0)) return; - BOARD_fetchChannelName(edit, gSubMenuSelection); + BOARD_fetchChannelName(g_edit, g_sub_menu_selection); // pad the channel name out with '_' - edit_index = strlen(edit); - while (edit_index < 10) - edit[edit_index++] = '_'; - edit[edit_index] = 0; - edit_index = 0; // 'edit_index' is going to be used as the cursor position + g_edit_index = strlen(g_edit); + while (g_edit_index < 10) + g_edit[g_edit_index++] = '_'; + g_edit[g_edit_index] = 0; + g_edit_index = 0; // 'g_edit_index' is going to be used as the cursor position // make a copy so we can test for change when exiting the menu item - memmove(edit_original, edit, sizeof(edit_original)); + memmove(g_edit_original, g_edit, sizeof(g_edit_original)); return; } else - if (edit_index >= 0 && edit_index < 10) + if (g_edit_index >= 0 && g_edit_index < 10) { // editing the channel name characters - if (++edit_index < 10) + if (++g_edit_index < 10) return; // next char // exit - if (memcmp(edit_original, edit, sizeof(edit_original)) == 0) + if (memcmp(g_edit_original, g_edit, sizeof(g_edit_original)) == 0) { // no change - drop it - gFlagAcceptSetting = false; - gIsInSubMenu = false; - gAskForConfirmation = 0; + g_flag_AcceptSetting = false; + g_is_in_sub_menu = false; + g_ask_for_confirmation = 0; } else { - gFlagAcceptSetting = false; - gAskForConfirmation = 0; + g_flag_AcceptSetting = false; + g_ask_for_confirmation = 0; } } } // exiting the sub menu - if (gIsInSubMenu) + if (g_is_in_sub_menu) { - if (gMenuCursor == MENU_RESET || - gMenuCursor == MENU_MEM_CH || - gMenuCursor == MENU_DEL_CH || - gMenuCursor == MENU_MEM_NAME) + if (g_menu_cursor == MENU_RESET || + g_menu_cursor == MENU_MEM_CH || + g_menu_cursor == MENU_DEL_CH || + g_menu_cursor == MENU_MEM_NAME) { - switch (gAskForConfirmation) + switch (g_ask_for_confirmation) { case 0: - gAskForConfirmation = 1; + g_ask_for_confirmation = 1; break; case 1: - gAskForConfirmation = 2; + g_ask_for_confirmation = 2; UI_DisplayMenu(); - if (gMenuCursor == MENU_RESET) + if (g_menu_cursor == MENU_RESET) { #ifdef ENABLE_VOICE AUDIO_SetVoiceID(0, VOICE_ID_CONFIRM); @@ -1563,55 +1566,55 @@ static void MENU_Key_MENU(const bool bKeyPressed, const bool bKeyHeld) #endif } - gFlagAcceptSetting = true; - gIsInSubMenu = false; - gAskForConfirmation = 0; + g_flag_AcceptSetting = true; + g_is_in_sub_menu = false; + g_ask_for_confirmation = 0; } } else { - gFlagAcceptSetting = true; - gIsInSubMenu = false; + g_flag_AcceptSetting = true; + g_is_in_sub_menu = false; } } - if (gCssScanMode != CSS_SCAN_MODE_OFF) + if (g_css_scan_mode != CSS_SCAN_MODE_OFF) { - gCssScanMode = CSS_SCAN_MODE_OFF; - gUpdateStatus = true; + g_css_scan_mode = CSS_SCAN_MODE_OFF; + g_update_status = true; } #ifdef ENABLE_VOICE - if (gMenuCursor == MENU_SCR) - g_another_voice_id = (gSubMenuSelection == 0) ? VOICE_ID_SCRAMBLER_OFF : VOICE_ID_SCRAMBLER_ON; + if (g_menu_cursor == MENU_SCR) + 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; #endif - gInputBoxIndex = 0; + g_input_box_index = 0; } -static void MENU_Key_STAR(const bool bKeyPressed, const bool bKeyHeld) +static void MENU_Key_STAR(const bool key_pressed, const bool key_held) { - if (bKeyHeld || !bKeyPressed) + if (key_held || !key_pressed) return; - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; - if (gMenuCursor == MENU_MEM_NAME && edit_index >= 0) + if (g_menu_cursor == MENU_MEM_NAME && g_edit_index >= 0) { // currently editing the channel name - if (edit_index < 10) + if (g_edit_index < 10) { - edit[edit_index] = '-'; + g_edit[g_edit_index] = '-'; - if (++edit_index >= 10) + if (++g_edit_index >= 10) { // exit edit - gFlagAcceptSetting = false; - gAskForConfirmation = 1; + g_flag_AcceptSetting = false; + g_ask_for_confirmation = 1; } - gRequestDisplayScreen = DISPLAY_MENU; + g_request_display_screen = DISPLAY_MENU; } return; @@ -1620,18 +1623,18 @@ static void MENU_Key_STAR(const bool bKeyPressed, const bool bKeyHeld) RADIO_SelectVfos(); #ifdef ENABLE_NOAA - if (IS_NOT_NOAA_CHANNEL(gRxVfo->channel_save) && gRxVfo->am_mode == 0) + if (IS_NOT_NOAA_CHANNEL(g_rx_vfo->channel_save) && g_rx_vfo->am_mode == 0) #else - if (gRxVfo->am_mode == 0) + if (g_rx_vfo->am_mode == 0) #endif { - if (gMenuCursor == MENU_R_CTCS || gMenuCursor == MENU_R_DCS) + if (g_menu_cursor == MENU_R_CTCS || g_menu_cursor == MENU_R_DCS) { // scan CTCSS or DCS to find the tone/code of the incoming signal - if (gCssScanMode == CSS_SCAN_MODE_OFF) + if (g_css_scan_mode == CSS_SCAN_MODE_OFF) { MENU_StartCssScan(1); - gRequestDisplayScreen = DISPLAY_MENU; + g_request_display_screen = DISPLAY_MENU; #ifdef ENABLE_VOICE AUDIO_SetVoiceID(0, VOICE_ID_SCANNING_BEGIN); AUDIO_PlaySingleVoice(1); @@ -1640,32 +1643,32 @@ static void MENU_Key_STAR(const bool bKeyPressed, const bool bKeyHeld) else { MENU_StopCssScan(); - gRequestDisplayScreen = DISPLAY_MENU; + g_request_display_screen = DISPLAY_MENU; #ifdef ENABLE_VOICE g_another_voice_id = VOICE_ID_SCANNING_STOP; #endif } } - gPttWasReleased = true; + g_ptt_was_released = true; return; } - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; } -static void MENU_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Direction) +static void MENU_Key_UP_DOWN(bool key_pressed, bool key_held, int8_t Direction) { uint8_t VFO; uint8_t Channel; bool bCheckScanList; - if (gMenuCursor == MENU_MEM_NAME && gIsInSubMenu && edit_index >= 0) + if (g_menu_cursor == MENU_MEM_NAME && g_is_in_sub_menu && g_edit_index >= 0) { // change the character - if (bKeyPressed && edit_index < 10 && Direction != 0) + if (key_pressed && g_edit_index < 10 && Direction != 0) { const char unwanted[] = "$%&!\"':;?^`|{}"; - char c = edit[edit_index] + Direction; + char c = g_edit[g_edit_index] + Direction; unsigned int i = 0; while (i < sizeof(unwanted) && c >= 32 && c <= 126) { @@ -1675,55 +1678,55 @@ static void MENU_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Direction) i = 0; } } - edit[edit_index] = (c < 32) ? 126 : (c > 126) ? 32 : c; + g_edit[g_edit_index] = (c < 32) ? 126 : (c > 126) ? 32 : c; - gRequestDisplayScreen = DISPLAY_MENU; + g_request_display_screen = DISPLAY_MENU; } return; } - if (!bKeyHeld) + if (!key_held) { - if (!bKeyPressed) + if (!key_pressed) return; - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; - gInputBoxIndex = 0; + g_input_box_index = 0; } else - if (!bKeyPressed) + if (!key_pressed) return; - if (gCssScanMode != CSS_SCAN_MODE_OFF) + if (g_css_scan_mode != CSS_SCAN_MODE_OFF) { MENU_StartCssScan(Direction); - gPttWasReleased = true; - gRequestDisplayScreen = DISPLAY_MENU; + g_ptt_was_released = true; + g_request_display_screen = DISPLAY_MENU; return; } - if (!gIsInSubMenu) + if (!g_is_in_sub_menu) { - gMenuCursor = NUMBER_AddWithWraparound(gMenuCursor, -Direction, 0, gMenuListCount - 1); + g_menu_cursor = NUMBER_AddWithWraparound(g_menu_cursor, -Direction, 0, g_menu_list_count - 1); - gFlagRefreshSetting = true; + g_flag_refresh_menu = true; - gRequestDisplayScreen = DISPLAY_MENU; + g_request_display_screen = DISPLAY_MENU; - if (gMenuCursor != MENU_ABR && g_eeprom.backlight == 0) + if (g_menu_cursor != MENU_ABR && g_eeprom.backlight == 0) { - gBacklightCountdown = 0; + g_backlight_count_down = 0; GPIO_ClearBit(&GPIOB->DATA, GPIOB_PIN_BACKLIGHT); // turn the backlight OFF } return; } - if (gMenuCursor == MENU_OFFSET) + if (g_menu_cursor == MENU_OFFSET) { - int32_t Offset = (Direction * gTxVfo->step_freq) + gSubMenuSelection; + int32_t Offset = (Direction * g_tx_vfo->step_freq) + g_sub_menu_selection; if (Offset < 99999990) { if (Offset < 0) @@ -1732,8 +1735,8 @@ static void MENU_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Direction) else Offset = 0; - gSubMenuSelection = FREQUENCY_FloorToStep(Offset, gTxVfo->step_freq, 0); - gRequestDisplayScreen = DISPLAY_MENU; + g_sub_menu_selection = FREQUENCY_FloorToStep(Offset, g_tx_vfo->step_freq, 0); + g_request_display_screen = DISPLAY_MENU; return; } @@ -1742,7 +1745,7 @@ static void MENU_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Direction) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wimplicit-fallthrough=" - switch (gMenuCursor) + switch (g_menu_cursor) { case MENU_DEL_CH: case MENU_1_CALL: @@ -1758,20 +1761,20 @@ static void MENU_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Direction) default: MENU_ClampSelection(Direction); - gRequestDisplayScreen = DISPLAY_MENU; + g_request_display_screen = DISPLAY_MENU; return; } #pragma GCC diagnostic pop - Channel = RADIO_FindNextChannel(gSubMenuSelection + Direction, Direction, bCheckScanList, VFO); + Channel = RADIO_FindNextChannel(g_sub_menu_selection + Direction, Direction, bCheckScanList, VFO); if (Channel != 0xFF) - gSubMenuSelection = Channel; + g_sub_menu_selection = Channel; - gRequestDisplayScreen = DISPLAY_MENU; + g_request_display_screen = DISPLAY_MENU; } -void MENU_ProcessKeys(key_code_t Key, bool bKeyPressed, bool bKeyHeld) +void MENU_ProcessKeys(key_code_t Key, bool key_pressed, bool key_held) { switch (Key) { @@ -1785,67 +1788,67 @@ void MENU_ProcessKeys(key_code_t Key, bool bKeyPressed, bool bKeyHeld) case KEY_7: case KEY_8: case KEY_9: - MENU_Key_0_to_9(Key, bKeyPressed, bKeyHeld); + MENU_Key_0_to_9(Key, key_pressed, key_held); break; case KEY_MENU: - MENU_Key_MENU(bKeyPressed, bKeyHeld); + MENU_Key_MENU(key_pressed, key_held); break; case KEY_UP: - MENU_Key_UP_DOWN(bKeyPressed, bKeyHeld, 1); + MENU_Key_UP_DOWN(key_pressed, key_held, 1); break; case KEY_DOWN: - MENU_Key_UP_DOWN(bKeyPressed, bKeyHeld, -1); + MENU_Key_UP_DOWN(key_pressed, key_held, -1); break; case KEY_EXIT: - MENU_Key_EXIT(bKeyPressed, bKeyHeld); + MENU_Key_EXIT(key_pressed, key_held); break; case KEY_STAR: - MENU_Key_STAR(bKeyPressed, bKeyHeld); + MENU_Key_STAR(key_pressed, key_held); break; case KEY_F: - if (gMenuCursor == MENU_MEM_NAME && edit_index >= 0) + if (g_menu_cursor == MENU_MEM_NAME && g_edit_index >= 0) { // currently editing the channel name - if (!bKeyHeld && bKeyPressed) + if (!key_held && key_pressed) { - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; - if (edit_index < 10) + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; + if (g_edit_index < 10) { - edit[edit_index] = ' '; - if (++edit_index >= 10) + g_edit[g_edit_index] = ' '; + if (++g_edit_index >= 10) { // exit edit - gFlagAcceptSetting = false; - gAskForConfirmation = 1; + g_flag_AcceptSetting = false; + g_ask_for_confirmation = 1; } - gRequestDisplayScreen = DISPLAY_MENU; + g_request_display_screen = DISPLAY_MENU; } } break; } - GENERIC_Key_F(bKeyPressed, bKeyHeld); + GENERIC_Key_F(key_pressed, key_held); break; case KEY_PTT: - GENERIC_Key_PTT(bKeyPressed); + GENERIC_Key_PTT(key_pressed); break; default: - if (!bKeyHeld && bKeyPressed) - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + if (!key_held && key_pressed) + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; break; } - if (gScreenToDisplay == DISPLAY_MENU) + if (g_screen_to_display == DISPLAY_MENU) { - if (gMenuCursor == MENU_VOL || + if (g_menu_cursor == MENU_VOL || #ifdef ENABLE_F_CAL_MENU - gMenuCursor == MENU_F_CALI || + g_menu_cursor == MENU_F_CALI || #endif - gMenuCursor == MENU_BATCAL) + g_menu_cursor == MENU_BATCAL) { - gMenuCountdown = menu_timeout_long_500ms; + g_menu_count_down = menu_timeout_long_500ms; } else { - gMenuCountdown = menu_timeout_500ms; + g_menu_count_down = menu_timeout_500ms; } } } diff --git a/app/menu.h b/app/menu.h index 1367fb7..a2df065 100644 --- a/app/menu.h +++ b/app/menu.h @@ -30,7 +30,7 @@ void MENU_ShowCurrentSetting(void); void MENU_StartCssScan(int8_t Direction); void MENU_StopCssScan(void); -void MENU_ProcessKeys(key_code_t Key, bool bKeyPressed, bool bKeyHeld); +void MENU_ProcessKeys(key_code_t Key, bool key_pressed, bool key_held); #endif diff --git a/app/scanner.c b/app/scanner.c index d8ff209..70c851a 100644 --- a/app/scanner.c +++ b/app/scanner.c @@ -28,37 +28,37 @@ dcs_code_type_t gScanCssResultType; uint8_t gScanCssResultCode; -bool gFlagStartScan; -bool gFlagStopScan; -bool gScanSingleFrequency; +bool g_flag_start_scan; +bool g_flag_stop_scan; +bool g_scan_single_frequency; SCAN_edit_state_t gScannerEditState; uint8_t gScanChannel; uint32_t gScanFrequency; bool gScanPauseMode; SCAN_CssState_t gScanCssState; -volatile bool gScheduleScanListen = true; -volatile uint16_t gScanPauseDelayIn_10ms; +volatile bool g_schedule_scan_listen = true; +volatile uint16_t g_scan_pause_delay_in_10ms; uint8_t gScanProgressIndicator; uint8_t gScanHitCount; bool gScanUseCssResult; -int8_t gScanStateDir; +int8_t g_scan_state_dir; bool bScanKeepFrequency; -static void SCANNER_Key_DIGITS(key_code_t Key, bool bKeyPressed, bool bKeyHeld) +static void SCANNER_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held) { - if (!bKeyHeld && bKeyPressed) + if (!key_held && key_pressed) { if (gScannerEditState == SCAN_EDIT_STATE_BUSY) { uint16_t Channel; - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; INPUTBOX_Append(Key); - gRequestDisplayScreen = DISPLAY_SCANNER; + g_request_display_screen = DISPLAY_SCANNER; - if (gInputBoxIndex < 3) + if (g_input_box_index < 3) { #ifdef ENABLE_VOICE g_another_voice_id = (voice_id_t)Key; @@ -66,50 +66,50 @@ static void SCANNER_Key_DIGITS(key_code_t Key, bool bKeyPressed, bool bKeyHeld) return; } - gInputBoxIndex = 0; + g_input_box_index = 0; - Channel = ((gInputBox[0] * 100) + (gInputBox[1] * 10) + gInputBox[2]) - 1; + Channel = ((g_input_box[0] * 100) + (g_input_box[1] * 10) + g_input_box[2]) - 1; if (Channel <= USER_CHANNEL_LAST) { #ifdef ENABLE_VOICE g_another_voice_id = (voice_id_t)Key; #endif - gShowChPrefix = RADIO_CheckValidChannel(Channel, false, 0); + g_show_chan_prefix = RADIO_CheckValidChannel(Channel, false, 0); gScanChannel = (uint8_t)Channel; return; } } - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; } } -static void SCANNER_Key_EXIT(bool bKeyPressed, bool bKeyHeld) +static void SCANNER_Key_EXIT(bool key_pressed, bool key_held) { - if (!bKeyHeld && bKeyPressed) + if (!key_held && key_pressed) { - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; switch (gScannerEditState) { case SCAN_EDIT_STATE_NONE: - gRequestDisplayScreen = DISPLAY_MAIN; + g_request_display_screen = DISPLAY_MAIN; - g_eeprom.cross_vfo_rx_tx = gBackup_cross_vfo_rx_tx; - gUpdateStatus = true; - gFlagStopScan = true; - gVfoConfigureMode = VFO_CONFIGURE_RELOAD; - gFlagResetVfos = true; + g_eeprom.cross_vfo_rx_tx = g_backup_cross_vfo_rx_tx; + g_update_status = true; + g_flag_stop_scan = true; + g_vfo_configure_mode = VFO_CONFIGURE_RELOAD; + g_flag_reset_vfos = true; #ifdef ENABLE_VOICE g_another_voice_id = VOICE_ID_CANCEL; #endif break; case SCAN_EDIT_STATE_BUSY: - if (gInputBoxIndex > 0) + if (g_input_box_index > 0) { - gInputBox[--gInputBoxIndex] = 10; - gRequestDisplayScreen = DISPLAY_SCANNER; + g_input_box[--g_input_box_index] = 10; + g_request_display_screen = DISPLAY_SCANNER; break; } @@ -120,49 +120,49 @@ static void SCANNER_Key_EXIT(bool bKeyPressed, bool bKeyHeld) #ifdef ENABLE_VOICE g_another_voice_id = VOICE_ID_CANCEL; #endif - gRequestDisplayScreen = DISPLAY_SCANNER; + g_request_display_screen = DISPLAY_SCANNER; break; } } } -static void SCANNER_Key_MENU(bool bKeyPressed, bool bKeyHeld) +static void SCANNER_Key_MENU(bool key_pressed, bool key_held) { uint8_t Channel; - if (bKeyHeld) + if (key_held) return; - if (!bKeyPressed) + if (!key_pressed) return; - if (gScanCssState == SCAN_CSS_STATE_OFF && !gScanSingleFrequency) + if (gScanCssState == SCAN_CSS_STATE_OFF && !g_scan_single_frequency) { - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } if (gScanCssState == SCAN_CSS_STATE_SCANNING) { - if (gScanSingleFrequency) + if (g_scan_single_frequency) { - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } } if (gScanCssState == SCAN_CSS_STATE_FAILED) { - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; switch (gScannerEditState) { case SCAN_EDIT_STATE_NONE: - if (!gScanSingleFrequency) + if (!g_scan_single_frequency) { #if 0 @@ -188,12 +188,12 @@ static void SCANNER_Key_MENU(bool bKeyPressed, bool bKeyHeld) if (Delta625 < Delta250) { - gStepSetting = STEP_6_25kHz; + g_step_setting = STEP_6_25kHz; gScanFrequency = Freq625; } else { - gStepSetting = STEP_2_5kHz; + g_step_setting = STEP_2_5kHz; gScanFrequency = Freq250; } #else @@ -206,8 +206,8 @@ static void SCANNER_Key_MENU(bool bKeyPressed, bool bKeyHeld) const step_setting_t big_step = STEP_6_25kHz; #endif - const uint32_t small_step_freq = StepFrequencyTable[small_step]; - const uint32_t big_step_freq = StepFrequencyTable[big_step]; + const uint32_t small_step_freq = STEP_FREQ_TABLE[small_step]; + const uint32_t big_step_freq = STEP_FREQ_TABLE[big_step]; uint32_t freq_small_step = FREQUENCY_FloorToStep(gScanFrequency, small_step_freq, 0); uint32_t freq_big_step = FREQUENCY_FloorToStep(gScanFrequency, big_step_freq, 0); @@ -217,7 +217,7 @@ static void SCANNER_Key_MENU(bool bKeyPressed, bool bKeyHeld) if (delta_small_step > 125) { - delta_small_step = StepFrequencyTable[small_step] - delta_small_step; + delta_small_step = STEP_FREQ_TABLE[small_step] - delta_small_step; freq_big_step += small_step_freq; } @@ -231,22 +231,22 @@ static void SCANNER_Key_MENU(bool bKeyPressed, bool bKeyHeld) if (delta_small_step >= delta_big_step) { - gStepSetting = small_step; + g_step_setting = small_step; gScanFrequency = freq_small_step; } else { - gStepSetting = big_step; + g_step_setting = big_step; gScanFrequency = freq_big_step; } #endif } - if (gTxVfo->channel_save <= USER_CHANNEL_LAST) + if (g_tx_vfo->channel_save <= USER_CHANNEL_LAST) { gScannerEditState = SCAN_EDIT_STATE_BUSY; - gScanChannel = gTxVfo->channel_save; - gShowChPrefix = RADIO_CheckValidChannel(gTxVfo->channel_save, false, 0); + gScanChannel = g_tx_vfo->channel_save; + g_show_chan_prefix = RADIO_CheckValidChannel(g_tx_vfo->channel_save, false, 0); } else { @@ -259,58 +259,58 @@ static void SCANNER_Key_MENU(bool bKeyPressed, bool bKeyHeld) g_another_voice_id = VOICE_ID_MEMORY_CHANNEL; #endif - gRequestDisplayScreen = DISPLAY_SCANNER; - gUpdateStatus = true; + g_request_display_screen = DISPLAY_SCANNER; + g_update_status = true; break; case SCAN_EDIT_STATE_BUSY: - if (gInputBoxIndex == 0) + if (g_input_box_index == 0) { - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; - gRequestDisplayScreen = DISPLAY_SCANNER; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; + g_request_display_screen = DISPLAY_SCANNER; gScannerEditState = SCAN_EDIT_STATE_DONE; } break; case SCAN_EDIT_STATE_DONE: - if (!gScanSingleFrequency) + if (!g_scan_single_frequency) { - RADIO_InitInfo(gTxVfo, gTxVfo->channel_save, gScanFrequency); + RADIO_InitInfo(g_tx_vfo, g_tx_vfo->channel_save, gScanFrequency); if (gScanUseCssResult) { - gTxVfo->freq_config_rx.code_type = gScanCssResultType; - gTxVfo->freq_config_rx.code = gScanCssResultCode; + g_tx_vfo->freq_config_rx.code_type = gScanCssResultType; + g_tx_vfo->freq_config_rx.code = gScanCssResultCode; } - gTxVfo->freq_config_tx = gTxVfo->freq_config_rx; - gTxVfo->step_setting = gStepSetting; + g_tx_vfo->freq_config_tx = g_tx_vfo->freq_config_rx; + g_tx_vfo->step_setting = g_step_setting; } else { RADIO_ConfigureChannel(0, VFO_CONFIGURE_RELOAD); RADIO_ConfigureChannel(1, VFO_CONFIGURE_RELOAD); - gTxVfo->freq_config_rx.code_type = gScanCssResultType; - gTxVfo->freq_config_rx.code = gScanCssResultCode; - gTxVfo->freq_config_tx.code_type = gScanCssResultType; - gTxVfo->freq_config_tx.code = gScanCssResultCode; + g_tx_vfo->freq_config_rx.code_type = gScanCssResultType; + g_tx_vfo->freq_config_rx.code = gScanCssResultCode; + g_tx_vfo->freq_config_tx.code_type = gScanCssResultType; + g_tx_vfo->freq_config_tx.code = gScanCssResultCode; } - if (gTxVfo->channel_save <= USER_CHANNEL_LAST) + if (g_tx_vfo->channel_save <= USER_CHANNEL_LAST) { Channel = gScanChannel; g_eeprom.user_channel[g_eeprom.tx_vfo] = Channel; } else { - Channel = gTxVfo->band + FREQ_CHANNEL_FIRST; + Channel = g_tx_vfo->band + FREQ_CHANNEL_FIRST; g_eeprom.freq_channel[g_eeprom.tx_vfo] = Channel; } - gTxVfo->channel_save = Channel; + g_tx_vfo->channel_save = Channel; g_eeprom.screen_channel[g_eeprom.tx_vfo] = Channel; - gRequestSaveChannel = 2; + g_request_save_channel = 2; #ifdef ENABLE_VOICE g_another_voice_id = VOICE_ID_CONFIRM; @@ -318,52 +318,52 @@ static void SCANNER_Key_MENU(bool bKeyPressed, bool bKeyHeld) gScannerEditState = SCAN_EDIT_STATE_NONE; - gRequestDisplayScreen = DISPLAY_SCANNER; + g_request_display_screen = DISPLAY_SCANNER; break; default: - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; break; } } -static void SCANNER_Key_STAR(bool bKeyPressed, bool bKeyHeld) +static void SCANNER_Key_STAR(bool key_pressed, bool key_held) { - if (!bKeyHeld && bKeyPressed) + if (!key_held && key_pressed) { - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; - gFlagStartScan = true; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; + g_flag_start_scan = true; } return; } -static void SCANNER_Key_UP_DOWN(bool bKeyPressed, bool pKeyHeld, int8_t Direction) +static void SCANNER_Key_UP_DOWN(bool key_pressed, bool pKeyHeld, int8_t Direction) { if (pKeyHeld) { - if (!bKeyPressed) + if (!key_pressed) return; } else { - if (!bKeyPressed) + if (!key_pressed) return; - gInputBoxIndex = 0; - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + g_input_box_index = 0; + g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; } if (gScannerEditState == SCAN_EDIT_STATE_BUSY) { gScanChannel = NUMBER_AddWithWraparound(gScanChannel, Direction, 0, USER_CHANNEL_LAST); - gShowChPrefix = RADIO_CheckValidChannel(gScanChannel, false, 0); - gRequestDisplayScreen = DISPLAY_SCANNER; + g_show_chan_prefix = RADIO_CheckValidChannel(gScanChannel, false, 0); + g_request_display_screen = DISPLAY_SCANNER; } else - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; } -void SCANNER_ProcessKeys(key_code_t Key, bool bKeyPressed, bool bKeyHeld) +void SCANNER_ProcessKeys(key_code_t Key, bool key_pressed, bool key_held) { switch (Key) { @@ -377,29 +377,29 @@ void SCANNER_ProcessKeys(key_code_t Key, bool bKeyPressed, bool bKeyHeld) case KEY_7: case KEY_8: case KEY_9: - SCANNER_Key_DIGITS(Key, bKeyPressed, bKeyHeld); + SCANNER_Key_DIGITS(Key, key_pressed, key_held); break; case KEY_MENU: - SCANNER_Key_MENU(bKeyPressed, bKeyHeld); + SCANNER_Key_MENU(key_pressed, key_held); break; case KEY_UP: - SCANNER_Key_UP_DOWN(bKeyPressed, bKeyHeld, 1); + SCANNER_Key_UP_DOWN(key_pressed, key_held, 1); break; case KEY_DOWN: - SCANNER_Key_UP_DOWN(bKeyPressed, bKeyHeld, -1); + SCANNER_Key_UP_DOWN(key_pressed, key_held, -1); break; case KEY_EXIT: - SCANNER_Key_EXIT(bKeyPressed, bKeyHeld); + SCANNER_Key_EXIT(key_pressed, key_held); break; case KEY_STAR: - SCANNER_Key_STAR(bKeyPressed, bKeyHeld); + SCANNER_Key_STAR(key_pressed, key_held); break; case KEY_PTT: - GENERIC_Key_PTT(bKeyPressed); + GENERIC_Key_PTT(key_pressed); break; default: - if (!bKeyHeld && bKeyPressed) - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + if (!key_held && key_pressed) + g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; break; } } @@ -414,29 +414,29 @@ void SCANNER_Start(void) RADIO_SelectVfos(); #ifdef ENABLE_NOAA - if (IS_NOAA_CHANNEL(gRxVfo->channel_save)) - gRxVfo->channel_save = FREQ_CHANNEL_FIRST + BAND6_400MHz; + if (IS_NOAA_CHANNEL(g_rx_vfo->channel_save)) + g_rx_vfo->channel_save = FREQ_CHANNEL_FIRST + BAND6_400MHz; #endif - BackupStep = gRxVfo->step_setting; - BackupStepFreq = gRxVfo->step_freq; + BackupStep = g_rx_vfo->step_setting; + BackupStepFreq = g_rx_vfo->step_freq; - RADIO_InitInfo(gRxVfo, gRxVfo->channel_save, gRxVfo->pRX->frequency); + RADIO_InitInfo(g_rx_vfo, g_rx_vfo->channel_save, g_rx_vfo->pRX->frequency); - gRxVfo->step_setting = BackupStep; - gRxVfo->step_freq = BackupStepFreq; + g_rx_vfo->step_setting = BackupStep; + g_rx_vfo->step_freq = BackupStepFreq; RADIO_SetupRegisters(true); #ifdef ENABLE_NOAA - gIsNoaaMode = false; + g_is_noaa_mode = false; #endif - if (gScanSingleFrequency) + if (g_scan_single_frequency) { gScanCssState = SCAN_CSS_STATE_SCANNING; - gScanFrequency = gRxVfo->pRX->frequency; - gStepSetting = gRxVfo->step_setting; + gScanFrequency = g_rx_vfo->pRX->frequency; + g_step_setting = g_rx_vfo->step_setting; BK4819_PickRXFilterPathBasedOnFrequency(gScanFrequency); BK4819_SetScanFrequency(gScanFrequency); @@ -452,64 +452,64 @@ void SCANNER_Start(void) DTMF_clear_RX(); - gScanDelay_10ms = scan_freq_css_delay_10ms; + g_scan_delay_10ms = scan_freq_css_delay_10ms; gScanCssResultCode = 0xFF; gScanCssResultType = 0xFF; gScanHitCount = 0; gScanUseCssResult = false; - g_CxCSS_tailL_found = false; + g_CxCSS_tail_found = false; g_CDCSS_lost = false; g_CDCSS_code_type = 0; g_CTCSS_lost = false; #ifdef ENABLE_VOX g_vox_lost = false; #endif - g_SquelchLost = false; + g_squelch_lost = false; gScannerEditState = SCAN_EDIT_STATE_NONE; gScanProgressIndicator = 0; -// gFlagStartScan = false; +// g_flag_start_scan = false; - gUpdateStatus = true; + g_update_status = true; } void SCANNER_Stop(void) { - const uint8_t Previous = gRestoreUSER_CHANNEL; + const uint8_t Previous = g_restore_channel; - if (gScanStateDir == SCAN_OFF) + if (g_scan_state_dir == SCAN_OFF) return; // but, but, we weren't ! - gScanStateDir = SCAN_OFF; + g_scan_state_dir = SCAN_OFF; if (!bScanKeepFrequency) { - if (gNextChannel <= USER_CHANNEL_LAST) + if (g_next_channel <= USER_CHANNEL_LAST) { - g_eeprom.user_channel[g_eeprom.rx_vfo] = gRestoreUSER_CHANNEL; + g_eeprom.user_channel[g_eeprom.rx_vfo] = g_restore_channel; g_eeprom.screen_channel[g_eeprom.rx_vfo] = Previous; RADIO_ConfigureChannel(g_eeprom.rx_vfo, VFO_CONFIGURE_RELOAD); } else { - gRxVfo->freq_config_rx.frequency = gRestoreFrequency; - RADIO_ApplyOffset(gRxVfo); - RADIO_ConfigureSquelchAndOutputPower(gRxVfo); + g_rx_vfo->freq_config_rx.frequency = g_restore_frequency; + RADIO_ApplyOffset(g_rx_vfo); + RADIO_ConfigureSquelchAndOutputPower(g_rx_vfo); } RADIO_SetupRegisters(true); - gUpdateDisplay = true; + g_update_display = true; return; } - if (gRxVfo->channel_save > USER_CHANNEL_LAST) + if (g_rx_vfo->channel_save > USER_CHANNEL_LAST) { - RADIO_ApplyOffset(gRxVfo); - RADIO_ConfigureSquelchAndOutputPower(gRxVfo); - SETTINGS_SaveChannel(gRxVfo->channel_save, g_eeprom.rx_vfo, gRxVfo, 1); + RADIO_ApplyOffset(g_rx_vfo); + RADIO_ConfigureSquelchAndOutputPower(g_rx_vfo); + SETTINGS_SaveChannel(g_rx_vfo->channel_save, g_eeprom.rx_vfo, g_rx_vfo, 1); return; } SETTINGS_SaveVfoIndices(); - gUpdateStatus = true; + g_update_status = true; } diff --git a/app/scanner.h b/app/scanner.h index 3df9923..3123b75 100644 --- a/app/scanner.h +++ b/app/scanner.h @@ -44,23 +44,23 @@ typedef enum SCAN_edit_state_e SCAN_edit_state_t; extern dcs_code_type_t gScanCssResultType; extern uint8_t gScanCssResultCode; -extern bool gFlagStartScan; -extern bool gFlagStopScan; -extern bool gScanSingleFrequency; +extern bool g_flag_start_scan; +extern bool g_flag_stop_scan; +extern bool g_scan_single_frequency; extern SCAN_edit_state_t gScannerEditState; extern uint8_t gScanChannel; extern uint32_t gScanFrequency; extern bool gScanPauseMode; extern SCAN_CssState_t gScanCssState; -extern volatile bool gScheduleScanListen; -extern volatile uint16_t gScanPauseDelayIn_10ms; +extern volatile bool g_schedule_scan_listen; +extern volatile uint16_t g_scan_pause_delay_in_10ms; extern uint8_t gScanProgressIndicator; extern uint8_t gScanHitCount; extern bool gScanUseCssResult; -extern int8_t gScanStateDir; +extern int8_t g_scan_state_dir; extern bool bScanKeepFrequency; -void SCANNER_ProcessKeys(key_code_t Key, bool bKeyPressed, bool bKeyHeld); +void SCANNER_ProcessKeys(key_code_t Key, bool key_pressed, bool key_held); void SCANNER_Start(void); void SCANNER_Stop(void); diff --git a/app/spectrum.c b/app/spectrum.c index 85c9bc1..3f7f758 100644 --- a/app/spectrum.c +++ b/app/spectrum.c @@ -342,7 +342,7 @@ uint32_t GetOffsetedF(uint32_t f) { FrequencyBandTable[ARRAY_SIZE(FrequencyBandTable) - 1].upper); } -bool IsTXAllowed() { return gSetting_ALL_TX != 2; } +bool IsTXAllowed() { return g_setting_ALL_TX != 2; } static void ToggleAudio(bool on) { if (on) { @@ -749,19 +749,19 @@ static void UpdateBatteryInfo() { static void DrawStatus() { - gStatusLine[127] = 0b01111110; + g_status_line[127] = 0b01111110; for (int i = 126; i >= 116; i--) { - gStatusLine[i] = 0b01000010; + g_status_line[i] = 0b01000010; } uint8_t v = gBatteryDisplayLevel; v <<= 1; for (int i = 125; i >= 116; i--) { if (126 - i <= v) { - gStatusLine[i + 2] = 0b01111110; + g_status_line[i + 2] = 0b01111110; } } - gStatusLine[117] = 0b01111110; - gStatusLine[116] = 0b00011000; + g_status_line[117] = 0b01111110; + g_status_line[116] = 0b00011000; } static void DrawF(uint32_t f) { @@ -829,25 +829,25 @@ static void DrawTicks() { (f % 50000) < step && (barValue |= 0b00000100); (f % 100000) < step && (barValue |= 0b00011000); - gFrameBuffer[5][i] |= barValue; + g_frame_buffer[5][i] |= barValue; } // center /* if (IsCenterMode()) { - gFrameBuffer[5][62] = 0x80; - gFrameBuffer[5][63] = 0x80; - gFrameBuffer[5][64] = 0xff; - gFrameBuffer[5][65] = 0x80; - gFrameBuffer[5][66] = 0x80; + g_frame_buffer[5][62] = 0x80; + g_frame_buffer[5][63] = 0x80; + g_frame_buffer[5][64] = 0xff; + g_frame_buffer[5][65] = 0x80; + g_frame_buffer[5][66] = 0x80; } else { - gFrameBuffer[5][0] = 0xff; - gFrameBuffer[5][1] = 0x80; - gFrameBuffer[5][2] = 0x80; - gFrameBuffer[5][3] = 0x80; - gFrameBuffer[5][124] = 0x80; - gFrameBuffer[5][125] = 0x80; - gFrameBuffer[5][126] = 0x80; - gFrameBuffer[5][127] = 0xff; + g_frame_buffer[5][0] = 0xff; + g_frame_buffer[5][1] = 0x80; + g_frame_buffer[5][2] = 0x80; + g_frame_buffer[5][3] = 0x80; + g_frame_buffer[5][124] = 0x80; + g_frame_buffer[5][125] = 0x80; + g_frame_buffer[5][126] = 0x80; + g_frame_buffer[5][127] = 0xff; } */ } @@ -856,7 +856,7 @@ static void DrawArrow(uint8_t x) { signed v = x + i; uint8_t a = i > 0 ? i : -i; if (!(v & 128)) { - gFrameBuffer[5][v] |= (0b01111000 << a) & 0b01111000; + g_frame_buffer[5][v] |= (0b01111000 << a) & 0b01111000; } } } @@ -1059,7 +1059,7 @@ static void RenderFreqInput() { } static void RenderStatus() { - memset(gStatusLine, 0, sizeof(gStatusLine)); + memset(g_status_line, 0, sizeof(g_status_line)); DrawStatus(); ST7565_BlitStatusLine(); } @@ -1080,16 +1080,16 @@ static void RenderStill() { for (int i = 0; i < 121; i++) { if (i % 10 == 0) { - gFrameBuffer[2][i + METER_PAD_LEFT] = 0b11000000; + g_frame_buffer[2][i + METER_PAD_LEFT] = 0b11000000; } else { - gFrameBuffer[2][i + METER_PAD_LEFT] = 0b01000000; + g_frame_buffer[2][i + METER_PAD_LEFT] = 0b01000000; } } uint8_t x = Rssi2PX(scanInfo.rssi, 0, 121); for (int i = 0; i < x; ++i) { if (i % 5 && i / 5 < x / 5) { - gFrameBuffer[2][i + METER_PAD_LEFT] |= 0b00011100; + g_frame_buffer[2][i + METER_PAD_LEFT] |= 0b00011100; } } @@ -1108,15 +1108,15 @@ static void RenderStill() { uint8_t afDB = BK4819_ReadRegister(0x6F) & 0b1111111; uint8_t afPX = ConvertDomain(afDB, 26, 194, 0, 121); for (int i = 0; i < afPX; ++i) { - gFrameBuffer[3][i + METER_PAD_LEFT] |= 0b00000011; + g_frame_buffer[3][i + METER_PAD_LEFT] |= 0b00000011; } } if (!monitorMode) { uint8_t x = Rssi2PX(settings.rssiTriggerLevel, 0, 121); - gFrameBuffer[2][METER_PAD_LEFT + x - 1] |= 0b01000001; - gFrameBuffer[2][METER_PAD_LEFT + x] = 0b01111111; - gFrameBuffer[2][METER_PAD_LEFT + x + 1] |= 0b01000001; + g_frame_buffer[2][METER_PAD_LEFT + x - 1] |= 0b01000001; + g_frame_buffer[2][METER_PAD_LEFT + x] = 0b01111111; + g_frame_buffer[2][METER_PAD_LEFT + x + 1] |= 0b01000001; } const uint8_t PAD_LEFT = 4; @@ -1132,8 +1132,8 @@ static void RenderStill() { offset = PAD_LEFT + i * CELL_WIDTH; if (menuState == idx) { for (int j = 0; j < CELL_WIDTH; ++j) { - gFrameBuffer[row][j + offset] = 0xFF; - gFrameBuffer[row + 1][j + offset] = 0xFF; + g_frame_buffer[row][j + offset] = 0xFF; + g_frame_buffer[row + 1][j + offset] = 0xFF; } } RegisterSpec s = registerSpecs[idx]; @@ -1147,7 +1147,7 @@ static void RenderStill() { } static void Render() { - memset(gFrameBuffer, 0, sizeof(gFrameBuffer)); + memset(g_frame_buffer, 0, sizeof(g_frame_buffer)); switch (currentState) { case SPECTRUM: @@ -1327,7 +1327,7 @@ static void AutomaticPresetChoose(uint32_t f) { void APP_RunSpectrum() { BackupRegisters(); // TX here coz it always? set to active VFO - VFO_Info_t vfo = g_eeprom.VfoInfo[g_eeprom.TX_CHANNEL]; + VFO_Info_t vfo = g_eeprom.vfo_info[g_eeprom.TX_CHANNEL]; initialFreq = vfo.pRX->Frequency; currentFreq = initialFreq; settings.scanStepIndex = gStepSettingToIndex[vfo.STEP_SETTING]; diff --git a/app/uart.c b/app/uart.c index 561998b..9cfbca8 100644 --- a/app/uart.c +++ b/app/uart.c @@ -61,8 +61,8 @@ typedef struct { Header_t Header; struct { char Version[16]; - bool bHasCustomAesKey; - bool bIsInLockScreen; + bool g_has_custom_aes_key; + bool g_is_in_lock_screen; uint8_t Padding[2]; uint32_t Challenge[4]; } Data; @@ -153,7 +153,7 @@ static union } UART_Command; static uint32_t Timestamp; -static uint16_t gUART_WriteIndex; +static uint16_t g_uart_write_index; static bool bIsEncrypted = true; static void SendReply(void *pReply, uint16_t Size) @@ -196,12 +196,12 @@ static void SendVersion(void) Reply.Header.ID = 0x0515; Reply.Header.Size = sizeof(Reply.Data); strcpy(Reply.Data.Version, Version); - Reply.Data.bHasCustomAesKey = bHasCustomAesKey; - Reply.Data.bIsInLockScreen = bIsInLockScreen; - Reply.Data.Challenge[0] = gChallenge[0]; - Reply.Data.Challenge[1] = gChallenge[1]; - Reply.Data.Challenge[2] = gChallenge[2]; - Reply.Data.Challenge[3] = gChallenge[3]; + Reply.Data.g_has_custom_aes_key = g_has_custom_aes_key; + Reply.Data.g_is_in_lock_screen = g_is_in_lock_screen; + Reply.Data.Challenge[0] = g_challenge[0]; + Reply.Data.Challenge[1] = g_challenge[1]; + Reply.Data.Challenge[2] = g_challenge[2]; + Reply.Data.Challenge[3] = g_challenge[3]; SendReply(&Reply, sizeof(Reply)); } @@ -232,10 +232,10 @@ static void CMD_0514(const uint8_t *pBuffer) Timestamp = pCmd->Timestamp; #ifdef ENABLE_FMRADIO - gFmRadioCountdown_500ms = fm_radio_countdown_500ms; + g_fm_radio_count_down_500ms = fm_radio_countdown_500ms; #endif - gSerialConfigCountDown_500ms = 12; // 6 sec + g_serial_config_count_down_500ms = 12; // 6 sec // turn the LCD backlight off GPIO_ClearBit(&GPIOB->DATA, GPIOB_PIN_BACKLIGHT); @@ -252,10 +252,10 @@ static void CMD_051B(const uint8_t *pBuffer) if (pCmd->Timestamp != Timestamp) return; - gSerialConfigCountDown_500ms = 12; // 6 sec + g_serial_config_count_down_500ms = 12; // 6 sec #ifdef ENABLE_FMRADIO - gFmRadioCountdown_500ms = fm_radio_countdown_500ms; + g_fm_radio_count_down_500ms = fm_radio_countdown_500ms; #endif memset(&Reply, 0, sizeof(Reply)); @@ -264,8 +264,8 @@ static void CMD_051B(const uint8_t *pBuffer) Reply.Data.Offset = pCmd->Offset; Reply.Data.Size = pCmd->Size; - if (bHasCustomAesKey) - bLocked = gIsLocked; + if (g_has_custom_aes_key) + bLocked = g_is_locked; if (!bLocked) EEPROM_ReadBuffer(pCmd->Offset, Reply.Data.Data, pCmd->Size); @@ -283,19 +283,19 @@ static void CMD_051D(const uint8_t *pBuffer) if (pCmd->Timestamp != Timestamp) return; - gSerialConfigCountDown_500ms = 12; // 6 sec + g_serial_config_count_down_500ms = 12; // 6 sec bReloadEeprom = false; #ifdef ENABLE_FMRADIO - gFmRadioCountdown_500ms = fm_radio_countdown_500ms; + g_fm_radio_count_down_500ms = fm_radio_countdown_500ms; #endif Reply.Header.ID = 0x051E; Reply.Header.Size = sizeof(Reply.Data); Reply.Data.Offset = pCmd->Offset; - bIsLocked = bHasCustomAesKey ? gIsLocked : bHasCustomAesKey; + bIsLocked = g_has_custom_aes_key ? g_is_locked : g_has_custom_aes_key; if (!bIsLocked) { @@ -305,10 +305,10 @@ static void CMD_051D(const uint8_t *pBuffer) const uint16_t Offset = pCmd->Offset + (i * 8U); if (Offset >= 0x0F30 && Offset < 0x0F40) - if (!gIsLocked) + if (!g_is_locked) bReloadEeprom = true; - if ((Offset < 0x0E98 || Offset >= 0x0EA0) || !bIsInLockScreen || pCmd->bAllowPassword) + if ((Offset < 0x0E98 || Offset >= 0x0EA0) || !g_is_in_lock_screen || pCmd->bAllowPassword) EEPROM_WriteBuffer(Offset, &pCmd->Data[i * 8U]); } @@ -352,35 +352,35 @@ static void CMD_052D(const uint8_t *pBuffer) bool bIsLocked; #ifdef ENABLE_FMRADIO - gFmRadioCountdown_500ms = fm_radio_countdown_500ms; + g_fm_radio_count_down_500ms = fm_radio_countdown_500ms; #endif Reply.Header.ID = 0x052E; Reply.Header.Size = sizeof(Reply.Data); - bIsLocked = bHasCustomAesKey; + bIsLocked = g_has_custom_aes_key; if (!bIsLocked) - bIsLocked = IsBadChallenge(gCustomAesKey, gChallenge, pCmd->Response); + bIsLocked = IsBadChallenge(g_custom_aes_key, g_challenge, pCmd->Response); if (!bIsLocked) { - bIsLocked = IsBadChallenge(gDefaultAesKey, gChallenge, pCmd->Response); + bIsLocked = IsBadChallenge(g_default_aes_key, g_challenge, pCmd->Response); if (bIsLocked) - gTryCount++; + g_try_count++; } - if (gTryCount < 3) + if (g_try_count < 3) { if (!bIsLocked) - gTryCount = 0; + g_try_count = 0; } else { - gTryCount = 3; + g_try_count = 3; bIsLocked = true; } - gIsLocked = bIsLocked; + g_is_locked = bIsLocked; Reply.Data.bIsLocked = bIsLocked; SendReply(&Reply, sizeof(Reply)); @@ -393,22 +393,22 @@ static void CMD_052F(const uint8_t *pBuffer) g_eeprom.dual_watch = DUAL_WATCH_OFF; g_eeprom.cross_vfo_rx_tx = CROSS_BAND_OFF; g_eeprom.rx_vfo = 0; - g_eeprom.DTMF_side_tone = false; - g_eeprom.VfoInfo[0].frequency_reverse = false; - g_eeprom.VfoInfo[0].pRX = &g_eeprom.VfoInfo[0].freq_config_rx; - g_eeprom.VfoInfo[0].pTX = &g_eeprom.VfoInfo[0].freq_config_tx; - g_eeprom.VfoInfo[0].tx_offset_freq_dir = TX_OFFSET_FREQ_DIR_OFF; - g_eeprom.VfoInfo[0].DTMF_ptt_id_tx_mode = PTT_ID_OFF; - g_eeprom.VfoInfo[0].DTMF_decoding_enable = false; + g_eeprom.dtmf_side_tone = false; + g_eeprom.vfo_info[0].frequency_reverse = false; + g_eeprom.vfo_info[0].pRX = &g_eeprom.vfo_info[0].freq_config_rx; + g_eeprom.vfo_info[0].pTX = &g_eeprom.vfo_info[0].freq_config_tx; + g_eeprom.vfo_info[0].tx_offset_freq_dir = TX_OFFSET_FREQ_DIR_OFF; + g_eeprom.vfo_info[0].dtmf_ptt_id_tx_mode = PTT_ID_OFF; + g_eeprom.vfo_info[0].dtmf_decoding_enable = false; #ifdef ENABLE_NOAA - gIsNoaaMode = false; + g_is_noaa_mode = false; #endif - if (gCurrentFunction == FUNCTION_POWER_SAVE) + if (g_current_function == FUNCTION_POWER_SAVE) FUNCTION_Select(FUNCTION_FOREGROUND); - gSerialConfigCountDown_500ms = 12; // 6 sec + g_serial_config_count_down_500ms = 12; // 6 sec Timestamp = pCmd->Timestamp; @@ -429,35 +429,35 @@ bool UART_IsCommandAvailable(void) while (1) { - if (gUART_WriteIndex == DmaLength) + if (g_uart_write_index == DmaLength) return false; - while (gUART_WriteIndex != DmaLength && UART_DMA_Buffer[gUART_WriteIndex] != 0xABU) - gUART_WriteIndex = DMA_INDEX(gUART_WriteIndex, 1); + while (g_uart_write_index != DmaLength && UART_DMA_Buffer[g_uart_write_index] != 0xABU) + g_uart_write_index = DMA_INDEX(g_uart_write_index, 1); - if (gUART_WriteIndex == DmaLength) + if (g_uart_write_index == DmaLength) return false; - if (gUART_WriteIndex < DmaLength) - CommandLength = DmaLength - gUART_WriteIndex; + if (g_uart_write_index < DmaLength) + CommandLength = DmaLength - g_uart_write_index; else - CommandLength = (DmaLength + sizeof(UART_DMA_Buffer)) - gUART_WriteIndex; + CommandLength = (DmaLength + sizeof(UART_DMA_Buffer)) - g_uart_write_index; if (CommandLength < 8) return 0; - if (UART_DMA_Buffer[DMA_INDEX(gUART_WriteIndex, 1)] == 0xCD) + if (UART_DMA_Buffer[DMA_INDEX(g_uart_write_index, 1)] == 0xCD) break; - gUART_WriteIndex = DMA_INDEX(gUART_WriteIndex, 1); + g_uart_write_index = DMA_INDEX(g_uart_write_index, 1); } - Index = DMA_INDEX(gUART_WriteIndex, 2); + Index = DMA_INDEX(g_uart_write_index, 2); Size = (UART_DMA_Buffer[DMA_INDEX(Index, 1)] << 8) | UART_DMA_Buffer[Index]; if ((Size + 8u) > sizeof(UART_DMA_Buffer)) { - gUART_WriteIndex = DmaLength; + g_uart_write_index = DmaLength; return false; } @@ -469,7 +469,7 @@ bool UART_IsCommandAvailable(void) if (UART_DMA_Buffer[TailIndex] != 0xDC || UART_DMA_Buffer[DMA_INDEX(TailIndex, 1)] != 0xBA) { - gUART_WriteIndex = DmaLength; + g_uart_write_index = DmaLength; return false; } @@ -483,15 +483,15 @@ bool UART_IsCommandAvailable(void) memmove(UART_Command.Buffer, UART_DMA_Buffer + Index, TailIndex - Index); TailIndex = DMA_INDEX(TailIndex, 2); - if (TailIndex < gUART_WriteIndex) + if (TailIndex < g_uart_write_index) { - memset(UART_DMA_Buffer + gUART_WriteIndex, 0, sizeof(UART_DMA_Buffer) - gUART_WriteIndex); + memset(UART_DMA_Buffer + g_uart_write_index, 0, sizeof(UART_DMA_Buffer) - g_uart_write_index); memset(UART_DMA_Buffer, 0, TailIndex); } else - memset(UART_DMA_Buffer + gUART_WriteIndex, 0, TailIndex - gUART_WriteIndex); + memset(UART_DMA_Buffer + g_uart_write_index, 0, TailIndex - g_uart_write_index); - gUART_WriteIndex = TailIndex; + g_uart_write_index = TailIndex; if (UART_Command.Header.ID == 0x0514) bIsEncrypted = false; diff --git a/audio.c b/audio.c index 2fbbde5..4a64d64 100644 --- a/audio.c +++ b/audio.c @@ -68,9 +68,9 @@ #endif -BEEP_Type_t gBeepToPlay = BEEP_NONE; +beep_type_t g_beep_to_play = BEEP_NONE; -void AUDIO_PlayBeep(BEEP_Type_t Beep) +void AUDIO_PlayBeep(beep_type_t Beep) { uint16_t ToneConfig; uint16_t ToneFrequency; @@ -85,25 +85,25 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) return; #ifdef ENABLE_AIRCOPY - if (gScreenToDisplay == DISPLAY_AIRCOPY) + if (g_screen_to_display == DISPLAY_AIRCOPY) return; #endif - if (gCurrentFunction == FUNCTION_RECEIVE) + if (g_current_function == FUNCTION_RECEIVE) return; - if (gCurrentFunction == FUNCTION_MONITOR) + if (g_current_function == FUNCTION_MONITOR) return; ToneConfig = BK4819_ReadRegister(BK4819_REG_71); GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); - if (gCurrentFunction == FUNCTION_POWER_SAVE && g_rx_idle_mode) + if (g_current_function == FUNCTION_POWER_SAVE && g_rx_idle_mode) BK4819_RX_TurnOn(); #ifdef ENABLE_FMRADIO - if (gFmRadioMode) + if (g_fm_radio_mode) BK1080_Mute(true); #endif @@ -193,7 +193,7 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); #ifdef ENABLE_VOX - gVoxResumeCountdown = 80; + g_vox_resume_count_down = 80; #endif SYSTEM_DelayMs(5); @@ -201,15 +201,15 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) SYSTEM_DelayMs(5); BK4819_WriteRegister(BK4819_REG_71, ToneConfig); - if (gEnableSpeaker) + if (g_enable_speaker) GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); #ifdef ENABLE_FMRADIO - if (gFmRadioMode) + if (g_fm_radio_mode) BK1080_Mute(false); #endif - if (gCurrentFunction == FUNCTION_POWER_SAVE && g_rx_idle_mode) + if (g_current_function == FUNCTION_POWER_SAVE && g_rx_idle_mode) BK4819_Sleep(); } @@ -239,7 +239,7 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) } } - void AUDIO_PlaySingleVoice(bool bFlag) + void AUDIO_PlaySingleVoice(bool flag) { uint8_t VoiceID; uint8_t Delay; @@ -265,20 +265,20 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) VoiceID += VOICE_ID_ENG_BASE; } - if (gCurrentFunction == FUNCTION_RECEIVE || - gCurrentFunction == FUNCTION_MONITOR || - gCurrentFunction == FUNCTION_INCOMING) // 1of11 + if (g_current_function == FUNCTION_RECEIVE || + g_current_function == FUNCTION_MONITOR || + g_current_function == FUNCTION_INCOMING) // 1of11 BK4819_SetAF(BK4819_AF_MUTE); #ifdef ENABLE_FMRADIO - if (gFmRadioMode) + if (g_fm_radio_mode) BK1080_Mute(true); #endif GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); #ifdef ENABLE_VOX - gVoxResumeCountdown = 2000; + g_vox_resume_count_down = 2000; #endif SYSTEM_DelayMs(5); @@ -287,28 +287,28 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) if (g_voice_write_index == 1) Delay += 3; - if (bFlag) + if (flag) { SYSTEM_DelayMs(Delay * 10); - if (gCurrentFunction == FUNCTION_RECEIVE || - gCurrentFunction == FUNCTION_MONITOR || - gCurrentFunction == FUNCTION_INCOMING) // 1of11 - BK4819_SetAF(gRxVfo->am_mode ? BK4819_AF_AM : BK4819_AF_FM); + if (g_current_function == FUNCTION_RECEIVE || + g_current_function == FUNCTION_MONITOR || + g_current_function == FUNCTION_INCOMING) // 1of11 + BK4819_SetAF(g_rx_vfo->am_mode ? BK4819_AF_AM : BK4819_AF_FM); #ifdef ENABLE_FMRADIO - if (gFmRadioMode) + if (g_fm_radio_mode) BK1080_Mute(false); #endif - if (!gEnableSpeaker) + if (!g_enable_speaker) GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); g_voice_write_index = 0; g_voice_read_index = 0; #ifdef ENABLE_VOX - gVoxResumeCountdown = 80; + g_vox_resume_count_down = 80; #endif return; @@ -425,28 +425,28 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) g_flag_play_queued_voice = false; #ifdef ENABLE_VOX - gVoxResumeCountdown = 2000; + g_vox_resume_count_down = 2000; #endif return; } } - if (gCurrentFunction == FUNCTION_RECEIVE || - gCurrentFunction == FUNCTION_MONITOR || - gCurrentFunction == FUNCTION_INCOMING) // 1of11 - BK4819_SetAF(gRxVfo->am_mode ? BK4819_AF_AM : BK4819_AF_FM); + if (g_current_function == FUNCTION_RECEIVE || + g_current_function == FUNCTION_MONITOR || + g_current_function == FUNCTION_INCOMING) // 1of11 + BK4819_SetAF(g_rx_vfo->am_mode ? BK4819_AF_AM : BK4819_AF_FM); #ifdef ENABLE_FMRADIO - if (gFmRadioMode) + if (g_fm_radio_mode) BK1080_Mute(false); #endif - if (!gEnableSpeaker) + if (!g_enable_speaker) GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); #ifdef ENABLE_VOX - gVoxResumeCountdown = 80; + g_vox_resume_count_down = 80; #endif g_voice_write_index = 0; diff --git a/audio.h b/audio.h index 7e7dd14..5bfc4a9 100644 --- a/audio.h +++ b/audio.h @@ -20,7 +20,7 @@ #include #include -enum BEEP_Type_t +enum beep_type_e { BEEP_NONE = 0, BEEP_1KHZ_60MS_OPTIONAL, @@ -33,12 +33,11 @@ enum BEEP_Type_t BEEP_880HZ_40MS_OPTIONAL, BEEP_880HZ_60MS_TRIPLE_BEEP }; +typedef enum beep_type_e beep_type_t; -typedef enum BEEP_Type_t BEEP_Type_t; +extern beep_type_t g_beep_to_play; -extern BEEP_Type_t gBeepToPlay; - -void AUDIO_PlayBeep(BEEP_Type_t Beep); +void AUDIO_PlayBeep(beep_type_t Beep); enum { @@ -76,12 +75,12 @@ enum voice_id_e VOICE_ID_DELETE_CHANNEL = 0x19U, VOICE_ID_FREQUENCY_STEP = 0x1AU, VOICE_ID_SQUELCH = 0x1BU, - voice_id_tRANSMIT_OVER_TIME = 0x1CU, + VOICE_ID_TRANSMIT_OVER_TIME = 0x1CU, VOICE_ID_BACKLIGHT_SELECTION = 0x1DU, VOICE_ID_VOX = 0x1EU, - voice_id_tX_OFFSET_FREQ_DIR = 0x1FU, - voice_id_tX_OFFSET_FREQ = 0x20U, - voice_id_tRANSMITING_MEMORY = 0x21U, + VOICE_ID_TX_OFFSET_FREQ_DIR = 0x1FU, + VOICE_ID_TX_OFFSET_FREQ = 0x20U, + VOICE_ID_TRANSMITING_MEMORY = 0x21U, VOICE_ID_RECEIVING_MEMORY = 0x22U, VOICE_ID_EMERGENCY_CALL = 0x23U, VOICE_ID_LOW_VOLTAGE = 0x24U, @@ -138,7 +137,7 @@ typedef enum voice_id_e voice_id_t; extern voice_id_t g_another_voice_id; void AUDIO_PlayVoice(uint8_t VoiceID); - void AUDIO_PlaySingleVoice(bool bFlag); + void AUDIO_PlaySingleVoice(bool flag); void AUDIO_SetVoiceID(uint8_t Index, voice_id_t VoiceID); uint8_t AUDIO_SetDigitVoice(uint8_t Index, uint16_t Value); void AUDIO_PlayQueuedVoice(void); diff --git a/bitmaps.c b/bitmaps.c index 88072ee..25327cc 100644 --- a/bitmaps.c +++ b/bitmaps.c @@ -112,7 +112,7 @@ const uint8_t BITMAP_USB_C[9] = 0b00011100 }; -const uint8_t BITMAP_KeyLock[6] = +const uint8_t BITMAP_KEYLOCK[6] = { // teeny padlock symbol 0b00000000, 0b01111100, @@ -122,7 +122,7 @@ const uint8_t BITMAP_KeyLock[6] = 0b01111100 }; -const uint8_t BITMAP_F_Key[6] = +const uint8_t BITMAP_F_KEY[6] = { // F-Key symbol 0b00000000, 0b01011111, @@ -224,7 +224,7 @@ const uint8_t BITMAP_TDR2[12] = }; #ifdef ENABLE_VOICE - const uint8_t BITMAP_VoicePrompt[9] = + const uint8_t BITMAP_VOICE_PROMPT[9] = { 0b00000000, 0b00011000, @@ -276,7 +276,7 @@ const uint8_t BITMAP_TDR2[12] = }; #endif -const uint8_t BITMAP_Antenna[5] = +const uint8_t BITMAP_ANTENNA[5] = { 0b00000011, 0b00000101, @@ -285,42 +285,42 @@ const uint8_t BITMAP_Antenna[5] = 0b00000011 }; -const uint8_t BITMAP_AntennaLevel1[3] = +const uint8_t BITMAP_ANTENNA_LEVEL1[3] = { 0b01100000, 0b01100000, 0b00000000 }; -const uint8_t BITMAP_AntennaLevel2[3] = +const uint8_t BITMAP_ANTENNA_LEVEL2[3] = { 0b01110000, 0b01110000, 0b00000000 }; -const uint8_t BITMAP_AntennaLevel3[3] = +const uint8_t BITMAP_ANTENNA_LEVEL3[3] = { 0b01111000, 0b01111000, 0b00000000 }; -const uint8_t BITMAP_AntennaLevel4[3] = +const uint8_t BITMAP_ANTENNA_LEVEL4[3] = { 0b01111100, 0b01111100, 0b00000000 }; -const uint8_t BITMAP_AntennaLevel5[3] = +const uint8_t BITMAP_ANTENNA_LEVEL5[3] = { 0b01111110, 0b01111110, 0b00000000 }; -const uint8_t BITMAP_AntennaLevel6[3] = +const uint8_t BITMAP_ANTENNA_LEVEL6[3] = { 0b01111111, 0b01111111, @@ -339,7 +339,7 @@ const uint8_t BITMAP_MARKER[8] = 0b00011000 }; -const uint8_t BITMAP_VFO_Default[8] = +const uint8_t BITMAP_VFO_DEFAULT[8] = { 0b00000000, 0b01111111, @@ -351,7 +351,7 @@ const uint8_t BITMAP_VFO_Default[8] = 0b00001000 }; -const uint8_t BITMAP_VFO_NotDefault[8] = +const uint8_t BITMAP_VFO_NOT_DEFAULT[8] = { 0b00000000, 0b01000001, @@ -363,7 +363,7 @@ const uint8_t BITMAP_VFO_NotDefault[8] = 0b00001000 }; -const uint8_t BITMAP_ScanList1[6] = +const uint8_t BITMAP_SCANLIST1[6] = { // 'I' symbol 0b00000000, 0b00000000, @@ -373,7 +373,7 @@ const uint8_t BITMAP_ScanList1[6] = 0b00000000 }; -const uint8_t BITMAP_ScanList2[6] = +const uint8_t BITMAP_SCANLIST2[6] = { // 'II' symbol 0b00000000, 0b01000010, @@ -383,7 +383,7 @@ const uint8_t BITMAP_ScanList2[6] = 0b01000010 }; -const uint8_t BITMAP_compand[6] = +const uint8_t BITMAP_COMPAND[6] = { 0b00000000, 0b00111100, diff --git a/bitmaps.h b/bitmaps.h index cabe300..d950769 100644 --- a/bitmaps.h +++ b/bitmaps.h @@ -12,9 +12,9 @@ extern const uint8_t BITMAP_BATTERY_LEVEL[17]; extern const uint8_t BITMAP_USB_C[9]; -extern const uint8_t BITMAP_KeyLock[6]; +extern const uint8_t BITMAP_KEYLOCK[6]; -extern const uint8_t BITMAP_F_Key[6]; +extern const uint8_t BITMAP_F_KEY[6]; #ifdef ENABLE_VOX extern const uint8_t BITMAP_VOX[18]; @@ -30,7 +30,7 @@ extern const uint8_t BITMAP_TDR1[12]; extern const uint8_t BITMAP_TDR2[12]; #ifdef ENABLE_VOICE - extern const uint8_t BITMAP_VoicePrompt[9]; + extern const uint8_t BITMAP_VOICE_PROMPT[9]; #endif #ifdef ENABLE_FMRADIO @@ -41,23 +41,23 @@ extern const uint8_t BITMAP_TDR2[12]; extern const uint8_t BITMAP_NOAA[12]; #endif -extern const uint8_t BITMAP_Antenna[5]; -extern const uint8_t BITMAP_AntennaLevel1[3]; -extern const uint8_t BITMAP_AntennaLevel2[3]; -extern const uint8_t BITMAP_AntennaLevel3[3]; -extern const uint8_t BITMAP_AntennaLevel4[3]; -extern const uint8_t BITMAP_AntennaLevel5[3]; -extern const uint8_t BITMAP_AntennaLevel6[3]; +extern const uint8_t BITMAP_ANTENNA[5]; +extern const uint8_t BITMAP_ANTENNA_LEVEL1[3]; +extern const uint8_t BITMAP_ANTENNA_LEVEL2[3]; +extern const uint8_t BITMAP_ANTENNA_LEVEL3[3]; +extern const uint8_t BITMAP_ANTENNA_LEVEL4[3]; +extern const uint8_t BITMAP_ANTENNA_LEVEL5[3]; +extern const uint8_t BITMAP_ANTENNA_LEVEL6[3]; extern const uint8_t BITMAP_MARKER[8]; -extern const uint8_t BITMAP_VFO_Default[8]; -extern const uint8_t BITMAP_VFO_NotDefault[8]; +extern const uint8_t BITMAP_VFO_DEFAULT[8]; +extern const uint8_t BITMAP_VFO_NOT_DEFAULT[8]; -extern const uint8_t BITMAP_ScanList1[6]; -extern const uint8_t BITMAP_ScanList2[6]; +extern const uint8_t BITMAP_SCANLIST1[6]; +extern const uint8_t BITMAP_SCANLIST2[6]; -extern const uint8_t BITMAP_compand[6]; +extern const uint8_t BITMAP_COMPAND[6]; #endif diff --git a/board.c b/board.c index 44764d6..4812da1 100644 --- a/board.c +++ b/board.c @@ -529,7 +529,7 @@ void BOARD_EEPROM_Init(void) g_eeprom.squelch_level = (Data[1] < 10) ? Data[1] : 1; g_eeprom.tx_timeout_timer = (Data[2] < 11) ? Data[2] : 1; #ifdef ENABLE_NOAA - g_eeprom.NOAA_auto_scan = (Data[3] < 2) ? Data[3] : false; + g_eeprom.noaa_auto_scan = (Data[3] < 2) ? Data[3] : false; #endif g_eeprom.key_lock = (Data[4] < 2) ? Data[4] : false; #ifdef ENABLE_VOX @@ -541,10 +541,10 @@ void BOARD_EEPROM_Init(void) // 0E78..0E7F EEPROM_ReadBuffer(0x0E78, Data, 8); g_eeprom.channel_display_mode = (Data[1] < 4) ? Data[1] : MDF_FREQUENCY; // 4 instead of 3 - extra display mode - g_eeprom.cross_vfo_rx_tx = (Data[2] < 3) ? Data[2] : CROSS_BAND_OFF; + g_eeprom.cross_vfo_rx_tx = (Data[2] < 3) ? Data[2] : CROSS_BAND_OFF; g_eeprom.battery_save = (Data[3] < 5) ? Data[3] : 4; g_eeprom.dual_watch = (Data[4] < 3) ? Data[4] : DUAL_WATCH_CHAN_A; - g_eeprom.backlight = (Data[5] < ARRAY_SIZE(gSubMenu_backlight)) ? Data[5] : 3; + g_eeprom.backlight = (Data[5] < ARRAY_SIZE(g_sub_menu_backlight)) ? Data[5] : 3; g_eeprom.tail_note_elimination = (Data[6] < 2) ? Data[6] : false; g_eeprom.vfo_open = (Data[7] < 2) ? Data[7] : true; @@ -584,7 +584,7 @@ void BOARD_EEPROM_Init(void) } // 0E40..0E67 - EEPROM_ReadBuffer(0x0E40, gFM_Channels, sizeof(gFM_Channels)); + EEPROM_ReadBuffer(0x0E40, g_fm_channels, sizeof(g_fm_channels)); FM_ConfigureChannelState(); #endif @@ -620,29 +620,29 @@ void BOARD_EEPROM_Init(void) // 0ED0..0ED7 EEPROM_ReadBuffer(0x0ED0, Data, 8); - g_eeprom.DTMF_side_tone = (Data[0] < 2) ? Data[0] : true; - g_eeprom.DTMF_separate_code = DTMF_ValidateCodes((char *)(Data + 1), 1) ? Data[1] : '*'; - g_eeprom.DTMF_group_call_code = DTMF_ValidateCodes((char *)(Data + 2), 1) ? Data[2] : '#'; - g_eeprom.DTMF_decode_response = (Data[3] < 4) ? Data[3] : DTMF_DEC_RESPONSE_RING; - g_eeprom.DTMF_auto_reset_time = (Data[4] <= DTMF_HOLD_MAX) ? Data[4] : (Data[4] >= DTMF_HOLD_MIN) ? Data[4] : DTMF_HOLD_MAX; - g_eeprom.DTMF_preload_time = (Data[5] < 101) ? Data[5] * 10 : 200; - g_eeprom.DTMF_first_code_persist_time = (Data[6] < 101) ? Data[6] * 10 : 70; - g_eeprom.DTMF_hash_code_persist_time = (Data[7] < 101) ? Data[7] * 10 : 70; + g_eeprom.dtmf_side_tone = (Data[0] < 2) ? Data[0] : true; + g_eeprom.dtmf_separate_code = DTMF_ValidateCodes((char *)(Data + 1), 1) ? Data[1] : '*'; + g_eeprom.dtmf_group_call_code = DTMF_ValidateCodes((char *)(Data + 2), 1) ? Data[2] : '#'; + g_eeprom.dtmf_decode_response = (Data[3] < 4) ? Data[3] : DTMF_DEC_RESPONSE_RING; + g_eeprom.dtmf_auto_reset_time = (Data[4] <= DTMF_HOLD_MAX) ? Data[4] : (Data[4] >= DTMF_HOLD_MIN) ? Data[4] : DTMF_HOLD_MAX; + g_eeprom.dtmf_preload_time = (Data[5] < 101) ? Data[5] * 10 : 200; + g_eeprom.dtmf_first_code_persist_time = (Data[6] < 101) ? Data[6] * 10 : 70; + g_eeprom.dtmf_hash_code_persist_time = (Data[7] < 101) ? Data[7] * 10 : 70; // 0ED8..0EDF EEPROM_ReadBuffer(0x0ED8, Data, 8); - g_eeprom.DTMF_code_persist_time = (Data[0] < 101) ? Data[0] * 10 : 70; - g_eeprom.DTMF_code_interval_time = (Data[1] < 101) ? Data[1] * 10 : 70; + g_eeprom.dtmf_code_persist_time = (Data[0] < 101) ? Data[0] * 10 : 70; + g_eeprom.dtmf_code_interval_time = (Data[1] < 101) ? Data[1] * 10 : 70; g_eeprom.permit_remote_kill = (Data[2] < 2) ? Data[2] : false; // 0EE0..0EE7 EEPROM_ReadBuffer(0x0EE0, Data, 8); if (DTMF_ValidateCodes((char *)Data, 8)) - memmove(g_eeprom.ani_DTMF_id, Data, 8); + memmove(g_eeprom.ani_dtmf_id, Data, 8); else { - memset(g_eeprom.ani_DTMF_id, 0, sizeof(g_eeprom.ani_DTMF_id)); - strcpy(g_eeprom.ani_DTMF_id, "123"); + memset(g_eeprom.ani_dtmf_id, 0, sizeof(g_eeprom.ani_dtmf_id)); + strcpy(g_eeprom.ani_dtmf_id, "123"); } // 0EE8..0EEF @@ -668,21 +668,21 @@ void BOARD_EEPROM_Init(void) // 0EF8..0F07 EEPROM_ReadBuffer(0x0EF8, Data, 16); if (DTMF_ValidateCodes((char *)Data, 16)) - memmove(g_eeprom.DTMF_up_code, Data, 16); + memmove(g_eeprom.dtmf_up_code, Data, 16); else { - memset(g_eeprom.DTMF_up_code, 0, sizeof(g_eeprom.DTMF_up_code)); - strcpy(g_eeprom.DTMF_up_code, "12345"); + memset(g_eeprom.dtmf_up_code, 0, sizeof(g_eeprom.dtmf_up_code)); + strcpy(g_eeprom.dtmf_up_code, "12345"); } // 0F08..0F17 EEPROM_ReadBuffer(0x0F08, Data, 16); if (DTMF_ValidateCodes((char *)Data, 16)) - memmove(g_eeprom.DTMF_down_code, Data, 16); + memmove(g_eeprom.dtmf_down_code, Data, 16); else { - memset(g_eeprom.DTMF_down_code, 0, sizeof(g_eeprom.DTMF_down_code)); - strcpy(g_eeprom.DTMF_down_code, "54321"); + memset(g_eeprom.dtmf_down_code, 0, sizeof(g_eeprom.dtmf_down_code)); + strcpy(g_eeprom.dtmf_down_code, "54321"); } // 0F18..0F1F @@ -699,23 +699,23 @@ void BOARD_EEPROM_Init(void) // 0F40..0F47 EEPROM_ReadBuffer(0x0F40, Data, 8); - gSetting_F_LOCK = (Data[0] < 6) ? Data[0] : F_LOCK_OFF; - gSetting_350TX = (Data[1] < 2) ? Data[1] : false; // was true - gSetting_KILLED = (Data[2] < 2) ? Data[2] : false; - gSetting_200TX = (Data[3] < 2) ? Data[3] : false; - gSetting_500TX = (Data[4] < 2) ? Data[4] : false; - gSetting_350EN = (Data[5] < 2) ? Data[5] : true; - gSetting_ScrambleEnable = (Data[6] < 2) ? Data[6] : true; - gSetting_TX_EN = (Data[7] & (1u << 0)) ? true : false; - gSetting_live_DTMF_decoder = (Data[7] & (1u << 1)) ? true : false; - gSetting_battery_text = (((Data[7] >> 2) & 3u) <= 2) ? (Data[7] >> 2) & 3 : 2; + g_setting_f_lock = (Data[0] < 6) ? Data[0] : F_LOCK_OFF; + g_setting_350_tx_enable = (Data[1] < 2) ? Data[1] : false; // was true + g_setting_killed = (Data[2] < 2) ? Data[2] : false; + g_setting_200_tx_enable = (Data[3] < 2) ? Data[3] : false; + g_setting_500_tx_enable = (Data[4] < 2) ? Data[4] : false; + g_setting_350_enable = (Data[5] < 2) ? Data[5] : true; + g_setting_scramble_enable = (Data[6] < 2) ? Data[6] : true; + g_Setting_tx_enable = (Data[7] & (1u << 0)) ? true : false; + g_setting_live_dtmf_decoder = (Data[7] & (1u << 1)) ? true : false; + g_setting_battery_text = (((Data[7] >> 2) & 3u) <= 2) ? (Data[7] >> 2) & 3 : 2; #ifdef ENABLE_AUDIO_BAR - gSetting_mic_bar = (Data[7] & (1u << 4)) ? true : false; + g_setting_mic_bar = (Data[7] & (1u << 4)) ? true : false; #endif #ifdef ENABLE_AM_FIX - gSetting_AM_fix = (Data[7] & (1u << 5)) ? true : false; + g_setting_am_fix = (Data[7] & (1u << 5)) ? true : false; #endif - gSetting_backlight_on_tx_rx = (Data[7] >> 6) & 3u; + g_setting_backlight_on_tx_rx = (Data[7] >> 6) & 3u; if (!g_eeprom.vfo_open) { @@ -724,16 +724,16 @@ void BOARD_EEPROM_Init(void) } // 0D60..0E27 - EEPROM_ReadBuffer(0x0D60, gUSER_ChannelAttributes, sizeof(gUSER_ChannelAttributes)); + EEPROM_ReadBuffer(0x0D60, g_user_channel_attributes, sizeof(g_user_channel_attributes)); // 0F30..0F3F - EEPROM_ReadBuffer(0x0F30, gCustomAesKey, sizeof(gCustomAesKey)); - bHasCustomAesKey = false; - for (i = 0; i < ARRAY_SIZE(gCustomAesKey); i++) + EEPROM_ReadBuffer(0x0F30, g_custom_aes_key, sizeof(g_custom_aes_key)); + g_has_custom_aes_key = false; + for (i = 0; i < ARRAY_SIZE(g_custom_aes_key); i++) { - if (gCustomAesKey[i] != 0xFFFFFFFFu) + if (g_custom_aes_key[i] != 0xFFFFFFFFu) { - bHasCustomAesKey = true; + g_has_custom_aes_key = true; return; } } @@ -749,16 +749,16 @@ void BOARD_EEPROM_LoadMoreSettings(void) memmove(g_eeprom_1EC0_3, g_eeprom_1EC0_0, 8); // 8 * 16-bit values - EEPROM_ReadBuffer(0x1EC0, g_eeprom_RSSI_CALIB[0], 8); - EEPROM_ReadBuffer(0x1EC8, g_eeprom_RSSI_CALIB[1], 8); + EEPROM_ReadBuffer(0x1EC0, g_eeprom_rssi_calib[0], 8); + EEPROM_ReadBuffer(0x1EC8, g_eeprom_rssi_calib[1], 8); - EEPROM_ReadBuffer(0x1F40, gBatteryCalibration, 12); - if (gBatteryCalibration[0] >= 5000) + EEPROM_ReadBuffer(0x1F40, g_battery_calibration, 12); + if (g_battery_calibration[0] >= 5000) { - gBatteryCalibration[0] = 1900; - gBatteryCalibration[1] = 2000; + g_battery_calibration[0] = 1900; + g_battery_calibration[1] = 2000; } - gBatteryCalibration[5] = 2300; + g_battery_calibration[5] = 2300; #ifdef ENABLE_VOX EEPROM_ReadBuffer(0x1F50 + (g_eeprom.vox_level * 2), &g_eeprom.vox1_threshold, 2); @@ -767,7 +767,7 @@ void BOARD_EEPROM_LoadMoreSettings(void) //EEPROM_ReadBuffer(0x1F80 + g_eeprom.mic_sensitivity, &Mic, 1); //g_eeprom.mic_sensitivity_tuning = (Mic < 32) ? Mic : 15; - g_eeprom.mic_sensitivity_tuning = gMicGain_dB2[g_eeprom.mic_sensitivity]; + g_eeprom.mic_sensitivity_tuning = g_mic_gain_dB_2[g_eeprom.mic_sensitivity]; { struct @@ -867,16 +867,16 @@ void BOARD_FactoryReset(bool bIsAll) if (bIsAll) { - RADIO_InitInfo(gRxVfo, FREQ_CHANNEL_FIRST + BAND6_400MHz, 43350000); + RADIO_InitInfo(g_rx_vfo, FREQ_CHANNEL_FIRST + BAND6_400MHz, 43350000); // set the first few memory channels for (i = 0; i < ARRAY_SIZE(gDefaultFrequencyTable); i++) { const uint32_t Frequency = gDefaultFrequencyTable[i]; - gRxVfo->freq_config_rx.frequency = Frequency; - gRxVfo->freq_config_tx.frequency = Frequency; - gRxVfo->band = FREQUENCY_GetBand(Frequency); - SETTINGS_SaveChannel(USER_CHANNEL_FIRST + i, 0, gRxVfo, 2); + g_rx_vfo->freq_config_rx.frequency = Frequency; + g_rx_vfo->freq_config_tx.frequency = Frequency; + g_rx_vfo->band = FREQUENCY_GetBand(Frequency); + SETTINGS_SaveChannel(USER_CHANNEL_FIRST + i, 0, g_rx_vfo, 2); } } } diff --git a/dcs.c b/dcs.c index 2a482ef..a5fefd5 100644 --- a/dcs.c +++ b/dcs.c @@ -21,7 +21,7 @@ #endif // CTCSS Hz * 10 -const uint16_t CTCSS_Options[50] = { +const uint16_t CTCSS_OPTIONS[50] = { 670, 693, 719, 744, 770, 797, 825, 854, 885, 915, 948, 974, 1000, 1035, 1072, 1109, 1148, 1188, 1230, 1273, 1318, 1365, 1413, 1462, 1514, 1567, 1598, 1622, 1655, 1679, @@ -29,7 +29,7 @@ const uint16_t CTCSS_Options[50] = { 2035, 2065, 2107, 2181, 2257, 2291, 2336, 2418, 2503, 2541 }; -const uint16_t DCS_Options[104] = { +const uint16_t DCS_OPTIONS[104] = { 0x0013, 0x0015, 0x0016, 0x0019, 0x001A, 0x001E, 0x0023, 0x0027, 0x0029, 0x002B, 0x002C, 0x0035, 0x0039, 0x003A, 0x003B, 0x003C, 0x004C, 0x004D, 0x004E, 0x0052, 0x0055, 0x0059, 0x005A, 0x005C, @@ -60,7 +60,7 @@ static uint32_t DCS_CalculateGolay(uint32_t CodeWord) uint32_t DCS_GetGolayCodeWord(dcs_code_type_t code_type, uint8_t Option) { - uint32_t code = DCS_CalculateGolay(DCS_Options[Option] + 0x800U); + uint32_t code = DCS_CalculateGolay(DCS_OPTIONS[Option] + 0x800U); if (code_type == CODE_TYPE_REVERSE_DIGITAL) code ^= 0x7FFFFF; return code; @@ -76,8 +76,8 @@ uint8_t DCS_GetCdcssCode(uint32_t Code) if (((Code >> 9) & 0x7U) == 4) { unsigned int j; - for (j = 0; j < ARRAY_SIZE(DCS_Options); j++) - if (DCS_Options[j] == (Code & 0x1FF)) + for (j = 0; j < ARRAY_SIZE(DCS_OPTIONS); j++) + if (DCS_OPTIONS[j] == (Code & 0x1FF)) if (DCS_GetGolayCodeWord(2, j) == Code) return j; } @@ -95,13 +95,13 @@ uint8_t DCS_GetCtcssCode(int Code) { unsigned int i; uint8_t Result = 0xFF; - int Smallest = ARRAY_SIZE(CTCSS_Options); + int Smallest = ARRAY_SIZE(CTCSS_OPTIONS); - for (i = 0; i < ARRAY_SIZE(CTCSS_Options); i++) + for (i = 0; i < ARRAY_SIZE(CTCSS_OPTIONS); i++) { - int Delta = Code - CTCSS_Options[i]; + int Delta = Code - CTCSS_OPTIONS[i]; if (Delta < 0) - Delta = -(Code - CTCSS_Options[i]); + Delta = -(Code - CTCSS_OPTIONS[i]); if (Smallest > Delta) { Smallest = Delta; diff --git a/dcs.h b/dcs.h index d902f24..67185a7 100644 --- a/dcs.h +++ b/dcs.h @@ -34,12 +34,11 @@ enum { CDCSS_NEGATIVE_CODE = 2U, }; -extern const uint16_t CTCSS_Options[50]; -extern const uint16_t DCS_Options[104]; +extern const uint16_t CTCSS_OPTIONS[50]; +extern const uint16_t DCS_OPTIONS[104]; uint32_t DCS_GetGolayCodeWord(dcs_code_type_t code_type, uint8_t Option); uint8_t DCS_GetCdcssCode(uint32_t Code); uint8_t DCS_GetCtcssCode(int Code); #endif - diff --git a/driver/backlight.c b/driver/backlight.c index 66f4f71..eb42761 100644 --- a/driver/backlight.c +++ b/driver/backlight.c @@ -20,7 +20,7 @@ #include "settings.h" // this is decremented once every 500ms -uint16_t gBacklightCountdown = 0; +uint16_t g_backlight_count_down = 0; void backlight_turn_on(void) { @@ -34,27 +34,27 @@ void backlight_turn_on(void) { default: case 1: // 5 sec - gBacklightCountdown = 5; + g_backlight_count_down = 5; break; case 2: // 10 sec - gBacklightCountdown = 10; + g_backlight_count_down = 10; break; case 3: // 20 sec - gBacklightCountdown = 20; + g_backlight_count_down = 20; break; case 4: // 1 min - gBacklightCountdown = 60; + g_backlight_count_down = 60; break; case 5: // 2 min - gBacklightCountdown = 60 * 2; + g_backlight_count_down = 60 * 2; break; case 6: // 4 min - gBacklightCountdown = 60 * 4; + g_backlight_count_down = 60 * 4; break; case 7: // always on - gBacklightCountdown = 0; + g_backlight_count_down = 0; break; } - gBacklightCountdown *= 2; + g_backlight_count_down *= 2; } diff --git a/driver/backlight.h b/driver/backlight.h index ec53119..da1b02c 100644 --- a/driver/backlight.h +++ b/driver/backlight.h @@ -19,7 +19,7 @@ #include -extern uint16_t gBacklightCountdown; +extern uint16_t g_backlight_count_down; void backlight_turn_on(void); diff --git a/driver/bk4819.c b/driver/bk4819.c index d9e24da..dd380f2 100644 --- a/driver/bk4819.c +++ b/driver/bk4819.c @@ -542,7 +542,7 @@ void BK4819_EnableVox(uint16_t VoxEnableThreshold, uint16_t VoxDisableThreshold) BK4819_WriteRegister(BK4819_REG_31, REG_31_Value | (1u << 2)); // VOX Enable } -void BK4819_SetFilterBandwidth(const BK4819_FilterBandwidth_t Bandwidth, const bool weak_no_different) +void BK4819_SetFilterBandwidth(const BK4819_filter_bandwidth_t Bandwidth, const bool weak_no_different) { // REG_43 // <15> 0 ??? @@ -713,8 +713,8 @@ void BK4819_SetFrequency(uint32_t Frequency) } void BK4819_SetupSquelch( - uint8_t squelch_open_RSSI_thresh, - uint8_t squelch_close_RSSI_thresh, + uint8_t squelch_open_rssi_thresh, + uint8_t squelch_close_rssi_thresh, uint8_t squelch_open_noise_thresh, uint8_t squelch_close_noise_thresh, uint8_t squelch_close_glitch_thresh, @@ -792,14 +792,14 @@ void BK4819_SetupSquelch( // // <7:0> 70 RSSI threshold for Squelch = close 0.5dB/step // - BK4819_WriteRegister(BK4819_REG_78, ((uint16_t)squelch_open_RSSI_thresh << 8) | squelch_close_RSSI_thresh); + BK4819_WriteRegister(BK4819_REG_78, ((uint16_t)squelch_open_rssi_thresh << 8) | squelch_close_rssi_thresh); BK4819_SetAF(BK4819_AF_MUTE); BK4819_RX_TurnOn(); } -void BK4819_SetAF(BK4819_AF_Type_t AF) +void BK4819_SetAF(BK4819_af_type_t AF) { // AF Output Inverse Mode = Inverse // Undocumented bits 0x2040 @@ -1504,7 +1504,7 @@ bool BK4819_GetFrequencyScanResult(uint32_t *pFrequency) return finished; } -BK4819_CssScanResult_t BK4819_GetCxCSSScanResult(uint32_t *pCdcssFreq, uint16_t *pCtcssFreq) +BK4819_CSS_scan_result_t BK4819_GetCxCSSScanResult(uint32_t *pCdcssFreq, uint16_t *pCtcssFreq) { // ********** // REG_68 read only diff --git a/driver/bk4819.h b/driver/bk4819.h index 53f02c3..bef29f2 100644 --- a/driver/bk4819.h +++ b/driver/bk4819.h @@ -22,7 +22,7 @@ #include "driver/bk4819-regs.h" -enum BK4819_AF_Type_t +enum BK4819_af_type_e { BK4819_AF_MUTE = 0u, // BK4819_AF_FM = 1u, // FM @@ -38,29 +38,26 @@ enum BK4819_AF_Type_t BK4819_AF_UNKNOWN5 = 11u, // distorted BK4819_AF_UNKNOWN6 = 12u, // distorted BK4819_AF_UNKNOWN7 = 13u, // interesting - BK4819_AF_UNKNOWN8 = 14u, // interesting + BK4819_AF_UNKNOWN8 = 14u, // interesting BK4819_AF_UNKNOWN9 = 15u // not a lot }; +typedef enum BK4819_af_type_e BK4819_af_type_t; -typedef enum BK4819_AF_Type_t BK4819_AF_Type_t; - -enum BK4819_FilterBandwidth_t +enum BK4819_filter_bandwidth_e { BK4819_FILTER_BW_WIDE = 0, BK4819_FILTER_BW_NARROW, BK4819_FILTER_BW_NARROWER }; +typedef enum BK4819_filter_bandwidth_e BK4819_filter_bandwidth_t; -typedef enum BK4819_FilterBandwidth_t BK4819_FilterBandwidth_t; - -enum BK4819_CssScanResult_t +enum BK4819_CSS_scan_result_e { BK4819_CSS_RESULT_NOT_FOUND = 0, BK4819_CSS_RESULT_CTCSS, BK4819_CSS_RESULT_CDCSS }; - -typedef enum BK4819_CssScanResult_t BK4819_CssScanResult_t; +typedef enum BK4819_CSS_scan_result_e BK4819_CSS_scan_result_t; extern bool g_rx_idle_mode; @@ -78,7 +75,7 @@ void BK4819_SetCDCSSCodeWord(uint32_t CodeWord); void BK4819_SetCTCSSFrequency(uint32_t BaudRate); void BK4819_SetTailDetection(const uint32_t freq_10Hz); void BK4819_EnableVox(uint16_t Vox1Threshold, uint16_t Vox0Threshold); -void BK4819_SetFilterBandwidth(const BK4819_FilterBandwidth_t Bandwidth, const bool weak_no_different); +void BK4819_SetFilterBandwidth(const BK4819_filter_bandwidth_t Bandwidth, const bool weak_no_different); void BK4819_SetupPowerAmplifier(const uint8_t bias, const uint32_t frequency); void BK4819_SetFrequency(uint32_t Frequency); void BK4819_SetupSquelch( @@ -89,7 +86,7 @@ void BK4819_SetupSquelch( uint8_t SquelchCloseGlitchThresh, uint8_t SquelchOpenGlitchThresh); -void BK4819_SetAF(BK4819_AF_Type_t AF); +void BK4819_SetAF(BK4819_af_type_t AF); void BK4819_RX_TurnOn(void); void BK4819_PickRXFilterPathBasedOnFrequency(uint32_t Frequency); void BK4819_DisableScramble(void); @@ -139,7 +136,7 @@ uint16_t BK4819_GetVoiceAmplitudeOut(void); uint8_t BK4819_GetAfTxRx(void); bool BK4819_GetFrequencyScanResult(uint32_t *pFrequency); -BK4819_CssScanResult_t BK4819_GetCxCSSScanResult(uint32_t *pCdcssFreq, uint16_t *pCtcssFreq); +BK4819_CSS_scan_result_t BK4819_GetCxCSSScanResult(uint32_t *pCdcssFreq, uint16_t *pCtcssFreq); void BK4819_DisableFrequencyScan(void); void BK4819_EnableFrequencyScan(void); void BK4819_SetScanFrequency(uint32_t Frequency); @@ -156,15 +153,14 @@ uint8_t BK4819_GetCTCType(void); void BK4819_SendFSKData(uint16_t *pData); void BK4819_PrepareFSKReceive(void); - + void BK4819_PlayRoger(void); void BK4819_PlayRogerMDC(void); - + void BK4819_Enable_AfDac_DiscMode_TxDsp(void); - + void BK4819_GetVoxAmp(uint16_t *pResult); void BK4819_SetScrambleFrequencyControlWord(uint32_t Frequency); void BK4819_PlayDTMFEx(bool bLocalLoopback, char Code); #endif - diff --git a/driver/keyboard.c b/driver/keyboard.c index 9b2c1e7..1cde256 100644 --- a/driver/keyboard.c +++ b/driver/keyboard.c @@ -25,7 +25,7 @@ key_code_t g_key_reading_0 = KEY_INVALID; key_code_t g_key_reading_1 = KEY_INVALID; uint16_t g_debounce_counter = 0; -bool g_was_f_key_pressed = false; +bool g_f_key_was_pressed = false; static const struct { diff --git a/driver/keyboard.h b/driver/keyboard.h index dd9b040..910c04e 100644 --- a/driver/keyboard.h +++ b/driver/keyboard.h @@ -48,7 +48,7 @@ typedef enum key_code_e key_code_t; extern key_code_t g_key_reading_0; extern key_code_t g_key_reading_1; extern uint16_t g_debounce_counter; -extern bool g_was_f_key_pressed; +extern bool g_f_key_was_pressed; key_code_t KEYBOARD_Poll(void); diff --git a/driver/st7565.c b/driver/st7565.c index 66ee65d..ca93c1a 100644 --- a/driver/st7565.c +++ b/driver/st7565.c @@ -25,8 +25,8 @@ #include "driver/system.h" #include "misc.h" -uint8_t gStatusLine[128]; -uint8_t gFrameBuffer[7][128]; +uint8_t g_status_line[128]; +uint8_t g_frame_buffer[7][128]; void ST7565_DrawLine(const unsigned int Column, const unsigned int Line, const unsigned int Size, const uint8_t *pBitmap) { @@ -68,15 +68,15 @@ void ST7565_BlitFullScreen(void) ST7565_WriteByte(0x40); - for (Line = 0; Line < ARRAY_SIZE(gFrameBuffer); Line++) + for (Line = 0; Line < ARRAY_SIZE(g_frame_buffer); Line++) { unsigned int Column; ST7565_SelectColumnAndLine(4, Line + 1); GPIO_SetBit(&GPIOB->DATA, GPIOB_PIN_ST7565_A0); - for (Column = 0; Column < ARRAY_SIZE(gFrameBuffer[0]); Column++) + for (Column = 0; Column < ARRAY_SIZE(g_frame_buffer[0]); Column++) { while ((SPI0->FIFOST & SPI_FIFOST_TFF_MASK) != SPI_FIFOST_TFF_BITS_NOT_FULL) {} - SPI0->WDR = gFrameBuffer[Line][Column]; + SPI0->WDR = g_frame_buffer[Line][Column]; } SPI_WaitForUndocumentedTxFifoStatusBit(); } @@ -104,10 +104,10 @@ void ST7565_BlitStatusLine(void) GPIO_SetBit(&GPIOB->DATA, GPIOB_PIN_ST7565_A0); - for (i = 0; i < ARRAY_SIZE(gStatusLine); i++) + for (i = 0; i < ARRAY_SIZE(g_status_line); i++) { while ((SPI0->FIFOST & SPI_FIFOST_TFF_MASK) != SPI_FIFOST_TFF_BITS_NOT_FULL) {} - SPI0->WDR = gStatusLine[i]; + SPI0->WDR = g_status_line[i]; } SPI_WaitForUndocumentedTxFifoStatusBit(); diff --git a/driver/st7565.h b/driver/st7565.h index ac0ffd9..eddb134 100644 --- a/driver/st7565.h +++ b/driver/st7565.h @@ -23,8 +23,8 @@ #define LCD_WIDTH 128 #define LCD_HEIGHT 64 -extern uint8_t gStatusLine[128]; -extern uint8_t gFrameBuffer[7][128]; +extern uint8_t g_status_line[128]; +extern uint8_t g_frame_buffer[7][128]; void ST7565_DrawLine(const unsigned int Column, const unsigned int Line, const unsigned int Size, const uint8_t *pBitmap); void ST7565_BlitFullScreen(void); diff --git a/driver/uart.c b/driver/uart.c index cb97d94..ad7183a 100644 --- a/driver/uart.c +++ b/driver/uart.c @@ -21,7 +21,7 @@ #include "driver/uart.h" static bool UART_IsLogEnabled; -uint8_t UART_DMA_Buffer[256]; +uint8_t UART_DMA_Buffer[256]; void UART_Init(void) { @@ -33,11 +33,7 @@ void UART_Init(void) Delta = SYSCON_RC_FREQ_DELTA; Positive = (Delta & SYSCON_RC_FREQ_DELTA_RCHF_SIG_MASK) >> SYSCON_RC_FREQ_DELTA_RCHF_SIG_SHIFT; Frequency = (Delta & SYSCON_RC_FREQ_DELTA_RCHF_DELTA_MASK) >> SYSCON_RC_FREQ_DELTA_RCHF_DELTA_SHIFT; - if (Positive) { - Frequency += 48000000U; - } else { - Frequency = 48000000U - Frequency; - } + Frequency = Positive ? Frequency + 48000000U : 48000000U - Frequency; UART1->BAUD = Frequency / 39053U; UART1->CTRL = UART_CTRL_RXEN_BITS_ENABLE | UART_CTRL_TXEN_BITS_ENABLE | UART_CTRL_RXDMAEN_BITS_ENABLE; @@ -89,16 +85,15 @@ void UART_Send(const void *pBuffer, uint32_t Size) const uint8_t *pData = (const uint8_t *)pBuffer; uint32_t i; - for (i = 0; i < Size; i++) { + for (i = 0; i < Size; i++) + { UART1->TDR = pData[i]; - while ((UART1->IF & UART_IF_TXFIFO_FULL_MASK) != UART_IF_TXFIFO_FULL_BITS_NOT_SET) { - } + while ((UART1->IF & UART_IF_TXFIFO_FULL_MASK) != UART_IF_TXFIFO_FULL_BITS_NOT_SET) {} } } void UART_LogSend(const void *pBuffer, uint32_t Size) { - if (UART_IsLogEnabled) { + if (UART_IsLogEnabled) UART_Send(pBuffer, Size); - } } diff --git a/firmware.bin b/firmware.bin index f56de8d70c42b8ccb3809a2d8391922246bde7e9..5ec3065f0a92ddaa71ec5b4b770baef9433d4328 100644 GIT binary patch delta 44555 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 z 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 |)DWN;LR%_1jTv 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 L;&JcjYuWz?Yufyi diff --git a/firmware.packed.bin b/firmware.packed.bin index fbdc7e59004391004a8d761c8a2165d8b49bfb0d..3348e9faff2966d33a057b87e909b33b828280ad 100644 GIT binary patch literal 60266 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 delta 55842 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

OkoCLQRT0v3xa<`S? z-Uv;M0k^Be@ku!-$xINEF|Uas_1oT1u#mL`1{81Q3>73Xk!QrS-ybXBnT477 zwcEI7%3dj~!()CnuXf&x&s$*7LP|tymp2}XDwQ-R*n+Dh5;7I0`K#|`v)3avns>t> z?)~`ZM_h7I>YMu651+NkxRaGRJm};j^%SkypcGv#jssY(AnW**GESS=UuVH>ReRcZ zN&HD56yL9Gni*L9$UrE@10~rjP?AZ2is&y0#Y&(gBLJaT2+WA?wdGtwlL0E|&sRVwz67E8;yxDuFQEDl-F^f@aSoVPdxMfJ0hDCB zpd+j}%KQv+K>+|3D`zuItFk$a;A@s{Yfqz4&r z*3SohzId2F7^Sb?e0(@`WV;THK_@|K-P&Av>Yi?HZ97g9*I&pGf?6v7Sdm(fzv4|! zCB2I4A}?$;O18`Pr?B1l9Eb7a@rXNSM)JY>In&L-QwK5nf=8IB36VpV!y)-T(kTV= zHZvP}>NQ^tm*47%G41tdl2vvfo8htXQnJE6_g{D*)JDme4OO(#4>p#_nL#rR-OYXE zr{!wbJ_02LR-(84z5!4Dk%sK%j7Iru6{g7fh9;inosT)iWAIuOE>`w;rYwM}*m%;7 z4J->kon1;?G3c!gb$*RLKsK3vq@>_)mD?qrKjNcJ>*p19+B08)JiY0BQ3H=P zZoDHA!*%kn29d|xwIS{MR1mJ5*x*f$lD)NjEvNkxb|?3ur)m; zM<~Iv?rqAht66gJ=U!k==#snPaSx**L%u=O!?_W2V<0j^N-RTRQ^98qSIHKkm&9<{ z>6ge#p9*fR#^KkPiV?5lsbF3aelu2Y9obSpc(5>_OaHXxYVhPW6pQD3*Yo#%yzNT% zflKkt5j%f_+Lp%-FNL|d;zLq@k!hN5EmP8@?rla4g}T&@ra- z&Cs_09{xG>SU-I7jNI?df>=GCu-&i1yq4B>v<~`!SNM;fQv}C*c*Ln1dHleXV&EEM z(dyc!Wd82c8>&G;Sx@#X^*7teo$m?v6}OuqJ|t)uu5k1g-&{da;gFs`)2(Y%WZ{|F zAeAK3Zhz*(%4c0mDA&QsR-zmTEW#A-v&uvoBK!xVP{}?OmfY(BG~KsCtJQUOMSs{? zU@ka?wY1wtR9p!J#`%B~2PrqT8>_6tsx27apnWaJeZb}dgfDk z^)hb*5H=IP?pN5^+u|sr#u-q&T^Sr(*G;H~4xfeFd!H(ZfA}#<{%F;p zpX{XE%ASL>9?C8VYsRf|NDi6clS=W{d*AAsMRym`v!_CNJkU7JeXYsiCsfxeS-EAf zrk@!dnLntLZDgL};p#i**249A7Qf-`!I$l|*n{C9NrgQm;x9k17;cXd7Bb~=CGt3& zlWNC#(bnHe7!>u@Z;fjpLS$F#+z%fS+jR!~=Jxriv|HOz>^SBAb29dE-rKiv410xM z-COm%!~-rgWoy?o%%PJ-TUo}G6i7(ZaGo^|*E;)FI#w(L)alk37y5l|2Lq4f7)z4{ zoppr356WpV*8A=&kLHY_^>rcCSdm-jC0Fa~9`e+|R(;VO$-{xB6UZVX#cJ?lcn6cL zdbZohCZ-crhhI^T2p%a5bAis5hhOpxspPaS()DdHi|2x=*}Fdc2*0c%%4lTLnIhi5 zoVNA0a7Gp!eUzC`(asFNblmg-Mo{6~+vL!%3E4{m?hb%u@Y?KS`3h^gjHit5F}&qAYDX z)=%Z;587g4b{S1?=RSLMnBk)66MU#pbQ?~qot+s(l9A)IIf#Ug?b54~dB81ZDHDs~ z(;|dT=jvLo(xT7yt<(I>Q(Pu_&yzlMn#siG^NWp+mc9ZWvs zkzkVHHFkd@+tm|*q~&8w?*>mquOhd#*5FGnNhSqZa&5dXy}EHI?8nH;Vm+1FsWwoj z0+;BJi`Wwus?8ie)O-aDVU!NYGNHScCmepIf&2LOEC%$`pWYH0uOMNfDu&kakzTXs z(gY5xhaY==va44eMrH5s!3T;bp)WRwHENEO)|UE^BnR)HPxwtQ4NQK2dhb6&fwoQl zOoOj1*Qv5GaY@tV#vo^w!0O4Pgg$xFh52!5_cjuigs;ssydO%wjAR8p$^V{x3 z;N{_yOb>_W21|WoJ@$5QsLj-kW-g^3CyK4tyJld8&U(NZ&n@0-Fa!Q<)N`&W%msC+ z8raYCn0H8ot2<^MX44x+{kSeP#KqF(A$~@pccA+lL{enM=K9my__eVoAEZ1xNvnw1YzVPnC2TC+IoC)8 z15TuKdGLqy!FLg1S^!Gy5PPvvW~f_n$S@u&G$z9BHOj=y4E!4wAK)&y&A1T2 z9#6+W`HU+-d6?(2NEda-b;P;W6}xPQd<`1xLZa#0E|a;WBg30(85H|wX1NL>n%m7} z7}mz!q_|@RbL9BQ7~u%rB~z0gg^g+3*J!?;Nrn@!C$vt!{YtFk#Y1zy5+QS7PA7#7)W!N0ZSa;L7%Etb2#_~x5oEh z0*^WF{tIYQddWRYy5j+Hpf0Et$j%yA|Eph=e+Q!e{w`tNKCUtnzdW&;I=v zP?tC=Hs@Lo{KB>BihT`(lq#~r^$Ckl8f1=G^rYtsLVUiOGS#E|u-I(^#?Fqu^CwPc z(*GXdalD|c38aPYA7DR|4ZswA|2+WNIO$9zFYx~#K%YG`u4eZhl@Qnf%+hk(8IJBd(Y-yo`BXQelVbMH2qUQ3+m?dH1l!E?$4^S7A)eQ%7lN=&v5-?l}QhWN~ z$zBDUSZXs;+;JEaLz-JI_yRb|F+8)xqpH976*|`0{bx{O{64v=LGUEuv!y|Og`GGy znI>Uybd?0|UHrhbMitzC)vd|CQI4~`kdSO?g8vzjw^A<`fhY(7b|huW+W!oNRX z8|*4=Aqf-;ch5_In{qygec~)1!exR_HV2GQLByo#Ch&*hYKD%9N8Fy(%fzPDAhT{@ z15*t;)}1dcgVxk3fuzZF4NsH~2JD{~urIO@;dB*BRMG(>jH97}X`U7CzDbib$1X`?iiz86^_~477gdTzvAZ*R+l~b%X7l+4&0D|M1`1sdSd&PM5nf& zif%jX<;x<1Yu&&!wlm;{|JT!*_(Q#ZahzQHHrB?Fv2P*Q&Wtc(Y$0Q3!jLU7mJ;I2 zHBu>Cvdel2Z8Nq|mMq0}ZK2S$Uzuo%v4-*cj{Cd!KRB=Rob&#C&hvUb&oS6@=mJTY zq{&Qn1F9ol2k`a|MJF~Lt4rqeW=f3<%0%vG)_Q)&yMDaE>MD|-!8|wqY}VwL-iU1v z1v{5h1BD{058ix@6Fkr|`B_Q8`qpNF9Dv|GnfPYg_#2g@2v!f+;R?<^Tep+YGVd5! z%*`qXI7KTj6>Io+YdzVrO|dD7`2vW2PQb|=Ve4}gL;#)PeIP3<>neunmP_d+d^wP2OFvX=8W@OG5ODv3*{4 zj{`EbGT6F>e2T_k#ZBc}=+#%-mQ}2t!P|G5kavV+7majyS#Ec7jCAyt-_UQ>T@ABV z@#h)Z3-=wM9EI3qxw)8fa*V$~*2YK<8uu8<%A9qZ%-S%J>cko7 zXw?wm@NP`8(ycFAIjL$Hu6qu@-(u?i?gB(-vXHqaA!^CP%Hz9#Sw_$Gq)QEmVwlo) zlW}7g?YhD)Fmc>2bsC(jnzGiu9Y7Hk4wW}fT$S>8Olb-6JJ2-R|DAx~f0Z$xlpS(a zonC~tbQB{886_3mWv1_?po7!Jp#LW!sD`&baTN^sRGxdv{MZ~cB*2LpdCyC_w=coK zE&z+L^)>gNDyLD;NfF9{yN{8w)fBI}(SiYCkCQfJ7F29Iz+WhS`Q=0lG7EOZv{Sdp z-#QIrgy;d>XyKBj>TTks(R%SMTi?((@?3(w;wtxHAc*Jz{Hp~iU=adK_RQb)bAhxN z_3uPvUDF+3^u3yWvvHQt3p3?w!30ss6>#}-OwR(?1t}@PAPE}~EYa@KEw#ds&B-p@ zDNu~^KadShsX}qRQHE9E`I-kZhbWihKy^R+WXZ$PWW@LYSk%xOR z@53SXvEUl!4E1=RJqye5m1|aNUta&s9;R-7&Iz47xq)hu*O1QH?NX?6lUr~*7aP7= z8njV7_6)DvW|1oi^Wj4*JrVain7hO2@tc76r>y%vbVE|M#D`T!ovT@iese|p&q$KC zgkqpi$;{h0?0YvyPo0S$aLIzuZf=7wRv))?=XJWcs*C``;|jr;wet@HhxvGpTR4h$ z6Hc={A*5M#ggCK3Y0AU)%DS$irOYHc$ zc>e0SBZ%U})O8op2%J&L*N8@CHY&2sP(cZ!)VG<6_DNL1Vk{rk`+60gtKdTBSx(&7 z2Cu824*&<&jv|Qhvs1a4EhY00M5(F=$%^Pv%J0H7e`)5Tqd$;EvoJ^8cuHgtq?tEoIqGMhERkd0{=T>(d%nf7Sqb7FU~- zZlcub#?Bt+Fh_DZFliYzu9R- zwO;IZEp5j=g zf4A$B`2uO@V!OXBB>%rI2nEHcz`Xt~9mS&gXZgVlH0G_W(gRT1z=D&J{ttj57?GB&bR@(+m)Y$xt*+ zz@O07NsufF5ikRZmH!-p%mLjIwO(^LaYQcs*Fg@P`;jdc+6tzE z@O{tClJYC0?$AIoD911RUGK-!Ja8p24~OWMB0e~WQZkF&0!krgoa7k%elG^dbAY5$ z`KC&B4<+!#M0D)6V2s>kF~L>|Y{R;Sk!=~@xzKf!6A%IKA(FoDP4j?P>mJ+-S{b?4 zs@826R~Gw*KoU06P)$A+)GT@p2q;p_z%B4AmEiA>eHHQQq|^EGD=*rNYw}>wqp1W& znGO5#YxE-Qqusrq?IIY<`AwvPa7AO7sFz}8W4f*jK$I9_UT8^Xz$y1Dh9OW^XW{&Q`NeM()gi7gkjD2S*giP zf|W|QeOaBkAhD=u#%tXYm^B5aQn$aJC z1w!NA?mLYK0$>dwLJMG(A#_6mXpta~;X(C<8~?On0;4R|P2tg;SsC4yr)GN!L~x!N zd8)l9^PesMe;33>1vF$D8O?;wTiyHw{3`}i40CXkt-lrZGkjn9{j$}*B2HeoQLWfY zyVxG;%#f+0C{~FuE3-j*g;1XOH2`wSb}+N$#}Y#BnCSMx*}XCFjn?83Rz7d6-r>s1 zY&`HP5(-+fsZx*w&Gy(rc>jB6+5G8lUhMJnGBAKkrC#G+pcn!4*B%gt{*yLrUU%m{ zX+xX&(?r-|`)`24(;n|4zR?HZv@n@AT$W zBDcz!RyN{+Td{Bd1|38K^-I6*q>pGS!x$)0d!~x(qJUPU{Jt$fh+9FasYSas{!0MYuRLblDc1jA$JG zpe^6+*GL6XY-#x6F@2dr^H6P+ek&wPTG-wB`oAb6>*qZU#Tr&W@X3GwgCDm2*xiQMjLa1)+bF| zlzPq^Grru)A)8)Xoz#L0#LD?j-gDSuwSR|s%nQY8cuh8c4`lt}rGR9h5M@l)0FV33 zw~kczo-<6@%`;}k09iv0?qoRCIPo$v=PitWM}sSBeaZ9FKjvx^;i)IVJiPR@sD#2g zRdMlW(i$E%|*(uO09cLu2wIoAUtFeW9BIYwQh7SC;R z3vf$GC65lUOWhUr4@YEgN-6`nwogSAen69FMArSv7#>NeeQkCyeiJonwX7}kWZAWB zzKdU=@^Dm`;xFK}mqE7PiFeEjfrj$mO@PmSsOb~c2X9EO>I<PLV{!(3DP9Zi5l50047D5J|ILb?SJc0$SBwz z!N*e^Ke56f8jx;ktnSB(7xMhW;2&VL;hV;Nug3fS#OtxBXs#5PZUxEiDi>N?TIgAK z9Im6i(}kf?h}{u@hlj*Su=Xeve^e)w&)KU79zjXYz|R<0(-?uDD>7 zH%IV%G!+b>*O8@~H(c7UaRIqq(zo+#@Ud>0ygQ8j(&mhf@id{=o%2Z4yZd0DU$cbv zZeR%SiNu)G*5fLfqvp?lW9Gs}`L8$A&|zud5g25fC3#uSSmxkdS8rDQrPl8Clsyll z-%$>==norHUkY(+II^ioBRFwZ?YE+)xOA`ey`(~Vm6>*Ge@ySMct6rIlB~k(n|^s{ Kvj#g=&HX?4MC$ec diff --git a/font.c b/font.c index 3d0e3b2..f93efe7 100644 --- a/font.c +++ b/font.c @@ -16,8 +16,8 @@ #include "font.h" -//const uint8_t gFontBig[95][16] = -const uint8_t gFontBig[95][15] = +//const uint8_t g_font_big[95][16] = +const uint8_t g_font_big[95][15] = { #if 0 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // , 0x00}, // ' ' @@ -216,7 +216,7 @@ const uint8_t gFontBig[95][15] = #if 0 // original font - const uint8_t gFontBigDigits[11][26] = + const uint8_t g_font_big_digits[11][26] = { {0x00, 0xC0, 0xF0, 0xF8, 0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1C, 0xF8, 0xF0, 0xE0, 0x00, 0x07, 0x1F, 0x3F, 0x78, 0x60, 0x60, 0x60, 0x60, 0x70, 0x3F, 0x1F, 0x0F}, {0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0xFC, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00}, @@ -232,7 +232,7 @@ const uint8_t gFontBig[95][15] = }; #elif 0 // VCR font - const uint8_t gFontBigDigits[11][26] = + const uint8_t g_font_big_digits[11][26] = { {0x00, 0x00, 0xF8, 0xFC, 0x06, 0x86, 0xC6, 0xE6, 0xF6, 0x76, 0xFC, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0x3F, 0x77, 0x67, 0x63, 0x61, 0x60, 0x70, 0x3F, 0x1F, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x18, 0x1C, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x7F, 0x7F, 0x60, 0x60, 0x00, 0x00, 0x00}, @@ -248,7 +248,7 @@ const uint8_t gFontBig[95][15] = }; #else // Terminus font - const uint8_t gFontBigDigits[11][26] = + const uint8_t g_font_big_digits[11][26] = { {0x00, 0x00, 0xFC, 0xFE, 0xFE, 0x06, 0x86, 0xC6, 0xE6, 0xFE, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x7F, 0x7F, 0x67, 0x63, 0x61, 0x60, 0x7F, 0x7F, 0x3F, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x18, 0x1C, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x7F, 0x7F, 0x7F, 0x60, 0x60, 0x00, 0x00}, @@ -264,7 +264,7 @@ const uint8_t gFontBig[95][15] = }; #endif /* -const uint8_t gFontSmallDigits[11][7] = +const uint8_t g_font_small_digits[11][7] = { {0x00, 0x3E, 0x41, 0x41, 0x41, 0x41, 0x3E}, // '0' {0x00, 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00}, // '1' @@ -279,7 +279,7 @@ const uint8_t gFontSmallDigits[11][7] = {0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00} // '-' }; */ -const uint8_t gFontSmall[95][6] = +const uint8_t g_font_small[95][6] = { {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // ' ' {0x00, 0x00, 0x5E, 0x00, 0x00, 0x00}, // '!' @@ -379,7 +379,7 @@ const uint8_t gFontSmall[95][6] = }; #ifdef ENABLE_SMALL_BOLD - const uint8_t gFontSmallBold[95][6] = + const uint8_t g_font_small_bold[95][6] = { {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x5E, 0x5E, 0x00, 0x00}, @@ -480,7 +480,7 @@ const uint8_t gFontSmall[95][6] = #endif #ifdef ENABLE_SPECTRUM - const uint8_t gFont3x5[160][3] = + const uint8_t g_font3x5[160][3] = { {0x00, 0x00, 0x00}, // 32 - space {0x00, 0x17, 0x00}, // 33 - exclam diff --git a/font.h b/font.h index 1c07fb8..695e1b0 100644 --- a/font.h +++ b/font.h @@ -19,13 +19,13 @@ #include -//extern const uint8_t gFontBig[95][16]; -extern const uint8_t gFontBig[95][15]; -extern const uint8_t gFontBigDigits[11][26]; -//extern const uint8_t gFontSmallDigits[11][7]; -extern const uint8_t gFontSmall[95][6]; +//extern const uint8_t g_font_big[95][16]; +extern const uint8_t g_font_big[95][15]; +extern const uint8_t g_font_big_digits[11][26]; +//extern const uint8_t g_font_small_digits[11][7]; +extern const uint8_t g_font_small[95][6]; #ifdef ENABLE_SMALL_BOLD - extern const uint8_t gFontSmallBold[95][6]; + extern const uint8_t g_font_small_bold[95][6]; #endif #endif diff --git a/frequencies.c b/frequencies.c index d0cd0c1..7b9667d 100644 --- a/frequencies.c +++ b/frequencies.c @@ -22,7 +22,7 @@ const freq_band_table_t BX4819_band1 = { 1800000, 63000000}; const freq_band_table_t BX4819_band2 = {84000000, 130000000}; -const freq_band_table_t frequencyBandTable[7] = +const freq_band_table_t FREQ_BAND_TABLE[7] = { #ifndef ENABLE_WIDE_RX // QS original @@ -63,18 +63,18 @@ const freq_band_table_t frequencyBandTable[7] = #ifdef ENABLE_1250HZ_STEP // includes 1.25kHz step - const uint16_t StepFrequencyTable[7] = {125, 250, 625, 1000, 1250, 2500, 833}; + const uint16_t STEP_FREQ_TABLE[7] = {125, 250, 625, 1000, 1250, 2500, 833}; #else // QS steps (*10 Hz) - const uint16_t StepFrequencyTable[7] = {250, 500, 625, 1000, 1250, 2500, 833}; + const uint16_t STEP_FREQ_TABLE[7] = {250, 500, 625, 1000, 1250, 2500, 833}; #endif FREQUENCY_Band_t FREQUENCY_GetBand(uint32_t Frequency) { int band; - for (band = ARRAY_SIZE(frequencyBandTable) - 1; band >= 0; band--) - if (Frequency >= frequencyBandTable[band].lower) -// if (Frequency < frequencyBandTable[band].upper) + for (band = ARRAY_SIZE(FREQ_BAND_TABLE) - 1; band >= 0; band--) + if (Frequency >= FREQ_BAND_TABLE[band].lower) +// if (Frequency < FREQ_BAND_TABLE[band].upper) return (FREQUENCY_Band_t)band; return BAND1_50MHz; @@ -128,27 +128,27 @@ int TX_freq_check(const uint32_t Frequency) { // return '0' if TX frequency is allowed // otherwise return '-1' - if (Frequency < frequencyBandTable[0].lower || Frequency > frequencyBandTable[ARRAY_SIZE(frequencyBandTable) - 1].upper) + if (Frequency < FREQ_BAND_TABLE[0].lower || Frequency > FREQ_BAND_TABLE[ARRAY_SIZE(FREQ_BAND_TABLE) - 1].upper) return -1; // not allowed outside this range if (Frequency >= BX4819_band1.upper && Frequency < BX4819_band2.lower) return -1; // BX chip does not work in this range - switch (gSetting_F_LOCK) + switch (g_setting_f_lock) { case F_LOCK_OFF: if (Frequency >= 13600000 && Frequency < 17400000) return 0; if (Frequency >= 17400000 && Frequency < 35000000) - if (gSetting_200TX) + if (g_setting_200_tx_enable) return 0; if (Frequency >= 35000000 && Frequency < 40000000) - if (gSetting_350TX && gSetting_350EN) + if (g_setting_350_tx_enable && g_setting_350_enable) return 0; if (Frequency >= 40000000 && Frequency < 47000000) return 0; if (Frequency >= 47000000 && Frequency <= 60000000) - if (gSetting_500TX) + if (g_setting_500_tx_enable) return 0; break; @@ -196,7 +196,7 @@ int RX_freq_check(const uint32_t Frequency) { // return '0' if RX frequency is allowed // otherwise return '-1' - if (Frequency < frequencyBandTable[0].lower || Frequency > frequencyBandTable[ARRAY_SIZE(frequencyBandTable) - 1].upper) + if (Frequency < FREQ_BAND_TABLE[0].lower || Frequency > FREQ_BAND_TABLE[ARRAY_SIZE(FREQ_BAND_TABLE) - 1].upper) return -1; if (Frequency >= BX4819_band1.upper && Frequency < BX4819_band2.lower) diff --git a/frequencies.h b/frequencies.h index 30c4dc7..d4d5e1f 100644 --- a/frequencies.h +++ b/frequencies.h @@ -27,7 +27,7 @@ typedef struct { extern const freq_band_table_t BX4819_band1; extern const freq_band_table_t BX4819_band2; -extern const freq_band_table_t frequencyBandTable[7]; +extern const freq_band_table_t FREQ_BAND_TABLE[7]; enum FREQUENCY_Band_t { BAND_NONE = -1, @@ -66,7 +66,7 @@ typedef enum FREQUENCY_Band_t FREQUENCY_Band_t; #endif typedef enum step_setting_t step_setting_t; -extern const uint16_t StepFrequencyTable[7]; +extern const uint16_t STEP_FREQ_TABLE[7]; #ifdef ENABLE_NOAA extern const uint32_t NoaaFrequencyTable[10]; diff --git a/functions.c b/functions.c index 765c7db..336a229 100644 --- a/functions.c +++ b/functions.c @@ -38,26 +38,26 @@ #include "ui/status.h" #include "ui/ui.h" -FUNCTION_Type_t gCurrentFunction; +function_type_t g_current_function; void FUNCTION_Init(void) { #ifdef ENABLE_NOAA - if (IS_NOT_NOAA_CHANNEL(gRxVfo->channel_save)) + if (IS_NOT_NOAA_CHANNEL(g_rx_vfo->channel_save)) #endif { - gCurrentcode_type = gSelectedcode_type; - if (gCssScanMode == CSS_SCAN_MODE_OFF) - gCurrentcode_type = gRxVfo->am_mode ? CODE_TYPE_OFF : gRxVfo->pRX->code_type; + g_current_code_type = g_selected_code_type; + if (g_css_scan_mode == CSS_SCAN_MODE_OFF) + g_current_code_type = g_rx_vfo->am_mode ? CODE_TYPE_OFF : g_rx_vfo->pRX->code_type; } #ifdef ENABLE_NOAA else - gCurrentcode_type = CODE_TYPE_CONTINUOUS_TONE; + g_current_code_type = CODE_TYPE_CONTINUOUS_TONE; #endif DTMF_clear_RX(); - g_CxCSS_tailL_found = false; + g_CxCSS_tail_found = false; g_CDCSS_lost = false; g_CTCSS_lost = false; @@ -65,29 +65,29 @@ void FUNCTION_Init(void) g_vox_lost = false; #endif - g_SquelchLost = false; + g_squelch_lost = false; - gFlagTailNoteEliminationComplete = false; - gTailNoteEliminationCountdown_10ms = 0; - gFoundCTCSS = false; - gFoundCDCSS = false; - gFoundCTCSSCountdown_10ms = 0; - gFoundCDCSSCountdown_10ms = 0; - gEndOfRxDetectedMaybe = false; + g_flag_tail_tone_elimination_complete = false; + g_tail_tone_elimination_count_down_10ms = 0; + g_found_CTCSS = false; + g_found_CDCSS = false; + g_found_CTCSS_count_down_10ms = 0; + g_found_CDCSS_count_down_10ms = 0; + g_end_of_rx_detected_maybe = false; #ifdef ENABLE_NOAA - gNOAACountdown_10ms = 0; + g_noaa_count_down_10ms = 0; #endif - gUpdateStatus = true; + g_update_status = true; } -void FUNCTION_Select(FUNCTION_Type_t Function) +void FUNCTION_Select(function_type_t Function) { - const FUNCTION_Type_t PreviousFunction = gCurrentFunction; + const function_type_t PreviousFunction = g_current_function; const bool bWasPowerSave = (PreviousFunction == FUNCTION_POWER_SAVE); - gCurrentFunction = Function; + g_current_function = Function; if (bWasPowerSave && Function != FUNCTION_POWER_SAVE) { @@ -99,35 +99,35 @@ void FUNCTION_Select(FUNCTION_Type_t Function) switch (Function) { case FUNCTION_FOREGROUND: - if (gDTMF_ReplyState != DTMF_REPLY_NONE) + if (g_dtmf_reply_state != DTMF_REPLY_NONE) RADIO_PrepareCssTX(); if (PreviousFunction == FUNCTION_TRANSMIT) { - gVFO_RSSI_bar_level[0] = 0; - gVFO_RSSI_bar_level[1] = 0; + g_vfo_rssi_bar_level[0] = 0; + g_vfo_rssi_bar_level[1] = 0; } else if (PreviousFunction != FUNCTION_RECEIVE) break; #if defined(ENABLE_FMRADIO) - if (gFmRadioMode) - gFM_RestoreCountdown_10ms = fm_restore_countdown_10ms; + if (g_fm_radio_mode) + g_fm_restore_count_down_10ms = fm_restore_countdown_10ms; #endif - if (gDTMF_CallState == DTMF_CALL_STATE_CALL_OUT || - gDTMF_CallState == DTMF_CALL_STATE_RECEIVED || - gDTMF_CallState == DTMF_CALL_STATE_RECEIVED_STAY) + if (g_dtmf_call_state == DTMF_CALL_STATE_CALL_OUT || + g_dtmf_call_state == DTMF_CALL_STATE_RECEIVED || + g_dtmf_call_state == DTMF_CALL_STATE_RECEIVED_STAY) { - gDTMF_auto_reset_time_500ms = g_eeprom.DTMF_auto_reset_time * 2; + g_dtmf_auto_reset_time_500ms = g_eeprom.dtmf_auto_reset_time * 2; } - gUpdateStatus = true; + g_update_status = true; return; case FUNCTION_MONITOR: - gMonitor = true; + g_monitor_enabled = true; break; case FUNCTION_INCOMING: @@ -135,21 +135,21 @@ void FUNCTION_Select(FUNCTION_Type_t Function) break; case FUNCTION_POWER_SAVE: - gPowerSave_10ms = g_eeprom.battery_save * 10; - gPowerSaveCountdownExpired = false; + g_power_save_10ms = g_eeprom.battery_save * 10; + g_power_save_count_down_expired = false; g_rx_idle_mode = true; - gMonitor = false; + g_monitor_enabled = false; BK4819_DisableVox(); BK4819_Sleep(); BK4819_ToggleGpioOut(BK4819_GPIO6_PIN2, false); - gUpdateStatus = true; + g_update_status = true; - if (gScreenToDisplay != DISPLAY_MENU) // 1of11 .. don't close the menu + if (g_screen_to_display != DISPLAY_MENU) // 1of11 .. don't close the menu GUI_SelectNextDisplay(DISPLAY_MAIN); return; @@ -163,19 +163,19 @@ void FUNCTION_Select(FUNCTION_Type_t Function) DTMF_clear_RX(); // clear the DTMF RX live decoder buffer - gDTMF_RX_live_timeout = 0; - gDTMF_RX_live_timeout = 0; - memset(gDTMF_RX_live, 0, sizeof(gDTMF_RX_live)); + g_dtmf_rx_live_timeout = 0; + g_dtmf_rx_live_timeout = 0; + memset(g_dtmf_rx_live, 0, sizeof(g_dtmf_rx_live)); #if defined(ENABLE_FMRADIO) - if (gFmRadioMode) + if (g_fm_radio_mode) BK1080_Init(0, false); #endif #ifdef ENABLE_ALARM - if (gAlarmState == ALARM_STATE_TXALARM && g_eeprom.alarm_mode != ALARM_MODE_TONE) + if (g_alarm_state == ALARM_STATE_TXALARM && g_eeprom.alarm_mode != ALARM_MODE_TONE) { - gAlarmState = ALARM_STATE_ALARM; + g_alarm_state = ALARM_STATE_ALARM; GUI_DisplayScreen(); @@ -187,17 +187,17 @@ void FUNCTION_Select(FUNCTION_Type_t Function) GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); - gEnableSpeaker = true; + g_enable_speaker = true; SYSTEM_DelayMs(60); BK4819_ExitTxMute(); - gAlarmToneCounter = 0; + g_alarm_tone_counter = 0; break; } #endif - gUpdateStatus = true; + g_update_status = true; GUI_DisplayScreen(); @@ -208,36 +208,36 @@ void FUNCTION_Select(FUNCTION_Type_t Function) DTMF_Reply(); - if (gCurrentVfo->DTMF_ptt_id_tx_mode == PTT_ID_APOLLO) - BK4819_PlaySingleTone(2525, 250, 0, g_eeprom.DTMF_side_tone); + if (g_current_vfo->dtmf_ptt_id_tx_mode == PTT_ID_APOLLO) + BK4819_PlaySingleTone(2525, 250, 0, g_eeprom.dtmf_side_tone); #if defined(ENABLE_ALARM) || defined(ENABLE_TX1750) - if (gAlarmState != ALARM_STATE_OFF) + if (g_alarm_state != ALARM_STATE_OFF) { #ifdef ENABLE_TX1750 - if (gAlarmState == ALARM_STATE_TX1750) + if (g_alarm_state == ALARM_STATE_TX1750) BK4819_TransmitTone(true, 1750); #endif #ifdef ENABLE_ALARM - if (gAlarmState == ALARM_STATE_TXALARM) + if (g_alarm_state == ALARM_STATE_TXALARM) BK4819_TransmitTone(true, 500); #endif SYSTEM_DelayMs(2); GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); #ifdef ENABLE_ALARM - gAlarmToneCounter = 0; + g_alarm_tone_counter = 0; #endif - gEnableSpeaker = true; + g_enable_speaker = true; break; } #endif - if (gCurrentVfo->scrambling_type > 0 && gSetting_ScrambleEnable) - BK4819_EnableScramble(gCurrentVfo->scrambling_type - 1); + if (g_current_vfo->scrambling_type > 0 && g_setting_scramble_enable) + BK4819_EnableScramble(g_current_vfo->scrambling_type - 1); else BK4819_DisableScramble(); - if (gSetting_backlight_on_tx_rx == 1 || gSetting_backlight_on_tx_rx == 3) + if (g_setting_backlight_on_tx_rx == 1 || g_setting_backlight_on_tx_rx == 3) backlight_turn_on(); break; @@ -246,10 +246,10 @@ void FUNCTION_Select(FUNCTION_Type_t Function) break; } - gBatterySaveCountdown_10ms = battery_save_count_10ms; - gSchedulePowerSave = false; + g_battery_save_count_down_10ms = battery_save_count_10ms; + g_schedule_power_save = false; #if defined(ENABLE_FMRADIO) - gFM_RestoreCountdown_10ms = 0; + g_fm_restore_count_down_10ms = 0; #endif } diff --git a/functions.h b/functions.h index 4194d86..ab80673 100644 --- a/functions.h +++ b/functions.h @@ -19,7 +19,7 @@ #include -enum FUNCTION_Type_t +enum function_type_e { FUNCTION_FOREGROUND = 0, // ??? FUNCTION_TRANSMIT, // transmitting @@ -29,13 +29,12 @@ enum FUNCTION_Type_t FUNCTION_POWER_SAVE, // sleeping FUNCTION_BAND_SCOPE // bandscope mode (panadpter/spectrum) .. not yet implemented }; +typedef enum function_type_e function_type_t; -typedef enum FUNCTION_Type_t FUNCTION_Type_t; - -extern FUNCTION_Type_t gCurrentFunction; +extern function_type_t g_current_function; void FUNCTION_Init(void); -void FUNCTION_Select(FUNCTION_Type_t Function); +void FUNCTION_Select(function_type_t Function); #endif diff --git a/helper/battery.c b/helper/battery.c index cb434fd..fc62dc7 100644 --- a/helper/battery.c +++ b/helper/battery.c @@ -21,18 +21,18 @@ #include "ui/menu.h" #include "ui/ui.h" -uint16_t gBatteryCalibration[6]; -uint16_t gBatteryCurrentVoltage; -uint16_t gBatteryCurrent; -uint16_t gBatteryVoltages[4]; -uint16_t gBatteryVoltageAverage; -uint8_t gBatteryDisplayLevel; -bool gChargingWithTypeC; -bool gLowBattery; -bool gLowBatteryBlink; -uint16_t gBatteryCheckCounter; +uint16_t g_battery_calibration[6]; +uint16_t g_battery_current_voltage; +uint16_t g_battery_current; +uint16_t g_battery_voltages[4]; +uint16_t g_battery_voltage_average; +uint8_t g_battery_display_level; +bool g_charging_with_type_c; +bool g_low_battery; +bool g_low_battery_blink; +uint16_t g_battery_check_counter; -volatile uint16_t gPowerSave_10ms; +volatile uint16_t g_power_save_10ms; /* Based on real measurement @@ -81,70 +81,70 @@ unsigned int BATTERY_VoltsToPercent(const unsigned int voltage_10mV) void BATTERY_GetReadings(const bool bDisplayBatteryLevel) { - const uint8_t PreviousBatteryLevel = gBatteryDisplayLevel; - const uint16_t Voltage = (gBatteryVoltages[0] + gBatteryVoltages[1] + gBatteryVoltages[2] + gBatteryVoltages[3]) / 4; + const uint8_t PreviousBatteryLevel = g_battery_display_level; + const uint16_t Voltage = (g_battery_voltages[0] + g_battery_voltages[1] + g_battery_voltages[2] + g_battery_voltages[3]) / 4; - gBatteryDisplayLevel = 0; + g_battery_display_level = 0; - if (gBatteryCalibration[5] < Voltage) - gBatteryDisplayLevel = 6; + if (g_battery_calibration[5] < Voltage) + g_battery_display_level = 6; else - if (gBatteryCalibration[4] < Voltage) - gBatteryDisplayLevel = 5; + if (g_battery_calibration[4] < Voltage) + g_battery_display_level = 5; else - if (gBatteryCalibration[3] < Voltage) - gBatteryDisplayLevel = 4; + if (g_battery_calibration[3] < Voltage) + g_battery_display_level = 4; else - if (gBatteryCalibration[2] < Voltage) - gBatteryDisplayLevel = 3; + if (g_battery_calibration[2] < Voltage) + g_battery_display_level = 3; else - if (gBatteryCalibration[1] < Voltage) - gBatteryDisplayLevel = 2; + if (g_battery_calibration[1] < Voltage) + g_battery_display_level = 2; else - if (gBatteryCalibration[0] < Voltage) - gBatteryDisplayLevel = 1; + if (g_battery_calibration[0] < Voltage) + g_battery_display_level = 1; - gBatteryVoltageAverage = (Voltage * 760) / gBatteryCalibration[3]; + g_battery_voltage_average = (Voltage * 760) / g_battery_calibration[3]; - if ((gScreenToDisplay == DISPLAY_MENU) && gMenuCursor == MENU_VOL) - gUpdateDisplay = true; + if ((g_screen_to_display == DISPLAY_MENU) && g_menu_cursor == MENU_VOL) + g_update_display = true; - if (gBatteryCurrent < 501) + if (g_battery_current < 501) { - if (gChargingWithTypeC) + if (g_charging_with_type_c) { - gUpdateStatus = true; - gUpdateDisplay = true; + g_update_status = true; + g_update_display = true; } - gChargingWithTypeC = false; + g_charging_with_type_c = false; } else { - if (!gChargingWithTypeC) + if (!g_charging_with_type_c) { - gUpdateStatus = true; - gUpdateDisplay = true; + g_update_status = true; + g_update_display = true; backlight_turn_on(); } - gChargingWithTypeC = true; + g_charging_with_type_c = true; } - if (PreviousBatteryLevel != gBatteryDisplayLevel) + if (PreviousBatteryLevel != g_battery_display_level) { - if (gBatteryDisplayLevel < 2) + if (g_battery_display_level < 2) { - gLowBattery = true; + g_low_battery = true; } else { - gLowBattery = false; + g_low_battery = false; if (bDisplayBatteryLevel) - UI_DisplayBattery(gBatteryDisplayLevel, gLowBatteryBlink); + UI_DisplayBattery(g_battery_display_level, g_low_battery_blink); } - gLowBatteryCountdown = 0; + g_low_batteryCountdown = 0; } } diff --git a/helper/battery.h b/helper/battery.h index 336207c..8b37bf7 100644 --- a/helper/battery.h +++ b/helper/battery.h @@ -20,21 +20,19 @@ #include #include -extern uint16_t gBatteryCalibration[6]; -extern uint16_t gBatteryCurrentVoltage; -extern uint16_t gBatteryCurrent; -extern uint16_t gBatteryVoltages[4]; -extern uint16_t gBatteryVoltageAverage; -extern uint8_t gBatteryDisplayLevel; -extern bool gChargingWithTypeC; -extern bool gLowBattery; -extern bool gLowBatteryBlink; -extern uint16_t gBatteryCheckCounter; - -extern volatile uint16_t gPowerSave_10ms; +extern uint16_t g_battery_calibration[6]; +extern uint16_t g_battery_current_voltage; +extern uint16_t g_battery_current; +extern uint16_t g_battery_voltages[4]; +extern uint16_t g_battery_voltage_average; +extern uint8_t g_battery_display_level; +extern bool g_charging_with_type_c; +extern bool g_low_battery; +extern bool g_low_battery_blink; +extern uint16_t g_battery_check_counter; +extern volatile uint16_t g_power_save_10ms; unsigned int BATTERY_VoltsToPercent(const unsigned int voltage_10mV); void BATTERY_GetReadings(const bool bDisplayBatteryLevel); #endif - diff --git a/helper/boot.c b/helper/boot.c index a1df270..a299748 100644 --- a/helper/boot.c +++ b/helper/boot.c @@ -85,20 +85,20 @@ void BOOT_ProcessMode(BOOT_Mode_t Mode) g_eeprom.key2_short_press_action = ACTION_OPT_NONE; g_eeprom.key2_long_press_action = ACTION_OPT_NONE; - RADIO_InitInfo(gRxVfo, FREQ_CHANNEL_LAST - 1, 41002500); + RADIO_InitInfo(g_rx_vfo, FREQ_CHANNEL_LAST - 1, 41002500); - gRxVfo->channel_bandwidth = BANDWIDTH_WIDE; - gRxVfo->output_power = OUTPUT_POWER_LOW; + g_rx_vfo->channel_bandwidth = BANDWIDTH_WIDE; + g_rx_vfo->output_power = OUTPUT_POWER_LOW; - RADIO_ConfigureSquelchAndOutputPower(gRxVfo); + RADIO_ConfigureSquelchAndOutputPower(g_rx_vfo); - gCurrentVfo = gRxVfo; + g_current_vfo = g_rx_vfo; RADIO_SetupRegisters(true); BK4819_SetupAircopy(); BK4819_ResetFSK(); - gAircopyState = AIRCOPY_READY; + g_aircopy_state = AIRCOPY_READY; GUI_SelectNextDisplay(DISPLAY_AIRCOPY); } diff --git a/main.c b/main.c index 794138a..b1b68e4 100644 --- a/main.c +++ b/main.c @@ -67,7 +67,7 @@ void Main(void) BOARD_Init(); UART_Init(); - boot_counter_10ms = 250; // 2.5 sec + g_boot_counter_10ms = 250; // 2.5 sec UART_Send(UART_Version, strlen(UART_Version)); @@ -75,12 +75,12 @@ void Main(void) memset(&g_eeprom, 0, sizeof(g_eeprom)); - memset(gDTMF_String, '-', sizeof(gDTMF_String)); - gDTMF_String[sizeof(gDTMF_String) - 1] = 0; + memset(g_dtmf_string, '-', sizeof(g_dtmf_string)); + g_dtmf_string[sizeof(g_dtmf_string) - 1] = 0; BK4819_Init(); - BOARD_ADC_GetBatteryInfo(&gBatteryCurrentVoltage, &gBatteryCurrent); + BOARD_ADC_GetBatteryInfo(&g_battery_current_voltage, &g_battery_current); BOARD_EEPROM_Init(); @@ -93,8 +93,8 @@ void Main(void) RADIO_SetupRegisters(true); - for (i = 0; i < ARRAY_SIZE(gBatteryVoltages); i++) - BOARD_ADC_GetBatteryInfo(&gBatteryVoltages[i], &gBatteryCurrent); + for (i = 0; i < ARRAY_SIZE(g_battery_voltages); i++) + BOARD_ADC_GetBatteryInfo(&g_battery_voltages[i], &g_battery_current); BATTERY_GetReadings(false); @@ -104,10 +104,10 @@ void Main(void) BootMode = BOOT_GetMode(); - gF_LOCK = (BootMode == BOOT_MODE_F_LOCK); // flag to say include the hidden menu items + g_f_lock = (BootMode == BOOT_MODE_F_LOCK); // flag to say include the hidden menu items // sort the menu list - UI_SortMenu(!gF_LOCK); + UI_SortMenu(!g_f_lock); // wait for user to release all butts before moving on if (!GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT) || @@ -127,16 +127,16 @@ void Main(void) g_debounce_counter = 0; } - if (!gChargingWithTypeC && gBatteryDisplayLevel == 0) + if (!g_charging_with_type_c && g_battery_display_level == 0) { FUNCTION_Select(FUNCTION_POWER_SAVE); - if (g_eeprom.backlight < (ARRAY_SIZE(gSubMenu_backlight) - 1)) + if (g_eeprom.backlight < (ARRAY_SIZE(g_sub_menu_backlight) - 1)) GPIO_ClearBit(&GPIOB->DATA, GPIOB_PIN_BACKLIGHT); // turn the backlight OFF else GPIO_SetBit(&GPIOB->DATA, GPIOB_PIN_BACKLIGHT); // turn the backlight ON - gReducedService = true; + g_reduced_service = true; } else { @@ -146,15 +146,15 @@ void Main(void) if (g_eeprom.pwr_on_display_mode != PWR_ON_DISPLAY_MODE_NONE) { // 2.55 second boot-up screen - while (boot_counter_10ms > 0) + while (g_boot_counter_10ms > 0) { if (KEYBOARD_Poll() != KEY_INVALID) { // halt boot beeps - boot_counter_10ms = 0; + g_boot_counter_10ms = 0; break; } #ifdef ENABLE_BOOT_BEEPS - if ((boot_counter_10ms % 25) == 0) + if ((g_boot_counter_10ms % 25) == 0) AUDIO_PlayBeep(BEEP_880HZ_40MS_OPTIONAL); #endif } @@ -163,9 +163,9 @@ void Main(void) #ifdef ENABLE_PWRON_PASSWORD if (g_eeprom.power_on_password < 1000000) { - bIsInLockScreen = true; + g_is_in_lock_screen = true; UI_DisplayLock(); - bIsInLockScreen = false; + g_is_in_lock_screen = false; } #endif @@ -173,7 +173,7 @@ void Main(void) GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_VOICE_0); - gUpdateStatus = true; + g_update_status = true; #ifdef ENABLE_VOICE { @@ -206,16 +206,16 @@ void Main(void) { APP_Update(); - if (gNextTimeslice) + if (g_next_time_slice) { APP_TimeSlice10ms(); - gNextTimeslice = false; + g_next_time_slice = false; } - if (gNextTimeslice_500ms) + if (g_next_time_slice_500ms) { APP_TimeSlice500ms(); - gNextTimeslice_500ms = false; + g_next_time_slice_500ms = false; } } } diff --git a/misc.c b/misc.c index e3666ec..42ee913 100644 --- a/misc.c +++ b/misc.c @@ -19,252 +19,253 @@ #include "misc.h" #include "settings.h" -const uint8_t fm_resume_countdown_500ms = 2500 / 500; // 2.5 seconds -const uint8_t fm_radio_countdown_500ms = 2000 / 500; // 2 seconds -const uint16_t fm_play_countdown_scan_10ms = 100 / 10; // 100ms -const uint16_t fm_play_countdown_noscan_10ms = 1200 / 10; // 1.2 seconds -const uint16_t fm_restore_countdown_10ms = 5000 / 10; // 5 seconds +// *********************************************** -const uint8_t menu_timeout_500ms = 20000 / 500; // 20 seconds -const uint16_t menu_timeout_long_500ms = 120000 / 500; // 2 minutes +const uint8_t fm_resume_countdown_500ms = 2500 / 500; // 2.5 seconds +const uint8_t fm_radio_countdown_500ms = 2000 / 500; // 2 seconds +const uint16_t fm_play_countdown_scan_10ms = 100 / 10; // 100ms +const uint16_t fm_play_countdown_noscan_10ms = 1200 / 10; // 1.2 seconds +const uint16_t fm_restore_countdown_10ms = 5000 / 10; // 5 seconds -const uint8_t DTMF_RX_live_timeout_500ms = 6000 / 500; // 6 seconds live decoder on screen -const uint8_t DTMF_RX_timeout_500ms = 10000 / 500; // 10 seconds till we wipe the DTMF receiver -const uint8_t DTMF_decode_ring_countdown_500ms = 15000 / 500; // 15 seconds .. time we sound the ringing for -const uint8_t DTMF_txstop_countdown_500ms = 3000 / 500; // 6 seconds +const uint8_t menu_timeout_500ms = 30000 / 500; // 30 seconds +const uint16_t menu_timeout_long_500ms = 120000 / 500; // 2 minutes -const uint8_t key_input_timeout_500ms = 6000 / 500; // 6 seconds -const uint16_t key_repeat_delay_10ms = 400 / 10; // 400ms -const uint16_t key_repeat_10ms = 80 / 10; // 80ms .. MUST be less than 'key_repeat_delay' -const uint16_t key_debounce_10ms = 20 / 10; // 20ms +const uint8_t dtmf_rx_live_timeout_500ms = 6000 / 500; // 6 seconds live decoder on screen +const uint8_t dtmf_rx_timeout_500ms = 10000 / 500; // 10 seconds till we wipe the DTMF receiver +const uint8_t dtmf_decode_ring_countdown_500ms = 15000 / 500; // 15 seconds .. time we sound the ringing for +const uint8_t dtmf_txstop_countdown_500ms = 3000 / 500; // 6 seconds -const uint8_t scan_freq_css_delay_10ms = 210 / 10; // 210ms .. don't reduce this +const uint8_t key_input_timeout_500ms = 6000 / 500; // 6 seconds +const uint16_t key_repeat_delay_10ms = 400 / 10; // 400ms +const uint16_t key_repeat_10ms = 80 / 10; // 80ms .. MUST be less than 'key_repeat_delay' +const uint16_t key_debounce_10ms = 20 / 10; // 20ms -const uint16_t dual_watch_count_after_tx_10ms = 3600 / 10; // 3.6 sec after TX ends -const uint16_t dual_watch_count_after_rx_10ms = 1000 / 10; // 1 sec after RX ends ? -const uint16_t dual_watch_count_after_1_10ms = 5000 / 10; // 5 sec -const uint16_t dual_watch_count_after_2_10ms = 3600 / 10; // 3.6 sec -const uint16_t dual_watch_count_noaa_10ms = 70 / 10; // 70ms +const uint8_t scan_freq_css_delay_10ms = 210 / 10; // 210ms .. don't reduce this + +const uint16_t dual_watch_count_after_tx_10ms = 3600 / 10; // 3.6 sec after TX ends +const uint16_t dual_watch_count_after_rx_10ms = 1000 / 10; // 1 sec after RX ends ? +const uint16_t dual_watch_count_after_1_10ms = 5000 / 10; // 5 sec +const uint16_t dual_watch_count_after_2_10ms = 3600 / 10; // 3.6 sec +const uint16_t dual_watch_count_noaa_10ms = 70 / 10; // 70ms #ifdef ENABLE_VOX - const uint16_t dual_watch_count_after_vox_10ms = 200 / 10; // 200ms + const uint16_t dual_watch_count_after_vox_10ms = 200 / 10; // 200ms #endif -const uint16_t dual_watch_count_toggle_10ms = 100 / 10; // 100ms between VFO toggles +const uint16_t dual_watch_count_toggle_10ms = 100 / 10; // 100ms between VFO toggles -const uint16_t scan_pause_delay_in_1_10ms = 5000 / 10; // 5 seconds -const uint16_t scan_pause_delay_in_2_10ms = 500 / 10; // 500ms -const uint16_t scan_pause_delay_in_3_10ms = 200 / 10; // 200ms -const uint16_t scan_pause_delay_in_4_10ms = 300 / 10; // 300ms -const uint16_t scan_pause_delay_in_5_10ms = 1000 / 10; // 1 sec -const uint16_t scan_pause_delay_in_6_10ms = 100 / 10; // 100ms -const uint16_t scan_pause_delay_in_7_10ms = 3600 / 10; // 3.6 seconds +const uint16_t scan_pause_delay_in_1_10ms = 5000 / 10; // 5 seconds +const uint16_t scan_pause_delay_in_2_10ms = 500 / 10; // 500ms +const uint16_t scan_pause_delay_in_3_10ms = 200 / 10; // 200ms +const uint16_t scan_pause_delay_in_4_10ms = 300 / 10; // 300ms +const uint16_t scan_pause_delay_in_5_10ms = 1000 / 10; // 1 sec +const uint16_t scan_pause_delay_in_6_10ms = 100 / 10; // 100ms +const uint16_t scan_pause_delay_in_7_10ms = 3600 / 10; // 3.6 seconds -const uint16_t battery_save_count_10ms = 10000 / 10; // 10 seconds +const uint16_t battery_save_count_10ms = 10000 / 10; // 10 seconds -const uint16_t power_save1_10ms = 100 / 10; // 100ms -const uint16_t power_save2_10ms = 200 / 10; // 200ms +const uint16_t power_save1_10ms = 100 / 10; // 100ms +const uint16_t power_save2_10ms = 200 / 10; // 200ms #ifdef ENABLE_VOX const uint16_t vox_stop_count_down_10ms = 1000 / 10; // 1 second #endif -const uint16_t NOAA_countdown_10ms = 5000 / 10; // 5 seconds -const uint16_t NOAA_countdown_2_10ms = 500 / 10; // 500ms -const uint16_t NOAA_countdown_3_10ms = 200 / 10; // 200ms +const uint16_t noaa_count_down_10ms = 5000 / 10; // 5 seconds +const uint16_t noaa_count_down_2_10ms = 500 / 10; // 500ms +const uint16_t noaa_count_down_3_10ms = 200 / 10; // 200ms -//const uint16_t gMax_bat_v = 840; // 8.4V -//const uint16_t gMin_bat_v = 660; // 6.6V +// *********************************************** -const uint32_t gDefaultAesKey[4] = {0x4AA5CC60, 0x0312CC5F, 0xFFD2DABB, 0x6BBA7F92}; +const uint32_t g_default_aes_key[4] = {0x4AA5CC60, 0x0312CC5F, 0xFFD2DABB, 0x6BBA7F92}; -const uint8_t gMicGain_dB2[5] = {3, 8, 16, 24, 31}; +const uint8_t g_mic_gain_dB_2[5] = {3, 8, 16, 24, 31}; -bool gSetting_350TX; -bool gSetting_KILLED; -bool gSetting_200TX; -bool gSetting_500TX; -bool gSetting_350EN; -bool gSetting_TX_EN; -uint8_t gSetting_F_LOCK; -bool gSetting_ScrambleEnable; +bool g_setting_350_tx_enable; +bool g_setting_killed; +bool g_setting_200_tx_enable; +bool g_setting_500_tx_enable; +bool g_setting_350_enable; +bool g_Setting_tx_enable; +uint8_t g_setting_f_lock; +bool g_setting_scramble_enable; -uint8_t gSetting_backlight_on_tx_rx; +uint8_t g_setting_backlight_on_tx_rx; #ifdef ENABLE_AM_FIX - bool gSetting_AM_fix; + bool g_setting_am_fix; #endif #ifdef ENABLE_AM_FIX_TEST1 - uint8_t gSetting_AM_fix_test1 = 0; + uint8_t g_setting_am_fix_test1 = 0; #endif #ifdef ENABLE_AUDIO_BAR - bool gSetting_mic_bar; + bool g_setting_mic_bar; #endif -bool gSetting_live_DTMF_decoder; -uint8_t gSetting_battery_text; +bool g_setting_live_dtmf_decoder; +uint8_t g_setting_battery_text; -uint8_t gSetting_side1_short; -uint8_t gSetting_side1_long; -uint8_t gSetting_side2_short; -uint8_t gSetting_side2_long; +uint8_t g_setting_side1_short; +uint8_t g_setting_side1_long; +uint8_t g_setting_side2_short; +uint8_t g_setting_side2_long; -bool gMonitor = false; // true opens the squelch +bool g_monitor_enabled = false; // true opens the squelch -uint32_t gCustomAesKey[4]; -bool bHasCustomAesKey; -uint32_t gChallenge[4]; -uint8_t gTryCount; +uint32_t g_custom_aes_key[4]; +bool g_has_custom_aes_key; +uint32_t g_challenge[4]; +uint8_t g_try_count; -uint8_t g_eeprom_1EC0_0[8]; -uint8_t g_eeprom_1EC0_1[8]; -uint8_t g_eeprom_1EC0_2[8]; -uint8_t g_eeprom_1EC0_3[8]; +uint8_t g_eeprom_1EC0_0[8]; +uint8_t g_eeprom_1EC0_1[8]; +uint8_t g_eeprom_1EC0_2[8]; +uint8_t g_eeprom_1EC0_3[8]; -uint16_t g_eeprom_RSSI_CALIB[2][4]; +uint16_t g_eeprom_rssi_calib[2][4]; -uint16_t g_eeprom_1F8A; -uint16_t g_eeprom_1F8C; +uint16_t g_eeprom_1F8A; +uint16_t g_eeprom_1F8C; -uint8_t gUSER_ChannelAttributes[FREQ_CHANNEL_LAST + 1]; +uint8_t g_user_channel_attributes[FREQ_CHANNEL_LAST + 1]; -volatile uint16_t gBatterySaveCountdown_10ms = battery_save_count_10ms; +volatile uint16_t g_battery_save_count_down_10ms = battery_save_count_10ms; -volatile bool gPowerSaveCountdownExpired; -volatile bool gSchedulePowerSave; +volatile bool g_power_save_count_down_expired; +volatile bool g_schedule_power_save; -volatile bool gScheduleDualWatch = true; +volatile bool g_schedule_dual_watch = true; -volatile uint16_t gDualWatchCountdown_10ms; -volatile bool gDualWatchCountdownExpired = true; -bool gDualWatchActive = false; +volatile uint16_t g_dual_watch_count_down_10ms; +volatile bool g_dual_watch_count_down_expired = true; +bool g_dual_watch_active; -volatile uint8_t gSerialConfigCountDown_500ms; +volatile uint8_t g_serial_config_count_down_500ms; -volatile bool gNextTimeslice_500ms; +volatile bool g_next_time_slice_500ms; -volatile uint16_t gTxTimerCountdown_500ms; -volatile bool gTxTimeoutReached; +volatile uint16_t g_tx_timer_count_down_500ms; +volatile bool g_tx_timeout_reached; -volatile uint16_t gTailNoteEliminationCountdown_10ms; +volatile uint16_t g_tail_tone_elimination_count_down_10ms; #ifdef ENABLE_NOAA - volatile uint16_t gNOAA_Countdown_10ms; + volatile uint16_t g_noaa_count_down_10ms; #endif -bool gEnableSpeaker; -uint8_t gKeyInputCountdown = 0; -uint8_t gKeyLockCountdown; -uint8_t gRTTECountdown; -bool bIsInLockScreen; -uint8_t gUpdateStatus; -uint8_t gFoundCTCSS; -uint8_t gFoundCDCSS; -bool gEndOfRxDetectedMaybe; +bool g_enable_speaker; +uint8_t g_key_input_count_down = 0; +uint8_t g_key_lock_count_down; +uint8_t g_rtte_count_down; +bool g_is_in_lock_screen; +uint8_t g_update_status; +uint8_t g_found_CTCSS; +uint8_t g_found_CDCSS; +bool g_end_of_rx_detected_maybe; -int16_t gVFO_RSSI[2]; -uint8_t gVFO_RSSI_bar_level[2]; +int16_t g_vfo_rssi[2]; +uint8_t g_vfo_rssi_bar_level[2]; -uint8_t gReducedService; -uint8_t gBatteryVoltageIndex; -CssScanMode_t gCssScanMode; -bool gUpdateRSSI; +uint8_t g_reduced_service; +uint8_t g_battery_voltage_index; +css_scan_mode_t g_css_scan_mode; +bool g_update_rssi; #if defined(ENABLE_ALARM) || defined(ENABLE_TX1750) - AlarmState_t gAlarmState; + alarm_state_t g_alarm_state; #endif -uint16_t gMenuCountdown; -bool gPttWasReleased; -bool gPttWasPressed; -uint8_t gKeypadLocked; -bool gFlagReconfigureVfos; -uint8_t gVfoConfigureMode; -bool gFlagResetVfos; -bool gRequestSaveVFO; -uint8_t gRequestSaveChannel; -bool gRequestSaveSettings; +uint16_t g_menu_count_down; +bool g_ptt_was_released; +bool g_ptt_was_pressed; +uint8_t g_keypad_locked; +bool g_flag_reconfigure_vfos; +uint8_t g_vfo_configure_mode; +bool g_flag_reset_vfos; +bool g_request_save_vfo; +uint8_t g_request_save_channel; +bool g_request_save_settings; #ifdef ENABLE_FMRADIO - bool gRequestSaveFM; + bool g_request_save_fm; #endif -bool gFlagPrepareTX; +bool g_flag_prepare_tx; -bool gFlagAcceptSetting; -bool gFlagRefreshSetting; +bool g_flag_AcceptSetting; +bool g_flag_refresh_menu; -bool gFlagSaveVfo; -bool gFlagSaveSettings; -bool gFlagSaveChannel; +bool g_flag_SaveVfo; +bool g_flag_SaveSettings; +bool g_flag_SaveChannel; #ifdef ENABLE_FMRADIO - bool gFlagSaveFM; + bool g_flag_SaveFM; #endif -bool g_CDCSS_lost; -uint8_t g_CDCSS_code_type; -bool g_CTCSS_lost; -bool g_CxCSS_tailL_found; +bool g_CDCSS_lost; +uint8_t g_CDCSS_code_type; +bool g_CTCSS_lost; +bool g_CxCSS_tail_found; #ifdef ENABLE_VOX - bool g_vox_lost; - bool gVOX_NoiseDetected; - uint16_t gVoxResumeCountdown; - uint16_t g_vox_pause_count_down; + bool g_vox_lost; + bool g_vox_noise_detected; + uint16_t g_vox_resume_count_down; + uint16_t g_vox_pause_count_down; #endif -bool g_SquelchLost; -uint8_t gFlashLightState; -volatile uint16_t gFlashLightBlinkCounter; -bool gFlagEndTransmission; -uint16_t gLowBatteryCountdown; -uint8_t gNextChannel; -ReceptionMode_t gRxReceptionMode; +bool g_squelch_lost; +uint8_t g_flash_light_state; +volatile uint16_t g_flash_light_bBlink_counter; +bool g_flag_end_tx; +uint16_t g_low_batteryCountdown; +uint8_t g_next_channel; +reception_mode_t g_rx_reception_mode; -uint8_t gRestoreUSER_CHANNEL; -enum scan_next_chan_t gCurrentScanList; -uint32_t gRestoreFrequency; +uint8_t g_restore_channel; +scan_next_chan_t g_current_scan_list; +uint32_t g_restore_frequency; -bool gRxVfoIsActive; +bool g_rx_vfo_is_active; #ifdef ENABLE_ALARM - uint8_t gAlarmToneCounter; - uint16_t gAlarmRunningCounter; + uint8_t g_alarm_tone_counter; + uint16_t g_alarm_running_counter; #endif -bool gKeyBeingHeld; -bool gPttIsPressed; -uint8_t gPttDebounceCounter; -uint8_t gMenuListCount; -uint8_t gBackup_cross_vfo_rx_tx; -uint8_t gScanDelay_10ms; +bool g_key_being_held; +bool g_ptt_is_pressed; +uint8_t g_ptt_debounce_counter; +uint8_t g_menu_list_count; +uint8_t g_backup_cross_vfo_rx_tx; +uint8_t g_scan_delay_10ms; #ifdef ENABLE_AIRCOPY - uint8_t gAircopySendCountdown; + uint8_t g_air_copy_send_count_down; #endif -uint8_t gFSKWriteIndex; +uint8_t g_fsk_wite_index; #ifdef ENABLE_NOAA - bool gIsNoaaMode; - uint8_t gNoaaChannel; + bool g_is_noaa_mode; + uint8_t g_noaa_channel; #endif -bool gUpdateDisplay; +bool g_update_display; -bool gF_LOCK = false; +bool g_f_lock = false; -uint8_t gShowChPrefix; +uint8_t g_show_chan_prefix; -volatile bool gNextTimeslice; -volatile uint8_t gFoundCDCSSCountdown_10ms; -volatile uint8_t gFoundCTCSSCountdown_10ms; +volatile bool g_next_time_slice; +volatile uint8_t g_found_CDCSS_count_down_10ms; +volatile uint8_t g_found_CTCSS_count_down_10ms; #ifdef ENABLE_VOX - volatile uint16_t gVoxStopCountdown_10ms; + volatile uint16_t g_vox_stop_count_down_10ms; #endif -volatile bool gNextTimeslice40ms; +volatile bool g_next_time_slice_40ms; #ifdef ENABLE_NOAA - volatile uint16_t gNOAACountdown_10ms = 0; - volatile bool gScheduleNOAA = true; + volatile uint16_t g_noaa_count_down_10ms = 0; + volatile bool g_schedule_noaa = true; #endif -volatile bool gFlagTailNoteEliminationComplete; +volatile bool g_flag_tail_tone_elimination_complete; #ifdef ENABLE_FMRADIO - volatile bool gScheduleFM; + volatile bool g_schedule_fm; #endif -volatile uint8_t boot_counter_10ms; +volatile uint8_t g_boot_counter_10ms; -int16_t gCurrentRSSI[2] = {0, 0}; // now one per VFO +int16_t g_current_rssi[2] = {0, 0}; // now one per VFO -uint8_t gIsLocked = 0xFF; +uint8_t g_is_locked = 0xFF; -unsigned int get_rx_VFO(void) +unsigned int get_RX_VFO(void) { unsigned int rx_vfo = g_eeprom.tx_vfo; if (g_eeprom.cross_vfo_rx_tx == CROSS_BAND_CHAN_B) @@ -281,7 +282,7 @@ unsigned int get_rx_VFO(void) return rx_vfo; } -unsigned int get_tx_VFO(void) +unsigned int get_TX_VFO(void) { unsigned int tx_vfo = g_eeprom.tx_vfo; if (g_eeprom.cross_vfo_rx_tx == CROSS_BAND_CHAN_B) diff --git a/misc.h b/misc.h index 3667ba0..69de811 100644 --- a/misc.h +++ b/misc.h @@ -25,14 +25,14 @@ #endif #ifndef MAX - #define MAX(a, b) ({ __typeof__ (a) _a = (a); __typeof__ (b) _b = (b); _a > _b ? _a : _b; }) + #define MAX(a, b) ({ __typeof__ (a) _a = (a); __typeof__ (b) _b = (b); _a > _b ? _a : _b; }) #endif #ifndef MIN - #define MIN(a, b) ({ __typeof__ (a) _a = (a); __typeof__ (b) _b = (b); _a < _b ? _a : _b; }) + #define MIN(a, b) ({ __typeof__ (a) _a = (a); __typeof__ (b) _b = (b); _a < _b ? _a : _b; }) #endif -#define IS_USER_CHANNEL(x) ((x) >= USER_CHANNEL_FIRST && (x) <= USER_CHANNEL_LAST) +#define IS_USER_CHANNEL(x) ((x) >= USER_CHANNEL_FIRST && (x) <= USER_CHANNEL_LAST) #define IS_FREQ_CHANNEL(x) ((x) >= FREQ_CHANNEL_FIRST && (x) <= FREQ_CHANNEL_LAST) #define IS_VALID_CHANNEL(x) ((x) < LAST_CHANNEL) @@ -40,8 +40,8 @@ #define IS_NOT_NOAA_CHANNEL(x) ((x) >= USER_CHANNEL_FIRST && (x) <= FREQ_CHANNEL_LAST) enum { - USER_CHANNEL_FIRST = 0, - USER_CHANNEL_LAST = 199u, + USER_CHANNEL_FIRST = 0, + USER_CHANNEL_LAST = 199u, FREQ_CHANNEL_FIRST = 200u, FREQ_CHANNEL_LAST = 206u, NOAA_CHANNEL_FIRST = 207u, @@ -61,37 +61,37 @@ enum { VFO_CONFIGURE_RELOAD }; -enum AlarmState_t { +enum alarm_state_e { ALARM_STATE_OFF = 0, ALARM_STATE_TXALARM, ALARM_STATE_ALARM, ALARM_STATE_TX1750 }; -typedef enum AlarmState_t AlarmState_t; +typedef enum alarm_state_e alarm_state_t; -enum ReceptionMode_t { +enum reception_mode_e { RX_MODE_NONE = 0, // squelch close ? RX_MODE_DETECTED, // signal detected RX_MODE_LISTENING // }; -typedef enum ReceptionMode_t ReceptionMode_t; +typedef enum reception_mode_e reception_mode_t; -enum CssScanMode_t +enum css_scan_mode_e { CSS_SCAN_MODE_OFF = 0, CSS_SCAN_MODE_SCANNING, CSS_SCAN_MODE_FOUND, }; -typedef enum CssScanMode_t CssScanMode_t; +typedef enum css_scan_mode_e css_scan_mode_t; -enum scan_next_chan_t { +enum scan_next_chan_e { SCAN_NEXT_CHAN_SCANLIST1 = 0, SCAN_NEXT_CHAN_SCANLIST2, - SCAN_NEXT_CHAN_dual_watch, + SCAN_NEXT_CHAN_DUAL_WATCH, SCAN_NEXT_CHAN_USER, SCAN_NEXT_NUM }; -typedef enum scan_next_chan_t scan_next_chan_t; +typedef enum scan_next_chan_e scan_next_chan_t; extern const uint8_t fm_resume_countdown_500ms; extern const uint8_t fm_radio_countdown_500ms; @@ -102,10 +102,10 @@ extern const uint16_t fm_restore_countdown_10ms; extern const uint8_t menu_timeout_500ms; extern const uint16_t menu_timeout_long_500ms; -extern const uint8_t DTMF_RX_live_timeout_500ms; -extern const uint8_t DTMF_RX_timeout_500ms; -extern const uint8_t DTMF_decode_ring_countdown_500ms; -extern const uint8_t DTMF_txstop_countdown_500ms; +extern const uint8_t dtmf_rx_live_timeout_500ms; +extern const uint8_t dtmf_rx_timeout_500ms; +extern const uint8_t dtmf_decode_ring_countdown_500ms; +extern const uint8_t dtmf_txstop_countdown_500ms; extern const uint8_t key_input_timeout_500ms; @@ -124,9 +124,9 @@ extern const uint16_t power_save2_10ms; extern const uint16_t vox_stop_count_down_10ms; #endif -extern const uint16_t NOAA_countdown_10ms; -extern const uint16_t NOAA_countdown_2_10ms; -extern const uint16_t NOAA_countdown_3_10ms; +extern const uint16_t noaa_count_down_10ms; +extern const uint16_t noaa_count_down_2_10ms; +extern const uint16_t noaa_count_down_3_10ms; extern const uint16_t dual_watch_count_after_tx_10ms; extern const uint16_t dual_watch_count_after_rx_10ms; @@ -146,197 +146,193 @@ extern const uint16_t scan_pause_delay_in_5_10ms; extern const uint16_t scan_pause_delay_in_6_10ms; extern const uint16_t scan_pause_delay_in_7_10ms; -//extern const uint16_t gMax_bat_v; -//extern const uint16_t gMin_bat_v; +extern const uint8_t g_mic_gain_dB_2[5]; -extern const uint8_t gMicGain_dB2[5]; +extern bool g_setting_350_tx_enable; +extern bool g_setting_killed; +extern bool g_setting_200_tx_enable; +extern bool g_setting_500_tx_enable; +extern bool g_setting_350_enable; +extern bool g_Setting_tx_enable; +extern uint8_t g_setting_f_lock; +extern bool g_setting_scramble_enable; -extern bool gSetting_350TX; -extern bool gSetting_KILLED; -extern bool gSetting_200TX; -extern bool gSetting_500TX; -extern bool gSetting_350EN; -extern bool gSetting_TX_EN; -extern uint8_t gSetting_F_LOCK; -extern bool gSetting_ScrambleEnable; - -extern uint8_t gSetting_backlight_on_tx_rx; +extern uint8_t g_setting_backlight_on_tx_rx; #ifdef ENABLE_AM_FIX - extern bool gSetting_AM_fix; + extern bool g_setting_am_fix; #endif #ifdef ENABLE_AM_FIX_TEST1 - extern uint8_t gSetting_AM_fix_test1; + extern uint8_t g_setting_am_fix_test1; #endif #ifdef ENABLE_AUDIO_BAR - extern bool gSetting_mic_bar; + extern bool g_setting_mic_bar; #endif -extern bool gSetting_live_DTMF_decoder; -extern uint8_t gSetting_battery_text; +extern bool g_setting_live_dtmf_decoder; +extern uint8_t g_setting_battery_text; -extern uint8_t gSetting_side1_short; -extern uint8_t gSetting_side1_long; -extern uint8_t gSetting_side2_short; -extern uint8_t gSetting_side2_long; +extern uint8_t g_setting_side1_short; +extern uint8_t g_setting_side1_long; +extern uint8_t g_setting_side2_short; +extern uint8_t g_setting_side2_long; -extern bool gMonitor; +extern bool g_monitor_enabled; -extern const uint32_t gDefaultAesKey[4]; -extern uint32_t gCustomAesKey[4]; -extern bool bHasCustomAesKey; -extern uint32_t gChallenge[4]; -extern uint8_t gTryCount; +extern const uint32_t g_default_aes_key[4]; +extern uint32_t g_custom_aes_key[4]; +extern bool g_has_custom_aes_key; +extern uint32_t g_challenge[4]; +extern uint8_t g_try_count; extern uint8_t g_eeprom_1EC0_0[8]; extern uint8_t g_eeprom_1EC0_1[8]; extern uint8_t g_eeprom_1EC0_2[8]; extern uint8_t g_eeprom_1EC0_3[8]; -extern uint16_t g_eeprom_RSSI_CALIB[2][4]; +extern uint16_t g_eeprom_rssi_calib[2][4]; extern uint16_t g_eeprom_1F8A; extern uint16_t g_eeprom_1F8C; -extern uint8_t gUSER_ChannelAttributes[207]; +extern uint8_t g_user_channel_attributes[207]; -extern volatile uint16_t gBatterySaveCountdown_10ms; +extern volatile uint16_t g_battery_save_count_down_10ms; -extern volatile bool gPowerSaveCountdownExpired; -extern volatile bool gSchedulePowerSave; +extern volatile bool g_power_save_count_down_expired; +extern volatile bool g_schedule_power_save; -extern volatile bool gScheduleDualWatch; +extern volatile bool g_schedule_dual_watch; -extern volatile uint16_t gDualWatchCountdown_10ms; -extern volatile bool gDualWatchCountdownExpired; -extern bool gDualWatchActive; +extern volatile uint16_t g_dual_watch_count_down_10ms; +extern volatile bool g_dual_watch_count_down_expired; +extern bool g_dual_watch_active; -extern volatile uint8_t gSerialConfigCountDown_500ms; +extern volatile uint8_t g_serial_config_count_down_500ms; -extern volatile bool gNextTimeslice_500ms; +extern volatile bool g_next_time_slice_500ms; -extern volatile uint16_t gTxTimerCountdown_500ms; -extern volatile bool gTxTimeoutReached; +extern volatile uint16_t g_tx_timer_count_down_500ms; +extern volatile bool g_tx_timeout_reached; -extern volatile uint16_t gTailNoteEliminationCountdown_10ms; +extern volatile uint16_t g_tail_tone_elimination_count_down_10ms; #ifdef ENABLE_FMRADIO - extern volatile uint16_t gFmPlayCountdown_10ms; + extern volatile uint16_t g_fm_play_count_down_10ms; #endif #ifdef ENABLE_NOAA - extern volatile uint16_t gNOAA_Countdown_10ms; + extern volatile uint16_t g_noaa_count_down_10ms; #endif -extern bool gEnableSpeaker; -extern uint8_t gKeyInputCountdown; -extern uint8_t gKeyLockCountdown; -extern uint8_t gRTTECountdown; -extern bool bIsInLockScreen; -extern uint8_t gUpdateStatus; -extern uint8_t gFoundCTCSS; -extern uint8_t gFoundCDCSS; -extern bool gEndOfRxDetectedMaybe; +extern bool g_enable_speaker; +extern uint8_t g_key_input_count_down; +extern uint8_t g_key_lock_count_down; +extern uint8_t g_rtte_count_down; +extern bool g_is_in_lock_screen; +extern uint8_t g_update_status; +extern uint8_t g_found_CTCSS; +extern uint8_t g_found_CDCSS; +extern bool g_end_of_rx_detected_maybe; -extern int16_t gVFO_RSSI[2]; -extern uint8_t gVFO_RSSI_bar_level[2]; +extern int16_t g_vfo_rssi[2]; +extern uint8_t g_vfo_rssi_bar_level[2]; -extern uint8_t gReducedService; -extern uint8_t gBatteryVoltageIndex; -extern CssScanMode_t gCssScanMode; -extern bool gUpdateRSSI; -extern AlarmState_t gAlarmState; -extern uint16_t gMenuCountdown; -extern bool gPttWasReleased; -extern bool gPttWasPressed; -extern bool gFlagReconfigureVfos; -extern uint8_t gVfoConfigureMode; -extern bool gFlagResetVfos; -extern bool gRequestSaveVFO; -extern uint8_t gRequestSaveChannel; -extern bool gRequestSaveSettings; +extern uint8_t g_reduced_service; +extern uint8_t g_battery_voltage_index; +extern css_scan_mode_t g_css_scan_mode; +extern bool g_update_rssi; +extern alarm_state_t g_alarm_state; +extern uint16_t g_menu_count_down; +extern bool g_ptt_was_released; +extern bool g_ptt_was_pressed; +extern bool g_flag_reconfigure_vfos; +extern uint8_t g_vfo_configure_mode; +extern bool g_flag_reset_vfos; +extern bool g_request_save_vfo; +extern uint8_t g_request_save_channel; +extern bool g_request_save_settings; #ifdef ENABLE_FMRADIO - extern bool gRequestSaveFM; + extern bool g_request_save_fm; #endif -extern uint8_t gKeypadLocked; -extern bool gFlagPrepareTX; +extern uint8_t g_keypad_locked; +extern bool g_flag_prepare_tx; -extern bool gFlagAcceptSetting; // accept menu setting -extern bool gFlagRefreshSetting; // refresh menu display +extern bool g_flag_AcceptSetting; // accept menu setting +extern bool g_flag_refresh_menu; // refresh menu display -extern bool gFlagSaveVfo; -extern bool gFlagSaveSettings; -extern bool gFlagSaveChannel; +extern bool g_flag_SaveVfo; +extern bool g_flag_SaveSettings; +extern bool g_flag_SaveChannel; #ifdef ENABLE_FMRADIO - extern bool gFlagSaveFM; + extern bool g_flag_SaveFM; #endif extern bool g_CDCSS_lost; extern uint8_t g_CDCSS_code_type; extern bool g_CTCSS_lost; -extern bool g_CxCSS_tailL_found; +extern bool g_CxCSS_tail_found; #ifdef ENABLE_VOX extern bool g_vox_lost; - extern bool gVOX_NoiseDetected; - extern uint16_t gVoxResumeCountdown; + extern bool g_vox_noise_detected; + extern uint16_t g_vox_resume_count_down; extern uint16_t g_vox_pause_count_down; #endif -extern bool g_SquelchLost; -extern uint8_t gFlashLightState; -extern volatile uint16_t gFlashLightBlinkCounter; -extern bool gFlagEndTransmission; -extern uint16_t gLowBatteryCountdown; -extern uint8_t gNextChannel; -extern ReceptionMode_t gRxReceptionMode; +extern bool g_squelch_lost; +extern uint8_t g_flash_light_state; +extern volatile uint16_t g_flash_light_bBlink_counter; +extern bool g_flag_end_tx; +extern uint16_t g_low_batteryCountdown; +extern uint8_t g_next_channel; +extern reception_mode_t g_rx_reception_mode; -extern uint8_t gRestoreUSER_CHANNEL; -extern scan_next_chan_t gCurrentScanList; -extern uint32_t gRestoreFrequency; +extern uint8_t g_restore_channel; +extern scan_next_chan_t g_current_scan_list; +extern uint32_t g_restore_frequency; -extern bool gRxVfoIsActive; -extern uint8_t gAlarmToneCounter; -extern uint16_t gAlarmRunningCounter; -extern bool gKeyBeingHeld; -extern bool gPttIsPressed; -extern uint8_t gPttDebounceCounter; -extern uint8_t gMenuListCount; -extern uint8_t gBackup_cross_vfo_rx_tx; -extern uint8_t gScanDelay_10ms; +extern bool g_rx_vfo_is_active; +extern uint8_t g_alarm_tone_counter; +extern uint16_t g_alarm_running_counter; +extern bool g_key_being_held; +extern bool g_ptt_is_pressed; +extern uint8_t g_ptt_debounce_counter; +extern uint8_t g_menu_list_count; +extern uint8_t g_backup_cross_vfo_rx_tx; +extern uint8_t g_scan_delay_10ms; #ifdef ENABLE_AIRCOPY - extern uint8_t gAircopySendCountdown; + extern uint8_t g_air_copy_send_count_down; #endif -extern uint8_t gFSKWriteIndex; +extern uint8_t g_fsk_wite_index; #ifdef ENABLE_NOAA - extern bool gIsNoaaMode; - extern uint8_t gNoaaChannel; + extern bool g_is_noaa_mode; + extern uint8_t g_noaa_channel; #endif -extern volatile bool gNextTimeslice; -extern bool gUpdateDisplay; -extern bool gF_LOCK; +extern volatile bool g_next_time_slice; +extern bool g_update_display; +extern bool g_f_lock; #ifdef ENABLE_FMRADIO - extern uint8_t gFM_ChannelPosition; + extern uint8_t g_fm_channel_position; #endif -extern uint8_t gShowChPrefix; -extern volatile uint8_t gFoundCDCSSCountdown_10ms; -extern volatile uint8_t gFoundCTCSSCountdown_10ms; +extern uint8_t g_show_chan_prefix; +extern volatile uint8_t g_found_CDCSS_count_down_10ms; +extern volatile uint8_t g_found_CTCSS_count_down_10ms; #ifdef ENABLE_VOX - extern volatile uint16_t gVoxStopCountdown_10ms; + extern volatile uint16_t g_vox_stop_count_down_10ms; #endif -extern volatile bool gNextTimeslice40ms; +extern volatile bool g_next_time_slice_40ms; #ifdef ENABLE_NOAA - extern volatile uint16_t gNOAACountdown_10ms; - extern volatile bool gScheduleNOAA; + extern volatile uint16_t g_noaa_count_down_10ms; + extern volatile bool g_schedule_noaa; #endif -extern volatile bool gFlagTailNoteEliminationComplete; +extern volatile bool g_flag_tail_tone_elimination_complete; #ifdef ENABLE_FMRADIO - extern volatile bool gScheduleFM; + extern volatile bool g_schedule_fm; #endif -extern int16_t gCurrentRSSI[2]; // now one per VFO -extern uint8_t gIsLocked; -extern volatile uint8_t boot_counter_10ms; +extern int16_t g_current_rssi[2]; // now one per VFO +extern uint8_t g_is_locked; +extern volatile uint8_t g_boot_counter_10ms; -unsigned int get_tx_VFO(void); -unsigned int get_rx_VFO(void); - -void NUMBER_Get(char *pDigits, uint32_t *pInteger); -void NUMBER_ToDigits(uint32_t Value, char *pDigits); -int32_t NUMBER_AddWithWraparound(int32_t Base, int32_t Add, int32_t LowerLimit, int32_t UpperLimit); +unsigned int get_TX_VFO(void); +unsigned int get_RX_VFO(void); +void NUMBER_Get(char *pDigits, uint32_t *pInteger); +void NUMBER_ToDigits(uint32_t Value, char *pDigits); +int32_t NUMBER_AddWithWraparound(int32_t Base, int32_t Add, int32_t LowerLimit, int32_t UpperLimit); #endif diff --git a/radio.c b/radio.c index c2169da..f2931fe 100644 --- a/radio.c +++ b/radio.c @@ -35,14 +35,14 @@ #include "settings.h" #include "ui/menu.h" -VFO_Info_t *gTxVfo; -VFO_Info_t *gRxVfo; -VFO_Info_t *gCurrentVfo; -dcs_code_type_t gSelectedcode_type; -dcs_code_type_t gCurrentcode_type; -uint8_t gSelectedCode; -step_setting_t gStepSetting; -VfoState_t VfoState[2]; +vfo_info_t *g_tx_vfo; +vfo_info_t *g_rx_vfo; +vfo_info_t *g_current_vfo; +dcs_code_type_t g_selected_code_type; +dcs_code_type_t g_current_code_type; +uint8_t g_selected_code; +step_setting_t g_step_setting; +vfo_state_t g_vfo_state[2]; bool RADIO_CheckValidChannel(uint16_t Channel, bool bCheckScanList, uint8_t VFO) { // return true if the channel appears valid @@ -54,7 +54,7 @@ bool RADIO_CheckValidChannel(uint16_t Channel, bool bCheckScanList, uint8_t VFO) if (Channel > USER_CHANNEL_LAST) return false; - Attributes = gUSER_ChannelAttributes[Channel]; + Attributes = g_user_channel_attributes[Channel]; if ((Attributes & USER_CH_BAND_MASK) > BAND7_470MHz) return false; @@ -114,7 +114,7 @@ uint8_t RADIO_FindNextChannel(uint8_t Channel, int8_t Direction, bool bCheckScan return 0xFF; } -void RADIO_InitInfo(VFO_Info_t *pInfo, const uint8_t ChannelSave, const uint32_t Frequency) +void RADIO_InitInfo(vfo_info_t *pInfo, const uint8_t ChannelSave, const uint32_t Frequency) { memset(pInfo, 0, sizeof(*pInfo)); @@ -122,7 +122,7 @@ void RADIO_InitInfo(VFO_Info_t *pInfo, const uint8_t ChannelSave, const uint32_t pInfo->scanlist_1_participation = true; pInfo->scanlist_2_participation = true; pInfo->step_setting = STEP_12_5kHz; - pInfo->step_freq = StepFrequencyTable[pInfo->step_setting]; + pInfo->step_freq = STEP_FREQ_TABLE[pInfo->step_setting]; pInfo->channel_save = ChannelSave; pInfo->frequency_reverse = false; pInfo->output_power = OUTPUT_POWER_LOW; @@ -146,9 +146,9 @@ void RADIO_ConfigureChannel(const unsigned int VFO, const unsigned int configure bool bParticipation2; uint16_t Base; uint32_t Frequency; - VFO_Info_t *pRadio = &g_eeprom.VfoInfo[VFO]; + vfo_info_t *pRadio = &g_eeprom.vfo_info[VFO]; - if (!gSetting_350EN) + if (!g_setting_350_enable) { if (g_eeprom.freq_channel[VFO] == (FREQ_CHANNEL_LAST - 2)) g_eeprom.freq_channel[VFO] = FREQ_CHANNEL_LAST - 1; @@ -171,7 +171,7 @@ void RADIO_ConfigureChannel(const unsigned int VFO, const unsigned int configure g_eeprom.cross_vfo_rx_tx = CROSS_BAND_OFF; - gUpdateStatus = true; + g_update_status = true; return; } #endif @@ -181,20 +181,20 @@ void RADIO_ConfigureChannel(const unsigned int VFO, const unsigned int configure Channel = RADIO_FindNextChannel(Channel, RADIO_CHANNEL_UP, false, VFO); if (Channel == 0xFF) { - Channel = g_eeprom.freq_channel[VFO]; + Channel = g_eeprom.freq_channel[VFO]; g_eeprom.screen_channel[VFO] = g_eeprom.freq_channel[VFO]; } else { g_eeprom.screen_channel[VFO] = Channel; - g_eeprom.user_channel[VFO] = Channel; + g_eeprom.user_channel[VFO] = Channel; } } } else Channel = FREQ_CHANNEL_LAST - 1; - Attributes = gUSER_ChannelAttributes[Channel]; + Attributes = g_user_channel_attributes[Channel]; if (Attributes == 0xFF) { // invalid/unused channel @@ -202,13 +202,13 @@ void RADIO_ConfigureChannel(const unsigned int VFO, const unsigned int configure if (Channel <= USER_CHANNEL_LAST) { - Channel = g_eeprom.freq_channel[VFO]; + Channel = g_eeprom.freq_channel[VFO]; g_eeprom.screen_channel[VFO] = g_eeprom.freq_channel[VFO]; } Index = Channel - FREQ_CHANNEL_FIRST; - RADIO_InitInfo(pRadio, Channel, frequencyBandTable[Index].lower); + RADIO_InitInfo(pRadio, Channel, FREQ_BAND_TABLE[Index].lower); return; } @@ -220,20 +220,20 @@ void RADIO_ConfigureChannel(const unsigned int VFO, const unsigned int configure if (Channel <= USER_CHANNEL_LAST) { - g_eeprom.VfoInfo[VFO].band = Band; - g_eeprom.VfoInfo[VFO].scanlist_1_participation = !!(Attributes & USER_CH_SCANLIST1); - bParticipation2 = !!(Attributes & USER_CH_SCANLIST2); + g_eeprom.vfo_info[VFO].band = Band; + g_eeprom.vfo_info[VFO].scanlist_1_participation = (Attributes & USER_CH_SCANLIST1) ? true : false; + bParticipation2 = (Attributes & USER_CH_SCANLIST2) ? true : false; } else { - Band = Channel - FREQ_CHANNEL_FIRST; - g_eeprom.VfoInfo[VFO].band = Band; - bParticipation2 = true; - g_eeprom.VfoInfo[VFO].scanlist_1_participation = true; + Band = Channel - FREQ_CHANNEL_FIRST; + g_eeprom.vfo_info[VFO].band = Band; + bParticipation2 = true; + g_eeprom.vfo_info[VFO].scanlist_1_participation = true; } - g_eeprom.VfoInfo[VFO].scanlist_2_participation = bParticipation2; - g_eeprom.VfoInfo[VFO].channel_save = Channel; + g_eeprom.vfo_info[VFO].scanlist_2_participation = bParticipation2; + g_eeprom.vfo_info[VFO].channel_save = Channel; if (Channel <= USER_CHANNEL_LAST) Base = Channel * 16; @@ -252,92 +252,92 @@ void RADIO_ConfigureChannel(const unsigned int VFO, const unsigned int configure Tmp = Data[3] & 0x0F; if (Tmp > TX_OFFSET_FREQ_DIR_SUB) Tmp = 0; - g_eeprom.VfoInfo[VFO].tx_offset_freq_dir = Tmp; - g_eeprom.VfoInfo[VFO].am_mode = (Data[3] >> 4) & 1u; + g_eeprom.vfo_info[VFO].tx_offset_freq_dir = Tmp; + g_eeprom.vfo_info[VFO].am_mode = (Data[3] >> 4) & 1u; Tmp = Data[6]; - if (Tmp >= ARRAY_SIZE(StepFrequencyTable)) + if (Tmp >= ARRAY_SIZE(STEP_FREQ_TABLE)) Tmp = STEP_12_5kHz; - g_eeprom.VfoInfo[VFO].step_setting = Tmp; - g_eeprom.VfoInfo[VFO].step_freq = StepFrequencyTable[Tmp]; + g_eeprom.vfo_info[VFO].step_setting = Tmp; + g_eeprom.vfo_info[VFO].step_freq = STEP_FREQ_TABLE[Tmp]; Tmp = Data[7]; - if (Tmp > (ARRAY_SIZE(gSubMenu_SCRAMBLER) - 1)) + if (Tmp > (ARRAY_SIZE(g_sub_menu_SCRAMBLER) - 1)) Tmp = 0; - g_eeprom.VfoInfo[VFO].scrambling_type = Tmp; + g_eeprom.vfo_info[VFO].scrambling_type = Tmp; - g_eeprom.VfoInfo[VFO].freq_config_rx.code_type = (Data[2] >> 0) & 0x0F; - g_eeprom.VfoInfo[VFO].freq_config_tx.code_type = (Data[2] >> 4) & 0x0F; + g_eeprom.vfo_info[VFO].freq_config_rx.code_type = (Data[2] >> 0) & 0x0F; + g_eeprom.vfo_info[VFO].freq_config_tx.code_type = (Data[2] >> 4) & 0x0F; Tmp = Data[0]; - switch (g_eeprom.VfoInfo[VFO].freq_config_rx.code_type) + switch (g_eeprom.vfo_info[VFO].freq_config_rx.code_type) { default: case CODE_TYPE_OFF: - g_eeprom.VfoInfo[VFO].freq_config_rx.code_type = CODE_TYPE_OFF; + g_eeprom.vfo_info[VFO].freq_config_rx.code_type = CODE_TYPE_OFF; Tmp = 0; break; case CODE_TYPE_CONTINUOUS_TONE: - if (Tmp > (ARRAY_SIZE(CTCSS_Options) - 1)) + if (Tmp > (ARRAY_SIZE(CTCSS_OPTIONS) - 1)) Tmp = 0; break; case CODE_TYPE_DIGITAL: case CODE_TYPE_REVERSE_DIGITAL: - if (Tmp > (ARRAY_SIZE(DCS_Options) - 1)) + if (Tmp > (ARRAY_SIZE(DCS_OPTIONS) - 1)) Tmp = 0; break; } - g_eeprom.VfoInfo[VFO].freq_config_rx.code = Tmp; + g_eeprom.vfo_info[VFO].freq_config_rx.code = Tmp; Tmp = Data[1]; - switch (g_eeprom.VfoInfo[VFO].freq_config_tx.code_type) + switch (g_eeprom.vfo_info[VFO].freq_config_tx.code_type) { default: case CODE_TYPE_OFF: - g_eeprom.VfoInfo[VFO].freq_config_tx.code_type = CODE_TYPE_OFF; + g_eeprom.vfo_info[VFO].freq_config_tx.code_type = CODE_TYPE_OFF; Tmp = 0; break; case CODE_TYPE_CONTINUOUS_TONE: - if (Tmp > (ARRAY_SIZE(CTCSS_Options) - 1)) + if (Tmp > (ARRAY_SIZE(CTCSS_OPTIONS) - 1)) Tmp = 0; break; case CODE_TYPE_DIGITAL: case CODE_TYPE_REVERSE_DIGITAL: - if (Tmp > (ARRAY_SIZE(DCS_Options) - 1)) + if (Tmp > (ARRAY_SIZE(DCS_OPTIONS) - 1)) Tmp = 0; break; } - g_eeprom.VfoInfo[VFO].freq_config_tx.code = Tmp; + g_eeprom.vfo_info[VFO].freq_config_tx.code = Tmp; if (Data[4] == 0xFF) { - g_eeprom.VfoInfo[VFO].frequency_reverse = false; - g_eeprom.VfoInfo[VFO].channel_bandwidth = BK4819_FILTER_BW_WIDE; - g_eeprom.VfoInfo[VFO].output_power = OUTPUT_POWER_LOW; - g_eeprom.VfoInfo[VFO].busy_channel_lock = false; + g_eeprom.vfo_info[VFO].frequency_reverse = false; + g_eeprom.vfo_info[VFO].channel_bandwidth = BK4819_FILTER_BW_WIDE; + g_eeprom.vfo_info[VFO].output_power = OUTPUT_POWER_LOW; + g_eeprom.vfo_info[VFO].busy_channel_lock = false; } else { const uint8_t d4 = Data[4]; - g_eeprom.VfoInfo[VFO].frequency_reverse = !!((d4 >> 0) & 1u); - g_eeprom.VfoInfo[VFO].channel_bandwidth = !!((d4 >> 1) & 1u); - g_eeprom.VfoInfo[VFO].output_power = ((d4 >> 2) & 3u); - g_eeprom.VfoInfo[VFO].busy_channel_lock = !!((d4 >> 4) & 1u); + g_eeprom.vfo_info[VFO].frequency_reverse = ((d4 >> 0) & 1u) ? true : false; + g_eeprom.vfo_info[VFO].channel_bandwidth = ((d4 >> 1) & 1u) ? true : false; + g_eeprom.vfo_info[VFO].output_power = ((d4 >> 2) & 3u) ? true : false; + g_eeprom.vfo_info[VFO].busy_channel_lock = ((d4 >> 4) & 1u) ? true : false; } if (Data[5] == 0xFF) { - g_eeprom.VfoInfo[VFO].DTMF_decoding_enable = false; - g_eeprom.VfoInfo[VFO].DTMF_ptt_id_tx_mode = PTT_ID_OFF; + g_eeprom.vfo_info[VFO].dtmf_decoding_enable = false; + g_eeprom.vfo_info[VFO].dtmf_ptt_id_tx_mode = PTT_ID_OFF; } else { - g_eeprom.VfoInfo[VFO].DTMF_decoding_enable = ((Data[5] >> 0) & 1u) ? true : false; - g_eeprom.VfoInfo[VFO].DTMF_ptt_id_tx_mode = ((Data[5] >> 1) & 7u); + g_eeprom.vfo_info[VFO].dtmf_decoding_enable = ((Data[5] >> 0) & 1u) ? true : false; + g_eeprom.vfo_info[VFO].dtmf_ptt_id_tx_mode = ((Data[5] >> 1) & 7u); } // *************** @@ -354,7 +354,7 @@ void RADIO_ConfigureChannel(const unsigned int VFO, const unsigned int configure if (info.offset >= 100000000) info.offset = 1000000; - g_eeprom.VfoInfo[VFO].tx_offset_freq = info.offset; + g_eeprom.vfo_info[VFO].tx_offset_freq = info.offset; // *************** } @@ -366,64 +366,64 @@ void RADIO_ConfigureChannel(const unsigned int VFO, const unsigned int configure Band = FREQUENCY_GetBand(Frequency); #endif - if (Frequency < frequencyBandTable[Band].lower) - Frequency = frequencyBandTable[Band].lower; + if (Frequency < FREQ_BAND_TABLE[Band].lower) + Frequency = FREQ_BAND_TABLE[Band].lower; else - if (Frequency > frequencyBandTable[Band].upper) - Frequency = frequencyBandTable[Band].upper; + if (Frequency > FREQ_BAND_TABLE[Band].upper) + Frequency = FREQ_BAND_TABLE[Band].upper; else if (Channel >= FREQ_CHANNEL_FIRST) - Frequency = FREQUENCY_FloorToStep(Frequency, g_eeprom.VfoInfo[VFO].step_freq, frequencyBandTable[Band].lower); + Frequency = FREQUENCY_FloorToStep(Frequency, g_eeprom.vfo_info[VFO].step_freq, FREQ_BAND_TABLE[Band].lower); pRadio->freq_config_rx.frequency = Frequency; if (Frequency >= 10800000 && Frequency < 13600000) - g_eeprom.VfoInfo[VFO].tx_offset_freq_dir = TX_OFFSET_FREQ_DIR_OFF; + g_eeprom.vfo_info[VFO].tx_offset_freq_dir = TX_OFFSET_FREQ_DIR_OFF; else if (Channel > USER_CHANNEL_LAST) - g_eeprom.VfoInfo[VFO].tx_offset_freq = FREQUENCY_FloorToStep(g_eeprom.VfoInfo[VFO].tx_offset_freq, g_eeprom.VfoInfo[VFO].step_freq, 0); + g_eeprom.vfo_info[VFO].tx_offset_freq = FREQUENCY_FloorToStep(g_eeprom.vfo_info[VFO].tx_offset_freq, g_eeprom.vfo_info[VFO].step_freq, 0); RADIO_ApplyOffset(pRadio); - memset(g_eeprom.VfoInfo[VFO].name, 0, sizeof(g_eeprom.VfoInfo[VFO].name)); + memset(g_eeprom.vfo_info[VFO].name, 0, sizeof(g_eeprom.vfo_info[VFO].name)); if (Channel < USER_CHANNEL_LAST) { // 16 bytes allocated to the channel name but only 10 used, the rest are 0's - EEPROM_ReadBuffer(0x0F50 + (Channel * 16), g_eeprom.VfoInfo[VFO].name + 0, 8); - EEPROM_ReadBuffer(0x0F58 + (Channel * 16), g_eeprom.VfoInfo[VFO].name + 8, 2); + EEPROM_ReadBuffer(0x0F50 + (Channel * 16), g_eeprom.vfo_info[VFO].name + 0, 8); + EEPROM_ReadBuffer(0x0F58 + (Channel * 16), g_eeprom.vfo_info[VFO].name + 8, 2); } - if (!g_eeprom.VfoInfo[VFO].frequency_reverse) + if (!g_eeprom.vfo_info[VFO].frequency_reverse) { - g_eeprom.VfoInfo[VFO].pRX = &g_eeprom.VfoInfo[VFO].freq_config_rx; - g_eeprom.VfoInfo[VFO].pTX = &g_eeprom.VfoInfo[VFO].freq_config_tx; + g_eeprom.vfo_info[VFO].pRX = &g_eeprom.vfo_info[VFO].freq_config_rx; + g_eeprom.vfo_info[VFO].pTX = &g_eeprom.vfo_info[VFO].freq_config_tx; } else { - g_eeprom.VfoInfo[VFO].pRX = &g_eeprom.VfoInfo[VFO].freq_config_tx; - g_eeprom.VfoInfo[VFO].pTX = &g_eeprom.VfoInfo[VFO].freq_config_rx; + g_eeprom.vfo_info[VFO].pRX = &g_eeprom.vfo_info[VFO].freq_config_tx; + g_eeprom.vfo_info[VFO].pTX = &g_eeprom.vfo_info[VFO].freq_config_rx; } - if (!gSetting_350EN) + if (!g_setting_350_enable) { - FREQ_Config_t *pConfig = g_eeprom.VfoInfo[VFO].pRX; - if (pConfig->frequency >= 35000000 && pConfig->frequency < 40000000) - pConfig->frequency = 43300000; + freq_config_t *pConfig = g_eeprom.vfo_info[VFO].pRX; + if (pConfig->frequency >= 35000000 && pConfig->frequency < 40000000) // not allowed in this range + pConfig->frequency = 43300000; // hop onto the ham band } - if (g_eeprom.VfoInfo[VFO].am_mode) + if (g_eeprom.vfo_info[VFO].am_mode) { // freq/chan is in AM mode - g_eeprom.VfoInfo[VFO].scrambling_type = 0; -// g_eeprom.VfoInfo[VFO].DTMF_decoding_enable = false; // no reason to disable DTMF decoding, aircraft use it on SSB - g_eeprom.VfoInfo[VFO].freq_config_rx.code_type = CODE_TYPE_OFF; - g_eeprom.VfoInfo[VFO].freq_config_tx.code_type = CODE_TYPE_OFF; + g_eeprom.vfo_info[VFO].scrambling_type = 0; +// g_eeprom.vfo_info[VFO].dtmf_decoding_enable = false; // no reason to disable DTMF decoding, aircraft use it on SSB + g_eeprom.vfo_info[VFO].freq_config_rx.code_type = CODE_TYPE_OFF; + g_eeprom.vfo_info[VFO].freq_config_tx.code_type = CODE_TYPE_OFF; } - g_eeprom.VfoInfo[VFO].compander = (Attributes & USER_CH_COMPAND) >> 4; + g_eeprom.vfo_info[VFO].compander = (Attributes & USER_CH_COMPAND) >> 4; RADIO_ConfigureSquelchAndOutputPower(pRadio); } -void RADIO_ConfigureSquelchAndOutputPower(VFO_Info_t *pInfo) +void RADIO_ConfigureSquelchAndOutputPower(vfo_info_t *pInfo) { uint8_t TX_power[3]; FREQUENCY_Band_t Band; @@ -436,11 +436,11 @@ void RADIO_ConfigureSquelchAndOutputPower(VFO_Info_t *pInfo) if (g_eeprom.squelch_level == 0) { // squelch == 0 (off) - pInfo->squelch_open_RSSI_thresh = 0; // 0 ~ 255 + pInfo->squelch_open_rssi_thresh = 0; // 0 ~ 255 pInfo->squelch_open_noise_thresh = 127; // 127 ~ 0 pInfo->squelch_close_glitch_thresh = 255; // 255 ~ 0 - pInfo->squelch_close_RSSI_thresh = 0; // 0 ~ 255 + pInfo->squelch_close_rssi_thresh = 0; // 0 ~ 255 pInfo->squelch_close_noise_thresh = 127; // 127 ~ 0 pInfo->squelch_open_glitch_thresh = 255; // 255 ~ 0 } @@ -448,8 +448,8 @@ void RADIO_ConfigureSquelchAndOutputPower(VFO_Info_t *pInfo) { // squelch >= 1 Base += g_eeprom.squelch_level; // my eeprom squelch-1 // VHF UHF - EEPROM_ReadBuffer(Base + 0x00, &pInfo->squelch_open_RSSI_thresh, 1); // 50 10 - EEPROM_ReadBuffer(Base + 0x10, &pInfo->squelch_close_RSSI_thresh, 1); // 40 5 + EEPROM_ReadBuffer(Base + 0x00, &pInfo->squelch_open_rssi_thresh, 1); // 50 10 + EEPROM_ReadBuffer(Base + 0x10, &pInfo->squelch_close_rssi_thresh, 1); // 40 5 EEPROM_ReadBuffer(Base + 0x20, &pInfo->squelch_open_noise_thresh, 1); // 65 90 EEPROM_ReadBuffer(Base + 0x30, &pInfo->squelch_close_noise_thresh, 1); // 70 100 @@ -457,8 +457,8 @@ void RADIO_ConfigureSquelchAndOutputPower(VFO_Info_t *pInfo) EEPROM_ReadBuffer(Base + 0x40, &pInfo->squelch_close_glitch_thresh, 1); // 90 90 EEPROM_ReadBuffer(Base + 0x50, &pInfo->squelch_open_glitch_thresh, 1); // 100 100 - uint16_t rssi_open = pInfo->squelch_open_RSSI_thresh; - uint16_t rssi_close = pInfo->squelch_close_RSSI_thresh; + uint16_t rssi_open = pInfo->squelch_open_rssi_thresh; + uint16_t rssi_close = pInfo->squelch_close_rssi_thresh; uint16_t noise_open = pInfo->squelch_open_noise_thresh; uint16_t noise_close = pInfo->squelch_close_noise_thresh; uint16_t glitch_open = pInfo->squelch_open_glitch_thresh; @@ -501,8 +501,8 @@ void RADIO_ConfigureSquelchAndOutputPower(VFO_Info_t *pInfo) if (glitch_close == glitch_open && glitch_close <= 253) glitch_close += 2; - pInfo->squelch_open_RSSI_thresh = (rssi_open > 255) ? 255 : rssi_open; - pInfo->squelch_close_RSSI_thresh = (rssi_close > 255) ? 255 : rssi_close; + pInfo->squelch_open_rssi_thresh = (rssi_open > 255) ? 255 : rssi_open; + pInfo->squelch_close_rssi_thresh = (rssi_close > 255) ? 255 : rssi_close; pInfo->squelch_open_noise_thresh = (noise_open > 127) ? 127 : noise_open; pInfo->squelch_close_noise_thresh = (noise_close > 127) ? 127 : noise_close; pInfo->squelch_open_glitch_thresh = (glitch_open > 255) ? 255 : glitch_open; @@ -530,15 +530,15 @@ void RADIO_ConfigureSquelchAndOutputPower(VFO_Info_t *pInfo) TX_power[0], TX_power[1], TX_power[2], - frequencyBandTable[Band].lower, - (frequencyBandTable[Band].lower + frequencyBandTable[Band].upper) / 2, - frequencyBandTable[Band].upper, + FREQ_BAND_TABLE[Band].lower, + (FREQ_BAND_TABLE[Band].lower + FREQ_BAND_TABLE[Band].upper) / 2, + FREQ_BAND_TABLE[Band].upper, pInfo->pTX->frequency); // ******************************* } -void RADIO_ApplyOffset(VFO_Info_t *pInfo) +void RADIO_ApplyOffset(vfo_info_t *pInfo) { uint32_t Frequency = pInfo->freq_config_rx.frequency; @@ -554,40 +554,40 @@ void RADIO_ApplyOffset(VFO_Info_t *pInfo) break; } - if (Frequency < frequencyBandTable[0].lower) - Frequency = frequencyBandTable[0].lower; + if (Frequency < FREQ_BAND_TABLE[0].lower) + Frequency = FREQ_BAND_TABLE[0].lower; else - if (Frequency > frequencyBandTable[ARRAY_SIZE(frequencyBandTable) - 1].upper) - Frequency = frequencyBandTable[ARRAY_SIZE(frequencyBandTable) - 1].upper; + if (Frequency > FREQ_BAND_TABLE[ARRAY_SIZE(FREQ_BAND_TABLE) - 1].upper) + Frequency = FREQ_BAND_TABLE[ARRAY_SIZE(FREQ_BAND_TABLE) - 1].upper; pInfo->freq_config_tx.frequency = Frequency; } static void RADIO_SelectCurrentVfo(void) { - gCurrentVfo = (g_eeprom.cross_vfo_rx_tx == CROSS_BAND_OFF) ? gRxVfo : &g_eeprom.VfoInfo[g_eeprom.tx_vfo]; + g_current_vfo = (g_eeprom.cross_vfo_rx_tx == CROSS_BAND_OFF) ? g_rx_vfo : &g_eeprom.vfo_info[g_eeprom.tx_vfo]; } void RADIO_SelectVfos(void) { - g_eeprom.tx_vfo = get_tx_VFO(); + g_eeprom.tx_vfo = get_TX_VFO(); g_eeprom.rx_vfo = (g_eeprom.cross_vfo_rx_tx == CROSS_BAND_OFF) ? g_eeprom.tx_vfo : (g_eeprom.tx_vfo + 1) & 1u; - gTxVfo = &g_eeprom.VfoInfo[g_eeprom.tx_vfo]; - gRxVfo = &g_eeprom.VfoInfo[g_eeprom.rx_vfo]; + g_tx_vfo = &g_eeprom.vfo_info[g_eeprom.tx_vfo]; + g_rx_vfo = &g_eeprom.vfo_info[g_eeprom.rx_vfo]; RADIO_SelectCurrentVfo(); } void RADIO_SetupRegisters(bool bSwitchToFunction0) { - BK4819_FilterBandwidth_t Bandwidth = gRxVfo->channel_bandwidth; + BK4819_filter_bandwidth_t Bandwidth = g_rx_vfo->channel_bandwidth; uint16_t InterruptMask; uint32_t Frequency; GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); - gEnableSpeaker = false; + g_enable_speaker = false; BK4819_ToggleGpioOut(BK4819_GPIO0_PIN28_GREEN, false); @@ -601,7 +601,7 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0) case BK4819_FILTER_BW_WIDE: case BK4819_FILTER_BW_NARROW: #ifdef ENABLE_AM_FIX -// BK4819_SetFilterBandwidth(Bandwidth, gRxVfo->am_mode && gSetting_AM_fix); +// BK4819_SetFilterBandwidth(Bandwidth, g_rx_vfo->am_mode && g_setting_am_fix); BK4819_SetFilterBandwidth(Bandwidth, true); #else BK4819_SetFilterBandwidth(Bandwidth, false); @@ -632,19 +632,19 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0) BK4819_WriteRegister(BK4819_REG_7D, 0xE940 | (g_eeprom.mic_sensitivity_tuning & 0x1f)); #ifdef ENABLE_NOAA - if (IS_NOT_NOAA_CHANNEL(gRxVfo->channel_save) || !gIsNoaaMode) - Frequency = gRxVfo->pRX->frequency; + if (IS_NOT_NOAA_CHANNEL(g_rx_vfo->channel_save) || !g_is_noaa_mode) + Frequency = g_rx_vfo->pRX->frequency; else - Frequency = NoaaFrequencyTable[gNoaaChannel]; + Frequency = NoaaFrequencyTable[g_noaa_channel]; #else - Frequency = gRxVfo->pRX->frequency; + Frequency = g_rx_vfo->pRX->frequency; #endif BK4819_SetFrequency(Frequency); BK4819_SetupSquelch( - gRxVfo->squelch_open_RSSI_thresh, gRxVfo->squelch_close_RSSI_thresh, - gRxVfo->squelch_open_noise_thresh, gRxVfo->squelch_close_noise_thresh, - gRxVfo->squelch_close_glitch_thresh, gRxVfo->squelch_open_glitch_thresh); + g_rx_vfo->squelch_open_rssi_thresh, g_rx_vfo->squelch_close_rssi_thresh, + g_rx_vfo->squelch_open_noise_thresh, g_rx_vfo->squelch_close_noise_thresh, + g_rx_vfo->squelch_close_glitch_thresh, g_rx_vfo->squelch_open_glitch_thresh); BK4819_PickRXFilterPathBasedOnFrequency(Frequency); @@ -657,17 +657,17 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0) InterruptMask = BK4819_REG_3F_SQUELCH_FOUND | BK4819_REG_3F_SQUELCH_LOST; #ifdef ENABLE_NOAA - if (IS_NOT_NOAA_CHANNEL(gRxVfo->channel_save)) + if (IS_NOT_NOAA_CHANNEL(g_rx_vfo->channel_save)) #endif { - if (gRxVfo->am_mode == 0) + if (g_rx_vfo->am_mode == 0) { // FM - uint8_t code_type = gSelectedcode_type; - uint8_t Code = gSelectedCode; - if (gCssScanMode == CSS_SCAN_MODE_OFF) + uint8_t code_type = g_selected_code_type; + uint8_t Code = g_selected_code; + if (g_css_scan_mode == CSS_SCAN_MODE_OFF) { - code_type = gRxVfo->pRX->code_type; - Code = gRxVfo->pRX->code; + code_type = g_rx_vfo->pRX->code_type; + Code = g_rx_vfo->pRX->code; } switch (code_type) @@ -686,12 +686,12 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0) break; case CODE_TYPE_CONTINUOUS_TONE: - BK4819_SetCTCSSFrequency(CTCSS_Options[Code]); + BK4819_SetCTCSSFrequency(CTCSS_OPTIONS[Code]); //#ifndef ENABLE_CTCSS_TAIL_PHASE_SHIFT BK4819_SetTailDetection(550); // QS's 55Hz tone method //#else - // BK4819_SetTailDetection(CTCSS_Options[Code]); + // BK4819_SetTailDetection(CTCSS_OPTIONS[Code]); //#endif InterruptMask = 0 @@ -715,8 +715,8 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0) break; } - if (gRxVfo->scrambling_type > 0 && gSetting_ScrambleEnable) - BK4819_EnableScramble(gRxVfo->scrambling_type - 1); + if (g_rx_vfo->scrambling_type > 0 && g_setting_scramble_enable) + BK4819_EnableScramble(g_rx_vfo->scrambling_type - 1); else BK4819_DisableScramble(); } @@ -736,15 +736,15 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0) #ifdef ENABLE_VOX #ifdef ENABLE_NOAA #ifdef ENABLE_FMRADIO - if (g_eeprom.vox_switch && !gFmRadioMode && IS_NOT_NOAA_CHANNEL(gCurrentVfo->channel_save) && gCurrentVfo->am_mode == 0) + if (g_eeprom.vox_switch && !g_fm_radio_mode && IS_NOT_NOAA_CHANNEL(g_current_vfo->channel_save) && g_current_vfo->am_mode == 0) #else - if (g_eeprom.vox_switch && IS_NOT_NOAA_CHANNEL(gCurrentVfo->channel_save) && gCurrentVfo->am_mode == 0) + if (g_eeprom.vox_switch && IS_NOT_NOAA_CHANNEL(g_current_vfo->channel_save) && g_current_vfo->am_mode == 0) #endif #else #ifdef ENABLE_FMRADIO - if (g_eeprom.vox_switch && !gFmRadioMode && gCurrentVfo->am_mode == 0) + if (g_eeprom.vox_switch && !g_fm_radio_mode && g_current_vfo->am_mode == 0) #else - if (g_eeprom.vox_switch && gCurrentVfo->am_mode == 0) + if (g_eeprom.vox_switch && g_current_vfo->am_mode == 0) #endif #endif { @@ -756,10 +756,10 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0) BK4819_DisableVox(); // RX expander - BK4819_SetCompander((gRxVfo->am_mode == 0 && gRxVfo->compander >= 2) ? gRxVfo->compander : 0); + BK4819_SetCompander((g_rx_vfo->am_mode == 0 && g_rx_vfo->compander >= 2) ? g_rx_vfo->compander : 0); #if 0 - if (!gRxVfo->DTMF_decoding_enable && !gSetting_KILLED) + if (!g_rx_vfo->dtmf_decoding_enable && !g_setting_killed) { BK4819_DisableDTMF(); } @@ -769,7 +769,7 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0) InterruptMask |= BK4819_REG_3F_DTMF_5TONE_FOUND; } #else - if (gCurrentFunction != FUNCTION_TRANSMIT) + if (g_current_function != FUNCTION_TRANSMIT) { BK4819_DisableDTMF(); BK4819_EnableDTMF(); @@ -795,9 +795,9 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0) { uint8_t ChanAB; - gUpdateStatus = true; + g_update_status = true; - if (g_eeprom.NOAA_auto_scan) + if (g_eeprom.noaa_auto_scan) { if (g_eeprom.dual_watch != DUAL_WATCH_OFF) { @@ -805,7 +805,7 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0) { if (IS_NOT_NOAA_CHANNEL(g_eeprom.screen_channel[1])) { - gIsNoaaMode = false; + g_is_noaa_mode = false; return; } ChanAB = 1; @@ -813,35 +813,35 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0) else ChanAB = 0; - if (!gIsNoaaMode) - gNoaaChannel = g_eeprom.VfoInfo[ChanAB].channel_save - NOAA_CHANNEL_FIRST; + if (!g_is_noaa_mode) + g_noaa_channel = g_eeprom.vfo_info[ChanAB].channel_save - NOAA_CHANNEL_FIRST; - gIsNoaaMode = true; + g_is_noaa_mode = true; return; } - if (gRxVfo->channel_save >= NOAA_CHANNEL_FIRST) + if (g_rx_vfo->channel_save >= NOAA_CHANNEL_FIRST) { - gIsNoaaMode = true; - gNoaaChannel = gRxVfo->channel_save - NOAA_CHANNEL_FIRST; - gNOAA_Countdown_10ms = NOAA_countdown_2_10ms; - gScheduleNOAA = false; + g_is_noaa_mode = true; + g_noaa_channel = g_rx_vfo->channel_save - NOAA_CHANNEL_FIRST; + g_noaa_count_down_10ms = noaa_count_down_2_10ms; + g_schedule_noaa = false; } else - gIsNoaaMode = false; + g_is_noaa_mode = false; } else - gIsNoaaMode = false; + g_is_noaa_mode = false; } #endif void RADIO_SetTxParameters(void) { - BK4819_FilterBandwidth_t Bandwidth = gCurrentVfo->channel_bandwidth; + BK4819_filter_bandwidth_t Bandwidth = g_current_vfo->channel_bandwidth; GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); - gEnableSpeaker = false; + g_enable_speaker = false; BK4819_ToggleGpioOut(BK4819_GPIO6_PIN2, false); @@ -855,7 +855,7 @@ void RADIO_SetTxParameters(void) case BK4819_FILTER_BW_WIDE: case BK4819_FILTER_BW_NARROW: #ifdef ENABLE_AM_FIX -// BK4819_SetFilterBandwidth(Bandwidth, gCurrentVfo->am_mode && gSetting_AM_fix); +// BK4819_SetFilterBandwidth(Bandwidth, g_current_vfo->am_mode && g_setting_am_fix); BK4819_SetFilterBandwidth(Bandwidth, true); #else BK4819_SetFilterBandwidth(Bandwidth, false); @@ -865,26 +865,26 @@ void RADIO_SetTxParameters(void) #pragma GCC diagnostic pop - BK4819_SetFrequency(gCurrentVfo->pTX->frequency); + BK4819_SetFrequency(g_current_vfo->pTX->frequency); // TX compressor - BK4819_SetCompander((gRxVfo->am_mode == 0 && (gRxVfo->compander == 1 || gRxVfo->compander >= 3)) ? gRxVfo->compander : 0); + BK4819_SetCompander((g_rx_vfo->am_mode == 0 && (g_rx_vfo->compander == 1 || g_rx_vfo->compander >= 3)) ? g_rx_vfo->compander : 0); BK4819_PrepareTransmit(); SYSTEM_DelayMs(10); - BK4819_PickRXFilterPathBasedOnFrequency(gCurrentVfo->pTX->frequency); + BK4819_PickRXFilterPathBasedOnFrequency(g_current_vfo->pTX->frequency); BK4819_ToggleGpioOut(BK4819_GPIO5_PIN1, true); SYSTEM_DelayMs(5); - BK4819_SetupPowerAmplifier(gCurrentVfo->txp_calculated_setting, gCurrentVfo->pTX->frequency); + BK4819_SetupPowerAmplifier(g_current_vfo->txp_calculated_setting, g_current_vfo->pTX->frequency); SYSTEM_DelayMs(10); - switch (gCurrentVfo->pTX->code_type) + switch (g_current_vfo->pTX->code_type) { default: case CODE_TYPE_OFF: @@ -892,104 +892,104 @@ void RADIO_SetTxParameters(void) break; case CODE_TYPE_CONTINUOUS_TONE: - BK4819_SetCTCSSFrequency(CTCSS_Options[gCurrentVfo->pTX->code]); + BK4819_SetCTCSSFrequency(CTCSS_OPTIONS[g_current_vfo->pTX->code]); break; case CODE_TYPE_DIGITAL: case CODE_TYPE_REVERSE_DIGITAL: - BK4819_SetCDCSSCodeWord(DCS_GetGolayCodeWord(gCurrentVfo->pTX->code_type, gCurrentVfo->pTX->code)); + BK4819_SetCDCSSCodeWord(DCS_GetGolayCodeWord(g_current_vfo->pTX->code_type, g_current_vfo->pTX->code)); break; } } -void RADIO_SetVfoState(VfoState_t State) +void RADIO_Setg_vfo_state(vfo_state_t State) { if (State == VFO_STATE_NORMAL) { - VfoState[0] = VFO_STATE_NORMAL; - VfoState[1] = VFO_STATE_NORMAL; + g_vfo_state[0] = VFO_STATE_NORMAL; + g_vfo_state[1] = VFO_STATE_NORMAL; #ifdef ENABLE_FMRADIO - gFM_ResumeCountdown_500ms = 0; + g_fm_resume_count_down_500ms = 0; #endif } else { if (State == VFO_STATE_VOLTAGE_HIGH) { - VfoState[0] = VFO_STATE_VOLTAGE_HIGH; - VfoState[1] = VFO_STATE_TX_DISABLE; + g_vfo_state[0] = VFO_STATE_VOLTAGE_HIGH; + g_vfo_state[1] = VFO_STATE_TX_DISABLE; } else { // 1of11 const unsigned int vfo = (g_eeprom.cross_vfo_rx_tx == CROSS_BAND_OFF) ? g_eeprom.rx_vfo : g_eeprom.tx_vfo; - VfoState[vfo] = State; + g_vfo_state[vfo] = State; } #ifdef ENABLE_FMRADIO - gFM_ResumeCountdown_500ms = fm_resume_countdown_500ms; + g_fm_resume_count_down_500ms = fm_resume_countdown_500ms; #endif } - gUpdateDisplay = true; + g_update_display = true; } void RADIO_PrepareTX(void) { - VfoState_t State = VFO_STATE_NORMAL; // default to OK to TX + vfo_state_t State = VFO_STATE_NORMAL; // default to OK to TX if (g_eeprom.dual_watch != DUAL_WATCH_OFF) { // dual-RX is enabled - gDualWatchCountdown_10ms = dual_watch_count_after_tx_10ms; - gScheduleDualWatch = false; + g_dual_watch_count_down_10ms = dual_watch_count_after_tx_10ms; + g_schedule_dual_watch = false; #if 0 - if (gRxVfoIsActive) + if (g_rx_vfo_is_active) { // use the TX vfo g_eeprom.rx_vfo = g_eeprom.tx_vfo; - gRxVfo = &g_eeprom.VfoInfo[g_eeprom.tx_vfo]; - gRxVfoIsActive = false; + g_rx_vfo = &g_eeprom.vfo_info[g_eeprom.tx_vfo]; + g_rx_vfo_is_active = false; } - gCurrentVfo = gRxVfo; + g_current_vfo = g_rx_vfo; #else - if (!gRxVfoIsActive) + if (!g_rx_vfo_is_active) { // use the current RX vfo g_eeprom.rx_vfo = g_eeprom.tx_vfo; - gRxVfo = &g_eeprom.VfoInfo[g_eeprom.tx_vfo]; - gRxVfoIsActive = true; + g_rx_vfo = &g_eeprom.vfo_info[g_eeprom.tx_vfo]; + g_rx_vfo_is_active = true; } - gCurrentVfo = gRxVfo; + g_current_vfo = g_rx_vfo; #endif // let the user see that DW is not active '><' symbol - gDualWatchActive = false; - gUpdateStatus = true; + g_dual_watch_active = false; + g_update_status = true; } RADIO_SelectCurrentVfo(); #ifndef ENABLE_TX_WHEN_AM - if (gCurrentVfo->am_mode) + if (g_current_vfo->am_mode) { // not allowed to TX if in AM mode State = VFO_STATE_TX_DISABLE; } else #endif - if (!gSetting_TX_EN || gSerialConfigCountDown_500ms > 0) + if (!g_Setting_tx_enable || g_serial_config_count_down_500ms > 0) { // TX is disabled or config upload/download in progress State = VFO_STATE_TX_DISABLE; } else - if (TX_freq_check(gCurrentVfo->pTX->frequency) == 0) + if (TX_freq_check(g_current_vfo->pTX->frequency) == 0) { // TX frequency is allowed - if (gCurrentVfo->busy_channel_lock && gCurrentFunction == FUNCTION_RECEIVE) + if (g_current_vfo->busy_channel_lock && g_current_function == FUNCTION_RECEIVE) State = VFO_STATE_BUSY; // busy RX'ing a station else - if (gBatteryDisplayLevel == 0) + if (g_battery_display_level == 0) State = VFO_STATE_BAT_LOW; // charge your battery ! else - if (gBatteryDisplayLevel >= 6) + if (g_battery_display_level >= 6) State = VFO_STATE_VOLTAGE_HIGH; // over voltage (no doubt to protect the PA) .. this is being a pain } else @@ -998,13 +998,13 @@ void RADIO_PrepareTX(void) if (State != VFO_STATE_NORMAL) { // TX not allowed - RADIO_SetVfoState(State); + RADIO_Setg_vfo_state(State); #if defined(ENABLE_ALARM) || defined(ENABLE_TX1750) - gAlarmState = ALARM_STATE_OFF; + g_alarm_state = ALARM_STATE_OFF; #endif - gDTMF_ReplyState = DTMF_REPLY_NONE; + g_dtmf_reply_state = DTMF_REPLY_NONE; AUDIO_PlayBeep(BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL); return; @@ -1012,47 +1012,47 @@ void RADIO_PrepareTX(void) // TX is allowed - if (gDTMF_ReplyState == DTMF_REPLY_ANI) + if (g_dtmf_reply_state == DTMF_REPLY_ANI) { - if (gDTMF_CallMode == DTMF_CALL_MODE_DTMF) + if (g_dtmf_call_mode == DTMF_CALL_MODE_DTMF) { - gDTMF_IsTx = true; - gDTMF_CallState = DTMF_CALL_STATE_NONE; - gDTMF_TxStopCountdown_500ms = DTMF_txstop_countdown_500ms; + g_dtmf_is_tx = true; + g_dtmf_call_state = DTMF_CALL_STATE_NONE; + g_dtmf_tx_stop_count_down_500ms = dtmf_txstop_countdown_500ms; } else { - gDTMF_CallState = DTMF_CALL_STATE_CALL_OUT; - gDTMF_IsTx = false; + g_dtmf_call_state = DTMF_CALL_STATE_CALL_OUT; + g_dtmf_is_tx = false; } } FUNCTION_Select(FUNCTION_TRANSMIT); - gTxTimerCountdown_500ms = 0; // no timeout + g_tx_timer_count_down_500ms = 0; // no timeout #if defined(ENABLE_ALARM) || defined(ENABLE_TX1750) - if (gAlarmState == ALARM_STATE_OFF) + if (g_alarm_state == ALARM_STATE_OFF) #endif { if (g_eeprom.tx_timeout_timer == 0) - gTxTimerCountdown_500ms = 60; // 30 sec + g_tx_timer_count_down_500ms = 60; // 30 sec else - if (g_eeprom.tx_timeout_timer < (ARRAY_SIZE(gSubMenu_TOT) - 1)) - gTxTimerCountdown_500ms = 120 * g_eeprom.tx_timeout_timer; // minutes + if (g_eeprom.tx_timeout_timer < (ARRAY_SIZE(g_sub_menu_TOT) - 1)) + g_tx_timer_count_down_500ms = 120 * g_eeprom.tx_timeout_timer; // minutes else - gTxTimerCountdown_500ms = 120 * 15; // 15 minutes + g_tx_timer_count_down_500ms = 120 * 15; // 15 minutes } - gTxTimeoutReached = false; + g_tx_timeout_reached = false; - gFlagEndTransmission = false; - gRTTECountdown = 0; - gDTMF_ReplyState = DTMF_REPLY_NONE; + g_flag_end_tx = false; + g_rtte_count_down = 0; + g_dtmf_reply_state = DTMF_REPLY_NONE; } void RADIO_EnableCxCSS(void) { - switch (gCurrentVfo->pTX->code_type) + switch (g_current_vfo->pTX->code_type) { default: case CODE_TYPE_OFF: @@ -1089,31 +1089,31 @@ void RADIO_SendEndOfTransmission(void) if (g_eeprom.roger_mode == ROGER_MODE_MDC) BK4819_PlayRogerMDC(); - if (gCurrentVfo->DTMF_ptt_id_tx_mode == PTT_ID_APOLLO) - BK4819_PlaySingleTone(2475, 250, 28, g_eeprom.DTMF_side_tone); + if (g_current_vfo->dtmf_ptt_id_tx_mode == PTT_ID_APOLLO) + BK4819_PlaySingleTone(2475, 250, 28, g_eeprom.dtmf_side_tone); - if (gDTMF_CallState == DTMF_CALL_STATE_NONE && - (gCurrentVfo->DTMF_ptt_id_tx_mode == PTT_ID_TX_DOWN || gCurrentVfo->DTMF_ptt_id_tx_mode == PTT_ID_BOTH)) + if (g_dtmf_call_state == DTMF_CALL_STATE_NONE && + (g_current_vfo->dtmf_ptt_id_tx_mode == PTT_ID_TX_DOWN || g_current_vfo->dtmf_ptt_id_tx_mode == PTT_ID_BOTH)) { // end-of-tx - if (g_eeprom.DTMF_side_tone) + if (g_eeprom.dtmf_side_tone) { GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); - gEnableSpeaker = true; + g_enable_speaker = true; SYSTEM_DelayMs(60); } - BK4819_EnterDTMF_TX(g_eeprom.DTMF_side_tone); + BK4819_EnterDTMF_TX(g_eeprom.dtmf_side_tone); BK4819_PlayDTMFString( - g_eeprom.DTMF_down_code, + g_eeprom.dtmf_down_code, 0, - g_eeprom.DTMF_first_code_persist_time, - g_eeprom.DTMF_hash_code_persist_time, - g_eeprom.DTMF_code_persist_time, - g_eeprom.DTMF_code_interval_time); + g_eeprom.dtmf_first_code_persist_time, + g_eeprom.dtmf_hash_code_persist_time, + g_eeprom.dtmf_code_persist_time, + g_eeprom.dtmf_code_interval_time); GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); - gEnableSpeaker = false; + g_enable_speaker = false; } BK4819_ExitDTMF_TX(true); diff --git a/radio.h b/radio.h index 91c4b0a..874e2c6 100644 --- a/radio.h +++ b/radio.h @@ -40,16 +40,16 @@ enum { BANDWIDTH_NARROW }; -enum PTT_ID_t { +enum ptt_id_e { PTT_ID_OFF = 0, // OFF PTT_ID_TX_UP, // BEGIN OF TX PTT_ID_TX_DOWN, // END OF TX PTT_ID_BOTH, // BOTH PTT_ID_APOLLO // Apolo quindar tones }; -typedef enum PTT_ID_t PTT_ID_t; +typedef enum ptt_id_e ptt_id_t; -enum VfoState_t +enum vfo_state_e { VFO_STATE_NORMAL = 0, VFO_STATE_BUSY, @@ -59,7 +59,7 @@ enum VfoState_t VFO_STATE_ALARM, VFO_STATE_VOLTAGE_HIGH }; -typedef enum VfoState_t VfoState_t; +typedef enum vfo_state_e vfo_state_t; typedef struct { @@ -67,14 +67,14 @@ typedef struct dcs_code_type_t code_type; uint8_t code; uint8_t padding[2]; -} FREQ_Config_t; +} freq_config_t; -typedef struct VFO_Info_t +typedef struct vfo_info_t { - FREQ_Config_t freq_config_rx; - FREQ_Config_t freq_config_tx; - FREQ_Config_t *pRX; - FREQ_Config_t *pTX; + freq_config_t freq_config_rx; + freq_config_t freq_config_tx; + freq_config_t *pRX; + freq_config_t *pTX; uint32_t tx_offset_freq; uint16_t step_freq; @@ -83,10 +83,10 @@ typedef struct VFO_Info_t uint8_t tx_offset_freq_dir; - uint8_t squelch_open_RSSI_thresh; + uint8_t squelch_open_rssi_thresh; uint8_t squelch_open_noise_thresh; uint8_t squelch_close_glitch_thresh; - uint8_t squelch_close_RSSI_thresh; + uint8_t squelch_close_rssi_thresh; uint8_t squelch_close_noise_thresh; uint8_t squelch_open_glitch_thresh; @@ -103,8 +103,8 @@ typedef struct VFO_Info_t uint8_t band; - uint8_t DTMF_decoding_enable; - PTT_ID_t DTMF_ptt_id_tx_mode; + uint8_t dtmf_decoding_enable; + ptt_id_t dtmf_ptt_id_tx_mode; uint8_t busy_channel_lock; @@ -113,26 +113,26 @@ typedef struct VFO_Info_t uint8_t compander; char name[16]; -} VFO_Info_t; +} vfo_info_t; -extern VFO_Info_t *gTxVfo; -extern VFO_Info_t *gRxVfo; -extern VFO_Info_t *gCurrentVfo; +extern vfo_info_t *g_tx_vfo; +extern vfo_info_t *g_rx_vfo; +extern vfo_info_t *g_current_vfo; -extern dcs_code_type_t gSelectedcode_type; -extern dcs_code_type_t gCurrentcode_type; -extern uint8_t gSelectedCode; +extern dcs_code_type_t g_selected_code_type; +extern dcs_code_type_t g_current_code_type; +extern uint8_t g_selected_code; -extern step_setting_t gStepSetting; +extern step_setting_t g_step_setting; -extern VfoState_t VfoState[2]; +extern vfo_state_t g_vfo_state[2]; bool RADIO_CheckValidChannel(uint16_t ChNum, bool bCheckScanList, uint8_t RadioNum); uint8_t RADIO_FindNextChannel(uint8_t ChNum, int8_t Direction, bool bCheckScanList, uint8_t RadioNum); -void RADIO_InitInfo(VFO_Info_t *pInfo, const uint8_t ChannelSave, const uint32_t Frequency); +void RADIO_InitInfo(vfo_info_t *pInfo, const uint8_t ChannelSave, const uint32_t Frequency); void RADIO_ConfigureChannel(const unsigned int VFO, const unsigned int configure); -void RADIO_ConfigureSquelchAndOutputPower(VFO_Info_t *pInfo); -void RADIO_ApplyOffset(VFO_Info_t *pInfo); +void RADIO_ConfigureSquelchAndOutputPower(vfo_info_t *pInfo); +void RADIO_ApplyOffset(vfo_info_t *pInfo); void RADIO_SelectVfos(void); void RADIO_SetupRegisters(bool bSwitchToFunction0); #ifdef ENABLE_NOAA @@ -140,7 +140,7 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0); #endif void RADIO_SetTxParameters(void); -void RADIO_SetVfoState(VfoState_t State); +void RADIO_Setg_vfo_state(vfo_state_t State); void RADIO_PrepareTX(void); void RADIO_EnableCxCSS(void); void RADIO_PrepareCssTX(void); diff --git a/scheduler.c b/scheduler.c index 1a6f3cc..2ff29e8 100644 --- a/scheduler.c +++ b/scheduler.c @@ -41,73 +41,73 @@ flag = true; \ } while (0) -static volatile uint32_t gGlobalSysTickCounter; +static volatile uint32_t g_global_sys_tick_counter; void SystickHandler(void); // we come here every 10ms void SystickHandler(void) { - gGlobalSysTickCounter++; + g_global_sys_tick_counter++; - gNextTimeslice = true; + g_next_time_slice = true; - if ((gGlobalSysTickCounter % 50) == 0) + if ((g_global_sys_tick_counter % 50) == 0) { // 500ms tick - gNextTimeslice_500ms = true; + g_next_time_slice_500ms = true; - DECREMENT_AND_TRIGGER(gTxTimerCountdown_500ms, gTxTimeoutReached); - DECREMENT(gSerialConfigCountDown_500ms); + DECREMENT_AND_TRIGGER(g_tx_timer_count_down_500ms, g_tx_timeout_reached); + DECREMENT(g_serial_config_count_down_500ms); } - if ((gGlobalSysTickCounter & 3) == 0) - gNextTimeslice40ms = true; + if ((g_global_sys_tick_counter & 3) == 0) + g_next_time_slice_40ms = true; #ifdef ENABLE_NOAA - DECREMENT(gNOAACountdown_10ms); + DECREMENT(g_noaa_count_down_10ms); #endif - DECREMENT(gFoundCDCSSCountdown_10ms); + DECREMENT(g_found_CDCSS_count_down_10ms); - DECREMENT(gFoundCTCSSCountdown_10ms); + DECREMENT(g_found_CTCSS_count_down_10ms); - if (gCurrentFunction == FUNCTION_FOREGROUND) - DECREMENT_AND_TRIGGER(gBatterySaveCountdown_10ms, gSchedulePowerSave); + if (g_current_function == FUNCTION_FOREGROUND) + DECREMENT_AND_TRIGGER(g_battery_save_count_down_10ms, g_schedule_power_save); - if (gCurrentFunction == FUNCTION_POWER_SAVE) - DECREMENT_AND_TRIGGER(gPowerSave_10ms, gPowerSaveCountdownExpired); + if (g_current_function == FUNCTION_POWER_SAVE) + DECREMENT_AND_TRIGGER(g_power_save_10ms, g_power_save_count_down_expired); - if (gScanStateDir == SCAN_OFF && gCssScanMode == CSS_SCAN_MODE_OFF && g_eeprom.dual_watch != DUAL_WATCH_OFF) - if (gCurrentFunction != FUNCTION_MONITOR && gCurrentFunction != FUNCTION_TRANSMIT && gCurrentFunction != FUNCTION_RECEIVE) - DECREMENT_AND_TRIGGER(gDualWatchCountdown_10ms, gScheduleDualWatch); + if (g_scan_state_dir == SCAN_OFF && g_css_scan_mode == CSS_SCAN_MODE_OFF && g_eeprom.dual_watch != DUAL_WATCH_OFF) + if (g_current_function != FUNCTION_MONITOR && g_current_function != FUNCTION_TRANSMIT && g_current_function != FUNCTION_RECEIVE) + DECREMENT_AND_TRIGGER(g_dual_watch_count_down_10ms, g_schedule_dual_watch); #ifdef ENABLE_NOAA - if (gScanStateDir == SCAN_OFF && gCssScanMode == CSS_SCAN_MODE_OFF && g_eeprom.dual_watch == DUAL_WATCH_OFF) - if (gIsNoaaMode && gCurrentFunction != FUNCTION_MONITOR && gCurrentFunction != FUNCTION_TRANSMIT) - if (gCurrentFunction != FUNCTION_RECEIVE) - DECREMENT_AND_TRIGGER(gNOAA_Countdown_10ms, gScheduleNOAA); + if (g_scan_state_dir == SCAN_OFF && g_css_scan_mode == CSS_SCAN_MODE_OFF && g_eeprom.dual_watch == DUAL_WATCH_OFF) + if (g_is_noaa_mode && g_current_function != FUNCTION_MONITOR && g_current_function != FUNCTION_TRANSMIT) + if (g_current_function != FUNCTION_RECEIVE) + DECREMENT_AND_TRIGGER(g_noaa_count_down_10ms, g_schedule_noaa); #endif - if (gScanStateDir != SCAN_OFF || gCssScanMode == CSS_SCAN_MODE_SCANNING) - if (gCurrentFunction != FUNCTION_MONITOR && gCurrentFunction != FUNCTION_TRANSMIT) - DECREMENT_AND_TRIGGER(gScanPauseDelayIn_10ms, gScheduleScanListen); + if (g_scan_state_dir != SCAN_OFF || g_css_scan_mode == CSS_SCAN_MODE_SCANNING) + if (g_current_function != FUNCTION_MONITOR && g_current_function != FUNCTION_TRANSMIT) + DECREMENT_AND_TRIGGER(g_scan_pause_delay_in_10ms, g_schedule_scan_listen); - DECREMENT_AND_TRIGGER(gTailNoteEliminationCountdown_10ms, gFlagTailNoteEliminationComplete); + DECREMENT_AND_TRIGGER(g_tail_tone_elimination_count_down_10ms, g_flag_tail_tone_elimination_complete); #ifdef ENABLE_VOICE DECREMENT_AND_TRIGGER(g_count_down_to_play_next_voice_10ms, g_flag_play_queued_voice); #endif #ifdef ENABLE_FMRADIO - if (gFM_ScanState != FM_SCAN_OFF && gCurrentFunction != FUNCTION_MONITOR) - if (gCurrentFunction != FUNCTION_TRANSMIT && gCurrentFunction != FUNCTION_RECEIVE) - DECREMENT_AND_TRIGGER(gFmPlayCountdown_10ms, gScheduleFM); + if (g_fm_scan_state != FM_SCAN_OFF && g_current_function != FUNCTION_MONITOR) + if (g_current_function != FUNCTION_TRANSMIT && g_current_function != FUNCTION_RECEIVE) + DECREMENT_AND_TRIGGER(g_fm_play_count_down_10ms, g_schedule_fm); #endif #ifdef ENABLE_VOX - DECREMENT(gVoxStopCountdown_10ms); + DECREMENT(g_vox_stop_count_down_10ms); #endif - DECREMENT(boot_counter_10ms); + DECREMENT(g_boot_counter_10ms); } diff --git a/settings.c b/settings.c index 5bb200a..857ee97 100644 --- a/settings.c +++ b/settings.c @@ -24,7 +24,7 @@ #include "misc.h" #include "settings.h" -EEPROM_Config_t g_eeprom; +eeprom_config_t g_eeprom; #ifdef ENABLE_FMRADIO void SETTINGS_SaveFM(void) @@ -47,7 +47,7 @@ EEPROM_Config_t g_eeprom; EEPROM_WriteBuffer(0x0E88, &state); for (i = 0; i < 5; i++) - EEPROM_WriteBuffer(0x0E40 + (i * 8), &gFM_Channels[i * 4]); + EEPROM_WriteBuffer(0x0E40 + (i * 8), &g_fm_channels[i * 4]); } #endif @@ -81,7 +81,7 @@ void SETTINGS_SaveSettings(void) State[1] = g_eeprom.squelch_level; State[2] = g_eeprom.tx_timeout_timer; #ifdef ENABLE_NOAA - State[3] = g_eeprom.NOAA_auto_scan; + State[3] = g_eeprom.noaa_auto_scan; #else State[3] = false; #endif @@ -146,19 +146,19 @@ void SETTINGS_SaveSettings(void) State[3] = g_eeprom.tx_vfo; EEPROM_WriteBuffer(0x0EA8, State); - State[0] = g_eeprom.DTMF_side_tone; - State[1] = g_eeprom.DTMF_separate_code; - State[2] = g_eeprom.DTMF_group_call_code; - State[3] = g_eeprom.DTMF_decode_response; - State[4] = g_eeprom.DTMF_auto_reset_time; - State[5] = g_eeprom.DTMF_preload_time / 10U; - State[6] = g_eeprom.DTMF_first_code_persist_time / 10U; - State[7] = g_eeprom.DTMF_hash_code_persist_time / 10U; + State[0] = g_eeprom.dtmf_side_tone; + State[1] = g_eeprom.dtmf_separate_code; + State[2] = g_eeprom.dtmf_group_call_code; + State[3] = g_eeprom.dtmf_decode_response; + State[4] = g_eeprom.dtmf_auto_reset_time; + State[5] = g_eeprom.dtmf_preload_time / 10U; + State[6] = g_eeprom.dtmf_first_code_persist_time / 10U; + State[7] = g_eeprom.dtmf_hash_code_persist_time / 10U; EEPROM_WriteBuffer(0x0ED0, State); memset(State, 0xFF, sizeof(State)); - State[0] = g_eeprom.DTMF_code_persist_time / 10U; - State[1] = g_eeprom.DTMF_code_interval_time / 10U; + State[0] = g_eeprom.dtmf_code_persist_time / 10U; + State[1] = g_eeprom.dtmf_code_interval_time / 10U; State[2] = g_eeprom.permit_remote_kill; EEPROM_WriteBuffer(0x0ED8, State); @@ -173,28 +173,28 @@ void SETTINGS_SaveSettings(void) EEPROM_WriteBuffer(0x0F18, State); memset(State, 0xFF, sizeof(State)); - State[0] = gSetting_F_LOCK; - State[1] = gSetting_350TX; - State[2] = gSetting_KILLED; - State[3] = gSetting_200TX; - State[4] = gSetting_500TX; - State[5] = gSetting_350EN; - State[6] = gSetting_ScrambleEnable; - if (!gSetting_TX_EN) State[7] &= ~(1u << 0); - if (!gSetting_live_DTMF_decoder) State[7] &= ~(1u << 1); - State[7] = (State[7] & ~(3u << 2)) | ((gSetting_battery_text & 3u) << 2); + State[0] = g_setting_f_lock; + State[1] = g_setting_350_tx_enable; + State[2] = g_setting_killed; + State[3] = g_setting_200_tx_enable; + State[4] = g_setting_500_tx_enable; + State[5] = g_setting_350_enable; + State[6] = g_setting_scramble_enable; + if (!g_Setting_tx_enable) State[7] &= ~(1u << 0); + if (!g_setting_live_dtmf_decoder) State[7] &= ~(1u << 1); + State[7] = (State[7] & ~(3u << 2)) | ((g_setting_battery_text & 3u) << 2); #ifdef ENABLE_AUDIO_BAR - if (!gSetting_mic_bar) State[7] &= ~(1u << 4); + if (!g_setting_mic_bar) State[7] &= ~(1u << 4); #endif #ifdef ENABLE_AM_FIX - if (!gSetting_AM_fix) State[7] &= ~(1u << 5); + if (!g_setting_am_fix) State[7] &= ~(1u << 5); #endif - State[7] = (State[7] & ~(3u << 6)) | ((gSetting_backlight_on_tx_rx & 3u) << 6); + State[7] = (State[7] & ~(3u << 6)) | ((g_setting_backlight_on_tx_rx & 3u) << 6); EEPROM_WriteBuffer(0x0F40, State); } -void SETTINGS_SaveChannel(uint8_t Channel, uint8_t VFO, const VFO_Info_t *pVFO, uint8_t Mode) +void SETTINGS_SaveChannel(uint8_t Channel, uint8_t VFO, const vfo_info_t *pVFO, uint8_t Mode) { #ifdef ENABLE_NOAA if (IS_NOT_NOAA_CHANNEL(Channel)) @@ -227,7 +227,7 @@ void SETTINGS_SaveChannel(uint8_t Channel, uint8_t VFO, const VFO_Info_t *pVFO, | (pVFO->output_power << 2) | (pVFO->channel_bandwidth << 1) | (pVFO->frequency_reverse << 0); - State[5] = ((pVFO->DTMF_ptt_id_tx_mode & 7u) << 1) | ((pVFO->DTMF_decoding_enable & 1u) << 0); + State[5] = ((pVFO->dtmf_ptt_id_tx_mode & 7u) << 1) | ((pVFO->dtmf_decoding_enable & 1u) << 0); State[6] = pVFO->step_setting; State[7] = pVFO->scrambling_type; EEPROM_WriteBuffer(OffsetVFO + 8, State); @@ -259,7 +259,7 @@ void SETTINGS_SaveChannel(uint8_t Channel, uint8_t VFO, const VFO_Info_t *pVFO, } } -void SETTINGS_UpdateChannel(uint8_t Channel, const VFO_Info_t *pVFO, bool keep) +void SETTINGS_UpdateChannel(uint8_t Channel, const vfo_info_t *pVFO, bool keep) { #ifdef ENABLE_NOAA if (IS_NOT_NOAA_CHANNEL(Channel)) @@ -284,7 +284,7 @@ void SETTINGS_UpdateChannel(uint8_t Channel, const VFO_Info_t *pVFO, bool keep) EEPROM_WriteBuffer(Offset, State); - gUSER_ChannelAttributes[Channel] = Attributes; + g_user_channel_attributes[Channel] = Attributes; // #ifndef ENABLE_KEEP_MEM_NAME if (Channel <= USER_CHANNEL_LAST) diff --git a/settings.h b/settings.h index 6ee168c..03e1efb 100644 --- a/settings.h +++ b/settings.h @@ -94,7 +94,7 @@ enum { #endif enum alarm_mode_e { - alarm_mode_SITE = 0, + ALARM_MODE_SITE = 0, ALARM_MODE_TONE }; typedef enum alarm_mode_e alarm_mode_t; @@ -179,11 +179,11 @@ typedef struct { uint8_t mic_sensitivity; uint8_t mic_sensitivity_tuning; uint8_t chan_1_call; - char ani_DTMF_id[8]; + char ani_dtmf_id[8]; char kill_code[8]; char revive_code[8]; - char DTMF_up_code[16]; - char DTMF_down_code[16]; + char dtmf_up_code[16]; + char dtmf_down_code[16]; uint8_t field57_0x6c; uint8_t field58_0x6d; @@ -191,24 +191,24 @@ typedef struct { uint8_t field60_0x7e; uint8_t field61_0x7f; - char DTMF_separate_code; - char DTMF_group_call_code; - uint8_t DTMF_decode_response; - uint8_t DTMF_auto_reset_time; - uint16_t DTMF_preload_time; - uint16_t DTMF_first_code_persist_time; - uint16_t DTMF_hash_code_persist_time; - uint16_t DTMF_code_persist_time; - uint16_t DTMF_code_interval_time; - bool DTMF_side_tone; + char dtmf_separate_code; + char dtmf_group_call_code; + uint8_t dtmf_decode_response; + uint8_t dtmf_auto_reset_time; + uint16_t dtmf_preload_time; + uint16_t dtmf_first_code_persist_time; + uint16_t dtmf_hash_code_persist_time; + uint16_t dtmf_code_persist_time; + uint16_t dtmf_code_interval_time; + bool dtmf_side_tone; bool permit_remote_kill; int16_t BK4819_xtal_freq_low; #ifdef ENABLE_NOAA - bool NOAA_auto_scan; + bool noaa_auto_scan; #endif uint8_t volume_gain; uint8_t dac_gain; - VFO_Info_t VfoInfo[2]; + vfo_info_t vfo_info[2]; uint32_t power_on_password; uint16_t vox1_threshold; uint16_t vox0_threshold; @@ -218,16 +218,16 @@ typedef struct { uint8_t field79_0x97; uint8_t _pad[1]; -} EEPROM_Config_t; +} eeprom_config_t; -extern EEPROM_Config_t g_eeprom; +extern eeprom_config_t g_eeprom; #ifdef ENABLE_FMRADIO void SETTINGS_SaveFM(void); #endif void SETTINGS_SaveVfoIndices(void); void SETTINGS_SaveSettings(void); -void SETTINGS_SaveChannel(uint8_t Channel, uint8_t VFO, const VFO_Info_t *pVFO, uint8_t Mode); -void SETTINGS_UpdateChannel(uint8_t Channel, const VFO_Info_t *pVFO, bool keep); +void SETTINGS_SaveChannel(uint8_t Channel, uint8_t VFO, const vfo_info_t *pVFO, uint8_t Mode); +void SETTINGS_UpdateChannel(uint8_t Channel, const vfo_info_t *pVFO, bool keep); #endif diff --git a/ui/aircopy.c b/ui/aircopy.c index 4dfa6d9..1c43242 100644 --- a/ui/aircopy.c +++ b/ui/aircopy.c @@ -31,32 +31,32 @@ void UI_DisplayAircopy(void) { char String[16]; - memset(gFrameBuffer, 0, sizeof(gFrameBuffer)); + memset(g_frame_buffer, 0, sizeof(g_frame_buffer)); - if (gAircopyState == AIRCOPY_READY) + if (g_aircopy_state == AIRCOPY_READY) strcpy(String, "AIR COPY(RDY)"); else - if (gAircopyState == AIRCOPY_TRANSFER) + if (g_aircopy_state == AIRCOPY_TRANSFER) strcpy(String, "AIR COPY"); else strcpy(String, "AIR COPY(CMP)"); UI_PrintString(String, 2, 127, 0, 8); - if (gInputBoxIndex == 0) + if (g_input_box_index == 0) { - NUMBER_ToDigits(gRxVfo->freq_config_rx.frequency, String); + NUMBER_ToDigits(g_rx_vfo->freq_config_rx.frequency, String); UI_DisplayFrequency(String, 16, 2, 0, 0); - UI_DisplaySmallDigits(2, String + 6, 97, 3, true); + UI_Displaysmall_digits(2, String + 6, 97, 3, true); } else - UI_DisplayFrequency(gInputBox, 16, 2, 1, 0); + UI_DisplayFrequency(g_input_box, 16, 2, 1, 0); memset(String, 0, sizeof(String)); - if (gAirCopyIsSendMode == 0) - sprintf(String, "RCV:%u E:%u", gAirCopyBlockNumber, gErrorsDuringAirCopy); + if (g_air_copy_is_send_mode == 0) + sprintf(String, "RCV:%u E:%u", g_air_copy_block_number, g_errors_during_air_copyy); else - if (gAirCopyIsSendMode == 1) - sprintf(String, "SND:%u", gAirCopyBlockNumber); + if (g_air_copy_is_send_mode == 1) + sprintf(String, "SND:%u", g_air_copy_block_number); UI_PrintString(String, 2, 127, 4, 8); ST7565_BlitFullScreen(); diff --git a/ui/fmradio.c b/ui/fmradio.c index 39468c6..df8e5f5 100644 --- a/ui/fmradio.c +++ b/ui/fmradio.c @@ -33,31 +33,31 @@ void UI_DisplayFM(void) unsigned int i; char String[16]; - memset(gFrameBuffer, 0, sizeof(gFrameBuffer)); + memset(g_frame_buffer, 0, sizeof(g_frame_buffer)); memset(String, 0, sizeof(String)); strcpy(String, "FM"); UI_PrintString(String, 0, 127, 0, 12); memset(String, 0, sizeof(String)); - if (gAskToSave) + if (g_ask_to_save) { strcpy(String, "SAVE?"); } else - if (gAskToDelete) + if (g_ask_to_delete) { strcpy(String, "DEL?"); } else { - if (gFM_ScanState == FM_SCAN_OFF) + if (g_fm_scan_state == FM_SCAN_OFF) { if (!g_eeprom.fm_is_channel_mode) { for (i = 0; i < 20; i++) { - if (g_eeprom.fm_frequency_playing == gFM_Channels[i]) + if (g_eeprom.fm_frequency_playing == g_fm_channels[i]) { sprintf(String, "VFO(CH%02u)", i + 1); break; @@ -72,29 +72,29 @@ void UI_DisplayFM(void) } else { - if (!gFM_AutoScan) + if (!g_fm_auto_scan) strcpy(String, "M-SCAN"); else - sprintf(String, "A-SCAN(%u)", gFM_ChannelPosition + 1); + sprintf(String, "A-SCAN(%u)", g_fm_channel_position + 1); } } UI_PrintString(String, 0, 127, 2, 10); memset(String, 0, sizeof(String)); - if (gAskToSave || (g_eeprom.fm_is_channel_mode && gInputBoxIndex > 0)) + if (g_ask_to_save || (g_eeprom.fm_is_channel_mode && g_input_box_index > 0)) { - UI_GenerateChannelString(String, gFM_ChannelPosition); + UI_GenerateChannelString(String, g_fm_channel_position); } else - if (!gAskToDelete) + if (!g_ask_to_delete) { - if (gInputBoxIndex == 0) + if (g_input_box_index == 0) { NUMBER_ToDigits(g_eeprom.fm_frequency_playing * 10000, String); UI_DisplayFrequency(String, 23, 4, false, true); } else - UI_DisplayFrequency(gInputBox, 23, 4, true, false); + UI_DisplayFrequency(g_input_box, 23, 4, true, false); ST7565_BlitFullScreen(); return; diff --git a/ui/helper.c b/ui/helper.c index 11b3545..ff7ea4b 100644 --- a/ui/helper.c +++ b/ui/helper.c @@ -30,7 +30,7 @@ void UI_GenerateChannelString(char *pString, const uint8_t Channel) { unsigned int i; - if (gInputBoxIndex == 0) + if (g_input_box_index == 0) { sprintf(pString, "CH-%02u", Channel + 1); return; @@ -40,16 +40,16 @@ void UI_GenerateChannelString(char *pString, const uint8_t Channel) pString[1] = 'H'; pString[2] = '-'; for (i = 0; i < 2; i++) - pString[i + 3] = (gInputBox[i] == 10) ? '-' : gInputBox[i] + '0'; + pString[i + 3] = (g_input_box[i] == 10) ? '-' : g_input_box[i] + '0'; } void UI_GenerateChannelStringEx(char *pString, const bool bShowPrefix, const uint8_t ChannelNumber) { - if (gInputBoxIndex > 0) + if (g_input_box_index > 0) { unsigned int i; for (i = 0; i < 3; i++) - pString[i] = (gInputBox[i] == 10) ? '-' : gInputBox[i] + '0'; + pString[i] = (g_input_box[i] == 10) ? '-' : g_input_box[i] + '0'; return; } @@ -76,8 +76,8 @@ void UI_PrintString(const char *pString, uint8_t Start, uint8_t End, uint8_t Lin { const unsigned int index = pString[i] - ' '; const unsigned int ofs = (unsigned int)Start + (i * Width); - memmove(gFrameBuffer[Line + 0] + ofs, &gFontBig[index][0], 8); - memmove(gFrameBuffer[Line + 1] + ofs, &gFontBig[index][8], 7); + memmove(g_frame_buffer[Line + 0] + ofs, &g_font_big[index][0], 8); + memmove(g_frame_buffer[Line + 1] + ofs, &g_font_big[index][8], 7); } } } @@ -90,16 +90,16 @@ void UI_PrintStringSmall(const char *pString, uint8_t Start, uint8_t End, uint8_ if (End > Start) Start += (((End - Start) - (Length * 8)) + 1) / 2; - const unsigned int char_width = ARRAY_SIZE(gFontSmall[0]); + const unsigned int char_width = ARRAY_SIZE(g_font_small[0]); const unsigned int char_spacing = char_width + 1; - uint8_t *pFb = gFrameBuffer[Line] + Start; + uint8_t *pFb = g_frame_buffer[Line] + Start; for (i = 0; i < Length; i++) { if (pString[i] >= 32) { const unsigned int index = (unsigned int)pString[i] - 32; - if (index < ARRAY_SIZE(gFontSmall)) - memmove(pFb + (i * char_spacing) + 1, &gFontSmall[index], char_width); + if (index < ARRAY_SIZE(g_font_small)) + memmove(pFb + (i * char_spacing) + 1, &g_font_small[index], char_width); } } } @@ -113,16 +113,16 @@ void UI_PrintStringSmall(const char *pString, uint8_t Start, uint8_t End, uint8_ if (End > Start) Start += (((End - Start) - (Length * 8)) + 1) / 2; - const unsigned int char_width = ARRAY_SIZE(gFontSmallBold[0]); + const unsigned int char_width = ARRAY_SIZE(g_font_small_bold[0]); const unsigned int char_spacing = char_width + 1; - uint8_t *pFb = gFrameBuffer[Line] + Start; + uint8_t *pFb = g_frame_buffer[Line] + Start; for (i = 0; i < Length; i++) { if (pString[i] >= 32) { const unsigned int index = (unsigned int)pString[i] - 32; - if (index < ARRAY_SIZE(gFontSmallBold)) - memmove(pFb + (i * char_spacing) + 1, &gFontSmallBold[index], char_width); + if (index < ARRAY_SIZE(g_font_small_bold)) + memmove(pFb + (i * char_spacing) + 1, &g_font_small_bold[index], char_width); } } } @@ -131,23 +131,23 @@ void UI_PrintStringSmall(const char *pString, uint8_t Start, uint8_t End, uint8_ void UI_PrintStringSmallBuffer(const char *pString, uint8_t *buffer) { size_t i; - const unsigned int char_width = ARRAY_SIZE(gFontSmall[0]); + const unsigned int char_width = ARRAY_SIZE(g_font_small[0]); const unsigned int char_spacing = char_width + 1; for (i = 0; i < strlen(pString); i++) { if (pString[i] >= 32) { const unsigned int index = (unsigned int)pString[i] - 32; - if (index < ARRAY_SIZE(gFontSmall)) - memmove(buffer + (i * char_spacing) + 1, &gFontSmall[index], char_width); + if (index < ARRAY_SIZE(g_font_small)) + memmove(buffer + (i * char_spacing) + 1, &g_font_small[index], char_width); } } } -void UI_DisplayFrequency(const char *pDigits, uint8_t X, uint8_t Y, bool bDisplayLeadingZero, bool bFlag) +void UI_DisplayFrequency(const char *pDigits, uint8_t X, uint8_t Y, bool bDisplayLeadingZero, bool flag) { const unsigned int char_width = 13; - uint8_t *pFb0 = gFrameBuffer[Y] + X; + uint8_t *pFb0 = g_frame_buffer[Y] + X; uint8_t *pFb1 = pFb0 + 128; bool bCanDisplay = false; unsigned int i = 0; @@ -159,11 +159,11 @@ void UI_DisplayFrequency(const char *pDigits, uint8_t X, uint8_t Y, bool bDispla if (bDisplayLeadingZero || bCanDisplay || Digit > 0) { bCanDisplay = true; - memmove(pFb0, gFontBigDigits[Digit], char_width); - memmove(pFb1, gFontBigDigits[Digit] + char_width, char_width); + memmove(pFb0, g_font_big_digits[Digit], char_width); + memmove(pFb1, g_font_big_digits[Digit] + char_width, char_width); } else - if (bFlag) + if (flag) { pFb0 -= 6; pFb1 -= 6; @@ -181,8 +181,8 @@ void UI_DisplayFrequency(const char *pDigits, uint8_t X, uint8_t Y, bool bDispla while (i < 6) { const unsigned int Digit = pDigits[i++]; - memmove(pFb0, gFontBigDigits[Digit], char_width); - memmove(pFb1, gFontBigDigits[Digit] + char_width, char_width); + memmove(pFb0, g_font_big_digits[Digit], char_width); + memmove(pFb1, g_font_big_digits[Digit] + char_width, char_width); pFb0 += char_width; pFb1 += char_width; } @@ -190,9 +190,9 @@ void UI_DisplayFrequency(const char *pDigits, uint8_t X, uint8_t Y, bool bDispla void UI_DisplayFrequencySmall(const char *pDigits, uint8_t X, uint8_t Y, bool bDisplayLeadingZero) { - const unsigned int char_width = ARRAY_SIZE(gFontSmall[0]); + const unsigned int char_width = ARRAY_SIZE(g_font_small[0]); const unsigned int spacing = 1 + char_width; - uint8_t *pFb = gFrameBuffer[Y] + X; + uint8_t *pFb = g_frame_buffer[Y] + X; bool bCanDisplay = false; unsigned int i = 0; @@ -203,10 +203,10 @@ void UI_DisplayFrequencySmall(const char *pDigits, uint8_t X, uint8_t Y, bool bD if (bDisplayLeadingZero || bCanDisplay || c > 0) { #if 0 - memmove(pFb + 1, gFontSmallDigits[c], char_width); + memmove(pFb + 1, g_font_small_digits[c], char_width); #else const unsigned int index = (c < 10) ? '0' - 32 + c : '-' - 32; - memmove(pFb + 1, gFontSmall[index], char_width); + memmove(pFb + 1, g_font_small[index], char_width); #endif pFb += spacing; bCanDisplay = true; @@ -225,18 +225,18 @@ void UI_DisplayFrequencySmall(const char *pDigits, uint8_t X, uint8_t Y, bool bD { const unsigned int c = pDigits[i++]; #if 0 - memmove(pFb + 1, gFontSmallDigits[c], char_width); + memmove(pFb + 1, g_font_small_digits[c], char_width); #else const unsigned int index = (c < 10) ? '0' - 32 + c : '-' - 32; - memmove(pFb + 1, gFontSmall[index], char_width); + memmove(pFb + 1, g_font_small[index], char_width); #endif pFb += spacing; } } -void UI_DisplaySmallDigits(const uint8_t size, const char *str, const uint8_t x, const uint8_t y, const bool display_leading_zeros) +void UI_Displaysmall_digits(const uint8_t size, const char *str, const uint8_t x, const uint8_t y, const bool display_leading_zeros) { - const unsigned int char_width = ARRAY_SIZE(gFontSmall[0]); + const unsigned int char_width = ARRAY_SIZE(g_font_small[0]); const unsigned int spacing = 1 + char_width; bool display = display_leading_zeros; unsigned int xx; @@ -249,10 +249,10 @@ void UI_DisplaySmallDigits(const uint8_t size, const char *str, const uint8_t x, if (display && c < 11) { #if 0 - memmove(gFrameBuffer[y] + xx, gFontSmallDigits[c], char_width); + memmove(g_frame_buffer[y] + xx, g_font_small_digits[c], char_width); #else const unsigned int index = (c < 10) ? '0' - 32 + c : '-' - 32; - memmove(gFrameBuffer[y] + xx + 1, gFontSmall[index], char_width); + memmove(g_frame_buffer[y] + xx + 1, g_font_small[index], char_width); #endif xx += spacing; } diff --git a/ui/helper.h b/ui/helper.h index 87eb686..6e9184e 100644 --- a/ui/helper.h +++ b/ui/helper.h @@ -28,9 +28,9 @@ void UI_PrintStringSmall(const char *pString, uint8_t Start, uint8_t End, uint8_ void UI_PrintStringSmallBold(const char *pString, uint8_t Start, uint8_t End, uint8_t Line); #endif void UI_PrintStringSmallBuffer(const char *pString, uint8_t *buffer); -void UI_DisplayFrequency(const char *pDigits, uint8_t X, uint8_t Y, bool bDisplayLeadingZero, bool bFlag); +void UI_DisplayFrequency(const char *pDigits, uint8_t X, uint8_t Y, bool bDisplayLeadingZero, bool flag); void UI_DisplayFrequencySmall(const char *pDigits, uint8_t X, uint8_t Y, bool bDisplayLeadingZero); -void UI_DisplaySmallDigits(const uint8_t size, const char *str, const uint8_t x, const uint8_t y, const bool display_leading_zeros); +void UI_Displaysmall_digits(const uint8_t size, const char *str, const uint8_t x, const uint8_t y, const bool display_leading_zeros); #endif diff --git a/ui/inputbox.c b/ui/inputbox.c index 0900990..d002c60 100644 --- a/ui/inputbox.c +++ b/ui/inputbox.c @@ -18,18 +18,18 @@ #include "ui/inputbox.h" -char gInputBox[8]; -uint8_t gInputBoxIndex; +char g_input_box[8]; +uint8_t g_input_box_index; void INPUTBOX_Append(const key_code_t Digit) { - if (gInputBoxIndex >= sizeof(gInputBox)) + if (g_input_box_index >= sizeof(g_input_box)) return; - if (gInputBoxIndex == 0) - memset(gInputBox, 10, sizeof(gInputBox)); + if (g_input_box_index == 0) + memset(g_input_box, 10, sizeof(g_input_box)); if (Digit >= KEY_0 && Digit != KEY_INVALID) - gInputBox[gInputBoxIndex++] = (char)(Digit - KEY_0); + g_input_box[g_input_box_index++] = (char)(Digit - KEY_0); } diff --git a/ui/inputbox.h b/ui/inputbox.h index 419f2a6..5ca93d7 100644 --- a/ui/inputbox.h +++ b/ui/inputbox.h @@ -21,8 +21,8 @@ #include "driver/keyboard.h" -extern char gInputBox[8]; -extern uint8_t gInputBoxIndex; +extern char g_input_box[8]; +extern uint8_t g_input_box_index; void INPUTBOX_Append(const key_code_t Digit); diff --git a/ui/lock.c b/ui/lock.c index 3d32ba0..6535c49 100644 --- a/ui/lock.c +++ b/ui/lock.c @@ -34,13 +34,13 @@ static void Render(void) unsigned int i; char String[7]; - memset(gStatusLine, 0, sizeof(gStatusLine)); - memset(gFrameBuffer, 0, sizeof(gFrameBuffer)); + memset(g_status_line, 0, sizeof(g_status_line)); + memset(g_frame_buffer, 0, sizeof(g_frame_buffer)); strcpy(String, "LOCK"); UI_PrintString(String, 0, 127, 1, 10); for (i = 0; i < 6; i++) - String[i] = (gInputBox[i] == 10) ? '-' : '*'; + String[i] = (g_input_box[i] == 10) ? '-' : '*'; String[6] = 0; UI_PrintString(String, 0, 127, 3, 12); @@ -51,19 +51,19 @@ static void Render(void) void UI_DisplayLock(void) { key_code_t Key; - BEEP_Type_t Beep; + beep_type_t Beep; - gUpdateDisplay = true; + g_update_display = true; - memset(gInputBox, 10, sizeof(gInputBox)); + memset(g_input_box, 10, sizeof(g_input_box)); while (1) { - while (!gNextTimeslice) {} + while (!g_next_time_slice) {} // TODO: Original code doesn't do the below, but is needed for proper key debounce - gNextTimeslice = false; + g_next_time_slice = false; Key = KEYBOARD_Poll(); @@ -93,7 +93,7 @@ void UI_DisplayLock(void) case KEY_9: INPUTBOX_Append(Key - KEY_0); - if (gInputBoxIndex < 6) // 6 frequency digits + if (g_input_box_index < 6) // 6 frequency digits { Beep = BEEP_1KHZ_60MS_OPTIONAL; } @@ -101,9 +101,9 @@ void UI_DisplayLock(void) { uint32_t Password; - gInputBoxIndex = 0; + g_input_box_index = 0; - NUMBER_Get(gInputBox, &Password); + NUMBER_Get(g_input_box, &Password); if ((g_eeprom.power_on_password * 100) == Password) { @@ -111,21 +111,21 @@ void UI_DisplayLock(void) return; } - memset(gInputBox, 10, sizeof(gInputBox)); + memset(g_input_box, 10, sizeof(g_input_box)); Beep = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; } AUDIO_PlayBeep(Beep); - gUpdateDisplay = true; + g_update_display = true; break; case KEY_EXIT: - if (gInputBoxIndex > 0) + if (g_input_box_index > 0) { - gInputBox[--gInputBoxIndex] = 10; - gUpdateDisplay = true; + g_input_box[--g_input_box_index] = 10; + g_update_display = true; } AUDIO_PlayBeep(BEEP_1KHZ_60MS_OPTIONAL); @@ -135,7 +135,7 @@ void UI_DisplayLock(void) } } - gKeyBeingHeld = false; + g_key_being_held = false; } } else @@ -151,10 +151,10 @@ void UI_DisplayLock(void) __enable_irq(); } - if (gUpdateDisplay) + if (g_update_display) { Render(); - gUpdateDisplay = false; + g_update_display = false; } } } diff --git a/ui/main.c b/ui/main.c index 998c39f..4ca77d3 100644 --- a/ui/main.c +++ b/ui/main.c @@ -50,7 +50,7 @@ center_line_t center_line = CENTER_LINE_NONE; { unsigned int timeout_secs = 0; - if (gCurrentFunction != FUNCTION_TRANSMIT) + if (g_current_function != FUNCTION_TRANSMIT) return false; if (center_line != CENTER_LINE_NONE && center_line != CENTER_LINE_TX_TIMEOUT) @@ -59,12 +59,12 @@ center_line_t center_line = CENTER_LINE_NONE; if (g_eeprom.tx_timeout_timer == 0) timeout_secs = 30; // 30 sec else - if (g_eeprom.tx_timeout_timer < (ARRAY_SIZE(gSubMenu_TOT) - 1)) + if (g_eeprom.tx_timeout_timer < (ARRAY_SIZE(g_sub_menu_TOT) - 1)) timeout_secs = 60 * g_eeprom.tx_timeout_timer; // minutes else timeout_secs = 60 * 15; // 15 minutes - if (timeout_secs == 0 || gTxTimerCountdown_500ms == 0) + if (timeout_secs == 0 || g_tx_timer_count_down_500ms == 0) return false; { @@ -72,11 +72,11 @@ center_line_t center_line = CENTER_LINE_NONE; const unsigned int txt_width = 7 * 6; // 6 text chars const unsigned int bar_x = 2 + txt_width + 4; // X coord of bar graph const unsigned int bar_width = LCD_WIDTH - 1 - bar_x; - const unsigned int secs = gTxTimerCountdown_500ms / 2; + const unsigned int secs = g_tx_timer_count_down_500ms / 2; const unsigned int level = ((secs * bar_width) + (timeout_secs / 2)) / timeout_secs; // with rounding // const unsigned int level = (((timeout_secs - secs) * bar_width) + (timeout_secs / 2)) / timeout_secs; // with rounding const unsigned int len = (level <= bar_width) ? level : bar_width; - uint8_t *p_line = gFrameBuffer[line]; + uint8_t *p_line = g_frame_buffer[line]; unsigned int i; char s[16]; @@ -112,13 +112,13 @@ void UI_drawBars(uint8_t *p, const unsigned int level) switch (level) { default: - case 7: memmove(p + 20, BITMAP_AntennaLevel6, sizeof(BITMAP_AntennaLevel6)); - case 6: memmove(p + 17, BITMAP_AntennaLevel5, sizeof(BITMAP_AntennaLevel5)); - case 5: memmove(p + 14, BITMAP_AntennaLevel4, sizeof(BITMAP_AntennaLevel4)); - case 4: memmove(p + 11, BITMAP_AntennaLevel3, sizeof(BITMAP_AntennaLevel3)); - case 3: memmove(p + 8, BITMAP_AntennaLevel2, sizeof(BITMAP_AntennaLevel2)); - case 2: memmove(p + 5, BITMAP_AntennaLevel1, sizeof(BITMAP_AntennaLevel1)); - case 1: memmove(p + 0, BITMAP_Antenna, sizeof(BITMAP_Antenna)); + case 7: memmove(p + 20, BITMAP_ANTENNA_LEVEL6, sizeof(BITMAP_ANTENNA_LEVEL6)); + case 6: memmove(p + 17, BITMAP_ANTENNA_LEVEL5, sizeof(BITMAP_ANTENNA_LEVEL5)); + case 5: memmove(p + 14, BITMAP_ANTENNA_LEVEL4, sizeof(BITMAP_ANTENNA_LEVEL4)); + case 4: memmove(p + 11, BITMAP_ANTENNA_LEVEL3, sizeof(BITMAP_ANTENNA_LEVEL3)); + case 3: memmove(p + 8, BITMAP_ANTENNA_LEVEL2, sizeof(BITMAP_ANTENNA_LEVEL2)); + case 2: memmove(p + 5, BITMAP_ANTENNA_LEVEL1, sizeof(BITMAP_ANTENNA_LEVEL1)); + case 1: memmove(p + 0, BITMAP_ANTENNA, sizeof(BITMAP_ANTENNA)); case 0: break; } @@ -147,22 +147,22 @@ void UI_drawBars(uint8_t *p, const unsigned int level) void UI_DisplayAudioBar(void) { - if (gSetting_mic_bar) + if (g_setting_mic_bar) { const unsigned int line = 3; const unsigned int bar_x = 2; const unsigned int bar_width = LCD_WIDTH - 2 - bar_x; unsigned int i; - if (gCurrentFunction != FUNCTION_TRANSMIT || - gScreenToDisplay != DISPLAY_MAIN || - gDTMF_CallState != DTMF_CALL_STATE_NONE) + if (g_current_function != FUNCTION_TRANSMIT || + g_screen_to_display != DISPLAY_MAIN || + g_dtmf_call_state != DTMF_CALL_STATE_NONE) { return; // screen is in use } #if defined(ENABLE_ALARM) || defined(ENABLE_TX1750) - if (gAlarmState != ALARM_STATE_OFF) + if (g_alarm_state != ALARM_STATE_OFF) return; #endif @@ -191,7 +191,7 @@ void UI_drawBars(uint8_t *p, const unsigned int level) #endif - uint8_t *p_line = gFrameBuffer[line]; + uint8_t *p_line = g_frame_buffer[line]; memset(p_line, 0, LCD_WIDTH); @@ -205,7 +205,7 @@ void UI_drawBars(uint8_t *p, const unsigned int level) p_line[bar_x + i] = (i <= len) ? 0x7f : 0x41; #endif - if (gCurrentFunction == FUNCTION_TRANSMIT) + if (g_current_function == FUNCTION_TRANSMIT) ST7565_BlitFullScreen(); } } @@ -235,17 +235,17 @@ void UI_drawBars(uint8_t *p, const unsigned int level) const unsigned int len = ((clamped_dBm - bar_min_dBm) * bar_width) / bar_range_dB; const unsigned int line = 3; - uint8_t *p_line = gFrameBuffer[line]; + uint8_t *p_line = g_frame_buffer[line]; char s[16]; unsigned int i; - if (g_eeprom.key_lock && gKeypadLocked > 0) + if (g_eeprom.key_lock && g_keypad_locked > 0) return; // display is in use - if (gCurrentFunction == FUNCTION_TRANSMIT || - gScreenToDisplay != DISPLAY_MAIN || - gDTMF_CallState != DTMF_CALL_STATE_NONE) + if (g_current_function == FUNCTION_TRANSMIT || + g_screen_to_display != DISPLAY_MAIN || + g_dtmf_call_state != DTMF_CALL_STATE_NONE) return; // display is in use if (now) @@ -290,9 +290,9 @@ void UI_UpdateRSSI(const int16_t rssi, const int vfo) if (center_line != CENTER_LINE_RSSI) return; - if (gCurrentFunction == FUNCTION_RECEIVE || - gCurrentFunction == FUNCTION_MONITOR || - gCurrentFunction == FUNCTION_INCOMING) + if (g_current_function == FUNCTION_RECEIVE || + g_current_function == FUNCTION_MONITOR || + g_current_function == FUNCTION_INCOMING) { UI_DisplayRSSIBar(rssi, true); } @@ -303,7 +303,7 @@ void UI_UpdateRSSI(const int16_t rssi, const int vfo) // const int16_t dBm = (rssi / 2) - 160; const uint8_t Line = (vfo == 0) ? 3 : 7; - uint8_t *p_line = gFrameBuffer[Line - 1]; + uint8_t *p_line = g_frame_buffer[Line - 1]; // TODO: sort out all 8 values from the eeprom @@ -313,10 +313,10 @@ void UI_UpdateRSSI(const int16_t rssi, const int vfo) // 0000C0 6E 00 78 00 82 00 8C 00 B4 00 BE 00 C8 00 D2 00 // const unsigned int band = 1; - const int16_t level0 = g_eeprom_RSSI_CALIB[band][0]; - const int16_t level1 = g_eeprom_RSSI_CALIB[band][1]; - const int16_t level2 = g_eeprom_RSSI_CALIB[band][2]; - const int16_t level3 = g_eeprom_RSSI_CALIB[band][3]; + const int16_t level0 = g_eeprom_rssi_calib[band][0]; + const int16_t level1 = g_eeprom_rssi_calib[band][1]; + const int16_t level2 = g_eeprom_rssi_calib[band][2]; + const int16_t level3 = g_eeprom_rssi_calib[band][3]; #else const int16_t level0 = (-115 + 160) * 2; // dB const int16_t level1 = ( -89 + 160) * 2; // dB @@ -327,7 +327,7 @@ void UI_UpdateRSSI(const int16_t rssi, const int vfo) const int16_t level12 = (level1 + level2) / 2; const int16_t level23 = (level2 + level3) / 2; - gVFO_RSSI[vfo] = rssi; + g_vfo_rssi[vfo] = rssi; uint8_t rssi_level = 0; @@ -345,20 +345,20 @@ void UI_UpdateRSSI(const int16_t rssi, const int vfo) else if (rssi >= level0) rssi_level = 1; - if (gVFO_RSSI_bar_level[vfo] == rssi_level) + if (g_vfo_rssi_bar_level[vfo] == rssi_level) return; - gVFO_RSSI_bar_level[vfo] = rssi_level; + g_vfo_rssi_bar_level[vfo] = rssi_level; // ********************************************************** - if (g_eeprom.key_lock && gKeypadLocked > 0) + if (g_eeprom.key_lock && g_keypad_locked > 0) return; // display is in use - if (gCurrentFunction == FUNCTION_TRANSMIT || gScreenToDisplay != DISPLAY_MAIN) + if (g_current_function == FUNCTION_TRANSMIT || g_screen_to_display != DISPLAY_MAIN) return; // display is in use - p_line = gFrameBuffer[Line - 1]; + p_line = g_frame_buffer[Line - 1]; memset(p_line, 0, 23); @@ -391,9 +391,9 @@ void UI_DisplayMain(void) // #endif // clear the screen - memset(gFrameBuffer, 0, sizeof(gFrameBuffer)); + memset(g_frame_buffer, 0, sizeof(g_frame_buffer)); - if (g_eeprom.key_lock && gKeypadLocked > 0) + if (g_eeprom.key_lock && g_keypad_locked > 0) { // tell user how to unlock the keyboard UI_PrintString("Long press #", 0, LCD_WIDTH, 1, 8); UI_PrintString("to unlock", 0, LCD_WIDTH, 3, 8); @@ -407,8 +407,8 @@ void UI_DisplayMain(void) unsigned int channel = g_eeprom.tx_vfo; // unsigned int tx_channel = (g_eeprom.cross_vfo_rx_tx == CROSS_BAND_OFF) ? g_eeprom.rx_vfo : g_eeprom.tx_vfo; const bool same_vfo = (channel == vfo_num) ? true : false; - uint8_t *p_line0 = gFrameBuffer[line + 0]; - uint8_t *p_line1 = gFrameBuffer[line + 1]; + uint8_t *p_line0 = g_frame_buffer[line + 0]; + uint8_t *p_line1 = g_frame_buffer[line + 1]; unsigned int mode = 0; unsigned int state; @@ -421,46 +421,46 @@ void UI_DisplayMain(void) } - if (g_eeprom.dual_watch != DUAL_WATCH_OFF && gRxVfoIsActive) + if (g_eeprom.dual_watch != DUAL_WATCH_OFF && g_rx_vfo_is_active) channel = g_eeprom.rx_vfo; // we're currently monitoring the other VFO if (channel != vfo_num) { - if (gDTMF_CallState != DTMF_CALL_STATE_NONE || gDTMF_IsTx || gDTMF_InputMode) + if (g_dtmf_call_state != DTMF_CALL_STATE_NONE || g_dtmf_is_tx || g_dtmf_input_mode) { // show DTMF stuff char Contact[16]; - if (!gDTMF_InputMode) + if (!g_dtmf_input_mode) { memset(Contact, 0, sizeof(Contact)); - if (gDTMF_CallState == DTMF_CALL_STATE_CALL_OUT) - strcpy(String, (gDTMF_State == DTMF_STATE_CALL_OUT_RSP) ? "CALL OUT(RSP)" : "CALL OUT"); + if (g_dtmf_call_state == DTMF_CALL_STATE_CALL_OUT) + strcpy(String, (g_dtmf_state == DTMF_STATE_CALL_OUT_RSP) ? "CALL OUT(RSP)" : "CALL OUT"); else - if (gDTMF_CallState == DTMF_CALL_STATE_RECEIVED || gDTMF_CallState == DTMF_CALL_STATE_RECEIVED_STAY) - sprintf(String, "CALL FRM:%s", (DTMF_FindContact(gDTMF_Caller, Contact)) ? Contact : gDTMF_Caller); + if (g_dtmf_call_state == DTMF_CALL_STATE_RECEIVED || g_dtmf_call_state == DTMF_CALL_STATE_RECEIVED_STAY) + sprintf(String, "CALL FRM:%s", (DTMF_FindContact(g_dtmf_caller, Contact)) ? Contact : g_dtmf_caller); else - if (gDTMF_IsTx) - strcpy(String, (gDTMF_State == DTMF_STATE_TX_SUCC) ? "DTMF TX(SUCC)" : "DTMF TX"); + if (g_dtmf_is_tx) + strcpy(String, (g_dtmf_state == DTMF_STATE_TX_SUCC) ? "DTMF TX(SUCC)" : "DTMF TX"); } else { - sprintf(String, ">%s", gDTMF_InputBox); + sprintf(String, ">%s", g_dtmf_input_box); } UI_PrintString(String, 2, 0, 0 + (vfo_num * 3), 8); memset(String, 0, sizeof(String)); - if (!gDTMF_InputMode) + if (!g_dtmf_input_mode) { memset(Contact, 0, sizeof(Contact)); - if (gDTMF_CallState == DTMF_CALL_STATE_CALL_OUT) - sprintf(String, ">%s", (DTMF_FindContact(gDTMF_String, Contact)) ? Contact : gDTMF_String); + if (g_dtmf_call_state == DTMF_CALL_STATE_CALL_OUT) + sprintf(String, ">%s", (DTMF_FindContact(g_dtmf_string, Contact)) ? Contact : g_dtmf_string); else - if (gDTMF_CallState == DTMF_CALL_STATE_RECEIVED || gDTMF_CallState == DTMF_CALL_STATE_RECEIVED_STAY) - sprintf(String, ">%s", (DTMF_FindContact(gDTMF_Callee, Contact)) ? Contact : gDTMF_Callee); + if (g_dtmf_call_state == DTMF_CALL_STATE_RECEIVED || g_dtmf_call_state == DTMF_CALL_STATE_RECEIVED_STAY) + sprintf(String, ">%s", (DTMF_FindContact(g_dtmf_callee, Contact)) ? Contact : g_dtmf_callee); else - if (gDTMF_IsTx) - sprintf(String, ">%s", gDTMF_String); + if (g_dtmf_is_tx) + sprintf(String, ">%s", g_dtmf_string); } UI_PrintString(String, 2, 0, 2 + (vfo_num * 3), 8); @@ -470,26 +470,26 @@ void UI_DisplayMain(void) // highlight the selected/used VFO with a marker if (!single_vfo && same_vfo) - memmove(p_line0 + 0, BITMAP_VFO_Default, sizeof(BITMAP_VFO_Default)); + memmove(p_line0 + 0, BITMAP_VFO_DEFAULT, sizeof(BITMAP_VFO_DEFAULT)); else if (g_eeprom.cross_vfo_rx_tx != CROSS_BAND_OFF) - memmove(p_line0 + 0, BITMAP_VFO_NotDefault, sizeof(BITMAP_VFO_NotDefault)); + memmove(p_line0 + 0, BITMAP_VFO_NOT_DEFAULT, sizeof(BITMAP_VFO_NOT_DEFAULT)); } else if (!single_vfo) { // highlight the selected/used VFO with a marker if (same_vfo) - memmove(p_line0 + 0, BITMAP_VFO_Default, sizeof(BITMAP_VFO_Default)); + memmove(p_line0 + 0, BITMAP_VFO_DEFAULT, sizeof(BITMAP_VFO_DEFAULT)); else //if (g_eeprom.cross_vfo_rx_tx != CROSS_BAND_OFF) - memmove(p_line0 + 0, BITMAP_VFO_NotDefault, sizeof(BITMAP_VFO_NotDefault)); + memmove(p_line0 + 0, BITMAP_VFO_NOT_DEFAULT, sizeof(BITMAP_VFO_NOT_DEFAULT)); } - if (gCurrentFunction == FUNCTION_TRANSMIT) + if (g_current_function == FUNCTION_TRANSMIT) { // transmitting #ifdef ENABLE_ALARM - if (gAlarmState == ALARM_STATE_ALARM) + if (g_alarm_state == ALARM_STATE_ALARM) mode = 2; else #endif @@ -509,9 +509,9 @@ void UI_DisplayMain(void) else { // receiving .. show the RX symbol mode = 2; - if ((gCurrentFunction == FUNCTION_RECEIVE || - gCurrentFunction == FUNCTION_MONITOR || - gCurrentFunction == FUNCTION_INCOMING) && + if ((g_current_function == FUNCTION_RECEIVE || + g_current_function == FUNCTION_MONITOR || + g_current_function == FUNCTION_INCOMING) && g_eeprom.rx_vfo == vfo_num) { #ifdef ENABLE_SMALL_BOLD @@ -525,13 +525,13 @@ void UI_DisplayMain(void) if (g_eeprom.screen_channel[vfo_num] <= USER_CHANNEL_LAST) { // channel mode const unsigned int x = 2; - const bool inputting = (gInputBoxIndex == 0 || g_eeprom.tx_vfo != vfo_num) ? false : true; + const bool inputting = (g_input_box_index == 0 || g_eeprom.tx_vfo != vfo_num) ? false : true; if (!inputting) NUMBER_ToDigits(g_eeprom.screen_channel[vfo_num] + 1, String); // show the memory channel number else - memmove(String + 5, gInputBox, 3); // show the input text + memmove(String + 5, g_input_box, 3); // show the input text UI_PrintStringSmall("M", x, 0, line + 1); - UI_DisplaySmallDigits(3, String + 5, x + 7, line + 1, inputting); + UI_Displaysmall_digits(3, String + 5, x + 7, line + 1, inputting); } else if (IS_FREQ_CHANNEL(g_eeprom.screen_channel[vfo_num])) @@ -545,13 +545,13 @@ void UI_DisplayMain(void) #ifdef ENABLE_NOAA else { - if (gInputBoxIndex == 0 || g_eeprom.tx_vfo != vfo_num) + if (g_input_box_index == 0 || g_eeprom.tx_vfo != vfo_num) { // channel number sprintf(String, "N%u", 1 + g_eeprom.screen_channel[vfo_num] - NOAA_CHANNEL_FIRST); } else { // user entering channel number - sprintf(String, "N%u%u", '0' + gInputBox[0], '0' + gInputBox[1]); + sprintf(String, "N%u%u", '0' + g_input_box[0], '0' + g_input_box[1]); } UI_PrintStringSmall(String, 7, 0, line + 1); } @@ -559,10 +559,10 @@ void UI_DisplayMain(void) // ************ - state = VfoState[vfo_num]; + state = g_vfo_state[vfo_num]; #ifdef ENABLE_ALARM - if (gCurrentFunction == FUNCTION_TRANSMIT && gAlarmState == ALARM_STATE_ALARM) + if (g_current_function == FUNCTION_TRANSMIT && g_alarm_state == ALARM_STATE_ALARM) { channel = (g_eeprom.cross_vfo_rx_tx == CROSS_BAND_OFF) ? g_eeprom.rx_vfo : g_eeprom.tx_vfo; if (channel == vfo_num) @@ -577,34 +577,34 @@ void UI_DisplayMain(void) UI_PrintString(state_list[state], 31, 0, line, 8); } else - if (gInputBoxIndex > 0 && IS_FREQ_CHANNEL(g_eeprom.screen_channel[vfo_num]) && g_eeprom.tx_vfo == vfo_num) + if (g_input_box_index > 0 && IS_FREQ_CHANNEL(g_eeprom.screen_channel[vfo_num]) && g_eeprom.tx_vfo == vfo_num) { // user entering a frequency - UI_DisplayFrequency(gInputBox, 32, line, true, false); + UI_DisplayFrequency(g_input_box, 32, line, true, false); // center_line = CENTER_LINE_IN_USE; } else { - uint32_t frequency = g_eeprom.VfoInfo[vfo_num].pRX->frequency; - if (gCurrentFunction == FUNCTION_TRANSMIT) + uint32_t frequency = g_eeprom.vfo_info[vfo_num].pRX->frequency; + if (g_current_function == FUNCTION_TRANSMIT) { // transmitting channel = (g_eeprom.cross_vfo_rx_tx == CROSS_BAND_OFF) ? g_eeprom.rx_vfo : g_eeprom.tx_vfo; if (channel == vfo_num) - frequency = g_eeprom.VfoInfo[vfo_num].pTX->frequency; + frequency = g_eeprom.vfo_info[vfo_num].pTX->frequency; } if (g_eeprom.screen_channel[vfo_num] <= USER_CHANNEL_LAST) { // it's a channel // show the channel symbols - const uint8_t attributes = gUSER_ChannelAttributes[g_eeprom.screen_channel[vfo_num]]; + const uint8_t attributes = g_user_channel_attributes[g_eeprom.screen_channel[vfo_num]]; if (attributes & USER_CH_SCANLIST1) - memmove(p_line0 + 113, BITMAP_ScanList1, sizeof(BITMAP_ScanList1)); + memmove(p_line0 + 113, BITMAP_SCANLIST1, sizeof(BITMAP_SCANLIST1)); if (attributes & USER_CH_SCANLIST2) - memmove(p_line0 + 120, BITMAP_ScanList2, sizeof(BITMAP_ScanList2)); + memmove(p_line0 + 120, BITMAP_SCANLIST2, sizeof(BITMAP_SCANLIST2)); #ifndef ENABLE_BIG_FREQ if ((attributes & USER_CH_COMPAND) > 0) - memmove(p_line0 + 120 + LCD_WIDTH, BITMAP_compand, sizeof(BITMAP_compand)); + memmove(p_line0 + 120 + LCD_WIDTH, BITMAP_COMPAND, sizeof(BITMAP_COMPAND)); #else // TODO: // find somewhere else to put the symbol @@ -622,7 +622,7 @@ void UI_DisplayMain(void) // show the main large frequency digits UI_DisplayFrequency(String, 32, line, false, false); // show the remaining 2 small frequency digits - UI_DisplaySmallDigits(2, String + 6, 113, line + 1, true); + UI_Displaysmall_digits(2, String + 6, 113, line + 1, true); #else // show the frequency in the main font sprintf(String, "%03u.%05u", frequency / 100000, frequency % 100000); @@ -673,7 +673,7 @@ void UI_DisplayMain(void) // show the main large frequency digits UI_DisplayFrequency(String, 32, line, false, false); // show the remaining 2 small frequency digits - UI_DisplaySmallDigits(2, String + 6, 113, line + 1, true); + UI_Displaysmall_digits(2, String + 6, 113, line + 1, true); #else // show the frequency in the main font sprintf(String, "%03u.%05u", frequency / 100000, frequency % 100000); @@ -681,12 +681,12 @@ void UI_DisplayMain(void) #endif // show the channel symbols - const uint8_t attributes = gUSER_ChannelAttributes[g_eeprom.screen_channel[vfo_num]]; + const uint8_t attributes = g_user_channel_attributes[g_eeprom.screen_channel[vfo_num]]; if ((attributes & USER_CH_COMPAND) > 0) #ifdef ENABLE_BIG_FREQ - memmove(p_line0 + 120, BITMAP_compand, sizeof(BITMAP_compand)); + memmove(p_line0 + 120, BITMAP_COMPAND, sizeof(BITMAP_COMPAND)); #else - memmove(p_line0 + 120 + LCD_WIDTH, BITMAP_compand, sizeof(BITMAP_compand)); + memmove(p_line0 + 120 + LCD_WIDTH, BITMAP_COMPAND, sizeof(BITMAP_COMPAND)); #endif } } @@ -698,7 +698,7 @@ void UI_DisplayMain(void) if (mode == 1) { // TX power level - switch (gRxVfo->output_power) + switch (g_rx_vfo->output_power) { case OUTPUT_POWER_LOW: Level = 2; break; case OUTPUT_POWER_MID: Level = 4; break; @@ -710,8 +710,8 @@ void UI_DisplayMain(void) { // RX signal level #ifndef ENABLE_RSSI_BAR // bar graph - if (gVFO_RSSI_bar_level[vfo_num] > 0) - Level = gVFO_RSSI_bar_level[vfo_num]; + if (g_vfo_rssi_bar_level[vfo_num] > 0) + Level = g_vfo_rssi_bar_level[vfo_num]; #endif } @@ -721,13 +721,13 @@ void UI_DisplayMain(void) // ************ String[0] = '\0'; - if (g_eeprom.VfoInfo[vfo_num].am_mode) + if (g_eeprom.vfo_info[vfo_num].am_mode) { // show the AM symbol strcpy(String, "AM"); } else { // or show the CTCSS/DCS symbol - const FREQ_Config_t *pConfig = (mode == 1) ? g_eeprom.VfoInfo[vfo_num].pTX : g_eeprom.VfoInfo[vfo_num].pRX; + const freq_config_t *pConfig = (mode == 1) ? g_eeprom.vfo_info[vfo_num].pTX : g_eeprom.vfo_info[vfo_num].pRX; const unsigned int code_type = pConfig->code_type; const char *code_list[] = {"", "CT", "DCS", "DCR"}; if (code_type < ARRAY_SIZE(code_list)) @@ -738,28 +738,28 @@ void UI_DisplayMain(void) if (state == VFO_STATE_NORMAL || state == VFO_STATE_ALARM) { // show the TX power const char pwr_list[] = "LMH"; - const unsigned int i = g_eeprom.VfoInfo[vfo_num].output_power; + const unsigned int i = g_eeprom.vfo_info[vfo_num].output_power; String[0] = (i < ARRAY_SIZE(pwr_list)) ? pwr_list[i] : '\0'; String[1] = '\0'; UI_PrintStringSmall(String, LCD_WIDTH + 46, 0, line + 1); } - if (g_eeprom.VfoInfo[vfo_num].freq_config_rx.frequency != g_eeprom.VfoInfo[vfo_num].freq_config_tx.frequency) + if (g_eeprom.vfo_info[vfo_num].freq_config_rx.frequency != g_eeprom.vfo_info[vfo_num].freq_config_tx.frequency) { // show the TX offset symbol const char dir_list[] = "\0+-"; - const unsigned int i = g_eeprom.VfoInfo[vfo_num].tx_offset_freq_dir; + const unsigned int i = g_eeprom.vfo_info[vfo_num].tx_offset_freq_dir; String[0] = (i < sizeof(dir_list)) ? dir_list[i] : '?'; String[1] = '\0'; UI_PrintStringSmall(String, LCD_WIDTH + 54, 0, line + 1); } // show the TX/RX reverse symbol - if (g_eeprom.VfoInfo[vfo_num].frequency_reverse) + if (g_eeprom.vfo_info[vfo_num].frequency_reverse) UI_PrintStringSmall("R", LCD_WIDTH + 62, 0, line + 1); { // show the narrow band symbol String[0] = '\0'; - if (g_eeprom.VfoInfo[vfo_num].channel_bandwidth == BANDWIDTH_NARROW) + if (g_eeprom.vfo_info[vfo_num].channel_bandwidth == BANDWIDTH_NARROW) { String[0] = 'N'; String[1] = '\0'; @@ -768,20 +768,20 @@ void UI_DisplayMain(void) } // show the DTMF decoding symbol - if (g_eeprom.VfoInfo[vfo_num].DTMF_decoding_enable || gSetting_KILLED) + if (g_eeprom.vfo_info[vfo_num].dtmf_decoding_enable || g_setting_killed) UI_PrintStringSmall("DTMF", LCD_WIDTH + 78, 0, line + 1); // show the audio scramble symbol - if (g_eeprom.VfoInfo[vfo_num].scrambling_type > 0 && gSetting_ScrambleEnable) + if (g_eeprom.vfo_info[vfo_num].scrambling_type > 0 && g_setting_scramble_enable) UI_PrintStringSmall("SCR", LCD_WIDTH + 106, 0, line + 1); } if (center_line == CENTER_LINE_NONE) { // we're free to use the middle line - const bool rx = (gCurrentFunction == FUNCTION_RECEIVE || - gCurrentFunction == FUNCTION_MONITOR || - gCurrentFunction == FUNCTION_INCOMING); + const bool rx = (g_current_function == FUNCTION_RECEIVE || + g_current_function == FUNCTION_MONITOR || + g_current_function == FUNCTION_INCOMING); #ifdef ENABLE_SHOW_TX_TIMEOUT // show the TX timeout count down @@ -794,7 +794,7 @@ void UI_DisplayMain(void) #ifdef ENABLE_AUDIO_BAR // show the TX audio level - if (gSetting_mic_bar && gCurrentFunction == FUNCTION_TRANSMIT) + if (g_setting_mic_bar && g_current_function == FUNCTION_TRANSMIT) { center_line = CENTER_LINE_AUDIO_BAR; UI_DisplayAudioBar(); @@ -804,9 +804,9 @@ void UI_DisplayMain(void) #if defined(ENABLE_AM_FIX) && defined(ENABLE_AM_FIX_SHOW_DATA) // show the AM-FIX debug data - if (rx && g_eeprom.VfoInfo[g_eeprom.rx_vfo].am_mode && gSetting_AM_fix) + if (rx && g_eeprom.vfo_info[g_eeprom.rx_vfo].am_mode && g_setting_am_fix) { - if (gScreenToDisplay != DISPLAY_MAIN || gDTMF_CallState != DTMF_CALL_STATE_NONE) + if (g_screen_to_display != DISPLAY_MAIN || g_dtmf_call_state != DTMF_CALL_STATE_NONE) return; center_line = CENTER_LINE_AM_FIX_DATA; @@ -821,57 +821,57 @@ void UI_DisplayMain(void) if (rx) { center_line = CENTER_LINE_RSSI; - UI_DisplayRSSIBar(gCurrentRSSI[g_eeprom.rx_vfo], false); + UI_DisplayRSSIBar(g_current_rssi[g_eeprom.rx_vfo], false); } else #endif - if (rx || gCurrentFunction == FUNCTION_FOREGROUND || gCurrentFunction == FUNCTION_POWER_SAVE) + if (rx || g_current_function == FUNCTION_FOREGROUND || g_current_function == FUNCTION_POWER_SAVE) { #if 1 - if (gSetting_live_DTMF_decoder && gDTMF_RX_live[0] != 0) + if (g_setting_live_dtmf_decoder && g_dtmf_rx_live[0] != 0) { // show live DTMF decode - const unsigned int len = strlen(gDTMF_RX_live); + const unsigned int len = strlen(g_dtmf_rx_live); const unsigned int idx = (len > (17 - 5)) ? len - (17 - 5) : 0; // limit to last 'n' chars - if (gScreenToDisplay != DISPLAY_MAIN || gDTMF_CallState != DTMF_CALL_STATE_NONE) + if (g_screen_to_display != DISPLAY_MAIN || g_dtmf_call_state != DTMF_CALL_STATE_NONE) return; center_line = CENTER_LINE_DTMF_DEC; strcpy(String, "DTMF "); - strcat(String, gDTMF_RX_live + idx); + strcat(String, g_dtmf_rx_live + idx); UI_PrintStringSmall(String, 2, 0, 3); } #else - if (gSetting_live_DTMF_decoder && gDTMF_RX_index > 0) + if (g_setting_live_dtmf_decoder && g_dtmf_rx_index > 0) { // show live DTMF decode - const unsigned int len = gDTMF_RX_index; + const unsigned int len = g_dtmf_rx_index; const unsigned int idx = (len > (17 - 5)) ? len - (17 - 5) : 0; // limit to last 'n' chars - if (gScreenToDisplay != DISPLAY_MAIN || gDTMF_CallState != DTMF_CALL_STATE_NONE) + if (g_screen_to_display != DISPLAY_MAIN || g_dtmf_call_state != DTMF_CALL_STATE_NONE) return; center_line = CENTER_LINE_DTMF_DEC; strcpy(String, "DTMF "); - strcat(String, gDTMF_RX + idx); + strcat(String, g_dtmf_rx + idx); UI_PrintStringSmall(String, 2, 0, 3); } #endif #ifdef ENABLE_SHOW_CHARGE_LEVEL else - if (gChargingWithTypeC) + if (g_charging_with_type_c) { // show the battery charge state - if (gScreenToDisplay != DISPLAY_MAIN || gDTMF_CallState != DTMF_CALL_STATE_NONE) + if (g_screen_to_display != DISPLAY_MAIN || g_dtmf_call_state != DTMF_CALL_STATE_NONE) return; center_line = CENTER_LINE_CHARGE_DATA; sprintf(String, "Charge %u.%02uV %u%%", - gBatteryVoltageAverage / 100, gBatteryVoltageAverage % 100, - BATTERY_VoltsToPercent(gBatteryVoltageAverage)); + g_battery_voltage_average / 100, g_battery_voltage_average % 100, + BATTERY_VoltsToPercent(g_battery_voltage_average)); UI_PrintStringSmall(String, 2, 0, 3); } #endif diff --git a/ui/main.h b/ui/main.h index 8f3bbad..b3e756f 100644 --- a/ui/main.h +++ b/ui/main.h @@ -17,7 +17,7 @@ #ifndef UI_MAIN_H #define UI_MAIN_H -enum center_line_t { +enum center_line_e { CENTER_LINE_NONE = 0, CENTER_LINE_IN_USE, CENTER_LINE_TX_TIMEOUT, @@ -27,7 +27,7 @@ enum center_line_t { CENTER_LINE_DTMF_DEC, CENTER_LINE_CHARGE_DATA }; -typedef enum center_line_t center_line_t; +typedef enum center_line_e center_line_t; extern center_line_t center_line; diff --git a/ui/menu.c b/ui/menu.c index b4b84b2..564145b 100644 --- a/ui/menu.c +++ b/ui/menu.c @@ -41,7 +41,7 @@ // // the order of entries in this list below is no longer important, no longer has to match the enum list -const t_menu_item MenuList[] = +const t_menu_item g_menu_list[] = { // text, voice ID, menu ID @@ -53,9 +53,9 @@ const t_menu_item MenuList[] = {"RxCTCS", VOICE_ID_CTCSS, MENU_R_CTCS }, // was "R_CTCS" {"Tx DCS", VOICE_ID_DCS, MENU_T_DCS }, // was "T_DCS" {"TxCTCS", VOICE_ID_CTCSS, MENU_T_CTCS }, // was "T_CTCS" - {"Tx DIR", voice_id_tX_OFFSET_FREQ_DIR, MENU_SFT_D }, // was "SFT_D" - {"TxOFFS", voice_id_tX_OFFSET_FREQ, MENU_OFFSET }, // was "OFFSET" - {"Tx TO", voice_id_tRANSMIT_OVER_TIME, MENU_TOT }, // was "TOT" + {"Tx DIR", VOICE_ID_TX_OFFSET_FREQ_DIR, MENU_SFT_D }, // was "SFT_D" + {"TxOFFS", 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" {"2nd RX", VOICE_ID_DUAL_STANDBY, MENU_TDR }, // was "TDR" {"SCRAM", VOICE_ID_SCRAMBLER_ON, MENU_SCR }, // was "SCR" @@ -140,37 +140,37 @@ const t_menu_item MenuList[] = }; // number of hidden menu items at the end of the list - KEEP THIS UP-TO-DATE -const unsigned int gHidden_menu_count = 9; +const unsigned int g_hidden_menu_count = 9; // *************************************************************************************** -const char gSubMenu_TXP[3][5] = +const char g_sub_menu_txp[3][5] = { "LOW", "MID", "HIGH" }; -const char gSubMenu_SFT_D[3][4] = +const char g_sub_menu_shift_dir[3][4] = { "OFF", "+", "-" }; -const char gSubMenu_W_N[2][7] = +const char g_sub_menu_w_n[2][7] = { "WIDE", "NARROW" }; -const char gSubMenu_OFF_ON[2][4] = +const char g_sub_menu_off_on[2][4] = { "OFF", "ON" }; -const char gSubMenu_SAVE[5][4] = +const char g_sub_menu_SAVE[5][4] = { "OFF", "1:1", @@ -179,7 +179,7 @@ const char gSubMenu_SAVE[5][4] = "1:4" }; -const char gSubMenu_TOT[11][7] = +const char g_sub_menu_TOT[11][7] = { "30 sec", "1 min", @@ -194,14 +194,14 @@ const char gSubMenu_TOT[11][7] = "15 min" }; -const char gSubMenu_TDR[3][10] = +const char g_sub_menu_tdr[3][10] = { "OFF", "LOWER\nVFO", "UPPER\nVFO", }; -const char gSubMenu_XB[3][10] = +const char g_sub_menu_xb[3][10] = { "RX\nVFO", "UPPER\nVFO", @@ -209,7 +209,7 @@ const char gSubMenu_XB[3][10] = }; #ifdef ENABLE_VOICE - const char gSubMenu_VOICE[3][4] = + const char g_sub_menu_voice[3][4] = { "OFF", "CHI", @@ -217,14 +217,14 @@ const char gSubMenu_XB[3][10] = }; #endif -const char gSubMenu_SC_REV[3][13] = +const char g_sub_menu_sc_rev[3][13] = { "TIME", "CARRIER", "SEARCH" }; -const char gSubMenu_MDF[4][15] = +const char g_sub_menu_mdf[4][15] = { "FREQ", "CHANNEL\nNUMBER", @@ -233,14 +233,14 @@ const char gSubMenu_MDF[4][15] = }; #ifdef ENABLE_ALARM - const char gSubMenu_AL_MOD[2][5] = + const char g_sub_menu_AL_MOD[2][5] = { "SITE", "TONE" }; #endif -const char gSubMenu_D_RSP[4][11] = +const char g_sub_menu_D_RSP[4][11] = { "DO\nNOTHING", "RING", @@ -248,7 +248,7 @@ const char gSubMenu_D_RSP[4][11] = "BOTH" }; -const char gSubMenu_PTT_ID[5][15] = +const char g_sub_menu_PTT_ID[5][15] = { "OFF", "KEY\nUP", @@ -257,7 +257,7 @@ const char gSubMenu_PTT_ID[5][15] = "APOLLO\nQUINDAR" }; -const char gSubMenu_PONMSG[4][8] = +const char g_sub_menu_pwr_on_msg[4][8] = { "FULL", "MESSAGE", @@ -265,20 +265,20 @@ const char gSubMenu_PONMSG[4][8] = "NONE" }; -const char gSubMenu_ROGER[3][9] = +const char g_sub_menu_roger_mode[3][9] = { "OFF", "ROGER", "MDC\n1200" }; -const char gSubMenu_RESET[2][4] = +const char g_sub_menu_RESET[2][4] = { "VFO", "ALL" }; -const char gSubMenu_F_LOCK[6][4] = +const char g_sub_menu_f_lock[6][4] = { "OFF", "FCC", @@ -288,7 +288,7 @@ const char gSubMenu_F_LOCK[6][4] = "438" }; -const char gSubMenu_backlight[8][7] = +const char g_sub_menu_backlight[8][7] = { "OFF", "5 sec", @@ -300,7 +300,7 @@ const char gSubMenu_backlight[8][7] = "ON" }; -const char gSubMenu_RX_TX[4][6] = +const char g_sub_menu_rx_tx[4][6] = { "OFF", "TX", @@ -309,7 +309,7 @@ const char gSubMenu_RX_TX[4][6] = }; #ifdef ENABLE_AM_FIX_TEST1 - const char gSubMenu_AM_fix_test1[4][8] = + const char g_sub_menu_AM_fix_test1[4][8] = { "LNA-S 0", "LNA-S 1", @@ -318,14 +318,14 @@ const char gSubMenu_RX_TX[4][6] = }; #endif -const char gSubMenu_BAT_TXT[3][8] = +const char g_sub_menu_BAT_TXT[3][8] = { "NONE", "VOLTAGE", "PERCENT" }; -const char gSubMenu_SCRAMBLER[11][7] = +const char g_sub_menu_SCRAMBLER[11][7] = { "OFF", "2600Hz", @@ -340,8 +340,8 @@ const char gSubMenu_SCRAMBLER[11][7] = "3500Hz" }; -const char gSubMenu_SIDE_BUTT[9][16] = -//const char gSubMenu_SIDE_BUTT[10][16] = +const char g_sub_menu_SIDE_BUTT[9][16] = +//const char g_sub_menu_SIDE_BUTT[10][16] = { "NONE", "FLASH\nLIGHT", @@ -357,17 +357,17 @@ const char gSubMenu_SIDE_BUTT[9][16] = // *************************************************************************************** -uint8_t MenuList_sorted[ARRAY_SIZE(MenuList)]; +uint8_t g_menu_list_sorted[ARRAY_SIZE(g_menu_list)]; -bool gIsInSubMenu; -uint8_t gMenuCursor; -int8_t gMenuScrollDirection; -int32_t gSubMenuSelection; +bool g_is_in_sub_menu; +uint8_t g_menu_cursor; +int8_t g_menu_scroll_direction; +int32_t g_sub_menu_selection; // edit box -char edit_original[17]; // a copy of the text before editing so that we can easily test for changes/differences -char edit[17]; -int edit_index; +char g_edit_original[17]; // a copy of the text before editing so that we can easily test for changes/differences +char g_edit[17]; +int g_edit_index; // *************************************************************************************** @@ -377,42 +377,42 @@ 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 hidden_menu_count = gHidden_menu_count; + unsigned int hidden_menu_count = g_hidden_menu_count; #ifndef ENABLE_F_CAL_MENU hidden_menu_count--; #endif - gMenuListCount = ARRAY_SIZE(MenuList_sorted); + g_menu_list_count = ARRAY_SIZE(g_menu_list_sorted); - for (i = 0; i < gMenuListCount; i++) - MenuList_sorted[i] = MenuList[i].menu_id; + for (i = 0; i < g_menu_list_count; i++) + g_menu_list_sorted[i] = g_menu_list[i].menu_id; // don't sort the hidden entries at the end, keep them at the end of the list - for (i = 0; i < (gMenuListCount - hidden_menu_count - 1); i++) + for (i = 0; i < (g_menu_list_count - hidden_menu_count - 1); i++) { unsigned int k; - unsigned int menu_id1 = MenuList_sorted[i]; - for (k = i + 1; k < (gMenuListCount - hidden_menu_count); 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 = MenuList_sorted[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; - MenuList_sorted[i] = menu_id1; - MenuList_sorted[k] = menu_id2; + g_menu_list_sorted[i] = menu_id1; + g_menu_list_sorted[k] = menu_id2; } } } if (hide_hidden) - gMenuListCount -= hidden_menu_count; // hide the hidden menu items + g_menu_list_count -= hidden_menu_count; // hide the hidden menu items } void UI_DisplayMenu(void) @@ -425,78 +425,78 @@ void UI_DisplayMenu(void) char Contact[16]; // clear the screen buffer - memset(gFrameBuffer, 0, sizeof(gFrameBuffer)); + memset(g_frame_buffer, 0, sizeof(g_frame_buffer)); #if 0 // original menu layout for (i = 0; i < 3; i++) - if (gMenuCursor > 0 || i > 0) - if ((gMenuListCount - 1) != gMenuCursor || i != 2) - UI_PrintString(MenuList[MenuList_sorted[gMenuCursor + i - 1]].name, 0, 0, i * 2, 8); + if (g_menu_cursor > 0 || i > 0) + if ((g_menu_list_count - 1) != g_menu_cursor || i != 2) + UI_PrintString(g_menu_list[g_menu_list_sorted[g_menu_cursor + i - 1]].name, 0, 0, i * 2, 8); // invert the current menu list item pixels for (i = 0; i < (8 * menu_list_width); i++) { - gFrameBuffer[2][i] ^= 0xFF; - gFrameBuffer[3][i] ^= 0xFF; + g_frame_buffer[2][i] ^= 0xFF; + g_frame_buffer[3][i] ^= 0xFF; } // draw vertical separating dotted line for (i = 0; i < 7; i++) - gFrameBuffer[i][(8 * menu_list_width) + 1] = 0xAA; + g_frame_buffer[i][(8 * menu_list_width) + 1] = 0xAA; // draw the little sub-menu triangle marker - if (gIsInSubMenu) - memmove(gFrameBuffer[0] + (8 * menu_list_width) + 1, BITMAP_CurrentIndicator, sizeof(BITMAP_CurrentIndicator)); + if (g_is_in_sub_menu) + memmove(g_frame_buffer[0] + (8 * menu_list_width) + 1, BITMAP_CurrentIndicator, sizeof(BITMAP_CurrentIndicator)); // draw the menu index number/count - sprintf(String, "%2u.%u", 1 + gMenuCursor, gMenuListCount); + sprintf(String, "%2u.%u", 1 + g_menu_cursor, g_menu_list_count); UI_PrintStringSmall(String, 2, 0, 6); #else { // new menu layout .. experimental & unfinished - const int menu_index = gMenuCursor; // current selected menu item + const int menu_index = g_menu_cursor; // current selected menu item i = 1; - if (!gIsInSubMenu) + if (!g_is_in_sub_menu) { while (i < 2) { // leading menu items - small text const int k = menu_index + i - 2; if (k < 0) - UI_PrintStringSmall(MenuList[MenuList_sorted[gMenuListCount + k]].name, 0, 0, i); // wrap-a-round + UI_PrintStringSmall(g_menu_list[g_menu_list_sorted[g_menu_list_count + k]].name, 0, 0, i); // wrap-a-round else - if (k >= 0 && k < (int)gMenuListCount) - UI_PrintStringSmall(MenuList[MenuList_sorted[k]].name, 0, 0, i); + if (k >= 0 && k < (int)g_menu_list_count) + UI_PrintStringSmall(g_menu_list[g_menu_list_sorted[k]].name, 0, 0, i); i++; } // current menu item - keep big n fat - if (menu_index >= 0 && menu_index < (int)gMenuListCount) - UI_PrintString(MenuList[MenuList_sorted[menu_index]].name, 0, 0, 2, 8); + if (menu_index >= 0 && menu_index < (int)g_menu_list_count) + UI_PrintString(g_menu_list[g_menu_list_sorted[menu_index]].name, 0, 0, 2, 8); i++; while (i < 4) { // trailing menu item - small text const int k = menu_index + i - 2; - if (k >= 0 && k < (int)gMenuListCount) - UI_PrintStringSmall(MenuList[MenuList_sorted[k]].name, 0, 0, 1 + i); + if (k >= 0 && k < (int)g_menu_list_count) + UI_PrintStringSmall(g_menu_list[g_menu_list_sorted[k]].name, 0, 0, 1 + i); else - if (k >= (int)gMenuListCount) - UI_PrintStringSmall(MenuList[MenuList_sorted[gMenuListCount - k]].name, 0, 0, 1 + i); // wrap-a-round + if (k >= (int)g_menu_list_count) + UI_PrintStringSmall(g_menu_list[g_menu_list_sorted[g_menu_list_count - k]].name, 0, 0, 1 + i); // wrap-a-round i++; } // draw the menu index number/count - sprintf(String, "%2u.%u", 1 + gMenuCursor, gMenuListCount); + sprintf(String, "%2u.%u", 1 + g_menu_cursor, g_menu_list_count); UI_PrintStringSmall(String, 2, 0, 6); } else - if (menu_index >= 0 && menu_index < (int)gMenuListCount) + if (menu_index >= 0 && menu_index < (int)g_menu_list_count) { // current menu item - strcpy(String, MenuList[MenuList_sorted[menu_index]].name); + 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); @@ -513,42 +513,42 @@ void UI_DisplayMenu(void) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wimplicit-fallthrough=" - switch (gMenuCursor) + switch (g_menu_cursor) { case MENU_SQL: - sprintf(String, "%d", gSubMenuSelection); + sprintf(String, "%d", g_sub_menu_selection); break; case MENU_MIC: { // display the mic gain in actual dB rather than just an index number - const uint8_t mic = gMicGain_dB2[gSubMenuSelection]; + const uint8_t mic = g_mic_gain_dB_2[g_sub_menu_selection]; sprintf(String, "+%u.%01udB", mic / 2, mic % 2); } break; #ifdef ENABLE_AUDIO_BAR case MENU_MIC_BAR: - strcpy(String, gSubMenu_OFF_ON[gSubMenuSelection]); + strcpy(String, g_sub_menu_off_on[g_sub_menu_selection]); break; #endif case MENU_STEP: - sprintf(String, "%d.%02ukHz", StepFrequencyTable[gSubMenuSelection] / 100, abs(StepFrequencyTable[gSubMenuSelection]) % 100); + sprintf(String, "%d.%02ukHz", STEP_FREQ_TABLE[g_sub_menu_selection] / 100, abs(STEP_FREQ_TABLE[g_sub_menu_selection]) % 100); break; case MENU_TXP: - strcpy(String, gSubMenu_TXP[gSubMenuSelection]); + strcpy(String, g_sub_menu_txp[g_sub_menu_selection]); break; case MENU_R_DCS: case MENU_T_DCS: - if (gSubMenuSelection == 0) + if (g_sub_menu_selection == 0) strcpy(String, "OFF"); else - if (gSubMenuSelection < 105) - sprintf(String, "D%03oN", DCS_Options[gSubMenuSelection - 1]); + if (g_sub_menu_selection < 105) + sprintf(String, "D%03oN", DCS_OPTIONS[g_sub_menu_selection - 1]); else - sprintf(String, "D%03oI", DCS_Options[gSubMenuSelection - 105]); + sprintf(String, "D%03oI", DCS_OPTIONS[g_sub_menu_selection - 105]); break; case MENU_R_CTCS: @@ -556,8 +556,8 @@ void UI_DisplayMenu(void) { #if 1 unsigned int Code; - FREQ_Config_t *pConfig = (gMenuCursor == MENU_R_CTCS) ? &gTxVfo->freq_config_rx : &gTxVfo->freq_config_tx; - if (gSubMenuSelection == 0) + freq_config_t *pConfig = (g_menu_cursor == MENU_R_CTCS) ? &g_tx_vfo->freq_config_rx : &g_tx_vfo->freq_config_tx; + if (g_sub_menu_selection == 0) { strcpy(String, "OFF"); @@ -571,41 +571,41 @@ void UI_DisplayMenu(void) } else { - sprintf(String, "%u.%uHz", CTCSS_Options[gSubMenuSelection - 1] / 10, CTCSS_Options[gSubMenuSelection - 1] % 10); + sprintf(String, "%u.%uHz", CTCSS_OPTIONS[g_sub_menu_selection - 1] / 10, CTCSS_OPTIONS[g_sub_menu_selection - 1] % 10); pConfig->code_type = CODE_TYPE_CONTINUOUS_TONE; - Code = gSubMenuSelection - 1; + Code = g_sub_menu_selection - 1; pConfig->code = Code; - BK4819_SetCTCSSFrequency(CTCSS_Options[Code]); + BK4819_SetCTCSSFrequency(CTCSS_OPTIONS[Code]); } #else - if (gSubMenuSelection == 0) + if (g_sub_menu_selection == 0) strcpy(String, "OFF"); else - sprintf(String, "%u.%uHz", CTCSS_Options[gSubMenuSelection - 1] / 10, CTCSS_Options[gSubMenuSelection - 1] % 10); + sprintf(String, "%u.%uHz", CTCSS_OPTIONS[g_sub_menu_selection - 1] / 10, CTCSS_OPTIONS[g_sub_menu_selection - 1] % 10); #endif break; } case MENU_SFT_D: - strcpy(String, gSubMenu_SFT_D[gSubMenuSelection]); + strcpy(String, g_sub_menu_shift_dir[g_sub_menu_selection]); break; case MENU_OFFSET: - if (!gIsInSubMenu || gInputBoxIndex == 0) + if (!g_is_in_sub_menu || g_input_box_index == 0) { - sprintf(String, "%d.%05u", gSubMenuSelection / 100000, abs(gSubMenuSelection) % 100000); + sprintf(String, "%d.%05u", g_sub_menu_selection / 100000, abs(g_sub_menu_selection) % 100000); UI_PrintString(String, menu_item_x1, menu_item_x2, 1, 8); } else { for (i = 0; i < 3; i++) - String[i ] = (gInputBox[i] == 10) ? '-' : gInputBox[i] + '0'; + String[i ] = (g_input_box[i] == 10) ? '-' : g_input_box[i] + '0'; String[3] = '.'; for (i = 3; i < 6; i++) - String[i + 1] = (gInputBox[i] == 10) ? '-' : gInputBox[i] + '0'; + String[i + 1] = (g_input_box[i] == 10) ? '-' : g_input_box[i] + '0'; String[ 7] = '-'; String[ 8] = '-'; String[ 9] = 0; @@ -620,14 +620,14 @@ void UI_DisplayMenu(void) break; case MENU_W_N: - strcpy(String, gSubMenu_W_N[gSubMenuSelection]); + strcpy(String, g_sub_menu_w_n[g_sub_menu_selection]); break; case MENU_SCR: - strcpy(String, gSubMenu_SCRAMBLER[gSubMenuSelection]); + strcpy(String, g_sub_menu_SCRAMBLER[g_sub_menu_selection]); #if 1 - if (gSubMenuSelection > 0 && gSetting_ScrambleEnable) - BK4819_EnableScramble(gSubMenuSelection - 1); + if (g_sub_menu_selection > 0 && g_setting_scramble_enable) + BK4819_EnableScramble(g_sub_menu_selection - 1); else BK4819_DisableScramble(); #endif @@ -635,35 +635,35 @@ void UI_DisplayMenu(void) #ifdef ENABLE_VOX case MENU_VOX: - if (gSubMenuSelection == 0) + if (g_sub_menu_selection == 0) strcpy(String, "OFF"); else - sprintf(String, "%d", gSubMenuSelection); + sprintf(String, "%d", g_sub_menu_selection); break; #endif case MENU_ABR: - strcpy(String, gSubMenu_backlight[gSubMenuSelection]); + strcpy(String, g_sub_menu_backlight[g_sub_menu_selection]); break; case MENU_AM: - strcpy(String, (gSubMenuSelection == 0) ? "FM" : "AM"); + strcpy(String, (g_sub_menu_selection == 0) ? "FM" : "AM"); break; #ifdef ENABLE_AM_FIX_TEST1 case MENU_AM_FIX_TEST1: - strcpy(String, gSubMenu_AM_fix_test1[gSubMenuSelection]); -// gSetting_AM_fix = gSubMenuSelection; + 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: - strcpy(String, (gSubMenuSelection == 0) ? "OFF" : "AUTO"); + strcpy(String, (g_sub_menu_selection == 0) ? "OFF" : "AUTO"); break; case MENU_COMPAND: case MENU_ABR_ON_TX_RX: - strcpy(String, gSubMenu_RX_TX[gSubMenuSelection]); + strcpy(String, g_sub_menu_rx_tx[g_sub_menu_selection]); break; #ifdef ENABLE_AM_FIX @@ -686,21 +686,21 @@ void UI_DisplayMenu(void) case MENU_350EN: case MENU_SCREN: case MENU_TX_EN: - strcpy(String, gSubMenu_OFF_ON[gSubMenuSelection]); + strcpy(String, g_sub_menu_off_on[g_sub_menu_selection]); break; case MENU_MEM_CH: case MENU_1_CALL: case MENU_DEL_CH: { - const bool valid = RADIO_CheckValidChannel(gSubMenuSelection, false, 0); + const bool valid = RADIO_CheckValidChannel(g_sub_menu_selection, false, 0); - UI_GenerateChannelStringEx(String, valid, gSubMenuSelection); + UI_GenerateChannelStringEx(String, valid, g_sub_menu_selection); UI_PrintString(String, menu_item_x1, menu_item_x2, 0, 8); - if (valid && !gAskForConfirmation) + if (valid && !g_ask_for_confirmation) { // show the frequency so that the user knows the channels frequency - const uint32_t frequency = BOARD_fetchChannelFrequency(gSubMenuSelection); + const uint32_t frequency = BOARD_fetchChannelFrequency(g_sub_menu_selection); sprintf(String, "%u.%05u", frequency / 100000, frequency % 100000); UI_PrintString(String, menu_item_x1, menu_item_x2, 4, 8); } @@ -711,33 +711,33 @@ void UI_DisplayMenu(void) case MENU_MEM_NAME: { - const bool valid = RADIO_CheckValidChannel(gSubMenuSelection, false, 0); + const bool valid = RADIO_CheckValidChannel(g_sub_menu_selection, false, 0); - UI_GenerateChannelStringEx(String, valid, gSubMenuSelection); + UI_GenerateChannelStringEx(String, valid, g_sub_menu_selection); UI_PrintString(String, menu_item_x1, menu_item_x2, 0, 8); if (valid) { - const uint32_t frequency = BOARD_fetchChannelFrequency(gSubMenuSelection); + const uint32_t frequency = BOARD_fetchChannelFrequency(g_sub_menu_selection); - if (!gIsInSubMenu || edit_index < 0) + if (!g_is_in_sub_menu || g_edit_index < 0) { // show the channel name - BOARD_fetchChannelName(String, gSubMenuSelection); + BOARD_fetchChannelName(String, g_sub_menu_selection); if (String[0] == 0) strcpy(String, "--"); UI_PrintString(String, menu_item_x1, menu_item_x2, 2, 8); } else { // show the channel name being edited - UI_PrintString(edit, menu_item_x1, 0, 2, 8); - if (edit_index < 10) - UI_PrintString( "^", menu_item_x1 + (8 * edit_index), 0, 4, 8); // show the cursor + UI_PrintString(g_edit, menu_item_x1, 0, 2, 8); + if (g_edit_index < 10) + UI_PrintString("^", menu_item_x1 + (8 * g_edit_index), 0, 4, 8); // show the cursor } - if (!gAskForConfirmation) + if (!g_ask_for_confirmation) { // show the frequency so that the user knows the channels frequency sprintf(String, "%u.%05u", frequency / 100000, frequency % 100000); - if (!gIsInSubMenu || edit_index < 0) + if (!g_is_in_sub_menu || g_edit_index < 0) UI_PrintString(String, menu_item_x1, menu_item_x2, 4, 8); else UI_PrintString(String, menu_item_x1, menu_item_x2, 5, 8); @@ -749,158 +749,158 @@ void UI_DisplayMenu(void) } case MENU_SAVE: - strcpy(String, gSubMenu_SAVE[gSubMenuSelection]); + strcpy(String, g_sub_menu_SAVE[g_sub_menu_selection]); break; case MENU_TDR: -// strcpy(String, gSubMenu_TDR[gSubMenuSelection]); - strcpy(String, gSubMenu_OFF_ON[gSubMenuSelection]); +// strcpy(String, g_sub_menu_tdr[g_sub_menu_selection]); + strcpy(String, g_sub_menu_off_on[g_sub_menu_selection]); break; case MENU_XB: - strcpy(String, gSubMenu_XB[gSubMenuSelection]); + strcpy(String, g_sub_menu_xb[g_sub_menu_selection]); break; case MENU_TOT: - strcpy(String, gSubMenu_TOT[gSubMenuSelection]); + strcpy(String, g_sub_menu_TOT[g_sub_menu_selection]); break; #ifdef ENABLE_VOICE case MENU_VOICE: - strcpy(String, gSubMenu_VOICE[gSubMenuSelection]); + strcpy(String, g_sub_menu_voice[g_sub_menu_selection]); break; #endif case MENU_SC_REV: - strcpy(String, gSubMenu_SC_REV[gSubMenuSelection]); + strcpy(String, g_sub_menu_sc_rev[g_sub_menu_selection]); break; case MENU_MDF: - strcpy(String, gSubMenu_MDF[gSubMenuSelection]); + strcpy(String, g_sub_menu_mdf[g_sub_menu_selection]); break; case MENU_RP_STE: - if (gSubMenuSelection == 0) + if (g_sub_menu_selection == 0) strcpy(String, "OFF"); else - sprintf(String, "%d*100ms", gSubMenuSelection); + sprintf(String, "%d*100ms", g_sub_menu_selection); break; case MENU_S_LIST: - if (gSubMenuSelection < 2) - sprintf(String, "LIST%u", 1 + gSubMenuSelection); + if (g_sub_menu_selection < 2) + sprintf(String, "LIST%u", 1 + g_sub_menu_selection); else strcpy(String, "ALL"); break; #ifdef ENABLE_ALARM case MENU_AL_MOD: - sprintf(String, gSubMenu_AL_MOD[gSubMenuSelection]); + sprintf(String, g_sub_menu_AL_MOD[g_sub_menu_selection]); break; #endif case MENU_ANI_ID: - strcpy(String, g_eeprom.ani_DTMF_id); + strcpy(String, g_eeprom.ani_dtmf_id); break; case MENU_UPCODE: - strcpy(String, g_eeprom.DTMF_up_code); + strcpy(String, g_eeprom.dtmf_up_code); break; case MENU_DWCODE: - strcpy(String, g_eeprom.DTMF_down_code); + strcpy(String, g_eeprom.dtmf_down_code); break; case MENU_D_RSP: - strcpy(String, gSubMenu_D_RSP[gSubMenuSelection]); + strcpy(String, g_sub_menu_D_RSP[g_sub_menu_selection]); break; case MENU_D_HOLD: // only allow 5, 10, 20, 30, 40, 50 or "STAY ON SCREEN" (60) - switch (gSubMenuSelection) + switch (g_sub_menu_selection) { - case 4: gSubMenuSelection = 60; break; - case 6: gSubMenuSelection = 10; break; - case 9: gSubMenuSelection = 5; break; - case 11: gSubMenuSelection = 20; break; - case 19: gSubMenuSelection = 10; break; - case 21: gSubMenuSelection = 30; break; - case 29: gSubMenuSelection = 20; break; - case 31: gSubMenuSelection = 40; break; - case 39: gSubMenuSelection = 30; break; - case 41: gSubMenuSelection = 50; break; - case 49: gSubMenuSelection = 40; break; - case 51: gSubMenuSelection = 60; break; - case 59: gSubMenuSelection = 50; break; - case 61: gSubMenuSelection = 5; break; + case 4: g_sub_menu_selection = 60; break; + case 6: g_sub_menu_selection = 10; break; + case 9: g_sub_menu_selection = 5; break; + case 11: g_sub_menu_selection = 20; break; + case 19: g_sub_menu_selection = 10; break; + case 21: g_sub_menu_selection = 30; break; + case 29: g_sub_menu_selection = 20; break; + case 31: g_sub_menu_selection = 40; break; + case 39: g_sub_menu_selection = 30; break; + case 41: g_sub_menu_selection = 50; break; + case 49: g_sub_menu_selection = 40; break; + case 51: g_sub_menu_selection = 60; break; + case 59: g_sub_menu_selection = 50; break; + case 61: g_sub_menu_selection = 5; break; } - - if (gSubMenuSelection < DTMF_HOLD_MAX) - sprintf(String, "%d sec", gSubMenuSelection); + + if (g_sub_menu_selection < DTMF_HOLD_MAX) + sprintf(String, "%d sec", g_sub_menu_selection); else strcpy(String, "STAY ON\nSCREEN"); // 60 break; case MENU_D_PRE: - sprintf(String, "%d*10ms", gSubMenuSelection); + sprintf(String, "%d*10ms", g_sub_menu_selection); break; case MENU_PTT_ID: - strcpy(String, gSubMenu_PTT_ID[gSubMenuSelection]); + strcpy(String, g_sub_menu_PTT_ID[g_sub_menu_selection]); break; case MENU_BAT_TXT: - strcpy(String, gSubMenu_BAT_TXT[gSubMenuSelection]); + strcpy(String, g_sub_menu_BAT_TXT[g_sub_menu_selection]); break; case MENU_D_LIST: - gIsDtmfContactValid = DTMF_GetContact((int)gSubMenuSelection - 1, Contact); - if (!gIsDtmfContactValid) + g_dtmf_is_contact_valid = DTMF_GetContact((int)g_sub_menu_selection - 1, Contact); + if (!g_dtmf_is_contact_valid) strcpy(String, "NULL"); else memmove(String, Contact, 8); break; case MENU_PONMSG: - strcpy(String, gSubMenu_PONMSG[gSubMenuSelection]); + strcpy(String, g_sub_menu_pwr_on_msg[g_sub_menu_selection]); break; case MENU_ROGER: - strcpy(String, gSubMenu_ROGER[gSubMenuSelection]); + strcpy(String, g_sub_menu_roger_mode[g_sub_menu_selection]); break; case MENU_VOL: sprintf(String, "%u.%02uV\n%u%%", - gBatteryVoltageAverage / 100, gBatteryVoltageAverage % 100, - BATTERY_VoltsToPercent(gBatteryVoltageAverage)); + g_battery_voltage_average / 100, g_battery_voltage_average % 100, + BATTERY_VoltsToPercent(g_battery_voltage_average)); break; case MENU_SIDE1_SHORT: case MENU_SIDE1_LONG: case MENU_SIDE2_SHORT: case MENU_SIDE2_LONG: - strcpy(String, gSubMenu_SIDE_BUTT[gSubMenuSelection]); + strcpy(String, g_sub_menu_SIDE_BUTT[g_sub_menu_selection]); break; case MENU_RESET: - strcpy(String, gSubMenu_RESET[gSubMenuSelection]); + strcpy(String, g_sub_menu_RESET[g_sub_menu_selection]); break; case MENU_F_LOCK: - strcpy(String, gSubMenu_F_LOCK[gSubMenuSelection]); + strcpy(String, g_sub_menu_f_lock[g_sub_menu_selection]); break; #ifdef ENABLE_F_CAL_MENU case MENU_F_CALI: { - const uint32_t value = 22656 + gSubMenuSelection; + const uint32_t value = 22656 + g_sub_menu_selection; const uint32_t xtal_Hz = (0x4f0000u + value) * 5; - writeXtalFreqCal(gSubMenuSelection, false); + writeXtalFreqCal(g_sub_menu_selection, false); sprintf(String, "%d\n%u.%06u\nMHz", - gSubMenuSelection, + g_sub_menu_selection, xtal_Hz / 1000000, xtal_Hz % 1000000); } break; @@ -908,8 +908,8 @@ void UI_DisplayMenu(void) case MENU_BATCAL: { - const uint16_t vol = (uint32_t)gBatteryVoltageAverage * gBatteryCalibration[3] / gSubMenuSelection; - sprintf(String, "%u.%02uV\n%u", vol / 100, vol % 100, gSubMenuSelection); + 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); break; } } @@ -970,24 +970,24 @@ void UI_DisplayMenu(void) } } - if (gMenuCursor == MENU_SLIST1 || gMenuCursor == MENU_SLIST2) + if (g_menu_cursor == MENU_SLIST1 || g_menu_cursor == MENU_SLIST2) { - i = (gMenuCursor == MENU_SLIST1) ? 0 : 1; + i = (g_menu_cursor == MENU_SLIST1) ? 0 : 1; -// if (gSubMenuSelection == 0xFF) - if (gSubMenuSelection < 0) +// if (g_sub_menu_selection == 0xFF) + if (g_sub_menu_selection < 0) strcpy(String, "NULL"); else - UI_GenerateChannelStringEx(String, true, gSubMenuSelection); + UI_GenerateChannelStringEx(String, true, g_sub_menu_selection); -// if (gSubMenuSelection == 0xFF || !g_eeprom.scan_list_enabled[i]) - if (gSubMenuSelection < 0 || !g_eeprom.scan_list_enabled[i]) +// if (g_sub_menu_selection == 0xFF || !g_eeprom.scan_list_enabled[i]) + if (g_sub_menu_selection < 0 || !g_eeprom.scan_list_enabled[i]) { // channel number UI_PrintString(String, menu_item_x1, menu_item_x2, 0, 8); // channel name - BOARD_fetchChannelName(String, gSubMenuSelection); + BOARD_fetchChannelName(String, g_sub_menu_selection); if (String[0] == 0) strcpy(String, "--"); UI_PrintString(String, menu_item_x1, menu_item_x2, 2, 8); @@ -998,7 +998,7 @@ void UI_DisplayMenu(void) UI_PrintString(String, menu_item_x1, menu_item_x2, 0, 8); // channel name - BOARD_fetchChannelName(String, gSubMenuSelection); + BOARD_fetchChannelName(String, g_sub_menu_selection); if (String[0] == 0) strcpy(String, "--"); UI_PrintStringSmall(String, menu_item_x1, menu_item_x2, 2); @@ -1017,54 +1017,54 @@ void UI_DisplayMenu(void) } } - if (gMenuCursor == MENU_MEM_CH || - gMenuCursor == MENU_DEL_CH || - gMenuCursor == MENU_1_CALL) + if (g_menu_cursor == MENU_MEM_CH || + g_menu_cursor == MENU_DEL_CH || + g_menu_cursor == MENU_1_CALL) { // display the channel name char s[11]; - BOARD_fetchChannelName(s, gSubMenuSelection); + BOARD_fetchChannelName(s, g_sub_menu_selection); if (s[0] == 0) strcpy(s, "--"); UI_PrintString(s, menu_item_x1, menu_item_x2, 2, 8); } - if ((gMenuCursor == MENU_R_CTCS || gMenuCursor == MENU_R_DCS) && gCssScanMode != CSS_SCAN_MODE_OFF) + if ((g_menu_cursor == MENU_R_CTCS || g_menu_cursor == MENU_R_DCS) && g_css_scan_mode != CSS_SCAN_MODE_OFF) UI_PrintString("SCAN", menu_item_x1, menu_item_x2, 4, 8); - if (gMenuCursor == MENU_UPCODE) - if (strlen(g_eeprom.DTMF_up_code) > 8) - UI_PrintString(g_eeprom.DTMF_up_code + 8, menu_item_x1, menu_item_x2, 4, 8); + if (g_menu_cursor == MENU_UPCODE) + if (strlen(g_eeprom.dtmf_up_code) > 8) + UI_PrintString(g_eeprom.dtmf_up_code + 8, menu_item_x1, menu_item_x2, 4, 8); - if (gMenuCursor == MENU_DWCODE) - if (strlen(g_eeprom.DTMF_down_code) > 8) - UI_PrintString(g_eeprom.DTMF_down_code + 8, menu_item_x1, menu_item_x2, 4, 8); + if (g_menu_cursor == MENU_DWCODE) + if (strlen(g_eeprom.dtmf_down_code) > 8) + UI_PrintString(g_eeprom.dtmf_down_code + 8, menu_item_x1, menu_item_x2, 4, 8); - if (gMenuCursor == MENU_D_LIST && gIsDtmfContactValid) + if (g_menu_cursor == MENU_D_LIST && g_dtmf_is_contact_valid) { Contact[11] = 0; - memmove(&gDTMF_ID, Contact + 8, 4); + memmove(&g_dtmf_id, Contact + 8, 4); sprintf(String, "ID:%s", Contact + 8); UI_PrintString(String, menu_item_x1, menu_item_x2, 4, 8); } - if (gMenuCursor == MENU_R_CTCS || - gMenuCursor == MENU_T_CTCS || - gMenuCursor == MENU_R_DCS || - gMenuCursor == MENU_T_DCS || - gMenuCursor == MENU_D_LIST) + 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) { unsigned int Offset; - NUMBER_ToDigits(gSubMenuSelection, String); - Offset = (gMenuCursor == MENU_D_LIST) ? 2 : 3; - UI_DisplaySmallDigits(Offset, String + (8 - Offset), 105, 0, false); + NUMBER_ToDigits(g_sub_menu_selection, String); + Offset = (g_menu_cursor == MENU_D_LIST) ? 2 : 3; + UI_Displaysmall_digits(Offset, String + (8 - Offset), 105, 0, false); } - if ((gMenuCursor == MENU_RESET || - gMenuCursor == MENU_MEM_CH || - gMenuCursor == MENU_MEM_NAME || - gMenuCursor == MENU_DEL_CH) && gAskForConfirmation) + if ((g_menu_cursor == MENU_RESET || + g_menu_cursor == MENU_MEM_CH || + g_menu_cursor == MENU_MEM_NAME || + g_menu_cursor == MENU_DEL_CH) && g_ask_for_confirmation) { // display confirmation - strcpy(String, (gAskForConfirmation == 1) ? "SURE?" : "WAIT!"); + 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 4bbf2b8..bf7e86d 100644 --- a/ui/menu.h +++ b/ui/menu.h @@ -23,13 +23,13 @@ #include "audio.h" // voice_id_t typedef struct { - const char name[7]; // menu display area only has room for 6 characters - voice_id_t voice_id; - uint8_t menu_id; + const char name[7]; // menu display area only has room for 6 characters + voice_id_t voice_id; + uint8_t menu_id; } t_menu_item; // currently this list MUST be in exactly the same order -// as the other menu list "MenuList[]" in "ui/menu.c", otherwise +// as the other menu list "g_menu_list[]" in "ui/menu.c", otherwise // you'll have big problems // // I'm going to fix that so that you can reorder the menu items @@ -137,53 +137,53 @@ enum // ************************************ }; -extern const unsigned int gHidden_menu_count; +extern const unsigned int g_hidden_menu_count; -extern const t_menu_item MenuList[]; -extern uint8_t MenuList_sorted[]; +extern const t_menu_item g_menu_list[]; +extern uint8_t g_menu_list_sorted[]; -extern const char gSubMenu_TXP[3][5]; -extern const char gSubMenu_SFT_D[3][4]; -extern const char gSubMenu_W_N[2][7]; -extern const char gSubMenu_OFF_ON[2][4]; -extern const char gSubMenu_SAVE[5][4]; -extern const char gSubMenu_TOT[11][7]; -extern const char gSubMenu_TDR[3][10]; -extern const char gSubMenu_XB[3][10]; +extern const char g_sub_menu_txp[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_off_on[2][4]; +extern const char g_sub_menu_SAVE[5][4]; +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]; #ifdef ENABLE_VOICE - extern const char gSubMenu_VOICE[3][4]; + extern const char g_sub_menu_voice[3][4]; #endif -extern const char gSubMenu_SC_REV[3][13]; -extern const char gSubMenu_MDF[4][15]; +extern const char g_sub_menu_sc_rev[3][13]; +extern const char g_sub_menu_mdf[4][15]; #ifdef ENABLE_ALARM - extern const char gSubMenu_AL_MOD[2][5]; + extern const char g_sub_menu_AL_MOD[2][5]; #endif -extern const char gSubMenu_D_RSP[4][11]; -extern const char gSubMenu_PTT_ID[5][15]; -extern const char gSubMenu_PONMSG[4][8]; -extern const char gSubMenu_ROGER[3][9]; -extern const char gSubMenu_RESET[2][4]; -extern const char gSubMenu_F_LOCK[6][4]; -extern const char gSubMenu_backlight[8][7]; -extern const char gSubMenu_RX_TX[4][6]; +extern const char g_sub_menu_D_RSP[4][11]; +extern const char g_sub_menu_PTT_ID[5][15]; +extern const char g_sub_menu_pwr_on_msg[4][8]; +extern const char g_sub_menu_roger_mode[3][9]; +extern const char g_sub_menu_RESET[2][4]; +extern const char g_sub_menu_f_lock[6][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 gSubMenu_AM_fix_test1[4][8]; + extern const char g_sub_menu_AM_fix_test1[4][8]; #endif -extern const char gSubMenu_BAT_TXT[3][8]; +extern const char g_sub_menu_BAT_TXT[3][8]; -extern const char gSubMenu_SCRAMBLER[11][7]; +extern const char g_sub_menu_SCRAMBLER[11][7]; -extern const char gSubMenu_SIDE_BUTT[9][16]; +extern const char g_sub_menu_SIDE_BUTT[9][16]; -extern bool gIsInSubMenu; +extern bool g_is_in_sub_menu; -extern uint8_t gMenuCursor; -extern int8_t gMenuScrollDirection; -extern int32_t gSubMenuSelection; +extern uint8_t g_menu_cursor; +extern int8_t g_menu_scroll_direction; +extern int32_t g_sub_menu_selection; -extern char edit_original[17]; -extern char edit[17]; -extern int edit_index; +extern char g_edit_original[17]; +extern char g_edit[17]; +extern int g_edit_index; void UI_SortMenu(const bool hide_hidden); void UI_DisplayMenu(void); diff --git a/ui/scanner.c b/ui/scanner.c index bca399b..cbaf998 100644 --- a/ui/scanner.c +++ b/ui/scanner.c @@ -32,10 +32,10 @@ void UI_DisplayScanner(void) char String[16]; bool text_centered = false; - memset(gFrameBuffer, 0, sizeof(gFrameBuffer)); + memset(g_frame_buffer, 0, sizeof(g_frame_buffer)); memset(String, 0, sizeof(String)); - if (gScanSingleFrequency || (gScanCssState != SCAN_CSS_STATE_OFF && gScanCssState != SCAN_CSS_STATE_FAILED)) + if (g_scan_single_frequency || (gScanCssState != SCAN_CSS_STATE_OFF && gScanCssState != SCAN_CSS_STATE_FAILED)) { const uint32_t freq = gScanFrequency; sprintf(String, "FREQ %u.%05u", freq / 100000, freq % 100000); @@ -51,9 +51,9 @@ void UI_DisplayScanner(void) strcpy(String, "CODE scanning"); else if (gScanCssResultType == CODE_TYPE_CONTINUOUS_TONE) - sprintf(String, " CTC %u.%uHz", CTCSS_Options[gScanCssResultCode] / 10, CTCSS_Options[gScanCssResultCode] % 10); + sprintf(String, " CTC %u.%uHz", CTCSS_OPTIONS[gScanCssResultCode] / 10, CTCSS_OPTIONS[gScanCssResultCode] % 10); else - sprintf(String, " DCS D%03oN", DCS_Options[gScanCssResultCode]); + sprintf(String, " DCS D%03oN", DCS_OPTIONS[gScanCssResultCode]); UI_PrintString(String, 2, 0, 3, 8); memset(String, 0, sizeof(String)); @@ -81,7 +81,7 @@ void UI_DisplayScanner(void) case SCAN_EDIT_STATE_BUSY: strcpy(String, "SAVE "); - UI_GenerateChannelStringEx(String + 5, gShowChPrefix, gScanChannel); + UI_GenerateChannelStringEx(String + 5, g_show_chan_prefix, gScanChannel); break; case SCAN_EDIT_STATE_DONE: diff --git a/ui/status.c b/ui/status.c index 33ff0f2..f32c9f2 100644 --- a/ui/status.c +++ b/ui/status.c @@ -34,32 +34,32 @@ void UI_DisplayStatus(const bool test_display) { - uint8_t *line = gStatusLine; + uint8_t *line = g_status_line; unsigned int x = 0; unsigned int x1 = 0; - gUpdateStatus = false; + g_update_status = false; - memset(gStatusLine, 0, sizeof(gStatusLine)); + memset(g_status_line, 0, sizeof(g_status_line)); // ************** // POWER-SAVE indicator - if (gCurrentFunction == FUNCTION_TRANSMIT) + if (g_current_function == FUNCTION_TRANSMIT) { memmove(line + x, BITMAP_TX, sizeof(BITMAP_TX)); x1 = x + sizeof(BITMAP_TX); } else - if (gCurrentFunction == FUNCTION_RECEIVE || - gCurrentFunction == FUNCTION_MONITOR || - gCurrentFunction == FUNCTION_INCOMING) + if (g_current_function == FUNCTION_RECEIVE || + g_current_function == FUNCTION_MONITOR || + g_current_function == FUNCTION_INCOMING) { memmove(line + x, BITMAP_RX, sizeof(BITMAP_RX)); x1 = x + sizeof(BITMAP_RX); } else - if (gCurrentFunction == FUNCTION_POWER_SAVE || test_display) + if (g_current_function == FUNCTION_POWER_SAVE || test_display) { memmove(line + x, BITMAP_POWERSAVE, sizeof(BITMAP_POWERSAVE)); x1 = x + sizeof(BITMAP_POWERSAVE); @@ -68,7 +68,7 @@ void UI_DisplayStatus(const bool test_display) #ifdef ENABLE_NOAA // NOASS SCAN indicator - if (gIsNoaaMode || test_display) + if (g_is_noaa_mode || test_display) { memmove(line + x, BITMAP_NOAA, sizeof(BITMAP_NOAA)); x1 = x + sizeof(BITMAP_NOAA); @@ -78,7 +78,7 @@ void UI_DisplayStatus(const bool test_display) // hmmm, what to put in it's place #endif - if (gSetting_KILLED) + if (g_setting_killed) { memset(line + x, 0xFF, 10); x1 = x + 10; @@ -86,7 +86,7 @@ void UI_DisplayStatus(const bool test_display) else #ifdef ENABLE_FMRADIO // FM indicator - if (gFmRadioMode || test_display) + if (g_fm_radio_mode || test_display) { memmove(line + x, BITMAP_FM, sizeof(BITMAP_FM)); x1 = x + sizeof(BITMAP_FM); @@ -94,9 +94,9 @@ void UI_DisplayStatus(const bool test_display) else #endif // SCAN indicator - if (gScanStateDir != SCAN_OFF || gScreenToDisplay == DISPLAY_SCANNER || test_display) + if (g_scan_state_dir != SCAN_OFF || g_screen_to_display == DISPLAY_SCANNER || test_display) { - if (gNextChannel <= USER_CHANNEL_LAST) + if (g_next_channel <= USER_CHANNEL_LAST) { // channel mode if (g_eeprom.scan_list_default == 0) UI_PrintStringSmallBuffer("1", line + x); @@ -119,10 +119,10 @@ void UI_DisplayStatus(const bool test_display) // VOICE indicator if (g_eeprom.voice_prompt != VOICE_PROMPT_OFF || test_display) { - memmove(line + x, BITMAP_VoicePrompt, sizeof(BITMAP_VoicePrompt)); - x1 = x + sizeof(BITMAP_VoicePrompt); + memmove(line + x, BITMAP_VOICE_PROMPT, sizeof(BITMAP_VOICE_PROMPT)); + x1 = x + sizeof(BITMAP_VOICE_PROMPT); } - x += sizeof(BITMAP_VoicePrompt); + x += sizeof(BITMAP_VOICE_PROMPT); #else // hmmm, what to put in it's place #endif @@ -130,7 +130,7 @@ void UI_DisplayStatus(const bool test_display) // DUAL-WATCH indicator if (g_eeprom.dual_watch != DUAL_WATCH_OFF || test_display) { - if (gDualWatchActive || test_display) + if (g_dual_watch_active || test_display) memmove(line + x, BITMAP_TDR1, sizeof(BITMAP_TDR1)); else memmove(line + x, BITMAP_TDR2, sizeof(BITMAP_TDR2)); @@ -158,15 +158,15 @@ void UI_DisplayStatus(const bool test_display) // KEY-LOCK indicator if (g_eeprom.key_lock || test_display) { - memmove(line + x, BITMAP_KeyLock, sizeof(BITMAP_KeyLock)); - x += sizeof(BITMAP_KeyLock); + memmove(line + x, BITMAP_KEYLOCK, sizeof(BITMAP_KEYLOCK)); + x += sizeof(BITMAP_KEYLOCK); x1 = x; } else - if (g_was_f_key_pressed) + if (g_f_key_was_pressed) { - memmove(line + x, BITMAP_F_Key, sizeof(BITMAP_F_Key)); - x += sizeof(BITMAP_F_Key); + memmove(line + x, BITMAP_F_KEY, sizeof(BITMAP_F_KEY)); + x += sizeof(BITMAP_F_KEY); x1 = x; } @@ -176,10 +176,10 @@ void UI_DisplayStatus(const bool test_display) unsigned int x2 = LCD_WIDTH - sizeof(BITMAP_BATTERY_LEVEL) - 3; - if (gChargingWithTypeC) + if (g_charging_with_type_c) x2 -= sizeof(BITMAP_USB_C); // the radio is on charge - switch (gSetting_battery_text) + switch (g_setting_battery_text) { default: case 0: @@ -187,7 +187,7 @@ void UI_DisplayStatus(const bool test_display) case 1: // voltage { - const uint16_t voltage = (gBatteryVoltageAverage <= 999) ? gBatteryVoltageAverage : 999; // limit to 9.99V + const uint16_t voltage = (g_battery_voltage_average <= 999) ? g_battery_voltage_average : 999; // limit to 9.99V sprintf(s, "%u.%02uV", voltage / 100, voltage % 100); space_needed = (7 * strlen(s)); if (x2 >= (x1 + space_needed)) @@ -199,7 +199,7 @@ void UI_DisplayStatus(const bool test_display) case 2: // percentage { - sprintf(s, "%u%%", BATTERY_VoltsToPercent(gBatteryVoltageAverage)); + sprintf(s, "%u%%", BATTERY_VoltsToPercent(g_battery_voltage_average)); space_needed = (7 * strlen(s)); if (x2 >= (x1 + space_needed)) UI_PrintStringSmallBuffer(s, line + x2 - space_needed); @@ -212,13 +212,13 @@ void UI_DisplayStatus(const bool test_display) x = LCD_WIDTH - sizeof(BITMAP_BATTERY_LEVEL) - sizeof(BITMAP_USB_C); // USB-C charge indicator - if (gChargingWithTypeC || test_display) + if (g_charging_with_type_c || test_display) memmove(line + x, BITMAP_USB_C, sizeof(BITMAP_USB_C)); x += sizeof(BITMAP_USB_C); { // BATTERY LEVEL indicator uint8_t bitmap[sizeof(BITMAP_BATTERY_LEVEL)]; - unsigned int i = gBatteryDisplayLevel; + unsigned int i = g_battery_display_level; memmove(bitmap, BITMAP_BATTERY_LEVEL, sizeof(BITMAP_BATTERY_LEVEL)); @@ -237,7 +237,7 @@ void UI_DisplayStatus(const bool test_display) } } else - if (gLowBattery) + if (g_low_battery) memset(bitmap, 0, sizeof(bitmap)); memmove(line + x, bitmap, sizeof(bitmap)); diff --git a/ui/ui.c b/ui/ui.c index 893a985..67e11fd 100644 --- a/ui/ui.c +++ b/ui/ui.c @@ -35,16 +35,15 @@ #include "ui/scanner.h" #include "ui/ui.h" -GUI_DisplayType_t gScreenToDisplay; -GUI_DisplayType_t gRequestDisplayScreen = DISPLAY_INVALID; - -uint8_t gAskForConfirmation; -bool gAskToSave; -bool gAskToDelete; +gui_display_type_t g_screen_to_display; +gui_display_type_t g_request_display_screen = DISPLAY_INVALID; +uint8_t g_ask_for_confirmation; +bool g_ask_to_save; +bool g_ask_to_delete; void GUI_DisplayScreen(void) { - switch (gScreenToDisplay) + switch (g_screen_to_display) { case DISPLAY_MAIN: UI_DisplayMain(); @@ -75,30 +74,30 @@ void GUI_DisplayScreen(void) } } -void GUI_SelectNextDisplay(GUI_DisplayType_t Display) +void GUI_SelectNextDisplay(gui_display_type_t Display) { if (Display == DISPLAY_INVALID) return; - if (gScreenToDisplay != Display) + if (g_screen_to_display != Display) { DTMF_clear_input_box(); - gInputBoxIndex = 0; - gIsInSubMenu = false; - gCssScanMode = CSS_SCAN_MODE_OFF; - gScanStateDir = SCAN_OFF; + g_input_box_index = 0; + g_is_in_sub_menu = false; + g_css_scan_mode = CSS_SCAN_MODE_OFF; + g_scan_state_dir = SCAN_OFF; #ifdef ENABLE_FMRADIO - gFM_ScanState = FM_SCAN_OFF; + g_fm_scan_state = FM_SCAN_OFF; #endif - gAskForConfirmation = 0; - gAskToSave = false; - gAskToDelete = false; - g_was_f_key_pressed = false; + g_ask_for_confirmation = 0; + g_ask_to_save = false; + g_ask_to_delete = false; + g_f_key_was_pressed = false; - gUpdateStatus = true; + g_update_status = true; } - gScreenToDisplay = Display; - gUpdateDisplay = true; + g_screen_to_display = Display; + g_update_display = true; } diff --git a/ui/ui.h b/ui/ui.h index 8a107d9..664bb13 100644 --- a/ui/ui.h +++ b/ui/ui.h @@ -20,27 +20,25 @@ #include #include -enum GUI_DisplayType_t +enum gui_display_type_e { DISPLAY_MAIN = 0, DISPLAY_FM, DISPLAY_MENU, DISPLAY_SCANNER, DISPLAY_AIRCOPY, - DISPLAY_INVALID = 0xFFu + DISPLAY_INVALID // 0xff }; +typedef enum gui_display_type_e gui_display_type_t; -typedef enum GUI_DisplayType_t GUI_DisplayType_t; - -extern GUI_DisplayType_t gScreenToDisplay; -extern GUI_DisplayType_t gRequestDisplayScreen; - -extern uint8_t gAskForConfirmation; -extern bool gAskToSave; -extern bool gAskToDelete; +extern gui_display_type_t g_screen_to_display; +extern gui_display_type_t g_request_display_screen; +extern uint8_t g_ask_for_confirmation; +extern bool g_ask_to_save; +extern bool g_ask_to_delete; void GUI_DisplayScreen(void); -void GUI_SelectNextDisplay(GUI_DisplayType_t Display); +void GUI_SelectNextDisplay(gui_display_type_t Display); #endif diff --git a/ui/welcome.c b/ui/welcome.c index 5368fb3..90c5083 100644 --- a/ui/welcome.c +++ b/ui/welcome.c @@ -29,8 +29,8 @@ void UI_DisplayReleaseKeys(void) { - memset(gStatusLine, 0, sizeof(gStatusLine)); - memset(gFrameBuffer, 0, sizeof(gFrameBuffer)); + memset(g_status_line, 0, sizeof(g_status_line)); + memset(g_frame_buffer, 0, sizeof(g_frame_buffer)); UI_PrintString("RELEASE", 0, 127, 1, 10); UI_PrintString("ALL KEYS", 0, 127, 3, 10); @@ -45,8 +45,8 @@ void UI_DisplayWelcome(void) char WelcomeString1[16]; char WelcomeString2[16]; - memset(gStatusLine, 0, sizeof(gStatusLine)); - memset(gFrameBuffer, 0, sizeof(gFrameBuffer)); + memset(g_status_line, 0, sizeof(g_status_line)); + memset(g_frame_buffer, 0, sizeof(g_frame_buffer)); if (g_eeprom.pwr_on_display_mode == PWR_ON_DISPLAY_MODE_NONE) { @@ -67,12 +67,12 @@ void UI_DisplayWelcome(void) { strcpy(WelcomeString0, "VOLTAGE"); sprintf(WelcomeString1, "%u.%02uV %u%%", - gBatteryVoltageAverage / 100, - gBatteryVoltageAverage % 100, - BATTERY_VoltsToPercent(gBatteryVoltageAverage)); + g_battery_voltage_average / 100, + g_battery_voltage_average % 100, + BATTERY_VoltsToPercent(g_battery_voltage_average)); #if 0 - sprintf(WelcomeString2, "Current %u", gBatteryCurrent); // needs scaling into mA + sprintf(WelcomeString2, "Current %u", g_battery_current); // needs scaling into mA #endif } else