From ff7cb37c451dabeb57a25824bef9eabd160bf497 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Fri, 5 Apr 2024 04:26:29 +0100 Subject: [PATCH] SubGHz: Refactor last settings logic --- .../scenes/subghz_scene_frequency_analyzer.c | 3 - .../subghz/scenes/subghz_scene_read_raw.c | 2 - .../subghz/scenes/subghz_scene_receiver.c | 4 - .../scenes/subghz_scene_receiver_config.c | 10 - applications/main/subghz/subghz.c | 7 - .../main/subghz/subghz_last_settings.c | 436 ++++++------------ .../main/subghz/subghz_last_settings.h | 13 +- 7 files changed, 158 insertions(+), 317 deletions(-) diff --git a/applications/main/subghz/scenes/subghz_scene_frequency_analyzer.c b/applications/main/subghz/scenes/subghz_scene_frequency_analyzer.c index 308f6dbb33..d72cf0a57c 100644 --- a/applications/main/subghz/scenes/subghz_scene_frequency_analyzer.c +++ b/applications/main/subghz/scenes/subghz_scene_frequency_analyzer.c @@ -60,9 +60,6 @@ bool subghz_scene_frequency_analyzer_on_event(void* context, SceneManagerEvent e subghz_frequency_analyzer_get_frequency_to_save(subghz->subghz_frequency_analyzer); if(frequency > 0) { subghz->last_settings->frequency = frequency; -#ifdef FURI_DEBUG - subghz_last_settings_log(subghz->last_settings); -#endif // Disable Hopping before opening the receiver scene! if(subghz->last_settings->enable_hopping) { subghz->last_settings->enable_hopping = false; diff --git a/applications/main/subghz/scenes/subghz_scene_read_raw.c b/applications/main/subghz/scenes/subghz_scene_read_raw.c index ca12689178..46f22b0807 100644 --- a/applications/main/subghz/scenes/subghz_scene_read_raw.c +++ b/applications/main/subghz/scenes/subghz_scene_read_raw.c @@ -104,14 +104,12 @@ void subghz_scene_read_raw_on_enter(void* context) { if(subghz_rx_key_state_get(subghz) != SubGhzRxKeyStateBack) { subghz_rx_key_state_set(subghz, SubGhzRxKeyStateIDLE); -#if SUBGHZ_LAST_SETTING_SAVE_PRESET if(furi_string_empty(file_name)) { subghz_txrx_set_preset_internal( subghz->txrx, subghz->last_settings->frequency, subghz->last_settings->preset_index); } -#endif } subghz_scene_read_raw_update_statusbar(subghz); diff --git a/applications/main/subghz/scenes/subghz_scene_receiver.c b/applications/main/subghz/scenes/subghz_scene_receiver.c index cd300e7c13..32ad1d2c95 100644 --- a/applications/main/subghz/scenes/subghz_scene_receiver.c +++ b/applications/main/subghz/scenes/subghz_scene_receiver.c @@ -250,12 +250,8 @@ void subghz_scene_receiver_on_enter(void* context) { FuriString* item_time = furi_string_alloc(); if(subghz_rx_key_state_get(subghz) == SubGhzRxKeyStateIDLE) { -#if SUBGHZ_LAST_SETTING_SAVE_PRESET subghz_txrx_set_preset_internal( subghz->txrx, subghz->last_settings->frequency, subghz->last_settings->preset_index); -#else - subghz_txrx_set_default_preset(subghz->txrx, subghz->last_settings->frequency); -#endif subghz->filter = subghz->last_settings->filter; subghz_txrx_receiver_set_filter(subghz->txrx, subghz->filter); diff --git a/applications/main/subghz/scenes/subghz_scene_receiver_config.c b/applications/main/subghz/scenes/subghz_scene_receiver_config.c index ce0d82ee6b..dc91d7e6ab 100644 --- a/applications/main/subghz/scenes/subghz_scene_receiver_config.c +++ b/applications/main/subghz/scenes/subghz_scene_receiver_config.c @@ -410,14 +410,10 @@ static void subghz_scene_receiver_config_var_list_enter_callback(void* context, subghz->view_dispatcher, SubGhzCustomEventSceneSettingLock); } else if(index == SubGhzSettingIndexResetToDefault) { // Reset all values to default state! -#if SUBGHZ_LAST_SETTING_SAVE_PRESET subghz_txrx_set_preset_internal( subghz->txrx, SUBGHZ_LAST_SETTING_DEFAULT_FREQUENCY, SUBGHZ_LAST_SETTING_DEFAULT_PRESET); -#else - subghz_txrx_set_default_preset(subghz->txrx, SUBGHZ_LAST_SETTING_DEFAULT_FREQUENCY); -#endif SubGhzSetting* setting = subghz_txrx_get_setting(subghz->txrx); SubGhzRadioPreset preset = subghz_txrx_get_preset(subghz->txrx); const char* preset_name = furi_string_get_cstr(preset.name); @@ -449,9 +445,6 @@ static void subghz_scene_receiver_config_var_list_enter_callback(void* context, variable_item_list_set_selected_item(subghz->variable_item_list, default_index); variable_item_list_reset(subghz->variable_item_list); -#ifdef FURI_DEBUG - subghz_last_settings_log(subghz->last_settings); -#endif subghz_last_settings_save(subghz->last_settings); view_dispatcher_send_custom_event( @@ -745,9 +738,6 @@ void subghz_scene_receiver_config_on_exit(void* context) { variable_item_list_set_selected_item(subghz->variable_item_list, 0); variable_item_list_reset(subghz->variable_item_list); -#ifdef FURI_DEBUG - subghz_last_settings_log(subghz->last_settings); -#endif subghz_last_settings_save(subghz->last_settings); scene_manager_set_scene_state( subghz->scene_manager, SubGhzSceneReadRAW, SubGhzCustomEventManagerNoSet); diff --git a/applications/main/subghz/subghz.c b/applications/main/subghz/subghz.c index a884759dd6..7d21bb2cf3 100644 --- a/applications/main/subghz/subghz.c +++ b/applications/main/subghz/subghz.c @@ -207,16 +207,9 @@ SubGhz* subghz_alloc(bool alloc_for_tx_only) { subghz->last_settings = subghz_last_settings_alloc(); size_t preset_count = subghz_setting_get_preset_count(setting); subghz_last_settings_load(subghz->last_settings, preset_count); -#ifdef FURI_DEBUG - subghz_last_settings_log(subghz->last_settings); -#endif if(!alloc_for_tx_only) { -#if SUBGHZ_LAST_SETTING_SAVE_PRESET subghz_txrx_set_preset_internal( subghz->txrx, subghz->last_settings->frequency, subghz->last_settings->preset_index); -#else - subghz_txrx_set_default_preset(subghz->txrx, subghz->last_settings->frequency); -#endif subghz->history = subghz_history_alloc(); } diff --git a/applications/main/subghz/subghz_last_settings.c b/applications/main/subghz/subghz_last_settings.c index 0ab6213067..7f9aa22a88 100644 --- a/applications/main/subghz/subghz_last_settings.c +++ b/applications/main/subghz/subghz_last_settings.c @@ -4,26 +4,24 @@ #define TAG "SubGhzLastSettings" #define SUBGHZ_LAST_SETTING_FILE_TYPE "Flipper SubGhz Last Setting File" -#define SUBGHZ_LAST_SETTING_FILE_VERSION 1 +#define SUBGHZ_LAST_SETTING_FILE_VERSION 2 #define SUBGHZ_LAST_SETTINGS_PATH EXT_PATH("subghz/assets/last_subghz.settings") #define SUBGHZ_LAST_SETTING_FIELD_FREQUENCY "Frequency" #define SUBGHZ_LAST_SETTING_FIELD_PRESET "Preset" // AKA Modulation #define SUBGHZ_LAST_SETTING_FIELD_FREQUENCY_ANALYZER_FEEDBACK_LEVEL "FeedbackLevel" #define SUBGHZ_LAST_SETTING_FIELD_FREQUENCY_ANALYZER_TRIGGER "FATrigger" -#define SUBGHZ_LAST_SETTING_FIELD_EXTERNAL_MODULE_ENABLED "External" -#define SUBGHZ_LAST_SETTING_FIELD_EXTERNAL_MODULE_POWER "ExtPower" -#define SUBGHZ_LAST_SETTING_FIELD_PROTOCOL_FILE_NAMES "TimestampNames" -#define SUBGHZ_LAST_SETTING_FIELD_EXTERNAL_MODULE_POWER_AMP "ExtPowerAmp" -#define SUBGHZ_LAST_SETTING_FIELD_GPS "Gps" +#define SUBGHZ_LAST_SETTING_FIELD_PROTOCOL_FILE_NAMES "ProtocolNames" #define SUBGHZ_LAST_SETTING_FIELD_HOPPING_ENABLE "Hopping" -#define SUBGHZ_LAST_SETTING_FIELD_REMOVE_DUPLICATES "RemoveDuplicates" #define SUBGHZ_LAST_SETTING_FIELD_IGNORE_FILTER "IgnoreFilter" #define SUBGHZ_LAST_SETTING_FIELD_FILTER "Filter" #define SUBGHZ_LAST_SETTING_FIELD_RSSI_THRESHOLD "RSSI" +#define SUBGHZ_LAST_SETTING_FIELD_DELETE_OLD "DelOldSignals" + +#define SUBGHZ_LAST_SETTING_FIELD_GPS_BAUDRATE "GpsBaudrate" +#define SUBGHZ_LAST_SETTING_FIELD_REMOVE_DUPLICATES "RemoveDuplicates" #define SUBGHZ_LAST_SETTING_FIELD_REPEATER "Repeater" #define SUBGHZ_LAST_SETTING_FIELD_ENABLE_SOUND "Sound" -#define SUBGHZ_LAST_SETTING_FIELD_DELETE_OLD "DelOldSignals" #define SUBGHZ_LAST_SETTING_FIELD_AUTOSAVE "Autosave" SubGhzLastSettings* subghz_last_settings_alloc(void) { @@ -39,202 +37,145 @@ void subghz_last_settings_free(SubGhzLastSettings* instance) { void subghz_last_settings_load(SubGhzLastSettings* instance, size_t preset_count) { furi_assert(instance); + // Default values (all others set to 0, if read from file fails these are used) + instance->frequency = SUBGHZ_LAST_SETTING_DEFAULT_FREQUENCY; + instance->preset_index = SUBGHZ_LAST_SETTING_DEFAULT_PRESET; + instance->frequency_analyzer_feedback_level = + SUBGHZ_LAST_SETTING_FREQUENCY_ANALYZER_FEEDBACK_LEVEL; + instance->frequency_analyzer_trigger = SUBGHZ_LAST_SETTING_FREQUENCY_ANALYZER_TRIGGER; + // See bin_raw_value in scenes/subghz_scene_receiver_config.c + instance->filter = SubGhzProtocolFlag_Decodable; + instance->rssi = SUBGHZ_RAW_THRESHOLD_MIN; + Storage* storage = furi_record_open(RECORD_STORAGE); FlipperFormat* fff_data_file = flipper_format_file_alloc(storage); - uint32_t temp_frequency = 0; - uint32_t temp_frequency_analyzer_feedback_level = 0; - float temp_frequency_analyzer_trigger = 0; - bool temp_external_module_enabled = false; - bool temp_external_module_power_5v_disable = false; - bool temp_external_module_power_amp = false; - bool temp_protocol_file_names = false; - bool temp_enable_hopping = false; - bool temp_enable_sound = false; - uint32_t temp_repeater_state; - bool temp_remove_duplicates = false; - bool temp_delete_old_sig = false; - bool temp_autosave = false; - uint32_t temp_ignore_filter = 0; - uint32_t temp_filter = 0; - float temp_rssi = 0; - uint32_t temp_preset = 0; - - bool preset_was_read = false; - bool rssi_was_read = false; - bool filter_was_read = false; - bool ignore_filter_was_read = false; - bool remove_duplicates_was_read = false; - bool frequency_analyzer_feedback_level_was_read = false; - bool frequency_analyzer_trigger_was_read = false; - bool repeater_was_read = false; - bool enable_sound_was_read = false; + FuriString* temp_str = furi_string_alloc(); + uint32_t config_version = 0; - uint32_t temp_gps_baudrate = 0; - - if(FSE_OK == storage_sd_status(storage) && SUBGHZ_LAST_SETTINGS_PATH && + if(FSE_OK == storage_sd_status(storage) && flipper_format_file_open_existing(fff_data_file, SUBGHZ_LAST_SETTINGS_PATH)) { - preset_was_read = flipper_format_read_uint32( - fff_data_file, SUBGHZ_LAST_SETTING_FIELD_PRESET, (uint32_t*)&temp_preset, 1); - flipper_format_read_uint32( - fff_data_file, SUBGHZ_LAST_SETTING_FIELD_FREQUENCY, (uint32_t*)&temp_frequency, 1); - frequency_analyzer_feedback_level_was_read = flipper_format_read_uint32( - fff_data_file, - SUBGHZ_LAST_SETTING_FIELD_FREQUENCY_ANALYZER_FEEDBACK_LEVEL, - (uint32_t*)&temp_frequency_analyzer_feedback_level, - 1); - frequency_analyzer_trigger_was_read = flipper_format_read_float( - fff_data_file, - SUBGHZ_LAST_SETTING_FIELD_FREQUENCY_ANALYZER_TRIGGER, - (float*)&temp_frequency_analyzer_trigger, - 1); - flipper_format_read_bool( - fff_data_file, - SUBGHZ_LAST_SETTING_FIELD_EXTERNAL_MODULE_ENABLED, - (bool*)&temp_external_module_enabled, - 1); - flipper_format_read_bool( - fff_data_file, - SUBGHZ_LAST_SETTING_FIELD_EXTERNAL_MODULE_POWER, - (bool*)&temp_external_module_power_5v_disable, - 1); - flipper_format_read_bool( - fff_data_file, - SUBGHZ_LAST_SETTING_FIELD_PROTOCOL_FILE_NAMES, - (bool*)&temp_protocol_file_names, - 1); - flipper_format_read_bool( - fff_data_file, - SUBGHZ_LAST_SETTING_FIELD_EXTERNAL_MODULE_POWER_AMP, - (bool*)&temp_external_module_power_amp, - 1); - flipper_format_read_uint32( - fff_data_file, SUBGHZ_LAST_SETTING_FIELD_GPS, (uint32_t*)&temp_gps_baudrate, 1); - flipper_format_read_bool( - fff_data_file, - SUBGHZ_LAST_SETTING_FIELD_HOPPING_ENABLE, - (bool*)&temp_enable_hopping, - 1); - rssi_was_read = flipper_format_read_float( - fff_data_file, SUBGHZ_LAST_SETTING_FIELD_RSSI_THRESHOLD, (float*)&temp_rssi, 1); - remove_duplicates_was_read = flipper_format_read_bool( - fff_data_file, - SUBGHZ_LAST_SETTING_FIELD_REMOVE_DUPLICATES, - (bool*)&temp_remove_duplicates, - 1); - ignore_filter_was_read = flipper_format_read_uint32( - fff_data_file, - SUBGHZ_LAST_SETTING_FIELD_IGNORE_FILTER, - (uint32_t*)&temp_ignore_filter, - 1); - filter_was_read = flipper_format_read_uint32( - fff_data_file, SUBGHZ_LAST_SETTING_FIELD_FILTER, (uint32_t*)&temp_filter, 1); - repeater_was_read = flipper_format_read_uint32( - fff_data_file, SUBGHZ_LAST_SETTING_FIELD_REPEATER, (uint32_t*)&temp_repeater_state, 1); - enable_sound_was_read = flipper_format_read_bool( - fff_data_file, SUBGHZ_LAST_SETTING_FIELD_ENABLE_SOUND, (bool*)&temp_enable_sound, 1); - flipper_format_read_bool( - fff_data_file, SUBGHZ_LAST_SETTING_FIELD_DELETE_OLD, (bool*)&temp_delete_old_sig, 1); - flipper_format_read_bool( - fff_data_file, SUBGHZ_LAST_SETTING_FIELD_AUTOSAVE, (bool*)&temp_autosave, 1); - + do { + if(!flipper_format_read_header(fff_data_file, temp_str, &config_version)) break; + if((strcmp(furi_string_get_cstr(temp_str), SUBGHZ_LAST_SETTING_FILE_TYPE) != 0) || + (config_version != SUBGHZ_LAST_SETTING_FILE_VERSION)) { + break; + } + + if(!flipper_format_read_uint32( + fff_data_file, SUBGHZ_LAST_SETTING_FIELD_FREQUENCY, &instance->frequency, 1)) { + flipper_format_rewind(fff_data_file); + } + if(!flipper_format_read_uint32( + fff_data_file, SUBGHZ_LAST_SETTING_FIELD_PRESET, &instance->preset_index, 1)) { + flipper_format_rewind(fff_data_file); + } + if(!flipper_format_read_uint32( + fff_data_file, + SUBGHZ_LAST_SETTING_FIELD_FREQUENCY_ANALYZER_FEEDBACK_LEVEL, + &instance->frequency_analyzer_feedback_level, + 1)) { + flipper_format_rewind(fff_data_file); + } + if(!flipper_format_read_float( + fff_data_file, + SUBGHZ_LAST_SETTING_FIELD_FREQUENCY_ANALYZER_TRIGGER, + &instance->frequency_analyzer_trigger, + 1)) { + flipper_format_rewind(fff_data_file); + } + if(!flipper_format_read_bool( + fff_data_file, + SUBGHZ_LAST_SETTING_FIELD_PROTOCOL_FILE_NAMES, + &instance->protocol_file_names, + 1)) { + flipper_format_rewind(fff_data_file); + } + if(!flipper_format_read_bool( + fff_data_file, + SUBGHZ_LAST_SETTING_FIELD_HOPPING_ENABLE, + &instance->enable_hopping, + 1)) { + flipper_format_rewind(fff_data_file); + } + if(!flipper_format_read_uint32( + fff_data_file, + SUBGHZ_LAST_SETTING_FIELD_IGNORE_FILTER, + &instance->ignore_filter, + 1)) { + flipper_format_rewind(fff_data_file); + } + if(!flipper_format_read_uint32( + fff_data_file, SUBGHZ_LAST_SETTING_FIELD_FILTER, &instance->filter, 1)) { + flipper_format_rewind(fff_data_file); + } + if(!flipper_format_read_float( + fff_data_file, SUBGHZ_LAST_SETTING_FIELD_RSSI_THRESHOLD, &instance->rssi, 1)) { + flipper_format_rewind(fff_data_file); + } + if(!flipper_format_read_bool( + fff_data_file, + SUBGHZ_LAST_SETTING_FIELD_DELETE_OLD, + &instance->delete_old_signals, + 1)) { + flipper_format_rewind(fff_data_file); + } + + if(!flipper_format_read_uint32( + fff_data_file, + SUBGHZ_LAST_SETTING_FIELD_GPS_BAUDRATE, + &instance->gps_baudrate, + 1)) { + flipper_format_rewind(fff_data_file); + } + if(!flipper_format_read_bool( + fff_data_file, + SUBGHZ_LAST_SETTING_FIELD_REMOVE_DUPLICATES, + &instance->remove_duplicates, + 1)) { + flipper_format_rewind(fff_data_file); + } + if(!flipper_format_read_uint32( + fff_data_file, + SUBGHZ_LAST_SETTING_FIELD_REPEATER, + &instance->repeater_state, + 1)) { + flipper_format_rewind(fff_data_file); + } + if(!flipper_format_read_bool( + fff_data_file, + SUBGHZ_LAST_SETTING_FIELD_ENABLE_SOUND, + &instance->enable_sound, + 1)) { + flipper_format_rewind(fff_data_file); + } + if(!flipper_format_read_bool( + fff_data_file, SUBGHZ_LAST_SETTING_FIELD_AUTOSAVE, &instance->autosave, 1)) { + flipper_format_rewind(fff_data_file); + } + } while(0); } else { FURI_LOG_E(TAG, "Error open file %s", SUBGHZ_LAST_SETTINGS_PATH); } - if(temp_frequency == 0 || !furi_hal_subghz_is_tx_allowed(temp_frequency)) { - FURI_LOG_W(TAG, "Last used frequency not found or can't be used!"); - - instance->frequency = SUBGHZ_LAST_SETTING_DEFAULT_FREQUENCY; - instance->preset_index = SUBGHZ_LAST_SETTING_DEFAULT_PRESET; - instance->frequency_analyzer_feedback_level = - SUBGHZ_LAST_SETTING_FREQUENCY_ANALYZER_FEEDBACK_LEVEL; - instance->frequency_analyzer_trigger = SUBGHZ_LAST_SETTING_FREQUENCY_ANALYZER_TRIGGER; - instance->external_module_enabled = false; - instance->protocol_file_names = false; - instance->external_module_power_amp = false; - instance->gps_baudrate = 0; - instance->enable_hopping = false; - instance->remove_duplicates = false; - instance->repeater_state = 0; - instance->enable_sound = 0; - instance->delete_old_signals = false; - instance->autosave = false; - instance->ignore_filter = 0x00; - // See bin_raw_value in applications/main/subghz/scenes/subghz_scene_receiver_config.c - instance->filter = SubGhzProtocolFlag_Decodable; - instance->rssi = SUBGHZ_RAW_THRESHOLD_MIN; - } else { - instance->frequency = temp_frequency; - instance->frequency_analyzer_feedback_level = - frequency_analyzer_feedback_level_was_read ? - temp_frequency_analyzer_feedback_level : - SUBGHZ_LAST_SETTING_FREQUENCY_ANALYZER_FEEDBACK_LEVEL; - - instance->frequency_analyzer_trigger = frequency_analyzer_trigger_was_read ? - temp_frequency_analyzer_trigger : - SUBGHZ_LAST_SETTING_FREQUENCY_ANALYZER_TRIGGER; - - if(!preset_was_read) { - FURI_LOG_W(TAG, "Preset was not read. Set default"); - instance->preset_index = SUBGHZ_LAST_SETTING_DEFAULT_PRESET; - } else if(temp_preset > (uint32_t)preset_count - 1) { - FURI_LOG_W( - TAG, - "Last used preset out of range. Preset to set: %ld, Max index: %ld. Set default", - temp_preset, - (uint32_t)preset_count - 1); - instance->preset_index = SUBGHZ_LAST_SETTING_DEFAULT_PRESET; - } else { - instance->preset_index = temp_preset; - } - instance->external_module_enabled = temp_external_module_enabled; - - instance->external_module_power_5v_disable = temp_external_module_power_5v_disable; - - instance->protocol_file_names = temp_protocol_file_names; - - instance->delete_old_signals = temp_delete_old_sig; - - instance->autosave = temp_autosave; - - // External power amp CC1101 - instance->external_module_power_amp = temp_external_module_power_amp; - - instance->rssi = rssi_was_read ? temp_rssi : SUBGHZ_RAW_THRESHOLD_MIN; - instance->enable_hopping = temp_enable_hopping; - instance->repeater_state = repeater_was_read ? temp_repeater_state : 0; - instance->enable_sound = enable_sound_was_read ? temp_enable_sound : false; - instance->remove_duplicates = remove_duplicates_was_read ? temp_remove_duplicates : false; - instance->ignore_filter = ignore_filter_was_read ? temp_ignore_filter : 0x00; -#if SUBGHZ_LAST_SETTING_SAVE_BIN_RAW - instance->filter = filter_was_read ? temp_filter : SubGhzProtocolFlag_Decodable; -#else - if(filter_was_read) { - instance->filter = temp_filter != SubGhzProtocolFlag_Decodable ? - SubGhzProtocolFlag_Decodable : - temp_filter; - } else { - instance->filter = SubGhzProtocolFlag_Decodable; - } -#endif - // Set globally in furi hal - furi_hal_subghz_set_ext_power_amp(instance->external_module_power_amp); - - instance->gps_baudrate = temp_gps_baudrate; - } + furi_string_free(temp_str); flipper_format_file_close(fff_data_file); flipper_format_free(fff_data_file); furi_record_close(RECORD_STORAGE); + + if(instance->frequency == 0 || !furi_hal_subghz_is_tx_allowed(instance->frequency)) { + instance->frequency = SUBGHZ_LAST_SETTING_DEFAULT_FREQUENCY; + } + + if(instance->preset_index > (uint32_t)preset_count - 1) { + instance->preset_index = SUBGHZ_LAST_SETTING_DEFAULT_PRESET; + } } bool subghz_last_settings_save(SubGhzLastSettings* instance) { furi_assert(instance); -#if SUBGHZ_LAST_SETTING_SAVE_BIN_RAW != true - instance->filter = SubGhzProtocolFlag_Decodable; -#endif bool saved = false; Storage* storage = furi_record_open(RECORD_STORAGE); FlipperFormat* file = flipper_format_file_alloc(storage); @@ -251,96 +192,76 @@ bool subghz_last_settings_save(SubGhzLastSettings* instance) { if(!flipper_format_write_header_cstr( file, SUBGHZ_LAST_SETTING_FILE_TYPE, SUBGHZ_LAST_SETTING_FILE_VERSION)) break; - if(!flipper_format_insert_or_update_uint32( - file, SUBGHZ_LAST_SETTING_FIELD_PRESET, &instance->preset_index, 1)) { + if(!flipper_format_write_uint32( + file, SUBGHZ_LAST_SETTING_FIELD_FREQUENCY, &instance->frequency, 1)) { break; } - if(!flipper_format_insert_or_update_uint32( - file, SUBGHZ_LAST_SETTING_FIELD_FREQUENCY, &instance->frequency, 1)) { + if(!flipper_format_write_uint32( + file, SUBGHZ_LAST_SETTING_FIELD_PRESET, &instance->preset_index, 1)) { break; } - if(!flipper_format_insert_or_update_uint32( + if(!flipper_format_write_uint32( file, SUBGHZ_LAST_SETTING_FIELD_FREQUENCY_ANALYZER_FEEDBACK_LEVEL, &instance->frequency_analyzer_feedback_level, 1)) { break; } - if(!flipper_format_insert_or_update_float( + if(!flipper_format_write_float( file, SUBGHZ_LAST_SETTING_FIELD_FREQUENCY_ANALYZER_TRIGGER, &instance->frequency_analyzer_trigger, 1)) { break; } - if(!flipper_format_insert_or_update_bool( + if(!flipper_format_write_bool( file, - SUBGHZ_LAST_SETTING_FIELD_EXTERNAL_MODULE_ENABLED, - &instance->external_module_enabled, + SUBGHZ_LAST_SETTING_FIELD_PROTOCOL_FILE_NAMES, + &instance->protocol_file_names, 1)) { break; } - if(!flipper_format_insert_or_update_bool( - file, - SUBGHZ_LAST_SETTING_FIELD_EXTERNAL_MODULE_POWER, - &instance->external_module_power_5v_disable, - 1)) { + if(!flipper_format_write_bool( + file, SUBGHZ_LAST_SETTING_FIELD_HOPPING_ENABLE, &instance->enable_hopping, 1)) { break; } - if(!flipper_format_insert_or_update_bool( - file, - SUBGHZ_LAST_SETTING_FIELD_PROTOCOL_FILE_NAMES, - &instance->protocol_file_names, - 1)) { + if(!flipper_format_write_uint32( + file, SUBGHZ_LAST_SETTING_FIELD_IGNORE_FILTER, &instance->ignore_filter, 1)) { break; } - if(!flipper_format_insert_or_update_bool( - file, - SUBGHZ_LAST_SETTING_FIELD_EXTERNAL_MODULE_POWER_AMP, - &instance->external_module_power_amp, - 1)) { + if(!flipper_format_write_uint32( + file, SUBGHZ_LAST_SETTING_FIELD_FILTER, &instance->filter, 1)) { break; } - if(!flipper_format_insert_or_update_uint32( - file, SUBGHZ_LAST_SETTING_FIELD_GPS, &instance->gps_baudrate, 1)) { + if(!flipper_format_write_float( + file, SUBGHZ_LAST_SETTING_FIELD_RSSI_THRESHOLD, &instance->rssi, 1)) { break; } - if(!flipper_format_insert_or_update_bool( - file, SUBGHZ_LAST_SETTING_FIELD_HOPPING_ENABLE, &instance->enable_hopping, 1)) { + if(!flipper_format_write_bool( + file, SUBGHZ_LAST_SETTING_FIELD_DELETE_OLD, &instance->delete_old_signals, 1)) { break; } - if(!flipper_format_insert_or_update_float( - file, SUBGHZ_LAST_SETTING_FIELD_RSSI_THRESHOLD, &instance->rssi, 1)) { + + if(!flipper_format_write_uint32( + file, SUBGHZ_LAST_SETTING_FIELD_GPS_BAUDRATE, &instance->gps_baudrate, 1)) { break; } - if(!flipper_format_insert_or_update_bool( + if(!flipper_format_write_bool( file, SUBGHZ_LAST_SETTING_FIELD_REMOVE_DUPLICATES, &instance->remove_duplicates, 1)) { break; } - if(!flipper_format_insert_or_update_uint32( - file, SUBGHZ_LAST_SETTING_FIELD_IGNORE_FILTER, &instance->ignore_filter, 1)) { - break; - } - if(!flipper_format_insert_or_update_uint32( - file, SUBGHZ_LAST_SETTING_FIELD_FILTER, &instance->filter, 1)) { - break; - } - if(!flipper_format_insert_or_update_uint32( + if(!flipper_format_write_uint32( file, SUBGHZ_LAST_SETTING_FIELD_REPEATER, &instance->repeater_state, 1)) { break; } - if(!flipper_format_insert_or_update_bool( + if(!flipper_format_write_bool( file, SUBGHZ_LAST_SETTING_FIELD_ENABLE_SOUND, &instance->enable_sound, 1)) { break; } - if(!flipper_format_insert_or_update_bool( - file, SUBGHZ_LAST_SETTING_FIELD_DELETE_OLD, &instance->delete_old_signals, 1)) { - break; - } - if(!flipper_format_insert_or_update_bool( + if(!flipper_format_write_bool( file, SUBGHZ_LAST_SETTING_FIELD_AUTOSAVE, &instance->autosave, 1)) { break; } @@ -357,54 +278,3 @@ bool subghz_last_settings_save(SubGhzLastSettings* instance) { return saved; } - -const char* LOG_ON = "ON"; -const char* LOG_OFF = "OFF"; - -static inline const char* - subghz_last_settings_log_filter_get_index(uint32_t filter, uint32_t flag) { - return READ_BIT(filter, flag) > 0 ? LOG_ON : LOG_OFF; -} - -static inline const char* bool_to_char(bool value) { - return value ? LOG_ON : LOG_OFF; -} - -void subghz_last_settings_log(SubGhzLastSettings* instance) { - furi_assert(instance); - - FURI_LOG_I( - TAG, - "Frequency: %03ld.%02ld, FeedbackLevel: %ld, FATrigger: %.2f, External: %s, ExtPower: %s, TimestampNames: %s, ExtPowerAmp: %s,\n" - "GPSBaudrate: %ld, Hopping: %s,\nPreset: %ld, RSSI: %.2f, " - "BinRAW: %s, Repeater: %lu, Duplicates: %s, Autosave: %s, Starline: %s, Cars: %s, Magellan: %s, NiceFloR-S: %s, Weather: %s, TPMS: %s, Sound: %s", - instance->frequency / 1000000 % 1000, - instance->frequency / 10000 % 100, - instance->frequency_analyzer_feedback_level, - (double)instance->frequency_analyzer_trigger, - bool_to_char(instance->external_module_enabled), - bool_to_char(instance->external_module_power_5v_disable), - bool_to_char(instance->protocol_file_names), - bool_to_char(instance->external_module_power_amp), - instance->gps_baudrate, - bool_to_char(instance->enable_hopping), - instance->preset_index, - (double)instance->rssi, - subghz_last_settings_log_filter_get_index(instance->filter, SubGhzProtocolFlag_BinRAW), - instance->repeater_state, - bool_to_char(instance->remove_duplicates), - bool_to_char(instance->autosave), - subghz_last_settings_log_filter_get_index( - instance->ignore_filter, SubGhzProtocolFilter_StarLine), - subghz_last_settings_log_filter_get_index( - instance->ignore_filter, SubGhzProtocolFilter_AutoAlarms), - subghz_last_settings_log_filter_get_index( - instance->ignore_filter, SubGhzProtocolFilter_Magellan), - subghz_last_settings_log_filter_get_index( - instance->ignore_filter, SubGhzProtocolFilter_NiceFlorS), - subghz_last_settings_log_filter_get_index( - instance->ignore_filter, SubGhzProtocolFilter_Weather), - subghz_last_settings_log_filter_get_index( - instance->ignore_filter, SubGhzProtocolFilter_TPMS), - bool_to_char(instance->enable_sound)); -} diff --git a/applications/main/subghz/subghz_last_settings.h b/applications/main/subghz/subghz_last_settings.h index 6c0842a4e7..91dfbef3a8 100644 --- a/applications/main/subghz/subghz_last_settings.h +++ b/applications/main/subghz/subghz_last_settings.h @@ -7,8 +7,6 @@ #include #define SUBGHZ_LAST_SETTING_FREQUENCY_ANALYZER_TRIGGER (-93.0f) -#define SUBGHZ_LAST_SETTING_SAVE_BIN_RAW true -#define SUBGHZ_LAST_SETTING_SAVE_PRESET true // 1 = "AM650" // "AM270", "AM650", "FM238", "FM476", #define SUBGHZ_LAST_SETTING_DEFAULT_PRESET 1 @@ -21,15 +19,16 @@ typedef struct { uint32_t frequency_analyzer_feedback_level; float frequency_analyzer_trigger; bool protocol_file_names; - uint32_t gps_baudrate; bool enable_hopping; - uint32_t repeater_state; - bool enable_sound; - bool remove_duplicates; uint32_t ignore_filter; uint32_t filter; float rssi; bool delete_old_signals; + + uint32_t gps_baudrate; + bool remove_duplicates; + uint32_t repeater_state; + bool enable_sound; bool autosave; } SubGhzLastSettings; @@ -40,5 +39,3 @@ void subghz_last_settings_free(SubGhzLastSettings* instance); void subghz_last_settings_load(SubGhzLastSettings* instance, size_t preset_count); bool subghz_last_settings_save(SubGhzLastSettings* instance); - -void subghz_last_settings_log(SubGhzLastSettings* instance);