[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