From 4153389778d21850dc6496bc07ef4a3afa8fbfce Mon Sep 17 00:00:00 2001 From: OneOfEleven Date: Sat, 28 Oct 2023 14:07:41 +0100 Subject: [PATCH] FM radio updates - faster scanning and gui update, also some renames --- Makefile | 14 +-- README.md | 2 +- am_fix.c | 2 +- app/action.c | 10 +- app/aircopy.c | 12 +-- app/app.c | 237 ++++++++++++++++++++++---------------------- app/dtmf.c | 10 +- app/dtmf.h | 4 +- app/fm.c | 32 +++--- app/fm.h | 8 +- app/generic.c | 16 +-- app/main.c | 12 +-- app/menu.c | 4 +- app/uart.c | 10 +- audio.c | 8 +- audio.h | 2 +- driver/bk1080.c | 103 +++++++++++++++---- driver/bk1080.h | 2 +- driver/bk4819.c | 5 +- firmware.bin | Bin 58172 -> 59200 bytes firmware.packed.bin | Bin 58190 -> 59218 bytes frequencies.c | 8 +- functions.c | 16 +-- helper/battery.c | 2 +- main.c | 12 ++- misc.c | 44 ++++---- misc.h | 46 ++++----- radio.c | 21 ++-- scheduler.c | 22 ++-- ui/aircopy.c | 2 +- ui/fmradio.c | 60 +++++++---- ui/main.c | 24 ++--- ui/search.c | 2 +- ui/status.c | 4 +- ui/ui.c | 10 +- ui/ui.h | 2 +- 36 files changed, 431 insertions(+), 337 deletions(-) diff --git a/Makefile b/Makefile index 439a648..79abd25 100644 --- a/Makefile +++ b/Makefile @@ -14,14 +14,14 @@ ENABLE_LTO := 1 ENABLE_UART := 1 ENABLE_UART_DEBUG := 1 # AirCopy 2.5 kB -ENABLE_AIRCOPY := 1 +ENABLE_AIRCOPY := 0 ENABLE_AIRCOPY_REMEMBER_FREQ := 1 ENABLE_AIRCOPY_RX_REBOOT := 0 # FM Radio 4.2 kB +ENABLE_FMRADIO_64_76 := 0 ENABLE_FMRADIO_76_90 := 0 -ENABLE_FMRADIO_68_108 := 0 ENABLE_FMRADIO_76_108 := 0 -ENABLE_FMRADIO_875_108 := 0 +ENABLE_FMRADIO_875_108 := 1 # NOAA 1.2 kB ENABLE_NOAA := 0 # Voice 1.7 kB @@ -105,7 +105,7 @@ ifeq ($(ENABLE_LTO),1) ENABLE_OVERLAY := 0 endif -ifeq ($(filter $(ENABLE_FMRADIO_76_90) $(ENABLE_FMRADIO_68_108) $(ENABLE_FMRADIO_76_108) $(ENABLE_FMRADIO_875_108), 1), 1) +ifeq ($(filter $(ENABLE_FMRADIO_64_76) $(ENABLE_FMRADIO_76_90) $(ENABLE_FMRADIO_76_108) $(ENABLE_FMRADIO_875_108), 1), 1) ENABLE_FMRADIO := 1 else ENABLE_FMRADIO := 0 @@ -295,12 +295,12 @@ endif ifeq ($(ENABLE_AIRCOPY_RX_REBOOT),1) CFLAGS += -DENABLE_AIRCOPY_RX_REBOOT endif +ifeq ($(ENABLE_FMRADIO_64_76),1) + CFLAGS += -DENABLE_FMRADIO_64_76 +endif ifeq ($(ENABLE_FMRADIO_76_90),1) CFLAGS += -DENABLE_FMRADIO_76_90 endif -ifeq ($(ENABLE_FMRADIO_68_108),1) - CFLAGS += -DENABLE_FMRADIO_68_108 -endif ifeq ($(ENABLE_FMRADIO_76_108),1) CFLAGS += -DENABLE_FMRADIO_76_108 endif diff --git a/README.md b/README.md index d541c39..65cf246 100644 --- a/README.md +++ b/README.md @@ -45,8 +45,8 @@ ENABLE_UART_DEBUG := 0 just for code debugging, it sends de ENABLE_AIRCOPY := 1 clone radio-to-radio via RF ENABLE_AIRCOPY_REMEMBER_FREQ := 1 remember the aircopy frequency ENABLE_AIRCOPY_RX_REBOOT := 0 auto reboot on an aircopy successful RX completion +ENABLE_FMRADIO_64_76 := 0 enable FM radio 64MHz ~ 76MHz ENABLE_FMRADIO_76_90 := 0 enable FM radio 76MHz ~ 90MHz -ENABLE_FMRADIO_68_108 := 0 enable FM radio 68MHz ~ 108MHz ENABLE_FMRADIO_76_108 := 0 enable FM radio 76MHz ~ 108MHz ENABLE_FMRADIO_875_108 := 1 enable FM radio 87.5MHz ~ 108MHz ENABLE_NOAA := 0 everything NOAA (only of any use in the USA) diff --git a/am_fix.c b/am_fix.c index e08f332..e76fa24 100644 --- a/am_fix.c +++ b/am_fix.c @@ -449,7 +449,7 @@ void AM_fix_print_data(const int vfo, char *s) { - if (g_screen_to_display != DISPLAY_MAIN || g_dtmf_call_state != DTMF_CALL_STATE_NONE) + if (g_current_display_screen != DISPLAY_MAIN || g_dtmf_call_state != DTMF_CALL_STATE_NONE) return; if (s != NULL && vfo >= 0 && vfo < (int)ARRAY_SIZE(gain_table_index)) diff --git a/app/action.c b/app/action.c index 9008d4d..69144dd 100644 --- a/app/action.c +++ b/app/action.c @@ -71,7 +71,7 @@ void ACTION_Power(void) g_another_voice_id = VOICE_ID_POWER; #endif - g_request_display_screen = g_screen_to_display; + g_request_display_screen = g_current_display_screen; } void ACTION_Monitor(void) @@ -97,7 +97,7 @@ void ACTION_Monitor(void) #ifdef g_power_save_expired if (g_eeprom.dual_watch == DUAL_WATCH_OFF && g_is_noaa_mode) { - g_noaa_count_down_10ms = noaa_count_down_10ms; + g_noaa_tick_10ms = noaa_tick_10ms; g_schedule_noaa = false; } #endif @@ -112,7 +112,7 @@ void ACTION_Monitor(void) } else #endif - g_request_display_screen = g_screen_to_display; + g_request_display_screen = g_current_display_screen; } void ACTION_Scan(bool bRestart) @@ -169,7 +169,7 @@ void ACTION_Scan(bool bRestart) } #endif - if (g_screen_to_display != DISPLAY_SEARCH) + if (g_current_display_screen != DISPLAY_SEARCH) { // not in freq/ctcss/cdcss search mode g_monitor_enabled = false; @@ -302,7 +302,7 @@ void ACTION_Scan(bool bRestart) g_flag_prepare_tx = true; - if (g_screen_to_display != DISPLAY_MENU) // 1of11 .. don't close the menu + if (g_current_display_screen != DISPLAY_MENU) // 1of11 .. don't close the menu g_request_display_screen = DISPLAY_MAIN; } #endif diff --git a/app/aircopy.c b/app/aircopy.c index 91cf0b6..8cf6530 100644 --- a/app/aircopy.c +++ b/app/aircopy.c @@ -73,7 +73,7 @@ uint16_t g_fsk_buffer[AIRCOPY_DATA_PACKET_SIZE / 2]; unsigned int g_fsk_write_index; uint16_t g_fsk_tx_timeout_10ms; -uint8_t aircopy_send_count_down_10ms; +uint8_t aircopy_send_tick_10ms; void AIRCOPY_init(void) { @@ -255,7 +255,7 @@ void AIRCOPY_stop_fsk_tx(void) g_aircopy_block_number++; // TX pause/gap time till we start the next packet - aircopy_send_count_down_10ms = 250 / 10; // 250ms + aircopy_send_tick_10ms = 250 / 10; // 250ms g_update_display = true; GUI_DisplayScreen(); @@ -278,8 +278,8 @@ void AIRCOPY_process_fsk_tx_10ms(void) if (g_fsk_write_index > 0) return; // currently RX'ing a packet - if (aircopy_send_count_down_10ms > 0) - if (--aircopy_send_count_down_10ms > 0) + if (aircopy_send_tick_10ms > 0) + if (--aircopy_send_tick_10ms > 0) return; // not yet time to TX next packet if (g_aircopy_block_number >= g_aircopy_block_max) @@ -526,7 +526,7 @@ void AIRCOPY_process_fsk_rx_10ms(void) else { // send them the block they want g_aircopy_block_number = block_num; // go to the block number they want - aircopy_send_count_down_10ms = 0; // TX asap + aircopy_send_tick_10ms = 0; // TX asap } } @@ -800,7 +800,7 @@ static void AIRCOPY_Key_MENU(bool key_pressed, bool key_held) g_aircopy_rx_errors_magic = 0; g_aircopy_rx_errors_crc = 0; g_fsk_tx_timeout_10ms = 0; - aircopy_send_count_down_10ms = 0; + aircopy_send_tick_10ms = 0; g_aircopy_state = AIRCOPY_TX; g_update_display = true; diff --git a/app/app.c b/app/app.c index f792737..0dc60b1 100644 --- a/app/app.c +++ b/app/app.c @@ -122,7 +122,7 @@ static void APP_check_for_new_receive(void) #ifdef ENABLE_NOAA if (g_is_noaa_mode) { - g_noaa_count_down_10ms = noaa_count_down_3_10ms; + g_noaa_tick_10ms = noaa_tick_3_10ms; g_schedule_noaa = false; } #endif @@ -192,9 +192,9 @@ static void APP_process_new_receive(void) flag = (g_scan_state_dir == SCAN_STATE_DIR_OFF && g_current_code_type == CODE_TYPE_NONE); #ifdef ENABLE_NOAA - if (IS_NOAA_CHANNEL(g_rx_vfo->channel_save) && g_noaa_count_down_10ms > 0) + if (IS_NOAA_CHANNEL(g_rx_vfo->channel_save) && g_noaa_tick_10ms > 0) { - g_noaa_count_down_10ms = 0; + g_noaa_tick_10ms = 0; flag = true; } #endif @@ -291,7 +291,7 @@ static void APP_process_rx(void) break; case CODE_TYPE_CONTINUOUS_TONE: - if (g_found_ctcss && g_found_ctcss_count_down_10ms == 0) + if (g_found_ctcss && g_found_ctcss_tick_10ms == 0) { g_found_ctcss = false; g_found_cdcss = false; @@ -302,7 +302,7 @@ static void APP_process_rx(void) case CODE_TYPE_DIGITAL: case CODE_TYPE_REVERSE_DIGITAL: - if (g_found_cdcss && g_found_cdcss_count_down_10ms == 0) + if (g_found_cdcss && g_found_cdcss_tick_10ms == 0) { g_found_ctcss = false; g_found_cdcss = false; @@ -341,7 +341,7 @@ static void APP_process_rx(void) if (!g_found_ctcss) { g_found_ctcss = true; - g_found_ctcss_count_down_10ms = 100; // 1 sec + g_found_ctcss_tick_10ms = 100; // 1 sec } if (g_cxcss_tail_found) @@ -361,7 +361,7 @@ static void APP_process_rx(void) if (!g_found_cdcss) { g_found_cdcss = true; - g_found_cdcss_count_down_10ms = 100; // 1 sec + g_found_cdcss_tick_10ms = 100; // 1 sec } if (g_cxcss_tail_found) @@ -406,7 +406,7 @@ Skip: #ifdef ENABLE_NOAA if (IS_NOAA_CHANNEL(g_rx_vfo->channel_save)) - g_noaa_count_down_10ms = 3000 / 10; // 3 sec + g_noaa_tick_10ms = 3000 / 10; // 3 sec #endif g_update_display = true; @@ -419,7 +419,7 @@ Skip: { GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER); - g_tail_tone_elimination_count_down_10ms = 20; + g_tail_tone_elimination_tick_10ms = 20; g_flag_tail_tone_elimination_complete = false; g_end_of_rx_detected_maybe = true; g_speaker_enabled = false; @@ -549,7 +549,7 @@ bool APP_start_listening(function_type_t Function) g_rx_vfo->p_rx->frequency = NOAA_FREQUENCY_TABLE[g_noaa_channel]; g_rx_vfo->p_tx->frequency = NOAA_FREQUENCY_TABLE[g_noaa_channel]; g_eeprom.screen_channel[chan] = g_rx_vfo->channel_save; - g_noaa_count_down_10ms = 5000 / 10; // 5 sec + g_noaa_tick_10ms = 5000 / 10; // 5 sec g_schedule_noaa = false; } #endif @@ -601,7 +601,7 @@ bool APP_start_listening(function_type_t Function) if (Function == FUNCTION_MONITOR) #endif { // monitor mode (open squelch) - if (g_screen_to_display != DISPLAY_MENU) // 1of11 .. don't close the menu + if (g_current_display_screen != DISPLAY_MENU) // 1of11 .. don't close the menu GUI_SelectNextDisplay(DISPLAY_MAIN); } else @@ -909,7 +909,7 @@ static void APP_toggle_dual_watch_vfo(void) void APP_process_radio_interrupts(void) { - if (g_screen_to_display == DISPLAY_SEARCH) + if (g_current_display_screen == DISPLAY_SEARCH) return; while (BK4819_ReadRegister(0x0C) & (1u << 0)) @@ -981,6 +981,10 @@ void APP_process_radio_interrupts(void) if (interrupt_bits & BK4819_REG_02_CTCSS_FOUND) g_ctcss_lost = false; + #ifdef ENABLE_MDC1200 + MDC1200_process_rx(interrupt_bits); + #endif + #ifdef ENABLE_VOX if (interrupt_bits & BK4819_REG_02_VOX_LOST) { @@ -1029,10 +1033,6 @@ void APP_process_radio_interrupts(void) UART_SendText("sq open\r\n"); #endif } - - #ifdef ENABLE_MDC1200 - MDC1200_process_rx(interrupt_bits); - #endif } } @@ -1095,9 +1095,9 @@ void APP_end_tx(void) if (g_vox_noise_detected) { if (g_vox_lost) - g_vox_stop_count_down_10ms = vox_stop_count_down_10ms; + g_vox_stop_10ms = vox_stop_10ms; else - if (g_vox_stop_count_down_10ms == 0) + if (g_vox_stop_10ms == 0) g_vox_noise_detected = false; if (g_current_function == FUNCTION_TRANSMIT && @@ -1136,7 +1136,7 @@ void APP_end_tx(void) if (g_current_function == FUNCTION_POWER_SAVE) FUNCTION_Select(FUNCTION_FOREGROUND); - if (g_current_function != FUNCTION_TRANSMIT && g_serial_config_count_down_500ms == 0) + if (g_current_function != FUNCTION_TRANSMIT && g_serial_config_tick_500ms == 0) { g_dtmf_reply_state = DTMF_REPLY_NONE; RADIO_PrepareTX(); @@ -1156,7 +1156,7 @@ void APP_process(void) } #endif - if (g_current_function == FUNCTION_TRANSMIT && (g_tx_timeout_reached || g_serial_config_count_down_500ms > 0)) + if (g_current_function == FUNCTION_TRANSMIT && (g_tx_timeout_reached || g_serial_config_tick_500ms > 0)) { // transmitter timed out or must de-key g_tx_timeout_reached = false; @@ -1169,13 +1169,13 @@ void APP_process(void) GUI_DisplayScreen(); } - if (g_reduced_service || g_serial_config_count_down_500ms > 0) + if (g_reduced_service || g_serial_config_tick_500ms > 0) return; APP_process_function(); #ifdef ENABLE_FMRADIO - if (g_fm_radio_mode && g_fm_radio_count_down_500ms > 0) + if (g_fm_radio_mode && g_fm_radio_tick_500ms > 0) return; #endif @@ -1186,7 +1186,7 @@ void APP_process(void) if ((g_current_function == FUNCTION_FOREGROUND || g_current_function == FUNCTION_NEW_RECEIVE || g_current_function == FUNCTION_RECEIVE) && - g_screen_to_display != DISPLAY_SEARCH && + g_current_display_screen != DISPLAY_SEARCH && g_scan_state_dir != SCAN_STATE_DIR_OFF && !g_ptt_is_pressed) { // RF scanning @@ -1260,7 +1260,7 @@ void APP_process(void) APP_next_noaa(); RADIO_setup_registers(false); - g_noaa_count_down_10ms = 7; // 70ms + g_noaa_tick_10ms = 7; // 70ms g_schedule_noaa = false; } } @@ -1277,7 +1277,7 @@ void APP_process(void) !g_fm_radio_mode && #endif g_dtmf_call_state == DTMF_CALL_STATE_NONE && - g_screen_to_display != DISPLAY_SEARCH && + g_current_display_screen != DISPLAY_SEARCH && g_scan_state_dir == SCAN_STATE_DIR_OFF && g_css_scan_mode == CSS_SCAN_MODE_OFF && g_current_function != FUNCTION_POWER_SAVE && @@ -1285,7 +1285,7 @@ void APP_process(void) { APP_toggle_dual_watch_vfo(); // toggle between the two VFO's - if (g_rx_vfo_is_active && g_screen_to_display == DISPLAY_MAIN) + if (g_rx_vfo_is_active && g_current_display_screen == DISPLAY_MAIN) GUI_SelectNextDisplay(DISPLAY_MAIN); g_rx_vfo_is_active = false; @@ -1321,10 +1321,10 @@ void APP_process(void) g_eeprom.battery_save == 0 || g_scan_state_dir != SCAN_STATE_DIR_OFF || g_css_scan_mode != CSS_SCAN_MODE_OFF || - g_screen_to_display != DISPLAY_MAIN || + g_current_display_screen != DISPLAY_MAIN || g_dtmf_call_state != DTMF_CALL_STATE_NONE) { - g_battery_save_count_down_10ms = battery_save_count_10ms; + g_battery_save_tick_10ms = battery_save_count_10ms; } else if ((IS_NOT_NOAA_CHANNEL(g_eeprom.screen_channel[0]) && @@ -1335,7 +1335,7 @@ void APP_process(void) } else { - g_battery_save_count_down_10ms = battery_save_count_10ms; + g_battery_save_tick_10ms = battery_save_count_10ms; } #else if ( @@ -1347,10 +1347,10 @@ void APP_process(void) g_eeprom.battery_save == 0 || g_scan_state_dir != SCAN_STATE_DIR_OFF || g_css_scan_mode != CSS_SCAN_MODE_OFF || - g_screen_to_display != DISPLAY_MAIN || + g_current_display_screen != DISPLAY_MAIN || g_dtmf_call_state != DTMF_CALL_STATE_NONE) { - g_battery_save_count_down_10ms = battery_save_count_10ms; + g_battery_save_tick_10ms = battery_save_count_10ms; } else { @@ -1431,7 +1431,7 @@ void APP_process(void) // called every 10ms void APP_check_keys(void) { - const bool ptt_pressed = !GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT) && (g_serial_config_count_down_500ms == 0) && g_setting_tx_enable; + const bool ptt_pressed = !GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT) && (g_serial_config_tick_500ms == 0) && g_setting_tx_enable; key_code_t key; @@ -1450,7 +1450,7 @@ void APP_check_keys(void) #endif { #ifdef ENABLE_AIRCOPY - if (!g_ptt_is_pressed && g_screen_to_display != DISPLAY_AIRCOPY) + if (!g_ptt_is_pressed && g_current_display_screen != DISPLAY_AIRCOPY) #else if (!g_ptt_is_pressed) #endif @@ -1504,7 +1504,7 @@ void APP_check_keys(void) g_boot_counter_10ms = 0; // cancel boot screen/beeps - if (g_serial_config_count_down_500ms > 0) + if (g_serial_config_tick_500ms > 0) { // config upload/download in progress g_key_debounce_press = 0; g_key_debounce_repeat = 0; @@ -1528,7 +1528,7 @@ void APP_check_keys(void) #endif #ifdef ENABLE_AIRCOPY - if (g_screen_to_display != DISPLAY_AIRCOPY) + if (g_current_display_screen != DISPLAY_AIRCOPY) APP_process_key(g_key_prev, false, g_key_held); else AIRCOPY_process_key(g_key_prev, false, g_key_held); @@ -1568,7 +1568,7 @@ void APP_check_keys(void) g_key_prev = key; #ifdef ENABLE_AIRCOPY - if (g_screen_to_display != DISPLAY_AIRCOPY) + if (g_current_display_screen != DISPLAY_AIRCOPY) APP_process_key(g_key_prev, true, g_key_held); else AIRCOPY_process_key(g_key_prev, true, g_key_held); @@ -1593,7 +1593,7 @@ void APP_check_keys(void) #endif #ifdef ENABLE_AIRCOPY - if (g_screen_to_display != DISPLAY_AIRCOPY) + if (g_current_display_screen != DISPLAY_AIRCOPY) APP_process_key(g_key_prev, true, g_key_held); else AIRCOPY_process_key(g_key_prev, true, g_key_held); @@ -1617,7 +1617,7 @@ void APP_check_keys(void) #endif #ifdef ENABLE_AIRCOPY - if (g_screen_to_display != DISPLAY_AIRCOPY) + if (g_current_display_screen != DISPLAY_AIRCOPY) APP_process_key(g_key_prev, true, g_key_held); else AIRCOPY_process_key(g_key_prev, true, g_key_held); @@ -1645,9 +1645,44 @@ void APP_time_slice_10ms(void) UART_HandleCommand(); __enable_irq(); } + + if (g_serial_config_tick_500ms > 0) + { // config upload/download is running + if (g_update_display) + GUI_DisplayScreen(); + if (g_update_status) + UI_DisplayStatus(false); + return; + } + #endif - // *********** +#ifdef ENABLE_AIRCOPY + if (g_current_display_screen == DISPLAY_AIRCOPY) + { // we're in AIRCOPY mode + + if (g_aircopy_state == AIRCOPY_TX) + AIRCOPY_process_fsk_tx_10ms(); + + AIRCOPY_process_fsk_rx_10ms(); + + APP_check_keys(); + + if (g_update_display) + GUI_DisplayScreen(); + + if (g_update_status) + UI_DisplayStatus(false); + + return; + } +#endif + + #ifdef ENABLE_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 if (g_flag_save_vfo) { @@ -1667,6 +1702,10 @@ void APP_time_slice_10ms(void) SETTINGS_save_fm(); g_flag_save_fm = false; } + + if (g_fm_radio_mode && g_current_display_screen == DISPLAY_FM) + if ((g_flash_light_blink_counter % (500 / 10)) == 0) // once every 500ms + g_update_display = true; #endif if (g_flag_save_channel) @@ -1680,19 +1719,6 @@ void APP_time_slice_10ms(void) GUI_SelectNextDisplay(DISPLAY_MAIN); } - // *********** - - if (g_serial_config_count_down_500ms > 0) - { // config upload/download is running - if (g_update_display) - GUI_DisplayScreen(); - if (g_update_status) - UI_DisplayStatus(false); - return; - } - - // *********** - #ifdef ENABLE_BOOT_BEEPS if (g_boot_counter_10ms > 0 && (g_boot_counter_10ms % 25) == 0) AUDIO_PlayBeep(BEEP_880HZ_40MS_OPTIONAL); @@ -1701,35 +1727,6 @@ void APP_time_slice_10ms(void) if (g_reduced_service) return; - #ifdef ENABLE_AIRCOPY - if (g_screen_to_display == DISPLAY_AIRCOPY) - { // we're in AIRCOPY mode - - if (g_aircopy_state == AIRCOPY_TX) - AIRCOPY_process_fsk_tx_10ms(); - - AIRCOPY_process_fsk_rx_10ms(); - - APP_check_keys(); - - if (g_update_display) - GUI_DisplayScreen(); - - if (g_update_status) - UI_DisplayStatus(false); - - return; - } - #endif - - #ifdef ENABLE_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 - if (g_current_function != FUNCTION_POWER_SAVE || !g_rx_idle_mode) APP_process_radio_interrupts(); @@ -1750,7 +1747,7 @@ void APP_time_slice_10ms(void) // Skipping authentic device checks #ifdef ENABLE_FMRADIO - if (g_fm_radio_mode && g_fm_radio_count_down_500ms > 0) + if (g_fm_radio_mode && g_fm_radio_tick_500ms > 0) return; #endif @@ -1833,9 +1830,9 @@ void APP_time_slice_10ms(void) } #ifdef ENABLE_FMRADIO - if (g_fm_radio_mode && g_fm_restore_count_down_10ms > 0) + if (g_fm_radio_mode && g_fm_restore_tick_10ms > 0) { - if (--g_fm_restore_count_down_10ms == 0) + if (--g_fm_restore_tick_10ms == 0) { // switch back to FM radio mode FM_Start(); GUI_SelectNextDisplay(DISPLAY_FM); @@ -1843,7 +1840,7 @@ void APP_time_slice_10ms(void) } #endif - if (g_screen_to_display == DISPLAY_SEARCH) + if (g_current_display_screen == DISPLAY_SEARCH) { uint32_t Result; int32_t Delta; @@ -2102,7 +2099,7 @@ void APP_time_slice_500ms(void) // Skipped authentic device check - if (g_serial_config_count_down_500ms > 0) + if (g_serial_config_tick_500ms > 0) { // config upload/download is running return; } @@ -2152,7 +2149,7 @@ void APP_time_slice_500ms(void) if (g_menu_count_down > 0) if (--g_menu_count_down == 0) - exit_menu = (g_screen_to_display == DISPLAY_MENU); // exit menu mode + exit_menu = (g_current_display_screen == DISPLAY_MENU); // exit menu mode if (g_dtmf_rx_timeout > 0) if (--g_dtmf_rx_timeout == 0) @@ -2161,9 +2158,9 @@ void APP_time_slice_500ms(void) // Skipped authentic device check #ifdef ENABLE_FMRADIO - if (g_fm_radio_count_down_500ms > 0) + if (g_fm_radio_tick_500ms > 0) { - g_fm_radio_count_down_500ms--; + g_fm_radio_tick_500ms--; if (g_fm_radio_mode) // 1of11 return; } @@ -2172,9 +2169,9 @@ void APP_time_slice_500ms(void) if (g_backlight_count_down > 0 && !g_ask_to_save && g_css_scan_mode == CSS_SCAN_MODE_OFF && - g_screen_to_display != DISPLAY_AIRCOPY) + g_current_display_screen != DISPLAY_AIRCOPY) { - if (g_screen_to_display != DISPLAY_MENU || g_menu_cursor != MENU_AUTO_BACKLITE) // don't turn off backlight if user is in backlight menu option + if (g_current_display_screen != DISPLAY_MENU || g_menu_cursor != MENU_AUTO_BACKLITE) // don't turn off backlight if user is in backlight menu option if (--g_backlight_count_down == 0) if (g_eeprom.backlight < (ARRAY_SIZE(g_sub_menu_backlight) - 1)) GPIO_ClearBit(&GPIOB->DATA, GPIOB_PIN_BACKLIGHT); // turn backlight off @@ -2224,12 +2221,12 @@ void APP_time_slice_500ms(void) #endif { #ifdef ENABLE_AIRCOPY - if (g_screen_to_display != DISPLAY_AIRCOPY) + if (g_current_display_screen != DISPLAY_AIRCOPY) #endif { if (g_css_scan_mode == CSS_SCAN_MODE_OFF && g_scan_state_dir == SCAN_STATE_DIR_OFF && - (g_screen_to_display != DISPLAY_SEARCH || + (g_current_display_screen != DISPLAY_SEARCH || g_search_css_state == SEARCH_CSS_STATE_FOUND || g_search_css_state == SEARCH_CSS_STATE_FAILED || g_search_css_state == SEARCH_CSS_STATE_REPEAT)) @@ -2237,12 +2234,12 @@ void APP_time_slice_500ms(void) #ifdef ENABLE_KEYLOCK if (g_eeprom.auto_keypad_lock && - g_key_lock_count_down_500ms > 0 && + g_key_lock_tick_500ms > 0 && !g_dtmf_input_mode && g_input_box_index == 0 && - g_screen_to_display != DISPLAY_MENU) + g_current_display_screen != DISPLAY_MENU) { - if (--g_key_lock_count_down_500ms == 0) + if (--g_key_lock_tick_500ms == 0) { // lock the keyboard g_eeprom.key_lock = true; g_update_status = true; @@ -2263,7 +2260,7 @@ void APP_time_slice_500ms(void) if (g_input_box_index > 0 || g_dtmf_input_mode) AUDIO_PlayBeep(BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL); /* - if (g_screen_to_display == DISPLAY_SEARCH) + if (g_current_display_screen == DISPLAY_SEARCH) { BK4819_StopScan(); @@ -2300,7 +2297,7 @@ void APP_time_slice_500ms(void) if (disp == DISPLAY_INVALID) { #ifndef ENABLE_CODE_SEARCH_TIMEOUT - if (g_screen_to_display != DISPLAY_SEARCH) + if (g_current_display_screen != DISPLAY_SEARCH) #endif disp = DISPLAY_MAIN; } @@ -2317,9 +2314,9 @@ void APP_time_slice_500ms(void) APP_update_rssi(g_eeprom.rx_vfo); #ifdef ENABLE_FMRADIO - if (!g_ptt_is_pressed && g_fm_resume_count_down_500ms > 0) + if (!g_ptt_is_pressed && g_fm_resume_tick_500ms > 0) { - if (--g_fm_resume_count_down_500ms == 0) + if (--g_fm_resume_tick_500ms == 0) { RADIO_Setg_vfo_state(VFO_STATE_NORMAL); @@ -2388,9 +2385,9 @@ void APP_time_slice_500ms(void) if (g_current_function != FUNCTION_TRANSMIT) { - if (g_dtmf_decode_ring_count_down_500ms > 0) + if (g_dtmf_decode_ring_tick_500ms > 0) { // make "ring-ring" sound - g_dtmf_decode_ring_count_down_500ms--; + g_dtmf_decode_ring_tick_500ms--; #ifdef ENABLE_DTMF_CALL_FLASH_LIGHT GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_FLASHLIGHT); // light on @@ -2404,7 +2401,7 @@ void APP_time_slice_500ms(void) } } else - g_dtmf_decode_ring_count_down_500ms = 0; + g_dtmf_decode_ring_tick_500ms = 0; if (g_dtmf_call_state != DTMF_CALL_STATE_NONE && g_current_function != FUNCTION_TRANSMIT && @@ -2429,9 +2426,9 @@ void APP_time_slice_500ms(void) // } } - if (g_dtmf_is_tx && g_dtmf_tx_stop_count_down_500ms > 0) + if (g_dtmf_is_tx && g_dtmf_tx_stop_tick_500ms > 0) { - if (--g_dtmf_tx_stop_count_down_500ms == 0) + if (--g_dtmf_tx_stop_tick_500ms == 0) { g_dtmf_is_tx = false; g_update_display = true; @@ -2439,7 +2436,7 @@ void APP_time_slice_500ms(void) } #ifdef ENABLE_TX_TIMEOUT_BAR - if (g_current_function == FUNCTION_TRANSMIT && (g_tx_timer_count_down_500ms & 1)) + if (g_current_function == FUNCTION_TRANSMIT && (g_tx_timer_tick_500ms & 1)) UI_DisplayTXCountdown(true); #endif } @@ -2466,7 +2463,7 @@ void APP_time_slice_500ms(void) RADIO_setup_registers(true); - if (g_screen_to_display != DISPLAY_MENU) // 1of11 .. don't close the menu + if (g_current_display_screen != DISPLAY_MENU) // 1of11 .. don't close the menu g_request_display_screen = DISPLAY_MAIN; } #endif @@ -2546,12 +2543,12 @@ static void APP_process_key(const key_code_t Key, const bool key_pressed, const FUNCTION_Select(FUNCTION_FOREGROUND); // stay awake - for now - g_battery_save_count_down_10ms = battery_save_count_10ms; + g_battery_save_tick_10ms = battery_save_count_10ms; #ifdef ENABLE_KEYLOCK // keep the auto keylock at bay if (g_eeprom.auto_keypad_lock) - g_key_lock_count_down_500ms = key_lock_timeout_500ms; + g_key_lock_tick_500ms = key_lock_timeout_500ms; #endif if (g_fkey_pressed && (Key == KEY_PTT || Key == KEY_EXIT || Key == KEY_SIDE1 || Key == KEY_SIDE2)) @@ -2628,12 +2625,12 @@ static void APP_process_key(const key_code_t Key, const bool key_pressed, const APP_cancel_user_input_modes(); } - if (key_pressed && g_screen_to_display == DISPLAY_MENU) + if (key_pressed && g_current_display_screen == DISPLAY_MENU) g_menu_count_down = menu_timeout_500ms; // cancel the ringing - if (key_pressed && g_dtmf_decode_ring_count_down_500ms > 0) - g_dtmf_decode_ring_count_down_500ms = 0; + if (key_pressed && g_dtmf_decode_ring_tick_500ms > 0) + g_dtmf_decode_ring_tick_500ms = 0; // ******************** @@ -2783,7 +2780,7 @@ static void APP_process_key(const key_code_t Key, const bool key_pressed, const else if (Key != KEY_SIDE1 && Key != KEY_SIDE2) { - switch (g_screen_to_display) + switch (g_current_display_screen) { case DISPLAY_MAIN: MAIN_process_key(Key, key_pressed, key_held); @@ -2816,9 +2813,9 @@ static void APP_process_key(const key_code_t Key, const bool key_pressed, const } else #ifdef ENABLE_AIRCOPY - if (g_screen_to_display != DISPLAY_SEARCH && g_screen_to_display != DISPLAY_AIRCOPY) + if (g_current_display_screen != DISPLAY_SEARCH && g_current_display_screen != DISPLAY_AIRCOPY) #else - if (g_screen_to_display != DISPLAY_SEARCH) + if (g_current_display_screen != DISPLAY_SEARCH) #endif { ACTION_process(Key, key_pressed, key_held); @@ -2895,7 +2892,7 @@ Skip: { SETTINGS_save_channel(g_tx_vfo->channel_save, g_eeprom.tx_vfo, g_tx_vfo, g_request_save_channel); - if (g_screen_to_display != DISPLAY_SEARCH) + if (g_current_display_screen != DISPLAY_SEARCH) if (g_vfo_configure_mode == VFO_CONFIGURE_NONE) // don't wipe previous variable setting g_vfo_configure_mode = VFO_CONFIGURE; } @@ -2942,10 +2939,10 @@ Skip: // g_tx_vfo->freq_in_channel = BOARD_find_channel(frequency); - 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; + g_dtmf_auto_reset_time_500ms = 0; + g_dtmf_call_state = DTMF_CALL_STATE_NONE; + g_dtmf_tx_stop_tick_500ms = 0; + g_dtmf_is_tx = false; g_vfo_rssi_bar_level[0] = 0; g_vfo_rssi_bar_level[1] = 0; diff --git a/app/dtmf.c b/app/dtmf.c index a73521a..eacb291 100644 --- a/app/dtmf.c +++ b/app/dtmf.c @@ -53,14 +53,14 @@ 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_decode_ring_tick_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; +uint8_t g_dtmf_tx_stop_tick_500ms; bool g_dtmf_IsGroupCall; void DTMF_clear_RX(void) @@ -367,16 +367,16 @@ void DTMF_HandleRequest(void) switch (g_eeprom.dtmf_decode_response) { case DTMF_DEC_RESPONSE_BOTH: - g_dtmf_decode_ring_count_down_500ms = dtmf_decode_ring_countdown_500ms; + g_dtmf_decode_ring_tick_500ms = dtmf_decode_ring_500ms; case DTMF_DEC_RESPONSE_REPLY: g_dtmf_reply_state = DTMF_REPLY_AAAAA; break; case DTMF_DEC_RESPONSE_RING: - g_dtmf_decode_ring_count_down_500ms = dtmf_decode_ring_countdown_500ms; + g_dtmf_decode_ring_tick_500ms = dtmf_decode_ring_500ms; break; default: case DTMF_DEC_RESPONSE_NONE: - g_dtmf_decode_ring_count_down_500ms = 0; + g_dtmf_decode_ring_tick_500ms = 0; g_dtmf_reply_state = DTMF_REPLY_NONE; break; } diff --git a/app/dtmf.h b/app/dtmf.h index 9c01eb1..f2f0c89 100644 --- a/app/dtmf.h +++ b/app/dtmf.h @@ -85,14 +85,14 @@ 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_decode_ring_tick_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; +extern uint8_t g_dtmf_tx_stop_tick_500ms; void DTMF_clear_RX(void); bool DTMF_ValidateCodes(char *pCode, const unsigned int size); diff --git a/app/fm.c b/app/fm.c index 93a3cd1..8b7dfbd 100644 --- a/app/fm.c +++ b/app/fm.c @@ -40,15 +40,15 @@ 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; +uint8_t g_fm_radio_tick_500ms; +volatile uint16_t g_fm_play_tick_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; +uint8_t g_fm_resume_tick_500ms; +uint16_t g_fm_restore_tick_10ms; bool FM_CheckValidChannel(uint8_t Channel) { @@ -100,7 +100,7 @@ void FM_TurnOff(void) { g_fm_radio_mode = false; g_fm_scan_state = FM_SCAN_OFF; - g_fm_restore_count_down_10ms = 0; + g_fm_restore_tick_10ms = 0; GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER); @@ -129,7 +129,7 @@ void FM_Tune(uint16_t Frequency, int8_t Step, bool flag) g_speaker_enabled = false; - g_fm_play_count_down_10ms = (g_fm_scan_state == FM_SCAN_OFF) ? fm_play_countdown_noscan_10ms : fm_play_countdown_scan_10ms; + g_fm_play_tick_10ms = (g_fm_scan_state == FM_SCAN_OFF) ? fm_play_noscan_10ms : fm_play_scan_10ms; g_schedule_fm = false; g_fm_found_frequency = false; @@ -168,7 +168,7 @@ void FM_PlayAndUpdate(void) BK1080_SetFrequency(g_eeprom.fm_frequency_playing); SETTINGS_save_fm(); - g_fm_play_count_down_10ms = 0; + g_fm_play_tick_10ms = 0; g_schedule_fm = false; g_ask_to_save = false; @@ -386,14 +386,18 @@ static void FM_Key_STAR(bool key_pressed, bool key_held) { g_key_input_count_down = key_input_timeout_500ms; - if (key_held && !key_pressed) - return; - if (!key_held && !key_pressed) - ACTION_Scan(false); // short key press just released .. scan without store + { + ACTION_Scan(false); // short key press just released .. frequency scan without store + } else if (key_held && key_pressed) - ACTION_Scan(true); // long key press still pressed .. scan and store + { + ACTION_Scan(true); // long key press still pressed .. frequency scan and store + } + + g_fkey_pressed = false; + g_update_status = true; } static void FM_Key_EXIT(bool key_pressed, bool key_held) @@ -656,7 +660,7 @@ void FM_Play(void) { if (!g_fm_auto_scan) { - g_fm_play_count_down_10ms = 0; + g_fm_play_tick_10ms = 0; g_fm_found_frequency = true; if (!g_eeprom.fm_channel_mode) @@ -692,7 +696,7 @@ void FM_Start(void) { g_fm_radio_mode = true; g_fm_scan_state = FM_SCAN_OFF; - g_fm_restore_count_down_10ms = 0; + g_fm_restore_tick_10ms = 0; BK1080_Init(g_eeprom.fm_frequency_playing, true); diff --git a/app/fm.h b/app/fm.h index a7d3628..6f3416c 100644 --- a/app/fm.h +++ b/app/fm.h @@ -28,8 +28,8 @@ enum { 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 uint8_t g_fm_radio_tick_500ms; +extern volatile uint16_t g_fm_play_tick_10ms; extern volatile int8_t g_fm_scan_state; extern bool g_fm_auto_scan; extern uint8_t g_fm_channel_position; @@ -37,8 +37,8 @@ extern uint8_t g_fm_channel_position; 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; +extern uint8_t g_fm_resume_tick_500ms; +extern uint16_t g_fm_restore_tick_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 e77ff1e..795ba60 100644 --- a/app/generic.c +++ b/app/generic.c @@ -54,7 +54,7 @@ void GENERIC_Key_F(bool key_pressed, bool key_held) { // f-key held #ifdef ENABLE_KEYLOCK - if (key_pressed && g_screen_to_display != DISPLAY_MENU && g_current_function != FUNCTION_TRANSMIT) + if (key_pressed && g_current_display_screen != DISPLAY_MENU && g_current_function != FUNCTION_TRANSMIT) { // toggle the keyboad lock #ifdef ENABLE_VOICE @@ -101,7 +101,7 @@ void GENERIC_Key_PTT(bool key_pressed) { g_input_box_index = 0; - if (!key_pressed || g_serial_config_count_down_500ms > 0) + if (!key_pressed || g_serial_config_tick_500ms > 0) { // PTT released if (g_current_function == FUNCTION_TRANSMIT) @@ -129,7 +129,7 @@ void GENERIC_Key_PTT(bool key_pressed) RADIO_Setg_vfo_state(VFO_STATE_NORMAL); - if (g_screen_to_display != DISPLAY_MENU) // 1of11 .. don't close the menu + if (g_current_display_screen != DISPLAY_MENU) // 1of11 .. don't close the menu g_request_display_screen = DISPLAY_MAIN; } @@ -143,11 +143,11 @@ void GENERIC_Key_PTT(bool key_pressed) #endif if (g_scan_state_dir != SCAN_STATE_DIR_OFF || // freq/chan scanning - g_screen_to_display == DISPLAY_SEARCH || // CTCSS/CDCSS scanning + g_current_display_screen == DISPLAY_SEARCH || // CTCSS/CDCSS scanning g_css_scan_mode != CSS_SCAN_MODE_OFF) // " " { // we're scanning .. stop - if (g_screen_to_display == DISPLAY_SEARCH) + if (g_current_display_screen == DISPLAY_SEARCH) { // CTCSS/CDCSS scanning .. stop g_eeprom.cross_vfo_rx_tx = g_backup_cross_vfo_rx_tx; g_search_flag_stop_scan = true; @@ -184,7 +184,7 @@ void GENERIC_Key_PTT(bool key_pressed) goto cancel_tx; } - if (g_screen_to_display == DISPLAY_FM) + if (g_current_display_screen == DISPLAY_FM) goto start_tx; // listening to the FM radio .. start TX'ing #endif @@ -194,7 +194,7 @@ void GENERIC_Key_PTT(bool key_pressed) return; } - if (g_screen_to_display != DISPLAY_MENU) // 1of11 .. don't close the menu + if (g_current_display_screen != DISPLAY_MENU) // 1of11 .. don't close the menu g_request_display_screen = DISPLAY_MAIN; if (!g_dtmf_input_mode && g_dtmf_input_box_index == 0) @@ -247,7 +247,7 @@ cancel_tx: done: g_ptt_debounce = 0; - if (g_screen_to_display != DISPLAY_MENU && g_request_display_screen != DISPLAY_FM) // 1of11 .. don't close the menu + if (g_current_display_screen != 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 183208e..fcd1380 100644 --- a/app/main.c +++ b/app/main.c @@ -65,7 +65,7 @@ void toggle_chan_scanlist(void) return; } - if (g_screen_to_display != DISPLAY_MAIN || + if (g_current_display_screen != DISPLAY_MAIN || g_current_function == FUNCTION_TRANSMIT || g_current_function == FUNCTION_PANADAPTER) { @@ -157,7 +157,7 @@ void toggle_chan_scanlist(void) break; } - g_screen_to_display = DISPLAY_INVALID; + g_current_display_screen = DISPLAY_INVALID; GUI_SelectNextDisplay(DISPLAY_MENU); g_menu_cursor = MENU_MEM_SAVE; g_in_sub_menu = true; @@ -169,7 +169,7 @@ void toggle_chan_scanlist(void) g_sub_menu_selection = chan; g_flag_refresh_menu = false; - g_screen_to_display = DISPLAY_MENU; + g_current_display_screen = DISPLAY_MENU; g_update_display = false; UI_DisplayMenu(); } @@ -188,7 +188,7 @@ void processFKeyFunction(const key_code_t Key) uint8_t Band; uint8_t Vfo = g_eeprom.tx_vfo; - if (g_current_function == FUNCTION_TRANSMIT || g_screen_to_display == DISPLAY_MENU) + if (g_current_function == FUNCTION_TRANSMIT || g_current_display_screen == DISPLAY_MENU) { g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; @@ -424,7 +424,7 @@ void MAIN_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held) if (key_pressed) { // and pressed - if (g_screen_to_display == DISPLAY_MAIN) + if (g_current_display_screen == DISPLAY_MAIN) { if (g_input_box_index > 0) { // clear the user box @@ -697,7 +697,7 @@ void MAIN_Key_MENU(const bool key_pressed, const bool key_held) g_fkey_pressed = false; - if (g_screen_to_display == DISPLAY_MAIN) + if (g_current_display_screen == DISPLAY_MAIN) { if (g_input_box_index > 0) { // delete any inputted chars diff --git a/app/menu.c b/app/menu.c index b02367e..5432643 100644 --- a/app/menu.c +++ b/app/menu.c @@ -630,7 +630,7 @@ void MENU_AcceptSetting(void) #ifdef ENABLE_KEYLOCK case MENU_AUTO_KEY_LOCK: g_eeprom.auto_keypad_lock = g_sub_menu_selection; - g_key_lock_count_down_500ms = key_lock_timeout_500ms; + g_key_lock_tick_500ms = key_lock_timeout_500ms; break; #endif @@ -2013,7 +2013,7 @@ void MENU_process_key(key_code_t Key, bool key_pressed, bool key_held) break; } - if (g_screen_to_display == DISPLAY_MENU) + if (g_current_display_screen == DISPLAY_MENU) { if (g_menu_cursor == MENU_VOLTAGE || #ifdef ENABLE_F_CAL_MENU diff --git a/app/uart.c b/app/uart.c index 436e6d4..9147fad 100644 --- a/app/uart.c +++ b/app/uart.c @@ -247,7 +247,7 @@ static void cmd_0514(const uint8_t *pBuffer) time_stamp = pCmd->time_stamp; - g_serial_config_count_down_500ms = serial_config_count_down_500ms; + g_serial_config_tick_500ms = serial_config_tick_500ms; // show message g_request_display_screen = DISPLAY_MAIN; @@ -268,7 +268,7 @@ static void cmd_051B(const uint8_t *pBuffer) // if (pCmd->time_stamp != time_stamp) // return; - g_serial_config_count_down_500ms = serial_config_count_down_500ms; + g_serial_config_tick_500ms = serial_config_tick_500ms; if (addr >= EEPROM_SIZE) return; @@ -312,7 +312,7 @@ static void cmd_051D(const uint8_t *pBuffer) // if (pCmd->time_stamp != time_stamp) // return; - g_serial_config_count_down_500ms = serial_config_count_down_500ms; + g_serial_config_tick_500ms = serial_config_tick_500ms; if (addr >= EEPROM_SIZE) return; @@ -418,7 +418,7 @@ static void cmd_052D(const uint8_t *pBuffer) uint32_t response[4]; reply_052D_t reply; - g_serial_config_count_down_500ms = serial_config_count_down_500ms; + g_serial_config_tick_500ms = serial_config_tick_500ms; if (!locked) { @@ -472,7 +472,7 @@ static void cmd_052F(const uint8_t *pBuffer) g_eeprom.vfo_info[0].dtmf_ptt_id_tx_mode = PTT_ID_OFF; g_eeprom.vfo_info[0].dtmf_decoding_enable = false; - g_serial_config_count_down_500ms = serial_config_count_down_500ms; + g_serial_config_tick_500ms = serial_config_tick_500ms; #ifdef ENABLE_NOAA g_is_noaa_mode = false; diff --git a/audio.c b/audio.c index ffe2288..3a04791 100644 --- a/audio.c +++ b/audio.c @@ -68,7 +68,7 @@ voice_id_t g_voice_id[8]; uint8_t g_voice_read_index; uint8_t g_voice_write_index; - volatile uint16_t g_count_down_to_play_next_voice_10ms; + volatile uint16_t g_tick_to_play_next_voice_10ms; volatile bool g_flag_play_queued_voice; voice_id_t g_another_voice_id = VOICE_ID_INVALID; @@ -95,7 +95,7 @@ void AUDIO_PlayBeep(beep_type_t Beep) } #ifdef ENABLE_AIRCOPY -// if (g_screen_to_display == DISPLAY_AIRCOPY || g_aircopy_state != AIRCOPY_READY) +// if (g_current_display_screen == DISPLAY_AIRCOPY || g_aircopy_state != AIRCOPY_READY) // return; #endif if (g_current_function == FUNCTION_RECEIVE || g_current_function == FUNCTION_MONITOR) @@ -338,7 +338,7 @@ void AUDIO_PlayBeep(beep_type_t Beep) } g_voice_read_index = 1; - g_count_down_to_play_next_voice_10ms = Delay; + g_tick_to_play_next_voice_10ms = Delay; g_flag_play_queued_voice = false; return; @@ -450,7 +450,7 @@ void AUDIO_PlayBeep(beep_type_t Beep) AUDIO_PlayVoice(VoiceID); - g_count_down_to_play_next_voice_10ms = Delay; + g_tick_to_play_next_voice_10ms = Delay; g_flag_play_queued_voice = false; #ifdef ENABLE_VOX diff --git a/audio.h b/audio.h index fb60320..c97ee20 100644 --- a/audio.h +++ b/audio.h @@ -129,7 +129,7 @@ typedef enum voice_id_e voice_id_t; extern voice_id_t g_voice_id[8]; extern uint8_t g_voice_read_index; extern uint8_t g_voice_write_index; - extern volatile uint16_t g_count_down_to_play_next_voice_10ms; + extern volatile uint16_t g_tick_to_play_next_voice_10ms; extern volatile bool g_flag_play_queued_voice; extern voice_id_t g_another_voice_id; diff --git a/driver/bk1080.c b/driver/bk1080.c index 8fa8edf..2a3e825 100644 --- a/driver/bk1080.c +++ b/driver/bk1080.c @@ -21,17 +21,60 @@ #include "driver/system.h" #include "misc.h" -#ifndef ARRAY_SIZE - #define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) +#if defined(ENABLE_FMRADIO_64_76) + #define BAND 3u +#elif defined(ENABLE_FMRADIO_76_90) + #define BAND 2u +#elif defined(ENABLE_FMRADIO_76_108) + #define BAND 1u +#elif defined(ENABLE_FMRADIO_875_108) + #define BAND 0u #endif +//#define CHAN_SPACING 0u // 200kHz + #define CHAN_SPACING 1u // 100kHz +//#define CHAN_SPACING 2u // 50kHz + +#define VOLUME 15u + +#define SEEK_THRESHOLD 10u + static const uint16_t BK1080_RegisterTable[] = { - 0x0008, 0x1080, 0x0201, 0x0000, 0x40C0, 0x0A1F, 0x002E, 0x02FF, - 0x5B11, 0x0000, 0x411E, 0x0000, 0xCE00, 0x0000, 0x0000, 0x1000, - 0x3197, 0x0000, 0x13FF, 0x9852, 0x0000, 0x0000, 0x0008, 0x0000, - 0x51E1, 0xA8BC, 0x2645, 0x00E4, 0x1CD8, 0x3A50, 0xEAE0, 0x3000, - 0x0200, 0x0000, + 0x0008, // 0x00 + 0x1080, // 0x01 chip ID + (1u << 9) | (1u << 0), // 0x02 0x0201 0000001000000001 + 0x0000, // 0x03 + 0x40C0, // 0x04 0100000011000000 + (SEEK_THRESHOLD << 8) | (BAND << 6) | (CHAN_SPACING << 4) | (VOLUME << 0), // 0x0A1F, // 0x05 00001010 00 01 1111 + 0x002E, // 0x06 0000000000101110 + 0x02FF, // 0x07 0000001011111111 + 0x5B11, // 0x08 0101101100010001 + 0x0000, // 0x09 + 0x411E, // 0x0A 0100000100011110 + 0x0000, // 0x0B + 0xCE00, // 0x0C 1100111000000000 + 0x0000, // 0x0D + 0x0000, // 0x0E + 0x1000, // 0x0F 1000000000000000 + 0x3197, // 0x10 0011000110010111 + 0x0000, // 0x11 + 0x13FF, // 0x12 0001001111111111 + 0x9852, // 0x13 1001100001010010 + 0x0000, // 0x14 + 0x0000, // 0x15 + 0x0008, // 0x16 + 0x0000, // 0x17 + 0x51E1, // 0x18 0101000111100001 + 0xA8BC, // 0x19 1010100010111100 + 0x2645, // 0x1A 0010011001000101 + 0x00E4, // 0x1B 0000000011100100 + 0x1CD8, // 0x1C 0001110011011000 + 0x3A50, // 0x1D 0011101001010000 + 0xEAE0, // 0x1E 1110101011100000 + 0x3000, // 0x1F 0011000000000000 + 0x0200, // 0x20 0010000000000000 + 0x0000 // 0x21 }; bool is_init; @@ -62,17 +105,17 @@ void BK1080_Init(uint16_t Frequency, bool bDoScan) } else { - BK1080_WriteRegister(BK1080_REG_02_POWER_CONFIGURATION, 0x0201); + BK1080_WriteRegister(BK1080_REG_02_POWER_CONFIGURATION, (1u << 9) | (1u << 0)); } - BK1080_WriteRegister(BK1080_REG_05_SYSTEM_CONFIGURATION2, 0x0A5F); - BK1080_WriteRegister(BK1080_REG_03_CHANNEL, Frequency - 760); -// SYSTEM_DelayMs(10); - BK1080_WriteRegister(BK1080_REG_03_CHANNEL, (Frequency - 760) | (1u << 15)); +// BK1080_WriteRegister(BK1080_REG_05_SYSTEM_CONFIGURATION2, 0x0A5F); + BK1080_WriteRegister(BK1080_REG_05_SYSTEM_CONFIGURATION2, (SEEK_THRESHOLD << 8) | (BAND << 6) | (CHAN_SPACING << 4) | (VOLUME << 0)); + + BK1080_SetFrequency(Frequency); } else { - BK1080_WriteRegister(BK1080_REG_02_POWER_CONFIGURATION, 0x0241); + BK1080_WriteRegister(BK1080_REG_02_POWER_CONFIGURATION, (1u << 9) | (1u << 6) | (1u << 0)); // 0x0241); // 0000 0010 0100 0001 GPIO_SetBit(&GPIOB->DATA, GPIOB_PIN_BK1080); } } @@ -101,18 +144,42 @@ void BK1080_WriteRegister(BK1080_Register_t Register, uint16_t Value) void BK1080_Mute(bool Mute) { - BK1080_WriteRegister(BK1080_REG_02_POWER_CONFIGURATION, Mute ? 0x4201 : 0x0201); + uint16_t val = (1u << 9) | (1u << 0); + if (Mute) + val |= 1u << 14; + BK1080_WriteRegister(BK1080_REG_02_POWER_CONFIGURATION, val); + } void BK1080_SetFrequency(uint16_t Frequency) { - BK1080_WriteRegister(BK1080_REG_03_CHANNEL, Frequency - 760); +#if defined(ENABLE_FMRADIO_64_76) + + const uint16_t channel = Frequency - 640; // 100kHz channel spacing + +#elif defined(ENABLE_FMRADIO_76_90) + + const uint16_t channel = Frequency - 760; // 100kHz channel spacing + +#elif defined(ENABLE_FMRADIO_76_108) + + const uint16_t channel = Frequency - 760; // 100kHz channel spacing + +#elif defined(ENABLE_FMRADIO_875_108) + +// const uint16_t channel = Frequency - 760; + const uint16_t channel = Frequency - 875; // 100kHz channel spacing + +#endif + + BK1080_WriteRegister(BK1080_REG_03_CHANNEL, channel); // SYSTEM_DelayMs(10); - BK1080_WriteRegister(BK1080_REG_03_CHANNEL, (Frequency - 760) | (1u << 15)); + BK1080_WriteRegister(BK1080_REG_03_CHANNEL, channel | (1u << 15)); } -void BK1080_GetFrequencyDeviation(uint16_t Frequency) +uint16_t BK1080_GetFrequencyDeviation(uint16_t Frequency) { BK1080_BaseFrequency = Frequency; - BK1080_FrequencyDeviation = BK1080_ReadRegister(BK1080_REG_07) / 16; + BK1080_FrequencyDeviation = BK1080_ReadRegister(BK1080_REG_07) >> 4; + return BK1080_FrequencyDeviation; } diff --git a/driver/bk1080.h b/driver/bk1080.h index fba4546..574aa74 100644 --- a/driver/bk1080.h +++ b/driver/bk1080.h @@ -30,7 +30,7 @@ uint16_t BK1080_ReadRegister(BK1080_Register_t Register); void BK1080_WriteRegister(BK1080_Register_t Register, uint16_t Value); void BK1080_Mute(bool Mute); void BK1080_SetFrequency(uint16_t Frequency); -void BK1080_GetFrequencyDeviation(uint16_t Frequency); +uint16_t BK1080_GetFrequencyDeviation(uint16_t Frequency); #endif diff --git a/driver/bk4819.c b/driver/bk4819.c index 7d23638..fd20080 100644 --- a/driver/bk4819.c +++ b/driver/bk4819.c @@ -59,10 +59,11 @@ void BK4819_Init(void) BK4819_EnableAGC(); // only do this in linear modulation modes, not FM #endif +// BK4819_WriteRegister(0x19, 0x1041); // 0001 0000 0100 0001 <15> MIC AGC 1 = disable 0 = enable +// BK4819_WriteRegister(0x7D, 0xE940); // 111010010100 0000 + BK4819_WriteRegister(0x7D, 0xE940 | 0x1f); BK4819_WriteRegister(0x19, 0x1041); // 0001 0000 0100 0001 <15> MIC AGC 1 = disable 0 = enable - BK4819_WriteRegister(0x7D, 0xE940); - // REG_48 .. RX AF level // // <15:12> 11 ??? 0 to 15 diff --git a/firmware.bin b/firmware.bin index 996092c5d9465ecee3d694b59bd87b4decd20619..82b0fb60ce35ee56bf77029298ef9e8026022c60 100644 GIT binary patch delta 43573 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

)hH32j9s|(WU2bmLnDRY$q+2Q~^}Z4p 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 delta 42602 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 z z5w?S^Nutxa)KhOH2-qnixSQ=c6|9O$0a^90D-mjQLo%oYVjml#skT4L$Y_`75y1aFbR>h`coUL23y0* z?GgQ{yMX0&k@b?k^Kzr^%3RB&z(9L4G31kv4Fa7;Oi9!EGFqX()VVIv8tUEb+~@2t z{%2^V)Z3`ZC%s<{UcO9^ z+j^Wfah&MMmXm~89=B(YbAsGt5Dt&6PG@X^bN$zlNLwVTvYY%%D z#Jg;Yr ztzdK0-Notr?M3=vUYG>`5>2$_eniC3?u+>Xw*IN6!QV<~v zsDI~kk`-!Os%(SmRuOMjLjD<) z@_(r%-1O1k$HiaP?t$x6^H3CaXK)huIH2NrN6$;HpAj;x{~;HPPfxP4%lU`Fco?AX zcP(J&gTGgDfevWpI0Y>mZ2k8NPB<8+o^{cVINSHeCzT9i9)ED(byJ>JX1B08VHav{ zgNVbFJJ0u%nuif@ba*{{N$yRm4t9 zU`yUZ`y$H#CE|Z2eu#+wR|6KQ91~+#;_#KUu+T<>#Sx7#1t1<|_JiJM2AX)5xf@*NV*knwV&~W8Vn<1wxl3GFl#H*lUEJf2qk*UxLyRkwj+%|>GC=L?rN%kvC?RW zhvtWr0rhPAco;3U!Yi)rK-AyjTX;+CkJdGVz@E?41^d-ooG(k0Hww+?YEODESjO}+ z*T!tfT#@c2_cvqR_fq+KQ-99YX%g?V0XLZjDea6LY3}r&P{d!|t2^4|RY? zDC(2FY^RUK&m-~wKyJn{Vb?5#woXSTK72S0VGG3HA=_~mGu^Y^)v!3QoipF=+A@oU zhc-agT2VIGR^b-i>F%f4eR!EcD#@Q@9;FihS^?QySXG@2wKxHq>XOCSclRgfHr zOXF(wq5u``WkQ>X3t{=t2WV$hc|GQoHRaU8J|tBgc1Yu(_ts7Jd-aIKzKo|q zq@De+rfDHzK~WXhSF)hC6j)%g)L5qV>VoHETz0OxMDoP7ZUh}!6YApT}y1aenz%Z1Ls_UcE0(T7qnue5qen~4A+&Sml-3H@#PRheE2%pO!Y4&dc+A$YnF@}sP4~*a{p@~C8$|vdX z3CC`O>P2DUuOI+3CQkwf2iR1x33j##yFs*#9()R}Z|8t6_+j*Baw{&693u_5(RvTr zMGldpi1B&e$Ta` zO=3`v*WANuekm{C^Tm+R{Abklc5NEOV}{s|Uz^yAUs3$4oCkv2Wz25>t1L*_`!347 zG~HFd?<$nE^k(5;rO3=R@5obN(t1ZWfJ)bx;mFx~E|zyLgLyLh3(yE7HZ{eEFEPMx2XukvLnf*f($J2hwV>L_Pw% z%a#vI8qtV%C8ABfFAg4KJH|tROhjo5f8LlUdvU`cLEews1zLG8ZWd5^4{jCodyVpL zX_=Vjl|9l@TtV0+Ef-WZrYF5w%@HLZ3Me&Q z-NkjCJ``1QLKVa-;=ELVl@lvsdvRjKmaI(%aeVU}GIwJ?I$+#0gl}t@K&V0^i87O} z>KzpuLrV6r-6U0y;9^_|B+dnMVkW7LtBZ^9JDco}r;bhvukdP*x|zMZF4GY9q>T!y)CRsEw?JA%qAEAP(STm7%x>20mm7tu0N3 zl+Ns2s$zqIl?3`f!3O}M>?S3n%gj&)E@Zj|F`Y~-Vpw~UMTFl#TP8O(;gh=A%}q7b z%(pi#YO3whr~J>TBMEl7!1_2YfHi>sPJ-i}z~_=7uZ7c8i%`NMvbsnER|{?yz(F#l zPb5_$=iYoU&17!Pa!-(%aJ(8Y9tXa?8aTviX1KiwB}FJ5+(f2ycM_Ty-R9QRq8I{K zL&~u*;g^cc=Euyha`kY0ccsVZ-1y0|$vbYM$13=Qe^2byvUv*0kQ6EtMWmhPtHkQM?G zV;cap$@oRato6L3c8AU9zU#bRffWHx`1VdK3NsSVkKB8e~T?= z&n!jBi1B9q&soHuVVdaGI+oh*&`$+wiUGIyAx802P?-{XlS?tu#!MPfe!TMgAYJ&O z4?_Mz@iIn`G@>A5amD+w*D5vV{2P|co}vuD8Y?A$120YB^8tdU48Igpw=v~${ZIOy z%hXbc7EtsB1uh#&u7hz~77DmG=Kp!gj9g{7DV8vanfUYNh(fMKcz%qTm{9&BPCQjbPxG7@gVnxFfCRzY6~Y@_67y2+zppPK8gw!xWx>vF z%uhM<)!^t5=b^aR%5Xz0K0y%#5R5|^UJ6(vdIKHGRXYCBY0yWdgJ^Z|R5DCOo0|eH z#fKpR)H?{8VsJJXbRkp$Dkugxo~9Oi)S(1ta2s{NZ`ndZXSU3?(3L!n+IhoQf;K+d z0Zm7NkrUQxYt2C@iFJXQPOGD8Xz3^z+G2+u%xlR^*J8nCKh_8sUh6iyrl5>|>Dz%~ z_vAXdstkxlVm1UP3N*|LlnY!QjpYP40&k^Hx(fsB>`vx{9N?+Q{nqcKL>hz^n5zcvK+;>GeYbwK?0K{i=nwm71A~woaWd$4S%bfNnTVXFo79 zM&nDDk0f3@BKj1eR20e-eiJ->`C98PsDJYJbKcHT(r>pOulP<7{e~%^)yP{3x*e2@ zH2wDD5FQ0BK;9ah+XxzkwC==rxw%YZ6&RC`0;(GbOM-!9c;O1Q#p!AFKIZW|Z%PuQ zup-jQjVOHL$?AuWnaG+d*{*7w&U5gd%Z7QLi}!qiZqP*1nie$eZpw!M*I0G7i7-*1 z1jfg&ty)tx)^l-dV-?QaCfaf4y?NxU=ioN=L>NZjJFm&K&EM3p?QBz2dUJ41)%S*j zI2ZU^*_h`r^F+*=FNl86Mf{%i{2;PNbxj9xQ9~ATn-1caUbtsa%~Q>zGOUkW+)+SQ z+dF(wY3E?E=OWH1AZtA)T))EJ0p-vSp5;QOoAXDddk5*mP@_=|WJ?pF7EJRHQjHgV zpj8NQQxmxz5nU6-me4mV!d5^~EktS!QW~QoJO$}JNUs}CmmuBM^pl~nioOE@DJ3e` zm8A%O3QN>GhtJAJz8+ZiKEy{?#=V(j58s zIC_vllfNln<_9*orfSe~wkc0eDT8aPSpLEmzimwwUhkT!B%?t%vnA8}n5~Tf1I;#* z*IBcjR}7<2&lX09(+ER9!xwN^jT_xnitvK?nyPqt!?wn%(E#>|N}mi2IjYhIiNQlg zn4`#YK%bCN_66-bT}&gxu2T9 z0IqrP;|XKCi1BeiGsR0&_>s7|evlL;1+Pw=z#Q$&CnFE5Cq|_c{q3D8xbBU9b;yXS zO)jNpUZyr7=I^_7RB8r>1WY%m9>HzE6$e~+gW?q5w*1W4fay-SMMf_noK2mh3k?;+0e3HYJtq5-&Q1S+% zLH+I?P=u6t^VE#-abRUn#~^M6*+5kw2dElU2MY0FYz@#t-nF+KQ-n7Syd%6@ljVI^ zDD! zQi%Gt4j~oC)h6OsRRFyRt8)Jue7Z8_Orr56LDQbObdl|#@QGd#o-;ttAtp^boh8Fv zAZA6?HTW9W59}7Qy*B8DN!W!&3RJIeHkm_iCoRkl@~jASjb}kILYVI`mY-*SW|we# zvDPq#UBr%IH^KVp1i&=T<9`hMBeRXGCuf-lxuwdb%AK5_+sh3y`?w?AzqlSISJA^T z3auhpal7I+#X3Nuoo0S!9#9PZKdShHVvOQbmuuwnef`zwqqB&*T!pD+7MWZ-*)0;-235+3SM~$% z5u+^3HTqvcN6%u3;ZeExoPK8J%o>r1OW0i+;}kqWUf&e5qf=w#{EG12n5N^os_mWZ z9DNhW<<;4-Yr4w2kb#JX-D)IRI_Rk%ht0 zLV+XO{lj(N=@(iR;lKCgqZ`WuA6$t6b%B^r#R$x9>AQL&0`)3S{0S8eAu5n>!`QnV zeGHxbUYjOu16O>8{D%?l0C5n1@BA2DB;x0h|0Cjyx(N|qM8;td?FWt`d=o^$2OT*0 zHsT+G=$!j5T(AInRHml8!hD2$!cWNk-2Om4`X0Qu63e+xLmu0)Bz^CEri=qHt0}kG z#2!ve*LpPN|9KWuM$c1=I1Lk_md#~lU>C6A@UxW}PuZ0fw(bP}L*W!&S{Yh|^z8@o zhkBtefqxh5m*sv(SYfkT_JRQ)fj^`AtKZ4*65`XeP-jHiF?i%+1mp257dz$aw&S{2 zg<~jf1WH@da}>Ggi8uGD_?LwaWZ#JFn|lrlhY?5f44(S-6~_nPs`!1v!QrECefylS zAMvI5hR42r(Lq8l%0=JO2jsfp{Ofz3cU-yryqxdoqYanzJt6pqkD^(F%MN_I+tG7* zw?i$4b~{uc1&9R^5WQqVUm}0M@Gve~g-WS<2!CHqDk*j!>x@aq;!ijfIV8B#@vlxz zyYe;cxPq0`0!$u~B9F>fGkq2>G|6~`hvjrM25-+`?!^b?_d^0>FH&>B2VyFK$lzvg z#6*XJP#>W80F*j{Y(=vxjcPhra*sowZYB|F5}qR_&5v^zu{wx8G26|IYe!Yq#y7|_ zH>yx+5^~(V$*UdoR;w`!qo1?-x6f$-w+~8h1Gk?9i!TawQ&0h0?6{c4`d17W!3A7^ zwMt=`w-EjlQfIehmjTg9jNdf;)W7x^$c-q+8KoUjC1M{&L^GJH3NI-l{ZGs)pU4Gf zqMLxcecqByLL0NyJZ{sXY2RE%0at@PiF}q|z=zq44|D9BbmwFt)ve*3wp=vC!`~#p zuit{B^K4tY%jB2uh@}W6jx2X_=|#+`>HD_O&k0Jddy)>01yk1YH72AjQ{&i~)@Wm4b>vQ$bar zxuB(>B{*+BX!Muh|JxARgqu*FUXFvb6R8I&L2Hm+0m?rOSW|@U2&t^K1@Yg>&-P`M zK94_o0v+=S!DLl@4n(kuxs}j>Sd_+|WWhEnoj%aql-C@)FDLUI!cn}N@pyBizi9{0 zWr!GJNHF=EBaSndUIOD~U}G@yRl+yz4yNprORvZ`ITC%@k@U^Wa{Q&}A&2UlLvs9u z=t~ar%}a88Pc)H#TG)-k8&G&t=&5Rhdu)DTVDy(`@{_;h@+W+yn39@b*u{kp$MXs@ z3kt>;WEbGizrcN?=z35tV?i|6T~Uj9%Q z#R8(tyx`In`RJr*gWyFC5=t+Sl#olf8|U0~X_>GIA0Hq5%e&;WOwnXhgY8bo_|i}G z_g}hISnCio-5YSpx=Zr`a&5~=Hfy_1mBdSwuM#GOH)1U{BH7}3Uc+=q1$lQ=lH6r* z0PLt-F>AR1DCBmS4uqo-mtz@#4;Njc)qFLgJW4A@S8^5McOwcu;qW5+j~f)>HzV}; za}iC)0z6v6k+>A?8!7UWgn6j925+wLl0~=~@l2+&H1|@SkOLowm{i%n5^!!M@DhI# zzQT`pt~7FCMcghp9GT7AI~hND#zejdoi(d| zVU_{5!xNyqxea^Lv4zTW1|xf9uKx4+BH=SbhH>ocAErm=r-cmT+1Gm0nX+Hzs|%CQ zC1H1lnShNc#U@NY_6=RaTE@(uX}$_eUqxtU{x5-~qJIWBVkDnlRtQE^eg%4GY%tU3 zLp!C6!@z}Y$8h_l34h1r z0+bJJV+O(%!<;k$%uA?UYwHQQe5dRP#T9rQwt#S6C zB0^XuqseOXgv;QH+hz(iz6Bl zrd7`XE6yGuK_v1;R}!Pg*(*FoXL{-dw1cD(zhO%|Uhkb%3cJy3q{z__sKohvU<5{3RSu z`0e-<`S=$wmBO&Mcq~`QoHN4`C08B$*Fmk|bLBVl#^AN;aPo8S>x)P;2Qx7>Jyk_na}~Hj zybnLSK}SJ<0DT6!1XADx%0hHZiXp9n5KDz!%4T#Bqhk>rzcP_;0#SvO86joklOW2* zr$KalYs7i$L1r&gp2#1pBwuD_mMl#YZnmL?p3N}KgI)n*uW}!s){Z`&`NAVVFdHezX*GeWqAG~=)FT0?)wI~a1+dTpI2_?UgsWC zklYaeF}%CxS&ZZ(dzOa_>jwV^@A!P@!OGNtI!|K|(L4qjlMj9UDLZ)vxY2!_ocaJM z65cp4n!G2xU#IkQE$<3%*?X9;wy0Z1=@l)l+u(hP4L^@Lt7MZ(64<+iYugL0!E>Qb zA;;T^+o=42x(FVVKPnegfhonn^&uJ-1yf&5#d@PbL}&5o08^|AwhQeJ%#h8Qfma;q zA$A5+oYeI)wlm0w2>3SazEKgg&4Rdt9aQ+IEo(?-+Olvt%;C6imgKl}fpL zV7suhmKF=J7qtHoT{~(^Nb2DTc3QOXYVdEiC-n$L3@syy5O^NktO(ri6y@9g5nk$Q zqq-wwv$p+U7I{i_0}z>kesVjOh_RO1!?it+?Tj`%)cl&#WHGb~>*{oCoQ=rXP?`Wx zf+hzAIbKsrLK{leykZX*&KbA^H^Hh`aItV69$oO{g@tE=pTioGJ_!9cKhn6$4oGOM zp(Xf}LoCl$B((TpDPJpat!*$lR}P=G6lX1qDce?MWdO`$d>61ThH5`s;PzhFvbRzd zV9ElWT9}w_jFNE)p;UvqgX8C5w@xm6p`RHClMyt^S`x!z0!ZwTTwC(ql zGTl0t3ZPTu+=%Wyg!YWkUjl+*tdT4ll(4C4x3VqWJG3Z~63`CcPTMsa1z*6EsxYTB z81w8sKw7AZ{s0S@jZVNb!JIn6ppn_j}XTSH9gr=8mNPaTrbYlq@ez$Lqs7 z&zW7i1zB(OrG~DdO~me{ATvza(-@d&^U3Z1!PtX>2c%!)C*fAE2=p1Bu=ila_=k8x z8)Mc4clh7gm2G+m-+yntde4Ib0|E9F_8thr-9r1S$+Hz#u>k|Q&mY~D%{2+R{`9A^ zmpllMU;ul_5Bg?=c1m=Sqbzvey`=d1;V+_hM*)FG^2Y-JQsdux4+jSo&5UuP<8GU)7V%)4Xhbv^yQF9D?&yb3U1Z_P9HFQEuf-`!kgx3;N znN(z6c^+DV2?I+YmQ+m6B#kR2NjEg=<&O2;7$=Wl^xH{sQ_rAOG{E-^p})O{=1-@6 zoiqeXxt)rr=ABx1oF{g}f*BGQ2)rowNJ;V#!*{(P>~m&%4NzmYE`A;# zV@pgQ+ABPVJdJS)*|(Th?EAvLyA6#AuwAS*!EcQ{%gcqIimq|cLHR(m zQCQ=kl8&~E4gXi1Qzj%PlG`1M(CyG(-45;5?ecl|N9mXWR1_cNi&QkdZG+2Y)E`sO zC8QqCgp*TLIuA=jmQQU@0jR%v&@7MX5IziGv!J?zncAj@wIM`Kz`_{SuM_`r{!}Mx z`6M0Yjo60(Qx84`V<2$824>5`7ddw%#D+J=IgPQrf+XPHBI;nQva=QKp(^Lm^p)wC zI=!Y*?%AlLB<+k+Rn#*f`dq(6QZd_~>Co#X>Hg@B&~#x2X14V0O_!f%d^FE6(W!ow zUVVduq)XDBQ7>i+K6JUnILXdcZ2m1}LCS+s4V)ty9swH&psOKZP#~o2#&yHf4`cx4 zfh?e%IQ9exo0=G?_SJ?ws&Ty;VF1ErEAp2iekW)%D2Ti>plhm}dy(ftdIe}XXeZK` zdJ)4bi0lSE4_b&yyohit?rjIrVenO?ry%|w!v6u4BVLd59tF>zM*4G5Hz+}V4=-V> z4?Hs@xYTwQO}k|vB9%qbAyR?aNKHFg#h3doab0z zXF_uwx1d?B9_ZLM3Cx%im?zlLnl!j{jxZN}$tbVRHWicrBO#1;#axh%E*vUnz{U{C zC2Yt*79vdI+3?Xg3%T4treL7XELmB~hF^;RfH6vivDD&7;*BNZ8f3P{r=y6W>q`&C09VjLGMjU< z;Ocp{7^Ru{K-j(5F4=~P2=Oc-+n(Xg2H?P;v?3}=b0R}ax9c&!&`)Uu(ea0VYAW*4CP4AD zHskn@7YO+k?Tfa{Pe9b>;24h6rom&RGTe(6{|gdyu6Sz?#`24VT*U?VBmFfBXhIl< z$y3L%rySg?Dy&T^FCO4!?8hsYpa1d;6K^=jwr<>$pplvTWX162(?L) z?u*VbNRlE#jLa??yES4p^h*8ln32a4|w7!X*f^ zBlU)fxHvsR^45~u4Bd;Fi4vS>wG*V^&@Mufq>cD!F(^6N~W z-+-s=rF+=oDSM^Q;>_MT2x0XpZI1#hBrU~8$2XyvXO3q-{}jV6?mK?$1r@_;`j5Z8?*PM2>GRjW zI9r@utt52sp_jLy_<>5fMYHEd<2nfdZNxOg!AwfC?zknzINh#tm)aQDG>67B&5`JJ zbndMj8`yvEF6`FBViSrzn6yo%Py^=Cn3k1|qY$60XQRzhYw>AA{BHm!*V|bi6N3AK z&+Nn&fkncET52560%j(IZU#~?GDvN~=w={g{18qkkn(*DpC^=gsxaBit*d}(Gi6RD zz&jE#7m)o|%8lMkCf#<-l*y*s?0A50`zzcDhM_Y_P&EZ@3(LhZ;DE6c60kZ*=jEa* zKtUCrjKOt+Plas{^;jD+#-b(+RA8famfsBY z8nWH-l6;%qwb{5sIM;ioP1xg0={DOqm(sma$VN%tybWkQ#kjG`onuwGJhdh6 zDb^C#deOeV?%Dwht%PBnaEi%st86*09QO=sjtlZp-Eged;;yh-TyDWVoRj08Ilcrp zUxl0NaJ#W4mHP$UWCd=PCf|&vT)5fWwi4HE_Sax|J#NA3kJam5Khp9Qr^!=hUG9)}5);*%UnI`a)o^o!e8k zbXU4tW6N+!(%i@ydqRmM3DKZklI+pPARWvlf3>sWtmt2>DNq9)P}8D>|C4ZF;~cVh zE}+f}WAK4VZ~nyYAR`xJOSLktrLOsZs=dUp7<)pW$!Q+ztM%nH-z}1tmvDR7Ql^C4 zH75TjptOuGya?68dk*;ax=F4MkSwf8gO{mwDTYHIaGcTE#)wf(dZA*PY zDesjw#Zrp?6&!0gfRoq9W*A;XxHh)SxL$eaAVqQ-WDVHRm2p8K}cdo zw8%YpLx&=Js;Py`v)~U890HWa2+*A)(m(s3u6^2GN*3c?ehlER%b+L4IBO)ZejG1* zvcYjG27{u0208otN$z8U3;iesJ)@24S2EB&5Y~D7~vL!?oB|;pV2bsnR~{ zl{9e`@u8=^D_Y@Rl4!yJ)}iKyk;D=(piC2a)c^8iP2>zyZa^G09AMr<5D@5G(g7nLWN-v$M;I@ z@zhYS)G?^b|67n0eI8sO+yJd0h0e>xPE7Mqe{Hm^_}9P`+_VCSd>BD+?l0I-JbbxE zmWfh=N<&O~t#8A=m zzbbNA2Z`fJTH}CHo)8Vt$y`!9gH1VTEETaMax4w8LveP(>R^e39)B}_y)d?U3N)wV z`&JrNkg}QZUDySECl#c^-$Nm{y)z$+GO6uXrJv&qF=HUzB&67{wbHRthqYOc2tkPI zvCcz&p#~eYZ%;<2Ju8KfYgpGQ7oqo>Psrr`u#KmE`L1|e0U4+qef=P0AiDfS`}_?E z6*x}!LpI>}avZ0^7p5tOiAYZeQ8_AQJb{B1F;pQfQh}-#ksk~xe9~dU^h!4m{D^p} z9Cr>R@qYxvFyWDLO&-A)Oeab0)ywf(3#MX9eAy!dx_k-N;T9ijV2ZLa7P3Vd zL6W;RYu)yuOc=7P@;HKITT9oRRfvv;yrRs=CJ94U*$k$qJZqY9>em&%@;oT^F!I$hl|X zss~ej==%dO!Gm&U?YSpH$DvCk!N)>n@=Zwap%BG*V{kOE=&T^d3XxA42xUV_&Tgnu2+ z2&}B!*W~x2mU)HR%`-*tbuP*YKv`dO1xz&r-1pCb1rqa*ftPSLeY2OlXo;JKOAG~7 zAv(lOj5787b0~OJh@PGtNa0%n!{*0WzgJL{W%!7RF+Pj$`jj)(vm4>H26P;)MuAyw zQZOog+?NlqfzpMYRa_?;+or;zD?HsxdkSUWOUX z{!VJl@5Oxpz~H$TRsR_J%P6+DR}QPq8Kl1N_g0(GXp})L7NOT-P>0O;anwIQutCnr z4X%}6k|DUd#w=pipB1=6-~rL0v#mfSbhZZhHx(C7htG4B%xiEF!wwIyt(Jc3n~Jqg z_?&p^Q4QEj;fst7+$tBD8eA%eBZ3yFC^UgOr%Bc|+#;7)BmXJ_F@8S9n)IO8}j*5k=CSSQr~c>;?I9`1blGM#VA&+3bh z@64KNJ?a0X)5u=w_W#(KA##CNoi0Gb_H=jD%}GB{sXgb*c%U-_0*AuSgiU>lHXfZ@ z1QW9<H3yD;OD}7RL_YyNk!iGLQN99nTXV?RyBj_uk*V;jNcVE}T!; z6x#&?zs56Lom&OWyt}qKcU77K_u#iC@HWm})2+g|OZd&;$;}v8Z|lC>>C>w*R4&C( zsf#{C>X}Xu{r>~PiOhPSe~~~f#=4ZgRa^Ki6IhjTjP1Y{Uv9eSd5JkxNzPikeTC$l zk6)SjG&W~~=O6UEle!;-w00e2mDZR`NPGR|&I+F;JD=ze^JJ^9XiMn(O zd9-r_yeExYZnckMHMSSGD7^3&C{hIG+ZA3{&V#cqb*c<{kI&SGt!>HK#O}6?9k`E{ zWYWQb?H255ht)p8_n40ql?E@UFOW9e> zeQt&DJY;bN91F0?5SA%QNqZ+$FOlg)J?V?f1h!C^(+sMNY3=DDV!F56hSGLfWhJ!qlTl zuQm7zAUyU;)q|GigFbWfMc;RqRYsjN-9ycXN&>3qoRCjxL#E@BQbP=*l`vRGLuVVY z42!XC9MX+w@RApoeZ!T54Qc08jafI`?r;?|e+RH}!XfwS-c(ydto8+O`mIe})ssN$Zh;FbEjki}a z_pf+swcO!x*k0#6x>b{BduJ>VpV|GH7=ggxEOD3TQQ5FyDCuY^^f|i zaa)D?mY`5mSzF{~i=06R^#K#jhM*k+4nYThlkCBk7_35ivsnv}mqddZPvP%RlyQhK zoSLr>Vh>D%wNiq{mMWSCq(8>;aFq7Ebdjl7%83?wF$@>#f@My-LFXDBq9b_?EFkny zvl)QM1W6%gz^^UFDa3C-gPI&7h1xJ4iiNAv7_3RY4*1AdV6MFDGCJ{LMHv@J5%yrr zz>>5)9$AB9g61y`4@726tSL{tL zR-H@Xr@(5EnZbn9BgLLVFSmDI);seFf1xur-|RUdjE2y5LeSxQuzj>aRI;Bld?yOM zs8l0%Oh_`&fp~NDb-}0Adk*3_fr)O0r$I%}Jc5`BF~YagSb`dxz`u;`iPCY+^|3>k zdS4f5NKoR;7li|MdXwY`efGMjk}N_f01D=Z#0;y?0C{N<+=IH zq^~cphau8c=mXr<2iK1RC{#!HDI?dG2t6)+>Vl{bDF?I2kZ!vw@zL8+@`G`bcW}M< zd}YEJ>Ja#S{R(8Rjx!UlT&6{BiXU8W$MCewp6DlGJADg&Rcj))7a>7!cP;Sk8epxX z@h8Br2(B-Cv|ff6JPBARTlah)!83C(-H4qoBt?4^x(GMuduF*XA#DK11g^O_(Tc1I5P= z@ioz@*2Y5ftqpMu9KhluAg0)_&(C@NS{S@+Xv4&v88EM z+R?F)1=5LU@`|d2aeq{&)ca?=m#;`WTAS`)^IoA=u?vz~xr6+rQ{mtDUW52t?cGc7 zv$odVcgxFpYpv@1-(xbQDtb4Fy<+lq*Y2)fLM$$YvBjR}x&l{MpNXbhggjU4#oCog%o%v0gRVo@v!fE@FI z`23(y;LY$nXs-~P%e+^mO9P3agto;w2`%L8u5VS?4#)Sc1pXtK^0%(mf+KnqJ zGHwzQ+1Axu8*O=4u*K59+u;>yeY^=(2@aHgZcI+Sc0xD#;}J^5;38F2YC6VNrA z)&RFjuZda|#FMe>H zn2ddp<%xbk)6MWT0*6j!K)Tewpl+I%6v0fUs46fJ8ezC1{Q;X1jYN2A@CR)hEPP4u zmr!k8tuR3`-J0oE+J4AruvFK5gn8C9SZ!YF90Gfq=DC6fc%zW*szBuxU1eBSyCU@t zUKh#-FD(?YmP&JdxqzCp_r+x zxs3q3@$8UWzBb5ND$vUvhmHpd#mHDZXeQ`Ds1em|9Q6z!7D( zm5fl@L^hXwW06sM9F+6)fhtM)z6srI{iXd9+&6tb690ix~q zQ?y$;j!}mB5^)y#Jvuz?Li?vP70O&|5vRjdE5c_%0bKV8Jr0#_GgTVw0a1{YYbFKM zynvb^kZ_#*FbaA^Fjbr{GZ53Jnnh&YV)fp{Oy+a--sKthW7`KcIo}D$F!L|LIOZhw zo;!p)99iBw?2x7dH}ojbC`e#p4>}>BpJ;)T0+?D;h39r5(U66ACdQ!@%JK{mRiLQ4 zR>IsJvT0-tzXGqD1MtA#fdq3yoB+L+V%sbOrawjcr&7(J^w_|)_H(+MC%~*iegZt= zspCCed1v@qlrm4Yg#pml^q)Eb84FzKtI~#n+S(Ekjg<{tmEMa_^zdZ9d^sBL@a4)N zwarTP0>cj4nc1@9XQT|ck`7>r#GqAP5>!&~@$g6h3R`fiX|e-71g<>IZ_-aBI0Y48 zr?0JCI_sy-NwPErvrXK^|M-8Y#q<584lU;YV*@3ac9X(PzyQ$jx?ll9MWGH5a9q%g z_;rPN28dKzh*aueK7bxoXwz2XxM9FF)38#}8OS4i?c#~pN*;o`Dngqq%#RCPUkmLi&Q12vC6O$sx&T<#+?JpT9+vwH4(7+S4WNgBKVF9C<=Qg5sp)}3 z!ppE_N`x)l!Z3|V!jdRIZxC)Arv-aYEstHnQBe<6#6t6{s5o;YkyitDn|76=mlQx+l~tux}iyP zwpr6f0;fXMl$iDlCqpV!XZ7G%Ov%i?)x){RqWz*4zotAFDk4(zA()Zh$anuEb=PG5V%d5AB_f52QLxWV9#S`Q2q+el`+Zb6GvE zpoXc?dCYEw!GcAhtJ1y!v->z=^^j>4nD^4wPM1)wnVMXiF;L|YdJjh_P_Zwdy0Jq=5Wuj{SWU{!F|@e0S~f>N7lZe9G5fGRGJG zwU<4G&LxHk|B+*8yz}nm>l#-Y zY;$e$q5nKSccEd!s;2+vq51#!p_TrVp$h+k&`SUJ7mJSfhVs~ip(mK)=P!P&m}i?+ z>(9P4fhqLgdTFeG%cU*;x^MQZo&`J`Tiwlzh+*!Hvu4v^Au-IZtGy8;_1wAS#)Xdg zh7Dc={%Q<&c?qhNx2ZU96OJMRRsOX!4%q5yZmzy@{*45gzr|5V-CR=U|M{CD|D|P|H!wG6|G;pdd1B*O)Z)=Iq$klr%&u7JzoF- diff --git a/firmware.packed.bin b/firmware.packed.bin index b6bca4fdc05f8d43fccfc8231d2149c1c8efe7b5..5fad025550aaebbfe115058c5d3d0700e2c50c16 100644 GIT binary patch delta 57932 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 DiNHB+ delta 56896 zcmXtf1zVJD*EQWKNaxTY=}ipXHFS69(2atZgouE2cc;JrN{zHMk}@brHz?itjn8+y z|6rXv*Is*{GZW|&gXl?;XrqS7(ldCIFvM#?3SN>c_GTJXSyUiitu6koZt_X@M~9<7 z#^GH$F9T;7MH;BDAA)iKs5HJ18=J`Ri89W&2#dg(LzidVxfjWj5o7$e9=Ft!8&mS3s@rCv6Tq6d<^6N}QV zz=IrJey`M&rya;2wF*RF(Uv5Apb^Na7#Tm{fXZ42bmdtLc~fp{?Wp?DI@qR94-1gO zY<(SGS4QaD+&T3q(k;{=YFQ^=ytQuEEbQ*rXJ0e(jE8CA{cL|l$=4gGJld4ptm_zx zaXEd9;XsQe=pjs;h+3o`o;NX&zSJR>f$>bZBct&%xdd?AVzC8U%E!-!+jlr_m4A!5 z&*FFAAib<5yN6U7hUH4(F^L`urqn8;4hyBjR6lp}xWH>M)U0Q@*V-fq*!xx5Z6Iyv zhV1KRStiX1-+sE$>{SoYtBh19D;PNe+CQ%R@B21?t!b4yJ8f5}wO-6moCJ6EOhR%= z&8qg;>4EFpKX1hm{AM_7d9P@%Q68gTb6L_kq7x!ye5Wr06K-x~j(Lrvzl)BT-cC{X zJhxQp;*wo-Ae)GsLoXN>{e!tG%Z2v7bt4ROee@_z*xRUm-8?o{TC4XMva4dGWzC;) zFRt_2$}!Uz->blU%@x*-_Q@NpSx5VcT0%&upbVh1k(|g@JARONPFCY!45d_BPM<5o z(nlvzD(fkmb-4TQTAT~Vn2TNBUmLWiXH-c96?y~CmMmeF;nSNZIX*AFfym!E@5C7t zklCSfefdg!mqkM_ZBZ?^*GBs7+&P{)V`!vL+>C8atFqc@+rb{zjj`aT2N%k@q6)Dt z5(XaLp`D4KL)*8E?9j41qJjo5#z~fSCT!4CS{kUI?gN_Mz@O8C`MI}Jij~fKgc(HC z{F_jjIvC61!6t{U@!q-8s~X8TFW)>EaNHykaW%IP57(l2_v#y|47Z@pX$7rMP92R% zmXW$=R$($4xr|AMHpBiMj%cfUim zB>}jHO^)pMxA-5nv)ZM5UC{MkJ|srcT&~S=B`Rzeoz#@2eO(Fu+S`TA01TV#HsjS> zpKbVVffgU!l5wJx9V`h8D)Mv_eX~v`{_>oodfNq%NR#*AGizs%D1G&Q-T>1kZq)F= z_X>`2`Z+z35?>Dz()xw5S=eu!cTg$A+i3PgS5))Ne{x;X0zM^2Z=a_8XtAQnI6r^aLt*m|ZIQGl)N>?taV4)qH1%UH2dvn3gG6s_f z`)n=I2Sv{4Y|-DlS~Hy$!$jQbNiTyMkq3Zu^lTDP9zdyJCvg4MnBvV2_SQ6Zc#U6LKo)V(@eDjLov772VvAYKS;(#Xixu zx7pN1b}df`61%`EJ)l$D%uiJ?<$UePl{=h;eW`q9odf*FHQq5gHaWl7eHh7+T~- z$I;2)FEoJ_nyVpEn%T1I_#>t>&BM{jxm!{{gW29{|mpRLQ)^+EbT-jN?W_LYGEC45|VD z&~W(l^o50t`{U{e|4^`UA3Hm*LbP@Mvh26_`hZ?6)kg<$;b7|6d8uFmsGK6`uZ2tY zLL+^u-&0XI+)u|hRj8{_V93j0#%flGE0r9z#UqqrX#;FAc{iVeQpk%(=S6OhdvPGW zNTdfjMK6Q*26?;+Nss#s;ZH3wof%mdX=8{al1)<-mC4wQW!&7Ho^2G@R7yy4W4W&_ z2lUP09JW)!pDz0w;XNZ~mnCk@T_LKTyg4OKn@fjDD}JFtOu}7X{pKNWi8~);#Q7+N z?EloNLS@QNtIR)la~1M_qqDM@L+1+3BzxH-oAeYzN5{u{L*tUipZt8G98525R!ub0 z+14p{T;$(!^0wbE=GV#D^A)FU24pkp1S-72y)*?Jpb&GPWD*9drVDv_wlC`W={n3u z%7YFAkzaJjb!71obg|he^hHhT415t*Z>owQ|-kh zafa8COq9mfnpW0;09(|z9(IrPgw(rIOdQc&e#dXFJtgxXx~qE8cI?Jv{muVWog=UZKr1I zG{(E)7^u))!_hce)bsJmI|6Mfo+=~1HXJD5A2LHGHzNL}{fCojr&uulwDO;{A!|V$X6<73gZcwr%eClSdF_Nh=e=mPB3?IebO& zUErRjsEG;%XfQHh{e{eehNR7fXmIVYbg?B8fF8Q@8<`dyY0g*pxhHoLTB5+9b$*u| zg32bbi^_JY@{_r)mc7Kz>D38n3C{%K$xB;euzfoj3jMU^$4`Q-GbB6fj7-DcT~1>m z`;uB^WEwWrm~d&7+AIP_s-bWL_0dV%D#m8MthZnL1yn{}x#Vdjg)TPh(@WFTwlP=} z>EVBlC(d{u`st-P(P}1vF<^t$pp}~07wUtRBvAOs4Yl?uU9tk_Bn=325q8fOTot_| zdYd0jJ7}dFrWul69OD09sJyUTSFR~C2ABeQ9j2VbjjJZwxp1#R_$X) zm5kD-SknSD7F@Q=+?oq#%M-s(ZQD-m)TxQR&)_$YxWs`i;Ze;cUm_=?or#K2sQX&{ zxiJ?%vK#Wk=&mmXO@pAwGz?skDQ~GZY1NQ*N^aP&B%j3{IGCg@rIU2%5%0FIy*q7!Q~pL4!;?xe3y}vW%D>EXHXrHp(OeE1Pn?%Qk559XRQx@blX=ts`^)?4IZE@WZ-8P{0_uiA)oOZway6Qw|k2R>6AyR8*LF;RpM?xip3{r zuz*t{D&lO?#Ec@e!ScXYN=LRox2nn#ikXQF*7Hi-SeDdWn&3(`ufa=)2?$+D8wH^j zouNNdSIO41n_LpeW|WG|f~oo?f4BP@+yCo^%Rx-KTNRLBSTeHYwYL<#E@=Xq_gWte zZ-(!r`%J5w09YV+O zE|4zRpw*H`Rdmob%Ge{7>k!ZoO|8|L9G;;F{qP~%941|5>*8|LsXOQlxpsz-jo-g$I;oy3boXeAo+lr)vTyJ zSCC*v<3Zb;PPN6PCaWB>5P7YuNdDAX8k?kDVEms2sA_LX6B{^USou>w)0}+h33T|N zgay|03L$FDdo2kxP(AdqyGyG3y zefZ`fbKvL&L5xzZ61M4l(Faa9ks;KnonP9s=`TR`=w2h5pEx?n{h4%~9%YaKzD~(4 z?J;C&!r3S*BFr||M-!ZPyJq_^oGy=T0df&3Mme$dP;l#ASy@M89MOl|1Gwa^BUt~% zIB5oh*ns^$x-VNE zX>|-wcvV zWF0^lE`&1G<#G+QrKOrHWA`;#*lDyk!E86Z#!Kq@YNo2?8w9H%w~5YOeHNHxAk1gw zzE-EqW~(DT6H2vRObxJDU4RaLP7QXTdA{X{=yIMaSM>3mdz<*ZeY;bej@r+s=#I0E|53zy%yYVo~|M;F)WmFF6G^mmn*Nc{0~6K8$(Ok*3xC&^C1ApSg#{{so$;wy+$ZtpUv`s1a0sO)d)^2D0q)>Iscg@1#|Pv;-z z0^@8X_{`pY-S*Z>Yv4?tHqtYU#=CVc>Gn1Xqy>N$(L5w4JCuytNL_{UsQT3uscWk? zo9XLS>n&sBk_D4$+xKm4WVyiDm&#T^?BGynd{A`Kxw*BCJ?RCZ>4ayTed3NZjk;*b zgQJ-;rF8jZ&2UM(W;EVWk0*Jg#=l;$WC=0Fmyso?y~X-Bnju}F++cUq>t{Ss)d?uD zJ0ofFs0ia9e0O6lPJX56B6U+jF+HN8R=tnfTqLTb|FwSg8BPnEWpOqqJA-!wrcypN zhe3(gUh`dJ^OGSId7C}2>C{&CK}OkQZQo_;EUmSEbp2Sp^)gBv&s&?34f(^Ns;Q2X zSWj(;d643oCz`6Q(O$6~@{82iq6;`tRqiVy%9tPN^RrnzIn!A1tx+a#O8yow+t?x8 zbwv~C>yw=Z&n0BOxW<1lN3vqsGR?s|WIL|dia&pN5iPKStONM+QrMtqiSx!aWzr1+ zY4wy1n1a($e40jladU+T=O4D7Gj8qUuT?tQ!e*RVPiy0ykOxp=FI)u|=sIa@F5Jh< zNZRZ7TV1a9(&M%GWbd_J>6U3DZ~MH$!%yGb^ot@9)sO976Y-tiobbgY52mcGmyF9q zdBNFF4MzM`oV&T^xg*&J zGfg1`Rp05=Ofb`6cn)Fq8C{kC-{_+TT)7!JLaZ~#N~6GRN2sR`=NnP%!X6>X7y2-5 z>y~UAHy$NAh|cevt2nAZEF@%1D1|v20OliA1r&zN0;eq+|3+OvWu)XpJ|o70xaBEa zvYd)NF^p#c$S8GNiC>xX1J{BN$)Wc0sBj0`opt1J3P!4Aww`7o@oRU{AM@ruQKEUy zcR$N_Gj582g#J(<6|ZlCQR6Pgijdme4in-4Hwk?_sj24_11^9Q4**kQZIzi7P0FrTdw zmAfIrL15%yqET5w>hR~*D6&gesye87?2XEyZctVTR0f|bP^?rSBg4>)&oWG1X`jyK z*hRQG4&@7?TC!3m>F67(reoR_ut%EKK}LBPQDVA94fF0C+H)&@s~^(@3Dp zaE+ZOkoaxDeGk+u?>yY?Ipvae@iWa~t3djArK}X*4Ej^^n+<-+R1Oe6s34>D~e#({@A~IT zsrKs#rM|6a5;%-H1F;ob{@5k3iEq-}NznQWY>M>wW0ZXD%j#t(u_+#J1UJ|`t+~Bo z9ZjwHHXFaRB;tgNDPE61h^mfR*mS zl?PM;wu%prBOB2=9T=N?4pD4`yu??iLg0R=nWKF6hjq3{8b!ZLI8@6|yBk{INwCrk zh>zSH+9-~7xkL}9^0Tf!h{uIsc&xjx2a?Yxxpim=CqP2c$v z;6^zdk=nLsBN8i0YPIr3&ereVKI@*nbI_ag58-MPA3@Z3t^wc9ewKQQCn^AgoAun9 zwne?hU>+!dow#Ttlq{KYdMSdT7$*H|=fQBSI$&1~-N^7o9eXAXm z#-XbG$&5U+&mz-Lx8TMN6QIn5$84C54zw}w6KP{PBjxh-amgs`HRQ$uX#wMv>(jn+ zT3NVo!DVW*l{&1Op(jXW8}u7b05O~L+wy49u}~q~Q+m%5v6v|^$s3dv>hxFOwMx|( zN=jzA*{bD$U0Sw{^4>$+?8NCS_vEJTcdPQfO=R68hI6|pY{U@&EA7UZugCgf+{jF^ z0)2(QKb6M$zSoe5%QK@QN-2XXQ)toCobX8PZ>D}YUt*P(RH2zybLg3*L`0QA zbL$k*-EXxkubvjlorWC~r?&mD8H`Y&KT5L?5r%uBj~oBa42Ziqm*^kr z#3^jKTXEeZP3-_0E!?LY`y&qEBE}^(ZD#cjp_-4IdtO5n?)*mTl%G4QU5f9;^d!Hv zNqpwm!wgessZ^qJb=X1+Z!l|uAG)ewr{hZG=IKZtpp#xU2%Hmqd=&=oU*j}hu+NAS zL6a_zt)W?IvAHYq8dj^DcA7JvJ!Kz*pkx)w_fTu(%3=Wl)w~4UOt+`IakTE?f=#Xn zy8wI@#a77%noGuZlq9D5Vk0fpT9cF*C$S7dhBzwlMj9QD>xAh?mK89rCog$BB}kWoKDG!t&<2!8Ob1HdrOkmU}db9sjBeAo7Jk8?Dv^YIQtVS z|1M@45>-xlDXnNHN=6P#8wyDHzO>_%<7Qy4Tb;%rb~^Z89bq93@rVmG1^puB`4L1_N(Xx+;Z>b#;fN=TlA7O{joTS7J zWGj{iV;xB{$DICZm4as;9`DHUUcEXAM>E*9+JJ=isUNnlTd|BnP`+D`rvjp(XW#}? zyWe=oEa2bg4AdUe4YzM`wmP=$5n#NR6Z0ibqQfkxl7l%7MALA%dP!M73pTHUwSLBA zF1CBcjW9b&zt)j$ZCrYaYtW0F8rqH&m$j{!&kT>c+Q1y7Z!b4Z9NKrwcdktOcK zkn#oB(9Dfoj8(vWqe(}a~=@n^5ZvlpYRt(m{%z(`q(gL7mGrU(d@NbkKw-3>l4JUb^NojTK@0{yr z-k3|%GC8o_+nCj$4SRQfp2N`Z`r%$^<+! zcEclMfvk)0DehB${uA3gLB>j2qP2o7O33y%lhR4HB|jv9LJR?YX=DuiM>W;3BPjM! zOxN^!ImnSgwsUIb6&+kDN47h>}0 zVW6f?Am*~HInV5m&kZx8CFJq9gQ`b11D62f5_7blG5V@rQBgcn2~)#Y*|4y>QBQ}1 z>CUO00r4L3$xQ>cOHP8))|k!S0B+PW$u&z|Iw5;k$h6>@jm&$*^mBrthx=dP9#BU?3tGEa|414`I|C|_ z?S!L0vG&#e{7JCYb5F2=WZ4-{?ug@(E|}Ca%$i2e8!P26BTH4&^C+N!t@*P8PgM zlIARLZ;D!*8c%t0A3n=61mzswhrKWwbWHqJui&nSPJR9%7;lkJ)2g2mjVqDmAw^#f zbziTW+oO0#=-syrnsBNa|KDqgH{eHzoz%2X#T6Se9scq|Yytu7% z(lq*n-Zh;>Cwfkh?ivOcW#=?rn@*{1xarYTGEq(Avaz}2_yY+IRz=j}02^$pGVT(> zYW+T#<-}dkHVEWa`!Aj7nvv&T(=0`_N5h2Y{K)etGK|hQf`v;A(QZlIN9BqHP2gKf zlG5D|?JfLN%LTy25c(_5?3*}Clgsl!9tUr_*UU_a1C+<#bL!?-1Gt37S{nt`o}jn- zrA1k8sXXfX7scA;H>eNzfWeBEjeCl_#&0`+wGp2$&@2o3$W$8GZ4RC%(gi%nUSVX* zxYDt&ylvLJ>;&@$%v5>02|EvBT&M^gX=2TFQqtUb4vh8{+oK%OlhNM3Q67x>ob*S+ ztm+j5G6wF6QKGHJ67bH94koH=Cz7Pg-RdN`s*x6`e1L??sw05f)+e@ArezdB;lKbh zTPjoIQ#HYzIOh6DpOLIZ$8>x?^gT-JN#x;AQl}jUsn$0;Og}&84-q7Mr`;~>CO^y- z{U=i0=MSUpRxaSjF2wG(EZ;_>e^sCZK(x6>f(^X>$6-(dS1wP`lbcx~(;&4HrOA8~ z#1;=)MJ~B}1yFpaVP#vbm_`A*$#^g+26myUi$btg8lYl2&||M-?#+{i2i4(2v3qN_ z;{hM7m&$gr;ipM4J?WlaEL5jaZ;+L#dNkP_&x3AK1=dL0QTEFG@f*yOobki^}ClLBolq-~jsQPa zm3kg9gBo?}vJ$kK7l{;!s6Vy&fRPdjQm=2S&C-tIt6_b)upGf_AhHcgM~d#Tbxgt*7#JN1>6`xee4gl8O)%PsPH9n>`>w2ON-{an6~&L- zTK$tq!hKNyM{5Jje-^+iCAh0wS|6!KsO-)Bl5fe}H)`<>>GR84wspT|@!vsTYkHd7 z_TC@5VZfl(NAa%ufn|1sEu+S|gbwlIy)Jv-c3BaQTv!MTA2IKbT@!pzqE(P4rg{#- zzI0PT@AEA!dUS7=E#Q3#(5i)+YtC7r{$c59;$x2{-!Y!rqfOS(%H~BgV_2t;Z&e=t ziqz@eROljQy5LYc%rzGley2cmHW({>F}4J8e()=&jS&7E#W>yL!Zq z$7HrKU+WJ{?nsntkrIub{?>7&y@7*-75a$E>3Z|~mE{#4kPSZIi>7J4?1rcj02V20 znKw{d`;GYa_UFyDvbRxTVsbxdnU%faZkkd4j0``Hso>)&UK?7}R{KQ_knxX`O6uTK z?vK{Aqh|8|{U&rFU}n5$pl4A`+7ng49kl-zr=&(lp~RFi=w56P7*2lYY5Eh!e3TYP z1nROYDl&t9H?jvbsA|_a*gF*h1V*glcXDwmrmLhe({Ysr``Awj1~)hEg&LK;N0GFg zqL_eCF^<=OnY}8MlhSy**tB%A?yp~w;?eD|n-^wgjY?V9rx&+Qne-S=rHg}Jf?9@& z;lw)c{WuA+;?0(L|2E5KS=%;}|7KneD6{Ab`4ZjMx^D|SWV;Bww4Qdm*i)Pz%xLCo zi?+uwDi}4%RQ+Oh6z}|i+S(JACRQ6l`tV4Ps}f%>)h)~ZnjFe{Usm1`+Z~^2FAwMW zXsq9S9CWE9>1(?3OxBjyhtu}v)>CB2<6D=a8=YT{>1LPg1h4cv#W7JLJI8j1$UBur zSqFMLNDD6ja>7^K=(e)Q{T5qV&m&Yr{!}0=kC?!r&lk%3=WP_?V;M_It#H}T} zD$eccUXrmTZ7(?KMZ0Lpaq9U{rk+U$_?yDMxB0<-dX(7!W&|_OQoEHW?_rrC`(yd_ zwcdLJjkx)EvkTnA=19o#4;-l_=B5BIRQu`2-_K$JvJIQ#P+|9%Y@JvElH)%qP1!l6 zG=+`W_GsPm=97sQA%71=`t<50J7(7Y3vWBIm3--6wlyu&DwgOp5UB!lVpRx;RWG-) z{ddGtoz5WkPo%n*Gvnl;=&%e%eT?={(V+`kAw?)po%6o-41;rBa2k{2rNqU4=+WDW zQw7qvJZ%=GWgwwCrieJg3ij3Sy;A=*7!9aouh%j&@e+e#b$sK#CGg?Cg@-(Csl5A< zN`f_k#|{I8DeWg7o7%P2to(4pEr0p*(|Abj#xscNr~O!@`0V8{+)vAB%WxDuRcGpO zDu;o!H8tR<{K#5b00kuqB6`{^%z8rX-vjg&#Z)WopI3v_+xUe{=tzDSQkb6UowkhF~e`~^Wzd&Ck2<0X8{{{gW_ z5dTi88lY8?S6#`1;kXg~R(TO|_?n&&{mL;@9+@73cI{jn+MG{#(!dDKbtSFV?I;{%ci zlCkf+*x1&W^p0qfjnx)K`nPL(z#C(X@-`}--M~~m(MVB5k+jsy)!*3aQ%~*SeAN*h!zsV0P7e=-h~8r4jk5G_@D!k7k;b?hl#v>RD71&v98od{!$6 zU8WGT0)k<|oCAB+FO&ysk$k|Hj!h7);-kPPDyFxdV|1om4kKmjBG#ZDz*osg_47YU z^txIbdBMQ~M%GIpoWdcB38)E z4Fqw-I28-5pde;amumpp1$yn6_(lcsy^vgMf-O{|T#J=p*D>g?E3{(6`6KG^xVoLj zcG&RF{#46wEu2$1-K{%?K|M~&hzfJB-f3sCthlWyZ$Js!glblJLF=uGO5FO6swTYx zjfb#h2A=fOO}cv!E4;<{yDoabW~b^PR)BqIPWj6lCKN<-90(wp;;szfD{tEsT6`>4 zF8gUWWBv`Xu#i!U1#wIZ!rY@eHR(tonEgDqaWLdapJfx>Ehk#an{jzy+KOt_r)6gW z6p(V(cx{za;lc&;o@jmKP?5J}(tj%6W+!*+UN1Mw68POAk7SbHpx7YvMR25kRGX{jgjj7E5sy7!HoSU#zIfqVi{ z>sI8S3p|4}G-@xaA5G61)0h4Az>(bX*25Y&9!-kBgpTpUnLzaUcuk9uo^M(_Uq*Jx z(Z!#)aD94q>Z}=UImTwn-O2=Bb znfh)F-7sxzG0(ya?sO;5PnNF-Z=*HZbw9@QKf`jNySxa>2s6JXd}a)gA%w)+=JM+- z0WBrio$YqqUDd=-XDPGEVa(MghvU(&u{xOUv5DxK*=A^RlB;XIv7aY@{mmI6wc3xn zS`#u1^9XqRn%GwO)9oh!mlbZ@FFG2y(w^&hw$O z7bZF9kC>wWpwy^9%!LaWqiv^F4<)VJmlnmlhug?4TF+`)nOvWBOweXih5lj&o@Na> zTw^|)X=S&ehtu?rBs(dO<@NMoWLK4XlFvy}4w&wEsCjvBt3BVp|4^<5-ZCc;Emv^y z80}yf_;67On_2tmmW*8_8|Z(L>kRm>av>^v zz_Y?lq5#~3>w~d8;v#MURIayVJe|gCqrDKi-W>WzV=*@UPsZxquOXmu%>x4qY!6lQ z6uLd5%^6NIX4#!R7HOri!b?9L6@SmbwyD|fd9=d^W$6OSswG}gW3spD-FvI0|E0c~ z`wyMx$(JkkSB|yZw;xf_g*FTwsMSA2g{=AZVZfjET%LWy>U@UY0=2ic<7`ra;ykv8 zUt$Qfg{0=IpXKwR45#3zS8ODB*5VI9*I#bO!^BE%H#p`_io&-IXvjHAUzAXsANB6N ze(ptA_Zk(J*6%N`&;}|bq>OVxf%|`}$$5xaW?D9XhLqPkowqW-!v03qqxh0s#LIb4 z0Kj{FxW3()BX*;vt#QSpo=laA=H|w@HTn0oB>fK_ zFgG9EE`~;`65E`;`LAtyON;kAM`1%9m}?lC+i|8flO7AcR1rK%>2&{u%6duH(wB2; zq{HC~1K?eXt~&mgGl&~#=_~Y!F1f$FKtPgIEWHVcLu)Iwae5$@!5{#dmMlxSE0RrS z*q8G&uBAapp!xWDLniXfXpgqayuF|rJ&9&?WXzxY=f_?R<*iD=CCZYm2SN6A51GOm z#$~H~tAcqSR5(cC;_j#3g`VQ8#lA5Sv}= zpB~A>o-^T_o+^{lt|C~}S||1VYAev8qG-$~J(DXyT8S9jf1h$4MTBAsWMM7aH0yS= zw=|nteH~mC#;?c`4a0pRF!mO(ZIkpLo+ zm^eRi9DO&vk~6OMo)L`_0B&u}!U1z~E>>ECE$>xN&;sa!6XNhSTYk~Ahd^r#+|hkS zz*L*rWM<1-qN9DQB^_JkMX*>+v%Y6)tTHlsDWCB=3whOwl<7u2B-r*@?dBX}fiv90 z6x|e_DC5ntkOWw(4exXX!Nx(07ri=+tF!bY>tDtBSNsHPpN^|u#mOKKQ*vw4&6$bFh*7f>_mNUEIT^A7! zX4CJ@)p0>4en-pz#<1$>kEfr<)AHU9B#8d>@AeCzKx5S}6Z-x)leLBfQyn4x0)4E4 zjeLYrT|L|aed_+yS&6wYP9yP>9uJ4SU-9z!&IvDquJ*+J(SEIZ(0HBKm#GSmeajHm z`oxt-`K**P;d4u}ewF~f+I7a1ed=yv=f=mtag!^3zN*GPptynd{2@pml0dG@?auU& zqSx8i<1+#iU3q5+hbg9la>}p}HB;}INpP82fX-fWku&u>>qbrfIFsA72wEw@lI}ij zBXaV&ho}f}E7@QYG7Bi{DovZMs}5^)f9PkB_prt$FRW0239r;Rm<*#7i0+%}K;pCS zcjw_4ikyHXG5@my=dGrU(z0Cma}3Peo=@P{q=Q?k-N`Vlq^LU$<8P^ma&{@X+REM` zgKDs-78>ZSY)R|TuPNQ*VQ#J8=3LEcj$-7S2|w2*ER{U)j3gBuWn$c#C?xbohtwr9 zp0%!_c=IBDjhtSG&(_hK5n9~-p;W9x^=Y%k)Yk@Hb|8XWXH-;XzAyGKN7axbI@_%E zPW1we)mt0oY!9JiZc$6lU^4{*h8pjb8S=kVn6&n<&pv)&lW1J!5-2Hv`Ig3aBrUyk zw~7giaj@fdpTXS25Slyj2R~*iSox&usX(-C$-D&Sh+TFOkt}wT8YU0Bot+9F=f};i zu=oH8`lQTh^ev0PBo#|~djh)S&Ve=xNp&*M#?jBja&MB3Hj*iI)w_np=ve4=(z~o? z=l$O)(@;XiJssNG_Zj{Jf;e0Y+Q(Xm>9C#9{>#Hy#4d|dqvJB)mNov0G!rS^jsA%u!-=suFI~hi&c83B8~rouB|9j;vXp; zK+Xld&Ng>fNJi9ylu8AV5{)}2@{0v_?QQ#*OWIW783ySty$DxD8wDO}r&?wGv1_7O z|LX%?e@JDO)3%xmtQ%bC4L-##;Mm_LGrF8-qhiUu5vkqOhr3K;`{P18dt6Iw=H=_zt|8=NK8L1s*|r6#V}7~^+Gmk94} zL(O`5XBfILhY164m9uo2Uh*S+na9i3p2L{|hGop7)Yf7@c&o zLD0V-Any%SvWYJgM63ZdMj5;-DuTG&$oni36%C6n&m^X{#eqUblEbCC!3L~xAq0L* zmd|rr8^xP@gYs)QFBP2bO)|2(_hh1i9kVfZgI;foT4zu85VXru@E9}CTF9fe%Dl7R zMlP+`m%-4;{#whss|(=rWDcK>MMynf0&VA$4|Q3O2p_Wv=TnNF3VMu>G&$e0U2yQ? z_^c+u@`lw3WTkv(9MSu|GS!fGb3aY3$(kMx6W$>mdaz7gTGaG%4nqsPI$+1ZAKcku zdT#u^s2P@*5JeiYi?V?nPOXw}z5wQ>`3p4G6S5}1ZoXb(y#t)?C+4PT&IocRc+f-( zocltPgl>2OnYOaWlyL`Q&F`NbBGlc{yn2=Me!33eOA)YWP?QQ9A}zpCOnuJTl%TjU zWx5iPqt&-i6poh)v38%Eh&;+eXW!Y}dp?e6@&LiU%>^b^*%xAC=&SpXl`xw0SFo|v z!w21u^Zyvy0nx{oES_nr04WlRc??*y88*875XQ?VElI0Gcg3n=c4hpH{yYH8#9|j6nx^67) zP^>C93^Ue7k28bh@L4|4P~P+!YmUKP`Y>{;O5MBnt%r7{@3b;4{R@g@TfJ7wy{V|V z(u@miLRI0L7%rDuZ!W%KJi|ZD0@Rd-FSZ^dTjj=m`Dut6o~=4lG;LJ?g8Neuh!3et z%G1=Z9U=ykZSr{`bZU95o%;bSZn|8S4Lg%$>7l;-Q=!bVYf86@} z7SaD2U2!^T1-Uf(_sOJ^i!(^bKD<{Mm4we4P*7}Cusw4YUP2)do^KNxU>AVgq8fDz z2Vn}tDAT}{iFjb(jq4r?;*pysybD{hpo+xXqr6z-Gb1Wu#dp^E{;~+iJRs2FnAebzt$0p5#hNoQ1Fmhf$=Bm@x!ZU z9BSl{Y;G)4iG#7-=XfK^SaurSZw52l_Xvk}rtg|%&bbELU7A@(-@1kqhcYUFog_-;;zIknBWenOmQliGS-xa^fS7^`tTmV zrp0Yfd-fdCpp4zqaV1WlGpa%I8QjWfURP?dqQbC?Jph%+v1T#ZGqmfmJ`RG#E&H1E zp?39xycH!J@?xH=b(uLM06v%S$udZdxQ1#Y+f67a^l!-bGr=J?af4s?F;(<-T1~PU zvaMam1Xr63(s5Noqs7P87f#)0wj-jy%b{5G?Io$?gSjjaRee)Vnzy=kQ*jNqM6(B! zG#lx|Z9wqSY>o%7P_fG3+LwjRCi_>YDCyg=4Fr!!0P=JGL4<{#q0-9*zJ3g!?Z4&0 zZiV`l!dN>if?UUmkXhg!x!wN;^8EW#CQO@XQS)!~e^SL`q;{m;Np2g@ zmiHd{&xZq<1)#ySu@z8{uOXvq+CM(Pj|U0$zCpxs9i$Ia z-Z|!TBgto*yLIzY^|X(=^%9DnB1LNEBNBSPJ#g@U;2u`%a6T`Fm%u3&%Q|S*?1o4p z!qQoUBJ6!Pqn@naZ9@(1`T4qDDA}yZi%MPoR5C)>1@OvqL&yQnadv>9Gi9IpO*?B| zJCuK#8K}IoxY+HR@UTDn0>8UYanq`Or*B;UjLcR%lcus`SQtJbyF z+UldAGS~~B)x%U-XIQD3PTs~663s9w>VI56L{o2L z`HrrUKi@@TL$MkvkGI2c&?;VG-Fepa+gQ9)gSypG;P=Vx9|)phFi z-ZE>=1~FiItSM0RS-eSfN)3g3eJC4I_{e5CVf?J5DbutUm*7*29y9qka`NYd!{h_B zwVTld$FTNEuVx+TQ_CxUyojyuW3^CFa9EmAm+RVEp;moWt6I*TV+3@o(TaVU2{>Ot zabkDpF8tsYKNbbqTDA6~Ct)=jIUVznRe33mgJM0RUw5NG%tg<$|90wefA7Br0+nhr zmBWVG)lwgjbvp%_f)1Xfwb!djztg-W_H^^Xj~66*p@#*AnYF|HMYpd7gFIQ1ixzeRw;XY z<@-A53%|H@SM6VHNa|9euU3o6+l!#m)|(F{xdxa!=A&y;0KJ$uD;8Y4C86}r%`3xh z-04M_?e|r5s@6VxK`XZ+yH9mfE83H#jvIJYg=0<>k$b%r^_#8dbMsHP1i3jnD>#Cf zNU1B;t{_1CcX{6S5{4~S(88|+f{`up$6U?jox&A~h%Bnb+gxSAvr)wc^(RAKq%24Fwn11uAH z7;D3yK(x=+D?u`uF|OAq+0~%I`;zQDO$l&klg$}Ir{&KOlq7cCry*K~cWz?(rN^XS z)u&d$@`|!h{cvvapa;J|>b-_C%4YYl?evuAThdw?up<&Wq1 z65Q#aGGC2-xt7bz>lfMq_4Cb(P|QBFz#q)(ajgdf7=>$ZWD$IaJesh^ ze^&ns!!&R@ek3q7x)1{G8NzF4#kl=kkAMRXTzTMw!x0{Kj^OGx~yTAp=L}*sVQA?!F!Gm7XS;L#SGa8Ou(i!du z!Ql5#sK~7OOX_aAA9qH&u*SzckfHaQe_6Tv1g(H|gb*9aFs>}d>&ZBJY8VT}+yuvu zku^QT%ueJb*!!|7m&Kyen`!*&bP<@|_Q$M`G8`vEz^n4%PBu<375a6P_x#L(157i9 zM@hTkrY#NAcDj2t2W0oeX96aKpJrz)g;Y9^K&b6{i3w~vGFp;mv zHr9E1@{4eJ-UKV%r-h^`etHTJ^=db8$|7z!sWj7@uks>QXlt>ogSHxZ^X_Juo*b8aUboQ2oD4=!i^wA;SN^D3JcIEl;UYb&@DX zE`Pby&VEo-nXIO9gEJP}k?Yz=m-R|@^G4rp4^%$yq+-l9X^E;o%5G8052Cjt5o}zRO4tq6bOOr+MJSpRGMeRS?S59|e~atR>~$<& zFgEK9{rsU*PxzKi>u13q-iBBk#&tN4oecGoHqM@pv)S3)!ey-461RgzGSc7fFJ&iI zJ<&?x82PPX0V5;5K2O2n)LSp|<=o!I4y&#S2Ba+@$#NUvG?@qN{D~XCS?_jV`&gM+ z*ZfB8PhRjj6{fs}6E_^}iW`CUoTn0R&r&!#C;xKGhq(7il5zyI5+Eu|%KM9^$~AmK zv;#jl4{KEQI}h|dr(UB|1LuM@$b(ZoxI3?J>a!%G*tU_!q?BQrb0shf6uT?AvrEdZjsKUV^)!r_vdq~Wz^LnEB?NcaN^ z(-Ju(w6ep_cDueFwqJ9AbS+TbL2{1iZ{`0^%<5!@=`6K1S6B4#adTP@hT-M9stHRI z$Jt{Tes=NZtK4uykH<=NE+CIpDH52XsHTSR-SoRp*n6=k6ctO9OWdv5ig%S`lmm*j zRygursZG#owqS@!=u3y!`s6n4C>j&UzRA~y^4&gbRqy1ViTEy9#|U{L-};4nAx5t_ zTTsps&SJ=4JoqdGd-u5lDhE(ibyu=y3iu>LkkoDro);&_`y9+?yr}I?rrOl3k3eue zDQ%yJ+u6M`TPpaxalyx07|cco>i+`~8n9d=S;}Mh49Uop53-QYbBcz|lmN!rz<=!v zr*1&keQsDOF_QleL~8Z^4!1x2O@|b&mDN9+i_flbxUwBvz-EaGE-t+6De^DNIwOy9 z>I!pXaiLGKD+<>}!?DQ_;PDbZ4knMOxX!^YI|;Sz^{+~%1VuiU)qZp&;01MM z0A->WeWROJD72!zqd!nXw0lm@E~o5?PYi} zIQDNl7w^anlkzf-?@zvrOjGs$01Cq~&(jB9{#S$x4jO<;;|~h`C5BdS1;T-FQ{SbP zCGCJpp%nF;Mf(|J7JQ66wRIGoZm7m)fCmNrj0tV{HAn5p0;>)dXIqzy^#_8c^M`Mz zkRf*rKs<4`+9X#+PE!8POX1LQk;roqT33s1TbR~>;`U9ctZ3oP?N#$b@xu(9bJcgN zP-kfUN1QyH94+XIH3#AY{EpdN=0Pxd{g4+6&ZI%n(29z_F{%qH=`B^g5HBt*Woyl? zlgl~AIUJ&CCvI&p5hVnKcZ%rSGq`Q#^ZhaLkVSeSF=tZ|*;XFwLcG9f8l)J$B0DCAGpY; zaYujOZc?9m=4%W+hu@JQa~W@hr&3+b&5Xfhz*L;9bo7)r@%q^-=c^t6Dgxm+^)pPs zTA_mgBFM{nmuxJL6iGcnW-O1eu(+0=)WzFS{#lN)BK3YH3t1;jz*&uCd?kZVeaoY1 zpH|?mIj}VISTt39K>UZ~` zx34E|zEVZdDvR;MBC<7~9UL?>HRc^*lK75X&plJ@?PMSelVc<7JfoES3@oHV+NKdX z{cQ}4-HU7<6kXci$&i?g;I+%+PXFvYyB`&g@8;Tr#~}AnRG`jBkbq?75u};`xm=eZ zm+K$M<*K^xffvSt%w~|laJH#xLYF)fdnCfL`ml^-u2G?fuCtc$p9h2s>H0`7$SH09 zA%Ln#_H5oYp9UDA!uyg>#qvD6;6;b~X0a+(r9~bAb(pl4;}a>0U)v#GOk*kr;-&5W z0pyEO-PJNS-keyNk$i)AZ$o&8f}KVuk!D)k^x(Z7(JV4PDHbMs!P%;Mli6P?_FOSm z?e-yrIUBlc)7bG;4WRr!W>dLVvM`>sV~Qk9ju+rM90C4UkN+P|Cq?8zxvA@`7e;Ja z_A@iT|9?nkoFHBkeQ-;4jH&5sh7v&l(;SnTVWl?ZvL^mipNU$`2nDi zt|7fBMKL6?8~fa@0aG!wn{N|LxZu!sm#zFwuYGi3>_>cOj5DxXz+)J{1FBw$cmlm~ zOFm8FE~F|eA2AtH>HBZ>IrA9wzA}soNL>eKL-!H#PxF?b^m+oPQm?!SbunLu_uwGo zMQgVRRUQ8h#fcvAeBnFUT-`*Mbs()tpc?&t%{AM5tNz1_a<{|r7q|@;n6?Dra-!tF z12}G~30`pWbZRE;3ej1RFFpKEyy4V;%`@elLR9)mhn^4L1jceR-ozL~A_3U(G`RE9CdlXn`}OpGc*sY zUpw;8A7MT%axF%}7DtaL+3IV2G2tN=(eGk5&uy}FKvFAvY~4BDWZhRo zj&UD~Qmj(hoTmvuZySObGlJ;}^j1=iS1Ju9x%+Q%?D*a4pbM>brsMWXgwZi!IK5}{ z3nPB{VuClQRvqmRBZ-ft>m8 zGX-Lj%z>&WPiij9)X@*HRmt{D=wiFCH{iX&s$&1z4Vt9@SDL?<8)CYYPgaA(G(IPP z%;J~bF7~97IfN}jwF^KOjKHh)iw+fzv^nRjj&O35mFlL<-=5SKsNZeiLtm!eX0bcB zItNB$<-$&up~FlAs7lQ_Tw1%nDb^y&@bp&B91A3qDJ2mXg>O=DiI=!~sOpbot$gGc;`}Cq zg#_;s&^<@%Nk6KU$LFfu#}VxF>!5uK;Jj3bC{9@{y5YU0!r#l|dSNS4pxEH{W7=!J zT|94yYIs8YUkRSY$!+|Uz?9~{B$;-9Tk;1#MLSJ?k01HDH6)+uc(j9)r2es&c5oaY zD`5A8Ew&hR)YbWjCJ&fuPi4)42Vfx@VvTw}Fd1V&PL|$YoA(y2PGpC&XI$|M(7_<9 z04d=0+u40NA;@~dTFdPlHP5gL-htS0iH&WSPzl5JtWtD~le@?%y(T=0ln?Fx_D|70 zRqZr?liU*h@ed-xE9-8WJa0;ja|h%l;Y7VVnzoab zm1@cJG2w>T3|?1rI3K4FH?wrAQRtpKcJvY~%KHp|M+g@rl%AdTFE`eZ%s2)y&xsdT zSHWzG@{JeX{NhHRvz*oDqy9q+J4P<)CN;S}9A!vva>KcmrkENF)&ww%7{HDMmWb3g zPmD5QNhU}tdY3sC-Cm0r^6?l|+0OqAd1X{sXLGVWl)LzbaT5NIaHtVb+L?%obRpgF zdS6srJ^2sW%Sro4SICQrK{ctB#(&K7o)y+oE31G|OIF0YL(Xe$#}oRdiu5BddINr* zHx%Vu=tgr>0686*1oZUwDv!0B{mk#v{fE0Eli7GR09WqKPfDZ{LsA~Z<-?%*JC8W@|8t{;w8qlIJ1A{lwYgzG`s#;~jvp^B*f>4~2awAaJU^ z=__~ZsUi5)Zs05NZLnGOO7nrltOGW-V#SJ<+-50Q5Ty~H}l~{g855>bERDY0->(pUSd!|J5tMp zQUqKtuqskU5(Y$m{)64ANW5}Ki@%yKp07z!c-;Jy<)`=P@%H=Ag_Ju|j5BmSO1bgt znJqnhT$#0z%W)5Ml*^Q+qe@1ppFPy^U^Q;+)GkNv>~wcSrrx>op{9H2wfb{F_n-1#by{q|)Qwl1C{Cer$j$%qL#y4B68B>#R;ZQv& zv&M?n3a6y@8k1PN$uvMozBXx;$?cV@{$loQq6sUyfS%2d@84^4A|h~C{n z!as1kncQ+e=NM6T$@My9s2Ke&=gXzrF|dqLfivSCggbWy|4`uOmWnmpkV=LbQir_S zg}eeylD}rcr@jyJC4j-G!90Kg0Q?(7y(L3rCsX|AF^b_I77LkwuYRAZmvS$hsA#BX zJS+B~BB`*RbSXDBY>=blf!_H1U|Tl8I;m)@Vi5oRad8$E{uJbL#WMX2KR|!$W+R)8$eID$Bqv$tym}~IsV)H@nA=RmwD06oB!Dw1);;4}!%Jv@3M+hpIe+jK& z?{!RSV_deNw`c?1KZ=5wW=ePc{lZt{kU%{PGim~Dp zdG!O2^KG57HqKd2n0^kTcR*^HZ1r{kqTWVoc(qH(OxFRJ*2FYuWppmGdSO43$?QSX z=*NXYINO>V8b$DSKKfBt)RZ&yx}sn~eg^96iB`CM;v9krdUx>R)3lp@jFpaj98Q5{ z;u#STs-5cD?k9kpZgGK%N0okmN)unL)Nn1QO1}+2Z3=4Di?(u>lUYSc*wwqKjtg5c z04iwla0Rv>e?cd$B`#PCKCq=@NwvSBn#ru^dSNHs|MqRS^?~1L_C_KbF34agNF}7$ zm`Oqryi;KhS*S9p8WM`u%2lPMK@R^}U3mr~Bq)Z`XzWpD&#?v-P!Hf@Hrl_FNW70; z2}l$DvizbcHpC*yD4r^m_)|DZ2bCtq-Tt3erL#FP>&bCDIlEpOtF7X zT?}SVPMHclo11Y*hMkJ|E^)P= zTPiHL@3S*+qCrkdEfdiXMiU>DqA(&|F}EI5JaO^j9?svGQ)Y!ox=n&==moey9w`Gi zHv6*n#%Zy=TISK09ew+t-#bnm26cjF2X?$&k@=-Ewf2*Weu%c+)CGu#>F&(pog+5G z%007<1c;KY7NW;rQ5!z!-fM7SV5%!Ua0A)Fb|N?&UW^y-KiQJ?IvPhzjkGFfp`sV? zOB=xHU2IG5!ZnVNO0`j7oBIGXQnOwjpRq#Vf`XA(9%M9r01qI)Le@&#L~Irr?7;2P zze{p*Yub4&%Yc+mz4QvV{LY7>{t^g0e}ZX*gurco^RkiVQa)HOiVybmQpoG(Na$Zs zSg|ux?632b`b9<~BI9_aswrh_Ot*P?yKfKkv{=ej3DieDGNrg5nayr(wSZDvwKfQrYSBD!)|TWy^Mmlln>>6}Av zA9E>ll3tRHYIC**5WMXl$&8@Jo67%sd;%v^=aI1r z3q$XLqk&*`kqR#kTB54{WfIRSzaN`7TRt&R>I9UZ?0m_1S=Wt+E3>mW^2x$~uhpSj z2B%ay{aB0~kV9Kn7m%}&f=kuKNysWe+o7lA*xFi#wJs}GFT94mhI=ThD)lp*%V!}WKhOg|xZS)PB7qz4g97$E8Pn2hgT$W!=o0lW$ zcK`yq`7b;>K`s|6RTe0-xeitkYe!C2`9i{wUh#l?ONG6fC!YV4s!%EXoBdxd#dg80 zONd9m`1%?h7xBkXhTgd3;iP{Zowl2w`YUs^BIC~nxLhaCTl_PFoTcY#Dj084j1;F{ z)|l8hZ#Udn9GM9KL75`l$kL(&npRulx|4c_{<5Dn;-jXfVMMq90t=HW z!Ml`=lpkauob!I`>r?USUplyD71W9tTXMs-nn%4>gEeto#;rQSy9cAWu?rmX(G+bR zka4{?4z1aX99zRuQ4&xS9)ZfL_i9|IUhF>!s=!1vYRz>l1#z(Q{NVY|1uj|4THb7} zoCCj#v%1fo14lE^xSXhw1$gYsb|7_2q@}`p z`~{Ja0>wJFLEW0c4$jZIq_2!V)!7VfPF?oFG`__KCGC!gjWEnag`rm*sNaBhU~G~5 zoqU>{i6&r3of;}faadl4$Au|EzbYkBbr>Q(OzD~E;>JVBSt)KbLiDoRu?;P_rN#BSUX=`Cqla|E6kA z@cEh;t?O%QnTF&S*84J8X1BuAm~rDBAu|Gy-QLvl5gxUP@XBsMX7Al&!^E4Ijd~fW z`@8H`CyhFAPeo^b{GwFv5a1LIqAwJ)jFkAvqG+8Akp|&roR+a7V@BJ#F zqh5}KtB!A-Ql{B=FQHF+0^^DM9BZdkvAj$C>p)Zg^d9;;Rzyk)EYzV&AD8K$i`9nj z6>&`{2Rn}@cG9Zlp~4a2l*J!yX%=Nj2_Dbsn13?Q873_$n@3LQjRKOjMl?MYcmRH! z$F4X%dlqO#na2QCU`qMv8!qU(1x`8mNg7o3j2mk`39YoJI7oNC9(amXKY!oQJlUvT z^8!V%hIK47^BzQ9BY8M<;YM(E>)ZAHnNVIF9%CZJX?~=ou+*#2Xmv?NnB!Ix>yj&&S%_L1sVnICqw#C8inMKG-E3=Ze_lVJ2g+?gp?LmQicuYycok zrt}|7)`8tM+2TJ1EitGh$D6DieFTYMqV34@O8(v7Cf$c6K0c0Sj|hoGRc-g9HCsE@ zdwT|LBkixHXbvMYq4cC6tF^uei^%5Bs$Lj|rf|?yVa^++8M&SDAQgg1m1hihVa6_u zA(o1~u&(wx%RPHk{~%z_p$Y_v!YcI&(RIO0$abon0ZXA{yE*2#t=rdA9Li>R_Fo=2 zro@k+!k}*ZoDNE_mFvwfi}yUOEUhPPEBc_7zo`UHF+=G^<2^yGS3k%f_!$-6P4vvd zTYRPuWyiz^jtY`k*n=c6+=H&?dc6t?s@>~e9wak=HwWxnFNwy zcuWdLFcreGlTprnMXEtcA z9l;Ta!Byhq`-Qrj-{y<7Ey-kfSCdOu25gjtQij4;nar3Ag(Ft@{L4`6PI>apY=2|~L zya##fjc2a%FH@{s z*cxY{d!?LLfw|%QVl-3Mh~1)2#p=x^Bzhmpb{>Y*k(XU<9TR=_{Xy6zcuWWnqu6b z;x8d>tD>y+o9ea)fcdYC~AlG(hiXjc|7WwJ8N(ZCqG%@wK-@qox>ZLS^m zbEk;W&ln%MaU)7aPmjmTe``fKdjDmJ7(GMww=Oa7T_&#Jva=EvVd?Q206;3$BaMc0 zO*N=TWu~(14@=L_1tjzC|09*|x!^5KYaxQ>rI?C4CM~|95j!uqeB;w(XRQsUe`+^g z+VTA?Io(;dT`=bo@>;c^!G~7h028tPrWsi)?WieUXRxF>WK)Z`td69lit6B8u3qS^ zq@nDzz(vEgDSWyfaMOo1?}5wXVAMB3A+H8b`B(1Y=H)0lO`yhO9-6LFNQ-gvkK?*+ zl?^s0he4v8TbA#7dEi>_`EgQM)cx{fY5RwqKa>2PzZ@m>t{8h!dwuZvEAX4e(P#coVT|%j9{?(!B zIwf~7navnkRW%td*r#DbP5KmX@^Wu)sF)I;vi{6cE5a}9)p zr7%+}bR2wQse zw9Ys$^|HzWU7|r23zhH=!3VG$w>tdKDV34pfAsoLhNn6W6WA}F@fzW#C)cp8fzxrw zi1w`)AH}Ay7s{PqSiA{g>Mn7~GNN(>IPHPEu76{00)4rxHq?Lqa{duWOT^sch=4qm zEKs){p@_###^9|h2na9Spw@dwm1%M7C;j(+CY)!JvbzV3lh76jp)XwdBBAL~`6{~$ zol=>&@)lX^C@tISS(=E|53jz~#xR@Z!Ac%yow z&9qyd4oiR5-BAPCfJ1N%D>|HVHf;I{in4kO22U?ngGA+{MLrtWC1T6|&xiyq$Jo;> zgH{y9It_*KmkD9go%A1j{WD&JTtger6e9VmN^>_S=Qs2=KI}pCm;j(|AyfN_^Zq zUsL}&U%%7um3Q&-2^nKsY$uzfh2eT*su-wp2}Mxc%|nuu+K0Tl?x>Siw8p)8Xfc{d zE8KN%JTjH|DfJ=1Oh%yb+%a6!R|)U4mMzz73Xo7Zx$v2PnZ--}Wrn1sfFJrhO1}R( zB1R|d+95yJrS^FhdsP;~&SMJwJ1YG3d{T0jD^ae-#IIq-j5=s}jYuAD*zHR%jq@iu zP;l=8*i*T*O63M;quO#Nx!(wov8s%owfIGNB*r=SMgeSKCMsh9Ih~oXRE25Rh1VOf zpdsZSf$`+AMG8n*TVq$`3cJX7o(Fb>T>Ge6vAqdKdoo8=)xPA3#TAouIW|&pdeB?@ zUb9>41%VanMED74N_4SmvgE7oxYAY?WFBVE}l;YxQXS+mx zjbJu{{C+h)(3mVS4CL`V4ey3rj`RjAi?vU=r}#Y`A6*_1u7+HE587Xft}irfNEP(4 znQwE*BcKX53!QRX6S}}GMB!{S|24)?->EZr)kSl#w^gOjec`8VKPAX~NUY(#qn3XSlG$8&mBY`!UJCLh(uMRYfV zNGUt70|e4sO{!yR^Cc(~crJq~0?B=Q(=p9j<1Gy=gjwkPN29sQ-ss^gHO_L;uD9$EbfCy#fv1$G=_LS12rD#_ycovg7g1Ram8V#?MshRkZO8iZ_?1X^hmTN!DiYHKlx3T7o$rh??NFN(^EspI4 z)z9WU{u+p#97U9HqRcq$}f!ja(udLSMD~xy9#yS7laPSWJdy^NH=873`TZ;`H|RiEx4nfv$Tr-%5H6j)f@A z-=`LV!YHLcL66`18$wuqKyW880}S{@fjFIi7Pld;z6^*`k-<0q z+u1M@yUCSZ0_HU7`&Y}x|5P7DI__IhqvZMX|L0ES1IvGa38 zvjw&Kz+F0DkK!x0!vt3(Wl%e%{iIeEpGadf8wKZRHY#J;Tcp0V`i40TH$t=R^@q{i6D})4E3%IU~0q*qGB@L%xGw;HksKf&LdI8}SJ(4wWilNafJ%jIkR^sX0j!-|>v?o<(bAY7POx!H;G z^gViUK7Kvkd<9YIWu|^%j0E$Bx%~C(GNljCi0kB`M|EXH)4S#M>__%yi#r5T`>#pS zXx+6rtjI6Y=KqN$lPdf$i*d(hDvEmLNL7Xcz8~<2l1?wA1+(J+{ZK7pjtI&dy90q25HQ2j0fJ~rC}5{o-Qt(O`&7ZeI*IDcEfy7>&@ zUQ0?)>?vk&Y_n80$w#XZ)w^$uZ`NT^Z zjc5IMsf>^c`$^Yo=KtQ3shA5znSzbHPlC0XR^Hu2W#kwFBHjz%g{v#i!C%mxB7KZ# z!J9E^lELeZ_107I8L}wbr@RRW{$*GA-vM5L2Y5o`@4Atcdqs*VvDp4Dw04S_8L<~` z*(`4^S$tTxa>GluvBde*WwD;5A!k4Y4owFwnWCPUZ=|FObFNk+qp-QZVlUb&V{sk2 zA}h=RY@b;MlFP;O^@Bd0z8o|hl(u};*_5`1Q`+`V-Tze68@;!M%@F)_Xc`yr7Anxr z6qTsyca>jzo!jF;jb*V5S>69dF6Z^3UXkb4oO{7Jjb>P)`3Nn1ScA*x~zC3yc zM7y-CdA%pSQ`p@BC71XF;v6jcOt?&Y!crCLfl0vHY?sI5* z-B3;DeaNWNF^|KBv(r`U7u(Is7xV(S8flMDs|k(LvQ7(2ymXQ(P-t|Uhz_9Y*36n6 zt%jM@%LSwLmV_%wmvN>gfT`H5{~iGO{W{cvs81g%c8?Yllr(c_grpSNXX<0+kY=cq z>{V?za$hXC^co0_1WW}M5u>ka+>i*@{m?wO9cpoIP^GSK=iC-kthC>2`=R>a?v88c z|6ID{se7olbUqDLF)XQj?6=S8*jCmMou{#8aw=r^4OenE9la6zcZ_yZHY(sgYCuMl z8Vat@H~yS)i-L>872IFzjF(8UcTUFZhNY5@SX}ez-q{x-Cj#G2`38{q&kz=tpZUMh z>>|gJ)+Z#iwGI7C8}_5Czy_awEmb6F!jj5*!)Kq?* zPY_rWKar0XTf!ljO6G!nI07R6>cn)O>A$YTiM{aFx9_TWt>X5R-iJ{hQKl9%50}$# zu};XM|L6Wi;pbxeKfjVv(f5RBk4&cLSG~}b?141c%_<~fL|cDskLUQj`N+IA9e+e3 z@{}1_bnk#$Dd!@ra;S3K;&{JKIJ`9 z*tD=94$p4gZ0k7Zs2;|YM~njNS3S7)v!uT^cq^Ve(ZRwhx`_?DC7a)t-USBkSRt*6 zhPc(bVEt>L*!=ocN1&kAP(dN}1G?0ySo$mC__qPQux_J9im{yTiV)o$1pjewxC_DDSAzAMdW;HgrY6#UkdLpeWYCSD zxi_SD)x<6b7P_irBnP9go*7AcBt2mj9=(q~ID5dBtm7IZ%Rl+nJ#A8L;^Vv(hGn^m zhjtn1yi>$D`MZRm*rzW@%y@jbh4;R-+pV!>3K_fH~91#feZh%bJCN+cpjX+k3IK-EUrbK+y;C*d7fC2DE7@K8l2*NZuI%Sp23P zrbSfuQQ=*|q9rPbm;}CiOg}5Nx7*oRUi85uh-JTC3$x&Md4!z$m8-J6?GNZ;cS9}O zs=^6!P2yyH%LrXsPo0VWI`}5=hG4Y9XuGvggzg)3DKHF!NYV3L#BX(mEEt<2BIW!k z(6!Cnki{Ketk3SwN$jf+_ zZmd8{zgk?-=R_6$o|}Z`Am0gfk?A>gDV562r{{#=FWAKGXFrH5tnaAb7Hh7O`AXfs z_YfqaT>3G_#je#AhDncUH(t=;VQBe#V(~K+*`*Egg7U0b%~+0)Mkx$vlzB0>&tUqK z-uzp5(6R38$|tPXU#;x_+}QoFqG-^^e@^(NVZfA1|3TH}D%;81nN&4e4_W>TSH!FD zvvVW%O)ym&l|^Jm_`9t7wrih|q2})eUBo{hY`Zg8E;%a3iNRVxp6cGuz#x3FH2ws4 z&-ncS#FIs$AeGNU)+X>AK%o4zOdDvA+e^fI{_eSMecai*XZd_fa&hvWFPkkGA6Qva zJba9f;ijO*Lxkh;08LT9>}HI}2n#Fq3z2lX1y#0t;jTG?sW>-}U%=y&XhGMpSF?3Z zgZt13e}skmRu@jXi&~M>=*9A9W2o$5*&@+RVbqp0&CSW#5}+h_r}!f2j^r?pKkfDL ztPZsU=zvhQ8fou1AKPeP!5+wndH$s;Y4p0N0L`WCCEY)Fk2j_V%8N`BRJnAj=SbDb zNOa2I!2_J8cJDO23ke(0Gf8frm$AbnVZOgye`ZD;JED$)nL~`8mJQN+y$=u+U)^Xw zJjAxOSVB+afd(d=yS?Wj;`MLzcJ7~qccJO@&>b=`e_N7!lkICSg3CU@cxD`n<#ejy zZr5x*kz?fvs@(<@D6P6@6rBb+8Jw{mGODaV4N0< z>iT?HKOmFKii%dOt9MwU@8o}XAj>1kyh4*~Hc$wB%jGc<2}X8*)0uAhmD|^tcZHIz zwXrK@OOw_;rG3FojV}H0ooZa^8D*P78W&m?2vlN$Vdw@js|7NRJ*|~!DFAA4e}4s* zLowoZQ+_ZE7r<(m0ail;uo`;11b1*=vg=D?A!7Y*d*I&hV5zZP77HAbszEWSGqJ7$ zEUQn^kbna)58Q2MI3G6P-SmT`Qp-t&y#-#`W+_v`=1OohqXkDZtvb8yFO9X`f89Kw zGlO|-_3w>6dsAou(O9fdl(a_8kTfp4k8W<)enhrg`tHsjbK^XY{`n>ag}6G4lQC^& zR21{X5^Jc-O18Zc_}W`BpFQgk+>=`@_11Y;TcQ%qpk;72xrNwggbz>Hn7q`o9Yy+FN`6s|CYb z0SuA3Vy_S7$ikmpsgJZ#p>)N6a6S2%00R_Z^)NLI=LJ)p6U202CMnX0{t<^k`h75W z4{4WdrZ3CpCxKJSrDmVrPYiNS>i)C}gKPXc5(K+>9EqkA747jEqrSoOwc@Em1RmPS zH9!l+)%PjtOuE{2B^(uH) z1-fM#=EnW9#A$PQd~#aF=e2-rTIA0mdp0l=GP66`VF)bs7*-s?OABxure$mw%r`XR z^qaP0Kby()YH*;1T$a(Op42~?tGmNAOXHPmo^hiLC>

