From 98a4cd948397b6d88248cd74640d62e4891b6ad1 Mon Sep 17 00:00:00 2001 From: OneOfEleven Date: Thu, 2 Nov 2023 21:44:53 +0000 Subject: [PATCH] fix missing display details --- app/action.c | 6 +- app/app.c | 36 +++---- app/dtmf.c | 11 +- app/generic.c | 2 +- app/main.c | 34 +++---- app/menu.c | 94 +++++++++--------- app/search.c | 12 +-- app/uart.c | 21 ++-- firmware.bin | Bin 60436 -> 59012 bytes firmware.packed.bin | Bin 60454 -> 59030 bytes functions.c | 10 +- helper/boot.c | 4 +- main.c | 4 +- radio.c | 237 +++++++++++++++++++------------------------- radio.h | 105 +------------------- settings.c | 100 ++++++++++--------- settings.h | 96 ++++++++++++++++-- ui/helper.c | 4 +- ui/main.c | 52 +++++----- ui/menu.c | 17 +++- 20 files changed, 401 insertions(+), 444 deletions(-) diff --git a/app/action.c b/app/action.c index e2fac96..1bbccb1 100644 --- a/app/action.c +++ b/app/action.c @@ -76,11 +76,11 @@ static void ACTION_FlashLight(void) void ACTION_Power(void) { - if (++g_tx_vfo->output_power > OUTPUT_POWER_HIGH) - g_tx_vfo->output_power = OUTPUT_POWER_LOW; + if (++g_tx_vfo->channel.tx_power > OUTPUT_POWER_HIGH) + g_tx_vfo->channel.tx_power = OUTPUT_POWER_LOW; #if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG) -// UART_printf("act_pwr %u\r\n", g_tx_vfo->output_power); +// UART_printf("act_pwr %u\r\n", g_tx_vfo->channel.tx_power); #endif g_request_save_channel = 1; diff --git a/app/app.c b/app/app.c index ae402c8..c58ef1b 100644 --- a/app/app.c +++ b/app/app.c @@ -83,7 +83,7 @@ static void APP_update_rssi(const int vfo) #ifdef ENABLE_AM_FIX // add RF gain adjust compensation - if (g_current_vfo->am_mode > 0 && g_eeprom.config.setting.am_fix) + if (g_current_vfo->channel.am_mode > 0 && g_eeprom.config.setting.am_fix) rssi -= rssi_gain_diff[vfo]; #endif @@ -214,9 +214,9 @@ static void APP_process_new_receive(void) { // not code scanning #ifdef ENABLE_KILL_REVIVE - if (g_rx_vfo->dtmf_decoding_enable || g_eeprom.config.setting.radio_disabled) + if (g_rx_vfo->channel.dtmf_decoding_enable || g_eeprom.config.setting.radio_disabled) #else - if (g_rx_vfo->dtmf_decoding_enable) + if (g_rx_vfo->channel.dtmf_decoding_enable) #endif { // DTMF DCD is enabled @@ -520,7 +520,7 @@ bool APP_start_listening(void) } // AF gain - original QS values -// if (g_rx_vfo->am_mode > 0) +// if (g_rx_vfo->channel.am_mode > 0) // { // BK4819_WriteRegister(0x48, 0xB3A8); // 1011 0011 1010 1000 // } @@ -540,12 +540,12 @@ bool APP_start_listening(void) #ifdef ENABLE_VOICE #ifdef MUTE_AUDIO_FOR_VOICE if (g_voice_write_index == 0) - AUDIO_set_mod_mode(g_rx_vfo->am_mode); + AUDIO_set_mod_mode(g_rx_vfo->channel.am_mode); #else - AUDIO_set_mod_mode(g_rx_vfo->am_mode); + AUDIO_set_mod_mode(g_rx_vfo->channel.am_mode); #endif #else - AUDIO_set_mod_mode(g_rx_vfo->am_mode); + AUDIO_set_mod_mode(g_rx_vfo->channel.am_mode); #endif #ifdef ENABLE_FMRADIO @@ -568,7 +568,7 @@ uint32_t APP_set_frequency_by_step(vfo_info_t *pInfo, int8_t Step) if (pInfo->step_freq == 833) { - const uint32_t Lower = FREQ_BAND_TABLE[pInfo->band].lower; + const uint32_t Lower = FREQ_BAND_TABLE[pInfo->channel_attributes.band].lower; const uint32_t Delta = Frequency - Lower; uint32_t Base = (Delta / 2500) * 2500; const uint32_t Index = ((Delta - Base) % 2500) / 833; @@ -579,12 +579,12 @@ uint32_t APP_set_frequency_by_step(vfo_info_t *pInfo, int8_t Step) Frequency = Lower + Base + (Index * 833); } -// if (Frequency >= FREQ_BAND_TABLE[pInfo->band].upper) -// Frequency = FREQ_BAND_TABLE[pInfo->band].lower; +// if (Frequency >= FREQ_BAND_TABLE[pInfo->channel_attributes.band].upper) +// Frequency = FREQ_BAND_TABLE[pInfo->channel_attributes.band].lower; // else -// if (Frequency < FREQ_BAND_TABLE[pInfo->band].lower) -// Frequency = FREQUENCY_floor_to_step(FREQ_BAND_TABLE[pInfo->band].upper, pInfo->step_freq, FREQ_BAND_TABLE[pInfo->band].lower); - Frequency = FREQUENCY_wrap_to_step_band(Frequency, pInfo->step_freq, pInfo->band); +// if (Frequency < FREQ_BAND_TABLE[pInfo->channel_attributes.band].lower) +// Frequency = FREQUENCY_floor_to_step(FREQ_BAND_TABLE[pInfo->channel_attributes.band].upper, pInfo->step_freq, FREQ_BAND_TABLE[pInfo->channel_attributes.band].lower); + Frequency = FREQUENCY_wrap_to_step_band(Frequency, pInfo->step_freq, pInfo->channel_attributes.band); return Frequency; } @@ -940,9 +940,9 @@ void APP_process_radio_interrupts(void) } #ifdef ENABLE_KILL_REVIVE - if (g_rx_vfo->dtmf_decoding_enable || g_eeprom.config.setting.radio_disabled) + if (g_rx_vfo->channel.dtmf_decoding_enable || g_eeprom.config.setting.radio_disabled) #else - if (g_rx_vfo->dtmf_decoding_enable) + if (g_rx_vfo->channel.dtmf_decoding_enable) #endif { if (g_dtmf_rx_index >= (sizeof(g_dtmf_rx) - 1)) @@ -2321,7 +2321,7 @@ void APP_time_slice_10ms(void) #endif #ifdef ENABLE_AM_FIX - if (g_rx_vfo->am_mode > 0 && g_eeprom.config.setting.am_fix) + if (g_rx_vfo->channel.am_mode > 0 && g_eeprom.config.setting.am_fix) AM_fix_10ms(g_rx_vfo_num); #endif @@ -2686,10 +2686,10 @@ static void APP_process_key(const key_code_t Key, const bool key_pressed, const BK4819_ExitDTMF_TX(false); - if (g_current_vfo->scrambling_type == 0 || !g_eeprom.config.setting.enable_scrambler) + if (g_current_vfo->channel.scrambler == 0 || !g_eeprom.config.setting.enable_scrambler) BK4819_DisableScramble(); else - BK4819_EnableScramble(g_current_vfo->scrambling_type - 1); + BK4819_EnableScramble(g_current_vfo->channel.scrambler - 1); } } else diff --git a/app/dtmf.c b/app/dtmf.c index b3389b7..624381f 100644 --- a/app/dtmf.c +++ b/app/dtmf.c @@ -27,6 +27,7 @@ #include "dtmf.h" #include "external/printf/printf.h" #include "misc.h" +#include "radio.h" #include "settings.h" #include "ui/ui.h" @@ -214,9 +215,9 @@ void DTMF_HandleRequest(void) } #ifdef ENABLE_KILL_REVIVE - if (!g_rx_vfo->dtmf_decoding_enable && !g_eeprom.config.setting.radio_disabled) + if (!g_rx_vfo->channel.dtmf_decoding_enable && !g_eeprom.config.setting.radio_disabled) #else - if (!g_rx_vfo->dtmf_decoding_enable) + if (!g_rx_vfo->channel.dtmf_decoding_enable) #endif { // D-DCD is disabled or we're enabled DTMF_clear_RX(); @@ -417,9 +418,9 @@ bool DTMF_Reply(void) default: case DTMF_REPLY_NONE: if (g_dtmf_call_state != DTMF_CALL_STATE_NONE || - g_current_vfo->dtmf_ptt_id_tx_mode == PTT_ID_APOLLO || - g_current_vfo->dtmf_ptt_id_tx_mode == PTT_ID_OFF || - g_current_vfo->dtmf_ptt_id_tx_mode == PTT_ID_TX_DOWN) + g_current_vfo->channel.dtmf_ptt_id_tx_mode == PTT_ID_APOLLO || + g_current_vfo->channel.dtmf_ptt_id_tx_mode == PTT_ID_OFF || + g_current_vfo->channel.dtmf_ptt_id_tx_mode == PTT_ID_TX_DOWN) { g_dtmf_reply_state = DTMF_REPLY_NONE; return false; diff --git a/app/generic.c b/app/generic.c index 1b6b305..080a1f0 100644 --- a/app/generic.c +++ b/app/generic.c @@ -219,7 +219,7 @@ void GENERIC_Key_PTT(bool key_pressed) #else // append our DTMF ID to the inputted DTMF code - // IF the user inputted code is exactly 3 digits long and D-DCD is enabled - if (g_dtmf_input_box_index == 3 && g_tx_vfo->dtmf_decoding_enable > 0) + if (g_dtmf_input_box_index == 3 && g_tx_vfo->channel.dtmf_decoding_enable > 0) g_dtmf_call_mode = DTMF_CheckGroupCall(g_dtmf_input_box, 3); else g_dtmf_call_mode = DTMF_CALL_MODE_DTMF; diff --git a/app/main.c b/app/main.c index 9444a00..231de64 100644 --- a/app/main.c +++ b/app/main.c @@ -80,19 +80,19 @@ void toggle_chan_scanlist(void) return; } - if (g_tx_vfo->scanlist_1_participation) + if (g_tx_vfo->channel_attributes.scanlist1) { - if (g_tx_vfo->scanlist_2_participation) - g_tx_vfo->scanlist_1_participation = 0; + if (g_tx_vfo->channel_attributes.scanlist2) + g_tx_vfo->channel_attributes.scanlist1 = 0; else - g_tx_vfo->scanlist_2_participation = 1; + g_tx_vfo->channel_attributes.scanlist2 = 1; } else { - if (g_tx_vfo->scanlist_2_participation) - g_tx_vfo->scanlist_2_participation = 0; + if (g_tx_vfo->channel_attributes.scanlist2) + g_tx_vfo->channel_attributes.scanlist2 = 0; else - g_tx_vfo->scanlist_1_participation = 1; + g_tx_vfo->channel_attributes.scanlist1 = 1; } SETTINGS_save_chan_attribs_name(g_tx_vfo->channel_save, g_tx_vfo); @@ -122,7 +122,7 @@ void toggle_chan_scanlist(void) if (IS_USER_CHANNEL(g_eeprom.config.setting.indices.vfo[vfo].screen)) { // copy channel to VFO, then swap to the VFO - const unsigned int channel = FREQ_CHANNEL_FIRST + g_vfo_info[vfo].band; + const unsigned int channel = FREQ_CHANNEL_FIRST + g_vfo_info[vfo].channel_attributes.band; g_eeprom.config.setting.indices.vfo[vfo].screen = channel; g_vfo_info[vfo].channel_save = channel; @@ -210,10 +210,10 @@ void processFKeyFunction(const key_code_t Key) if (g_fkey_pressed) { #if 0 - g_tx_vfo->am_mode = (g_tx_vfo->am_mode + 1) & 1u; + g_tx_vfo->channel.am_mode = (g_tx_vfo->am_mode + 1) & 1u; #else - if (++g_tx_vfo->am_mode >= 3) - g_tx_vfo->am_mode = 0; + if (++g_tx_vfo->channel.am_mode >= 3) + g_tx_vfo->channel.am_mode = 0; #endif g_request_save_channel = 1; } @@ -242,7 +242,7 @@ void processFKeyFunction(const key_code_t Key) APP_stop_scan(); - Band = g_tx_vfo->band + 1; + Band = g_tx_vfo->channel_attributes.band + 1; if (g_eeprom.config.setting.enable_350 || Band != BAND5_350MHz) { if (Band > BAND7_470MHz) @@ -250,7 +250,7 @@ void processFKeyFunction(const key_code_t Key) } else Band = BAND6_400MHz; // jump to next band - g_tx_vfo->band = Band; + g_tx_vfo->channel_attributes.band = Band; g_eeprom.config.setting.indices.vfo[vfo].screen = FREQ_CHANNEL_FIRST + Band; g_eeprom.config.setting.indices.vfo[vfo].frequency = FREQ_CHANNEL_FIRST + Band; @@ -397,7 +397,7 @@ void processFKeyFunction(const key_code_t Key) return; } - g_tx_vfo->frequency_reverse = g_tx_vfo->frequency_reverse == false; + g_tx_vfo->channel.frequency_reverse = g_tx_vfo->channel.frequency_reverse == false; g_request_save_channel = 1; break; @@ -566,9 +566,9 @@ void MAIN_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held) g_another_voice_id = (voice_id_t)Key; #endif - if (g_tx_vfo->band != band) + if (g_tx_vfo->channel_attributes.band != band) { - g_tx_vfo->band = band; + g_tx_vfo->channel_attributes.band = band; g_eeprom.config.setting.indices.vfo[vfo].screen = band + FREQ_CHANNEL_FIRST; g_eeprom.config.setting.indices.vfo[vfo].frequency = band + FREQ_CHANNEL_FIRST; @@ -578,7 +578,7 @@ void MAIN_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held) } Frequency += g_tx_vfo->step_freq / 2; // for rounding to nearest step size - Frequency = FREQUENCY_floor_to_step(Frequency, g_tx_vfo->step_freq, FREQ_BAND_TABLE[g_tx_vfo->band].lower, FREQ_BAND_TABLE[g_tx_vfo->band].upper); + Frequency = FREQUENCY_floor_to_step(Frequency, g_tx_vfo->step_freq, FREQ_BAND_TABLE[g_tx_vfo->channel_attributes.band].lower, FREQ_BAND_TABLE[g_tx_vfo->channel_attributes.band].upper); if (Frequency >= BX4819_BAND1.upper && Frequency < BX4819_BAND2.lower) { // clamp the frequency to the limit diff --git a/app/menu.c b/app/menu.c index ed75e97..9623b57 100644 --- a/app/menu.c +++ b/app/menu.c @@ -43,6 +43,8 @@ #include "ui/inputbox.h" #include "ui/menu.h" #include "ui/menu.h" +#include "radio.h" +#include "settings.h" #include "ui/ui.h" #ifdef ENABLE_F_CAL_MENU @@ -411,19 +413,19 @@ void MENU_AcceptSetting(void) break; case MENU_CHAN_SQL: - g_tx_vfo->squelch_level = g_sub_menu_selection; - g_request_save_channel = 1; - g_vfo_configure_mode = VFO_CONFIGURE; + g_tx_vfo->channel.squelch_level = g_sub_menu_selection; + g_request_save_channel = 1; + g_vfo_configure_mode = VFO_CONFIGURE; return; case MENU_STEP: - g_tx_vfo->step_setting = step_freq_table_sorted[g_sub_menu_selection]; + g_tx_vfo->channel.step_setting = step_freq_table_sorted[g_sub_menu_selection]; g_request_save_channel = 1; g_vfo_configure_mode = VFO_CONFIGURE_RELOAD; return; case MENU_TX_POWER: - g_tx_vfo->output_power = g_sub_menu_selection; + g_tx_vfo->channel.tx_power = g_sub_menu_selection; g_request_save_channel = 1; g_vfo_configure_mode = VFO_CONFIGURE_RELOAD; return; @@ -492,22 +494,22 @@ void MENU_AcceptSetting(void) return; case MENU_SHIFT_DIR: - g_tx_vfo->tx_offset_freq_dir = g_sub_menu_selection; - g_request_save_channel = 1; + g_tx_vfo->channel.tx_offset_dir = g_sub_menu_selection; + g_request_save_channel = 1; return; case MENU_OFFSET: - g_tx_vfo->tx_offset_freq = g_sub_menu_selection; - g_request_save_channel = 1; + g_tx_vfo->channel.tx_offset = g_sub_menu_selection; + g_request_save_channel = 1; return; case MENU_BANDWIDTH: - g_tx_vfo->channel_bandwidth = g_sub_menu_selection; - g_request_save_channel = 1; + g_tx_vfo->channel.channel_bandwidth = g_sub_menu_selection; + g_request_save_channel = 1; return; case MENU_SCRAMBLER: - g_tx_vfo->scrambling_type = g_sub_menu_selection; + g_tx_vfo->channel.scrambler = g_sub_menu_selection; #if 0 if (g_sub_menu_selection > 0 && g_eeprom.config.setting.enable_scrambler) BK4819_EnableScramble(g_sub_menu_selection - 1); @@ -518,8 +520,8 @@ void MENU_AcceptSetting(void) return; case MENU_BUSY_CHAN_LOCK: - g_tx_vfo->busy_channel_lock = g_sub_menu_selection; - g_request_save_channel = 1; + g_tx_vfo->channel.busy_channel_lock = g_sub_menu_selection; + g_request_save_channel = 1; return; case MENU_MEM_SAVE: @@ -545,8 +547,8 @@ void MENU_AcceptSetting(void) } // save the channel name - memset(g_tx_vfo->name, 0, sizeof(g_tx_vfo->name)); - memcpy(g_tx_vfo->name, g_edit, 10); + memset(g_tx_vfo->channel_name, 0, sizeof(g_tx_vfo->channel_name)); + memcpy(g_tx_vfo->channel_name, g_edit, 10); SETTINGS_save_channel(g_sub_menu_selection, g_eeprom.config.setting.tx_vfo_num, g_tx_vfo, 3); g_flag_reconfigure_vfos = true; return; @@ -634,14 +636,14 @@ void MENU_AcceptSetting(void) #endif case MENU_S_ADD1: - g_tx_vfo->scanlist_1_participation = g_sub_menu_selection; + g_tx_vfo->channel_attributes.scanlist1 = g_sub_menu_selection; SETTINGS_save_chan_attribs_name(g_tx_vfo->channel_save, g_tx_vfo); g_vfo_configure_mode = VFO_CONFIGURE; g_flag_reset_vfos = true; return; case MENU_S_ADD2: - g_tx_vfo->scanlist_2_participation = g_sub_menu_selection; + g_tx_vfo->channel_attributes.scanlist2 = g_sub_menu_selection; SETTINGS_save_chan_attribs_name(g_tx_vfo->channel_save, g_tx_vfo); g_vfo_configure_mode = VFO_CONFIGURE; g_flag_reset_vfos = true; @@ -675,7 +677,7 @@ void MENU_AcceptSetting(void) #endif case MENU_COMPAND: - g_tx_vfo->compand = g_sub_menu_selection; + g_tx_vfo->channel.compand = g_sub_menu_selection; #if 1 g_request_save_channel = 1; #else @@ -716,7 +718,7 @@ void MENU_AcceptSetting(void) #ifdef ENABLE_MDC1200 case MENU_MDC1200_MODE: - g_tx_vfo->mdc1200_mode = g_sub_menu_selection; + g_tx_vfo->channel.mdc1200_mode = g_sub_menu_selection; g_request_save_channel = 1; break; @@ -726,10 +728,10 @@ void MENU_AcceptSetting(void) #endif case MENU_PTT_ID: - g_tx_vfo->dtmf_ptt_id_tx_mode = g_sub_menu_selection; - if (g_tx_vfo->dtmf_ptt_id_tx_mode == PTT_ID_TX_DOWN || - g_tx_vfo->dtmf_ptt_id_tx_mode == PTT_ID_BOTH || - g_tx_vfo->dtmf_ptt_id_tx_mode == PTT_ID_APOLLO) + g_tx_vfo->channel.dtmf_ptt_id_tx_mode = g_sub_menu_selection; + if (g_tx_vfo->channel.dtmf_ptt_id_tx_mode == PTT_ID_TX_DOWN || + g_tx_vfo->channel.dtmf_ptt_id_tx_mode == PTT_ID_BOTH || + g_tx_vfo->channel.dtmf_ptt_id_tx_mode == PTT_ID_APOLLO) { g_eeprom.config.setting.roger_mode = ROGER_MODE_OFF; break; @@ -742,7 +744,7 @@ void MENU_AcceptSetting(void) break; case MENU_DTMF_DCD: - g_tx_vfo->dtmf_decoding_enable = g_sub_menu_selection; + g_tx_vfo->channel.dtmf_decoding_enable = g_sub_menu_selection; DTMF_clear_RX(); g_request_save_channel = 1; return; @@ -777,18 +779,18 @@ void MENU_AcceptSetting(void) g_eeprom.config.setting.roger_mode = g_sub_menu_selection; if (g_eeprom.config.setting.roger_mode != ROGER_MODE_OFF) { - if (g_tx_vfo->dtmf_ptt_id_tx_mode == PTT_ID_TX_DOWN || - g_tx_vfo->dtmf_ptt_id_tx_mode == PTT_ID_BOTH || - g_tx_vfo->dtmf_ptt_id_tx_mode == PTT_ID_APOLLO) + if (g_tx_vfo->channel.dtmf_ptt_id_tx_mode == PTT_ID_TX_DOWN || + g_tx_vfo->channel.dtmf_ptt_id_tx_mode == PTT_ID_BOTH || + g_tx_vfo->channel.dtmf_ptt_id_tx_mode == PTT_ID_APOLLO) { - g_tx_vfo->dtmf_ptt_id_tx_mode = PTT_ID_OFF; // // disable PTT ID tail + g_tx_vfo->channel.dtmf_ptt_id_tx_mode = PTT_ID_OFF; // // disable PTT ID tail g_request_save_channel = 1; } } break; case MENU_MOD_MODE: - g_tx_vfo->am_mode = g_sub_menu_selection; + g_tx_vfo->channel.am_mode = g_sub_menu_selection; g_request_save_channel = 1; return; /* @@ -965,15 +967,15 @@ void MENU_ShowCurrentSetting(void) break; case MENU_CHAN_SQL: - g_sub_menu_selection = g_tx_vfo->squelch_level; + g_sub_menu_selection = g_tx_vfo->channel.squelch_level; break; case MENU_STEP: - g_sub_menu_selection = FREQUENCY_get_step_index(STEP_FREQ_TABLE[g_tx_vfo->step_setting]); + g_sub_menu_selection = FREQUENCY_get_step_index(STEP_FREQ_TABLE[g_tx_vfo->channel.step_setting]); break; case MENU_TX_POWER: - g_sub_menu_selection = g_tx_vfo->output_power; + g_sub_menu_selection = g_tx_vfo->channel.tx_power; break; case MENU_RX_CDCSS: @@ -1019,23 +1021,23 @@ void MENU_ShowCurrentSetting(void) break; case MENU_SHIFT_DIR: - g_sub_menu_selection = g_tx_vfo->tx_offset_freq_dir; + g_sub_menu_selection = g_tx_vfo->channel.tx_offset_dir; break; case MENU_OFFSET: - g_sub_menu_selection = g_tx_vfo->tx_offset_freq; + g_sub_menu_selection = g_tx_vfo->channel.tx_offset; break; case MENU_BANDWIDTH: - g_sub_menu_selection = g_tx_vfo->channel_bandwidth; + g_sub_menu_selection = g_tx_vfo->channel.channel_bandwidth; break; case MENU_SCRAMBLER: - g_sub_menu_selection = g_tx_vfo->scrambling_type; + g_sub_menu_selection = g_tx_vfo->channel.scrambler; break; case MENU_BUSY_CHAN_LOCK: - g_sub_menu_selection = g_tx_vfo->busy_channel_lock; + g_sub_menu_selection = g_tx_vfo->channel.busy_channel_lock; break; case MENU_MEM_SAVE: @@ -1119,11 +1121,11 @@ void MENU_ShowCurrentSetting(void) #endif case MENU_S_ADD1: - g_sub_menu_selection = g_tx_vfo->scanlist_1_participation; + g_sub_menu_selection = g_tx_vfo->channel_attributes.scanlist1; break; case MENU_S_ADD2: - g_sub_menu_selection = g_tx_vfo->scanlist_2_participation; + g_sub_menu_selection = g_tx_vfo->channel_attributes.scanlist2; break; case MENU_STE: @@ -1151,7 +1153,7 @@ void MENU_ShowCurrentSetting(void) #endif case MENU_COMPAND: - g_sub_menu_selection = g_tx_vfo->compand; + g_sub_menu_selection = g_tx_vfo->channel.compand; return; case MENU_1_CALL: @@ -1218,7 +1220,7 @@ void MENU_ShowCurrentSetting(void) #ifdef ENABLE_MDC1200 case MENU_MDC1200_MODE: - g_sub_menu_selection = g_tx_vfo->mdc1200_mode; + g_sub_menu_selection = g_tx_vfo->channel.mdc1200_mode; break; case MENU_MDC1200_ID: @@ -1227,7 +1229,7 @@ void MENU_ShowCurrentSetting(void) #endif case MENU_PTT_ID: - g_sub_menu_selection = g_tx_vfo->dtmf_ptt_id_tx_mode; + g_sub_menu_selection = g_tx_vfo->channel.dtmf_ptt_id_tx_mode; break; case MENU_BAT_TXT: @@ -1235,7 +1237,7 @@ void MENU_ShowCurrentSetting(void) return; case MENU_DTMF_DCD: - g_sub_menu_selection = g_tx_vfo->dtmf_decoding_enable; + g_sub_menu_selection = g_tx_vfo->channel.dtmf_decoding_enable; break; case MENU_DTMF_LIST: @@ -1255,7 +1257,7 @@ void MENU_ShowCurrentSetting(void) break; case MENU_MOD_MODE: - g_sub_menu_selection = g_tx_vfo->am_mode; + g_sub_menu_selection = g_tx_vfo->channel.am_mode; break; /* #ifdef ENABLE_AM_FIX @@ -1782,7 +1784,7 @@ static void MENU_Key_STAR(const bool key_pressed, const bool key_held) RADIO_select_vfos(); - if (IS_NOT_NOAA_CHANNEL(g_rx_vfo->channel_save) && g_rx_vfo->am_mode == 0) + if (IS_NOT_NOAA_CHANNEL(g_rx_vfo->channel_save) && g_rx_vfo->channel.am_mode == 0) { if (g_menu_cursor == MENU_RX_CTCSS || g_menu_cursor == MENU_RX_CDCSS) { // scan CTCSS or DCS to find the tone/code of the incoming signal diff --git a/app/search.c b/app/search.c index 63419f9..5f01fa8 100644 --- a/app/search.c +++ b/app/search.c @@ -251,7 +251,7 @@ static void SEARCH_Key_MENU(bool key_pressed, bool key_held) } g_tx_vfo->freq_config_tx = g_tx_vfo->freq_config_rx; - g_tx_vfo->step_setting = g_search_step_setting; + g_tx_vfo->channel.step_setting = g_search_step_setting; } else { @@ -272,7 +272,7 @@ static void SEARCH_Key_MENU(bool key_pressed, bool key_held) } else { - Channel = FREQ_CHANNEL_FIRST + g_tx_vfo->band; + Channel = FREQ_CHANNEL_FIRST + g_tx_vfo->channel_attributes.band; g_eeprom.config.setting.indices.vfo[g_eeprom.config.setting.tx_vfo_num].frequency = Channel; } @@ -605,13 +605,13 @@ void SEARCH_Start(void) g_rx_vfo->channel_save = FREQ_CHANNEL_FIRST + BAND6_400MHz; #endif - BackupStep = g_rx_vfo->step_setting; + BackupStep = g_rx_vfo->channel.step_setting; BackupStepFreq = g_rx_vfo->step_freq; RADIO_InitInfo(g_rx_vfo, g_rx_vfo->channel_save, g_rx_vfo->p_rx->frequency); - g_rx_vfo->step_setting = BackupStep; - g_rx_vfo->step_freq = BackupStepFreq; + g_rx_vfo->channel.step_setting = BackupStep; + g_rx_vfo->step_freq = BackupStepFreq; g_monitor_enabled = false; GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER); @@ -626,7 +626,7 @@ void SEARCH_Start(void) { g_search_css_state = SEARCH_CSS_STATE_SCANNING; g_search_frequency = g_rx_vfo->p_rx->frequency; - g_search_step_setting = g_rx_vfo->step_setting; + g_search_step_setting = g_rx_vfo->channel.step_setting; BK4819_set_rf_filter_path(g_search_frequency); diff --git a/app/uart.c b/app/uart.c index bdce871..dbc7d27 100644 --- a/app/uart.c +++ b/app/uart.c @@ -36,6 +36,7 @@ #endif #include "functions.h" #include "misc.h" +#include "radio.h" #include "settings.h" #if defined(ENABLE_OVERLAY) #include "sram-overlay.h" @@ -462,16 +463,16 @@ static void cmd_052F(const uint8_t *pBuffer) { const cmd_052F_t *pCmd = (const cmd_052F_t *)pBuffer; - g_rx_vfo = 0; - g_eeprom.config.setting.dual_watch = DUAL_WATCH_OFF; - g_eeprom.config.setting.cross_vfo = CROSS_BAND_OFF; - g_eeprom.config.setting.dtmf.side_tone = false; - g_vfo_info[0].frequency_reverse = false; - g_vfo_info[0].p_rx = &g_vfo_info[0].freq_config_rx; - g_vfo_info[0].p_tx = &g_vfo_info[0].freq_config_tx; - g_vfo_info[0].tx_offset_freq_dir = TX_OFFSET_FREQ_DIR_OFF; - g_vfo_info[0].dtmf_ptt_id_tx_mode = PTT_ID_OFF; - g_vfo_info[0].dtmf_decoding_enable = false; + g_rx_vfo_num = 0; + g_eeprom.config.setting.dual_watch = DUAL_WATCH_OFF; + g_eeprom.config.setting.cross_vfo = CROSS_BAND_OFF; + g_eeprom.config.setting.dtmf.side_tone = false; + g_vfo_info[0].channel.frequency_reverse = false; + g_vfo_info[0].p_rx = &g_vfo_info[0].freq_config_rx; + g_vfo_info[0].p_tx = &g_vfo_info[0].freq_config_tx; + g_vfo_info[0].channel.tx_offset_dir = TX_OFFSET_FREQ_DIR_OFF; + g_vfo_info[0].channel.dtmf_ptt_id_tx_mode = PTT_ID_OFF; + g_vfo_info[0].channel.dtmf_decoding_enable = false; g_serial_config_tick_500ms = serial_config_tick_500ms; diff --git a/firmware.bin b/firmware.bin index 8d38111a3706139ddf582e9ab103f44522b65f09..6bfebffafed27510a933d3b411884526475dc3be 100644 GIT binary patch delta 26007 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 diff --git a/firmware.packed.bin b/firmware.packed.bin index 0c1cb63254e0e2a28ed8820e5b6be5c9754b368f..92f608e717f129fe0986155e474628839b435c51 100644 GIT binary patch delta 54925 zcmYhig;x~Z_dQH^N_TgsbT>l{NO!}~-9x8AcXuew(2c+dh@cJ#BHbw6^$y?X{jBx- z5AHhm+je~e=}xI6>L@3+!1ScSUIK8^`6r+Zn-Di z?ZfpBfbQ54+sRT>mH=&$l zM8x?(K;g$SgI{fUs;~9sx7GKD6Hlby=UrgzH4#eIp^*pw7E8a*P%K8Slo|B6{la@? z;}04Q-hsBRO25m3cvd&tUz1ImV&vYmN;|SXRp$&EhgsVhh&Bi`nRmvtZ0u83t99Z1rEZbfJAjJjQ~4pi3A~;GUQLJA~&3mzU)O@sWrQcm1Eyl#H`*@<;viI5SOqPh1Wc@qPljX6KiDmwPfx;~IXK9Te#0w(#xMjdD*W#N`gJ;CCcuMXdXx5YMnp*wzA~fV z-@VW|Iv^mbMBT+mMQ!j*!y-E*$BG0krzT6fj}~t``*q13T`KVGKKoh8_r1Y{ET!+A z(54oT-f;dRWz3-ENk#f0;-}#w{i!gUHwrpxU-5j-FH~@io^hKMtU2u#B9>PF%1j>l=qPOQVN*qTe*-n_BFx8w*0BRx`tY$?7y$~ zs|(ZYA99FTbQ&dndaSmOVpr;c-5!yeW_pq^{NcmGN{#OA5m&C3D z#Q1$7KkSd{KbXJtfFQgA3H8jMXhM!M@Oa7=Q?0aujU(Rq@qNTxJNkoQwMrIpccs$= zIw8D6)z0}h363^V-M>R<&@?7i%!Z6h#aeQ#YfD1!spzVf2IGAdChnAt*(}Y?yj$ia zcHd1WAeH}S`Pm5TwqT}63+?-3MGb)X!w9Z^aZjo%_3{;R8!=wJsqwt~Nuh$Jo6+Lw zckvA__^zy%P`26T?4u62G5e4sE%}SsXc;7kXGHZoEE9j z{c)rQ!yoVbn4aj!e3p8|izldj^u5bC{#efZh+>SsGsQ^x(PIIIKE)Sj=u*4m5W@QS zxAFoDz#v&f-gs%z^a|7SVPAck#hp?j_nes$EyJk-;p>fyfCnASi8uW+25kFFy6Qm6 zLiH9g@HtebY?HM6yUL>~C&|tghfIywo6~bXPsj06*X9xd0!N7|@_e@W0Mj+?E}BV^ zyO?FhU#63W&yf~y#w~@zK(I|;E;97ShD*YX`aDcol+pN=v(}XEl2KrQ{UAdVx#z9< zrdn7Zy7DC2Hp`S2hMln9paIwRVLM0%aJF;;=D6v`FtWd}3s`UHU;OZ~^Ul*gNavPy zELVlRT&=lKX_qUsl>7-rouEPA^lcns=>ioce_SnQn))6Y&xCz(+Lqq?Xa>av5%wlw z?+nl=o1UqWFl;Ub*Cvlp*=Q+N%u9cQcm_~b;W8;caZ*waK&7<(q-R7y`zi;bszt00 z4nQ|c8A<_|^%82th5hBtzBY{LAU0f^ld#;+Zlo-$=>Fif`&qn?&D=%4`c34uAxSR9*SeKZ~071JQ`QQHCs zktpEeIeAsYjeZ#+xNS&F`8=qwr$dJseBXbtB`_8kZI*lr$AKEGPJvKeAg@TAlZjwLH<^0RoZ7&t_SWie3J@t}X8A@xzDYe8Hf6L!?(Q|C&75sSr@mW&B`H;^(ke+k9^OHKdVXfmv4`_zVr8BgcKcm z*JgUDWF_0ae8=)YL34s9#BDnvMp-xe<)5L3Ny(#Zu%N!etIKVU@$D_!i6TW~x3$EsS7!mI_FmLp42UI_2sgi}G%R|huvuw2cZx$9 zmPWnwXxWqcQxTb5huy;Fk(WZ3-(5Y>H6LIp_1 zAbvIiDu-0;`gq0w7A4XoZ^jZ9KaxCC1`f8ZC?%`>>}PI&j4fwnNJFLCHwN_TY8H< z43fvBJBZ%-wsIel2j)^e?=#MbypVJ&+w6(?QBWkPd?o*fWOk4- zK%s%sn;OrOfkVlTL{XC=N=b{-YhS;UVNA&k2HIt(XfWc1y!xQi$-!iO7Am9~w&#rS ziF#Eg*E5w;s<74;<&3FFhAU8OQvmsGB(S`p)6_%ZErcqCHE+k9~Q+ZFmv2UZN z3f*{8fTSMaH=`d)R8b-CyU;RS?8YDsKm6P=@X8BCZ_nKH|@hpB-)62jp%0^7AuPe9*-9n&8!o#fl*obO}uTEcV5oAN72?09L=%a z?kLs%g}B>aruzd$D#W2e5udB`Zu9PQc!OB)glcZhd+Ig}8MI(A?R^v?Pygx|EdIi+ znM27svwl@tax_F8_~1E%B`DYmn6i5aE0^1kKUJS|d=pP%qRfvLSWvodHN2q)t1pyl z@wIHqIZsk*lYuU@b1)bIDH_6`G0zWYsZ=SX?1#h$4}r?0GtQZ*^f>q4UpJvGn+n&_ z{dSI?;oMI{kxdg~DmLyy=>0nt9KEaCGn>JALH#=H6!HS2ow#OmkSGSk!eIHdlkRt0 zTi<5piZ#MQ>4gURd=~(T%Ab|M)bdC)0@*Exs`#Iy2LmB?g88Z$sl={vA+GFUTBO@U zt-K*|w4?QB#X|y`+Ic~UBofpz%^&TcN@(1G9q_45p%7E$_FPiCq=Jv=TMccsDl2Cn z<>TBx!oF4UM;_R^xC~MExGR;b<8XK_5I~8j>T5h?yw$tXo9KZprpJH*e&1oG!rZTF z9W)B`wTVF&En2qNo}+-bC9Tz>{BFFZO1}_fI}01`_Lp-~bfV5tUMi55rMh1aQ-G8l z;I-}kP50Qzd^E-QVTMKPq^-~qY zrK{zK`OV};u=%P))v-uN9(w)7PM7KqShVk$@x03D?eZ|7%j-9EDq?9&2 zVNGc>9vxFEB#PrFw;7EmH$|n}A(;{KppPFr5>nP%UF5VtuwcOb(D*_vnUtboP@Mhf7y)di&q5>wecdvch>7}uls)1)XBR-hUmBL%apYc_I3Bm3)j$b zZ9=6gr>oYry^kGt0_&Ow-->ui+>sQq<$G(6b*@?=&@W)hG4ojJ;`Z(cd&MFdMSrZm zw}WFxQ{tH$I0)@AU$*dY*D*X>4v%r<&U{SA{!fX`vb$zm3VKJDq?j&)u0iqO+Y>h< z?E^0@Z2TfcKW}q7-r-(V%z@Lcw$uZR?9}~HU%;O^H(!Q|O?_nJ*00%h%7f(FY}kbQ zWtS^vz@TIz6bANM{#b)&6?H${;=z6_g<8T6~0NnSB9Qh)uoU-ejBVr|J}1kj6ynoqV+*Alc>ZU^uY>lTG@h z5LyOVZ+qGbI4!OD_%^Tfb8(i{BRhyCnQBSF5J%EdV;IFN%!r|*p+NUPo!QB}E0#{b z2o3~&z}r_Y_hAX{fwwyQzn~e^g3D_|Bs$v7=9hUOaWV9zfDWkJr(vLFIwkn?T%565 zP;#%mq+w(;|2;)6pX$&@dPN?uaA4wX^jzGP3{+d7B!Q|_rQLJ4%2-0_xN(WHEy6oL z6I0^sDze}=mcoLgV+fTO90!;Rbftvh1oRdRm%>Jn@PgMi>;Vk0e_ihGal}|5q2)<> zhDTk#`jas7<}hCJVszIX1?g9bV@_uear2C;kybtvy`BRtD+MN-x}t&K2`|9@ zs$~2Dku}riBIoQp1?i>A=S(~nVLD3MIjzibd2+8uBo^wvpFHR6mLnMS3Ce;M z?&zMPTlC-McD*YQ@Cfz}yZ1Nc#{xI{y+*z@Z$(IC){|mmRn92&ydQsHrwz*NO_gA^ z+EjT9?VKl2sFu2uNk>z28*B_2m)J9h24Ff%n-4=xh*ibV2$@c9kjB3RrHC2Ob{pe} z4LF2EySBU)Rq!J1ntX7hwvIxZTa+fh+cphnf(6{RE~k5h3_R6VY8fPivV%qNFGA{^ zIPV*GX*hUqu(#kB%~(KHQEKX%WbMk;N9Pn)6+CmU^GoKgY`9svN9f5I=!DDBJ%~G_ z^0;=$s9993jOMKF7=Dz@GY|q5W-SaxAhVt+Z56T_Pmu8LgDB~mP|!-;uFNQnz@Tcs zvHE_NEjND}m6&)MfSI8Mf>R&9W`wSASN;pnljtF(u1?jsFktMn8-8W16ejf?KUAjj zapflnDk8=5g%p!dxcl2%pTVWf(^3!INsGsg&Cz)G^1hM$VI?cR>~Bz+YAS^Na6~KP zxe%Iw*@>L@8qIqY%e0fBVy%z`1fSh*Bz9buA0FJ!6%Jc8`6h?{Mqp3%p=3zt6{@|R zQ?C>Tp#!~WM!E9&A722QhF_vVK!bV)%mzyYR>m#GGU9(giC=>pfI5efsbDtvYN^x} zjdzM%^>Z)7X+uA|RQA_9wg)QQ^%CDirxE?Ywj|2=4>N2#uDWEK4bxSbv|^61C`LwV zQ+9#hJ>ihar+8qxE|@xagAn#{?t=R-+z{fMWH%}wN^i*I9s*hfnDv!*#on}UDvOc> zvr=lCuW#te&_ycOjZ}i$@j2Qczx@S`gA;R!b@snNqE9A_@gXlr2+BCtmi6=*ZC7b^ z8uRm_?YVh}ETLZ+?+Bvhze10cjo&gwwZT#jRvLdV8Oj0H6}Qtt$OE`rdAQrUU&>%4 zVy!R${9;pOgRSB}4L4hON=`#+t;lb1Q%)`%*0f{kogNBw(C>oN7>FduPDzlWy7vtS z4JfY^vXAuev%}#OJcE5*dvqyaG>SE2!F@-NE-z>RWa}lv+R{xs8Tpr)4jKYxPrG?= z)`2X?kAdq#-C%TgWyw5rX4bb3SK>^8+95GV_o^6kF={jzZ`uB>x%9h#ky*-EXeqU1 zL-<;NQ1fBaRHwxg*SFc;JSBs&^!^*GX6f2T$^$+Se&%lSsIS`Z5m7-UCz*Qnj9D2t z4)kE;I=$C7(<98F6$@F6LK1y6#UTILW8u7wDFhyyH>XDMMu1UkTp;+{g=dK0eC%X= zOg9@J849tA7xin=q{h;1I<`g@ftAurF^_nsQ{oqH(ukfZeD%He!RIO$S|c6~RK=|O zh8?ZK=MwM(8qtYh+4CT&1QI>4OrIG4zYDp6-;T5t^7O&+ctMOh=RP)| z6Pcpv4sPyT_37YC51_(bQLsJiX55cM8yJ9G-dMqZfgWlbp39FXM60x$m=bQwj<H;#>Q;C+GOsj&Z9e>OO<<; z!3fl0E#x&{cyBo+=;7n0&yup_g$*VX2IBHOx&GDlzLIx%)haK&7I^K27LV%cQZIh} z$Kjid{XG!<1p75MdjNApZYb{J429LB8F7}PTe_5;gw_w|pG*?eXq3w7?3PvU4L_~d z&Y*QaWM{hu?wJjJ281Z1Evma7<8y6HOU0TUtZO&Hhmq0h#l=V!mwc~K@l}4Cl}7U* z?a+JC9md~S20xn8!K)UY*jvEnwE{y<%^!1?QRoxh7eMJw~mdT$aw zHmzUMZJmUISnU#x_`ePxs*K15nggA4^G`4cXdPO=8I%xa%P`H< z8DODX=0i>`o2DVEH~wVVgvN%JxsyENd$h9Yz9??@vBqS(x~R&ll%c+(6smr5r2-cw zJ8&q5z6kNb{c>GGWv;Wsac8>LYLFX_4fB4v#Y& zxt*U;vSoQhN@&#@Z^%wyAwk&d0JpB89#(%^5+eDL-UXS0}F&AeY zBMS|P(KAVTLVozqUc-L}@T=AG_kGZmJBJ^D+KODG zs~_2InQWU0!EzR^j6M$Mz?Bg)y3Svq$Z%jFTp2}Z`H;#&FlA7{>u3zxpL5Ts=QLVa z#ej0ddbY(l6fq`xgDY#tB^(FAtYDbcZNg^Y}DTwHe2u4 zXoOi^PN1+%F=vHyr_tEW9=G46T{Q5o@;kKc-OAhvQj1$AjvylaBK)xpu`A8j zoUr{0X#DA7STC_4`>+7Qj1Vq+1H1Kpx9O#$d{=5xu&)N6K&lvG*{-CgHhBDERT2)) z4_G?6g!&mDO2mMBqsihW_8IH;dOCI&>)>dRywZy`E)KWGuNa@=W2Blk_qhmRt8wd2 zw)ddxYkv+u`ln(uRm9;Cg9NkHKI!@dk0EWt<$PGJz&Hzh7%k0oKn!>e53)5{%+Y## z^#8>TIBDgbeZ#yIrAGa8^i8CQT*aDiJlBBy+k)3^UxSwfC0#Lki-no@Og=4`{Dl+> zKAB>??CAV_PiNl3bcMa=F{`iTcBj4bBV460_}N0M^FUglDOx=&wXW6{?`48{Wt3m_ zeP(GSPf-x8L+qcGKwkXu+4MDe_0XkL(fM{{(e||;bOOrp@tmwb&Q(-7GntwAvl*KY-hS5t}lTvqS+uW$vnKcOuoqjs_aYGbyJ8$*=Avo2hLnS4&;cUmxUN()b5q? z6bST%HiT&yx@w4T4XQoR1g3&BByUn!nJ57X(hyCoGTYJ{VEZzQY{p?}A*eqbcC~$Th{|)zr=c~LZ z8!7&~0x%1lmv8)xVstn&W#5F8!c1SWFY$%1oo?E^s~YGYAAR#fK*N9jH6p^&>--6q z7|m)LU7A%?>Xyp5KK^z(GUFd+;jaVJK46>W1g+}L7#vT)!Yp+jGa_#@23xi$&EFD!jN)M7xw4T?eMQ!kKV37q zO3iB>(_U1A%%>la1WuJbIfld+3J+yQIFh3oQSEw1J*6UlGeTLm`D4caRb&{Jt_`Tl z_^NXUq-L+c%WmP;+c1d>)GXbE zb+zd)q2w-ert#rQ5;*i3(|ZDJiNskM@8!I9tk3sh<2TmGT)yO9xc&!ZZ$`Tfe`Phr zrf%eF?wY+AK>9aoYG`tDjymR0GB8j9(!^EjB3tUOGb;F#N^nAfU*`<3X<$F9l5PwuKs?FtvxBCjVz+nKwa4^k zc4s}B2hm)-Bs{^S#ccV?W_s57wB$FhqmUTj@)&cbC%k+1DZYMQSH@J0eY-=B0^hAI zd-o%VD?#wGcGJM-Ua%%m6JNkuEH|B)Fh@##nI(2P9s%Ht+gGSep(=9-VX z^~s!Ae>-|@ET6ck*}n8Ahflzt;i`moE+KkGY0=}17bTd(tV(sOaxMw@D8hBn7>&xs zqh=S9U}I`S^b{47p~u|Ta>SrMi-#9-d)!-9%kIxx)Z1kN9HSt#2NE|cD%RQS_YE&L zz)~uYScbCT6>x?tBUyL_oZ-sonq&hy3^%D7PZYAXiNQ>Nq2UlrODM9WvhC|+*Qa+s zR=mIjPm^h=k*HwlmH`Q9?v#Ew|G-mIoR+W@C`tepi*RWk5aTw*Y$r_X zo19*5dbSP>bd*18Q4hijY_Oz1aLt?qdZ4d49TMUX3~L9jEp>qM&1qv=_z%c`23mp& zPF)h*`FOIg_DCUEhCL$UO7^1V8ais4#$bH>bZhHx6^*9AqEcz+mudJvY2-EWpHGL6 zO9n*R)Fk>*+ExeM51pi&j%l?x2}+1TgwtFkW9)Et)uyPeeC30%Rec z;mAtyK$&!P2%a5^nJOJ5OwU4-H^}~%1eu+eDfbx91(KI)MwUo|;a!+4M((j&8Tg^4 zg9`o(nI6i2yJ5I-7grRoJ=H|_eL6gNBsizwzrjgX9#oO!Kq14*%ra9&9`PxKn^aNO zMcfFqeFe7~`wcTxe6+8d8NlT!VW`A23|YAzr#S3ezo0P==4l0|iY(?<8dXOvfJ%yv zCG8+M5LMi!41y!GK?(yYRcw~lDwwTJ2-a{Mc#i(9&)JoG9iAsZ9ctE}N24HTbp@PY zpY!DqEMVp0nx=-OO!oXFZZe*}MwX?YGJxP{k!*?WF_D_)4Kq~2weVf4 z1!PUHIffJKUq{)A+2ukQapvGY%f!x{QQIVe)3~G?7r1$%*oUxd=!d(tO$rad&SeMM z_>T1m=5SJWqsAB!``M^#L4z7e0I{(i8RGbHMmLF9k3EbYeSgEsERV|^Y^o#}VRPat z*_IO8%oWx~MEB8LT;jC?@z*;is#MKjcm?=(f5uHf{L9Zz4dR+m&ul_OF(&C*zl1Z9 zIjqZVULB| z`=@vxCSB_9D1=uGd>7m|pTc{ex7m$E7t$LvS%!e4Z`3mT?X8z9b^&3<%CMA|*pvkP z8LAp8!KGQYT>ZdC)S%(t_~9UJaV4}y_1EF}9eIzmCd@ zn{O$fs^ZB(bdu(kJw8iv`5rHn>;x{)V+wVpQXm+)lqQ8rDaz-{{1|*j`jI^;y+3h2 zni#d)2^VWFrw-%jv~y11cQ*3!18&&C3dDeiVR#S3XX7qw|BZh=_B_&c7Zg6Pm`kOtw^ zmijfio~`Q@F$bExL}Pk|@%c{*d81cJ-3GCh{e>Q~!~z$StkOEJfODe8fe9|rbBVV^ zebl&<>87XMNq)rj&Aq=Gk7Q144ql7aNU|nROMU=5j=!){$8s;qaX1v?!ELgttpA+K z7gFlz@kBGLGj+eNZ%#=qv38|^0b%=nyMzfW=eclY+LX}!wxKlwlKQ6GJIlO;{e>rszO1s3A2 zTIYzp9vAkaQauj)h2`xBK*xPc_nBaDZA_9M2*fPRZ^i9cPS}|M(+-EijF;#L! zPk=S)zp8kcykC$U62$nOu8E9ri%E!}7 zSpN!MzmU=whXT2svnYQ#%Oh;yzA+MDBje9SfR^`-8856=9lkGMmI}5{O1JbV0^E=Q z09=eVh#td$!V!(%dn~0_K$|^Oqjo_lzN6g^P^)1$w9GZ-3<`1B@0t^ebr^)tf_*Ir zwjp@UUqZ({+p4HqVY>V`JhQ8~l<&3P14djX>ZhQe(vsuSKz~_?pG&&Zq*-9pH47>W!W1E z1Gc-$9-+qxu$@HDO%a=ze&lFzHLmmd#aB^;ca!`T4dnq6q*K$7g%~+sb~W^4!ZAnt z*V?Dt@)g7akWr95R&2D<2lKv;E}wHfNfm={`I8{dBk@Upcy4Q8$cyLqK~zcxGi`=r z)=+sL$-!w!@4|&$41Vtg5jhxoCB5Fr>PdT*=Xz58^^Mr)N3(7vsWy}4X6cP%GM*?- zByO{omgZ&)M~i^5NL3*9p*$gW2fvB1&CTAe_-zykD;7Rf<#`Hd(P@{Nj_e}ozv)hv zs!u9TarBEUgZbHLP{_~mkfM^R^Us4y71hT6k51M7o>PTvUn_iw9TY58`4X8?v2olf zwS_#3E62(9+=3XlKUU)XT>bZHuQ!s3X;w}vW%-|{KV;`{6ZXogTfw`S$7lD#y_G$Q z*F^9S<3pyIMZ>W3>^6|3MZ+5FD$Nje(fX$uXBP8PF^Cec>isy`xKy#tb7I9C*|)yLNS~HaeDRo8;29k?g>g>n zh6LDaGvpV79@8v8tC zu$X%?LuH0?igcw+t%`}C5)U~32Skjp^oAF=oB{5Z5C2?y^c=qnKhbzM(fo_~cKSYY zMuAxH-aN>*rwf3yviI_YB75vnbuWwbM5+NFbIW-QSv(ZuFuryu3-DoTEL(Tt=!16<@|kpmmO`aW_>Y{JWPgY#NT>lcZ2dYJLwJ>{YWzm-&=fzb zPQ+x?`@m#F&~UQBbt-y~y1GMde&Yb_VS)D(cV8s(m0*bWN#LV_wX4wMc$gOz6=2Xk zZCx&u=&hFX-$F)98kp&6!wm&y@LP+ex1GA5L+M+iX^HrF2I^G`AO$~5FL^ga|8HR- zuhz~GV13^Kp9OhvLh_=Fr0x)`=q3zUU}8C%k?J_hRd9=@&Px@#w4eaaW|hOw_F9sP zH4%p=7`z;J7T^xWi!^$1C^7(M-r^~=c9CqL&gg>S76vcfLc z5#bvP=AMZ0Wgf(`LQ-C9-?lGds&|e~QEuObT_s;5!j`%$Orb&M9~2-B1U5Hr3r*Oy zaG&r+8NEbkh2hiC4z7&E;mSxHt__D(y_~ z--R6Z1GC*)@tb*CveC@&;dVJ2gplf8!hOJL3szjBL$u6mCY7C9%e+BbvUf90+u5%g2|tw%!xsj?xhO`%b5r&@xHz4LA7D0F zS4t3`U~po&z_IEJ@12Bac$t)2Qa(^j0@aMP2Rpjtm$8>n!{&hVAfls#W#u#9>f+5e z#e0O=J%I`~jPY;wCx<`hflqpVJ39u3<9EKig23fDPca?b_g@Ii{(S1H*ZO8JA~D45 zg=?0CN^zTA8^qMF2a>BycHfS>{9Ioc15!jryl6vw_^qhZlOu5Yl%*TRAt2KAM4wX6HqjKu&N2R&Yirk{JG!s3Bu)A^dm%SOkYDNBZ()j)& zi?in2|I%!59N^3#P{!m;uK$1HlkCr+iFf5_Yjy`z=wkXd?xzx2!)+5xJIzV7GCkl% z)!}}6>lOR4tRI)JWay&o*E7g*oWe`wn;r2~oF!WKKK?e?Y5E9V690in5a} zGg}Oewdb^r>ZroLp|Cs`>8FcKepOdtgnWJY$P6fuTu($yf-L$tYoNN2W zs$;}Dsp^@t$U`V){wQ-ZMMp9qzGIjwzRMHUIp0dC-NI%MQbfv%mAk}O8Vxj~;lP%P z*n+0~4mxlOU{mirFwn1WzxTxHtNU3iHG`g_d_*M6vN;%H8yw4SMzKNN&o={xZb+++ z4AKY9Iym6<-4UW+5{^qg=qou$l&iPIJ^t`n>Xy8wVPH%g{jyCbIb1Wa&O7PP-rC#~ zU`sak91W?QnT$DNpr1sU3P=r$L^al-xwYTF(<3MVe#Y&vBhHPLavSj=`v#W2kofq3 z=-J9eV~_HN`HNn$WiPMceVYUr6Y>kGlt=CAVWZAKbC6(!X0|= zwb{$~(U7*;RJW{M+V_4lSwZZf1^%O@j`l;#>~&~_Z=jgQl>Kh#A9KEc5pcWOSI4yk zI!GIWX1*2t;nef9IKSer1gUDF2JWYWLD0)EiUo5Xh>Lvk+%Gs) z%QW*~tbP{%3+8o$p;DoA_Ef0n4~hd>$9g5*4ga(tBR4nEF>;{TZ6jv~+Lonu^s9dQ zIbBdlh;*+YTk>pwfv#k$dnWTL6d6~vZOzX4km4=!alm^yja2PAcQP!X@>%y^)>2bR z1oPrVbsevuOvope)f#X!hj{2FT?Jl2zUhMs@qstp0q0i)Ho;d|=KThB^36`#s_xz{ zN=?MW>p;^MK*`;EKl^Ps2u<+z(BFz)iIVJn#W{lzMG zBN3CM!N|Wa_)~~ROegaV4(dmChI}DEm~1w4!%9_gP6VG*W~fRiqteYZ^D@5pT`ocp zLYcus%`1%P)3f?~2Q3ox74k)?v814N2+06j`_>*mmuF;7 zc?s>rM^R72b+?sSl$4DOisItLTOAAUuD5Am)S4C~Jt*&*^uG#>9tS<^aKz3Z<)ST! zj#vUNo`0*_IQois=3PSu1dFZ-iS$idl&qi5uIbd0A)2%4w~+A9?;K_|VtoT$6!V*; z`2#)ePp`hDO=3wgo#hUEwAgs{L~OQTN>;?3P8Wn5)}S(0Rm1kVV;IrADA5n~E@TD- zmL#K?qBJ>8)?ibeZ2WFF>e*E4<`6xx$Zx-1ESi{4xR=>uy#4hwu$Rf-P=Mnl%T;oF zb`^V;fMSM4o{?d}w#0lIIcUPu>^JaHoBvRY7HudN^(;C0)Ykh3DiW((+fl!GR% zU2lSY(FSI!i;K4=ch3P2Fla0PCCC8x4glzSy9G8VvO3kLn#by(7t~wpR|oi)MiU!u z*xJhPYOU&@d6sM?1fPxj+VKhUZ~% z4XaqNIh&hSmm$BZ1iC*tGrqip=w{z8FoLos=g%+@jNA%6!qk@EQ=8ZvW^#yQ^d`h~ zru=GuOc6Z7{BBStA&XwBq;d+@=m({G;4QXDZa&JCF_8?e)H`(y@;qMsrJUyX9K{O~ z`V8-Z^FsvXSc(GQL3czTAg8%qQvay1)a7Iws+(FMPU{)xekBs7C*`JwQTX1BRk-p? z*nOWX6Y*)aI7kI~i9(yk`PnYWx7?{>LUtMR^PS*q#1GFpTw&Jq*=_J1RUCaUGk2;T zQcE+Gbh^H~m2e`PH!|RApMRFtZHQ$*@UoKt5zYs8 z;5(yAtf%-X4-ql^CAqf5Ibd4u2=mT}}W{2zA-8zdCaftkbjXSpz z{d_l`0Y;wJWD;!v^S`5K zfd@f|3&C&Q%UxuBXdqqbx=T zdNqulE#%dnD97ZkLGm0FMti?jzq==M8Pb!rMaIak<-hKCKXGxDrW7=?&f**SE0L}N z;EU~VZm~It$f&fez#L0nz8JVMESr7<9uR!<`dlMZZHh{)ISy|a>N=+2hKn+C=|rg zZu1TEmE?ZKbSs{hoJW;*nts{|E3932{|ptXB4>q$agn-LvvbrwTvl0Y=5xhb5WCI^ zHtdYqoa|!D-@G+x+v-h{^=E~YKCV(4ZBv>RDzQfawod%*a5=aFkhbK{rfrCrEc`;R z2H~vOP6EZW8gp}~@$!c!IHFB0@aX;r%|5wXVQ`jIUbEz;o>moxV=)tCV$yaA!(UDGW+m=@Tc_VsYBgji^EH2Hn6Tyw+_$hwSU)grwQ}X1 zqh9Obe?P~$R}gGye!7-p`6#7ILO2UIi;b7J8YglcsoOMauOxs&qdhUXI5a7~-r9D6 zotFdr*ruc{Yv}*`;tyn$=t{k~<on&InEtXgCqG-2>jM<%&6_Xq-ECNL zHbZmPj32PMQ84?Nmx4sG;)qu86n!(8e!>hX3t1T~)A8IFR;>}v5%lljx#$+46@TVPRgxFiL83$d`y?_VPVS?t>vZ7ZY_$M{{S{lIKP4~ zZ^4s#+tn}stY0>l;gUI;%ge702nAp5?KL z_g)7`H$yJ_a6ZtgL@S2F5O>E#Q@Q$&ZH-Lk9rscUq;fi#ULmVc@dAVX)}q(W{5Q)g zL#ZFP*+{TO{CB?%uCRt{WJQY>>OSz9O(_dh2?O~}r;rFay>gC1)xa4}*KQWaNEkru ztQX~phcxf-<6X!%O7u;S1ImbO0jghC;y}62H~NuA5p5yf=T&6Zz4lRDY&=z~$xOXq z<9AzE%VBz=4Bvx3HBwwXxCw{bd|Z|oWi|5;fpoxhPpI~%MH}!pQ#>4& zDIE-K#KB3spIBP{!~;q^OfBLHb0dsOqt*0^sXDJ&tFK#d#&NGk5Q*3OKE|c0-i!Lyb$SmiO-Y+clo(h=C zXmAl#8^E;7L`>z|t^1oj8^yIoKfbWv`g79NVul&04CKV01bq(SJ0X`P<>TgG{^Z>} z%>$&9Cl4{-nI^iz@+D!Uarxlqrf4moOzalH#U~1chk#hn{jV?%zoeSrJ5_`#ihrG* zcBREAsc#1XMvDbCZd9={xzT3`)!$Jvc<(kc)s3}GyXvWwzP;A2Y~OFKZWJcQ{YW%N z_rPx020wuCr!wQiw?@htPTjKG_UaT}E}U=Ctj{hZnZzE;Ryi4z{q4bI-8P^>UMpv$ zj#*9iALdBFXu!@74u8h$Z$mV1V#vqn_a+I1ZyM>4t%>gice@TPxu*b#Jh_8k41SKT zq{}xCa#3sijTab>P!-E1wS#DSp#1ARWR6wIJjIh#u$3xR=<>YHu?y+DDaNOYnG|gE zE0!qDOqb_)7oyv|tWpntE%990uz=0y;`_QtL>@XFl$QNh7KuIK55IF*^~xpup)a{; z<`gqqAuC!5!GAdMOMOApy5S=0+|))L#)u>8wkYfZIXEYek`xtZL|Pd}2I03)PV&Uw zhf;PgW;=c@?R7E{2O>;#OAgs%l6P~Hyn960t9D@!e;D9zYv=`o-QI1TrYwx0u=8VA z8^M=Cc5oM}gqJ-q2~PTuc!q$ha4(kSMf`05%*)}V4*>V!0C1og`v1kB+_F;ht*%or zDVEB31Bd+o$JAR#MfrX2-!xJJg2d1b(jnbBbaxGnbce)H0)islDbh7VGe{#PC`yAg z0)j|)J@>pnzwcVl|1Q_Pn0?OPXYcEJ?F?$_UrCM8<@q>PM_S(Amld1zjXV}z4)Rxe zm@=rGW*aSjbW*41e`V=C%)1)0pgHtThIcg4ZGqz%p~P2pYv*Xewh(j4M!c7*V|nKO zjK_NCznkp7o|1*`GyWsY6>1DU5}aa_fE`o`a1iM!?ZW#Lb?jBV~QGAR4x#26ac zhyGokE~PuBLjUJU&8)F~EeX#L+X02-I+U@QslOfYX8nDr$s7KHk;{ku12p*~d+__M z+X(CdEBh(@ypG^it|yTW1CqF|q<_A}_bZa;s2Q^rx3t?x4EU#MS+aGFc=3{$ezF2*8!{yr;p@A{O9w?j_*Y{7Ih{cGveCOly ztsDozCXINpxu);aFC!CAFf0Bh*PK*-$xjSax?p?@y#I&8RQVCh3XWVN)R#EY%wZgu zW8>1yj)NU8x$h3rU#k^6|I0;AMp=N#C~`DA1D1i>XDwN?+3!~yMRp51t;rGr%4M~2 z@<*diZ;&7_(m-(3-{)gmG4GKJVchl0BmXvUGj0Bj%7JD_3`Mt0(1MMO>XF+(6%TKC zeR<^Ch^Ijrt60O+*=iXaQaW^SIqEj3#Zh08JEwS1=1p7AIHhS{P ziSx#uoPTA0V_6%bUZ60!lA={ihnM#$i%+1mOkA)}l)HvpSH@88 zU*=Da-YZqxh@DQ9(T4E4`x2eMlSfZM9>W^IK%fR3!wQjJpK0J25(8KhWIJ3#eYWN& z(2dp@#gakh`{S2ct}r0qD>t}CO&fhHML?GJ?8B61+CN8V24%HE`-GX?gH5WIWUB>5 zA8Dvo^v8YZ)$>2gS&s*Dge8kyu?I_Fed{BBl?2h|wE^<2kA&xhMQsA=cp~MBNVdi) zZhiNUP~lUxLHY+vvcwWGSoEZ{Ms-z+ORHn}nawXD(wMa$hfO^na=xrtjgR%s23{R>aI#?_lmxy>gIdcQG} zN9#*%!iQ7-j;{q|8R_tq&~&Dlm^-Z!mu!;}+6E?stG~hvt#kn7a)8}dO0WiPkCw2L zFQg3WZpN69N_U-({R(BlR(0KK8D;P>u#hr9=t;h(sP6LWB9X9sRdhPJ_yrPMz&LQGWuhiyPsF&C7MS z9}-T>*8z>5yw^G;@+1FpS#*&N2q>*+l-(ON-g}_##zlnsom~gaI4Ir)tD&47pq~Cx zP!G)%IFeIEoz48Hay#g275KdMhzVn$CC!LnDcFB>Ov=y_pA-eEZG@uT6)^ZrY=yuT z{#H)0Wa)YF>pvwD6)Id5B0nT6z{d5Molr5vKPF*epKFOh@=CcmzO#vS~-lpED6=R+{z4&_v+kFL_8=FUS_( zN-t#3R5Ib)H>AYK@j<#>v4?``IpCk4&bQxC{JWzP-F2v?+z+)RnvqSEG6G>X%DmCI z-@f8#)h0Ak@lG`!w0b>bY7XsCVy0N$N_$N-XL_A{6Ho4R#(P|nZ_i^FvVW%4J#EX< z`1e}qm>tT7P9Le-} z_b;EMddXFH$UKxCQJL080}h5xe!#)d6qXkZv_Oy|5frIjJ#sKO{RRqIV!P7_O);EJ z^gCr)!x=(>-rpHuRP%I9cim%BoU_z@l_0QM(-CU|X-i?u)>=KQR`k&l4 zD!gk^v@ATM+SO8Ja*&3*yv10A&k<`zYpYnL@HkUKZ`zO*X(B9;^! zZESI>S4L@LK;3J>!d9-+Z0wDmKg+_zZ66m&Oy+8br--W88v`ZJo@1o#DWSkdcwlKW}@AUc>R z)L{}*^V%EMRwyoB7@4(woDAz3BE!fig(JLr7VaGKgbe znLo{^(ZD_lzsmi)seR~#sy^rQFSSxh{h1TO`;WG-<7ZcxA}%MI4j;TPR7ngSA@wGd zjR4<1QPQwy$QX^n(_<$5`BW**Vn7uFDx7)IMA7>M-UAvv(~RU`7>>WuvBI)bWD#g@VPp`g2Ba$)0vyQWj4TCGB(%rr2RcxxBcT%?e3{${u>n zg97yz>o&V;j*IH$0|nTr0Iv3 z8)61xtRtbatnON71!%HEaY0b3#-+taNV03fbljIw~$0KDQi9KQE z^%GK5@vMTzNssDS$MzPF@jl<2({;oP%Te2}=@vKjq(rkWF=W=&b(y+ZrY(ok-nj@|ruDldzT zPkz*5=PFU`f?QPpsnuSQHBLlg@$x!{M5R}*mpcU}hq1fcaE|lrq=eM}8W=@a*B}f~ zS4B6j9>$utnKCCRr>dEIgZ7)NL~rJxB)@;x=LkPxYvW+3)o8TQOfFr;<9pJv824)s z+D|PBP5a?BMs4sW)ZB)uBRcZ~iMpPCV>2D+iG0ZUD2m}ohOCdH?ZLTK9G0_TvluAc zaCmo0u`w)1>Iu{1GDEh%*{lAMBs?u_xOyO7xVA^=5o%*Q2^$up=QF0RPl+lHhb1Yp zur@Xj2WW4v?~BUUvPn5^C#)kIGa(uWx~>DPQv(lwCL&lmG{!%uf&^0Rx=u?16zIsfjcLy?UAk;AW&iU=XMY zk?M8i(`+7inq{IHV6H4>xz2sSzdgR)7<~swrDllaTiH?xGm&tiowIeVS4ocBQ;9HW z4~C+b`1o}pn~k^%rO2w1-RXVOR7LAATf8_#pc8q>#9f2Bz0YPwzL48R>()`ION^|L z46CMLF~!YiN=BNg5tzCko|`z5axtoBiI2G^l8p6Xi_Q;oOZ*>WYvC`HT+rHRE1ia% zES5Cbwg-3{a$_{;Cv z$bk>|^xp@313n=CzYoa#?*qcY2G)elQ@bKuTR*-waeYwUK7ul}Y7dy|h__KpdQg`# zB;=-3Q*;+4RL|pv&gNVppukU15rJ*q{O)YvMdxIflP~-F&L=2)C>wqji5yBS6_1ma zy?H+R@+)CAtL2~R{i?reuhcl!qhmIy*{T5HaA*G$=cdT^gnOD_$GQF1<6}lN%5$Sw z6Ew5yO@e2T3FxQBW@gkR?~OZ&E@M+KorRMvTJgTwQzkANy{4?Awl@$ZpdJ8%aIPgRPYI|ATLG=sUtlQ2jC`1E+bj(L z>DU8E$K%p0Yrab;)=(Y;%xkeM_1B5`w@-i|T-Q?>4FQ61p_?#MkX3HvgKEypCq)6hr z3C?N({0Av}4%U*}!=rRDKnyg>Lb3Cc1lfB$3;)?9*CZBv=JJVn5}E#n?$v^xmGS#m zCY?(;mU;ZUufO)_#Y$_*XDG5y)47e5e-^*PGiE%it;TneDKo1(#JYbX{ip zPGwHj#$ym&uK%f><1)*&*d2fA-ne?SFU;kS3lIY>Knxgvll)}K0bSSn3*1D_0BcVV zu(REh1KMq1GU?(^OVMu^54QX52%^ks{b2w5daQhV#>(esYE~vl{Eh9kY^)m@mFa6PB%uCbcjo&%lpSMTHc8pz2sfxqw+>2 zGrqJRU#XyxPnoYYxZLHpQk+*V#s~t&&^J;)P?vHhcF9QkW*6mvLTG~&u2K8;@mE& z&-~$-ZN7N}TS+f(b3j{SsSTcgnvX+TZ5oC>21lXNF$$gs+kM&3Xo|t`qM0%sx^DQK z^c11FNwXp!{|R<98q+s5bX#0RpaVJl`w&!C(w9|zq%`M({Bw0!%GjAVZ)ry3$JWz@ z7Zz@gT^2B#^^>&jyjAD4Ug9{hDXiR=g?E6N{%~v|B?D8d5iYVpvC*O~_Zd}Q!}W|j zX%re|P(^pM=4<3B*_F@KWZjTWBfh3k=CSrEFrhDyS@$74?t}!}&Mu*;!qWNlsxn$r z6II8VM5%%5_C6p(|3om7r$U&kq_{N(6v)yadfymgE;DV6vI87026vF_BxdOeb^Im@RmX8Nh9;ZU!riJCR`R1 z^+SO*_`g!kq%@t!h0LaKE|vIwSUza1`%109_9OX&&>6lR@HDFd>VZP6)Wpv~Jz&xT zPVbC@Ea6~lgi^%LCbB(cSwp^#zhW6+j?QPfX1@c#V{;p$2hA#f-jc|-szee(Gt;;v zW4H#_wJ_iR?-;hpdWq*y)R3ZbB8Nhy`p&hH>@T@O6<(yOs->@#54~}F`da~=dX^&i z=Y1_a6TjPbQ>>0M7$>>*P-riEFz0n!(-{_`a61h z{y@*@=0jQFt5oePb5VBJt@A;FF|n{34{s?*J={zb7eB#fc)^l6opU^kmQ^tDEa=(B3c8_1) zT1^7}SL4@0=~a%ZU6kac6cy}20%FgrJ;`fBG!sLgT2#4|;b8xyZkL9KZLfFGyJt;%-vl;Q zn~fr}I1S2BfEc(0VgNzaAu=p*{vrpPx-s&G88oqp)(vwKhU5m+BIMJ-Y0oWnB=X zvi2=7BaxzD+YQvvo=rw1I-mN}fITk{@d}sx!`-U6-cn z96EcTcth+=Wbhe?m5PXmxk5lu8UjB!#~JU_%#<v^ zL%R{lPq)A^6x2}OF205p9F)mY#j-;tJ8Mn%+Iz?ck2ECJPVe<_Q&bU9EDkq{N2#i8>#2snzte+>>H_oFGo2a!%~^Utk~N>DqoRaH-kFe3OKPhp4Eb z?8cn-)zvwZI!dMuWqr!UDl_D(KPMozPKsua2TZCi$OMbwQFp zm(3u`d*!#X)5{2JzxVYle5w-oa|jaJn=o%Q2DtW0MYGuH+l1#(b=lo(wfYOPbDJdo z5r;$|7f2UTP}cUhXrG!H>Wb*MIMK$M>cbi|%+@m^_}PBJ*cP)}&xBVm3NdET@PT&$ zPvDPRLc<006E_z!$Ng`}4=AilYjt@G+W?Xll5w3v3 z*44Np)(@>xmmg?nuZF5@dVh%E;KZN;T2)bN6SvQ+a8y z;;8MN{!3~)npa0uMwx?Q6ul(f@;NGi(HQe_9Xc6nj`McGz|kg}wR@YApqA`n$Wfrj z4=Ya|;d%Q$bg%6y9fPPzTd%_pMdD1jih-5J881yDHr$@|wygLO-4I$s$_oDWLq((L zwUb~ZcSQ$#A-y|e5|xtnxbGdujU*!w1Iq{$e@R7pqCPfU%lvp+ji%td-pYU=>TCTz z=*Lwji(TYRWZUr7`QqOb2NTbJ7DKD9?VI;0)9*W>#I3znWP%i*WLw3^DL2ll(Dr{@ z&mXd6uqa+XI!1N!TKTeQpBM0HdtjcrT;Kv1(UVVEA@je^sL+GJntO3>zAhxRQLDcf z>DkY?`~4R%f&M@!<^e@vzZNy-*XBKFr^v*EJmoE+7L7I;dD4R&ncZ{DA#6$v$lNJM z6`)u&@GYTC=sks-dn2b-dO8tk19WEWZx#_@pPm3}H9Z~bY~UCkJ_1^;uCPwz;BpZ- zhV8&Hv@iyfc1A;%LQph9zf{d8(h;((*^8q<-=P>_zT(PKfA=2$mII2v@h7fD<;hcZJG}SC~Is`}%;_9xMD*eQ6h6!}O=~eIo5&c=>Wl zfOeO!Q4x$)QKa98YZBTx_I;x_mZHCnUN+ArmbWSEgD9`8OfZ#%S{PP@W-~d~=Tpzx zt8Nt9+dOAjNrC3gZPF6YwE0#2apya#4|@KK%qQ*TK$Y+i8{2vDlhP)GmW z9bi&NG(nO9Q-z}FH}91T^@Wp&A*K}4oWcn(Zf(PJF|GC?GTrt;&)DIP!^yAI+GC4I zsT@pqP-hQEk8k4^=~wvZ@%lQx+i%^FCWadG`!155);=p@{!|&xE{)4I$as`Rp+dM9 zrF%E|zU3BjDMW=CF_t4?s!J0qR zC(xJUIsTjAs~8`7Q)P)!RN5o^LZ*%xqx#p>MvrhU7Zi;9A5u%spGUYVy01Lb@|=*| zuZI01F!Z~ITt3Q=p+k-ML0Qt2K4Tm82Wi$veSrj46B>X~K1f?I#r* z$*!#IZnYKiandZ!u!D3ysFwfZXngfw479COYJX$#4ZRYCHmO&iOb$WQ!3W%CutRi2 zl!%spO4yRNhoigcDoY3-*T#>mCP58H|5DxW1s5@)sfvf6mtHzSaegM!2|hmkuFCc; z(m3U)?7iFX$WPIP5GgVB=LfpOTaz|==2-$)5IQ#2_&{yku|z{ZkyiMr&JAY`ScSD~ zHjp15ZJZlt6Vg3m_-hbK7J>M{LUtR&egrg&jl^0l%$BvR&uj)?QpX6>e$*-Das2Yp zET^m?E(q^+bz$@7r<#P=cIuI}y=WeO7H7MI-4cNLbY#>tqbuS&#ZXk5ef&#L%RgHd zkA3jjWeQ9^LAorr7TnnkgIrnn8-*UBv4?&qUnS3Bp#i$(hI~-vpp4dcCeZSxo0Ug| zW^+r^5BYQ%YTo7T(Yt&)OuCMr>6Y6GE_FZ*yqz%I%EkbBo9c8)t{w7nho28)%0tpQ zpOw4)Q?*V6egfZQhRe>NBl5ROr?M&Ec8Q09J|WV}r2^=7zsEq9{Qhc$TGjuL@sJM0 z0Nc3%ltmS|3jgEn0G>(?AO;M8_xYbr!c28a$(Y08b*;2u$04FnSdlQ%dBSIkG&WEl z*tAoLmj4(ll5q+5&vdQ?0_c`s7)QCi+OXq%j@3X!xFo9;mN|L#mrAZK69AF+`ji)! zJF6>{q?~Q8-iPqd7K=%etyyfK8FY(7O*zl@v%n-YfVtcGa0l25;)7H&Ir(ra%f({E zK+Mm=B@{h{o58Tc0mJ8g2#F$02G%|C#)?7DCkzsgOf+Vg`FIP=jtBR~J>7T41blc# zSRvzd?qgvo(%0<%qUA!p^2Ai!7K7lPV%V#54{-&(nY`I@eko?6dS;ZZ9_WbS%az&0MTe6K2@|?+K5tbdFDI8gd(m}PsNcnHz>H&vv2RXdN&VzCs;`UTk>Se| z`rz;HAJtJy=`HOLXi^OvMOhFy8}yvXPV9h$$ulwI2c{ zhyW+Dhq8p(QxAwQ!>r!$x5>bil@VzW9t#s|s*eicYLtba>kceAmkGI<1__~LK49sE zBK!56fQF-L572Og<8~r7n@HLWPn&#eK|Wz-1+HYw$oaZfGGL=YCx)ey`#~v9wf>{e z>80+_?K1ELol9VRT0LRNc?sF&@i*l@GmV;U7@o=c94M42~xRqMGiRCCBk``P)t2ud6X-PP|pU zINv>W7RU#I#NU^%g6P{r9jws3kL*LJt@&{4NrMkLxj$c&mU<4)GidHb$BCDc5)zW! z#Y3{W#A(+>sPr60`Jpdaz0}2OgxE@qmQB6EUa+L{=EnEyx>dprZ&k1ywH(7zmfP-} z0Qr0-pyiO~=IcM+YkrriJ<63k@W&bk!Ihq^dTUCFm+o*ebP zC)0r`t9@mzFXGzs`L7N1dc7^Y_jh2o%2l2t8nwf9Dud9nij~hu!azAjuNJAJXZ~C& z{uKP{5l_Eg!`Nh_Y1^{Oa?%$3wt@4Z%2SVPuYS`f``z*{SE&+mBf!fAMn&{y>k~%3 zK6k}{$|lRFTITa71lQzO?yui7%o+>}P3kRXObx8;Rz8{i*NaUw$@mEmkj6v6rD>!= zaX((2L$8c0&{MVdR-W{bY~8RCXEwqLi!rW6;}c-O#DXE)Y$dOBc#)GY$D+)SQtm|ia2J?t zH}3@!V52`jzQKDnU=v5*YL`^->PjP7<6T1wbgqixFH10-XDF(Ng!yKdqQ@0>Y1N@| zU?J33&P!&RD4(bLfe`<4Q_6s9HWH4_>NH(x9@M)v>-FsONa5!n%y#0h;(vLbuuk1G z&IVlw{TEd4s3VFC2d%#WY1gbwNJEe3o%xh9gW3dxFEbl4k^mklYUa`szYnz3C%BnMmc57D!najD*bwL|KO|2*?vcx_Aapbk;i?8bu6KV*G1~r=Yau^ZW+Prh@qrCb zU(LHXoseR4HW{t&o{58a5y#^1Fi~)zorMgMH?d{|)#Y7aQILzwLUk46ZJN2t&+gg> zZg5Wz9CGd<00n}e*&#!4m{C;w614${f!pU3#Hp}C2<9`Jjg7w8WgLWye1X%4oB)+5 z(Y9XGbqDbtN3#2LnzO;o8YP5a@&$~7Qoj1HQuWDw#7{;7+*#pdN^*E^MmFtoSH15h z$!QTE{?d&`Xm){}1Y2ZnYPr{GU$Aa0XS^$&&9MhmLgU?GGv1xR_n5ob`ci@(68qad z;>;#kAw6beqe^FQxfFTFtGP$JhB#LP6&ccK`}KU$yEo3IM@;v_Vcw`6z|4qpY+yig zC0pM$ia?$I5|!_3jY9R3#A6xuG!>VZFEMN7w+rk5+c0&>Id(s$jpOSw%Q2g$q^iY+ zbT&Is-n zc6JK}i8)9;+<;U8>=m`oF?*gdsPz52kL`4QC#?F9N-ZQ588wKyDv5`(-?OKlK70b7 zKFgk=dD(_%02NWiCZ|Ve@?!7Dwdy9j_IwDGbCy=tx>FP=i6mKw9+^?C_p1rDs)8&< z_F0AjEY@)Xi(kecqCZ5ff6(6~mBD#p2^==H%D5c?@E1JcXT0~`Uku+%9a=M^oOBEJ zllrgfw%Ud!$?7C>_W#n^A@ zFUUP5;R7!yC}RvN)(n%8Wh#li^5EB7DPXYbD=~ZVHd~=OPyCUl_HU`H@2M%LiOSh8 z0d2!he@b><#)nL^SB!D?uDoDGBNPs~8czXYpbd1!*SpQ z>IoBZKU&)FZy4u>CY$X5vR)($mH=?EAjkK}$>}(fj1Iu(pd~7hC8VZP50F-OAf?r3 zXbs&1RVU58|5p`nh_P3zk1a&Y=Q(~LbR>Nl^*vI&6xh`#Wl$`ae9Q&nQ>G}UvMBAg>F}SQpS}!~U zw;Nosy2C$xmwwb#I%xV zEl{-}*VFM(_d&yjT8baN{-w|9qh@1h1QC@48`Jsn=TNWm56-vN@5o`~<#sYnA!CSUo)%4oq$ z4f|Ia3TK)q3B=GL?do_ty4wMd`9$M|)Pvne0=5Cq>hZ#?P2-0BG|&9+nfOzUV;g%r zEL(XYL~>kAq&RKviNKiLeJ!wr+g;pD6&`C@wioodzlb(C*rX0tM=o%J8zB)FXNGtE zrNdv7_9h_JNsltYkbO74pQ-#4pm~=W&=by* z!CxKX`Z9omvx%$xo>C;xi&(o|7mN4@HizcuSfgpZiv0IKe}BM-K$q*Dxioj5ieV2{ zi-&fmqt}I>k?nf8{j(ipRm@1BH`lP#9%?=G_$hhX;f0SceSHM_p@HM0^@t1#YApW& z>ZsNY^h(TfVuZCAsL6hUGz=ErvGgmaqFN0A$*5oaqe&Gl!Tg?yY^Tdh6-o!f zs3T-HyhLuPU;}`_?v6u3uCO9gCU5Z;nL;+4AmU=&M_R!Z{GL~gPJ6i#OY+s{G7t4p znmT_Q@408wFurgZ1M2#_sVBy)K!1P&iZY;Q5UQr351`RAFf^>TpkETj2bm?6_oy6V zH$!PSJy@A=3HZi}MK`a%lrhx+{En=6RZ_V6dh6IxKJF;#cAO6W8}_l zRGROTt};8HJVZ@deRDQRtZC_@IN!R62z3(inIdMT|K?(g7o#>HgN3{aQT(CGsHcp> z)I@K6=paXKf*RITQgiJjg~($#4j73HfA3O!;XtNiwF4|cwATN<4V@bFoiDef45?;2 zVB!`^86^OG?%YpZ`~&A3Yfz9<$+Lg7f)`lrXawW>I(aAX_knhm z=$qA13{&nlrUO-|*p^P8W4Ct7W|IOaB{WUr-DPuqFJFL6vP4>tkXw%d&+q*?HQ4!U zcxusciQ036x81}Ya?E7}EjiJ=XCRDZ%mBbrIhO!q9!m1wL+mCkfWpm+ff(2xovr7W zd1H>(SXt%eL#}iX-KH@7nwkWzG?*!_B#iXarh$z|%1qm4DHHF>` z0;C3hZk0IEwNZ;9_G3R2PDm?wiWPaXkAf`A5p^XJcV)$gKny&*m_-JmeU7tBj68cN zACw@KSmgg*9qHI}SH2XVOtUNp>T zIMb_N&rrQ>!|0JVA1I?xTD!fjRMP{eY7ZQiBd(F$oVWv*D9Wrl=f>%8-8f4zIy^q)@&clibBtPqLTPV5AioSuua_=$?OAboMxq-1!< zU^wHP>NVacL|`cSOQ)AopsJs|@rfLLkZj#%}_88T! zlLr=s@JVK(YTh#9(-axxMI5JzbfW%{H(Ph$FfuRs8o+n<;;NsE>s6 zZBSOVDJ@a8uk|~+V{SXQQvRjFxdfI4Y8U=Q2ZQS@&=nDa1(#LaUg+|B{w@o%HFP}R zOgB;~xX8lWXJV^>QxLvMa@j!iWC^4W&6S4YOc$&3(w{e5?9mIe*sd*-?j-M4<=bdKFS8?O=HBZSJx<Xr3?dkIfIb~g_a#w*J;f|BT+-8cJKbfu zr>$&K+;pSZBfwS{2iE<31Xd8u&cSVl_7=C()1!6gUrfE3^((tf;X0B>i&H&lSRSEW z`?P3xZs!-9MFD9p&Dstk`y+CJ)+g$@&&3=|98LrXvH?mab#J!)Skdo zVK2AeoNd4BK2ZbO^;nIsJ-w8m$vjuoH5`HS43z<&OnQS&;^1}3ElrsQu$vpVqW(^04*9ufOLWsGW8-Mlz@vt{AD-&fDMLP-T}?k71|<{*B059KowcAZfU`noNx zyZ3@7ii+hrJ&}*o_ECpP>`Jo~SX-Uv$@vRkrf=S6gvr2zr~9EUUPC9&mz@OLU^ogo z8=x1OJ#NMB-%_vu0D*6TrBU*VaA0KOF3^_937dB1|7LWTS&w27lMW62Lmb};JH!7` z{B>|tlWweZefaC1rikdj9r&;>)^dV~D6lN1SgF%vI95Te@u~=e!l4rD|4=e~+)bVZ~Xst~~ELuAjR8DzZ{2B6W9h9&0zh<$_RZJ`6 zS^Vv@S9cI50EwIm(FV-jz6SGY0WN~nHMIB(3ed~VKFn6}GuKrQzuT7}k5PT2wm&+@ zrLF1KyP2k=@i8A+O|%R>lDF+#0(;2I>ckZ&AV3V5c(rAaQ{Kpi)i<7!!4>0XdQ3I< z97toguy^;*ee$}(eN?-42_kCdn#_zsUUr&2JE^%fpqB+Mc}DOPK6cEW`l9}6N{-r_ z&-CdjZbKptd|Efmf=QZ5@uoGys7kO#$^F)1{cNche#iI14ShZyCfSwNrZvI|nscBQ<=_;_d zOIQS)4=5_Xe&L}0$*MUnGna7N4^^!z2%4iIoWD9WPq9m-KINC`dwBJ<<$~sT^>v(j zlLA1eM^{jFrHa9sGA=O>=0QK!HuL6qN5b3#!@ZY{_N94z3hF$%7wKVsSOo-y5xmaz zzcg-Yzb0^=yZ&2TMh+~{fDXyNADzU>MIM^OJ>f{`6%V-#tNS?1+}JI2L$$3S)a@8M zz#}MIf0Qwl2{*fvw|_d=BGIC4CL;XELq^ZKz51b;pO0XGNK8`EUN?(pce4zEuTZwX&8DBb1FqpNB7BaM*qe2Y!Mz=dM5H z3H#^W|4JPD^)*9Kb#(+%FTM1ufXAr{x7pL1tBVI;!Ee286w@?!;3zNgO^ca(Jr}ezO43x^0rD80T8<0qu5Mh6 z8OK>o3xh(&IA`-?T`^f3fz}6JdUB)fL~1bjgN3ZP{9))aNz)M~tWC)*r!DxL9K-p^ zXsUemur#(eKGYt$sl@)jO(mEBX@rKu9N1J6l$CA>>>zM3-_nv#s8f0F;3ZlyfX5Y)J+;t7F&4z~{pGTXDjt_yV5uT1 z5V+=q0Zt^N%$KQ9$L%QFYJOzhY_`9W^SaqfO{J#|mJ9H(Wjjg^|ECP$?|684A z0qFa4fz4&IKr)&Ek`WBRZVdy;2xM-_e*qYelYnI80_=#`2a*xl$OAN%3@{$!0*%5S zK%;OO=um(GZMXeGYN9pZ{Z0b3-3|Z{81es1rxieh;x|C0egH5V)qv^r48Y@`0kh*c zRh2*Y|KwYdEY`~f@xlLgwE$1E-_Ed}As`zf1PU+TwO!%CpMG{hw&{N1KAB0r&L!hK zhi+X&_GlYHd@}`_LY9E57;;2_&JhQ?OEGIh>9$ds6ZCp7PrK`HCy_noJzdN%v`9`* z|6Hgn&7hEM;wlv`N5H9dki<9O@0X*3<*cD$O%I^a@fs*DK^+!Zg~WR4h_lmVPc?)@ zi}CMI`0>E*w$Wk%=(!`db+!$X2Mh&(z{r~jSr&H+oZ)}K#=BItB`_B4{@ksMzW;)Q zaxt}`8FFL@fWXnNW{a_;3@W8k2bh{m9AIwjlo)+l*x{Sev)13DD4zSO>q zGQV48=ePn=YbRcEIM|Dq7j$;ae5@%e&UA(=q?u{vs)i`38&{VagTleZk-G$Z z8(4#?c=xh8o?P+JPbx!mErov-WPBJHKPHEaTDbHpAB|NCu;6XLPgQU}MOnDf`K3X? ze?s%Lj3-j(00M$=vi6BdJ$VV*%vbSl(^4Qe!X(B<_iY_=KD_xX=TZK&c{z&p!eVGZ z>zSp0VV7LD({N@@e3f$qK3kNTL0+*C#nS92pI^B3lkj9{1+OvddFLx0U15tQ!u)FD zU$hRu?3V3Xn8xit+wD{on8sjXN6PL2R7~r@=Xsl8doGggxBqjZV^nwf+AB?OgBH~UU;3B-{{Hq%&+5YzUVgX9MVI4Z_zNC6t|7ke zEXrY&1#x3iy)(Fit#?;v8S}!t#i)=J!<5CzMSahJ!S7vA@>0aqco%%^&)el#jjE3f zsu#W=FlKisMFvGK_MVdTxR=KuIv=G)Z+4u6Z{bCUvWpJ0+G2- z;Riahq>%JZ;3vSRv=3bdbd7@4_mrygXi(g0t2){VlB}epm(g&+O-f(7S2(p(U|RbI zh`UM@+nsFsx&u}BXq~(;EaQjYyzevp$B=76J>SZ?8wrkCJy0<89^vORu+HLe_B$qG zbrdidG#4Qz*RZnf7EXjm-%-aFdCe&kjW<3}Be&Vw<4#m7PcI=NyoB*%Y7UY?*xf&n zA25}LP=7lA4bb<0eNYKi#%k2?21uy)HZp!9%RhxB6g7ljG9btomeVP1C>&(u^gFoq z-pND0&Xxfi2!RcPwaih#+>S3Ox|x4GxaJwF*4Q$a4>TEOGsd-1$yiEVE_(~B^E4X0kmk=_Q>dK$nYnd#|opqK3JtFVHv5K_Xz#F++Z-Y zaXS;1kPj3YV?dBGUsHISDgJQ->8cC-ncF!e=8Awau&$bQ#@?h@dU)J8MiUxH`_N-u z_69v!iUB*Co7*x53?~Fs<}-4tVHsDC=mklZddxb9kK*fVF&yikRWv3s-F*kv1A zJy`ZOvCk#-f1ZW1Eu*N4bCl^{B9^c7mR7t&fJURhBVDepL#}R3a&@^Y+J1iSgA|+H z2tH~M;u82BGHEQtG<}_0~%~r!6ZQioYSnv_coca+;X)~%8 z@7_)eLk|1h4##lHJzA&y;QhT|TJ+wnjeJps^oxByZb)xDyg8EdzR9$(ktD(wza zy~<@LY%=ypPoslGq(EIRKw-quJOd1nx{b>5*QDVB!)8^TM3Yd`-NYl70h4@cUF)P$ zrK*q8`y>l%u1YE!v>DHdqDPO|3Es1zKYz8XgI?@a8hgdgM4d!c6WU#pKycXdY{cH1 zO`#3AArCy$8 zN>Z{0(x22-SgozDMag$ZGCGdfcvC6-C6uVeJz1-f1O_xVbmVMBYQmbgt{3?!bT!K% z8Z*K}wzdo8#c!EM2^np&uh(uO5L&}}D*Qq*{yRfjmv?TcQiGY1%I3y&_@E^J7@kRC zabPFlDtv)D{D%*eWG;yu(Ce(SBi`mN5Tkdg zi(c6-nB?dyN@&ORRF=7B@`EdYUU|?_)C-28ID;$r1g=2k^G!(=!0B`r2&WDwkGTs% zf?IWmI1JFh8-N%(J@)}jHvrziCWdN|O6^oEId}s$fJ0&i_2MA(Zr4@2Irurm z@JYod$B}hf3I%)#42T+iAB}_Fp{jwZ{qN*thbejiuiB3O$mF7+oJMtfMSblyyDoeHjgl$6)8x zfj~Zf|GPRa>qfb7$&-TwUc_TBQ-V9sHvinOq$X$A6y{ zt@U-weZ`io1G~DFs3B$1huWjS;u#J$6w41&8K4t9z}!-~zpgcqchs)GCq4Fe@Myd!41I zQ0o4I7{){YvHoja_$;qncQeDiTjyYv(!ZR-B|2^hNF)zVS7mm3ya2Y>eHxf`g#=Vg zb#{trw+?utgzW0Et(~HQBr;j&XyprI2_gYvwr8Vf6k_L5KP6F^q8)N7x=oC>o|*(c%oVyTLMtliL?Bq&e{i<@0Unu=ToBhT8)GX&D?9l_Q`2AU4g@u+`89O&iz6G3A z_J~lDEoo6!&*2l}cLV*kXSbc&@`V_jC3{eAIAeLgxVF$|wSB04kshqe zAxx(e`F*!21gtWBE!tul1xm7P5D7KGo{qcL>D?nt2dz^W_?U!sb!uZHlu~Gc7Zib^ z(|4eAN(QJ@r{ED{f=8GP6p4F*Hai6%G_C;=3Qw@LiU9}`^MeTsmd+J*tr)vayo9=r z`|sST-a|CGn5dvARA5A+IGuWp^7z{D$48bLvN!!$xh#uDz1|Gksi|Cl$=;Q*HHe*m z)o4q3V`$9O=i{rPj9GVi{We5!-_p?XhYn>5`b;$3Ot)E-M`5KPNjcO{Z>?eHQmD^L zVP2E${e4Aa{HExjCy^!?`|3j(0rUk*VIAGYKVCv=`|R_y)KyUd&XhVkHK8zz4s1s) zN41I=@ujHGpGtSRFD&6pk59Sv!3m6JKQefegDR@TG}vv>D}{+rvc&E#liUB{JWs%p z!aAUeMVj;ext`EkdA)2?yTs*ZjG4iKQ4K%rCJ_VsV7#W=UqbYR9T!3{GqvHSmPY%{ zcspq4t>DX3$_8JfHaT9wzZh>(hUj}KL`@i|iUrl^G>Xj-?lc3rrEk1+imO5tR0+#BPWeP_g>0TIqs(Vwc`}XPUY|+1D*`ykIA`jxt}~4^e)o4pk!avL`T1u#cq(kn1}^>y zJWw8xzlT;j{ncuD} z8r1AF3wuJ&PTer4d6q(Ayk8T_&*931o`kaS34Qm>tOTJsOt`9iS-V_0Or@jOYDy>p zG2wr8lAkcFQ85@zDX|cl6<#F?4t?4c>#!HRLh{2f)-!M6tV zTh)iKET;sE)>8^kTmSnjdA{+!y)e$ENT~Lu&(7lGoKvcXr`m1rQ;dtgg-$cikHHBq z1WkRS(ksJNAMxu>5Z=}FP?8QpI@w9H0?J8oz(cjXPQF zusn{0qvm~BlSbX%&zpIFh3D`gl(Da~H}a<4I=sfB*I??{Sd3)5Z^d4;BNXX{p9R!1 z>h4qaDLlK8uFGV%4xRSZczalq0BxXD*Fx*dYVRw%eVF&n<3;JVyBM*kT5YUmH`WDZMqd z#T|-ziT~_{5~|G?xA3d_{=XieZ6+R#HI+&#-Rwo68&CbR?T^%@?wb6@*p%-O|14)f zy9CC@#{gY6>*who*SuHOTB3#q>*{Q_Kf=^mEk2`Rp00}PQK7fs@SQkq!XeM3{=PV` z9ZI9TQ)>I7v=)4P3bG+&#`9}ghisL6dV8{STKYxJUN=P@5yCLnE%Av`-)viqQi!=nA?Sb0<= z??nES6u#^C5clwvNW)AW(_g_s#lx@4bsBP564BCUKKXiz^E2ZFk3-nJOfFEs;IUrX z%1QcJxU2Bx$A}#*;R0ilPlr`HB(maZOM@_SqK;X0!J`qVpyXKB=(u>~dBfNBC$tTL z+LhCI%<6nGj2YC1_c_JGOl>w#>0^-&jAc=g?95-szI}WqaRB4Iyw5##FHZC{j8fsD za>rmDL!xgMj&P5_=zxqk>xjm^P}A^A{l7YWfi~a$9Ck^|`UfrHPR2=xq%WK!@3kJ0 zLLWs^rZENNAREd2SKqRaei^|KXN~Ms?gO%o8pJHerv-HkxGdk^%q5ztB&2ovzzO;8kF%W$hgx=mEM^H~uqZ_J zg0!|^~J`q$z zzJS+jeYaeGo3%4u3<<&lW4A0z>G1iNIG0OTtAq49ii0w8IM)H}(hI*3Vzm?}%Wjak zMk1kF%H^Nezmx5H1+#DPysD#OfI9uraTqJ}fTF{6;x(~Ea`Ujs*M2jZZ_MqQ#4Fsw z(fVJ5tOOrYZ74sHzSr{#SF+w(DO0IZv#ge3#&X73pkIJb^@yq_qFfQ|at&(<*ATAL zRw#dUNw4bII-#Mj7c8eNnRR1bgH|FE$Kyr7ML#;#Za!&7i+0B=_+Pjp#w3Pz{Vu7>1`B&yW zN}~hMhrW@^v!j|TlK7sTQ`R#g)M=Ajo*kASNodSk#?RDUY2sD?1qz91&JaJ*a7HOb zJ7Z;kU%b~&%ab(ry?4T~6-($A2iFl3Obf+J0*tL8L2;8OiNDGUEC5V*@jnrY=WHAX zRiG+{|F0;e1R|9e;Aiv`sN>yjt8w^WJ@6M4r9+?|NC)-66kt?70zl;!SXOffR5C(9 znVbb|mv06F1nzf8rKlO^&gNFvdrXABX%4><m!mV4qU8FIR)*yZp9p=DB#rrj2XS$gURPA)ZAI#~huVCM^*m%* zFCjY~rs6wUk=_ly{{`t=(UG9lWK^1RspQ|6! zDZ5|GN@Znq2ZfZZ{|=j13EEP+-(KwXTh(P2x@1*G(DJtVY9G6-`XAr_1~f?~ z0<3m=zzLMscc<7$dMy+WLTu~QXqo7Y_-gS5hRj!cV3%xxdmlTMp|Meex}%Q3Na(6T zlZ?Rnn~&A05(mW*Z6ZO2*3^5E+EI3mVJWjIO2|S2?YebKmSX~f6zuc&knoe!BR-pC zsMPG5zGDexOmr3g5CKz-_N=*|s9~F#?|J!ZOvojyyxwu@XHY^zFH}$(ie)>&`&rpG zzK_AQWpcyIDB1nedF)w?d&KueiSx7%sJqv2hb*ut1T8LaG;w}Rq5u`FO3^%(<2VQdO#Fs;a;R1_Zg(26BG0G@bfNTu5o1biDFQ$pI*qf_HT#fDC$udX_Z~kOIW97Sc#@; z!ed+2D)7Z_N@KH2cdIUukK+tK*{mO$%|Te&_LGdO?((QFs4DVV+}>baF1QH~X8&+h zgNyuP&HuW9WLt}>yFuoV2(OF4p*{rofW$LJ%9carlMHiw$k83UCy<_P2hYjPZmrCz z_4bKfLT?jAsy(U6JCA}CQp2O^S29euS`JA+5VSVkfBQcDs$KI#p-QV1xOEFwzU=pAD|i-A01z8fU--)Ri#cC)97FQfQ5StXJc;XWzya}KHKx~2 zvAp|G=EPnQ`j!%)B^F67w1OuZVpmc%(RAwI}2aA zaafo2C6OQ{5{#=~FlAe`3ui$WN3;VKx!z#z zI%_@aCE)e84N@3uR;~|gdLBm{g`l-yXWg^}o%HdJggK*ccrqj%*Al{P{Me&Z1;)6% z3y=ZUJ#)ikdnUMCcXSkzKPv+K>7ZH}bO$jYZgkBRx1e~33e zUIc{b^Xe(~a7ICITnOC(HAI?H?Z zD+-`g@i9tXy&{U%kJeU?5h(4AhCd!Mw>&4!ntYMD^i1pmL9q6$e{0%4@1+yNy>`0q zjFImCD0W9>-XOia1B-%G=9+*rVo|ias8>`#G1uMiI zhmdSqQdzb0;-Exik}Fv=RjPfTeol>44+zDo`;k8cb)I=Vn&004$&IGLz2tYVdG2HN zmBdZ)O#7wVk<$I9znVVwu3xO)NFE6Ln&#|Rnpp}J$5*SoM@YTp9-&b;opE{?R871< zUdo6Jl99yuHvKZg4_E7Y50telp@P3;?a+Lqy*>2TvQNl%)Cqno6sT&}pRbZNDz5F@ z|HdK>g9x4Sek^eZjS{o<3|%6btyStK5)Zqj)IGhxL0RkG7b;LAfXWEp zOIwuEv@=mi(o^FK=DD#5RtuK-ah;g#;%c;YBxZGZJzUDU1-mB|A;OY3qwaXr46 z{Y*fo^3NZh!n=1hTsU&lUJ*LWKmwj*SvC&CK(d!H1fJ^c8BtS}QK- zjz0|Q0X9J6*@x;Bw}Svcpw*0@Mzh2I;zHukS-jt#>{qHu_QE?03S*?y1nMHX__n4g zt<{jwBP$e5oFpJn7~FTp8-Y~;1PY1&J|sHE4WbHu*t^J5#`c#8V8vq>rTKX9#(!_% z^bu2AnzztsakuJOv#>mg>jnKVW3u8~6jTI^L;`wUb5v+qC7t7%&^r5FTCA4tguEG+ z=rdx_QkT8K>Q(SjBoBuw!dOegT4>WOk6Vc|RoNl&93egmV7jpOO9Ll3b?SS~13cGR zzcW^4qm>sqFM(KXXN1ev1Eva!7Ds0fRfCzV=|CPb*3P|T;#0t;d!g(Rk3ztTe&h0H z7y4{LqVR;}lZw8*pR!^JS5GMw(KTKs51UZYQP!$UeAF%imB^MNl)y#36dl#kCW@1t z)d(pGJF4UOH4{clNG*(zo;eN0`3bU*RS0us)@>crO|tQb1Ia|8$Ii?+-)O=JM??g;*(p{z;83&^{?_MdS=kdd}8aS<80)mxm!P?)yc`p} zMzPJ$`iAV^e%rV+uk7r}x5~f#Jm0pllC9_3TTo9VHMvYhWn$TvL>9E|9;O`>C>7I@ zO@E||Yu9d+KsGuq({NeQj+>$2LCb=;3|A@jKRh;n(MmMp&5ob4|0=Vzlg%H8u8p;J zjZx%!I#|$4z^LWakm{QtLO%KIO>)?T35^MMY-I~%1l~Z~w3;*K>ci}Z99L+5a2z9v z8Sl!|snu8Snd)?S^hHwNTN2E2tOg28VNDrp<9;Lm%%+D?lj)D?NSDdcq>&4SlTu$c z+mI;2eiL+O+ealdCQp?0QQ!Vm7nQXW-idvb(-&#^rgbZLR-EGLV#~tEib4H)dieTt zjvZr6AZY!IH{5x9MFy4fXF6YSZl8ABbqv^QZO8W}mi%+4_O+%`W5>URK`LVG#hl*U z04rAgfh0K%1|Da?63IFU!f7QGU)^^1P#nBJ1D3fO;ivrt9Scg074@7Vu*=n`?sg>A zJ)nsr*IrED*rOZ}iMGFmp-7$?aU_8_FadBvBfHwQ8VtgzhR4U;Y+qfvg}69LGIH}` zWsS7COaoQr?s3=@;a?Aki=B;Ca%30xO#gTbzUMI;^$cj7bh0-Fc^wJN0s$sCcH#4+InMX1`Ai zLXq^Zq8YHK1w2o#{gOt$iVVJ_=}1X4l0}mAaxqZ0InB|U>(^?Dg*WZSip>7ORQ-!w zt4NZ6woe`11C__){K$_{+!?>f-hS($kctF3lc7k^1kN!t%4Y4O_UYwRNHs?}1W-9% zWA4Axh}YU6donTQ`?nO6eIV(qa%A=O?+5ubx{}Xp$e$0@EpRK=zf$#_q+SZsZ$^Dr z$noCTmv6C*z_ZA0P_1fidJz7!;BmL@%>C)NZ}t8P_x*;L@>OYc>UKmQf4Mb~mc!Uo zxA$9DTpZ*sA&6gY|C>xwQ`r-jAfmn1-GKoR65C+Zr6n}0gRAgarZKbgxblx}_UqTw zZ-3j0aVrrW*GnBlf2at~l$hD5RLluyw<-MW@tlo|ge2PH7PtK2<007lF2O;MM&3kS zuI&jVt(Wf5U#5Il)66lQopVj$s5IjGh%Vm=&Bc=#9%NdyO9?xc;M{l8^{#hqGsI>d zx)g;X^6nCv13KgInbcDp>%sH_R@=Q@gYVNSHeQ^>n6H(NG5oE-wwh-_G|cNSFFPh{ z%5?oYtfew-E;C5%!q|Ws4lzK>W$!6Jx|3kof_5CUz0wpw(`a?IGg^^S2=9}0**knY zNGMI}#~gELZyQhQJ`z1kiZ8GnYGw3M60prxIYccLp0m zgu~*gb!w8afI^WXQb11BI^H7vyp-V|KtOdu-#nCP*JqX!DmT3k_b9Ujty6#V{E9^! z3s##j4p$yyRBY@ba=#`!%fui}8Y_U7BY+ot$qdfgpP4Re0n~06_D=0BNU6~h=!E`3 z1v;TFQn}W#q~A# z9e)HP7C!)7UJQ1*Vt~$N4(MFI2OA6sZ;h~uLDNbfG_9II)5;zga5r$63evGC3U|~> zP7L6XbcT<-f3;LWVSV5xkdZy(I$POGolfhVg;e8-3IUZ$Dy!^yN6sXIj=|YFS+!`)#u|jhshi%)N?Fdo-K+5zb@On0!9fwcEa6GwZw#cI9wUc)6@IJUIL2E!xBsg8kTbk7C;rl# zr90ZxXC4eVBrm84EeStG`f>>y^|f4lll&MeO6F4cvP+jPZ+Ax&S#7QjM)MVw#mHn^ z$5S^2hCV_|ciWZtz2kmXqblKx>4Wggy3&^Yz9}=#uKNj1qQx z6qxa-dJlIU1TdY`zY`dXprVucRj1;Nty+mKOii|4=~YWx<_eXg-nMm``^qmSuT!YAJA=XFPokUvC+q?^VVW50 zGUNhKD*AO@)*3*kdkdskvH(i84Nxi^a3oIwoz4!p;T@f>47ed50I77r&*&3yLt4WpXkCn7)&oOC%Nm0Rq12FLF2FV?uDA>Mbbhb!m z3h12LMX!K3U~yn5sA?91{JrWyHbjoJolJm9Rj$jkwG%~c9zzRwJa`lnY|LM&TMYX` zKh`YlA#z5kan^IQSiN%#q!6x4lYX=Lpd_OUHRe_dT%f zH7Wn#5Zu(RoZR_E&@tCE< zQbvIhN)onX8&BLXyoe^9VUAaX*JaC+Lw-rHL+)pAS`Py-=%oFEQt{!_b_AkERHMuQ z4eafjGJb_)Q;C~MjoFlCuCTqs5*y1(8j+xNh3I;&C?Y`!-Prr$DkN`-qtW**_cbio zjpnzOjrJ!v@4nWK1KChEzv362;7`m(Rl>V(z~LiTyS_Asy1Z$S4aa~R+JJ4gcZ9+l;D#T-jK>V%6G{O$`~>)fk3lx1 z1fNql$cB=@4T-?^x}TlA7cziBL8xeP=>pskss`QbC*XH_7YDL|8)^XqD1iYBAPz(T z1B!tG!&>-h)4%{~{Li^C_3^T1D$L`blM!|ZqlizWWd;!1jHS5o6C9Qwac~O! zj<1^E>4s0=Ak-elW;!VV27_XE3&XB{FA2%-sz5O?$}dxs^}k3+F7HXf1Gro<1V%=U z^5Gy7g27{+?16itj|s11Y=-T+8l=pSaZ-f?Z*ZJpAsk;8oy%FKQY-5xL#woXpR&RI zoU+<3p@flz8U4y0v*r?LMk<8A0_-jhNaB3cfwIsTJ`uYV#a`Pm^UMvQl$Q`4^9i7Y z$7v#`YwsGHKMF^+H}Sxbf7??B>gV$<;Yu8xyfsbZ%Y6)5Qe*XE#g65ScgG$Qe z^Ybbn0n9@lEsh|3%r^yUf4V#$&>EBUaZx1sLCGfOgG>tp%yHyMPm+l-s|KDf)Ulb( z6wqzWSX23rm($Q}Q&s2h`k3NQlIHNnpGmYzJXC-Sbu((Ov7W(2%8gH5u;z?_I3>l` z1EDYuMxM%1NACQ0u534@Q`2?Q5A>9CY6ZyM{Ss}@1{YPTm`~h-Naj1;3BW#~Tdu$& z2nc~xH&&!(Ye6Qtup{%(pC5Qti4&FoD{jTcx_#cFX*>d{eH zgLCVNimuZ4tz^oLM_sVElmuGj)xi~nbF%V~TE8l4@pU4*DDj4Kuluh_FS7wtGgh{{>m%N#L(>k9tu>8=-uq*yDLn5sh!ApfgiQA0j?Hc1RFvRtDqu zs2TSY$u#0NZj#nz&D|#$-lhPNNazy@%`6yS!Zz<@?W#qFV6FzW>jm;`QU59swAAPyMhe3I>Z?Y+|~ znu5;Aya=l#p%d*YL05hP0#Ww;C**$WH`T9Hwb-{1DEhV32iIZptWpy9CiDHc_B&y& za}P{|ROBG85X(b(QCGA%i$i1O65$LwIFeqDAh*VyZg)*bAgBpf*LtJnyFW5~lFlrl z@{J5EpB%J{&JTcQN(UmVaICRM^V ztEK*X9V$PnIIx&m#dMQv%;>fY3{ZvSk|-?xxC$U*zkQf01KjOI^Kxd)PXoG>XLAFr z5u3OJ;hCSpXBQQ_>lx{;>}*n4)|JI-DNksc3)Af|&;GUTUheK`=aEo)DIu#`pRAX@ zZ3|!;H#|!`y?q_a_NT-Tp0VbON`GS9&-X36dGnqG3P)6z(9&mY$31-ua!BW@kvX;t zXAD!2&honsP72HSGI)~N>z)PlNfq!fNK>k-3YbCk1k3Wj97n!QF8k}a!buYOd;Dvo zsOsDPJciiO$w>|On2ZDi7D_{{!gUVqKO1j6={_hM7J;hxEx%bnT1SY!MMSHR9&z8h zU-duFA70SWh}OI*eEO%y!v*s5T9;3+W3lULiG7SX2W2r*rDl0b-c(QiQDm>K1=svN zfDdd_RQfj1E#bkhRZQ@ccVfh1=xo=Vo?OJE4XDT|G zGU5LIM&#H&(!e6oSpaf@Gsp!R;1S-@c-R1&4jDW`bO2OB&j3=H3Lp|qkPJ3K=Q0E2 zf@6>i%D^KW2N20CXPmio@Cf~Y7i9mDNwYUUNLul@1mP z-+j$c0YY-b7J@RkZ^RLH)nb~pK2#FXv7_|>H8`%a{94%8-k-@#FrSq9er9Y=Vi#oT z7St@S4y01ck#B^ZP`~^Me}^bk#X{s1C+jh8Q?N69qQi=_`))i zkF)fH^U;WiMi!w~lB$x9kvj#kPNYEth15Mn2mK%pqx$WO4@WlPAQ1VG-L@I>$~t>- z&|(_(&wl%UtJfom%o~08J68Au2^G6mDSgN!xJ{+WP&HV}oUYq7(@$1CLaAx*8dd+J z(g^r`I9y?8f#EZ}id_gs+4#~u^3Br~nBLxaLjz3p2zUV_@PajuB8yx+yof>3qF>Yk zVD_7Xo7?QOqTZv zz|5x^QZFiBKNvW?#?EX1G5X=6C0$CXBfhTMYWZ&=33Zv7Z1)v_>Dmq{#XCAvjwD3o z?1lAm2&Dfm-j!r|G@J}fqJ=bcf)g0$Pq|(gA-~2RCUI%Msm)Sj)C&kCy=`4SLHD-C zI}+033*p8{u7l78n@WbH$)nqdu7mNTmyhAE&z|UwGlw_TtVUPsY>s5o2?3=FQ zU=jG5or15~SCEWqKr)H|$!HBABzJqg|9{jf5V&FEU>J(+su9OSAXZxi8Wx|y+;1_6 z192b@ID$A33*rEDmyHfUHo7YcbwC^lShERYZOisRO=0}1d=FXoli(cq9b08XZ^Hk9 zR1r~Mid(;1NbHi}y|WGEi4?Fqlc3!9Rj+WW%azn_>ZxeBYuP-~lD7_6_sz)+i0SY; ztJf*@b*7s$K>7DQ=ff-~K$*jNYGEvieIJ@O`}aMbjxhFXx9)sPmFNvns)4N9&PPKc zNiDoK5h^6lZ}Qxi8LS1c$KH1rZZ*>AhVj>HO<@xS&MqLtYfw(!VDbT>()TTi{e7=3 zc3PRijwWVfqb7M;fm4iMAR8K^Cf?Vmc=6=6Bm^G6;kovcv2b7--~%CW3oA&Fo9TMm z*xBeEg-MX1Tp{=zS_sM+HDgTIF=u1ER5}+F%Z?~K8tQ38Mdf*zRd=zvGr>kvR2d_a z7m|S6G>_=$r^5Z4>&$KozUTRF{kfGdn;mj-2*aNlHp&}l=I3>qQGPc%e6v-~W4m56 z{Pq`;z6F5kik4e#gMe_kFm%r8d~WmhQt@6-ggU!&(+T(-x^=xxF(GU#fJ^tx05AJJUqBynR;R-aZf)_rcJ346Adv`qty&cV(?QxIN-Ypm*#r zHdFCzM_@`|;Lqwd?+~{!cCu7Ct({3#d>Edlu-`Y7sfR>t4{Z)14oHHW!~X;`4=!ue z6=E8V?9oDDxz(tph%*bsX#DT7_xP2Q=5=&dvfOz=8t{U2%|FdQX>{L)k;tSdkl@wt zHA|F=I!Jai5GnnLJ+f z52r3oFe>4nS^}gwm>NX;TY|<=xirPr&>Gg|S)PvrPa+_&b1@KyCCTK)KB;qF?#@B! z8GV-`yA!|3b8e@4c}BIH{!)Lix>-%&&}KJeti3BJQk!jy#M5o7uxP6DtS?$nfZu56 zn9^uW@V6o@k$+0>IOEBQ2Be!Rb4_ z$nPgqr%`ia4fr2z_udsWi?(5OFa@3yk=jy+5_oyUt3ErN$ChH|)q0@SwMA1-BA$S? zs5SZ#Wqjz`!;clZItX%Tf>cBM_%9jF&+)WegZ&b+Hzf@ z_?;z;Xxko$WY}JDQ#&3bxM|?h?YUq%jNvoq*!63+0&@!a15snneI7>OGawzGp zt7pVp@4Wlgh0n}&T&clW@Mle-9yU^5({?(Z)$_EEfi6QUYsQw{DkKUp{-f}!$8@SW zL9yZnnyievj=Z*eTpS4J;gULrt!Jh@NrXm)0cndU`ROQF9J4jM~`5JYgE_<(SNq;x;lQ*;>iaMT;(d; z7b@2A*gxKdyBDXddkOLzjsH0xU8IDrttwF?g2+wTFmFeTBJ}*^l>Lg7iviV}Vj%fUYeH+`pY8ZArnjJ5$6!u;+gvC8YW zMc*vxrJ}cbYaSDQA6IkX&uMb2h4-A|+M^&26`@x-`{Ap9=SqXymh~}qpY%AayBMC4 zQ7nH+)!W%2KiYq9Zq)Q{uak?!zsO zf=K>UE8lO{Z0t0}^j;i8Eg_G+vB$IY9ZHqyLuBon8cxpHFJ>gY7Lh`^d2~<~GVx@+;P696 z1lC7@hwA>C40x%^cA$@?^C*$jre-Par<4C{4W0O??a>XLB?&fs>U9K-+L%fCe2a8 zl}8?E%{(+uLBJ#Zv)@6qD9GoNYLEC>g%CllFis`|(W(4cW~MgnFzti9CtmJXt>4yZ zU&c%wdsN#L;ATim+!T_^mEn}bM+pUbt1)&4L&5`%RQuFr-N%sj6^y1(pIQkA8b{ zTF}|%0zo2|C=xK`l7djPm~(4H7s*kXiVdmut4EDT;yW(}WHMN>X{ec87=mN+{E$w3 z`{kf#)I(PMcO&OGLzZk4A@|LBv-6*YC7kSG!(txPkZW@q%Y?t<)qFWsFGMst z;G!EJ88rmWlF@jf60Rl4CTaN9tH#nBsXby^FRXl|SfuUj$9lbFVX>_d&r0+|Wwp}u z#nWZgGqMlKob~HAq85ibWd1SJWXfmd$`2-DAYK=CiuY&k9V}q^{F*Kntet<^$AR?anF7MmUv=-G?I`Y1k@BL1crn zQd*FrRnO}Oe~U~T4`B~H|Sb%!O0{89JTF;+}E_wzlPYGTqzdBl;lmdS@( z2Il`;K8gF#q7wehBzP-NSKEWj14Ve{rt0|S2j+x-r8 zDKnhgXRWyR6`2bZfeAV~6t>8z2Yky7-V8GN8w#_m%r78B@ z#yVG4TmgaByPywD$2RJX8~mkFsrnerf7|fRUGR*SnqLP`QM1(| z`#b>r0jJG_SBLz;w-h5*N(6M08!6_x?epVL13r=kW~Cg1{bLc;lihQqcW(eZ!a{4& zO|h$he+ImXz2_274m285{yPCwSnk~w{Qn88A(;+BGY?zDWIr7%tqykS6W0DcM7`iL zmn`kQz(Vj4&iDoJuok{jZt0jPCV_1$Pu!h=6JlClq#$}2<;m5(pzpCQrjX72)p*qe zh(xHOlb1^0gBX^Bt3?Af{p?b^Vzt@dJP0PC=|_0mC6M=ENye)5#Mz{v7g4-If`9nH z&06i%3$L{|j7ZXZm)Yg3*48~vc5ZJ@oKu9LnJ{%+K?rjZM-Qp|?AR}3_RmzA^PsBI zV@jIW(ruaw!S!gza-5%QfmFRC+r9t=1R66U?c4hzl*4vG8ELl)xQOl zPOR^=)VxfENlqHYsW13LZXV?RKt{rU1mXY%?$>YHC^dL4Ni5Ji0-hI(UBlV6sC=p> zQ7hiZ-wc+~vw|H03>Hp{D$%Ut=uFFW`>#0#6WrDs%wjR}e%LIq(!0G<75eqT4xNl{ ziuGJwz60^NKN~@cRegKdmdMPnI@1s*7AWTXo{E}{Y13T(I4||k9oF)*$r^@?#fV5* z;cq$_RC8@Mnr?;iGI50>ZlZ!dkcbIO=}py+{%|n3d9(%RoDQ%%S?ngX@2vL1WWTr) zWS>i%pcBl)kBsFbCN1Qt*5~`PRw-O*ye7E?!$Au-sD2%(uedGWOY-OOofimUPnr3= zqY`z~A78!y`6_zby*J#f9j-?};GtflVlnZvNr(x>E(qGbjB(KILvEd3cju53B;-s& z?V>R_6>RM!3M6qqneJ6wILBc1!<|J~(0$DbZ`R2zV~K zS7Izx*u{(y5<6k~TcDj)?CeBESu) zU>h z*nHf!{B)6RO|lUGc}%vXYZ^`x+8nx9FM=w*xJzHLd}=|a$?Yl6^ywgWJrBXOx+t&Q zQJGWI$J86QN3X2^n%KIq;#DMA+PyB{aWwr3*%%ysoPkp}=WJXRKD4HA2zWoHu`le5 zko{~TqvK*)o*OM~5nixS4iGTL`<-iS*> zuM{3_er(gGX+I2G-skcnu^=oT(@E#{t@CeqsLb(5x_mG8DR+;SjxopaI1*B;+w#+Z zA1Wu;b}h#9f+fzxJ#)_fFZ3_rFNrMDM{E~Aq$5#oe2#xsZEKD?P>?6{(dOBnj3T++ z<}5*7$4M`NVl>5yA&MI-Iik|i@M!8f1cGg_>F$*_X;HLypKV<5GT;WYFDG$t5lIiB z&dKVr7{jI(CkefqJgqob&c-cFO7SE3q`v!>T;eQKW(REt$zCQni@yj-LjQr`**oo= zU0SNIF+E&&7mD5QLUFG%#kRVzqti{5Q(XtlI9^O_@%hYpEofR*TH2?+Uxutq!)@=V zRHi|*NY8^o9QYRrHB)r%-hd>Cgc1XBuccWOs*1QkBt#-8B7V(9-~6BnL_*HrGUid| zPiQOrw_)kVopdglV}UtMx4;Wv{Dpnyvd9kigux@^{4FhP?XR)ZQ~KsF3XO5P}K_I(5h#rUy0~4Gv1d?g-oPW+w$hW|UvnrJ zBU(G!CMoq``~=gBPYxeSUp_kWrFW%+=e4FPGF3@{Wb}PO)nd;6)K&b4N_QU18UM0s z1{3_lnm*b`!6bMni$eKps_f1IbM^GzkN0nR9r>r5UIv%g*yrO1Xi?T~GoRlySNRJz zQ0Cj|P!T;H$tHscF3LM)O+Qg{ATlqlZ2QCF6XHEgaAdX8_T6K7y_%rUQe50XO1J6@ zhIN=TlbLkRM?14jiEvz*QrV?9lohDu=!wc|?W&176k7O-zL`=UUIpUv;6x zpgqORU8@j{gY#~x8%aDYTH~tgj9zz#wNhn1#1=I6IGBViDNeqJBC%alIgDpr(AxB# zhel+(E3q3mPK|ljIcU_&-v+uM8Bo2M8WmwW!?=fvlrrq(H14uS!VyQe6RWYsxc&&# z1HGUm8w{A%uXDwTED$IG>G*kh%b`TOp9bbm?663vHQNj}#AUWQAM&npr1&{+4bG~) zoq@SeGn7K6S`uD>LfcH|JU$mi%M#Tcl~6^%4WaU+<+%@V3ud|`2XeAtdPdd6qAH}& zQ5r}U9{ejv1pkF%k6E5&r8zXeR$u_|0#Fm;++{;xfa10S?tc~0#pgROxKS5%cLW8= ze~L&l%k4|6UdCQfdln7(_4mVz3a{^VVRP+T&NqEAkyREnpgFNwD|YnIx8CDJ$DwXR zF5X0}6wiQ>k)c#d0ptcsvj1|yT|x4R5hw7jDBTgyvIYj+wyhG~8L-lHBHd)aRO>6u znT>2f3)!xq*RLNM;U;J=FKnA@*D zxD~_!V_xtxQe={PBW|yh@xj^>7|DgLeE|k=kLs8j960=CVPT(Md+IeNvluCy zGGjAfdKKNVW`esSl;{9X;A_}_SFr!-Ur{Pq0wQ4~HSfNXsGFUg1$JoZ2#5o%)EQhv z5HU6X;de8`qwf(&47Y|4lD-wXpkahWMWmQexuX#NPJZORb^q1f39uS5O<8$q>|j+? z8)#%T!{KAD)OBYjBM-dz)*dXY&fvSt(i2Em_dSGnSfc%DCf(o{*OuKY*_J^#7+~g} zk9Iz%XWDD}>gKpzX7%Y~@3Xj&824Hc(1b%eJ|D1K!i}i+7Q5y^a+PYTh%!-4stx zSB)22YolB38!?dEZ#r*R`L8S&j3wsXRuD|iyczRUmF=s5z#B+{I5ulV5&RCT6xV>y z$9$wW=CaiOEJNZZEH1^6BnWNq0av5@7=FEH<6SOb;&n}sWfQ9~)l|%GbB2bJ=?BhC znrdPt*I3q6Cb1NIN(rP{>(gD@?Z6wLT^;VNXx(eSy8=z5wA06(k<@Io^`Z`rzssyT zKDInNfWg+GRdy;(-Qf0gx^=uMWRyi@Blg^dW@Gr^QHz&JJ_CeGJ5$AX${biP-G95S z3%~oGD*<7$XF5ZglO{oPmcQh^!5fI>BbZrNy89RWGR9qj)lzHL#Qo=n26Dd}4`u4D zi~ihY!#HBj-|B+a78@mYAMb?8U@Z{Ezn{sS7l=%p6fmJI7;(IrZ@;^Of4RU572%7Y zNb<|?y=Q|kBm4gaN(r_0Sl%kKt7pOhQc_qzoVjmj8;`?mT(}C>j6dWp=s?}TpP$2Y z`4u{lWVmJo^uF2x>EU*#DZ2Jeziw6rm)GgUcs~N=PCIXD>7Z(`e9S#{-$qmP#kju5#FFb{495}eY+pU#8)Eb;>!nJ|E{4| z$W+llVANpZPkPis){8U{+2Bms0DrgaTMg;jcS}%C>^rd)?a9toNak7*VwOk0&zAVc zJcJu5?vC3}M#ey@u(-*scz-grAAZL=b9<3-lwoK3-iZw*J-P_7`&zwZ!SRlZlrLkG z<8k(n5Y#Mqy?whsDJYl1_Oh#I0>D~SUO}C{W$K<^44MEBKj3z*^|X$MCRTmWBhO&e+?Snr#Sp9ck+b?J1rRhV7gp90mhx z*3&R?Ed8?XyQ(R^SAo_xi{c_?QuJ5ilpJ8u+uY;%d~Ql_i;V2!;Dy=Ee`@261v5Hy zYgTUM`(GLs$uw5J>9g=iw`^V#E} zNExWt=L1*#+$kH{E?o1+XNMV`{2jpprPpjRJ}soPq`KuO^j5*wev0`aIZ|E8K$H<+ zVR}#F?|sFYFW$Ml%*c>YA^zy^IDe6+68uI1_p;h|54sX1Jc5+ z^erv2_k4YwEANIN9wCd4G{TrWSA$TotPb0vzD=@qN*VSrJn`V2Z2_&c;D^iU?jmYs z`3x=Q7&U#vjymgOEJJL`UDWUN6=sLVkmHawY`Nj1ie?VIC*O0}WEy>98MpXyRPY`C z-PLB1Ar;;$c$~SnkHr;LfN<*{o_`WJV>27+bV8B1&UP!Mp4DLlMAjxzsQ61_L}Ql? zY#Z`_A-vUb?(g1TPbK$!LOfUd7CDz|ylxr$SsCKVldR>P9F|4`i!P}XHggpo$Fx2w z(&Vu)5#4ARtM7?tRg-1rPk$*2L)!O>eaKe^t{ZPpG^6u6u>6PVJR0>)$|qh27B`W= zMmV8^!a*Xr4rSN-?geC%ztq>96H`4!Sdou&yJ0%vef@1_Wp@XqlC@${zyJkT9@73r z727SgA0^lbm){VeYPU>{SYP|92SlrO(re@=LB9S^w#k4R2D|t16o2_E3oqWjj&y`R z7ScNvN>+x`hDfd19M&QMqN@mpB6oj}&uWv&IZ4UkNA`mY^Gpmd#U`zux3^IxZ#%T@!u_kXuYx? zp+{}0P$<=p_Zx1MyVcXv9#1w25t93TvJ5)mIUS{r7sx6<+gki%5Ea1>xv^#@y?8>ygz6gW@DwVcDHX= z`aJeE7#w3<=ccnw7V=^vV|}EtBPIJMq5*d4e&Y23*c0k_>M#L|*JK5*c()_*BL>Qa zE}Z!FZhuYPiNQRAQ*RHa#Qs9HEE4N_3tt%0lUlHj^^y(?jVzQCDq|%@f~+1a#^A3q z63b{Eo29U6Q1H;Vy02#`b0%c?iU7u0A-GuIKMY-Y2j-yu5h&<)eq$`XyG29q3*#Iv zk$dc}MeKF51?xIm%Hua}={jg^^Cl^nlq%4?!G8r4th$0W(`O7@mV~`L*IIC-ZXOy) z!_`WUzk=XAf9_qr7#al~K9Rg#P}1}CD+THMAk1+Qq*I*=W2n%{Jb zr+=na0lWX8Vv`baDyG7`Ji zJg}Pe!B7K{J*-kXQ+`6#v?nvyqoE=q*ltX*h@U7##;n7_*cnnZ15}g$V!L5?@HUSJ z7!h{@zxJzQ67&jvcRKOMKt=0YyFqr?2%WkB)D^&Nuw-AF(_mf68s!egPASWULTvBD z!2|-O|F9ABXC6b^*MfQ7NG7)dcRMGctJBphv3|O%S+db F7ZUJjI&=U4 delta 56360 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

ys=m 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 diff --git a/functions.c b/functions.c index 850d370..5b5a996 100644 --- a/functions.c +++ b/functions.c @@ -50,7 +50,7 @@ void FUNCTION_Init(void) { g_current_code_type = g_selected_code_type; if (g_css_scan_mode == CSS_SCAN_MODE_OFF) - g_current_code_type = (g_rx_vfo->am_mode > 0) ? CODE_TYPE_NONE : g_rx_vfo->p_rx->code_type; + g_current_code_type = (g_rx_vfo->channel.am_mode > 0) ? CODE_TYPE_NONE : g_rx_vfo->p_rx->code_type; } else g_current_code_type = CODE_TYPE_CONTINUOUS_TONE; @@ -233,7 +233,7 @@ void FUNCTION_Select(function_type_t Function) } #endif - if (g_current_vfo->scrambling_type == 0 || !g_eeprom.config.setting.enable_scrambler) + if (g_current_vfo->channel.scrambler == 0 || !g_eeprom.config.setting.enable_scrambler) BK4819_DisableScramble(); RADIO_enableTX(false); @@ -283,7 +283,7 @@ void FUNCTION_Select(function_type_t Function) } else #endif - if (g_current_vfo->dtmf_ptt_id_tx_mode == PTT_ID_APOLLO) + if (g_current_vfo->channel.dtmf_ptt_id_tx_mode == PTT_ID_APOLLO) { BK4819_PlayTone(APOLLO_TONE1_HZ, APOLLO_TONE_MS, 0); } @@ -301,9 +301,9 @@ void FUNCTION_Select(function_type_t Function) (1u << 1) | // enable TX DSP (0u << 0)); // disable RX DSP */ - if (g_current_vfo->scrambling_type > 0 && g_eeprom.config.setting.enable_scrambler) + if (g_current_vfo->channel.scrambler > 0 && g_eeprom.config.setting.enable_scrambler) { - BK4819_EnableScramble(g_current_vfo->scrambling_type - 1); + BK4819_EnableScramble(g_current_vfo->channel.scrambler - 1); } break; diff --git a/helper/boot.c b/helper/boot.c index afd2be2..4f60ba5 100644 --- a/helper/boot.c +++ b/helper/boot.c @@ -80,8 +80,8 @@ void BOOT_ProcessMode(boot_mode_t Mode) RADIO_InitInfo(g_rx_vfo, FREQ_CHANNEL_LAST - 1, g_aircopy_freq); - g_rx_vfo->channel_bandwidth = BANDWIDTH_WIDE; - g_rx_vfo->output_power = OUTPUT_POWER_LOW; + g_rx_vfo->channel_bandwidth = BANDWIDTH_WIDE; + g_rx_vfo->output_power = OUTPUT_POWER_LOW; RADIO_ConfigureSquelchAndOutputPower(g_rx_vfo); diff --git a/main.c b/main.c index 213f280..11caa94 100644 --- a/main.c +++ b/main.c @@ -190,7 +190,7 @@ void Main(void) g_unhide_hidden = (BootMode == BOOT_MODE_UNHIDE_HIDDEN); // flag to say include the hidden menu items // load the entire EEPROM contents into memory - GPIO_SetBit(&GPIOB->DATA, GPIOB_PIN_BACKLIGHT); // backlight on +// GPIO_SetBit(&GPIOB->DATA, GPIOB_PIN_BACKLIGHT); // backlight on MAIN_DisplayReadingEEPROM(); SETTINGS_read_eeprom(); MAIN_DisplayClear(); @@ -227,9 +227,7 @@ void Main(void) RADIO_configure_channel(0, VFO_CONFIGURE_RELOAD); RADIO_configure_channel(1, VFO_CONFIGURE_RELOAD); - RADIO_select_vfos(); - RADIO_setup_registers(true); for (i = 0; i < ARRAY_SIZE(g_battery_voltages); i++) diff --git a/radio.c b/radio.c index 5d5f15c..8d4864b 100644 --- a/radio.c +++ b/radio.c @@ -30,6 +30,9 @@ #include "driver/eeprom.h" #include "driver/gpio.h" #include "driver/system.h" +#if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG) + #include "driver/uart.h" +#endif #include "frequencies.h" #include "functions.h" #include "helper/battery.h" @@ -125,24 +128,24 @@ void RADIO_InitInfo(vfo_info_t *p_vfo, const uint8_t ChannelSave, const uint32_t memset(p_vfo, 0, sizeof(*p_vfo)); - p_vfo->band = FREQUENCY_GetBand(Frequency); - p_vfo->scanlist_1_participation = 1; - p_vfo->scanlist_2_participation = 1; - p_vfo->step_setting = STEP_12_5kHz; - p_vfo->step_freq = STEP_FREQ_TABLE[p_vfo->step_setting]; - p_vfo->channel_save = ChannelSave; - p_vfo->frequency_reverse = false; - p_vfo->output_power = OUTPUT_POWER_LOW; - p_vfo->freq_config_rx.frequency = Frequency; - p_vfo->freq_config_tx.frequency = Frequency; - p_vfo->p_rx = &p_vfo->freq_config_rx; - p_vfo->p_tx = &p_vfo->freq_config_tx; - p_vfo->compand = 0; // off - p_vfo->squelch_level = 0; // use main squelch - p_vfo->freq_in_channel = 0xff; + p_vfo->channel_attributes.band = FREQUENCY_GetBand(Frequency); + p_vfo->channel_attributes.scanlist1 = 1; + p_vfo->channel_attributes.scanlist2 = 1; + p_vfo->channel.step_setting = STEP_12_5kHz; + p_vfo->step_freq = STEP_FREQ_TABLE[p_vfo->channel.step_setting]; + p_vfo->channel_save = ChannelSave; + p_vfo->channel.frequency_reverse = false; + p_vfo->channel.tx_power = OUTPUT_POWER_LOW; + p_vfo->freq_config_rx.frequency = Frequency; + p_vfo->freq_config_tx.frequency = Frequency; + p_vfo->p_rx = &p_vfo->freq_config_rx; + p_vfo->p_tx = &p_vfo->freq_config_tx; + p_vfo->channel.compand = 0; // off + p_vfo->channel.squelch_level = 0; // use main squelch + p_vfo->freq_in_channel = 0xff; if (ChannelSave == (FREQ_CHANNEL_FIRST + BAND2_108MHz)) - p_vfo->am_mode = 1; + p_vfo->channel.am_mode = 1; // AM RADIO_ConfigureSquelchAndOutputPower(p_vfo); } @@ -150,6 +153,7 @@ void RADIO_InitInfo(vfo_info_t *p_vfo, const uint8_t ChannelSave, const uint32_t void RADIO_configure_channel(const unsigned int VFO, const unsigned int configure) { unsigned int channel; + unsigned int chan; t_channel_attrib attributes; // uint16_t base; uint32_t frequency; @@ -185,7 +189,7 @@ void RADIO_configure_channel(const unsigned int VFO, const unsigned int configur if (channel <= USER_CHANNEL_LAST) { channel = RADIO_FindNextChannel(channel, SCAN_STATE_DIR_FORWARD, false, VFO); - if (channel == 0xFF) + if (!IS_VALID_CHANNEL(channel)) { channel = g_eeprom.config.setting.indices.vfo[VFO].frequency; g_eeprom.config.setting.indices.vfo[VFO].screen = channel; @@ -202,9 +206,15 @@ void RADIO_configure_channel(const unsigned int VFO, const unsigned int configur channel = FREQ_CHANNEL_LAST - 1; } + chan = CHANNEL_NUM(channel, VFO); + attributes = g_user_channel_attributes[channel]; - if (attributes.band > BAND7_470MHz) + #if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG) + UART_printf("config chan 1 %u %u %u %u %u\r\n", channel, chan, attributes.band, attributes.scanlist1, attributes.scanlist2); + #endif + + if (attributes.attributes == 0xff) { // invalid/unused channel unsigned int index; @@ -226,22 +236,17 @@ void RADIO_configure_channel(const unsigned int VFO, const unsigned int configur if (channel <= USER_CHANNEL_LAST) { // USER channel - p_vfo->band = attributes.band; - p_vfo->scanlist_2_participation = attributes.scanlist2; - p_vfo->scanlist_1_participation = attributes.scanlist1; + p_vfo->channel_attributes = attributes; } else if (IS_FREQ_CHANNEL(channel)) { // VFO channel - attributes.band = channel - FREQ_CHANNEL_FIRST; // shouldn't this be "Band / 2" ? .. two VFO's per band TODO: - g_vfo_info[VFO].band = attributes.band; + attributes.band = channel - FREQ_CHANNEL_FIRST; + p_vfo->channel_attributes = attributes; #if 0 - p_vfo->scanlist_2_participation = 1; - p_vfo->scanlist_1_participation = 1; - #else - // allowing the vfo's to be included in the scanning - p_vfo->scanlist_2_participation = attributes.scanlist2; - p_vfo->scanlist_1_participation = attributes.scanlist1; + // don't allow the VFO's to change their scanlist bits + p_vfo->channel_attributes.scanlist2 = 1; + p_vfo->channel_attributes.scanlist1 = 1; #endif } @@ -254,72 +259,32 @@ void RADIO_configure_channel(const unsigned int VFO, const unsigned int configur if (configure == VFO_CONFIGURE_RELOAD || IS_FREQ_CHANNEL(channel)) { - const unsigned int chan = CHANNEL_NUM(channel, VFO); - t_channel m_channel; - // EEPROM_ReadBuffer(Base, &m_channel, sizeof(t_channel)); - memcpy(&m_channel, &g_eeprom.config.channel[chan], sizeof(t_channel)); - p_vfo->freq_config_rx.frequency = m_channel.frequency; +// EEPROM_ReadBuffer(Base, p_vfo->channel, sizeof(t_channel)); + memcpy(&p_vfo->channel, &g_eeprom.config.channel[chan], sizeof(t_channel)); - p_vfo->tx_offset_freq = (m_channel.tx_offset < MAX_TX_OFFSET) ? m_channel.tx_offset : 0; - p_vfo->tx_offset_freq_dir = (m_channel.tx_offset_dir < TX_OFFSET_FREQ_DIR_LAST) ? m_channel.tx_offset_dir : TX_OFFSET_FREQ_DIR_OFF; + p_vfo->step_freq = STEP_FREQ_TABLE[p_vfo->channel.step_setting]; - p_vfo->am_mode = m_channel.am_mode; + p_vfo->channel_attributes = g_eeprom.config.channel_attributes[channel]; - p_vfo->step_setting = (m_channel.step_setting < ARRAY_SIZE(STEP_FREQ_TABLE)) ? m_channel.step_setting : STEP_12_5kHz; - p_vfo->step_freq = STEP_FREQ_TABLE[p_vfo->step_setting]; + p_vfo->freq_config_rx.frequency = p_vfo->channel.frequency; - p_vfo->scrambling_type = (m_channel.scrambler < ARRAY_SIZE(g_sub_menu_scrambler)) ? m_channel.scrambler : 0; + p_vfo->freq_config_rx.code_type = p_vfo->channel.rx_ctcss_cdcss_type; + p_vfo->freq_config_rx.code = p_vfo->channel.rx_ctcss_cdcss_code; - p_vfo->freq_config_rx.code_type = m_channel.rx_ctcss_cdcss_type; - switch (m_channel.rx_ctcss_cdcss_type) - { - default: - case CODE_TYPE_NONE: - p_vfo->freq_config_rx.code_type = CODE_TYPE_NONE; - p_vfo->freq_config_rx.code = 0; - break; - case CODE_TYPE_CONTINUOUS_TONE: - p_vfo->freq_config_rx.code = (m_channel.rx_ctcss_cdcss_code < ARRAY_SIZE(CTCSS_TONE_LIST)) ? m_channel.rx_ctcss_cdcss_code : 0; - break; - case CODE_TYPE_DIGITAL: - case CODE_TYPE_REVERSE_DIGITAL: - p_vfo->freq_config_rx.code = (m_channel.rx_ctcss_cdcss_code < ARRAY_SIZE(DCS_CODE_LIST)) ? m_channel.rx_ctcss_cdcss_code : 0; - break; - } + p_vfo->freq_config_tx.code_type = p_vfo->channel.tx_ctcss_cdcss_type; + p_vfo->freq_config_tx.code = p_vfo->channel.tx_ctcss_cdcss_code; - p_vfo->freq_config_tx.code_type = m_channel.tx_ctcss_cdcss_type; - switch (m_channel.tx_ctcss_cdcss_type) - { - default: - case CODE_TYPE_NONE: - p_vfo->freq_config_tx.code_type = CODE_TYPE_NONE; - p_vfo->freq_config_tx.code = 0; - break; - case CODE_TYPE_CONTINUOUS_TONE: - p_vfo->freq_config_tx.code = (m_channel.tx_ctcss_cdcss_code < ARRAY_SIZE(CTCSS_TONE_LIST)) ? m_channel.tx_ctcss_cdcss_code : 0; - break; - case CODE_TYPE_DIGITAL: - case CODE_TYPE_REVERSE_DIGITAL: - p_vfo->freq_config_tx.code = (m_channel.tx_ctcss_cdcss_code < ARRAY_SIZE(DCS_CODE_LIST)) ? m_channel.tx_ctcss_cdcss_code : 0; - break; - } - - #ifdef ENABLE_MDC1200 - p_vfo->mdc1200_mode = m_channel.mdc1200_mode; + #if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG) + UART_printf("config chan 2 %u %u %u %u %u %uHz\r\n", channel, chan, p_vfo->channel_attributes.band, p_vfo->channel_attributes.scanlist1, p_vfo->channel_attributes.scanlist2, p_vfo->channel.frequency * 10); + #endif + } + else + { + #if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG) + UART_printf("config chan 3 %u %u %u %u %uHz\r\n", channel, p_vfo->channel_attributes.band, p_vfo->channel_attributes.scanlist1, p_vfo->channel_attributes.scanlist2, p_vfo->channel.frequency * 10); #endif - - p_vfo->frequency_reverse = m_channel.frequency_reverse ? true : false; - p_vfo->channel_bandwidth = m_channel.channel_bandwidth ? true : false; - p_vfo->output_power = m_channel.tx_power; - p_vfo->busy_channel_lock = m_channel.busy_channel_lock ? true : false; - p_vfo->compand = m_channel.compand; - - p_vfo->dtmf_decoding_enable = m_channel.dtmf_decoding_enable ? true : false; - p_vfo->dtmf_ptt_id_tx_mode = m_channel.dtmf_ptt_id_tx_mode; - - p_vfo->squelch_level = (m_channel.squelch_level < 10) ? m_channel.squelch_level : 0; } frequency = p_vfo->freq_config_rx.frequency; @@ -337,14 +302,14 @@ void RADIO_configure_channel(const unsigned int VFO, const unsigned int configur { // 350~400Mhz not allowed // hop onto the next band up - frequency = 43350000; - p_vfo->freq_config_rx.frequency = frequency; - p_vfo->freq_config_tx.frequency = frequency; - attributes.band = FREQUENCY_GetBand(frequency); - p_vfo->band = attributes.band; - p_vfo->frequency_reverse = 0; - p_vfo->tx_offset_freq_dir = TX_OFFSET_FREQ_DIR_OFF; - p_vfo->tx_offset_freq = 0; + frequency = 43350000; + p_vfo->freq_config_rx.frequency = frequency; + p_vfo->freq_config_tx.frequency = frequency; + attributes.band = FREQUENCY_GetBand(frequency); + p_vfo->channel_attributes.band = attributes.band; + p_vfo->channel.frequency_reverse = 0; + p_vfo->channel.tx_offset_dir = TX_OFFSET_FREQ_DIR_OFF; + p_vfo->channel.tx_offset = 0; // TODO: also update other settings such as step size @@ -356,36 +321,36 @@ void RADIO_configure_channel(const unsigned int VFO, const unsigned int configur if (frequency >= AIR_BAND.lower && frequency < AIR_BAND.upper) { // air band - p_vfo->tx_offset_freq_dir = TX_OFFSET_FREQ_DIR_OFF; - p_vfo->tx_offset_freq = 0; + p_vfo->channel.tx_offset_dir = TX_OFFSET_FREQ_DIR_OFF; + p_vfo->channel.tx_offset = 0; } else if (channel > USER_CHANNEL_LAST) { - p_vfo->tx_offset_freq = FREQUENCY_floor_to_step(p_vfo->tx_offset_freq + (p_vfo->step_freq / 2), p_vfo->step_freq, 0, p_vfo->tx_offset_freq + p_vfo->step_freq); + p_vfo->channel.tx_offset = FREQUENCY_floor_to_step(p_vfo->channel.tx_offset + (p_vfo->step_freq / 2), p_vfo->step_freq, 0, p_vfo->channel.tx_offset + p_vfo->step_freq); } RADIO_ApplyOffset(p_vfo, true); // channel name - memset(p_vfo->name, 0, sizeof(p_vfo->name)); + memset(p_vfo->channel_name, 0, sizeof(p_vfo->channel_name)); if (channel <= USER_CHANNEL_LAST) -// EEPROM_ReadBuffer(0x0F50 + (Channel * 16), p_vfo->name, 10); // only 10 bytes used - memcpy(p_vfo->name, &g_eeprom.config.channel_name[channel].name, sizeof(g_eeprom.config.channel_name[channel].name)); +// EEPROM_ReadBuffer(0x0F50 + (channel * 16), p_vfo->channel_name, 10); // only 10 bytes used + memcpy(p_vfo->channel_name, &g_eeprom.config.channel_name[channel].name, sizeof(g_eeprom.config.channel_name[channel].name)); - if (p_vfo->am_mode > 0) + if (p_vfo->channel.am_mode > 0) { // freq/chan is in AM mode // disable stuff, even though it can all still be used with AM ??? - p_vfo->scrambling_type = 0; -// p_vfo->dtmf_decoding_enable = false; - p_vfo->freq_config_rx.code_type = CODE_TYPE_NONE; - p_vfo->freq_config_tx.code_type = CODE_TYPE_NONE; + p_vfo->channel.scrambler = 0; +// p_vfo->channel.dtmf_decoding_enable = 0; + p_vfo->freq_config_rx.code_type = CODE_TYPE_NONE; + p_vfo->freq_config_tx.code_type = CODE_TYPE_NONE; } RADIO_ConfigureSquelchAndOutputPower(p_vfo); #ifdef ENABLE_AM_FIX - if (p_vfo->am_mode > 0 && g_eeprom.config.setting.am_fix) + if (p_vfo->channel.am_mode > 0 && g_eeprom.config.setting.am_fix) { AM_fix_reset(VFO); AM_fix_10ms(VFO); @@ -454,7 +419,7 @@ void RADIO_ConfigureSquelchAndOutputPower(vfo_info_t *p_vfo) // band = FREQUENCY_GetBand(p_vfo->p_rx->frequency); // base = (Band < BAND4_174MHz) ? 0x1E60 : 0x1E00; - squelch_level = (p_vfo->squelch_level > 0) ? p_vfo->squelch_level : g_eeprom.config.setting.squelch_level; + squelch_level = (p_vfo->channel.squelch_level > 0) ? p_vfo->channel.squelch_level : g_eeprom.config.setting.squelch_level; // note that 'noise' and 'glitch' values are inverted compared to 'rssi' values @@ -583,22 +548,22 @@ void RADIO_ConfigureSquelchAndOutputPower(vfo_info_t *p_vfo) // 1F20 5A 5A 5A 64 64 64 8F 91 8A FF FF FF FF FF FF FF .. 400 MHz // 1F30 32 32 32 64 64 64 8C 8C 8C FF FF FF FF FF FF FF .. 470 MHz - uint8_t tx_power[3]; + uint8_t tx_power[3]; const unsigned int band = (unsigned int)FREQUENCY_GetBand(p_vfo->p_tx->frequency); // EEPROM_ReadBuffer(0x1ED0 + (band * 16) + (p_vfo->output_power * 3), tx_power, 3); - memcpy(&tx_power, &g_eeprom.calib.tx_band_power[band].level[p_vfo->output_power], 3); + memcpy(&tx_power, &g_eeprom.calib.tx_band_power[band].level[p_vfo->channel.tx_power], 3); #ifdef ENABLE_REDUCE_LOW_MID_TX_POWER // make low and mid even lower - if (p_vfo->output_power == OUTPUT_POWER_LOW) + if (p_vfo->channel.tx_power == OUTPUT_POWER_LOW) { tx_power[0] /= 5; //tx_power[0] /= 8; tx_power[1] /= 5; //tx_power[1] /= 8; tx_power[2] /= 5; //tx_power[2] /= 8; get more low power } else - if (p_vfo->output_power == OUTPUT_POWER_MID) + if (p_vfo->channel.tx_power == OUTPUT_POWER_MID) { tx_power[0] /= 3; //tx_power[0] /= 5; tx_power[1] /= 3; //tx_power[1] /= 5; @@ -623,15 +588,15 @@ void RADIO_ApplyOffset(vfo_info_t *p_vfo, const bool set_pees) { uint32_t Frequency = p_vfo->freq_config_rx.frequency; - switch (p_vfo->tx_offset_freq_dir) + switch (p_vfo->channel.tx_offset_dir) { case TX_OFFSET_FREQ_DIR_OFF: break; case TX_OFFSET_FREQ_DIR_ADD: - Frequency += p_vfo->tx_offset_freq; + Frequency += p_vfo->channel.tx_offset; break; case TX_OFFSET_FREQ_DIR_SUB: - Frequency -= p_vfo->tx_offset_freq; + Frequency -= p_vfo->channel.tx_offset; break; } @@ -645,7 +610,7 @@ void RADIO_ApplyOffset(vfo_info_t *p_vfo, const bool set_pees) if (set_pees) { - if (!p_vfo->frequency_reverse) + if (!p_vfo->channel.frequency_reverse) { p_vfo->p_rx = &p_vfo->freq_config_rx; p_vfo->p_tx = &p_vfo->freq_config_tx; @@ -676,7 +641,7 @@ void RADIO_select_vfos(void) void RADIO_setup_registers(bool switch_to_function_foreground) { - BK4819_filter_bandwidth_t Bandwidth = g_rx_vfo->channel_bandwidth; + BK4819_filter_bandwidth_t Bandwidth = g_rx_vfo->channel.channel_bandwidth; uint16_t interrupt_mask; uint32_t Frequency; @@ -697,10 +662,10 @@ void RADIO_setup_registers(bool switch_to_function_foreground) case BK4819_FILTER_BW_NARROW: #ifdef ENABLE_AM_FIX #if 0 -// BK4819_SetFilterBandwidth(Bandwidth, g_rx_vfo->am_mode > 0 && g_eeprom.config.setting.am_fix); +// BK4819_SetFilterBandwidth(Bandwidth, g_rx_vfo->channel.am_mode > 0 && g_eeprom.config.setting.am_fix); BK4819_SetFilterBandwidth(Bandwidth, true); #else - if (g_rx_vfo->am_mode > 1) + if (g_rx_vfo->channel.am_mode > 1) BK4819_SetFilterBandwidth(BK4819_FILTER_BW_NARROWER, false); else BK4819_SetFilterBandwidth(Bandwidth, true); @@ -758,7 +723,7 @@ void RADIO_setup_registers(bool switch_to_function_foreground) BK4819_set_GPIO_pin(BK4819_GPIO0_PIN28_RX_ENABLE, true); // AF RX Gain and DAC -// if (g_rx_vfo->am_mode > 0) +// if (g_rx_vfo->channel.am_mode > 0) // { // BK4819_WriteRegister(0x48, 0xB3A8); // 1011 0011 1010 1000 // } @@ -774,19 +739,19 @@ void RADIO_setup_registers(bool switch_to_function_foreground) #ifdef ENABLE_VOICE #ifdef MUTE_AUDIO_FOR_VOICE if (g_voice_write_index == 0) - AUDIO_set_mod_mode(g_rx_vfo->am_mode); + AUDIO_set_mod_mode(g_rx_vfo->channel.am_mode); #else - AUDIO_set_mod_mode(g_rx_vfo->am_mode); + AUDIO_set_mod_mode(g_rx_vfo->channel.am_mode); #endif #else - AUDIO_set_mod_mode(g_rx_vfo->am_mode); + AUDIO_set_mod_mode(g_rx_vfo->channel.am_mode); #endif interrupt_mask = BK4819_REG_3F_SQUELCH_FOUND | BK4819_REG_3F_SQUELCH_LOST; if (IS_NOT_NOAA_CHANNEL(g_rx_vfo->channel_save)) { - if (g_rx_vfo->am_mode == 0) + if (g_rx_vfo->channel.am_mode == 0) { // FM uint8_t code_type = g_selected_code_type; uint8_t code = g_selected_code; @@ -835,8 +800,8 @@ void RADIO_setup_registers(bool switch_to_function_foreground) break; } - if (g_rx_vfo->scrambling_type > 0 && g_eeprom.config.setting.enable_scrambler) - BK4819_EnableScramble(g_rx_vfo->scrambling_type - 1); + if (g_rx_vfo->channel.scrambler > 0 && g_eeprom.config.setting.enable_scrambler) + BK4819_EnableScramble(g_rx_vfo->channel.scrambler - 1); else BK4819_DisableScramble(); } @@ -857,7 +822,7 @@ void RADIO_setup_registers(bool switch_to_function_foreground) #endif g_eeprom.config.setting.vox_enabled && IS_NOT_NOAA_CHANNEL(g_current_vfo->channel_save) && - g_current_vfo->am_mode == 0) + g_current_vfo->channel.am_mode == 0) { RADIO_enable_vox(g_eeprom.config.setting.vox_level); interrupt_mask |= BK4819_REG_3F_VOX_FOUND | BK4819_REG_3F_VOX_LOST; @@ -867,7 +832,7 @@ void RADIO_setup_registers(bool switch_to_function_foreground) BK4819_DisableVox(); // RX expander - BK4819_SetCompander((g_rx_vfo->am_mode == 0 && g_rx_vfo->compand >= 2) ? g_rx_vfo->compand : 0); + BK4819_SetCompander((g_rx_vfo->channel.am_mode == 0 && g_rx_vfo->channel.compand >= 2) ? g_rx_vfo->channel.compand : 0); BK4819_EnableDTMF(); interrupt_mask |= BK4819_REG_3F_DTMF_5TONE_FOUND; @@ -936,7 +901,7 @@ void RADIO_setup_registers(bool switch_to_function_foreground) void RADIO_enableTX(const bool fsk_tx) { - BK4819_filter_bandwidth_t Bandwidth = g_current_vfo->channel_bandwidth; + BK4819_filter_bandwidth_t Bandwidth = g_current_vfo->channel.channel_bandwidth; GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER); @@ -953,10 +918,10 @@ void RADIO_enableTX(const bool fsk_tx) case BK4819_FILTER_BW_NARROW: #ifdef ENABLE_AM_FIX #if 0 -// BK4819_SetFilterBandwidth(Bandwidth, g_current_vfo->am_mode > 0 && g_eeprom.config.setting.am_fix); +// BK4819_SetFilterBandwidth(Bandwidth, g_current_vfo->channel.am_mode > 0 && g_eeprom.config.setting.am_fix); BK4819_SetFilterBandwidth(Bandwidth, true); #else - if (g_current_vfo->am_mode > 1) + if (g_current_vfo->channel.am_mode > 1) BK4819_SetFilterBandwidth(BK4819_FILTER_BW_NARROWER, false); else BK4819_SetFilterBandwidth(Bandwidth, true); @@ -971,7 +936,7 @@ void RADIO_enableTX(const bool fsk_tx) // so MAKE SURE that DTMF is disabled - until needed BK4819_DisableDTMF(); - BK4819_SetCompander((!fsk_tx && g_rx_vfo->am_mode == 0 && (g_rx_vfo->compand == 1 || g_rx_vfo->compand >= 3)) ? g_rx_vfo->compand : 0); + BK4819_SetCompander((!fsk_tx && g_rx_vfo->channel.am_mode == 0 && (g_rx_vfo->channel.compand == 1 || g_rx_vfo->channel.compand >= 3)) ? g_rx_vfo->channel.compand : 0); BK4819_set_rf_frequency(g_current_vfo->p_tx->frequency, false); BK4819_set_rf_filter_path(g_current_vfo->p_tx->frequency); @@ -1069,7 +1034,7 @@ void RADIO_PrepareTX(void) RADIO_SelectCurrentVfo(); #ifndef ENABLE_TX_WHEN_AM - if (g_current_vfo->am_mode > 0) + if (g_current_vfo->channel.am_mode > 0) { // not allowed to TX if not in FM mode State = VFO_STATE_TX_DISABLE; } @@ -1082,7 +1047,7 @@ void RADIO_PrepareTX(void) else if (FREQUENCY_tx_freq_check(g_current_vfo->p_tx->frequency) == 0) { // TX frequency is allowed - if (g_current_vfo->busy_channel_lock && g_current_function == FUNCTION_RECEIVE) + if (g_current_vfo->channel.busy_channel_lock && g_current_function == FUNCTION_RECEIVE) State = VFO_STATE_BUSY; // busy RX'ing a station else if (g_battery_display_level == 0) @@ -1194,7 +1159,7 @@ void RADIO_tx_eot(void) #endif if (g_dtmf_call_state == DTMF_CALL_STATE_NONE && - (g_current_vfo->dtmf_ptt_id_tx_mode == PTT_ID_TX_DOWN || g_current_vfo->dtmf_ptt_id_tx_mode == PTT_ID_BOTH)) + (g_current_vfo->channel.dtmf_ptt_id_tx_mode == PTT_ID_TX_DOWN || g_current_vfo->channel.dtmf_ptt_id_tx_mode == PTT_ID_BOTH)) { // end-of-tx if (g_eeprom.config.setting.dtmf.side_tone) { @@ -1222,13 +1187,13 @@ void RADIO_tx_eot(void) else #ifdef ENABLE_MDC1200 // if (g_eeprom.config.setting.roger_mode == ROGER_MODE_MDC) - if (g_current_vfo->mdc1200_mode == MDC1200_MODE_EOT || g_current_vfo->mdc1200_mode == MDC1200_MODE_BOTH) + if (g_current_vfo->channel.mdc1200_mode == MDC1200_MODE_EOT || g_current_vfo->channel.mdc1200_mode == MDC1200_MODE_BOTH) { BK4819_send_MDC1200(MDC1200_OP_CODE_POST_ID, 0x00, g_eeprom.config.setting.mdc1200_id); } else #endif - if (g_current_vfo->dtmf_ptt_id_tx_mode == PTT_ID_APOLLO) + if (g_current_vfo->channel.dtmf_ptt_id_tx_mode == PTT_ID_APOLLO) { BK4819_PlayTone(APOLLO_TONE2_HZ, APOLLO_TONE_MS, 28); } diff --git a/radio.h b/radio.h index ab38f4e..2c42d2c 100644 --- a/radio.h +++ b/radio.h @@ -20,111 +20,8 @@ #include #include -#include "misc.h" -#include "dcs.h" #include "frequencies.h" - -/* -enum { - RADIO_CHANNEL_UP = 0x01u, - RADIO_CHANNEL_DOWN = 0xFFu, -}; -*/ -enum { - BANDWIDTH_WIDE = 0, - BANDWIDTH_NARROW -}; - -enum ptt_id_e { - PTT_ID_OFF = 0, // OFF - PTT_ID_TX_UP, // BEGIN OF TX - PTT_ID_TX_DOWN, // END OF TX - PTT_ID_BOTH, // BOTH - PTT_ID_APOLLO // Apolo quindar tones -}; -typedef enum ptt_id_e ptt_id_t; - -enum mdc1200_mode_e { - MDC1200_MODE_OFF = 0, // OFF - MDC1200_MODE_BOT, // BEGIN OF TX - MDC1200_MODE_EOT, // END OF TX - MDC1200_MODE_BOTH // BOTH -}; -typedef enum mdc1200_mode_e mdc1200_mode_t; - -enum vfo_state_e -{ - VFO_STATE_NORMAL = 0, - VFO_STATE_BUSY, - VFO_STATE_BAT_LOW, - VFO_STATE_TX_DISABLE, - VFO_STATE_TIMEOUT, - VFO_STATE_ALARM, - VFO_STATE_VOLTAGE_HIGH -}; -typedef enum vfo_state_e vfo_state_t; - -typedef struct -{ - uint32_t frequency; - dcs_code_type_t code_type; - uint8_t code; - uint8_t padding[2]; -} freq_config_t; - -typedef struct vfo_info_t -{ - freq_config_t freq_config_rx; - freq_config_t freq_config_tx; - freq_config_t *p_rx; - freq_config_t *p_tx; - - uint32_t tx_offset_freq; - uint16_t step_freq; - - uint8_t channel_save; - - uint8_t tx_offset_freq_dir; - - uint8_t squelch_level; // per channel squelch level - - uint8_t squelch_open_rssi_thresh; - uint8_t squelch_open_noise_thresh; - uint8_t squelch_close_glitch_thresh; - uint8_t squelch_close_rssi_thresh; - uint8_t squelch_close_noise_thresh; - uint8_t squelch_open_glitch_thresh; - - step_setting_t step_setting; - uint8_t output_power; - uint8_t txp_calculated_setting; - bool frequency_reverse; - - uint8_t scrambling_type; - uint8_t channel_bandwidth; - - uint8_t scanlist_1_participation; - uint8_t scanlist_2_participation; - - uint8_t band; - - uint8_t dtmf_decoding_enable; - ptt_id_t dtmf_ptt_id_tx_mode; - - #ifdef ENABLE_MDC1200 - mdc1200_mode_t mdc1200_mode; - #endif - - uint8_t busy_channel_lock; - - uint8_t am_mode; - - uint8_t compand; - - uint8_t freq_in_channel; // channel number if the VFO's frequency is found stored in a channel - - char name[16]; -} vfo_info_t; +#include "settings.h" extern vfo_info_t g_vfo_info[2]; diff --git a/settings.c b/settings.c index 82acf31..672abb4 100644 --- a/settings.c +++ b/settings.c @@ -25,6 +25,7 @@ #include "driver/uart.h" #endif #include "misc.h" +#include "radio.h" #include "settings.h" #include "ui/menu.h" @@ -41,8 +42,8 @@ static const uint32_t DEFAULT_FREQUENCY_TABLE[] = }; t_eeprom g_eeprom; -t_channel_attrib g_user_channel_attributes[FREQ_CHANNEL_LAST + 1]; +t_channel_attrib g_user_channel_attributes[FREQ_CHANNEL_LAST + 1]; void SETTINGS_read_eeprom(void) { @@ -63,11 +64,9 @@ void SETTINGS_read_eeprom(void) sizeof(g_eeprom), sizeof(g_eeprom)); #endif +#if 0 // sanity checks .. - // 0D60..0E27 - memcpy(&g_user_channel_attributes, &g_eeprom.config.channel_attributes, sizeof(g_user_channel_attributes)); - g_eeprom.config.setting.call1 = IS_USER_CHANNEL(g_eeprom.config.setting.call1) ? g_eeprom.config.setting.call1 : USER_CHANNEL_FIRST; g_eeprom.config.setting.squelch_level = (g_eeprom.config.setting.squelch_level < 10) ? g_eeprom.config.setting.squelch_level : 1; g_eeprom.config.setting.tx_timeout = (g_eeprom.config.setting.tx_timeout < 11) ? g_eeprom.config.setting.tx_timeout : 1; @@ -237,7 +236,7 @@ void SETTINGS_read_eeprom(void) g_eeprom.config.setting.freq_lock = (g_eeprom.config.setting.freq_lock < FREQ_LOCK_LAST) ? g_eeprom.config.setting.freq_lock : FREQ_LOCK_NORMAL; // g_eeprom.config.setting.enable_tx_350 = (g_eeprom.config.setting.enable_tx_350 < 2) ? g_eeprom.config.setting.enable_tx_350 : false; #ifdef ENABLE_KILL_REVIVE -// g_eeprom.config.setting.radio_disabled = (g_eeprom.config.setting.radio_disabled < 2) ? g_eeprom.config.setting.radio_disabled : 0; + g_eeprom.config.setting.radio_disabled = (g_eeprom.config.setting.radio_disabled < 2) ? g_eeprom.config.setting.radio_disabled : 0; #else g_eeprom.config.setting.radio_disabled = 0; #endif @@ -261,6 +260,26 @@ void SETTINGS_read_eeprom(void) #endif // g_eeprom.config.setting.backlight_on_tx_rx = (Data[7] >> 6) & 3u; +#else + + #ifndef ENABLE_KILL_REVIVE + memset(g_eeprom.config.setting.dtmf.kill_code, 0, sizeof(g_eeprom.config.setting.dtmf.kill_code)); + memset(g_eeprom.config.setting.dtmf.revive_code, 0, sizeof(g_eeprom.config.setting.dtmf.revive_code)); + + g_eeprom.config.setting.dtmf.permit_remote_kill = 0; + #endif + + #if ENABLE_RESET_AES_KEY + // wipe that darned AES key + memset(&g_eeprom.config.setting.aes_key, 0xff, sizeof(g_eeprom.config.setting.aes_key)); + #endif + + #ifndef ENABLE_KILL_REVIVE + g_eeprom.config.setting.radio_disabled = 0; + #endif + +#endif + // 0F48..0F4F g_eeprom.config.setting.scan_hold_time = (g_eeprom.config.setting.scan_hold_time > 40) ? 6 : (g_eeprom.config.setting.scan_hold_time < 2) ? 6 : g_eeprom.config.setting.scan_hold_time; @@ -268,6 +287,9 @@ void SETTINGS_read_eeprom(void) memset(&g_eeprom.unused, 0xff, sizeof(g_eeprom.unused)); + // 0D60..0E27 + memcpy(&g_user_channel_attributes, &g_eeprom.config.channel_attributes, sizeof(g_user_channel_attributes)); + // **************************************** memset(&g_eeprom.calib.unused3, 0xff, sizeof(g_eeprom.calib.unused3)); @@ -374,7 +396,7 @@ void SETTINGS_save(void) } } -void SETTINGS_save_channel(const unsigned int channel, const unsigned int vfo, const vfo_info_t *p_vfo, const unsigned int mode) +void SETTINGS_save_channel(const unsigned int channel, const unsigned int vfo, vfo_info_t *p_vfo, const unsigned int mode) { const unsigned int chan = CHANNEL_NUM(channel, vfo); t_channel *p_channel = &g_eeprom.config.channel[chan]; @@ -386,41 +408,28 @@ void SETTINGS_save_channel(const unsigned int channel, const unsigned int vfo, c if (mode < 2 && channel <= USER_CHANNEL_LAST) return; - #if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG) - UART_printf("sav_chan %04X %3u %3u %u %u\r\n", eeprom_addr, chan, channel, vfo, mode); - #endif - // **************** if (p_vfo != NULL) { memset(p_channel, 0, sizeof(t_channel)); - p_channel->frequency = p_vfo->freq_config_rx.frequency; - p_channel->tx_offset = p_vfo->tx_offset_freq; - p_channel->rx_ctcss_cdcss_code = p_vfo->freq_config_rx.code; - p_channel->tx_ctcss_cdcss_code = p_vfo->freq_config_tx.code; - p_channel->rx_ctcss_cdcss_type = p_vfo->freq_config_rx.code_type; -// p_channel->unused1:2 - p_channel->tx_ctcss_cdcss_type = p_vfo->freq_config_tx.code_type; - #ifdef ENABLE_MDC1200 - p_channel->mdc1200_mode = p_vfo->mdc1200_mode; + + p_vfo->channel.frequency = p_vfo->freq_config_rx.frequency; + p_vfo->channel.rx_ctcss_cdcss_code = p_vfo->freq_config_rx.code; + p_vfo->channel.tx_ctcss_cdcss_code = p_vfo->freq_config_tx.code; + p_vfo->channel.rx_ctcss_cdcss_type = p_vfo->freq_config_rx.code_type; + p_vfo->channel.tx_ctcss_cdcss_type = p_vfo->freq_config_tx.code_type; + + memcpy(p_channel, &p_vfo->channel, sizeof(t_channel)); + + if (IS_USER_CHANNEL(channel)) + g_eeprom.config.channel_attributes[channel] = g_user_channel_attributes[channel]; + +// memcpy(g_eeprom.config.channel_name[channel], p_vfo->channel_name, 16); + + #if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG) + UART_printf("save chan %04X %3u %3u %u %u %uHz\r\n", eeprom_addr, chan, channel, vfo, mode, p_channel->frequency * 10); #endif - p_channel->tx_offset_dir = p_vfo->tx_offset_freq_dir; -// p_channel->unused3:2 - p_channel->am_mode = p_vfo->am_mode; -// p_channel->unused4:3 - p_channel->frequency_reverse = p_vfo->frequency_reverse; - p_channel->channel_bandwidth = p_vfo->channel_bandwidth; - p_channel->tx_power = p_vfo->output_power; - p_channel->busy_channel_lock = p_vfo->busy_channel_lock; -// p_channel->unused5:1 - p_channel->compand = p_vfo->compand; - p_channel->dtmf_decoding_enable = p_vfo->dtmf_decoding_enable; - p_channel->dtmf_ptt_id_tx_mode = p_vfo->dtmf_ptt_id_tx_mode; -// p_channel->unused6:4 - p_channel->step_setting = p_vfo->step_setting; - p_channel->scrambler = p_vfo->scrambling_type; - p_channel->squelch_level = p_vfo->squelch_level; } else if (channel <= USER_CHANNEL_LAST) @@ -428,8 +437,8 @@ void SETTINGS_save_channel(const unsigned int channel, const unsigned int vfo, c memset(p_channel, 0xff, sizeof(t_channel)); } - EEPROM_WriteBuffer8(eeprom_addr + 0, (uint8_t *)(p_channel) + 0); - EEPROM_WriteBuffer8(eeprom_addr + 8, (uint8_t *)(p_channel) + 8); + EEPROM_WriteBuffer8(eeprom_addr + 0, ((uint8_t *)p_channel) + 0); + EEPROM_WriteBuffer8(eeprom_addr + 8, ((uint8_t *)p_channel) + 8); // **************** @@ -450,7 +459,7 @@ void SETTINGS_save_channel(const unsigned int channel, const unsigned int vfo, c #else if (p_vfo != NULL) - memcpy(&g_eeprom.config.channel_name[channel], p_vfo->name, 10); + memcpy(&g_eeprom.config.channel_name[channel], p_vfo->channel_name, 10); if (mode >= 3 || p_vfo == NULL) { // save the channel name @@ -476,14 +485,9 @@ void SETTINGS_save_chan_attribs_name(const unsigned int channel, const vfo_info_ if (p_vfo != NULL) { // channel attributes - t_channel_attrib attribs; - - attribs.band = p_vfo->band & 7u; - attribs.unused = 3u; - attribs.scanlist2 = p_vfo->scanlist_2_participation; - attribs.scanlist1 = p_vfo->scanlist_1_participation; - - g_user_channel_attributes[channel] = attribs; // remember new attributes + t_channel_attrib attribs = p_vfo->channel_attributes; + attribs.unused = 3u; + g_user_channel_attributes[channel] = attribs; // remember new attributes g_eeprom.config.channel_attributes[channel] = attribs; EEPROM_WriteBuffer8(0x0D60 + index, g_user_channel_attributes + index); @@ -504,7 +508,7 @@ void SETTINGS_save_chan_attribs_name(const unsigned int channel, const vfo_info_ if (p_vfo != NULL) { memset(&g_eeprom.config.channel_name[channel], 0, sizeof(g_eeprom.config.channel_name[channel])); - memcpy(&g_eeprom.config.channel_name[channel], p_vfo->name, 10); + memcpy(&g_eeprom.config.channel_name[channel], p_vfo->channel_name, 10); } else { @@ -650,7 +654,7 @@ void SETTINGS_factory_reset(bool bIsAll) const uint32_t Frequency = DEFAULT_FREQUENCY_TABLE[i]; g_rx_vfo->freq_config_rx.frequency = Frequency; g_rx_vfo->freq_config_tx.frequency = Frequency; - g_rx_vfo->band = FREQUENCY_GetBand(Frequency); + g_rx_vfo->channel_attributes.band = FREQUENCY_GetBand(Frequency); SETTINGS_save_channel(USER_CHANNEL_FIRST + i, 0, g_rx_vfo, 2); } } diff --git a/settings.h b/settings.h index 6fc82d7..4ac7a89 100644 --- a/settings.h +++ b/settings.h @@ -20,8 +20,9 @@ #include #include +#include "misc.h" +#include "dcs.h" #include "frequencies.h" -#include "radio.h" enum pwr_on_display_mode_e { PWR_ON_DISPLAY_MODE_FULL_SCREEN = 0, @@ -121,6 +122,46 @@ enum mdf_display_mode_e { }; typedef enum mdf_display_mode_e mdf_display_mode_t; +/* +enum { + RADIO_CHANNEL_UP = 0x01u, + RADIO_CHANNEL_DOWN = 0xFFu, +}; +*/ +enum { + BANDWIDTH_WIDE = 0, + BANDWIDTH_NARROW +}; + +enum ptt_id_e { + PTT_ID_OFF = 0, // OFF + PTT_ID_TX_UP, // BEGIN OF TX + PTT_ID_TX_DOWN, // END OF TX + PTT_ID_BOTH, // BOTH + PTT_ID_APOLLO // Apolo quindar tones +}; +typedef enum ptt_id_e ptt_id_t; + +enum mdc1200_mode_e { + MDC1200_MODE_OFF = 0, // OFF + MDC1200_MODE_BOT, // BEGIN OF TX + MDC1200_MODE_EOT, // END OF TX + MDC1200_MODE_BOTH // BOTH +}; +typedef enum mdc1200_mode_e mdc1200_mode_t; + +enum vfo_state_e +{ + VFO_STATE_NORMAL = 0, + VFO_STATE_BUSY, + VFO_STATE_BAT_LOW, + VFO_STATE_TX_DISABLE, + VFO_STATE_TIMEOUT, + VFO_STATE_ALARM, + VFO_STATE_VOLTAGE_HIGH +}; +typedef enum vfo_state_e vfo_state_t; + // ************************************************ // this is the full eeprom structure, both config and calibration areas @@ -150,11 +191,11 @@ typedef struct { uint8_t unused3:2; // #endif #if 0 - uint8_t am_mode:1; // - uint8_t unused4:3; // - #else - uint8_t am_mode:2; // - uint8_t unused4:2; // + uint8_t am_mode:1; // FM/AM + uint8_t unused4:3; // + #else + uint8_t am_mode:2; // FM/AM/DSB + uint8_t unused4:2; // #endif // [12] uint8_t frequency_reverse:1; // reverse repeater @@ -214,7 +255,7 @@ typedef struct { } __attribute__((packed)); // 0x0D60 - t_channel_attrib channel_attributes[USER_CHANNEL_LAST - USER_CHANNEL_FIRST + 1]; + t_channel_attrib channel_attributes[200]; struct { // 0x0E28 @@ -469,6 +510,45 @@ typedef struct { // ************************************************ +typedef struct +{ + uint32_t frequency; + dcs_code_type_t code_type; + uint8_t code; +} freq_config_t; + +typedef struct vfo_info_t +{ + uint8_t channel_save; + + freq_config_t freq_config_rx; + freq_config_t freq_config_tx; + freq_config_t *p_rx; + freq_config_t *p_tx; + + t_channel channel; + + t_channel_attrib channel_attributes; + + char channel_name[16]; + + uint16_t step_freq; + + uint8_t freq_in_channel; // channel number where we also found this VFO's frequency + + uint8_t squelch_open_glitch_thresh; + uint8_t squelch_open_rssi_thresh; + uint8_t squelch_open_noise_thresh; + uint8_t squelch_close_glitch_thresh; + uint8_t squelch_close_rssi_thresh; + uint8_t squelch_close_noise_thresh; + + uint8_t txp_calculated_setting; + +} vfo_info_t; + +// ************************************************ + extern t_eeprom g_eeprom; extern t_channel_attrib g_user_channel_attributes[FREQ_CHANNEL_LAST + 1]; @@ -480,7 +560,7 @@ void SETTINGS_write_eeprom_config(void); #endif void SETTINGS_save_vfo_indices(void); void SETTINGS_save(void); -void SETTINGS_save_channel(const unsigned int channel, const unsigned int vfo, const vfo_info_t *p_vfo, const unsigned int mode); +void SETTINGS_save_channel(const unsigned int channel, const unsigned int vfo, vfo_info_t *p_vfo, const unsigned int mode); void SETTINGS_save_chan_attribs_name(const unsigned int channel, const vfo_info_t *p_vfo); unsigned int SETTINGS_find_channel(const uint32_t frequency); diff --git a/ui/helper.c b/ui/helper.c index 40a9ec1..1a7a826 100644 --- a/ui/helper.c +++ b/ui/helper.c @@ -84,7 +84,8 @@ void UI_PrintString(const char *str, unsigned int x, const unsigned int end, con x += ofs; } - for (i = 0; i < length && (x + width) <= LCD_WIDTH; i++, x += width) +// for (i = 0; i < length && (x + width) <= LCD_WIDTH; i++, x += width) + for (i = 0; i < length; i++, x += width) { const int c = (int)str[i] - ' '; if (c >= 0 && c < (int)font_size) @@ -117,6 +118,7 @@ static void UI_print_string( } for (i = 0; i < length && (x + char_width) <= LCD_WIDTH; i++, x += char_pitch) +// for (i = 0; i < length; i++, x += char_pitch) { const int c = (int)str[i] - ' '; if (c >= 0 && c < (int)font_size) diff --git a/ui/main.c b/ui/main.c index d499042..a17e1fb 100644 --- a/ui/main.c +++ b/ui/main.c @@ -262,7 +262,7 @@ void UI_update_rssi(const int16_t rssi, const int vfo) // TODO: sort out all 8 values from the eeprom #if 1 - const unsigned int band = g_rx_vfo->band; + const unsigned int band = g_rx_vfo->channel_attributes.band; const int16_t level0 = g_eeprom_rssi_calib[band][0]; const int16_t level1 = g_eeprom_rssi_calib[band][1]; const int16_t level2 = g_eeprom_rssi_calib[band][2]; @@ -730,7 +730,7 @@ void UI_DisplayMain(void) } x += smallest_char_spacing * 4; - if (g_vfo_info[vfo_num].compand) + if (g_vfo_info[vfo_num].channel.compand) UI_PrintStringSmallest("C", x, (line + 0) * 8, false, true); //x += smallest_char_spacing * 1; } @@ -740,14 +740,14 @@ void UI_DisplayMain(void) const uint8_t freq_in_channel = g_vfo_info[vfo_num].freq_in_channel; // const uint8_t freq_in_channel = SETTINGS_find_channel(frequency); // currently way to slow - if (g_vfo_info[vfo_num].compand) + if (g_vfo_info[vfo_num].channel.compand) { strcpy(str, " "); if (is_freq_chan && freq_in_channel <= USER_CHANNEL_LAST) str[0] = 'F'; // channel number that contains this VFO frequency - if (g_vfo_info[vfo_num].compand) + if (g_vfo_info[vfo_num].channel.compand) str[1] = 'C'; // compander is enabled UI_PrintStringSmall(str, LCD_WIDTH - (7 * 2), 0, line + 1); @@ -771,7 +771,7 @@ void UI_DisplayMain(void) if (mode == 1) { // TX power level - switch (g_rx_vfo->output_power) + switch (g_rx_vfo->channel.tx_power) { case OUTPUT_POWER_LOW: Level = 2; break; case OUTPUT_POWER_MID: Level = 4; break; @@ -791,10 +791,10 @@ void UI_DisplayMain(void) // ************ str[0] = '\0'; - if (g_vfo_info[vfo_num].am_mode > 0) + if (g_vfo_info[vfo_num].channel.am_mode > 0) { - //strcpy(str, g_sub_menu_mod_mode[g_vfo_info[vfo_num].am_mode]); - switch (g_vfo_info[vfo_num].am_mode) + //strcpy(str, g_sub_menu_mod_mode[g_vfo_info[vfo_num].channel.am_mode]); + switch (g_vfo_info[vfo_num].channel.am_mode) { default: case 0: strcpy(str, "FM"); break; @@ -810,62 +810,62 @@ void UI_DisplayMain(void) if (code_type < ARRAY_SIZE(code_list)) strcpy(str, code_list[code_type]); } - UI_PrintStringSmall(str, LCD_WIDTH + 24, 0, line + 1); + UI_PrintStringSmall(str, 24, 0, line + 2); #ifdef ENABLE_TX_WHEN_AM if (state == VFO_STATE_NORMAL || state == VFO_STATE_ALARM) #else - if ((state == VFO_STATE_NORMAL || state == VFO_STATE_ALARM) && g_vfo_info[vfo_num].am_mode == 0) // not allowed to TX if not in FM mode + if ((state == VFO_STATE_NORMAL || state == VFO_STATE_ALARM) && g_vfo_info[vfo_num].channel.am_mode == 0) // TX allowed only when FM #endif { if (FREQUENCY_tx_freq_check(g_vfo_info[vfo_num].p_tx->frequency) == 0) { // show the TX power const char pwr_list[] = "LMH"; - const unsigned int i = g_vfo_info[vfo_num].output_power; + const unsigned int i = g_vfo_info[vfo_num].channel.tx_power; str[0] = (i < ARRAY_SIZE(pwr_list)) ? pwr_list[i] : '\0'; str[1] = '\0'; - UI_PrintStringSmall(str, LCD_WIDTH + 46, 0, line + 1); + UI_PrintStringSmall(str, 46, 0, line + 2); if (g_vfo_info[vfo_num].freq_config_rx.frequency != g_vfo_info[vfo_num].freq_config_tx.frequency) { // show the TX offset symbol const char dir_list[] = "\0+-"; - const unsigned int i = g_vfo_info[vfo_num].tx_offset_freq_dir; + const unsigned int i = g_vfo_info[vfo_num].channel.tx_offset_dir; str[0] = (i < sizeof(dir_list)) ? dir_list[i] : '?'; str[1] = '\0'; - UI_PrintStringSmall(str, LCD_WIDTH + 54, 0, line + 1); + UI_PrintStringSmall(str, 54, 0, line + 2); } } } // show the TX/RX reverse symbol - if (g_vfo_info[vfo_num].frequency_reverse) - UI_PrintStringSmall("R", LCD_WIDTH + 62, 0, line + 1); + if (g_vfo_info[vfo_num].channel.frequency_reverse) + UI_PrintStringSmall("R", 62, 0, line + 2); { // show the narrow band symbol str[0] = '\0'; - if (g_vfo_info[vfo_num].channel_bandwidth == BANDWIDTH_NARROW) + if (g_vfo_info[vfo_num].channel.channel_bandwidth == BANDWIDTH_NARROW) { str[0] = 'N'; str[1] = '\0'; } - UI_PrintStringSmall(str, LCD_WIDTH + 70, 0, line + 1); + UI_PrintStringSmall(str, 70, 0, line + 2); } // show the DTMF decoding symbol #ifdef ENABLE_KILL_REVIVE - if (g_vfo_info[vfo_num].dtmf_decoding_enable || g_eeprom.config.setting.radio_disabled) - UI_PrintStringSmall("DTMF", LCD_WIDTH + 78, 0, line + 1); + if (g_vfo_info[vfo_num].channel.dtmf_decoding_enable || g_eeprom.config.setting.radio_disabled) + UI_PrintStringSmall("DTMF", 78, 0, line + 2); #else - if (g_vfo_info[vfo_num].dtmf_decoding_enable) - UI_PrintStringSmall("DTMF", LCD_WIDTH + 78, 0, line + 1); - //UI_PrintStringSmall4x5("DTMF", LCD_WIDTH + 78, 0, line + 1); // font table is currently wrong - //UI_PrintStringSmallest("DTMF", LCD_WIDTH + 78, (line + 1) * 8, false, true); + if (g_vfo_info[vfo_num].channel.dtmf_decoding_enable) + UI_PrintStringSmall("DTMF", 78, 0, line + 2); + //UI_PrintStringSmall4x5("DTMF", 78, 0, line + 2); // font table is currently wrong + //UI_PrintStringSmallest("DTMF", 78, (line + 2) * 8, false, true); #endif // show the audio scramble symbol - if (g_vfo_info[vfo_num].scrambling_type > 0 && g_eeprom.config.setting.enable_scrambler) - UI_PrintStringSmall("SCR", LCD_WIDTH + 106, 0, line + 1); + if (g_vfo_info[vfo_num].channel.scrambler > 0 && g_eeprom.config.setting.enable_scrambler) + UI_PrintStringSmall("SCR", 106, 0, line + 2); } if (g_center_line == CENTER_LINE_NONE && diff --git a/ui/menu.c b/ui/menu.c index 5dabbd4..b25fa47 100644 --- a/ui/menu.c +++ b/ui/menu.c @@ -30,6 +30,7 @@ #include "frequencies.h" #include "helper/battery.h" #include "misc.h" +#include "radio.h" #include "settings.h" #include "ui/helper.h" #include "ui/inputbox.h" @@ -469,10 +470,10 @@ void UI_SortMenu(const bool hide_hidden) void UI_DisplayMenu(void) { - const unsigned int menu_list_width = 6; // max no. of characters on the menu list (left side) - const unsigned int sub_menu_x1 = (8 * menu_list_width) + 0; // start x corrd - const unsigned int sub_menu_x2 = LCD_WIDTH - 1; // end x coord - bool channel_setting = false; // set if the setting is a channel setting + const unsigned int menu_list_width = 6; // max no. of characters on the menu list (left side) + const unsigned int sub_menu_x1 = 8 * menu_list_width; // start x corrd + const unsigned int sub_menu_x2 = LCD_WIDTH - 1; // end x coord + bool channel_setting = false; // set if the setting is a channel setting unsigned int i; char str[64]; // bigger cuz we can now do multi-line in one string (use '\n' char) @@ -736,7 +737,6 @@ void UI_DisplayMenu(void) break; case MENU_MOD_MODE: -// strcpy(str, (g_sub_menu_selection == 0) ? "FM" : "AM"); strcpy(str, g_sub_menu_mod_mode[g_sub_menu_selection]); channel_setting = true; break; @@ -793,6 +793,10 @@ void UI_DisplayMenu(void) break; case MENU_DTMF_DCD: + channel_setting = true; + + // Fallthrough + case MENU_DTMF_LIVE_DEC: strcpy(str, "DTMF\nDECODE\n"); strcat(str, g_sub_menu_off_on[g_sub_menu_selection]); @@ -989,16 +993,19 @@ void UI_DisplayMenu(void) case MENU_UP_CODE: strcpy(str, "DTMF BOT\n"); strcat(str, g_eeprom.config.setting.dtmf.key_up_code); + channel_setting = true; break; case MENU_DN_CODE: strcpy(str, "DTMF EOT\n"); strcat(str, g_eeprom.config.setting.dtmf.key_down_code); + channel_setting = true; break; case MENU_DTMF_RSP: strcpy(str, "DTMF\nRESPONSE\n"); strcat(str, g_sub_menu_dtmf_rsp[g_sub_menu_selection]); + channel_setting = true; break; case MENU_DTMF_HOLD: