1
mirror of https://github.com/DarkFlippers/unleashed-firmware.git synced 2025-12-12 20:49:49 +04:00

expansion settings read and store in ram

by @Willy-JL
This commit is contained in:
MX
2024-01-30 23:26:08 +03:00
parent a8651a2861
commit c31052848a
5 changed files with 22 additions and 14 deletions

View File

@@ -1,4 +1,5 @@
#include "expansion.h" #include "expansion.h"
#include "expansion_i.h"
#include <furi_hal_power.h> #include <furi_hal_power.h>
#include <furi_hal_serial.h> #include <furi_hal_serial.h>
@@ -53,6 +54,8 @@ struct Expansion {
FuriHalSerialId serial_id; FuriHalSerialId serial_id;
FuriHalSerialHandle* serial_handle; FuriHalSerialHandle* serial_handle;
RpcSession* rpc_session; RpcSession* rpc_session;
ExpansionSettings settings;
}; };
static void expansion_detect_callback(void* context); static void expansion_detect_callback(void* context);
@@ -394,16 +397,15 @@ void expansion_on_system_start(void* arg) {
Expansion* instance = expansion_alloc(); Expansion* instance = expansion_alloc();
furi_record_create(RECORD_EXPANSION, instance); furi_record_create(RECORD_EXPANSION, instance);
expansion_settings_load(&instance->settings);
expansion_enable(instance); expansion_enable(instance);
} }
// Public API functions // Public API functions
void expansion_enable(Expansion* instance) { void expansion_enable(Expansion* instance) {
ExpansionSettings settings = {}; if(instance->settings.uart_index < FuriHalSerialIdMax) {
expansion_settings_load(&settings); expansion_set_listen_serial(instance, instance->settings.uart_index);
if(settings.uart_index < FuriHalSerialIdMax) {
expansion_set_listen_serial(instance, settings.uart_index);
} }
} }
@@ -438,3 +440,7 @@ void expansion_set_listen_serial(Expansion* instance, FuriHalSerialId serial_id)
FURI_LOG_D(TAG, "Detection enabled"); FURI_LOG_D(TAG, "Detection enabled");
} }
ExpansionSettings* expansion_get_settings(Expansion* instance) {
return &instance->settings;
}

View File

@@ -0,0 +1,6 @@
#pragma once
#include "expansion_settings.h"
#include "expansion.h"
ExpansionSettings* expansion_get_settings(Expansion* instance);

View File

@@ -10,7 +10,7 @@ static void expansion_settings_app_uart_changed(VariableItem* item) {
ExpansionSettingsApp* app = variable_item_get_context(item); ExpansionSettingsApp* app = variable_item_get_context(item);
const uint8_t index = variable_item_get_current_value_index(item); const uint8_t index = variable_item_get_current_value_index(item);
variable_item_set_current_value_text(item, expansion_uart_text[index]); variable_item_set_current_value_text(item, expansion_uart_text[index]);
app->settings.uart_index = index; app->settings->uart_index = index;
if(index < FuriHalSerialIdMax) { if(index < FuriHalSerialIdMax) {
expansion_set_listen_serial(app->expansion, index); expansion_set_listen_serial(app->expansion, index);
@@ -27,10 +27,9 @@ static uint32_t expansion_settings_app_exit(void* context) {
static ExpansionSettingsApp* expansion_settings_app_alloc() { static ExpansionSettingsApp* expansion_settings_app_alloc() {
ExpansionSettingsApp* app = malloc(sizeof(ExpansionSettingsApp)); ExpansionSettingsApp* app = malloc(sizeof(ExpansionSettingsApp));
expansion_settings_load(&app->settings);
app->gui = furi_record_open(RECORD_GUI); app->gui = furi_record_open(RECORD_GUI);
app->expansion = furi_record_open(RECORD_EXPANSION); app->expansion = furi_record_open(RECORD_EXPANSION);
app->settings = expansion_get_settings(app->expansion);
app->view_dispatcher = view_dispatcher_alloc(); app->view_dispatcher = view_dispatcher_alloc();
view_dispatcher_enable_queue(app->view_dispatcher); view_dispatcher_enable_queue(app->view_dispatcher);
@@ -49,7 +48,7 @@ static ExpansionSettingsApp* expansion_settings_app_alloc() {
COUNT_OF(expansion_uart_text), COUNT_OF(expansion_uart_text),
expansion_settings_app_uart_changed, expansion_settings_app_uart_changed,
app); 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_index(item, value_index);
variable_item_set_current_value_text(item, expansion_uart_text[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) { static void expansion_settings_app_free(ExpansionSettingsApp* app) {
furi_assert(app); furi_assert(app);
expansion_settings_save(&app->settings); expansion_settings_save(app->settings);
view_dispatcher_remove_view(app->view_dispatcher, ExpansionSettingsViewVarItemList); view_dispatcher_remove_view(app->view_dispatcher, ExpansionSettingsViewVarItemList);
variable_item_list_free(app->var_item_list); variable_item_list_free(app->var_item_list);

View File

@@ -8,6 +8,7 @@
#include <gui/modules/variable_item_list.h> #include <gui/modules/variable_item_list.h>
#include <expansion/expansion.h> #include <expansion/expansion.h>
#include <expansion/expansion_i.h>
#include <expansion/expansion_settings.h> #include <expansion/expansion_settings.h>
typedef struct { typedef struct {
@@ -15,7 +16,7 @@ typedef struct {
ViewDispatcher* view_dispatcher; ViewDispatcher* view_dispatcher;
VariableItemList* var_item_list; VariableItemList* var_item_list;
Expansion* expansion; Expansion* expansion;
ExpansionSettings settings; ExpansionSettings* settings;
} ExpansionSettingsApp; } ExpansionSettingsApp;
typedef enum { typedef enum {

View File

@@ -28,10 +28,6 @@ static void storage_move_to_sd_remove_region() {
if(storage_common_exists(storage, INT_PATH(".region_data"))) { if(storage_common_exists(storage, INT_PATH(".region_data"))) {
storage_common_remove(storage, INT_PATH(".region_data")); storage_common_remove(storage, INT_PATH(".region_data"));
} }
// No expansion modules yet
if(storage_common_exists(storage, INT_PATH(".expansion.settings"))) {
storage_common_remove(storage, INT_PATH(".expansion.settings"));
}
furi_record_close(RECORD_STORAGE); furi_record_close(RECORD_STORAGE);
} }