diff --git a/app/fm.c b/app/fm.c index 6fc7402..6713065 100644 --- a/app/fm.c +++ b/app/fm.c @@ -230,27 +230,30 @@ static void FM_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held) #define STATE_USER_MODE 1 #define STATE_SAVE 2 - if (key_held) - { - if (key_pressed) - return; - - return; // no sofiticatedness here - yet - } - - if (key_pressed) - { - g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; + + + // beeps cause bad audio clicks anf audio breaks :( + // so don't use them + + + g_key_input_count_down = key_input_timeout_500ms; + + if (key_held && !key_pressed) + return; // key just released after long press + + if (!key_held && key_pressed) + { // key just pressed +// g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; return; } - if (!g_fkey_pressed) - { + if (!g_fkey_pressed && !key_held) + { // short key release uint8_t State; if (g_ask_to_delete) { - g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; +// g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } @@ -262,7 +265,7 @@ static void FM_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held) { if (g_fm_scan_state != FM_SCAN_OFF) { - g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; +// g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } @@ -295,7 +298,7 @@ static void FM_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held) if (Frequency < g_eeprom.fm_lower_limit || g_eeprom.fm_upper_limit < Frequency) { - g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; +// g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; g_request_display_screen = DISPLAY_FM; return; } @@ -346,7 +349,7 @@ static void FM_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held) return; } - g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; +// g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } @@ -356,8 +359,11 @@ static void FM_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held) return; } + + // with f-key, or long press - g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; +// g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; + g_fkey_pressed = false; g_update_status = true; g_request_display_screen = DISPLAY_FM; @@ -376,12 +382,12 @@ static void FM_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held) BK1080_SetFrequency(g_eeprom.fm_frequency_playing); g_request_save_fm = true; } - else - g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; +// else +// g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; break; default: - g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; +// g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; break; } } @@ -390,28 +396,20 @@ static void FM_Key_STAR(bool key_pressed, bool key_held) { (void)key_held; // stop compiler warning -// if (key_held) -// return; - - if (key_pressed) + if (key_held || key_pressed) return; - g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; +// g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; ACTION_Scan(false); } static void FM_Key_EXIT(bool key_pressed, bool key_held) { - if (key_held) - { - return; - } - - if (key_pressed) + if (key_held || key_pressed) return; - g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; +// g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; if (g_fm_scan_state == FM_SCAN_OFF) { @@ -465,32 +463,41 @@ static void FM_Key_EXIT(bool key_pressed, bool key_held) static void FM_Key_MENU(bool key_pressed, bool key_held) { - if (key_held) - { - return; - } + unsigned int i; + int channel = -1; - if (key_pressed) + if (key_held || key_pressed) return; + // see if the frequency is already stored in a channel + for (i = 0; i < ARRAY_SIZE(g_fm_channels) && channel < 0; i++) + if (g_fm_channels[i] == g_eeprom.fm_frequency_playing) + channel = i; // found it in the channel list + g_request_display_screen = DISPLAY_FM; - g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; +// g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; if (g_fm_scan_state == FM_SCAN_OFF) - { + { // not scanning + if (!g_eeprom.fm_is_channel_mode) - { + { // frequency mode + if (g_ask_to_save) { - g_fm_channels[g_fm_channel_position] = g_eeprom.fm_frequency_playing; - g_ask_to_save = false; - g_request_save_fm = true; + if (channel < 0) + { + g_fm_channels[g_fm_channel_position] = g_eeprom.fm_frequency_playing; + g_ask_to_save = false; + g_request_save_fm = true; + } } else + if (channel < 0) g_ask_to_save = true; } else - { + { // channel mode if (g_ask_to_delete) { g_fm_channels[g_eeprom.fm_selected_channel] = 0xFFFF; @@ -506,10 +513,10 @@ static void FM_Key_MENU(bool key_pressed, bool key_held) } } else - { + { // scanning if (g_fm_auto_scan || !g_fm_found_frequency) { - g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; +// g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; g_input_box_index = 0; return; } @@ -521,6 +528,7 @@ static void FM_Key_MENU(bool key_pressed, bool key_held) g_request_save_fm = true; } else + if (channel < 0) g_ask_to_save = true; } } @@ -539,17 +547,17 @@ static void FM_Key_UP_DOWN(bool key_pressed, bool key_held, int8_t Step) { if (g_input_box_index) { - g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; +// g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } - g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; +// g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; } if (g_ask_to_save) { g_request_display_screen = DISPLAY_FM; - g_fm_channel_position = NUMBER_AddWithWraparound(g_fm_channel_position, Step, 0, 19); + g_fm_channel_position = NUMBER_AddWithWraparound(g_fm_channel_position, Step, 0, 19); return; } @@ -557,7 +565,7 @@ static void FM_Key_UP_DOWN(bool key_pressed, bool key_held, int8_t Step) { if (g_fm_auto_scan) { - g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; +// g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } @@ -634,8 +642,8 @@ void FM_ProcessKeys(key_code_t Key, bool key_pressed, bool key_held) GENERIC_Key_PTT(key_pressed); break; default: - if (!key_held && key_pressed) - g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; +// if (!key_held && key_pressed) +// g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; break; } } diff --git a/driver/bk1080.c b/driver/bk1080.c index 48b8157..8fa8edf 100644 --- a/driver/bk1080.c +++ b/driver/bk1080.c @@ -34,8 +34,7 @@ static const uint16_t BK1080_RegisterTable[] = 0x0200, 0x0000, }; -static bool gIsInitBK1080; - +bool is_init; uint16_t BK1080_BaseFrequency; uint16_t BK1080_FrequencyDeviation; @@ -47,7 +46,7 @@ void BK1080_Init(uint16_t Frequency, bool bDoScan) { GPIO_ClearBit(&GPIOB->DATA, GPIOB_PIN_BK1080); - if (!gIsInitBK1080) + if (!is_init) { for (i = 0; i < ARRAY_SIZE(BK1080_RegisterTable); i++) BK1080_WriteRegister(i, BK1080_RegisterTable[i]); @@ -59,7 +58,7 @@ void BK1080_Init(uint16_t Frequency, bool bDoScan) SYSTEM_DelayMs(60); - gIsInitBK1080 = true; + is_init = true; } else { @@ -67,11 +66,9 @@ void BK1080_Init(uint16_t Frequency, bool bDoScan) } BK1080_WriteRegister(BK1080_REG_05_SYSTEM_CONFIGURATION2, 0x0A5F); - BK1080_WriteRegister(BK1080_REG_03_CHANNEL, Frequency - 760); - - SYSTEM_DelayMs(10); - - BK1080_WriteRegister(BK1080_REG_03_CHANNEL, (Frequency - 760) | 0x8000); + BK1080_WriteRegister(BK1080_REG_03_CHANNEL, Frequency - 760); +// SYSTEM_DelayMs(10); + BK1080_WriteRegister(BK1080_REG_03_CHANNEL, (Frequency - 760) | (1u << 15)); } else { @@ -83,7 +80,6 @@ void BK1080_Init(uint16_t Frequency, bool bDoScan) uint16_t BK1080_ReadRegister(BK1080_Register_t Register) { uint8_t Value[2]; - I2C_Start(); I2C_Write(0x80); I2C_Write((Register << 1) | I2C_READ); @@ -110,9 +106,9 @@ void BK1080_Mute(bool Mute) void BK1080_SetFrequency(uint16_t Frequency) { - BK1080_WriteRegister(BK1080_REG_03_CHANNEL, Frequency - 760); - SYSTEM_DelayMs(10); - BK1080_WriteRegister(BK1080_REG_03_CHANNEL, (Frequency - 760) | 0x8000); + BK1080_WriteRegister(BK1080_REG_03_CHANNEL, Frequency - 760); +// SYSTEM_DelayMs(10); + BK1080_WriteRegister(BK1080_REG_03_CHANNEL, (Frequency - 760) | (1u << 15)); } void BK1080_GetFrequencyDeviation(uint16_t Frequency) diff --git a/driver/bk1080.h b/driver/bk1080.h index ed1f9c1..fba4546 100644 --- a/driver/bk1080.h +++ b/driver/bk1080.h @@ -19,17 +19,18 @@ #include #include + #include "driver/bk1080-regs.h" extern uint16_t BK1080_BaseFrequency; extern uint16_t BK1080_FrequencyDeviation; -void BK1080_Init(uint16_t Frequency, bool bDoScan); +void BK1080_Init(uint16_t Frequency, bool bDoScan); uint16_t BK1080_ReadRegister(BK1080_Register_t Register); -void BK1080_WriteRegister(BK1080_Register_t Register, uint16_t Value); -void BK1080_Mute(bool Mute); -void BK1080_SetFrequency(uint16_t Frequency); -void BK1080_GetFrequencyDeviation(uint16_t Frequency); +void BK1080_WriteRegister(BK1080_Register_t Register, uint16_t Value); +void BK1080_Mute(bool Mute); +void BK1080_SetFrequency(uint16_t Frequency); +void BK1080_GetFrequencyDeviation(uint16_t Frequency); #endif diff --git a/driver/bk4819.c b/driver/bk4819.c index 399025b..be3101b 100644 --- a/driver/bk4819.c +++ b/driver/bk4819.c @@ -804,7 +804,8 @@ void BK4819_SetAF(BK4819_af_type_t AF) // AF Output Inverse Mode = Inverse // Undocumented bits 0x2040 // - BK4819_WriteRegister(BK4819_REG_47, 0x6040 | (AF << 8)); +// BK4819_WriteRegister(BK4819_REG_47, 0x6040 | (AF << 8)); + BK4819_WriteRegister(BK4819_REG_47, (6u << 12) | (AF << 8) | (1u << 6)); } void BK4819_RX_TurnOn(void) @@ -823,7 +824,7 @@ void BK4819_RX_TurnOn(void) // Enable XTAL // Enable Band Gap // - BK4819_WriteRegister(BK4819_REG_37, 0x1F0F); // 0001111100001111 + BK4819_WriteRegister(BK4819_REG_37, 0x1F0F); // 0001 1111 0000 1111 // Turn off everything BK4819_WriteRegister(BK4819_REG_30, 0); @@ -1034,6 +1035,7 @@ void BK4819_PlaySingleTone(const unsigned int tone_Hz, const unsigned int delay, { GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); BK4819_SetAF(BK4819_AF_MUTE); +// BK4819_SetAF(g_rx_vfo->am_mode ? BK4819_AF_AM : BK4819_AF_FM); } BK4819_WriteRegister(BK4819_REG_70, 0x0000); diff --git a/driver/bk4819.h b/driver/bk4819.h index bef29f2..5eed69b 100644 --- a/driver/bk4819.h +++ b/driver/bk4819.h @@ -45,9 +45,9 @@ typedef enum BK4819_af_type_e BK4819_af_type_t; enum BK4819_filter_bandwidth_e { - BK4819_FILTER_BW_WIDE = 0, - BK4819_FILTER_BW_NARROW, - BK4819_FILTER_BW_NARROWER + BK4819_FILTER_BW_WIDE = 0, // 25kHz + BK4819_FILTER_BW_NARROW, // 12.5kHz + BK4819_FILTER_BW_NARROWER // 6.25kHz }; typedef enum BK4819_filter_bandwidth_e BK4819_filter_bandwidth_t; diff --git a/firmware.bin b/firmware.bin index 9cc687a..756ec9e 100644 Binary files a/firmware.bin and b/firmware.bin differ diff --git a/firmware.packed.bin b/firmware.packed.bin index 806f0f5..218edc7 100644 Binary files a/firmware.packed.bin and b/firmware.packed.bin differ