From 4f5ab0b15b23808b7ce2db92fbbdeaf4f7e4605c Mon Sep 17 00:00:00 2001 From: Dmitry422 Date: Wed, 5 Nov 2025 23:15:08 +0700 Subject: [PATCH 01/13] Start working with SubGhz_signal_settings menu --- .../main/subghz/helpers/subghz_custom_event.h | 1 + .../main/subghz/scenes/subghz_scene_config.h | 1 + .../subghz/scenes/subghz_scene_saved_menu.c | 15 +++++++- .../scenes/subghz_scene_signal_settings.c | 34 +++++++++++++++++++ applications_user/README.md | 1 - 5 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 applications/main/subghz/scenes/subghz_scene_signal_settings.c delete mode 100644 applications_user/README.md diff --git a/applications/main/subghz/helpers/subghz_custom_event.h b/applications/main/subghz/helpers/subghz_custom_event.h index e118948a0..41e704ea5 100644 --- a/applications/main/subghz/helpers/subghz_custom_event.h +++ b/applications/main/subghz/helpers/subghz_custom_event.h @@ -16,6 +16,7 @@ typedef enum { SubGhzCustomEventSceneReceiverInfoTxStop, SubGhzCustomEventSceneReceiverInfoSave, SubGhzCustomEventSceneSaveName, + SubGhzCustomEventSceneSignalSettings, SubGhzCustomEventSceneSaveSuccess, SubGhzCustomEventSceneShowErrorBack, SubGhzCustomEventSceneShowErrorOk, diff --git a/applications/main/subghz/scenes/subghz_scene_config.h b/applications/main/subghz/scenes/subghz_scene_config.h index a23a12a2b..7be062eba 100644 --- a/applications/main/subghz/scenes/subghz_scene_config.h +++ b/applications/main/subghz/scenes/subghz_scene_config.h @@ -25,3 +25,4 @@ ADD_SCENE(subghz, decode_raw, DecodeRAW) ADD_SCENE(subghz, delete_raw, DeleteRAW) ADD_SCENE(subghz, need_saving, NeedSaving) ADD_SCENE(subghz, rpc, Rpc) +ADD_SCENE(subghz, signal_settings, SignalSettings) diff --git a/applications/main/subghz/scenes/subghz_scene_saved_menu.c b/applications/main/subghz/scenes/subghz_scene_saved_menu.c index 61e362d5b..011e719a7 100644 --- a/applications/main/subghz/scenes/subghz_scene_saved_menu.c +++ b/applications/main/subghz/scenes/subghz_scene_saved_menu.c @@ -4,6 +4,7 @@ enum SubmenuIndex { SubmenuIndexEmulate, SubmenuIndexEdit, SubmenuIndexDelete, + SubmenuIndexSignalSettings }; void subghz_scene_saved_menu_submenu_callback(void* context, uint32_t index) { @@ -34,6 +35,13 @@ void subghz_scene_saved_menu_on_enter(void* context) { subghz_scene_saved_menu_submenu_callback, subghz); + submenu_add_item( + subghz->submenu, + "Signal Settings", + SubmenuIndexSignalSettings, + subghz_scene_saved_menu_submenu_callback, + subghz); + submenu_set_selected_item( subghz->submenu, scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneSavedMenu)); @@ -60,7 +68,12 @@ bool subghz_scene_saved_menu_on_event(void* context, SceneManagerEvent event) { subghz->scene_manager, SubGhzSceneSavedMenu, SubmenuIndexEdit); scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSaveName); return true; - } + } else if(event.event == SubmenuIndexSignalSettings) { + scene_manager_set_scene_state( + subghz->scene_manager, SubGhzSceneSavedMenu, SubmenuIndexSignalSettings); + scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSignalSettings); + return true; + } } return false; } diff --git a/applications/main/subghz/scenes/subghz_scene_signal_settings.c b/applications/main/subghz/scenes/subghz_scene_signal_settings.c new file mode 100644 index 000000000..1bbe6f2c8 --- /dev/null +++ b/applications/main/subghz/scenes/subghz_scene_signal_settings.c @@ -0,0 +1,34 @@ +#include "../subghz_i.h" +#include "subghz/types.h" +#include "../helpers/subghz_custom_event.h" +#include +#include +#include +#include + +void subghz_scene_signal_settings_text_input_callback(void* context) { + furi_assert(context); + SubGhz* subghz = context; + view_dispatcher_send_custom_event(subghz->view_dispatcher, SubGhzCustomEventSceneSignalSettings); +} + +void subghz_scene_signal_settings_on_enter(void* context) { + SubGhz* subghz = context; + + view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdVariableItemList); +} + +bool subghz_scene_signal_settings_on_event(void* context, SceneManagerEvent event) { + SubGhz* subghz = context; + if(event.type == SceneManagerEventTypeBack) { + scene_manager_previous_scene(subghz->scene_manager); + return true; + } + else return false; + } + + +void subghz_scene_signal_settings_on_exit(void* context) { + SubGhz* subghz = context; + +} diff --git a/applications_user/README.md b/applications_user/README.md deleted file mode 100644 index 8bb7823c1..000000000 --- a/applications_user/README.md +++ /dev/null @@ -1 +0,0 @@ -Put your custom applications in this folder. \ No newline at end of file From 7f7d1e1d32c75f6798dad8d5db1f3a2396dbb997 Mon Sep 17 00:00:00 2001 From: Dmitry422 Date: Thu, 6 Nov 2025 17:42:55 +0700 Subject: [PATCH 02/13] Signal settings gui --- .../scenes/subghz_scene_signal_settings.c | 60 ++++++++++++++++--- 1 file changed, 52 insertions(+), 8 deletions(-) diff --git a/applications/main/subghz/scenes/subghz_scene_signal_settings.c b/applications/main/subghz/scenes/subghz_scene_signal_settings.c index 1bbe6f2c8..3c3e83f6f 100644 --- a/applications/main/subghz/scenes/subghz_scene_signal_settings.c +++ b/applications/main/subghz/scenes/subghz_scene_signal_settings.c @@ -1,20 +1,63 @@ #include "../subghz_i.h" #include "subghz/types.h" #include "../helpers/subghz_custom_event.h" -#include -#include #include -#include +#include + +#define COUNTER_MODE_COUNT 7 +const char* const counter_mode_text[COUNTER_MODE_COUNT] = { + "System", + "Mode 1", + "Mode 2", + "Mode 3", + "Mode 4", + "Mode 5", + "Mode 6", +}; + +int8_t counter_mode = 0; + +const int32_t counter_mode_value[COUNTER_MODE_COUNT] = { + 0, + 1, + 2, + 3, + 4, + 5, + 6, +}; + +void subghz_scene_signal_settings_counter_mode_changed (VariableItem* item){ + SubGhz* subghz = variable_item_get_context(item); + UNUSED (subghz); + uint8_t index = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, counter_mode_text[index]); + counter_mode = counter_mode_value[index]; -void subghz_scene_signal_settings_text_input_callback(void* context) { - furi_assert(context); - SubGhz* subghz = context; - view_dispatcher_send_custom_event(subghz->view_dispatcher, SubGhzCustomEventSceneSignalSettings); } void subghz_scene_signal_settings_on_enter(void* context) { SubGhz* subghz = context; + VariableItemList* variable_item_list = subghz->variable_item_list; + int32_t value_index; + VariableItem* item; + int32_t available_count = COUNTER_MODE_COUNT; + + item = variable_item_list_add( + variable_item_list, + "Counter Mode", + available_count, + subghz_scene_signal_settings_counter_mode_changed, + subghz); + value_index = value_index_int32( + counter_mode, + counter_mode_value, + available_count); + + variable_item_set_current_value_index(item, value_index); + variable_item_set_current_value_text(item, counter_mode_text[value_index]); + view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdVariableItemList); } @@ -30,5 +73,6 @@ bool subghz_scene_signal_settings_on_event(void* context, SceneManagerEvent even void subghz_scene_signal_settings_on_exit(void* context) { SubGhz* subghz = context; - + variable_item_list_set_selected_item(subghz->variable_item_list, 0); + variable_item_list_reset(subghz->variable_item_list); } From a1c48c82f8ae4a1acab48cf75b35da2cee176e1d Mon Sep 17 00:00:00 2001 From: Dmitry422 Date: Sat, 8 Nov 2025 01:30:07 +0700 Subject: [PATCH 03/13] subghz signal settings gui (read from file and parse) --- .../scenes/subghz_scene_signal_settings.c | 42 ++++++++++++++++++- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/applications/main/subghz/scenes/subghz_scene_signal_settings.c b/applications/main/subghz/scenes/subghz_scene_signal_settings.c index 3c3e83f6f..82e0ce6b2 100644 --- a/applications/main/subghz/scenes/subghz_scene_signal_settings.c +++ b/applications/main/subghz/scenes/subghz_scene_signal_settings.c @@ -4,6 +4,11 @@ #include #include +#define TAG "SubGhzSceneSignalSettings" + +char * protocol_counter_allowed = ""; +uint8_t counter_mode = 0xff; + #define COUNTER_MODE_COUNT 7 const char* const counter_mode_text[COUNTER_MODE_COUNT] = { "System", @@ -15,8 +20,6 @@ const char* const counter_mode_text[COUNTER_MODE_COUNT] = { "Mode 6", }; -int8_t counter_mode = 0; - const int32_t counter_mode_value[COUNTER_MODE_COUNT] = { 0, 1, @@ -37,8 +40,42 @@ void subghz_scene_signal_settings_counter_mode_changed (VariableItem* item){ } void subghz_scene_signal_settings_on_enter(void* context) { + // when we open saved file we do some check and fill up subghz->filepath. So now we use it to check is CounterMode in file SubGhz* subghz = context; + FuriString* tmp_string = furi_string_alloc(); + const char* file_path = furi_string_get_cstr(subghz->file_path); + + furi_assert(subghz); + furi_assert(file_path); + + Storage* storage = furi_record_open(RECORD_STORAGE); + FlipperFormat* fff_data_file = flipper_format_file_alloc(storage); + uint32_t tmp_counter_mode = 0; + counter_mode = 0xff; + + if(!flipper_format_file_open_existing(fff_data_file, file_path)) { + FURI_LOG_E(TAG, "Error open file %s", file_path); + } else { + flipper_format_read_string(fff_data_file, "Protocol", tmp_string); + if((!strcmp(furi_string_get_cstr(tmp_string), "Nice FloR-S")) || + (!strcmp(furi_string_get_cstr(tmp_string), "CAME Atomo")) || + (!strcmp(furi_string_get_cstr(tmp_string), "Alutech AT-4N")) || + (!strcmp(furi_string_get_cstr(tmp_string), "KeeLoq")) ) { + + if(flipper_format_read_uint32(fff_data_file, "CounterMode", &tmp_counter_mode, 1)) { + counter_mode = (uint8_t)tmp_counter_mode; + } else { + counter_mode = 0; + } + } + } + FURI_LOG_I(TAG, "CounterMode %i", counter_mode); + + furi_string_free(tmp_string); + flipper_format_free(fff_data_file); + furi_record_close(RECORD_STORAGE); + VariableItemList* variable_item_list = subghz->variable_item_list; int32_t value_index; VariableItem* item; @@ -57,6 +94,7 @@ void subghz_scene_signal_settings_on_enter(void* context) { variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, counter_mode_text[value_index]); + variable_item_set_locked(item,(counter_mode == 0xff)," Not available \n for this \nprotocol !"); view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdVariableItemList); } From b7d2ab7a0c5f13f138cb88040c6b653bec48fbfc Mon Sep 17 00:00:00 2001 From: Dmitry422 Date: Sat, 8 Nov 2025 04:51:23 +0700 Subject: [PATCH 04/13] Subghz special signail_settings interface --- .../scenes/subghz_scene_signal_settings.c | 81 +++++++++++++------ 1 file changed, 57 insertions(+), 24 deletions(-) diff --git a/applications/main/subghz/scenes/subghz_scene_signal_settings.c b/applications/main/subghz/scenes/subghz_scene_signal_settings.c index 82e0ce6b2..4433aa2b5 100644 --- a/applications/main/subghz/scenes/subghz_scene_signal_settings.c +++ b/applications/main/subghz/scenes/subghz_scene_signal_settings.c @@ -6,8 +6,7 @@ #define TAG "SubGhzSceneSignalSettings" -char * protocol_counter_allowed = ""; -uint8_t counter_mode = 0xff; +uint32_t counter_mode = 0xff; #define COUNTER_MODE_COUNT 7 const char* const counter_mode_text[COUNTER_MODE_COUNT] = { @@ -30,20 +29,18 @@ const int32_t counter_mode_value[COUNTER_MODE_COUNT] = { 6, }; -void subghz_scene_signal_settings_counter_mode_changed (VariableItem* item){ +void subghz_scene_signal_settings_counter_mode_changed(VariableItem* item) { SubGhz* subghz = variable_item_get_context(item); - UNUSED (subghz); + UNUSED(subghz); uint8_t index = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, counter_mode_text[index]); counter_mode = counter_mode_value[index]; - } void subghz_scene_signal_settings_on_enter(void* context) { - // when we open saved file we do some check and fill up subghz->filepath. So now we use it to check is CounterMode in file + // when we open saved file we do some check and fill up subghz->file_path. So now we use it to check is there CounterMode in file or not SubGhz* subghz = context; - FuriString* tmp_string = furi_string_alloc(); const char* file_path = furi_string_get_cstr(subghz->file_path); furi_assert(subghz); @@ -51,9 +48,14 @@ void subghz_scene_signal_settings_on_enter(void* context) { Storage* storage = furi_record_open(RECORD_STORAGE); FlipperFormat* fff_data_file = flipper_format_file_alloc(storage); + FuriString* tmp_string = furi_string_alloc(); + uint32_t tmp_counter_mode = 0; counter_mode = 0xff; + // open file and check is it contains allowed protocols and CounterMode variable - if not then CcounterMode will stay 0xff + // if file contain allowed protocols but not contain CounterMode - set it to default 0 + // if file contain CounterMode then load it if(!flipper_format_file_open_existing(fff_data_file, file_path)) { FURI_LOG_E(TAG, "Error open file %s", file_path); } else { @@ -61,21 +63,22 @@ void subghz_scene_signal_settings_on_enter(void* context) { if((!strcmp(furi_string_get_cstr(tmp_string), "Nice FloR-S")) || (!strcmp(furi_string_get_cstr(tmp_string), "CAME Atomo")) || (!strcmp(furi_string_get_cstr(tmp_string), "Alutech AT-4N")) || - (!strcmp(furi_string_get_cstr(tmp_string), "KeeLoq")) ) { - - if(flipper_format_read_uint32(fff_data_file, "CounterMode", &tmp_counter_mode, 1)) { - counter_mode = (uint8_t)tmp_counter_mode; - } else { - counter_mode = 0; - } + (!strcmp(furi_string_get_cstr(tmp_string), "KeeLoq"))) { + if(flipper_format_read_uint32(fff_data_file, "CounterMode", &tmp_counter_mode, 1)) { + counter_mode = (uint8_t)tmp_counter_mode; + } else { + counter_mode = 0; } + } } - FURI_LOG_I(TAG, "CounterMode %i", counter_mode); + FURI_LOG_I(TAG, "Loaded CounterMode value %li", counter_mode); furi_string_free(tmp_string); + flipper_format_file_close(fff_data_file); flipper_format_free(fff_data_file); furi_record_close(RECORD_STORAGE); + //Create and Enable/Disable variable_item_list depent from current CounterMode value VariableItemList* variable_item_list = subghz->variable_item_list; int32_t value_index; VariableItem* item; @@ -87,14 +90,12 @@ void subghz_scene_signal_settings_on_enter(void* context) { available_count, subghz_scene_signal_settings_counter_mode_changed, subghz); - value_index = value_index_int32( - counter_mode, - counter_mode_value, - available_count); + value_index = value_index_int32(counter_mode, counter_mode_value, available_count); variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, counter_mode_text[value_index]); - variable_item_set_locked(item,(counter_mode == 0xff)," Not available \n for this \nprotocol !"); + variable_item_set_locked( + item, (counter_mode == 0xff), " Not available \n for this \nprotocol !"); view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdVariableItemList); } @@ -104,13 +105,45 @@ bool subghz_scene_signal_settings_on_event(void* context, SceneManagerEvent even if(event.type == SceneManagerEventTypeBack) { scene_manager_previous_scene(subghz->scene_manager); return true; - } - else return false; - } - + } else + return false; +} void subghz_scene_signal_settings_on_exit(void* context) { SubGhz* subghz = context; + const char* file_path = furi_string_get_cstr(subghz->file_path); + + furi_assert(subghz); + furi_assert(file_path); + + // if ConterMode was changed from 0xff then we must update or write new value to file + if(counter_mode != 0xff) { + Storage* storage = furi_record_open(RECORD_STORAGE); + FlipperFormat* fff_data_file = flipper_format_file_alloc(storage); + + // check is the file available for update or write brand new value and to it + if(flipper_format_file_open_existing(fff_data_file, file_path)) { + if(flipper_format_update_uint32(fff_data_file, "CounterMode", &counter_mode, 1)) { + FURI_LOG_I(TAG, "Successfully update CounterMode value to %li", counter_mode); + } else { + FURI_LOG_E(TAG, "Error update CounterMode value trying append and add .. "); + flipper_format_file_close(fff_data_file); + flipper_format_file_open_append(fff_data_file, file_path); + if(flipper_format_write_uint32(fff_data_file, "CounterMode", &counter_mode, 1)) { + FURI_LOG_I(TAG, "Successfully added CounterMode value %li", counter_mode); + } else { + FURI_LOG_E(TAG, "Error with adding CounterMode value %li", counter_mode); + } + } + } else { + FURI_LOG_E(TAG, "Error open file %s for writing", file_path); + } + + flipper_format_file_close(fff_data_file); + flipper_format_free(fff_data_file); + furi_record_close(RECORD_STORAGE); + } + variable_item_list_set_selected_item(subghz->variable_item_list, 0); variable_item_list_reset(subghz->variable_item_list); } From 9d1cee6d4c8740881927cf833bdca895ab185063 Mon Sep 17 00:00:00 2001 From: Dmitry422 Date: Sat, 8 Nov 2025 04:52:36 +0700 Subject: [PATCH 05/13] Subghz special signail_settings interface end of development --- .../scenes/subghz_scene_signal_settings.c | 49 +++++++++++++------ 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/applications/main/subghz/scenes/subghz_scene_signal_settings.c b/applications/main/subghz/scenes/subghz_scene_signal_settings.c index 4433aa2b5..33ce18783 100644 --- a/applications/main/subghz/scenes/subghz_scene_signal_settings.c +++ b/applications/main/subghz/scenes/subghz_scene_signal_settings.c @@ -29,7 +29,22 @@ const int32_t counter_mode_value[COUNTER_MODE_COUNT] = { 6, }; -void subghz_scene_signal_settings_counter_mode_changed(VariableItem* item) { +typedef struct { + char* name; + uint8_t mode_count; +} Protocols; + +// List of protocols names and appropriate CounterMode counts +static Protocols protocols[] = { + {"Nice FloR-S", 3}, + {"CAME Atomo", 4}, + {"Alutech AT-4N", 3}, + {"KeeLoq", 7}, +}; + +#define PROTOCOLS_COUNT (sizeof(protocols) / sizeof(Protocols)); + +void subghz_scene_signal_settings_counter_mode_changed(VariableItem * item) { SubGhz* subghz = variable_item_get_context(item); UNUSED(subghz); uint8_t index = variable_item_get_current_value_index(item); @@ -52,26 +67,28 @@ void subghz_scene_signal_settings_on_enter(void* context) { uint32_t tmp_counter_mode = 0; counter_mode = 0xff; + uint8_t mode_count=1; - // open file and check is it contains allowed protocols and CounterMode variable - if not then CcounterMode will stay 0xff - // if file contain allowed protocols but not contain CounterMode - set it to default 0 - // if file contain CounterMode then load it + // open file and check is it contains allowed protocols and CounterMode variable - if not then CcounterMode will stay 0xff + // if file contain allowed protocol but not contain CounterMode value - set default CounterMode value = 0 and available CounterMode count for this protocol + // if file contain CounterMode value then load it if(!flipper_format_file_open_existing(fff_data_file, file_path)) { FURI_LOG_E(TAG, "Error open file %s", file_path); } else { flipper_format_read_string(fff_data_file, "Protocol", tmp_string); - if((!strcmp(furi_string_get_cstr(tmp_string), "Nice FloR-S")) || - (!strcmp(furi_string_get_cstr(tmp_string), "CAME Atomo")) || - (!strcmp(furi_string_get_cstr(tmp_string), "Alutech AT-4N")) || - (!strcmp(furi_string_get_cstr(tmp_string), "KeeLoq"))) { - if(flipper_format_read_uint32(fff_data_file, "CounterMode", &tmp_counter_mode, 1)) { - counter_mode = (uint8_t)tmp_counter_mode; - } else { - counter_mode = 0; + // compare available protocols names, load CounterMode value from file and setup variable_item_list values_count + for(uint8_t i = 0; i < PROTOCOLS_COUNT i++) { + if(!strcmp(furi_string_get_cstr(tmp_string), protocols[i].name)) { + mode_count = protocols[i].mode_count; + if(flipper_format_read_uint32(fff_data_file, "CounterMode", &tmp_counter_mode, 1)) { + counter_mode = (uint8_t)tmp_counter_mode; + } else { + counter_mode = 0; + } } } } - FURI_LOG_I(TAG, "Loaded CounterMode value %li", counter_mode); + FURI_LOG_I(TAG, "Current CounterMode value %li", counter_mode); furi_string_free(tmp_string); flipper_format_file_close(fff_data_file); @@ -82,15 +99,15 @@ void subghz_scene_signal_settings_on_enter(void* context) { VariableItemList* variable_item_list = subghz->variable_item_list; int32_t value_index; VariableItem* item; - int32_t available_count = COUNTER_MODE_COUNT; + //int32_t available_count = COUNTER_MODE_COUNT; item = variable_item_list_add( variable_item_list, "Counter Mode", - available_count, + mode_count, subghz_scene_signal_settings_counter_mode_changed, subghz); - value_index = value_index_int32(counter_mode, counter_mode_value, available_count); + value_index = value_index_int32(counter_mode, counter_mode_value, mode_count); variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, counter_mode_text[value_index]); From 48b9dd2cc82b4c76861ab4c1bb92e49247f16263 Mon Sep 17 00:00:00 2001 From: Dmitry422 Date: Sun, 9 Nov 2025 21:01:19 +0700 Subject: [PATCH 06/13] Hide additional settings under gebug mode (commented, not active) --- .../subghz/scenes/subghz_scene_saved_menu.c | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/applications/main/subghz/scenes/subghz_scene_saved_menu.c b/applications/main/subghz/scenes/subghz_scene_saved_menu.c index 011e719a7..5b6405b53 100644 --- a/applications/main/subghz/scenes/subghz_scene_saved_menu.c +++ b/applications/main/subghz/scenes/subghz_scene_saved_menu.c @@ -34,14 +34,14 @@ void subghz_scene_saved_menu_on_enter(void* context) { SubmenuIndexDelete, subghz_scene_saved_menu_submenu_callback, subghz); - - submenu_add_item( - subghz->submenu, - "Signal Settings", - SubmenuIndexSignalSettings, - subghz_scene_saved_menu_submenu_callback, - subghz); - + //if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { + submenu_add_item( + subghz->submenu, + "Signal Settings", + SubmenuIndexSignalSettings, + subghz_scene_saved_menu_submenu_callback, + subghz); + //}; submenu_set_selected_item( subghz->submenu, scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneSavedMenu)); @@ -70,10 +70,10 @@ bool subghz_scene_saved_menu_on_event(void* context, SceneManagerEvent event) { return true; } else if(event.event == SubmenuIndexSignalSettings) { scene_manager_set_scene_state( - subghz->scene_manager, SubGhzSceneSavedMenu, SubmenuIndexSignalSettings); + subghz->scene_manager, SubGhzSceneSavedMenu, SubmenuIndexSignalSettings); scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSignalSettings); - return true; - } + return true; + } } return false; } From 7ee266752e6c3e2a22554638a3ed19ac82c11829 Mon Sep 17 00:00:00 2001 From: Dmitry422 Date: Sun, 9 Nov 2025 22:01:36 +0700 Subject: [PATCH 07/13] Subghz signal settings counter edit in progress..... --- .../scenes/subghz_scene_signal_settings.c | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/applications/main/subghz/scenes/subghz_scene_signal_settings.c b/applications/main/subghz/scenes/subghz_scene_signal_settings.c index 33ce18783..2c77a1776 100644 --- a/applications/main/subghz/scenes/subghz_scene_signal_settings.c +++ b/applications/main/subghz/scenes/subghz_scene_signal_settings.c @@ -52,6 +52,15 @@ void subghz_scene_signal_settings_counter_mode_changed(VariableItem * item) { counter_mode = counter_mode_value[index]; } +void subghz_scene_signal_settings_variable_item_list_enter_callback(void* context, uint32_t index) { + UNUSED(context); + SubGhz* subghz = context; + + if(index == 1) { + view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdByteInput); + } +} + void subghz_scene_signal_settings_on_enter(void* context) { // when we open saved file we do some check and fill up subghz->file_path. So now we use it to check is there CounterMode in file or not SubGhz* subghz = context; @@ -99,8 +108,9 @@ void subghz_scene_signal_settings_on_enter(void* context) { VariableItemList* variable_item_list = subghz->variable_item_list; int32_t value_index; VariableItem* item; - //int32_t available_count = COUNTER_MODE_COUNT; + variable_item_list_set_enter_callback (variable_item_list,subghz_scene_signal_settings_variable_item_list_enter_callback,subghz); + item = variable_item_list_add( variable_item_list, "Counter Mode", @@ -114,6 +124,14 @@ void subghz_scene_signal_settings_on_enter(void* context) { variable_item_set_locked( item, (counter_mode == 0xff), " Not available \n for this \nprotocol !"); + item = variable_item_list_add( + variable_item_list, + "Counter Value", + 1, + NULL, + subghz); + variable_item_set_current_value_text(item, "FFFFFF"); + view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdVariableItemList); } From 01cc4cc3da53d6b339c09e826a881dd23ffaa8c3 Mon Sep 17 00:00:00 2001 From: Dmitry422 Date: Mon, 10 Nov 2025 23:13:28 +0700 Subject: [PATCH 08/13] finita la comedia --- .../main/subghz/scenes/subghz_scene_saved_menu.c | 4 ++-- .../subghz/scenes/subghz_scene_signal_settings.c | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/applications/main/subghz/scenes/subghz_scene_saved_menu.c b/applications/main/subghz/scenes/subghz_scene_saved_menu.c index 5b6405b53..0e753dcaf 100644 --- a/applications/main/subghz/scenes/subghz_scene_saved_menu.c +++ b/applications/main/subghz/scenes/subghz_scene_saved_menu.c @@ -34,14 +34,14 @@ void subghz_scene_saved_menu_on_enter(void* context) { SubmenuIndexDelete, subghz_scene_saved_menu_submenu_callback, subghz); - //if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { submenu_add_item( subghz->submenu, "Signal Settings", SubmenuIndexSignalSettings, subghz_scene_saved_menu_submenu_callback, subghz); - //}; + }; submenu_set_selected_item( subghz->submenu, scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneSavedMenu)); diff --git a/applications/main/subghz/scenes/subghz_scene_signal_settings.c b/applications/main/subghz/scenes/subghz_scene_signal_settings.c index 2c77a1776..865b3507e 100644 --- a/applications/main/subghz/scenes/subghz_scene_signal_settings.c +++ b/applications/main/subghz/scenes/subghz_scene_signal_settings.c @@ -124,13 +124,13 @@ void subghz_scene_signal_settings_on_enter(void* context) { variable_item_set_locked( item, (counter_mode == 0xff), " Not available \n for this \nprotocol !"); - item = variable_item_list_add( - variable_item_list, - "Counter Value", - 1, - NULL, - subghz); - variable_item_set_current_value_text(item, "FFFFFF"); + // item = variable_item_list_add( + // variable_item_list, + // "Counter Value", + // 1, + // NULL, + // subghz); + // variable_item_set_current_value_text(item, "FFFFFF"); view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdVariableItemList); } From d1f8ddc033ad7f1935b024fa6218fb67006af8e9 Mon Sep 17 00:00:00 2001 From: Dmitry422 Date: Mon, 10 Nov 2025 23:23:34 +0700 Subject: [PATCH 09/13] i dont know WTF --- targets/f7/api_symbols.csv | 29 ----------------------------- 1 file changed, 29 deletions(-) diff --git a/targets/f7/api_symbols.csv b/targets/f7/api_symbols.csv index 0b6f7fae0..71c0106ea 100755 --- a/targets/f7/api_symbols.csv +++ b/targets/f7/api_symbols.csv @@ -63,9 +63,6 @@ Header,+,lib/ibutton/ibutton_protocols.h,, Header,+,lib/ibutton/ibutton_worker.h,, Header,+,lib/ieee754_parse_wrap/wrappers.h,, Header,+,lib/infrared/encoder_decoder/infrared.h,, -Header,+,lib/infrared/signal/infrared_brute_force.h,, -Header,+,lib/infrared/signal/infrared_error_code.h,, -Header,+,lib/infrared/signal/infrared_signal.h,, Header,+,lib/infrared/worker/infrared_transmit.h,, Header,+,lib/infrared/worker/infrared_worker.h,, Header,+,lib/lfrfid/lfrfid_dict_file.h,, @@ -2119,16 +2116,6 @@ Function,-,infinity,double, Function,-,infinityf,float, Function,+,infrared_alloc_decoder,InfraredDecoderHandler*, Function,+,infrared_alloc_encoder,InfraredEncoderHandler*, -Function,-,infrared_brute_force_add_record,void,"InfraredBruteForce*, uint32_t, const char*" -Function,-,infrared_brute_force_alloc,InfraredBruteForce*, -Function,-,infrared_brute_force_calculate_messages,InfraredErrorCode,InfraredBruteForce* -Function,-,infrared_brute_force_free,void,InfraredBruteForce* -Function,-,infrared_brute_force_is_started,_Bool,const InfraredBruteForce* -Function,-,infrared_brute_force_reset,void,InfraredBruteForce* -Function,-,infrared_brute_force_send,_Bool,"InfraredBruteForce*, uint32_t" -Function,-,infrared_brute_force_set_db_filename,void,"InfraredBruteForce*, const char*" -Function,-,infrared_brute_force_start,_Bool,"InfraredBruteForce*, uint32_t, uint32_t*" -Function,-,infrared_brute_force_stop,void,InfraredBruteForce* Function,+,infrared_check_decoder_ready,const InfraredMessage*,InfraredDecoderHandler* Function,+,infrared_decode,const InfraredMessage*,"InfraredDecoderHandler*, _Bool, uint32_t" Function,+,infrared_encode,InfraredStatus,"InfraredEncoderHandler*, uint32_t*, _Bool*" @@ -2147,22 +2134,6 @@ Function,+,infrared_reset_encoder,void,"InfraredEncoderHandler*, const InfraredM Function,+,infrared_send,void,"const InfraredMessage*, int" Function,+,infrared_send_raw,void,"const uint32_t[], uint32_t, _Bool" Function,+,infrared_send_raw_ext,void,"const uint32_t[], uint32_t, _Bool, uint32_t, float" -Function,-,infrared_signal_alloc,InfraredSignal*, -Function,-,infrared_signal_free,void,InfraredSignal* -Function,-,infrared_signal_get_message,const InfraredMessage*,const InfraredSignal* -Function,-,infrared_signal_get_raw_signal,const InfraredRawSignal*,const InfraredSignal* -Function,-,infrared_signal_is_raw,_Bool,const InfraredSignal* -Function,-,infrared_signal_is_valid,_Bool,const InfraredSignal* -Function,-,infrared_signal_read,InfraredErrorCode,"InfraredSignal*, FlipperFormat*, FuriString*" -Function,-,infrared_signal_read_body,InfraredErrorCode,"InfraredSignal*, FlipperFormat*" -Function,-,infrared_signal_read_name,InfraredErrorCode,"FlipperFormat*, FuriString*" -Function,-,infrared_signal_save,InfraredErrorCode,"const InfraredSignal*, FlipperFormat*, const char*" -Function,-,infrared_signal_search_by_index_and_read,InfraredErrorCode,"InfraredSignal*, FlipperFormat*, size_t" -Function,-,infrared_signal_search_by_name_and_read,InfraredErrorCode,"InfraredSignal*, FlipperFormat*, const char*" -Function,-,infrared_signal_set_message,void,"InfraredSignal*, const InfraredMessage*" -Function,-,infrared_signal_set_raw_signal,void,"InfraredSignal*, const uint32_t*, size_t, uint32_t, float" -Function,-,infrared_signal_set_signal,void,"InfraredSignal*, const InfraredSignal*" -Function,-,infrared_signal_transmit,void,const InfraredSignal* Function,+,infrared_worker_alloc,InfraredWorker*, Function,+,infrared_worker_free,void,InfraredWorker* Function,+,infrared_worker_get_decoded_signal,const InfraredMessage*,const InfraredWorkerSignal* From d320c4a46b3a1c4fbaa5407bbd51cba8683c9438 Mon Sep 17 00:00:00 2001 From: Dmitry422 <118886774+Dmitry422@users.noreply.github.com> Date: Tue, 11 Nov 2025 08:14:08 +0700 Subject: [PATCH 10/13] Recover accidentally deleted --- applications_user/README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 applications_user/README.md diff --git a/applications_user/README.md b/applications_user/README.md new file mode 100644 index 000000000..8bb7823c1 --- /dev/null +++ b/applications_user/README.md @@ -0,0 +1 @@ +Put your custom applications in this folder. \ No newline at end of file From da3a2834d49adecd25f9e6a8b021de82ec3bb48e Mon Sep 17 00:00:00 2001 From: Dmitry422 <118886774+Dmitry422@users.noreply.github.com> Date: Tue, 11 Nov 2025 08:15:02 +0700 Subject: [PATCH 11/13] Recover accidentally deleted --- targets/f7/api_symbols.csv | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/targets/f7/api_symbols.csv b/targets/f7/api_symbols.csv index 71c0106ea..0b6f7fae0 100755 --- a/targets/f7/api_symbols.csv +++ b/targets/f7/api_symbols.csv @@ -63,6 +63,9 @@ Header,+,lib/ibutton/ibutton_protocols.h,, Header,+,lib/ibutton/ibutton_worker.h,, Header,+,lib/ieee754_parse_wrap/wrappers.h,, Header,+,lib/infrared/encoder_decoder/infrared.h,, +Header,+,lib/infrared/signal/infrared_brute_force.h,, +Header,+,lib/infrared/signal/infrared_error_code.h,, +Header,+,lib/infrared/signal/infrared_signal.h,, Header,+,lib/infrared/worker/infrared_transmit.h,, Header,+,lib/infrared/worker/infrared_worker.h,, Header,+,lib/lfrfid/lfrfid_dict_file.h,, @@ -2116,6 +2119,16 @@ Function,-,infinity,double, Function,-,infinityf,float, Function,+,infrared_alloc_decoder,InfraredDecoderHandler*, Function,+,infrared_alloc_encoder,InfraredEncoderHandler*, +Function,-,infrared_brute_force_add_record,void,"InfraredBruteForce*, uint32_t, const char*" +Function,-,infrared_brute_force_alloc,InfraredBruteForce*, +Function,-,infrared_brute_force_calculate_messages,InfraredErrorCode,InfraredBruteForce* +Function,-,infrared_brute_force_free,void,InfraredBruteForce* +Function,-,infrared_brute_force_is_started,_Bool,const InfraredBruteForce* +Function,-,infrared_brute_force_reset,void,InfraredBruteForce* +Function,-,infrared_brute_force_send,_Bool,"InfraredBruteForce*, uint32_t" +Function,-,infrared_brute_force_set_db_filename,void,"InfraredBruteForce*, const char*" +Function,-,infrared_brute_force_start,_Bool,"InfraredBruteForce*, uint32_t, uint32_t*" +Function,-,infrared_brute_force_stop,void,InfraredBruteForce* Function,+,infrared_check_decoder_ready,const InfraredMessage*,InfraredDecoderHandler* Function,+,infrared_decode,const InfraredMessage*,"InfraredDecoderHandler*, _Bool, uint32_t" Function,+,infrared_encode,InfraredStatus,"InfraredEncoderHandler*, uint32_t*, _Bool*" @@ -2134,6 +2147,22 @@ Function,+,infrared_reset_encoder,void,"InfraredEncoderHandler*, const InfraredM Function,+,infrared_send,void,"const InfraredMessage*, int" Function,+,infrared_send_raw,void,"const uint32_t[], uint32_t, _Bool" Function,+,infrared_send_raw_ext,void,"const uint32_t[], uint32_t, _Bool, uint32_t, float" +Function,-,infrared_signal_alloc,InfraredSignal*, +Function,-,infrared_signal_free,void,InfraredSignal* +Function,-,infrared_signal_get_message,const InfraredMessage*,const InfraredSignal* +Function,-,infrared_signal_get_raw_signal,const InfraredRawSignal*,const InfraredSignal* +Function,-,infrared_signal_is_raw,_Bool,const InfraredSignal* +Function,-,infrared_signal_is_valid,_Bool,const InfraredSignal* +Function,-,infrared_signal_read,InfraredErrorCode,"InfraredSignal*, FlipperFormat*, FuriString*" +Function,-,infrared_signal_read_body,InfraredErrorCode,"InfraredSignal*, FlipperFormat*" +Function,-,infrared_signal_read_name,InfraredErrorCode,"FlipperFormat*, FuriString*" +Function,-,infrared_signal_save,InfraredErrorCode,"const InfraredSignal*, FlipperFormat*, const char*" +Function,-,infrared_signal_search_by_index_and_read,InfraredErrorCode,"InfraredSignal*, FlipperFormat*, size_t" +Function,-,infrared_signal_search_by_name_and_read,InfraredErrorCode,"InfraredSignal*, FlipperFormat*, const char*" +Function,-,infrared_signal_set_message,void,"InfraredSignal*, const InfraredMessage*" +Function,-,infrared_signal_set_raw_signal,void,"InfraredSignal*, const uint32_t*, size_t, uint32_t, float" +Function,-,infrared_signal_set_signal,void,"InfraredSignal*, const InfraredSignal*" +Function,-,infrared_signal_transmit,void,const InfraredSignal* Function,+,infrared_worker_alloc,InfraredWorker*, Function,+,infrared_worker_free,void,InfraredWorker* Function,+,infrared_worker_get_decoded_signal,const InfraredMessage*,const InfraredWorkerSignal* From b391cfc71dab8ccd659f4d301de6c3af2a30e9fb Mon Sep 17 00:00:00 2001 From: Dmitry422 Date: Tue, 11 Nov 2025 08:46:32 +0700 Subject: [PATCH 12/13] Rework by review --- .../scenes/subghz_scene_signal_settings.c | 52 ++++++------------- 1 file changed, 15 insertions(+), 37 deletions(-) diff --git a/applications/main/subghz/scenes/subghz_scene_signal_settings.c b/applications/main/subghz/scenes/subghz_scene_signal_settings.c index 865b3507e..0c9cb6ba1 100644 --- a/applications/main/subghz/scenes/subghz_scene_signal_settings.c +++ b/applications/main/subghz/scenes/subghz_scene_signal_settings.c @@ -1,15 +1,14 @@ #include "../subghz_i.h" #include "subghz/types.h" #include "../helpers/subghz_custom_event.h" -#include #include #define TAG "SubGhzSceneSignalSettings" -uint32_t counter_mode = 0xff; +static uint32_t counter_mode = 0xff; #define COUNTER_MODE_COUNT 7 -const char* const counter_mode_text[COUNTER_MODE_COUNT] = { +static const char* const counter_mode_text[COUNTER_MODE_COUNT] = { "System", "Mode 1", "Mode 2", @@ -19,7 +18,7 @@ const char* const counter_mode_text[COUNTER_MODE_COUNT] = { "Mode 6", }; -const int32_t counter_mode_value[COUNTER_MODE_COUNT] = { +static const int32_t counter_mode_value[COUNTER_MODE_COUNT] = { 0, 1, 2, @@ -44,25 +43,15 @@ static Protocols protocols[] = { #define PROTOCOLS_COUNT (sizeof(protocols) / sizeof(Protocols)); -void subghz_scene_signal_settings_counter_mode_changed(VariableItem * item) { - SubGhz* subghz = variable_item_get_context(item); - UNUSED(subghz); +void subghz_scene_signal_settings_counter_mode_changed(VariableItem* item) { uint8_t index = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, counter_mode_text[index]); counter_mode = counter_mode_value[index]; } -void subghz_scene_signal_settings_variable_item_list_enter_callback(void* context, uint32_t index) { - UNUSED(context); - SubGhz* subghz = context; - - if(index == 1) { - view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdByteInput); - } -} - void subghz_scene_signal_settings_on_enter(void* context) { - // when we open saved file we do some check and fill up subghz->file_path. So now we use it to check is there CounterMode in file or not + // When we open saved file we do some check and fill up subghz->file_path. + // So now we use it to check is there CounterMode in file or not SubGhz* subghz = context; const char* file_path = furi_string_get_cstr(subghz->file_path); @@ -73,13 +62,13 @@ void subghz_scene_signal_settings_on_enter(void* context) { Storage* storage = furi_record_open(RECORD_STORAGE); FlipperFormat* fff_data_file = flipper_format_file_alloc(storage); FuriString* tmp_string = furi_string_alloc(); - + uint32_t tmp_counter_mode = 0; counter_mode = 0xff; - uint8_t mode_count=1; + uint8_t mode_count = 1; - // open file and check is it contains allowed protocols and CounterMode variable - if not then CcounterMode will stay 0xff - // if file contain allowed protocol but not contain CounterMode value - set default CounterMode value = 0 and available CounterMode count for this protocol + // Open file and check is it contains allowed protocols and CounterMode variable - if not then CcounterMode will stay 0xff + // if file contain allowed protocol but not contain CounterMode value then setup default CounterMode value = 0 and available CounterMode count for this protocol // if file contain CounterMode value then load it if(!flipper_format_file_open_existing(fff_data_file, file_path)) { FURI_LOG_E(TAG, "Error open file %s", file_path); @@ -97,7 +86,7 @@ void subghz_scene_signal_settings_on_enter(void* context) { } } } - FURI_LOG_I(TAG, "Current CounterMode value %li", counter_mode); + FURI_LOG_D(TAG, "Current CounterMode value %li", counter_mode); furi_string_free(tmp_string); flipper_format_file_close(fff_data_file); @@ -109,8 +98,6 @@ void subghz_scene_signal_settings_on_enter(void* context) { int32_t value_index; VariableItem* item; - variable_item_list_set_enter_callback (variable_item_list,subghz_scene_signal_settings_variable_item_list_enter_callback,subghz); - item = variable_item_list_add( variable_item_list, "Counter Mode", @@ -121,16 +108,7 @@ void subghz_scene_signal_settings_on_enter(void* context) { variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, counter_mode_text[value_index]); - variable_item_set_locked( - item, (counter_mode == 0xff), " Not available \n for this \nprotocol !"); - - // item = variable_item_list_add( - // variable_item_list, - // "Counter Value", - // 1, - // NULL, - // subghz); - // variable_item_set_current_value_text(item, "FFFFFF"); + variable_item_set_locked(item, (counter_mode == 0xff), "Not available\nfor this\nprotocol!"); view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdVariableItemList); } @@ -156,16 +134,16 @@ void subghz_scene_signal_settings_on_exit(void* context) { Storage* storage = furi_record_open(RECORD_STORAGE); FlipperFormat* fff_data_file = flipper_format_file_alloc(storage); - // check is the file available for update or write brand new value and to it + // check is the file available for update or write brand new value to it if(flipper_format_file_open_existing(fff_data_file, file_path)) { if(flipper_format_update_uint32(fff_data_file, "CounterMode", &counter_mode, 1)) { - FURI_LOG_I(TAG, "Successfully update CounterMode value to %li", counter_mode); + FURI_LOG_D(TAG, "Successfully update CounterMode value to %li", counter_mode); } else { FURI_LOG_E(TAG, "Error update CounterMode value trying append and add .. "); flipper_format_file_close(fff_data_file); flipper_format_file_open_append(fff_data_file, file_path); if(flipper_format_write_uint32(fff_data_file, "CounterMode", &counter_mode, 1)) { - FURI_LOG_I(TAG, "Successfully added CounterMode value %li", counter_mode); + FURI_LOG_D(TAG, "Successfully added CounterMode value %li", counter_mode); } else { FURI_LOG_E(TAG, "Error with adding CounterMode value %li", counter_mode); } From 0351818b75ced86cc642771e99c29df9570d9692 Mon Sep 17 00:00:00 2001 From: Dmitry422 Date: Tue, 11 Nov 2025 11:52:42 +0700 Subject: [PATCH 13/13] Rework by review finished --- .../scenes/subghz_scene_signal_settings.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/applications/main/subghz/scenes/subghz_scene_signal_settings.c b/applications/main/subghz/scenes/subghz_scene_signal_settings.c index 0c9cb6ba1..6c0b71acf 100644 --- a/applications/main/subghz/scenes/subghz_scene_signal_settings.c +++ b/applications/main/subghz/scenes/subghz_scene_signal_settings.c @@ -108,7 +108,7 @@ void subghz_scene_signal_settings_on_enter(void* context) { variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, counter_mode_text[value_index]); - variable_item_set_locked(item, (counter_mode == 0xff), "Not available\nfor this\nprotocol!"); + variable_item_set_locked(item, (counter_mode == 0xff), "Not available\nfor this\nprotocol !"); view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdVariableItemList); } @@ -134,19 +134,14 @@ void subghz_scene_signal_settings_on_exit(void* context) { Storage* storage = furi_record_open(RECORD_STORAGE); FlipperFormat* fff_data_file = flipper_format_file_alloc(storage); - // check is the file available for update or write brand new value to it + // check is the file available for update/insert CounterMode value if(flipper_format_file_open_existing(fff_data_file, file_path)) { - if(flipper_format_update_uint32(fff_data_file, "CounterMode", &counter_mode, 1)) { - FURI_LOG_D(TAG, "Successfully update CounterMode value to %li", counter_mode); + if(flipper_format_insert_or_update_uint32( + fff_data_file, "CounterMode", &counter_mode, 1)) { + FURI_LOG_D( + TAG, "Successfully updated/inserted CounterMode value %li", counter_mode); } else { - FURI_LOG_E(TAG, "Error update CounterMode value trying append and add .. "); - flipper_format_file_close(fff_data_file); - flipper_format_file_open_append(fff_data_file, file_path); - if(flipper_format_write_uint32(fff_data_file, "CounterMode", &counter_mode, 1)) { - FURI_LOG_D(TAG, "Successfully added CounterMode value %li", counter_mode); - } else { - FURI_LOG_E(TAG, "Error with adding CounterMode value %li", counter_mode); - } + FURI_LOG_E(TAG, "Error update/insert CounterMode value"); } } else { FURI_LOG_E(TAG, "Error open file %s for writing", file_path);