From 9243cf8eaf6b9cefd972f83e3c8f5dc7a1539dac Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Tue, 30 Jan 2024 00:40:38 +0000 Subject: [PATCH] Expansion settings singleton --- applications/services/expansion/expansion.c | 14 ++++++++++---- applications/services/expansion/expansion_i.h | 6 ++++++ .../expansion_settings_app.c | 9 ++++----- .../expansion_settings_app.h | 3 ++- 4 files changed, 22 insertions(+), 10 deletions(-) create mode 100644 applications/services/expansion/expansion_i.h diff --git a/applications/services/expansion/expansion.c b/applications/services/expansion/expansion.c index ae69db18a..f2205d31c 100644 --- a/applications/services/expansion/expansion.c +++ b/applications/services/expansion/expansion.c @@ -1,4 +1,5 @@ #include "expansion.h" +#include "expansion_i.h" #include #include @@ -53,6 +54,8 @@ struct Expansion { FuriHalSerialId serial_id; FuriHalSerialHandle* serial_handle; RpcSession* rpc_session; + + ExpansionSettings settings; }; static void expansion_detect_callback(void* context); @@ -394,10 +397,9 @@ void expansion_on_system_start(void* arg) { Expansion* instance = expansion_alloc(); furi_record_create(RECORD_EXPANSION, instance); - ExpansionSettings settings = {}; - expansion_settings_load(&settings); - if(settings.uart_index < FuriHalSerialIdMax) { - expansion_enable(instance, settings.uart_index); + expansion_settings_load(&instance->settings); + if(instance->settings.uart_index < FuriHalSerialIdMax) { + expansion_enable(instance, instance->settings.uart_index); } } @@ -434,3 +436,7 @@ void expansion_disable(Expansion* instance) { furi_mutex_release(instance->state_mutex); } + +ExpansionSettings* expansion_get_settings(Expansion* instance) { + return &instance->settings; +} diff --git a/applications/services/expansion/expansion_i.h b/applications/services/expansion/expansion_i.h new file mode 100644 index 000000000..65bc0fe82 --- /dev/null +++ b/applications/services/expansion/expansion_i.h @@ -0,0 +1,6 @@ +#pragma once + +#include "expansion_settings.h" +#include "expansion.h" + +ExpansionSettings* expansion_get_settings(Expansion* instance); \ No newline at end of file diff --git a/applications/settings/expansion_settings_app/expansion_settings_app.c b/applications/settings/expansion_settings_app/expansion_settings_app.c index 353fab611..866fb6d4e 100644 --- a/applications/settings/expansion_settings_app/expansion_settings_app.c +++ b/applications/settings/expansion_settings_app/expansion_settings_app.c @@ -10,7 +10,7 @@ static void expansion_settings_app_uart_changed(VariableItem* item) { ExpansionSettingsApp* app = variable_item_get_context(item); const uint8_t index = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, expansion_uart_text[index]); - app->settings.uart_index = index; + app->settings->uart_index = index; if(index < FuriHalSerialIdMax) { expansion_enable(app->expansion, index); @@ -27,10 +27,9 @@ static uint32_t expansion_settings_app_exit(void* context) { static ExpansionSettingsApp* expansion_settings_app_alloc() { ExpansionSettingsApp* app = malloc(sizeof(ExpansionSettingsApp)); - expansion_settings_load(&app->settings); - app->gui = furi_record_open(RECORD_GUI); app->expansion = furi_record_open(RECORD_EXPANSION); + app->settings = expansion_get_settings(app->expansion); app->view_dispatcher = view_dispatcher_alloc(); view_dispatcher_enable_queue(app->view_dispatcher); @@ -49,7 +48,7 @@ static ExpansionSettingsApp* expansion_settings_app_alloc() { COUNT_OF(expansion_uart_text), expansion_settings_app_uart_changed, app); - value_index = app->settings.uart_index; + value_index = app->settings->uart_index; variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, expansion_uart_text[value_index]); @@ -68,7 +67,7 @@ static ExpansionSettingsApp* expansion_settings_app_alloc() { static void expansion_settings_app_free(ExpansionSettingsApp* app) { furi_assert(app); - expansion_settings_save(&app->settings); + expansion_settings_save(app->settings); view_dispatcher_remove_view(app->view_dispatcher, ExpansionSettingsViewVarItemList); variable_item_list_free(app->var_item_list); diff --git a/applications/settings/expansion_settings_app/expansion_settings_app.h b/applications/settings/expansion_settings_app/expansion_settings_app.h index a43bf853f..a404f9c1a 100644 --- a/applications/settings/expansion_settings_app/expansion_settings_app.h +++ b/applications/settings/expansion_settings_app/expansion_settings_app.h @@ -8,6 +8,7 @@ #include #include +#include #include typedef struct { @@ -15,7 +16,7 @@ typedef struct { ViewDispatcher* view_dispatcher; VariableItemList* var_item_list; Expansion* expansion; - ExpansionSettings settings; + ExpansionSettings* settings; } ExpansionSettingsApp; typedef enum {