diff --git a/app/aircopy.c b/app/aircopy.c index 2f6eccf..5d87675 100644 --- a/app/aircopy.c +++ b/app/aircopy.c @@ -44,19 +44,20 @@ // payloads ................ 0xABCD + 2 byte eeprom address + 64 byte payload + 2 byte CRC + 0xDCBA // 1of11 req/ack additon ... 0xBCDA + 2 byte eeprom address + 2 byte CRC + 0xCDBA -#define AIRCOPY_MAGIC_START_REQ 0xBCDA // used to request a block resend -#define AIRCOPY_MAGIC_END_REQ 0xCDBA // used to request a block resend +#define AIRCOPY_MAGIC_START_REQ 0xBCDA // used to request a block resend +#define AIRCOPY_MAGIC_END_REQ 0xCDBA // used to request a block resend -#define AIRCOPY_MAGIC_START 0xABCD // normal start value -#define AIRCOPY_MAGIC_END 0xDCBA // normal end value +#define AIRCOPY_MAGIC_START 0xABCD // normal start value +#define AIRCOPY_MAGIC_END 0xDCBA // normal end value -#define AIRCOPY_LAST_EEPROM_ADDR 0x1E00 // size of eeprom transferred +#define AIRCOPY_LAST_EEPROM_ADDR 0x1E00 // size of eeprom transferred +//#define AIRCOPY_LAST_EEPROM_ADDR (sizeof(t_config)) // // FSK payload data length -#define AIRCOPY_DATA_PACKET_SIZE (2 + 2 + 64 + 2 + 2) +#define AIRCOPY_DATA_PACKET_SIZE (2 + 2 + 64 + 2 + 2) // FSK req/ack data length .. 0xBCDA + 2 byte eeprom address + 2 byte CRC + 0xCDBA -#define AIRCOPY_REQ_PACKET_SIZE (2 + 2 + 2 + 2) +#define AIRCOPY_REQ_PACKET_SIZE (2 + 2 + 2 + 2) // ********************** @@ -590,8 +591,11 @@ void AIRCOPY_process_fsk_rx_10ms(void) data[2] = 0; } - EEPROM_WriteBuffer8(eeprom_addr, data); // 8 bytes at a time -// memcpy(((uint8_t *)&g_eeprom) + eeprom_addr, data, 8); + if (eeprom_addr < sizeof(t_config)) // don't allow writing to the calibration data area + { + EEPROM_WriteBuffer8(eeprom_addr, data); // 8 bytes at a time +// memcpy(((uint8_t *)&g_eeprom) + eeprom_addr, data, 8); + } data += write_size / sizeof(data[0]); eeprom_addr += write_size; @@ -605,6 +609,9 @@ void AIRCOPY_process_fsk_rx_10ms(void) g_aircopy_state = AIRCOPY_RX_COMPLETE; AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP); + // save the received data to the EEPROM chip +// SETTINGS_write_eeprom_config(); + #ifdef ENABLE_AIRCOPY_RX_REBOOT #if defined(ENABLE_OVERLAY) overlay_FLASH_RebootToBootloader(); @@ -613,9 +620,9 @@ void AIRCOPY_process_fsk_rx_10ms(void) #endif #endif } - + return; - + send_req: g_fsk_write_index = 0; diff --git a/app/app.c b/app/app.c index 604da58..8684508 100644 --- a/app/app.c +++ b/app/app.c @@ -1849,7 +1849,7 @@ void APP_process_power_save(void) // go back to sleep g_power_save_tick_10ms = g_eeprom.config.setting.battery_save_ratio * 10; - g_rx_idle_mode = true; + g_rx_idle_mode = true; BK4819_DisableVox(); BK4819_Sleep(); @@ -1870,15 +1870,6 @@ void APP_time_slice_500ms(void) { bool exit_menu = false; - if (g_serial_config_tick_500ms > 0) - { // config upload/download is running - return; - } - - if (g_keypad_locked > 0) - if (--g_keypad_locked == 0) - g_update_display = true; - if (g_key_input_count_down > 0) { if (--g_key_input_count_down == 0) @@ -1887,12 +1878,32 @@ void APP_time_slice_500ms(void) if (g_beep_to_play != BEEP_NONE) { - AUDIO_PlayBeep(g_beep_to_play); + if (g_serial_config_tick_500ms == 0) + AUDIO_PlayBeep(g_beep_to_play); g_beep_to_play = BEEP_NONE; } } } + #ifdef ENABLE_AIRCOPY + if (g_current_display_screen == DISPLAY_AIRCOPY) + { // we're in AIRCOPY mode + + BOARD_ADC_GetBatteryInfo(&g_usb_current_voltage, &g_usb_current); + + return; + } + #endif + + if (g_keypad_locked > 0) + if (--g_keypad_locked == 0) + g_update_display = true; + + if (g_serial_config_tick_500ms > 0) + { // config upload/download is running + return; + } + if (g_update_screen_tick_500ms > 0) { // update display once every 500ms if (--g_update_screen_tick_500ms == 0) @@ -2010,24 +2021,19 @@ void APP_time_slice_500ms(void) if (g_fm_scan_state_dir == FM_SCAN_STATE_DIR_OFF || g_ask_to_save) #endif { - #ifdef ENABLE_AIRCOPY - if (g_current_display_screen != DISPLAY_AIRCOPY) - #endif + if (g_css_scan_mode == CSS_SCAN_MODE_OFF && + g_scan_state_dir == SCAN_STATE_DIR_OFF && + (g_current_display_screen != DISPLAY_SEARCH || + g_search_css_state == SEARCH_CSS_STATE_FOUND || + g_search_css_state == SEARCH_CSS_STATE_FAILED || + g_search_css_state == SEARCH_CSS_STATE_REPEAT)) { - if (g_css_scan_mode == CSS_SCAN_MODE_OFF && - g_scan_state_dir == SCAN_STATE_DIR_OFF && - (g_current_display_screen != DISPLAY_SEARCH || - g_search_css_state == SEARCH_CSS_STATE_FOUND || - g_search_css_state == SEARCH_CSS_STATE_FAILED || - g_search_css_state == SEARCH_CSS_STATE_REPEAT)) - { - - #ifdef ENABLE_KEYLOCK + #ifdef ENABLE_KEYLOCK if (g_eeprom.config.setting.auto_key_lock != 0 && - g_key_lock_tick_500ms > 0 && + g_key_lock_tick_500ms > 0 && !g_dtmf_input_mode && - g_input_box_index == 0 && - g_current_display_screen != DISPLAY_MENU) + g_input_box_index == 0 && + g_current_display_screen != DISPLAY_MENU) { if (--g_key_lock_tick_500ms == 0) { // lock the keyboard @@ -2035,69 +2041,68 @@ void APP_time_slice_500ms(void) g_update_status = true; } } - #endif - - if (exit_menu) + #endif + + if (exit_menu) + { + g_menu_tick_10ms = 0; + + if (g_eeprom.config.setting.backlight_time == 0) { - g_menu_tick_10ms = 0; - - if (g_eeprom.config.setting.backlight_time == 0) - { - g_backlight_tick_500ms = 0; - GPIO_ClearBit(&GPIOB->DATA, GPIOB_PIN_BACKLIGHT); // turn the backlight OFF - } - - if (g_input_box_index > 0 || g_dtmf_input_mode) - AUDIO_PlayBeep(BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL); -/* - if (g_current_display_screen == DISPLAY_SEARCH) - { - BK4819_StopScan(); - - RADIO_configure_channel(0, VFO_CONFIGURE_RELOAD); - RADIO_configure_channel(1, VFO_CONFIGURE_RELOAD); - - RADIO_setup_registers(true); - } -*/ - DTMF_clear_input_box(); - - g_fkey_pressed = false; - g_input_box_index = 0; - - g_ask_to_save = false; - g_ask_to_delete = false; - - g_update_status = true; - g_update_display = true; - - { - gui_display_type_t disp = DISPLAY_INVALID; - - #ifdef ENABLE_FMRADIO - if (g_fm_radio_mode && - g_current_function != FUNCTION_RECEIVE && - g_current_function != FUNCTION_TRANSMIT && - !g_monitor_enabled) - { - disp = DISPLAY_FM; - } - #endif - - if (disp == DISPLAY_INVALID) + g_backlight_tick_500ms = 0; + GPIO_ClearBit(&GPIOB->DATA, GPIOB_PIN_BACKLIGHT); // turn the backlight OFF + } + + if (g_input_box_index > 0 || g_dtmf_input_mode) + AUDIO_PlayBeep(BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL); +/* + if (g_current_display_screen == DISPLAY_SEARCH) + { + BK4819_StopScan(); + + RADIO_configure_channel(0, VFO_CONFIGURE_RELOAD); + RADIO_configure_channel(1, VFO_CONFIGURE_RELOAD); + + RADIO_setup_registers(true); + } +*/ + DTMF_clear_input_box(); + + g_fkey_pressed = false; + g_input_box_index = 0; + + g_ask_to_save = false; + g_ask_to_delete = false; + + g_update_status = true; + g_update_display = true; + + { + gui_display_type_t disp = DISPLAY_INVALID; + + #ifdef ENABLE_FMRADIO + if (g_fm_radio_mode && + g_current_function != FUNCTION_RECEIVE && + g_current_function != FUNCTION_TRANSMIT && + !g_monitor_enabled) { - #ifndef ENABLE_CODE_SEARCH_TIMEOUT - if (g_current_display_screen != DISPLAY_SEARCH) - #endif - disp = DISPLAY_MAIN; + disp = DISPLAY_FM; } - - if (disp != DISPLAY_INVALID) - GUI_SelectNextDisplay(disp); + #endif + + if (disp == DISPLAY_INVALID) + { + #ifndef ENABLE_CODE_SEARCH_TIMEOUT + if (g_current_display_screen != DISPLAY_SEARCH) + #endif + disp = DISPLAY_MAIN; } + + if (disp != DISPLAY_INVALID) + GUI_SelectNextDisplay(disp); } } - } + } } if (g_current_function != FUNCTION_POWER_SAVE && g_current_function != FUNCTION_TRANSMIT) @@ -2496,7 +2501,7 @@ static void APP_process_key(const key_code_t Key, const bool key_pressed, const if (key_held) { // unlock the keypad - g_eeprom.config.setting.g_eeprom.key_lock = false; + g_eeprom.config.setting.key_lock = false; g_request_save_settings = true; g_update_status = true; diff --git a/app/generic.c b/app/generic.c index 1c9e81a..f65f1c2 100644 --- a/app/generic.c +++ b/app/generic.c @@ -59,7 +59,7 @@ void GENERIC_Key_F(bool key_pressed, bool key_held) g_another_voice_id = g_eeprom.config.setting.key_lock ? VOICE_ID_UNLOCK : VOICE_ID_LOCK; #endif - g_eeprom.config.setting.key_lock = (g_eeprom.key_lock + 1) & 1u; + g_eeprom.config.setting.key_lock = (g_eeprom.config.setting.key_lock + 1) & 1u; g_request_save_settings = true; g_update_status = true; diff --git a/driver/bk1080-regs.h b/driver/bk1080-regs.h index 49dfdfc..c836a57 100644 --- a/driver/bk1080-regs.h +++ b/driver/bk1080-regs.h @@ -17,7 +17,7 @@ #ifndef BK1080_REGS_H #define BK1080_REGS_H -enum BK1080_Register_t { +enum BK1080_register_e { BK1080_REG_00 = 0x00U, BK1080_REG_02_POWER_CONFIGURATION = 0x02U, BK1080_REG_03_CHANNEL = 0x03U, @@ -26,8 +26,7 @@ enum BK1080_Register_t { BK1080_REG_10 = 0x0AU, BK1080_REG_25_INTERNAL = 0x19U, }; - -typedef enum BK1080_Register_t BK1080_Register_t; +typedef enum BK1080_register_e BK1080_register_t; // REG 07 diff --git a/driver/bk1080.c b/driver/bk1080.c index 939227d..ed86c44 100644 --- a/driver/bk1080.c +++ b/driver/bk1080.c @@ -179,7 +179,7 @@ void BK1080_Init(const uint16_t frequency, const bool initialise) } } -uint16_t BK1080_ReadRegister(BK1080_Register_t Register) +uint16_t BK1080_ReadRegister(BK1080_register_t Register) { uint8_t Value[2]; I2C_Start(); @@ -190,7 +190,7 @@ uint16_t BK1080_ReadRegister(BK1080_Register_t Register) return (Value[0] << 8) | Value[1]; } -void BK1080_WriteRegister(BK1080_Register_t Register, uint16_t Value) +void BK1080_WriteRegister(BK1080_register_t Register, uint16_t Value) { I2C_Start(); I2C_Write(0x80); diff --git a/driver/bk1080.h b/driver/bk1080.h index efc4fb2..e5c3ff8 100644 --- a/driver/bk1080.h +++ b/driver/bk1080.h @@ -28,8 +28,8 @@ extern uint16_t BK1080_freq_base; extern int16_t BK1080_freq_offset; void BK1080_Init(const uint16_t frequency, const bool initialise); -uint16_t BK1080_ReadRegister(BK1080_Register_t Register); -void BK1080_WriteRegister(BK1080_Register_t Register, uint16_t Value); +uint16_t BK1080_ReadRegister(BK1080_register_t Register); +void BK1080_WriteRegister(BK1080_register_t Register, uint16_t Value); void BK1080_Mute(const bool Mute); void BK1080_SetFrequency(uint16_t Frequency); int16_t BK1080_get_freq_offset(const uint16_t Frequency); diff --git a/firmware.bin b/firmware.bin index 74acad6..67f381e 100644 Binary files a/firmware.bin and b/firmware.bin differ diff --git a/firmware.packed.bin b/firmware.packed.bin index 8e1c23e..4753d23 100644 Binary files a/firmware.packed.bin and b/firmware.packed.bin differ diff --git a/settings.c b/settings.c index 4c934ad..3bbe144 100644 --- a/settings.c +++ b/settings.c @@ -308,9 +308,9 @@ void SETTINGS_read_eeprom(void) } void SETTINGS_write_eeprom_config(void) -{ // save the entire EEPROM contents +{ // save the entire EEPROM config contents uint32_t index; - for (index = 0; index < sizeof(g_eeprom); index += 8) + for (index = 0; index < sizeof(g_eeprom.config); index += 8) EEPROM_WriteBuffer8(index, (uint8_t *)(&g_eeprom) + index); } diff --git a/ui/main.c b/ui/main.c index b06c658..aa02e84 100644 --- a/ui/main.c +++ b/ui/main.c @@ -257,8 +257,8 @@ void UI_drawBars(uint8_t *p, const unsigned int level) char s[16]; #ifdef ENABLE_KEYLOCK - if (g_eeprom.key_lock && g_keypad_locked > 0) - return false; // display is in use + if (g_eeprom.config.setting.key_lock && g_keypad_locked > 0) + return false; // display is in use #endif if (g_current_function == FUNCTION_TRANSMIT || @@ -446,14 +446,14 @@ void UI_DisplayMain(void) } #ifdef ENABLE_KEYLOCK - if (g_eeprom.config.setting.key_lock && g_keypad_locked > 0) - { // tell user how to unlock the keyboard - backlight_turn_on(10); // 5 seconds - UI_PrintString("Long press #", 0, LCD_WIDTH, 1, 8); - UI_PrintString("to unlock", 0, LCD_WIDTH, 3, 8); - ST7565_BlitFullScreen(); - return; - } + if (g_eeprom.config.setting.key_lock && g_keypad_locked > 0) + { // tell user how to unlock the keyboard + backlight_turn_on(10); // 5 seconds + UI_PrintString("Long press #", 0, LCD_WIDTH, 1, 8); + UI_PrintString("to unlock", 0, LCD_WIDTH, 3, 8); + ST7565_BlitFullScreen(); + return; + } #endif for (vfo_num = 0; vfo_num < 2; vfo_num++)