m&cba-4c9o30;1m~M_P5n%~(O69==WHi-wi~4#%&sOr- z0R1>)Pl6Q;kF)!pc?NvinY6`PO`qxADADPf1DdOfe9fW!+3}k&RsAUh?GnSK$36Jq zu=J;6@Xcpw`q_$x*oZo}oR9Z)`m3s@ zxECAyOmTLzfD_2qmbgMZVIoZV|A_huzpSFAYf`!d=|)Og6zLLph=)$;?oLJE&?=yG zhalZNfTW~Imvl-ar2^9VZM^rr-+!=w`|LS0vu4d&ZN?fMR)&`QQ?dw)QyXC=wVC+u zmHhp3TTNe)4O?8*Hg+kJ6{f7?mTTUw?sa~Heam8yr;(7u!#iCS(qd!Da>Pji=7+P{lGLasM2`06$f6{mG}~q{_>@lqKk_oz{DQh|G;~ z*pJT6{P5SBmTB40PXhjxOR>hKPrjf4)C2s~g>=$F{sK^B!%7XJTG9!SXt!jvHoV9Ir{w1kZ+tM^yg+?*zLvKqo}(Ti{NoM_!Gu) zY<_awxOos(NO<*{-uWn#=%~$~(m$o+hjXd?LdB<%JFwl zttzI8z-J}h;|b6djKIa`nyabB%SveTVz*{`v%OGMPA)Bn`Vw|G2U931iWEjNy9K1F zpf;w2XfT6)pZQ+Y=IK?`9McH4*>k(9<9NP=SCMUM(XN7b2e=7+C+h|CGk2g8sz|Pq z!y1U7q}BwANH83mc7EfT+4U07Jcjvd?vv1rbXV?;-ASgJtOoSP$H#G*!;*J^ zk%$!li<7Z}Pz)LM*)Y(WjQS{U!eP(Vs0$Z}rj-7GYzX##W!cz#UIVzk<+@$N0KoM_ zpeoh{RdEQYiY0fM+lfIo%tO^e@1IL{paCluX&0+~?!e9m8Bn|P!2ZAJuxOq$$c7r# z)|(^sRc*hZMK}B!VKFPpXqbIa-+j$bi9z(M8%k`6XEG(nVyA;e>!3aPT!5Y^4f! zTsGpxXDQ1Zf|{dWPk8RBuTB!V2mF1cuwdWj*TK|c zPg0}2)~Cbco@nkJ+{9-x2K>?TP7QDnyU*^&gHQ3zhw=MmezvH6u(Yk~(WN?W-||$h zfEd}bywIyBdBEZD*A6Me2rGuB+^m@B4y%6Vi4&!!=6pWUS#qX+0OOR_*=k%hM0$E|9f-l8{acC<;~VnPAbN;bstAIk zP?Y1g-B7>dm1_9?B?oHL1DD6&(P!+wlk@w0_@sr&1hsYOKa6s>%jihJo2h&Ei~Xyo z>{yG%_amn_Qj15Lh1Wrr>mSKoth=BJrC+ClfE?5oaw&qukztSomjO^|5IYMOtwo%) z*~9D5Go9dyz>1e8y9^6`N7$|!j_J>WIlMeRYQ)QoQB@eaStKB&%`X^At0UK{dP)Rk zIL~A+QB4+Zwc^Q!hT_^j&|SV`7kb^}ugrJV5EkWldS+Jlge;T_ZOw(ZCj}x3ib*{B zCh-KzP9~+6@}+c6wnVUTOiZnU@i4{O7{z%KE852Im@Az(UclS!(|1QsDAu2injKEW zc=Wym_F6nYqe9WE_VQKk^CDfe8MAH!kv*F6WQTiNwIY%#JK6C2k2tX(RS9)&t<&Zk z$lOCyjcR+6bau$PhpuvkPEQ8e4DB^H9Z}D^5?=J78#C9WKZ^p>>p!3>E;!c5yc-*T<|qJmvCG^}SuF-6nY zHx(fylqe&qb9fb2`kwhZxL#}U@f`853aY=y^csE<$LUPBTOY0b=6<}b*14^=I83#5 z^-O{5{zxAuJj$0yfw>_o%ahEVv%A3wt7Wks)w8eacX(QEXN~&k$e0k+UYU{SgGX2o z;kYbR=BCNWp5(tO#Z%9m_9)iasYxhOKM(LeRz_A2bl`lJuiAZ+SJ+}u`~Jv?r*5>1 zbM7)gX&nd`kG8O`n z_Enjfp-t#$Qb?m53q8%vBjRN`91uA@1r6jLxt7^pPbVJ_^zw>IqPWazflr{ty}9#IK9`o~GM=*Odilrw zxxKG1hP_zP#835zp`pF+OP^_@<;$DzKg#(Q?Y`E;pLME%a1}1uqvb!u=v>CBas!jg zrYQY~Q{jP*ots|tWK&mY->v*8jR!<$&&s*a;$A4B9cZXKGekA@T5wEKsG7{!PLznq z%#by+Fl9=SygVD2(dD|6=feZ(_^vs{B$BS{0nOC zDIytz|3GvH+{gk&CX%08p7JDtXgmQ(FdXe9)F8m(aZTqsdzb%nA%do(+dF(<1EP30 zQsHvLg6d*Lni&7KtvA2ZqjBrW5<9@@kQc?t(HZ#87-){o5c7@Y5~3&hA*~u>ny5sw zML1aV;>wPx5}25}48Y;gMZd%T1q6pz$KW&BufKwp6uml;aKnquh3Fxg5>OMiKc&Cp z6{qw+51!+e>#Sptd~fZ^r2^Rn=MEzocc_@UTzwH^g2}g;*v>I&qBtRQsH^QH1WEUU zbUc7=&PHcfKATGv%pqa7f3_QOL!aRs=)p^zhe}$EY>Ph^ysu}gEx)X!XYMKqhZ!TK zp*ED~3tfkVCcdD4p!h(b@72j5(WSq^3sa$61{Pv>Rpj;#BhTKtB2zbyI1=9AM&!P~ zykGC}amEo%5VySfINRz4F@m&-jc;>34{LU9a8!JWE#(-KXauSgNH(Mv9BK2b>L$V)g<Ia}KHwI;S<+Hd*PY{L|b@BoMxL@iJ`p;_`o&8L3<%G6FlDfnm=xnZEsKAldZC!ckV}g<+oFEf*zT$H zDG3VF>m~z&!8<@03=J@w%>jb}5B!K$!H;MJ+yDZ=7B9)y)#pfs zHD3fhcc2xiNL^5!1#7nvIGbR6eqEjb#{sR`)OGe2kmpN<>}^cl=-36~vt|D#QDM`m zc-AOcV~dthKA9~E?X=39A>(*hiuw-Zg43NY`ZHECk7mAKL@_iEpxm5yYQvt?Pk*mR zh-gz`E@z2LSv^~0DDC+Mu-Y{8G13PXFJfa8S!^|g64M>_UOPjWrFl$ z(m)lf6|MV?`Z>4(2rkqx=VGHtLPm=(P6Dw3cRQh;7$SqjViVCfCT?uxVU=jAz5G=$ zUd=t@XH{|w_H6MS3%Od|UQd342jcd3fTN<+J4@{nBJTUqTSOla^BQTf$Ag-L;lt=l zbMPO?4qSUYl`SBOz6^`OG@2P_d$QZVkWj`^BpeP*x&8Z+V-0z}zD)JkMf+3)mYqqS#oB~ERlJm%ylqDX4Q0Ijd7@f+! zftlc0p9+Zc(4skFthrl~>L(yFHl_`DDeTeEZW#=;rZUQ`eO!VJBWIRbdkYzL^;ngiLT9d8Y30CNBFL>evAU@Yyk}SN+W-m z_Y*~LDBxA8n<+Zav{sBl>z90U+C%x6q{biD$`5JVO*7&XsAt!;pw;a|@rjamv7e>Jk`NCiA^|~a1rYt&({#} zZPHXU^hlF?=OxPgmNIktYtyA{3hw1nG>2#T_LZgy>Qc#^hE(fDVfG&*dZ=*7qt0HK z)UD(mws$5gZmV44CP1sJTj}0awCPyV$)eDi*$$s+9=8i=BV)4l*8%%KA6akR2$cUs zEfEEjW%GSz5WJl5K4wRs!|J`PF^uOs3+QUlXK2BoRY9aH{{4$kfDr8UNkBMkC|==N~luhpNC+-?g@1GJnMts`=nqK zpj(G5zWkbzCC7OvrIjLEDIMHE-nZtU5sbaO$PaQB87qeXALvE5$NU%vFUb|cazn9t zT^0h|ZZWQpINxddH%m~kk+E#X4Zt3E-!Dv%Pso9p&O0u_{q6*d9{|DPu6`s)it&z7 z8Sikaf&yK_epLu`>3DB9kFTP|6g_wR8`STyJVV-Oous2-y>&b5k!TCUc*J%)MUi{S7@riz52JV~36uy*>jV;qK|A4M+7 z@XM0zuq|BMKV7I1#g79c4JL(nPWa-zVtpx-wd9i=#Xn>7Q>DT_Jg;gcob@bkHYHJ4kWy>;HA|Ax z+erH^D8pmVTa6HkgSj*ox<_JbM$Rcl;1h#Uu4hJ+8>XG&q z<(;uB+o$~&OS1mzbv@)AJj475wX4XPv&2P0ysBZBRTt)4Z*`PQ3W3$C)1XiDDWQRt zFAgBiNn1bbjNFRr_TrhJKCfea>7e`qp$t3UXPG~LdcDXNKEG-x+EegmJ`<1vQ52?6 z`O3I>YV4c+*j#mdr(uzFz<&*0hcL0gl>Ee;pGkctJ;h$5gP9LmkkF7hTSGjMEDma( zcuv59xH#My@);`GJ$i0o9S}C@v-LR?+xo4Aa2v|No8~I8=@hWoFrmUo8g9H+gFzlF zG#ePZy<^;@_qC-*Ec}`z1W)&x37rttCirv^s! z_7#cf{LB(o?fW}i0ho5B$>^|6Gt z3JyDKe)gGa&hBupqA$T8YiT)j=RW_VeIr80S;iA485~j~-WXp+v zJA0e^1v2ze>ONHM0F9r4Lf3=m$`PiLm)5>AE3SCoi8^sM3Y=z;prlnT^lgX&pB>SP zaaqN%uK7$ww!dlqxwWSWe*V5bT`1+RaTVSx7bxBSTkbuwmwDJGaX^elB_}`v&e$Y2ZfFhjp$T{wbdw*h1X~p?G-fZw*d_LqbidqrB}) z*smG0X??ztfKM<C!7xUZZmrDFJc$`^;i(lI0mdDHw|}`}Ie7?FimAitcYk z__g-ZnV!+iNeN@ZG`-?4arx_>UKF0ke7w$om0KOoZA#Nul7y&l(?3LypcvWEsihT7 z4+seR+46=!_lO-9er^4E%JEe}D9ivg9;L!Rjt|Q}xK&L;S&?wL(G_}S6EFE!NQ#1l zsji|^S>uXIiwBv7jS<2b$yyNaO`FJN5p4l5-Lq$3AW#xr@76j5%m3}&v0iShe&AX7 z&P_oFu-WP`FP+a`SPkD3`eSqNJ$;$fgzwKX?-;#(ycf=vf(3P5eu_tcQ7PY6RV5u~jp_n6t%m->X3$b} zXDCD=f_7Dm{Z~s$a;ZBQ5$+q?$6))tX-?Y4%;ww-=Lt#Z%6FnFA!)N`wV)*H`ry6O zBxp98So|Wks*XT&t00hp=>4a}l?6br2i-9SpjLYjlO@4GcdQAzV}HOQK?4QJ4k*h5 zKtb{o^aZ=SaKjjYlBJk1FRRZYK_rN(!jVY)PFg!m_ofD^VubI9A0sRiVZ&hW(`k=zAJp*lO^x;ycxE-*pK{4E8q4{7|3*9OnobTp zNeHz}bD250OI!s>YQ@y3wO8gp9zU1xsR?3w*^FJPN-}^oxyv)c^cEURyGOTJs^N6| zDi){iUR*=HZ}6J~@!OJ!SehF_LaZCR2;p@al~X)1f~4*rD7>vFo0$5Yt^$_NX_<(Y zu3&1Ni8FA;%tw-ODScvO6~)7ZOH6*u@(1gm)jrw0O|YDA!^W0q91H5Tl$P{1mZ1Eh zZRL^f7~(|o7MVI|^%ohG9d(N%@oqH}ea1JFEtg9YajkjqPRcWJySUnH%JP})!moGU zBbZjJ+8#MT`@v12Bex`$n42Cq58< zeCV(W6J3yB9EgTy=ji0;a3q?4n#k&?+9ou(U^F+9Z@=r)h8I^KE1cMvU`?HN2zMEj zt*D4VrUlvk&9~i&uD-2oz_hF^FMQa1`uC?6X&NsW*Xd&?BM%kz}U*sf|tnTF5KIRu;$T8LpeIH9KOWa{@++*~`5MjRc zy05Z)*3KU4#?`J|v)&48yrmwNirl1fVJw44`9K234^&b&!2^oAIwVLv+jc9O&F$yRj@%Zv}Jb zps+4{T9RXxE{PPj?3&ja+-tRoAtx?`v*E+#PQja~xi4F(3%bi94 z;vQH~iLf$V#OOb@f0mD2$-LCgExP5Jj%fm|J4}_LX3UbsGV)^7cN&U47*dS^^7)T~ z&36tDS?+(zNu8~diM+c3gkL(^ii-&=cmr{2nS&v&RBYr|F66md@2dVGBrA%H4h2iW zERA;$SOvwc@{=~K&K?tjC`UX zPeMpL(%0o7x)|mn=3=~=lh!45lYjm8htS9AzZI@-{44_MhmtWR)7Z7seImY8maI3{ zZ$KE%4--v&0h-Zw4hru?s=pRG)&$%q0-vBWp4QKJAwr0uaIPCS5;xec)C_MHS5D@C?zmS&UN8A-aH zLjj6#f9{qHZ_(jj#rog|5Y)!>+Z1F9#m-2Yh-hFWT_W2rJT9H=eM*3eBTo5}4&BUA zM8#Fb5HJ|NhVPR%2{F5D<{`hY|Mvz2foL`Uge9lsr#L?N%aAYmyBJq_>1dohnx3hi z4pBB#V9h7l05NG_sRFeDQ!7o#!0D^9+PAc+(#P!*eDG@ri*d7;u1}ROu_%}e>Pp>t zwzkFFXv=Z!e^{C@q=6Dd2pQp zc4R3fY1g}ro8WqdA$e4T|H$=PEbrfmP&~d@476Y(%wVizOH~?>Z)qaQMCf;W20t89 zhW09M?+_^x?&~q({(mwYh<+sw6&k}>>*se`FlC;g$m>TnUbhyho5jdU(|SIXZy}6E z5y+aVY2+rbbVuO`8jGP`u!zWQ^0p+?w0Y%F{d0De_=xNEAFcHRzZi-0$U1=&8^7`e zlNyFQ1_h+#hE4o$ayhQgJGewfz=UknUDUNsH}oxG=^uk(m0YR54u7OcZ}>h5+3%A+ zt{yeZ27>*?2bIP5tCGHYxe+$@Wue-W!;qU2oYgNYf;iZ?o|>iPHhY?rU403z)9mtK z@X!1#c{1pe>Thq*D@`p_5!-9NnXv6h&kAT_j-2uo= zc78iZH}hxQ;CobrAJ{W#?t&X&P?aqdfmm zCcpqxGTTF@>mlENK%vXyzKj{$^Y+KR5;229G*2tj6;!wHCpG8Lu2N^4uP#4&qm}w& z+~(S!XWOk2Uo;ffwW6Z=-g@(H<#GZ*wRHfd(*RKI-NNDF)Enu=`}xy%3x~3IRdK?9 z77o7wm`)Z{#kv5j9tBl#JE)3H@Am)408Xa__I%pF{=XsE|9=E~dBS-BUOwkMRs0dS zTET^o4Ty^Fc0NBgM>^xquCW8O+Sgd9VbRc9w~e3)l^i2f;h!edJAru8s)R>g6JXUU zgPQ8)m*SS%-9K;Gf-pWE8X&o0e`&GW#Bi&#QWyUtk5kYx+5@0kcLyGvYFhSIbWc^5CEdlyXeDp>ChToY0p zwRZ9%s)sQPRvhad`XzCJ#-#g$`;O_ok9ZuBqawL`G>@0=;mGrbVW!0%#J%5(+Pev< z^BlrdK&_~xyt(#F^|Eg^f8=v_1F*kPyW*#8JEy!r$`~()rQsRVZhd)h0KRx)f=+M) z+(d~r3aQ-pYA@!1;jmO^Gkdethg_ez34|CJ*+ik=O-yo{733H7zsfc7*PYsuOP(Xz zg!@u6(|j4He9upkVwr7zt?K-qcDJ;BjgmOzyQyV)KzqQYE<(bO;o#>BEnI3)0f|I} zk|ho-9j-N-&gQpBMz;*VkW(&;#{>g|Q0*O%Crl3c$Dd`^g$pu?Q3U<P_P>nr zKeMKGOn>(mf?-Vt7iIf8pirCc+wi+RyLvqImlMcje&*f}J}Z*)#>?`q?pYUKO+db^ka+x-Dw<4{h{f;^J93F%ICdE z=N|&LHP^`Shw8AfapBV!1)I3D3F_zBbDDJ$`Lst@Au6$nEv z(4Fdlz27J>GIkT@14<<~U^agT9F7GLhT33e6c3oq9)Qaw5@21B zZ&CHJCtk-FOP}qOy6=#avSqu^Vd$|WJu~VP=N*2zU!Lcc;WBCh9%GnKMlkxz%+&A- z>Fm&P{y>*822u@j%Y9Yytu&V;Y@hd&-Z!;dHu2M#M?#`pd+Wf^|(W{oJ)`(k=3vQ=A zuxalkr*okT$Ux#&q*g+GAY0KsJ?+76(oD)estPd)ltgX_c6@@BDQ5FMWIJF$rB!lYE@`Ndy~?wCv21Vm`_H)r5K7?L|5NML1NK(v4HNblpz#@A{85t@=6M z)W1!kLaevmF;?HGc~EkJuR;+QM@?h11sg=8qnwG|2Rr;wQ<|;kGC?8zNqR-mXb8*m zu&P%yW@{#2tc{ms-HtH1nip=n%&fOcIH?2s)363T0Nht`QJ#b@!!QI1`vDY%PO1`10Dv9%mM$u?^b;N;p zV0WNhm z|NHk6$nZLmNc4>5YoFShUfOTN4F^@HBKg49t4b9T6!cIFeMBPJ;coZ4gl@HOK@+y! z1a`mmK^SuLe|_D}w4%alZ@uXNs^W2wj`L`;SaDt$sGC`?{Is75Lcu)KXQN3jfn>Wg zsuG`AS-StN+tNXCc|pm2qSAQR(5;(jZ)LUi(lIW5N}?aUuBS^Ew|<-(Ul{5(j_{>UsA=9 z9~TNRGA4EXpcP%4`peJ#UWtu=r;f|3J8BrGT+h!O)ijF<`3lYi@j5n_>IGT}=p+;y zX_Qm+TWjvM5Z&{!K3<$=VK6$-JOOroYSvu;#k z&fll25?VjM6V!>oWs^D{hJb8nvC|}a;|QmfqR{*G!RGI=|FIEKXCvRcT2B3Wdie8<-f!g?~AFKFZ4qqzo?w!UM;Wf%#!E|r5(Jkiz|wCobK!M z&|6qlTx>SI_el~gordYU7Qb{DC8#J1r*+!+qs>+ATTKaBMAZC8Co~W)sk`g@lYw>s z+W40ap|fZIN}|_?BNYE3k=P2xkqn0~7LyJMZ8EnvfLuVvt%dINI9Vwllw=>lBSZjR zuLj`tCIepY6d2!Afs*VV7~MVwbUt06lF1H|(cQM&3=kmr4#xKqV0`}xBqKFY6E1;d zqzYEQlOd3eBtSO81I;0FMQrvNsL6`5lbouazf7Itha1h=Gx^bxvbHyJPlQXftD^l9 zj%L4T#h91*#m$RD1KVr5d9hpm-%luz5 zt)&YqPn0)NYBmkKx{+gR#$g~aRfKmtAvE0=Q{98k^sZyiiAV$LG6RDY)Wv7zaiD@I zfs=Een8|(S7dUEu!$mP;$t zKNSQ72=sB1rPv=l4Hcd1TPTrt=Y>eFbyh4bCnn#*7pJ%f8Lwju`t6_Q2Nf~J)qLKI zPa{bW(L`bLTPJ27hGYKBTKSrDc=k0$z_RC5BD#10EuNu zk;7SkX7*uIfVuV=bp*y&W5{F7?%B%g!#a|nil0xLctAbb)2ZAv@W{{$b-nJ=^w#H7 z4_Ytwk4xLKr`g?z0Wz*j0-0Y$ac8y1p^?QeeriNXM7=|#^iK&rM?Tev#M2hVTuJi# zz*Mjnf#=^ioy!xTY{ON0W7UKs4nD z12-X1l$twf9Vs`uGH?QjW)MI$YS2Xf?)-IUMkTSSy&0W(Gch}#uExs#kR%$WzA}z) zLXWR^y2&R+xnAtQ(=%C+ z^ofVOFlOXt{7X-}0u%KlnL|JGZengS+v*7V_jWSb8lsh2w*8A6Z_nj#X(f8EcVuLk z5|t~sUvCf?sE)Q<%XSs9DQ1~R+l|IWi&Yby{8SN+e!iIvN2IuI?0F8#F53iBGe0Cl zc<itgfwuh=&O_Wbgueqe9RsZ*>_$*T9HJAgKeRTWA`(+BQ4)o2@-C+PU%yNt zx~^QQ?(>OhNmDdu&~8A)64Ii~5*25QJMc+aNV2RxFzmo$^fMvWDr)5Z9{l0nLzP27 zBtoBXAM2`wU8qT?cT7UHZgi6+9M3Ef*S1Eqq#*l(%QZgM-&c&7tJzs z^p7o5-5DoM&TTo@^Ms-It0%M5aL4-qp(q0oiM=Mxv55uM64OQwj+TD=E4?=gmG)yE zr7pejvgy+I{~#JT7Is!^2ZhQG<$EgS)Gdsk+CLB-zOq8ii)hwqZ76l9;%C0JEPtFw zQVPhG%sB9RKDh2GosHURk$ZbZO`yA;Cfbur4U^jF?l*)%dabwBHryRzQcNjR@sddM zZ{dRbj0(g&^w&w6UMQhd#o4X)1%dMOX(S|JGj{AHt_8F)CdHCZqby{-rd%5s@7Qc_ z)VCUex!iVKvs98N&!L&)Q}%)W!=Wm$GyWVN~R5l?%`*wdq^*vB~X~cd#1&;29_g`QTQt$H46@;?GUf{-X3Lk*CRy8uRG57Kcym|T7a zdp^m4N_EF*M3{bD_z8MLNzfa5{bpY71QLzBpf|Jxgu+Wulp=O$`X0%^wo9g@>r(v1 z>P~kQ`lMOjlklIoT<5ekuoSi(yln1FVr^g1mkw$B(}#BzG;UA#%;E})D`3X@VBZx2 zx4ZFqO?Xkc+%fFe@Aq~+or#tHIz>Yk`I1qDTB^33Fp)Ecn*CXqa7{aBh9p4AkhK~` zcvTKG%rnH2C}zh2p|I1tiPj3cLCQFrptdO3u^w5c4Taq084x4_CKjF_hIlu={p$-5 zGLz?{Q`fwFK(rc4!fCc{^Za!ZQm--O&R_z7!a^JSe*dJ$=j`?)meH3mg5Hp#Y+<`w zZna#O0hKbY7JE4ZBn)7@$76`<_c{pKjkwIfgz{znu_cV!S9 z01DS~@FE?t%CHW|u}4ntIW5IPpGKmEV%R`T;9`RC{L0?p)6Ud00qLBBwcBlyKSmsmL~v3+`k( z`TqL`;z3Oq1zfTTm3Df}PJw!9zzZfY*xvpb%+luMwzXc^O)cvwT`MJ9o`B5${d6`4*J_ zAZ4T@Mj|SHU4@;|JcA}yBBYvcmGFc`4p6y_6=Y1@^7o_)Lx@i0{~@Kh&E!Xmi>^cs zy&uuPkV_$x&2gHZTzwgX-qc;0Mda2nyM*=W2G;2eje;N1Q|{w?-VQHgh|bu2@$bbI z&)Ch4by5>=GcsCZ^K_004D`!)Fojm+nlxrUP5=akon4%NP;E{B^7fOQZ8Ft+c#1X< zeywRR$q}lKH#!sDL3snE(9y!=rdzgcxd{buRDxT?t)3j+hX945&mm^N@%`F+>sxOJ z(Vth~0F_jTEARNfCkS(tr6&RLjgv9o@5`{7lQaX1#RQVJz~PmiV%{Oe_6F{PP%!}0 zZ4u=+r*9ICHg~R4AlE(mr-ES4?w%XDdH!zGg=glG@*#$Yy;z!og@{CPV$d$P-TWg%KY1CZK+|)y zA|2csq#mFJBf-n_kKHak`HLu|d76a)v}T7u87;%0F-SVo@dIAlA-VIAKiQT5lAN_f z?u*=!o;NJu2HKs8KzrUI^IT&E0;^V!xD1FD?SQA#uWQ}lRs%#RFu7;?T!FNOIlMu*;oXYZV=zE;|Yxc@=!xU#;(Y=1SDs`<^w;?VbClY3fMm?^Y1!38ztS zWNGs&%k^(V(R*5sb{=2(D~WONRL`6TFo1^xWk$%Q2e8vgtCp_|<}kbUidQk&L7KeJ zltCNgAJ6@y?yIcVv7&hfYCH`hj`E~&fw~eurCA;50}{Y8xu1M`?6B;`MyLECPch`` z*SD}C=8ey)#e}XzzdU|G#wSZbjD`TGTLawgyQ!5sAd#qnU-8|F#T|*{j@6nEe#K9L zJl~zwYAPtnTy_;jdjN?f4d4ULpfw`_91>Xo)4c~_7z4sk3TVR#?n@_a8WYro1GIb& zv}TbY48MZbOcR75H)zdx(+%82lkNk9K|rf5yVb{}1x6xwKw-^Rw>%moi_gn?G`R1S zDWCFu{d>eIXGZ`ky-G$vz1bcL5RzG`151(?5`by`-3Rulr?%KoWaJDVH!(_J<} zo)zzO8MH6Dg=ndUern!__9TvuYToM;#`KNY2RqU`%SYIiEh{_LH~jh}AoiV(l)hFg z##=g`fUxfe8us7gVtT|_uU75|aWvDyd+HFRktu>uQ||hzt;P}K7VViS>j(jQHuW~m zsLXu}vw8b9Ilm6Y^+>Hfz2%sN2G3{vGK^x_64=Y-qWvN4Q&*>E5HxyOgM6s$hn{rM z#}kUra;n1U;{_~oQ{<5ojM^Fly1NMvOux2JI`L)QVRAlLOMCyng?Zd@g^5Z_bvY03}gLFz0 zjm&<`B(1?$M-{yz`IOO@|I8rGC$AmgZf7LflNsY`7E>t=Kpj^;TSQyZlo%$TDo$*e z!)gOoZhW1mld@-cTfH*eJ`|I4$Wd*iyWaDo&1Reu6rqRlvOQXCTAA#A{x*aWn`V%W zm{gbVsj9cDeDjsqqxj2d-C?T`k=OI7f&T(VB-bll`4Fh)Jpim&IzmQb%2l+U1m?7dJ|5y zcRM9feDG$_O&dH;EYUbb``Q`fW21rV_Qj;k+G+bBBBn>QXI*QEIQDfZ10SAo{!y~@ z9}Av$%Z=mnUzpzZ2(yqM&Yi#eLJ@KAepo^>%<14^^*Th;-=U+qUAJEH+1dm+!`1nJ z)3?bc@a1MLT;Vv#JlmFVY9h~K)g`49T%V;?YmV(hVZ46eJUt(4WZ69)9+H8f{Y;K% zsxshn0Q2>uW>*(yUB;=nMz{O>l&reGxj|}dIWFHl;aezWktmZ7M$vMS;L+oj%JIT^ z`hmtWK?sO_^!$KUZ2MiOdpHj>LH^fs+(9#zvDY{z+!@)-C+EQbKsZ|Pm-H)51IeIT zC;!-~n#U*~B$Q%z(s=QTZo&~?#Jp%wiB_YHGNpa0A0Gq5W?jbAi6Izc`#p4B`2@sc z!FiW8I9s4q=s0h#MFBhs45SNbbc$Zib00Y?e1`V*Dx$)4U z#tDN1m}_GgxB;V9{g&Vom{YO7&2;A74gB8$G*d5mk2rm*0Wt><{NAm75-yJ~wPZ_yF0dKeXIYcktv_@GL9!-3Q^pc!&;HZ4B?sM!=u*ySnabYdl zGhIH(S{Ajd(j5hl5R-9#+<+Wd(SRGkwONe5q-6N-0mR@Y@s7v(n3*~V(#Q>6fyk;+M$Ydny1cBpiWNPg)_tF67jQ}v^LAIJ2@KinvTPbsob z-U@2v^?$Cea@8dC;ag88?536tGKwG|rm!SmEsbRTZAFffuAhwERQ>QerDtyo)=D%h4wMO<9mdDxO)RSCdV=aU;ahGX`kr&>layk1_XC+pe$!5*IQI{ z)6{@c(}1XB&)hrl^Rl`0wLV+sWbOQ_G zUIrdvdaH}$w8bBO)I!Cn$l?3*ED?0wjjyckc+uEDsYdY~(}%4V!2#MH$UF;m%}MPe z1qW!hd=bQLKtPfD(Y~s!w=_WXOV-O-OXYu$ko>UZ#-9NkAa=exH%;;-61q7+no)_i zM^zJ*NykyTkiaMS!RGj0>S1?TZYhWYGt>s$Kpwh6ufDrSXgc^J@K(ZN0v);w1B46S zMHSUrFYv4ek5IeL(ggS2^^`z5EzgGGlb61mx%O3v>DmC{Hp+A+5?!TNh!{%h!|otT zmKzzNtl4}c|M9)#q$FK(M-sFp1oQS&cZ7Kby||bj<3e1zGGmt>+(64Q`Y27g@@R7uNx7EWGfz5WKBxDAi zwb>MukC(YIH@GoOooGxkx?O)59_pNGDxTTJNnB+wsn+-S^GdzAlqZcnx$5T;$`hz}g6 zm#4<{bWdxy;YF{dXwo)DNYao6PZj9{tgo|Qmo|45xZV8+Siu{(i-P}#A@~IGW=raj zNu8Yxdhpf)djvk$wXBGz^v4^r7ni%^M$~1PuAp4emH)71lmi-}HH3~y13U7AFPDr+?k=_b}vCA&y zRVb3B?-{+{cYOcBbzJv-{m%2epXa!53*Vk!N#L{P&=6sPp=a`6U{M`GwQACe4obuX zyq*}*$-u=jxgju;7`;uaa-S2t_TmpafUZSuvJr5*J8<&swEl+(N@E7|$j2#rP zevM=yc=d^JxN_wdxNoTX(a!(g$63S*`ti-R_?&;)(LXe*f~b5j_lKUAc^h7BaQ^8t zBaRl}=u$>V=-@=&Q~Y}SA2m2%GB5IrlVj#PX-eFw@B#~9vIW@@SQpOLx`(WPaL3-| z6R=jwv;yi!`i}yhx8UfSb77PV5|FF^kQ&4Mdl8d9#x~|*i|bm>Whsfg;*~JS=z}%a zYduv*#UJS{Liq%4jGe6Wm1yv42(*Im`=k(_nnkpRF!Q5wo&~BFTQsw%j5kjX7~C=L z7MhR_SuYB6sK(^xbZW{q9@&@mYdM|*sy@|mwxG>LN19To9eC#+DQVa|uTfV%vVsu& z?l>&DtiyjXYtY$tYv7)4zzo#0cgg?-FTXw7`__`xSJ!oiO3$06+Pk80(VQ^p+x@iY zOc39Ge=X>oDU>B&PU;cZc^g*2H`hqCk^Qv@j_zyx#W{2L+V6rQBk7_5eg9#Xo^h10 z&Qy6?Wb)F*L2RUgOjXgnr|Y-Z&tlv8J(-L}xnawt(AD9T_omk>{iU#b`#kb1&wG;^ zLyhTl+z6kQSRpFYTHj+ZQWZ@3ls9}4Io40283wm>qziGvUUKQso!+qZ$pOfojVuVS zUjy;aFD`0P&t}WkZUF+U&)PWxwv0Gkhj;sl&)gYH*}*#(1a2#2ZfER>BMnq0nd}AG zRqF$lQIA{SS@|B83J`M+`7e-;q8ew<`Ab}OrC8Fon9;3BeAT812?i0yK>g76g>X}YO3Gm+scSp&$9sPiSZ}t4If@)DsO!W9=3SOLiZuZIq{6cq?AH!|1F=S4Sx&w=D z;9-xw&Ib6cw8{VqPQgtmRX=} z$-)w8U9Cye+}k@1r||J(BW8X|ORr%UG{a|%=X#?` zF%*_e;|uo>Z5dMR!6{Ji7^@cqKF=)j8LibU+dm0)=NucIQB4+*tTWQY*;ju?q<6Je zN2xUW&0}o@xs5VL-5ndhAL)B{2=Q(Zwol2YC1%{d=O|*PccpNJ1uqV?hrf#Vci{D= zG`wXL>9K*iUrNms6U|pFX45D~ku#LDofc3-CutI&oW4{+|H-Qj&2X3jI5$=#_#@^T zKLvi%$JOIFUo>puB!Ca-QQCo5D=ma1w7-=YfQ5yu7|QsG(R zGl5XwFPCK)!Vx0K{)k;$WK)dpT`Px&)j%YtD8L z0xSUhn;ds+M(bEJq=*_C3)d&y4*svfvcNj)NZJSPMqkKor|DT>Z7{TnBiu{Hy~DxL8G$pJi`v z@vvkp_)StzX4MjDpmw0btE=wAGk|D)Yw4+OidMC@wDgbSaIqnIa2kNKk=g;>5gNck$mRW+UNjK++>`!WJJ;elO)@dakXf(I9}F`;N!^j|UZo95xT|Xw zUafUKuIXBx!Z)-9ZEd649-V}8$fPhTFjPquj5OH!_Z&t8Ds2u^GgT%xF!9tLA{CecPD*|*dz{sx^++s&I1nu>jJ(pHB1G6Wb6bptM>;ijkMAJPQoa3b98ZFY;SG;bX_@YaCDV@TB7L^CA?9o+AjQC-yREq3`sYw_Ii4lB(6($v3GKyb|$WrkdbQL@tY|1V7q z=&w&BZd1~=m*hX`Qx1{}iDAI9H1dH@s~`RMmPy*R`3T9%_8qfMoC6&}OHso!^c?9;P( z7oX!Ul)ZRvCu2}m4)Q*{Q4Ow`+q={7w7j?5&KgWpA4C(>If)pTpC%K@#~cutb1wvl zVG?V~1)vzv9cCe+=jS7+ATnsfIWR@=fu3-mG;gem#%|R5TDpUtaMFptK>W13ZAg9C z5q}89a{>0tPOMHGmO%xRM1;s(NZfA4_bd<0 zsL$t1VPFUTeq(uNiRuY~)^!(lFiVWFVcDoCCVc==-1+0kToUZS?;e#TA-Lz=nA#Qi z+<#4}U4z#DHfGrG>x}PaY#B_83h1^AHu{YI0pRMu|Wi4)Sb502!*tF znF=52fXlC%)&!aq<9h;GowdGH1q@M|NTMc0#5(|aMvEq^UO}#Er$m{z)B%>&KCH-8 zdG~km8;HgUKaZW;G~Hnixn>z?ahQW)@%Ad(t`=_TirODz{f`ng#boafc_M9iN|)&8As{lW?%7r>aS5cllL*j zE5#@}I{&cWW+Bcl87bs!NE}7CcisG^5z&sGm-LZ$W`CdK=do3`NvrqRNj9gX%graD zF|~Kd(p_DFYyXB4=(YDR)@w({F`(B7(~N;Rp{^m(^MwYdr(jPQlz$4O^&!`3k^#d# z8kzMnH&jLFgz2KT&VHVD?&{LnvrpSc)E?;JG!}QCgdGX_ma_Y6U{=1$?R4Ep&|x06 zD)2Es34y)HQIDP8u2*w7;1b00#_Y_zHoKNY z!w>#RxQx&#RIg!)c*L3a_A0O<@mi`W6xb@~Q=MWd_dGm<>U<$sd*=o^eB$;#>sC;- z_LJKF$U%FLFXrdqu;~c-t4dfdL6SCD&oQ(XiRp4{`QKvrUaP z-n@D$va63+x=&qCGEdj#7xk7}c=F;R@2;0atpEON2t%dtB8zr@K*3w^ee+Wzk>%%1 z)7CuHCN34bC15Q&v#g7g|3-(-yy}hsuQ%2xyLAX@67np@hAPOeXSpT!>}H{q?#k9U zDxd?eC6r715$BsByzc|-OF!LqwfoWkv*9WD2ARs4ihR0va{8&J_c#ThzI@Z`iJ`nZ zu^4Pjak7U&jV>wH{F(4HP-DAJbIjoBTV0V$O#?(&H)d3lFnJBZdo;^;XXF zYF3jwG{&x=Yt5T*U~D-5>{q z9qBIR9{PO8Ar92HBAEmEarr&?6TumxaUtqC83sI47fb0JpP2wTv);`TPuTB>seEg) zwW=2!hAk?ZKmRV+l90{=>Dbt$`vqs$yZ={e@Sr-jf;kkYPstW7$lJ+eK<-&K(#m)! zT-yQ*s82~W^sIHlyuN?ns+Lln`eB?$URUJ|2qF>{M7Pk)>}cM*gaIC0YKSYB;Lw~7 zPb)?sSS%0I@;Ov!{2WiG-gDRRahhuX^2_Omt#TV^_S5Jbtw zyd>8hQ77XwMwHg4=Z)&rG|r;>zFm;m$Ms`4fS1U|&zIgsBqBS+bh@61IP^!2tFK|@ zD!)6IW%fjzu5TY=+>;jMY-z~HCcDK~2nvZnNeL#ITPs5l~lOhea-H8yaNS`c$*29x8na#l&*Mvb!fB!QCFNA)4(umew^F7fpfi zE%5E@kaDi^xH&O*O4_j&m}UxJy_2O)K78nGwl-cM-;0p(JSuqRI2CGle zV>@Z-EYR*q4n*=pr518f4xKl;4bX>xYuC|j99QOS@lIQ~u!e{4&SS_3)F{FH1&08) zAJ=+WgOOEzh?ctKDiy`T1OUTRq1c*=Tt_7l~Zv@N}6gZnl(6le)sidwO2&;lD1)dIsudeT#`9Q`Y@--}&?ZwLgns zTFL*undKy`Wn{hjnC2Cm!wh@ApnxDJ?aua|811qbj?=$soL=Y1U3cu%HL}TzuQoG$ zgRy&lyh9sq45?P%nCGM~jD3^uo0WLH716#~+U(`VdH)&c2Xw(?q}|WAgt{u$Ia+cJ HN&5UBPr)~y diff --git a/frequencies.c b/frequencies.c index 9976f1c..bd11696 100644 --- a/frequencies.c +++ b/frequencies.c @@ -27,10 +27,10 @@ uint32_t g_aircopy_freq = 41002500; const freq_band_table_t AIR_BAND = {10800000, 13700000}; // FM broadcast band lower/upper limit -#if defined(ENABLE_FMRADIO_76_90) - const freq_band_table_t FM_RADIO_BAND = {760, 900}; -#elif defined(ENABLE_FMRADIO_68_108) - const freq_band_table_t FM_RADIO_BAND = {680, 1080}; +#if defined(ENABLE_FMRADIO_64_76) + const freq_band_table_t FM_RADIO_BAND = {640, 760}; +#elif defined(ENABLE_FMRADIO_76_90) + const freq_band_table_t FM_RADIO_BAND = {760, 900}; #elif defined(ENABLE_FMRADIO_76_108) const freq_band_table_t FM_RADIO_BAND = {760, 1080}; #elif defined(ENABLE_FMRADIO_875_108) diff --git a/functions.c b/functions.c index 7c35ea3..e026eca 100644 --- a/functions.c +++ b/functions.c @@ -70,15 +70,15 @@ void FUNCTION_Init(void) g_squelch_open = false; g_flag_tail_tone_elimination_complete = false; - g_tail_tone_elimination_count_down_10ms = 0; + g_tail_tone_elimination_tick_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_found_ctcss_tick_10ms = 0; + g_found_cdcss_tick_10ms = 0; g_end_of_rx_detected_maybe = false; #ifdef ENABLE_NOAA - g_noaa_count_down_10ms = 0; + g_noaa_tick_10ms = 0; #endif g_update_status = true; @@ -123,7 +123,7 @@ void FUNCTION_Select(function_type_t Function) #ifdef ENABLE_FMRADIO if (g_fm_radio_mode) - g_fm_restore_count_down_10ms = fm_restore_countdown_10ms; + g_fm_restore_tick_10ms = fm_restore_10ms; #endif if (g_dtmf_call_state == DTMF_CALL_STATE_CALL_OUT || @@ -174,7 +174,7 @@ void FUNCTION_Select(function_type_t Function) BK4819_set_GPIO_pin(BK4819_GPIO0_PIN28_RX_ENABLE, false); - if (g_screen_to_display != DISPLAY_MENU) // 1of11 .. don't close the menu + if (g_current_display_screen != DISPLAY_MENU) // 1of11 .. don't close the menu GUI_SelectNextDisplay(DISPLAY_MAIN); return; @@ -303,11 +303,11 @@ void FUNCTION_Select(function_type_t Function) break; } - g_battery_save_count_down_10ms = battery_save_count_10ms; + g_battery_save_tick_10ms = battery_save_count_10ms; g_schedule_power_save = false; #ifdef ENABLE_FMRADIO - g_fm_restore_count_down_10ms = 0; + g_fm_restore_tick_10ms = 0; #endif g_update_status = true; diff --git a/helper/battery.c b/helper/battery.c index f48a2f4..5a16eb8 100644 --- a/helper/battery.c +++ b/helper/battery.c @@ -106,7 +106,7 @@ void BATTERY_GetReadings(const bool bDisplayBatteryLevel) g_battery_voltage_average = (Voltage * 760) / g_battery_calibration[3]; - if ((g_screen_to_display == DISPLAY_MENU) && g_menu_cursor == MENU_VOLTAGE) + if ((g_current_display_screen == DISPLAY_MENU) && g_menu_cursor == MENU_VOLTAGE) g_update_display = true; if (g_usb_current < 501) diff --git a/main.c b/main.c index bbeb06d..2197966 100644 --- a/main.c +++ b/main.c @@ -27,6 +27,9 @@ #include "bsp/dp32g030/syscon.h" #include "board.h" #include "driver/backlight.h" +#ifdef ENABLE_FMRADIO + #include "driver/bk1080.h" +#endif #include "driver/bk4819.h" #include "driver/gpio.h" #include "driver/st7565.h" @@ -65,7 +68,7 @@ void Main(void) | SYSCON_DEV_CLK_GATE_AES_BITS_ENABLE; SYSTICK_Init(); - + #ifdef ENABLE_UART UART_Init(); #endif @@ -94,8 +97,11 @@ void Main(void) #if defined(ENABLE_UART) UART_printf("BK4819 id %04X rev %04X\r\n", BK4819_ReadRegister(0x00), BK4819_ReadRegister(0x01)); + #ifdef ENABLE_FMRADIO + UART_printf("BK1080 id %04X rev %04X\r\n", BK1080_ReadRegister(0x01), BK1080_ReadRegister(0x00)); + #endif #endif - + #ifdef ENABLE_MDC1200 MDC1200_init(); #endif @@ -121,7 +127,7 @@ void Main(void) #ifdef ENABLE_CONTRAST ST7565_SetContrast(g_setting_contrast); #endif - + #ifdef ENABLE_AM_FIX AM_fix_init(); #endif diff --git a/misc.c b/misc.c index d15382b..86e2a3a 100644 --- a/misc.c +++ b/misc.c @@ -25,11 +25,11 @@ const uint8_t obfuscate_array[16] = { // *********************************************** -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 fm_resume_500ms = 2500 / 500; // 2.5 seconds +const uint8_t fm_radio_500ms = 2000 / 500; // 2 seconds +const uint16_t fm_play_scan_10ms = 40 / 10; // 40ms +const uint16_t fm_play_noscan_10ms = 1200 / 10; // 1.2 seconds +const uint16_t fm_restore_10ms = 5000 / 10; // 5 seconds const uint8_t menu_timeout_500ms = 30000 / 500; // 30 seconds const uint16_t menu_timeout_long_500ms = 120000 / 500; // 2 minutes @@ -38,10 +38,10 @@ const uint16_t backlight_tx_rx_time_500ms = 10000 / 500; // 10 se 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 dtmf_decode_ring_500ms = 15000 / 500; // 15 seconds .. time we sound the ringing for +const uint8_t dtmf_txstop_500ms = 3000 / 500; // 6 seconds -const uint8_t serial_config_count_down_500ms = 3000 / 500; // 3 seconds +const uint8_t serial_config_tick_500ms = 3000 / 500; // 3 seconds const uint8_t key_input_timeout_500ms = 6000 / 500; // 6 seconds #ifdef ENABLE_KEYLOCK @@ -75,12 +75,12 @@ 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 + const uint16_t vox_stop_10ms = 1000 / 10; // 1 second #endif -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 noaa_tick_10ms = 5000 / 10; // 5 seconds +const uint16_t noaa_tick_2_10ms = 500 / 10; // 500ms +const uint16_t noaa_tick_3_10ms = 200 / 10; // 200ms // *********************************************** @@ -139,7 +139,7 @@ uint16_t g_eeprom_rssi_calib[7][4]; uint8_t g_user_channel_attributes[FREQ_CHANNEL_LAST + 1]; -volatile uint16_t g_battery_save_count_down_10ms = battery_save_count_10ms; +volatile uint16_t g_battery_save_tick_10ms = battery_save_count_10ms; volatile bool g_power_save_expired; volatile bool g_schedule_power_save; @@ -147,23 +147,23 @@ volatile bool g_schedule_power_save; volatile uint16_t g_dual_watch_delay_10ms; volatile bool g_dual_watch_delay_down_expired = true; -volatile uint8_t g_serial_config_count_down_500ms; +volatile uint8_t g_serial_config_tick_500ms; volatile bool g_next_time_slice_500ms; -volatile uint16_t g_tx_timer_count_down_500ms; +volatile uint16_t g_tx_timer_tick_500ms; volatile bool g_tx_timeout_reached; -volatile uint16_t g_tail_tone_elimination_count_down_10ms; +volatile uint16_t g_tail_tone_elimination_tick_10ms; #ifdef ENABLE_NOAA - volatile uint16_t g_noaa_count_down_10ms; + volatile uint16_t g_noaa_tick_10ms; #endif bool g_speaker_enabled; uint8_t g_key_input_count_down; #ifdef ENABLE_KEYLOCK - uint8_t g_key_lock_count_down_500ms; + uint8_t g_key_lock_tick_500ms; #endif uint8_t g_rtte_count_down; bool g_password_locked; @@ -249,14 +249,14 @@ bool g_update_display; bool g_unhide_hidden = false; volatile bool g_next_time_slice; -volatile uint8_t g_found_cdcss_count_down_10ms; -volatile uint8_t g_found_ctcss_count_down_10ms; +volatile uint8_t g_found_cdcss_tick_10ms; +volatile uint8_t g_found_ctcss_tick_10ms; #ifdef ENABLE_VOX - volatile uint16_t g_vox_stop_count_down_10ms; + volatile uint16_t g_vox_stop_10ms; #endif volatile bool g_next_time_slice_40ms; #ifdef ENABLE_NOAA - volatile uint16_t g_noaa_count_down_10ms = 0; + volatile uint16_t g_noaa_tick_10ms = 0; volatile bool g_schedule_noaa = true; #endif volatile bool g_flag_tail_tone_elimination_complete; diff --git a/misc.h b/misc.h index 46a99fb..db60515 100644 --- a/misc.h +++ b/misc.h @@ -110,11 +110,11 @@ typedef enum scan_state_dir_e scan_state_dir_t; extern const uint8_t obfuscate_array[16]; -extern const uint8_t fm_resume_countdown_500ms; -extern const uint8_t fm_radio_countdown_500ms; -extern const uint16_t fm_play_countdown_scan_10ms; -extern const uint16_t fm_play_countdown_noscan_10ms; -extern const uint16_t fm_restore_countdown_10ms; +extern const uint8_t fm_resume_500ms; +extern const uint8_t fm_radio_500ms; +extern const uint16_t fm_play_scan_10ms; +extern const uint16_t fm_play_noscan_10ms; +extern const uint16_t fm_restore_10ms; extern const uint8_t menu_timeout_500ms; extern const uint16_t menu_timeout_long_500ms; @@ -123,10 +123,10 @@ extern const uint16_t backlight_tx_rx_time_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_decode_ring_500ms; +extern const uint8_t dtmf_txstop_500ms; -extern const uint8_t serial_config_count_down_500ms; +extern const uint8_t serial_config_tick_500ms; extern const uint8_t key_input_timeout_500ms; @@ -147,12 +147,12 @@ extern const uint16_t power_save1_10ms; extern const uint16_t power_save2_10ms; #ifdef ENABLE_VOX - extern const uint16_t vox_stop_count_down_10ms; + extern const uint16_t vox_stop_10ms; #endif -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 noaa_tick_10ms; +extern const uint16_t noaa_tick_2_10ms; +extern const uint16_t noaa_tick_3_10ms; #ifdef ENABLE_VOX extern const uint16_t dual_watch_delay_after_vox_10ms; @@ -223,7 +223,7 @@ extern uint16_t g_eeprom_rssi_calib[7][4]; extern uint8_t g_user_channel_attributes[207]; -extern volatile uint16_t g_battery_save_count_down_10ms; +extern volatile uint16_t g_battery_save_tick_10ms; extern volatile bool g_power_save_expired; extern volatile bool g_schedule_power_save; @@ -231,26 +231,26 @@ extern volatile bool g_schedule_power_save; extern volatile uint16_t g_dual_watch_delay_10ms; extern volatile bool g_dual_watch_delay_down_expired; -extern volatile uint8_t g_serial_config_count_down_500ms; +extern volatile uint8_t g_serial_config_tick_500ms; extern volatile bool g_next_time_slice_500ms; -extern volatile uint16_t g_tx_timer_count_down_500ms; +extern volatile uint16_t g_tx_timer_tick_500ms; extern volatile bool g_tx_timeout_reached; -extern volatile uint16_t g_tail_tone_elimination_count_down_10ms; +extern volatile uint16_t g_tail_tone_elimination_tick_10ms; #ifdef ENABLE_FMRADIO - extern volatile uint16_t g_fm_play_count_down_10ms; + extern volatile uint16_t g_fm_play_tick_10ms; #endif #ifdef ENABLE_NOAA - extern volatile uint16_t g_noaa_count_down_10ms; + extern volatile uint16_t g_noaa_tick_10ms; #endif extern bool g_speaker_enabled; extern uint8_t g_key_input_count_down; #ifdef ENABLE_KEYLOCK - extern uint8_t g_key_lock_count_down_500ms; + extern uint8_t g_key_lock_tick_500ms; #endif extern uint8_t g_rtte_count_down; @@ -330,14 +330,14 @@ extern bool g_unhide_hidden; #ifdef ENABLE_FMRADIO extern uint8_t g_fm_channel_position; #endif -extern volatile uint8_t g_found_cdcss_count_down_10ms; -extern volatile uint8_t g_found_ctcss_count_down_10ms; +extern volatile uint8_t g_found_cdcss_tick_10ms; +extern volatile uint8_t g_found_ctcss_tick_10ms; #ifdef ENABLE_VOX - extern volatile uint16_t g_vox_stop_count_down_10ms; + extern volatile uint16_t g_vox_stop_10ms; #endif extern volatile bool g_next_time_slice_40ms; #ifdef ENABLE_NOAA - extern volatile uint16_t g_noaa_count_down_10ms; + extern volatile uint16_t g_noaa_tick_10ms; extern volatile bool g_schedule_noaa; #endif extern volatile bool g_flag_tail_tone_elimination_complete; diff --git a/radio.c b/radio.c index 250fac4..77ee237 100644 --- a/radio.c +++ b/radio.c @@ -675,6 +675,7 @@ void RADIO_setup_registers(bool switch_to_function_foreground) // mic gain 0.5dB/step 0 to 31 BK4819_WriteRegister(0x7D, 0xE940 | (g_eeprom.mic_sensitivity_tuning & 0x1f)); +// BK4819_WriteRegister(0x19, 0x1041); // 0001 0000 0100 0001 <15> MIC AGC 1 = disable 0 = enable #ifdef ENABLE_NOAA if (IS_NOAA_CHANNEL(g_rx_vfo->channel_save) && g_is_noaa_mode) @@ -873,7 +874,7 @@ void RADIO_setup_registers(bool switch_to_function_foreground) { 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_noaa_tick_10ms = noaa_tick_2_10ms; g_schedule_noaa = false; } else @@ -925,7 +926,7 @@ void RADIO_enableTX(const bool fsk_tx) BK4819_PrepareTransmit(); BK4819_set_GPIO_pin(BK4819_GPIO1_PIN29_PA_ENABLE, true); // PA on - if (g_screen_to_display != DISPLAY_AIRCOPY) + if (g_current_display_screen != DISPLAY_AIRCOPY) BK4819_SetupPowerAmplifier(g_current_vfo->txp_calculated_setting, g_current_vfo->p_tx->frequency); else BK4819_SetupPowerAmplifier(0, g_current_vfo->p_tx->frequency); // very low power when in AIRCOPY mode @@ -965,7 +966,7 @@ void RADIO_Setg_vfo_state(vfo_state_t State) g_vfo_state[1] = VFO_STATE_NORMAL; #ifdef ENABLE_FMRADIO - g_fm_resume_count_down_500ms = 0; + g_fm_resume_tick_500ms = 0; #endif } else @@ -982,7 +983,7 @@ void RADIO_Setg_vfo_state(vfo_state_t State) } #ifdef ENABLE_FMRADIO - g_fm_resume_count_down_500ms = fm_resume_countdown_500ms; + g_fm_resume_tick_500ms = fm_resume_500ms; #endif } @@ -1025,7 +1026,7 @@ void RADIO_PrepareTX(void) } else #endif - if (!g_setting_tx_enable || g_serial_config_count_down_500ms > 0) + if (!g_setting_tx_enable || g_serial_config_tick_500ms > 0) { // TX is disabled or config upload/download in progress State = VFO_STATE_TX_DISABLE; } @@ -1067,7 +1068,7 @@ void RADIO_PrepareTX(void) { g_dtmf_is_tx = true; g_dtmf_call_state = DTMF_CALL_STATE_NONE; - g_dtmf_tx_stop_count_down_500ms = dtmf_txstop_countdown_500ms; + g_dtmf_tx_stop_tick_500ms = dtmf_txstop_500ms; } else { @@ -1078,19 +1079,19 @@ void RADIO_PrepareTX(void) FUNCTION_Select(FUNCTION_TRANSMIT); - g_tx_timer_count_down_500ms = 0; // no timeout + g_tx_timer_tick_500ms = 0; // no timeout #if defined(ENABLE_ALARM) || defined(ENABLE_TX1750) if (g_alarm_state == ALARM_STATE_OFF) #endif { if (g_eeprom.tx_timeout_timer == 0) - g_tx_timer_count_down_500ms = 60; // 30 sec + g_tx_timer_tick_500ms = 60; // 30 sec else if (g_eeprom.tx_timeout_timer < (ARRAY_SIZE(g_sub_menu_tx_timeout) - 1)) - g_tx_timer_count_down_500ms = 120 * g_eeprom.tx_timeout_timer; // minutes + g_tx_timer_tick_500ms = 120 * g_eeprom.tx_timeout_timer; // minutes else - g_tx_timer_count_down_500ms = 120 * 15; // 15 minutes + g_tx_timer_tick_500ms = 120 * 15; // 15 minutes } g_tx_timeout_reached = false; diff --git a/scheduler.c b/scheduler.c index 349f0ae..e1f4ff8 100644 --- a/scheduler.c +++ b/scheduler.c @@ -57,23 +57,23 @@ void SystickHandler(void) g_next_time_slice_500ms = true; - DECREMENT_AND_TRIGGER(g_tx_timer_count_down_500ms, g_tx_timeout_reached); - DECREMENT(g_serial_config_count_down_500ms); + DECREMENT_AND_TRIGGER(g_tx_timer_tick_500ms, g_tx_timeout_reached); + DECREMENT(g_serial_config_tick_500ms); } if ((g_global_sys_tick_counter & 3) == 0) g_next_time_slice_40ms = true; #ifdef ENABLE_NOAA - DECREMENT(g_noaa_count_down_10ms); + DECREMENT(g_noaa_tick_10ms); #endif - DECREMENT(g_found_cdcss_count_down_10ms); + DECREMENT(g_found_cdcss_tick_10ms); - DECREMENT(g_found_ctcss_count_down_10ms); + DECREMENT(g_found_ctcss_tick_10ms); if (g_current_function == FUNCTION_FOREGROUND) - DECREMENT_AND_TRIGGER(g_battery_save_count_down_10ms, g_schedule_power_save); + DECREMENT_AND_TRIGGER(g_battery_save_tick_10ms, g_schedule_power_save); if (g_current_function == FUNCTION_POWER_SAVE) DECREMENT_AND_TRIGGER(g_power_save_10ms, g_power_save_expired); @@ -87,27 +87,27 @@ void SystickHandler(void) if (g_scan_state_dir == SCAN_STATE_DIR_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); + DECREMENT_AND_TRIGGER(g_noaa_tick_10ms, g_schedule_noaa); #endif if (g_scan_state_dir != SCAN_STATE_DIR_OFF || g_css_scan_mode == CSS_SCAN_MODE_SCANNING) if (g_current_function != FUNCTION_MONITOR && g_current_function != FUNCTION_TRANSMIT) DECREMENT(g_scan_pause_10ms); - DECREMENT_AND_TRIGGER(g_tail_tone_elimination_count_down_10ms, g_flag_tail_tone_elimination_complete); + DECREMENT_AND_TRIGGER(g_tail_tone_elimination_tick_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); + DECREMENT_AND_TRIGGER(g_tick_to_play_next_voice_10ms, g_flag_play_queued_voice); #endif #ifdef ENABLE_FMRADIO 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); + DECREMENT_AND_TRIGGER(g_fm_play_tick_10ms, g_schedule_fm); #endif #ifdef ENABLE_VOX - DECREMENT(g_vox_stop_count_down_10ms); + DECREMENT(g_vox_stop_10ms); #endif DECREMENT(g_boot_counter_10ms); diff --git a/ui/aircopy.c b/ui/aircopy.c index 0b66898..d22f65d 100644 --- a/ui/aircopy.c +++ b/ui/aircopy.c @@ -31,7 +31,7 @@ void UI_DisplayAircopy(void) const uint8_t errors = g_aircopy_rx_errors_fsk_crc + g_aircopy_rx_errors_magic + g_aircopy_rx_errors_crc; char str[17]; - if (g_screen_to_display != DISPLAY_AIRCOPY) + if (g_current_display_screen != DISPLAY_AIRCOPY) return; // clear screen/display buffer diff --git a/ui/fmradio.c b/ui/fmradio.c index 7d5e8d1..8f815c7 100644 --- a/ui/fmradio.c +++ b/ui/fmradio.c @@ -18,6 +18,7 @@ #include "app/fm.h" #include "driver/backlight.h" +#include "driver/bk1080.h" #include "driver/st7565.h" #include "external/printf/printf.h" #include "misc.h" @@ -30,7 +31,7 @@ void UI_DisplayFM(void) { unsigned int i; - char String[16]; + char str[22]; memset(g_frame_buffer, 0, sizeof(g_frame_buffer)); @@ -38,8 +39,8 @@ void UI_DisplayFM(void) if (g_eeprom.key_lock && g_keypad_locked > 0) { // tell user how to unlock the keyboard backlight_turn_on(0); - UI_PrintString("Long press #", 0, LCD_WIDTH, 1, 8); - UI_PrintString("to unlock", 0, LCD_WIDTH, 3, 8); + UI_PrintString("Long press #", 0, LCD_WIDTH - 1, 1, 8); + UI_PrintString("to unlock", 0, LCD_WIDTH - 1, 3, 8); ST7565_BlitFullScreen(); return; } @@ -48,7 +49,7 @@ void UI_DisplayFM(void) // ************************************* // upper text line - UI_PrintString("FM", 0, 127, 0, 12); + UI_PrintString("FM", 0, LCD_WIDTH - 1, 0, 12); // ************************************* // middle text line @@ -56,16 +57,16 @@ void UI_DisplayFM(void) if (g_ask_to_save) { const unsigned int freq = g_eeprom.fm_frequency_playing; - sprintf(String, "SAVE %u.%u ?", freq / 10, freq % 10); + sprintf(str, "SAVE %u.%u ?", freq / 10, freq % 10); } else if (g_ask_to_delete) { - strcpy(String, "DELETE ?"); + strcpy(str, "DELETE ?"); } else { - memset(String, 0, sizeof(String)); + memset(str, 0, sizeof(str)); if (g_fm_scan_state == FM_SCAN_OFF) { @@ -75,43 +76,43 @@ void UI_DisplayFM(void) { if (g_eeprom.fm_frequency_playing == g_fm_channels[i]) { - sprintf(String, "VFO (CH %u)", 1 + i); + sprintf(str, "VFO (CH %u)", 1 + i); break; } } if (i >= ARRAY_SIZE(g_fm_channels)) - strcpy(String, "VFO"); + strcpy(str, "VFO"); } else - sprintf(String, "CH %u", 1 + g_eeprom.fm_selected_channel); + sprintf(str, "CH %u", 1 + g_eeprom.fm_selected_channel); } else if (!g_fm_auto_scan) - strcpy(String, "FREQ SCAN"); + strcpy(str, "FREQ SCAN"); else - sprintf(String, "A-SCAN %2u", 1 + g_fm_channel_position); + sprintf(str, "A-SCAN %2u", 1 + g_fm_channel_position); } - UI_PrintString(String, 0, 127, 2, 10); + UI_PrintString(str, 0, LCD_WIDTH - 1, 2, 10); // ************************************* // lower text line - memset(String, 0, sizeof(String)); + memset(str, 0, sizeof(str)); if (g_ask_to_save) { // channel mode const unsigned int chan = g_fm_channel_position; const uint32_t freq = g_fm_channels[chan]; - UI_GenerateChannelString(String, chan, ' '); + UI_GenerateChannelString(str, chan, ' '); if (FM_CheckValidChannel(chan)) - sprintf(String + strlen(String), " (%u.%u)", freq / 10, freq % 10); + sprintf(str + strlen(str), " (%u.%u)", freq / 10, freq % 10); } else if (g_eeprom.fm_channel_mode && g_input_box_index > 0) { // user is entering a channel number - UI_GenerateChannelString(String, g_fm_channel_position, ' '); + UI_GenerateChannelString(str, g_fm_channel_position, ' '); } else if (!g_ask_to_delete) @@ -119,8 +120,12 @@ void UI_DisplayFM(void) if (g_input_box_index == 0) { // frequency mode const uint32_t freq = g_eeprom.fm_frequency_playing; - NUMBER_ToDigits(freq * 10000, String); - UI_DisplayFrequency(String, 23, 4, false, true); + NUMBER_ToDigits(freq * 10000, str); +#ifdef ENABLE_TRIM_TRAILING_ZEROS + UI_DisplayFrequency(str, 30, 4, false, true); +#else + UI_DisplayFrequency(str, 23, 4, false, true); +#endif } else { // user is entering a frequency @@ -131,10 +136,23 @@ void UI_DisplayFM(void) { // delete channel const uint32_t chan = g_eeprom.fm_selected_channel; const uint32_t freq = g_fm_channels[chan]; - sprintf(String, "CH %u (%u.%u)", 1 + chan, freq / 10, freq % 10); + sprintf(str, "CH %u (%u.%u)", 1 + chan, freq / 10, freq % 10); } - UI_PrintString(String, 0, 127, 4, (strlen(String) >= 8) ? 8 : 10); + UI_PrintString(str, 0, LCD_WIDTH - 1, 4, (strlen(str) >= 8) ? 8 : 10); + + // ************************************* + + { + const uint16_t val_07 = BK1080_ReadRegister(0x07); + const uint16_t val_0A = BK1080_ReadRegister(0x0A); + sprintf(str, "%s %s %2udBuV %2u", + ((val_0A >> 9) & 1u) ? "STE" : "ste", + ((val_0A >> 8) & 1u) ? "ST" : "st", + (val_0A >> 0) & 0x00ff, + (val_07 >> 0) & 0x000f); + UI_PrintStringSmall(str, 0, LCD_WIDTH, 6); + } // ************************************* diff --git a/ui/main.c b/ui/main.c index fcc7b68..b0de98e 100644 --- a/ui/main.c +++ b/ui/main.c @@ -86,7 +86,7 @@ void draw_bar(uint8_t *line, const int len, const int max_width) { unsigned int timeout_secs = 0; - if (g_current_function != FUNCTION_TRANSMIT || g_screen_to_display != DISPLAY_MAIN) + if (g_current_function != FUNCTION_TRANSMIT || g_current_display_screen != DISPLAY_MAIN) return false; if (g_center_line != CENTER_LINE_NONE && g_center_line != CENTER_LINE_TX_TIMEOUT) @@ -100,7 +100,7 @@ void draw_bar(uint8_t *line, const int len, const int max_width) else timeout_secs = 60 * 15; // 15 minutes - if (timeout_secs == 0 || g_tx_timer_count_down_500ms == 0) + if (timeout_secs == 0 || g_tx_timer_tick_500ms == 0) return false; { @@ -108,7 +108,7 @@ void draw_bar(uint8_t *line, const int len, const int max_width) 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 = g_tx_timer_count_down_500ms / 2; + const unsigned int secs = g_tx_timer_tick_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; @@ -178,7 +178,7 @@ void UI_drawBars(uint8_t *p, const unsigned int level) bool UI_DisplayAudioBar(const bool now) { - if (g_current_function != FUNCTION_TRANSMIT || g_screen_to_display != DISPLAY_MAIN) + if (g_current_function != FUNCTION_TRANSMIT || g_current_display_screen != DISPLAY_MAIN) return false; if (g_center_line != CENTER_LINE_NONE && g_center_line != CENTER_LINE_AUDIO_BAR) @@ -198,7 +198,7 @@ void UI_drawBars(uint8_t *p, const unsigned int level) const unsigned int txt_width = 7 * 3; // 3 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 = g_tx_timer_count_down_500ms / 2; + const unsigned int secs = g_tx_timer_tick_500ms / 2; uint8_t *p_line = g_frame_buffer[line]; char s[16]; @@ -272,7 +272,7 @@ void UI_drawBars(uint8_t *p, const unsigned int level) #endif if (g_current_function == FUNCTION_TRANSMIT || - g_screen_to_display != DISPLAY_MAIN || + g_current_display_screen != DISPLAY_MAIN || g_dtmf_call_state != DTMF_CALL_STATE_NONE) return false; // display is in use @@ -381,7 +381,7 @@ void UI_update_rssi(const int16_t rssi, const int vfo) return; // display is in use #endif - if (g_current_function == FUNCTION_TRANSMIT || g_screen_to_display != DISPLAY_MAIN) + if (g_current_function == FUNCTION_TRANSMIT || g_current_display_screen != DISPLAY_MAIN) return; // display is in use p_line = g_frame_buffer[Line - 1]; @@ -448,7 +448,7 @@ void UI_DisplayMain(void) // clear the screen memset(g_frame_buffer, 0, sizeof(g_frame_buffer)); - if (g_serial_config_count_down_500ms > 0) + if (g_serial_config_tick_500ms > 0) { backlight_turn_on(10); // 5 seconds UI_PrintString("UART", 0, LCD_WIDTH, 1, 8); @@ -910,7 +910,7 @@ void UI_DisplayMain(void) } if (g_center_line == CENTER_LINE_NONE && - g_screen_to_display == DISPLAY_MAIN && + g_current_display_screen == DISPLAY_MAIN && g_dtmf_call_state == DTMF_CALL_STATE_NONE) { // we're free to use the middle line @@ -979,7 +979,7 @@ void UI_DisplayMain(void) 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 (g_screen_to_display != DISPLAY_MAIN || g_dtmf_call_state != DTMF_CALL_STATE_NONE) + if (g_current_display_screen != DISPLAY_MAIN || g_dtmf_call_state != DTMF_CALL_STATE_NONE) return; g_center_line = CENTER_LINE_DTMF_DEC; @@ -994,7 +994,7 @@ void UI_DisplayMain(void) 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 (g_screen_to_display != DISPLAY_MAIN || g_dtmf_call_state != DTMF_CALL_STATE_NONE) + if (g_current_display_screen != DISPLAY_MAIN || g_dtmf_call_state != DTMF_CALL_STATE_NONE) return; g_center_line = CENTER_LINE_DTMF_DEC; @@ -1009,7 +1009,7 @@ void UI_DisplayMain(void) else if (g_charging_with_type_c) { // show the battery charge state - if (g_screen_to_display != DISPLAY_MAIN || g_dtmf_call_state != DTMF_CALL_STATE_NONE) + if (g_current_display_screen != DISPLAY_MAIN || g_dtmf_call_state != DTMF_CALL_STATE_NONE) return; g_center_line = CENTER_LINE_CHARGE_DATA; diff --git a/ui/search.c b/ui/search.c index 9166471..d7aff19 100644 --- a/ui/search.c +++ b/ui/search.c @@ -34,7 +34,7 @@ void UI_DisplaySearch(void) char String[17]; bool text_centered = false; - if (g_screen_to_display != DISPLAY_SEARCH) + if (g_current_display_screen != DISPLAY_SEARCH) return; // clear display buffer diff --git a/ui/status.c b/ui/status.c index cbdda10..946e2ec 100644 --- a/ui/status.c +++ b/ui/status.c @@ -102,7 +102,7 @@ void UI_DisplayStatus(const bool test_display) if (g_scan_state_dir != SCAN_STATE_DIR_OFF || test_display) { // don't display this if in search mode - if (g_screen_to_display != DISPLAY_SEARCH) + if (g_current_display_screen != DISPLAY_SEARCH) { if (g_scan_next_channel <= USER_CHANNEL_LAST) { // channel mode @@ -145,7 +145,7 @@ void UI_DisplayStatus(const bool test_display) g_scan_state_dir != SCAN_STATE_DIR_OFF || g_css_scan_mode != CSS_SCAN_MODE_OFF || (g_current_function != FUNCTION_FOREGROUND && g_current_function != FUNCTION_POWER_SAVE) || - g_screen_to_display == DISPLAY_SEARCH) + g_current_display_screen == DISPLAY_SEARCH) { memcpy(line + x, BITMAP_TDR_HOLDING, sizeof(BITMAP_TDR_HOLDING)); } diff --git a/ui/ui.c b/ui/ui.c index cf08385..32272ea 100644 --- a/ui/ui.c +++ b/ui/ui.c @@ -35,7 +35,7 @@ #include "ui/search.h" #include "ui/ui.h" -gui_display_type_t g_screen_to_display; +gui_display_type_t g_current_display_screen; gui_display_type_t g_request_display_screen = DISPLAY_INVALID; uint8_t g_ask_for_confirmation; bool g_ask_to_save; @@ -45,7 +45,7 @@ void GUI_DisplayScreen(void) { g_update_display = false; - switch (g_screen_to_display) + switch (g_current_display_screen) { case DISPLAY_MAIN: UI_DisplayMain(); @@ -81,12 +81,12 @@ void GUI_SelectNextDisplay(gui_display_type_t Display) if (Display == DISPLAY_INVALID) return; - if (g_screen_to_display != Display) + if (g_current_display_screen != Display) { DTMF_clear_input_box(); g_input_box_index = 0; - g_in_sub_menu = false; + g_in_sub_menu = false; g_css_scan_mode = CSS_SCAN_MODE_OFF; g_scan_state_dir = SCAN_STATE_DIR_OFF; #ifdef ENABLE_FMRADIO @@ -100,6 +100,6 @@ void GUI_SelectNextDisplay(gui_display_type_t Display) g_update_status = true; } - g_screen_to_display = Display; + g_current_display_screen = Display; g_update_display = true; } diff --git a/ui/ui.h b/ui/ui.h index 0a7c006..7dd8a8b 100644 --- a/ui/ui.h +++ b/ui/ui.h @@ -31,7 +31,7 @@ enum gui_display_type_e }; typedef enum gui_display_type_e gui_display_type_t; -extern gui_display_type_t g_screen_to_display; +extern gui_display_type_t g_current_display_screen; extern gui_display_type_t g_request_display_screen; extern uint8_t g_ask_for_confirmation; extern bool g_ask_to_save;