diff --git a/app/app.c b/app/app.c index 7d6ef4b..c436603 100644 --- a/app/app.c +++ b/app/app.c @@ -2713,11 +2713,10 @@ static void APP_process_key(const key_code_t Key, const bool key_pressed, const BK4819_ExitDTMF_TX(false); - if (g_current_vfo->channel.scrambler == 0 || !g_eeprom.config.setting.enable_scrambler) - BK4819_DisableScramble(); + if (g_eeprom.config.setting.enable_scrambler) + BK4819_set_scrambler(g_current_vfo->channel.scrambler); else - //BK4819_EnableScramble(g_current_vfo->channel.scrambler - 1); - BK4819_EnableScramble(2600 + ((g_current_vfo->channel.scrambler - 1) * 100)); + BK4819_set_scrambler(0); } } else @@ -2727,7 +2726,7 @@ static void APP_process_key(const key_code_t Key, const bool key_pressed, const GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER); } - BK4819_DisableScramble(); + BK4819_set_scrambler(0); if (Code == 0xFE) BK4819_TransmitTone(g_eeprom.config.setting.dtmf.side_tone, 1750); diff --git a/app/menu.c b/app/menu.c index 6128988..c74375b 100644 --- a/app/menu.c +++ b/app/menu.c @@ -270,7 +270,7 @@ int MENU_GetLimits(uint8_t Cursor, int32_t *pMin, int32_t *pMax) case MENU_SCRAMBLER: *pMin = 0; - *pMax = ARRAY_SIZE(g_sub_menu_scrambler) - 1; + *pMax = 31; break; case MENU_TX_TO: @@ -497,11 +497,10 @@ void MENU_AcceptSetting(void) case MENU_SCRAMBLER: 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); - BK4819_EnableScramble(2600 + ((g_sub_menu_selection - 1) * 100)); + if (g_eeprom.config.setting.enable_scrambler) + BK4819_set_scrambler(g_tx_vfo->channel.scrambler); else - BK4819_DisableScramble(); + BK4819_set_scrambler(0); #endif g_request_save_channel = IS_FREQ_CHANNEL(g_tx_vfo->channel_save) ? 2 : 1; return; diff --git a/driver/bk4819.c b/driver/bk4819.c index c4f860b..4453466 100644 --- a/driver/bk4819.c +++ b/driver/bk4819.c @@ -766,29 +766,23 @@ void BK4819_set_rf_filter_path(uint32_t Frequency) } } -void BK4819_DisableScramble(void) +void BK4819_set_scrambler(const int index) { const uint16_t Value = BK4819_ReadRegister(0x31); - BK4819_WriteRegister(0x31, Value & ~(1u << 1)); -} + if (index <= 0) + { // disable + BK4819_WriteRegister(0x31, Value & ~(1u << 1)); + } + else + { // enable + uint16_t freq = 2600 + ((index - 1) * 50); // 50 Hz steps + if (freq > 12000) + freq = 12000; -#if 0 -void BK4819_EnableScramble(const uint8_t Type) -{ - const uint16_t Value = BK4819_ReadRegister(0x31); - BK4819_WriteRegister(0x31, Value | (1u << 1)); - - BK4819_WriteRegister(0x71, (26 + Type) * 1032); + BK4819_WriteRegister(0x31, Value | (1u << 1)); // enable + BK4819_WriteRegister(0x71, scale_freq(freq)); + } } -#else -void BK4819_EnableScramble(const uint16_t freq) -{ - const uint16_t Value = BK4819_ReadRegister(0x31); - BK4819_WriteRegister(0x31, Value | (1u << 1)); - - BK4819_WriteRegister(0x71, scale_freq(freq)); -} -#endif bool BK4819_CompanderEnabled(void) { diff --git a/driver/bk4819.h b/driver/bk4819.h index 84fde6c..ea92164 100644 --- a/driver/bk4819.h +++ b/driver/bk4819.h @@ -94,9 +94,8 @@ void BK4819_SetupSquelch( void BK4819_SetAF(BK4819_af_type_t AF); void BK4819_RX_TurnOn(void); void BK4819_set_rf_filter_path(uint32_t Frequency); -void BK4819_DisableScramble(void); -//void BK4819_EnableScramble(const uint8_t Type); -void BK4819_EnableScramble(const uint16_t freq); + +void BK4819_set_scrambler(const int index); bool BK4819_CompanderEnabled(void); void BK4819_SetCompander(const unsigned int mode); diff --git a/firmware.bin b/firmware.bin index 915b951..23b362a 100644 Binary files a/firmware.bin and b/firmware.bin differ diff --git a/firmware.packed.bin b/firmware.packed.bin index f3658ae..af995ef 100644 Binary files a/firmware.packed.bin and b/firmware.packed.bin differ diff --git a/functions.c b/functions.c index 3812481..0b1972b 100644 --- a/functions.c +++ b/functions.c @@ -233,8 +233,7 @@ void FUNCTION_Select(function_type_t Function) } #endif - if (g_current_vfo->channel.scrambler == 0 || !g_eeprom.config.setting.enable_scrambler) - BK4819_DisableScramble(); + BK4819_set_scrambler(0); RADIO_enableTX(false); @@ -301,11 +300,8 @@ void FUNCTION_Select(function_type_t Function) (1u << 1) | // enable TX DSP (0u << 0)); // disable RX DSP */ - if (g_current_vfo->channel.scrambler > 0 && g_eeprom.config.setting.enable_scrambler) - { -// BK4819_EnableScramble(g_current_vfo->channel.scrambler - 1); - BK4819_EnableScramble(2600 + ((g_current_vfo->channel.scrambler - 1) * 100)); - } + if (g_eeprom.config.setting.enable_scrambler) + BK4819_set_scrambler(g_current_vfo->channel.scrambler); break; diff --git a/radio.c b/radio.c index 311390a..4ae76b0 100644 --- a/radio.c +++ b/radio.c @@ -790,11 +790,10 @@ void RADIO_setup_registers(bool switch_to_function_foreground) break; } - if (g_rx_vfo->channel.scrambler > 0 && g_eeprom.config.setting.enable_scrambler) -// BK4819_EnableScramble(g_rx_vfo->channel.scrambler - 1); - BK4819_EnableScramble(2600 + ((g_rx_vfo->channel.scrambler - 1) * 100)); + if (g_eeprom.config.setting.enable_scrambler) + BK4819_set_scrambler(g_rx_vfo->channel.scrambler); else - BK4819_DisableScramble(); + BK4819_set_scrambler(0); } } #ifdef ENABLE_NOAA diff --git a/settings.h b/settings.h index a2e29d4..866f9fe 100644 --- a/settings.h +++ b/settings.h @@ -213,18 +213,25 @@ typedef struct { // [13] uint8_t dtmf_decoding_enable:1; // uint8_t dtmf_ptt_id_tx_mode:3; // - uint8_t unused6:4; // - // [14] - uint8_t step_setting; // - // [15] - uint8_t scrambler:4; // #if 0 // QS - uint8_t unused7:4; // + uint8_t unused6:4; // #else // 1of11 uint8_t squelch_level:4; // 0 ~ 9 per channel squelch, 0 = use main squelch level #endif + // [14] + uint8_t step_setting; // + // [15] + #if 0 + // QS + uint8_t scrambler:4; // + uint8_t unused7:4; // + #else + // 1of11 + uint8_t scrambler:5; // more scrambler frequencies + uint8_t unused7:3; // + #endif } __attribute__((packed)) t_channel; // typedef union { diff --git a/ui/menu.c b/ui/menu.c index 8fd2d2f..911039f 100644 --- a/ui/menu.c +++ b/ui/menu.c @@ -367,26 +367,6 @@ const char g_sub_menu_dis_en[2][9] = "ENABLED" }; -const char g_sub_menu_scrambler[16][7] = -{ - "OFF", // 0 - "2600Hz", - "2700Hz", - "2800Hz", - "2900Hz", - "3000Hz", - "3100Hz", - "3200Hz", - "3300Hz", - "3400Hz", - "3500Hz", // 10 - "3600Hz", - "3700Hz", - "3800Hz", - "3900Hz", - "4000Hz" // 15 -}; - #ifdef ENABLE_SIDE_BUTT_MENU const char g_sub_menu_side_butt[9][16] = //const char g_sub_menu_side_butt[10][16] = @@ -708,14 +688,16 @@ void UI_DisplayMenu(void) case MENU_SCRAMBLER: strcpy(str, "INVERT\n"); - strcat(str, g_sub_menu_scrambler[g_sub_menu_selection]); + if (g_sub_menu_selection == 0) + strcat(str, "OFF"); + else + sprintf(str + strlen(str), "%uHz", 2600 + ((g_sub_menu_selection - 1) * 50)); #if 1 - if (g_sub_menu_selection > 0 && g_eeprom.config.setting.enable_scrambler) -// BK4819_EnableScramble(g_sub_menu_selection - 1); - BK4819_EnableScramble(2600 + ((g_sub_menu_selection - 1) * 100)); + if (g_eeprom.config.setting.enable_scrambler) + BK4819_set_scrambler(g_sub_menu_selection); else - BK4819_DisableScramble(); + BK4819_set_scrambler(0); #endif channel_setting = true; break; diff --git a/ui/menu.h b/ui/menu.h index 9cbddca..dca2caf 100644 --- a/ui/menu.h +++ b/ui/menu.h @@ -194,7 +194,6 @@ extern const char g_sub_menu_rx_tx[4][6]; #endif extern const char g_sub_menu_bat_text[3][8]; extern const char g_sub_menu_dis_en[2][9]; -extern const char g_sub_menu_scrambler[16][7]; #ifdef ENABLE_SIDE_BUTT_MENU extern const char g_sub_menu_side_butt[9][16]; #endif