[FL-1994] Add Saved Struct (#804)
Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
		| @@ -1,49 +0,0 @@ | ||||
| #include <furi.h> | ||||
| #include <file-worker.h> | ||||
| #include "desktop_settings.h" | ||||
|  | ||||
| #define DESKTOP_SETTINGS_TAG "Desktop settings" | ||||
| #define DESKTOP_SETTINGS_PATH "/int/desktop.settings" | ||||
|  | ||||
| bool desktop_settings_load(DesktopSettings* desktop_settings) { | ||||
|     furi_assert(desktop_settings); | ||||
|     bool file_loaded = false; | ||||
|     DesktopSettings settings = {}; | ||||
|  | ||||
|     FURI_LOG_I(DESKTOP_SETTINGS_TAG, "Loading settings from \"%s\"", DESKTOP_SETTINGS_PATH); | ||||
|     FileWorker* file_worker = file_worker_alloc(true); | ||||
|     if(file_worker_open(file_worker, DESKTOP_SETTINGS_PATH, FSAM_READ, FSOM_OPEN_EXISTING)) { | ||||
|         if(file_worker_read(file_worker, &settings, sizeof(settings))) { | ||||
|             file_loaded = true; | ||||
|         } | ||||
|     } | ||||
|     file_worker_free(file_worker); | ||||
|  | ||||
|     if(file_loaded) { | ||||
|         if(settings.version != DESKTOP_SETTINGS_VER) { | ||||
|             FURI_LOG_E(DESKTOP_SETTINGS_TAG, "Settings version mismatch"); | ||||
|         } else { | ||||
|             osKernelLock(); | ||||
|             *desktop_settings = settings; | ||||
|             osKernelUnlock(); | ||||
|         } | ||||
|     } else { | ||||
|         FURI_LOG_E(DESKTOP_SETTINGS_TAG, "Settings load failed"); | ||||
|     } | ||||
|     return file_loaded; | ||||
| } | ||||
|  | ||||
| bool desktop_settings_save(DesktopSettings* desktop_settings) { | ||||
|     furi_assert(desktop_settings); | ||||
|     bool result = false; | ||||
|  | ||||
|     FileWorker* file_worker = file_worker_alloc(true); | ||||
|     if(file_worker_open(file_worker, DESKTOP_SETTINGS_PATH, FSAM_WRITE, FSOM_OPEN_ALWAYS)) { | ||||
|         if(file_worker_write(file_worker, desktop_settings, sizeof(DesktopSettings))) { | ||||
|             FURI_LOG_I(DESKTOP_SETTINGS_TAG, "Settings saved to \"%s\"", DESKTOP_SETTINGS_PATH); | ||||
|             result = true; | ||||
|         } | ||||
|     } | ||||
|     file_worker_free(file_worker); | ||||
|     return result; | ||||
| } | ||||
| @@ -2,23 +2,35 @@ | ||||
|  | ||||
| #include <stdint.h> | ||||
| #include <stdbool.h> | ||||
| #include <toolbox/saved_struct.h> | ||||
|  | ||||
| #define DESKTOP_SETTINGS_VER (1) | ||||
| #define DESKTOP_SETTINGS_PATH "/int/desktop.settings" | ||||
| #define DESKTOP_SETTINGS_MAGIC (0x17) | ||||
| #define PIN_MAX_LENGTH 12 | ||||
|  | ||||
| #define SAVE_DESKTOP_SETTINGS(x) \ | ||||
|     saved_struct_save(           \ | ||||
|         DESKTOP_SETTINGS_PATH,   \ | ||||
|         (x),                     \ | ||||
|         sizeof(DesktopSettings), \ | ||||
|         DESKTOP_SETTINGS_MAGIC,  \ | ||||
|         DESKTOP_SETTINGS_VER) | ||||
|  | ||||
| #define LOAD_DESKTOP_SETTINGS(x) \ | ||||
|     saved_struct_load(           \ | ||||
|         DESKTOP_SETTINGS_PATH,   \ | ||||
|         (x),                     \ | ||||
|         sizeof(DesktopSettings), \ | ||||
|         DESKTOP_SETTINGS_MAGIC,  \ | ||||
|         DESKTOP_SETTINGS_VER) | ||||
|  | ||||
| typedef struct { | ||||
|     uint8_t length; | ||||
|     uint8_t data[PIN_MAX_LENGTH]; | ||||
| } PinCode; | ||||
|  | ||||
| typedef struct { | ||||
|     uint8_t version; | ||||
|     uint16_t favorite; | ||||
|  | ||||
|     PinCode pincode; | ||||
|     bool locked; | ||||
| } DesktopSettings; | ||||
|  | ||||
| bool desktop_settings_load(DesktopSettings* desktop_settings); | ||||
|  | ||||
| bool desktop_settings_save(DesktopSettings* desktop_settings); | ||||
|   | ||||
| @@ -15,9 +15,6 @@ static bool desktop_settings_back_event_callback(void* context) { | ||||
| DesktopSettingsApp* desktop_settings_app_alloc() { | ||||
|     DesktopSettingsApp* app = furi_alloc(sizeof(DesktopSettingsApp)); | ||||
|  | ||||
|     app->settings.version = DESKTOP_SETTINGS_VER; | ||||
|     desktop_settings_load(&app->settings); | ||||
|  | ||||
|     app->gui = furi_record_open("gui"); | ||||
|     app->view_dispatcher = view_dispatcher_alloc(); | ||||
|     app->scene_manager = scene_manager_alloc(&desktop_settings_scene_handlers, app); | ||||
| @@ -62,8 +59,8 @@ void desktop_settings_app_free(DesktopSettingsApp* app) { | ||||
|  | ||||
| extern int32_t desktop_settings_app(void* p) { | ||||
|     DesktopSettingsApp* app = desktop_settings_app_alloc(); | ||||
|     LOAD_DESKTOP_SETTINGS(&app->settings); | ||||
|     view_dispatcher_run(app->view_dispatcher); | ||||
|     desktop_settings_save(&app->settings); | ||||
|     desktop_settings_app_free(app); | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| #include "../desktop_settings_app.h" | ||||
| #include "applications.h" | ||||
| #include "desktop/desktop_settings/desktop_settings.h" | ||||
|  | ||||
| static void desktop_settings_scene_favorite_submenu_callback(void* context, uint32_t index) { | ||||
|     DesktopSettingsApp* app = context; | ||||
| @@ -43,5 +44,6 @@ bool desktop_settings_scene_favorite_on_event(void* context, SceneManagerEvent e | ||||
|  | ||||
| void desktop_settings_scene_favorite_on_exit(void* context) { | ||||
|     DesktopSettingsApp* app = context; | ||||
|     SAVE_DESKTOP_SETTINGS(&app->settings); | ||||
|     submenu_clean(app->submenu); | ||||
| } | ||||
|   | ||||
| @@ -1,4 +1,5 @@ | ||||
| #include "../desktop_settings_app.h" | ||||
| #include "desktop/desktop_settings/desktop_settings.h" | ||||
|  | ||||
| #define SCENE_EXIT_EVENT (0U) | ||||
|  | ||||
| @@ -57,6 +58,7 @@ bool desktop_settings_scene_pincode_input_on_event(void* context, SceneManagerEv | ||||
|  | ||||
| void desktop_settings_scene_pincode_input_on_exit(void* context) { | ||||
|     DesktopSettingsApp* app = context; | ||||
|     SAVE_DESKTOP_SETTINGS(&app->settings); | ||||
|     code_input_set_result_callback(app->code_input, NULL, NULL, NULL, NULL, NULL, 0); | ||||
|     code_input_set_header_text(app->code_input, ""); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user