From cce8a7c4130f9c39a352cb346c1153c82df6e73e Mon Sep 17 00:00:00 2001 From: Dmitry422 Date: Mon, 3 Feb 2025 19:18:53 +0700 Subject: [PATCH] Begin work with SafeCharging (charging supress) --- .../power/power_service/power_settings.c | 31 ++++++------- .../power/power_service/power_settings.h | 3 ++ .../scenes/power_settings_scene_start.c | 45 ++++++++++++++----- 3 files changed, 54 insertions(+), 25 deletions(-) diff --git a/applications/services/power/power_service/power_settings.c b/applications/services/power/power_service/power_settings.c index 139323a7a..93657823d 100644 --- a/applications/services/power/power_service/power_settings.c +++ b/applications/services/power/power_service/power_settings.c @@ -6,15 +6,15 @@ #define TAG "PowerSettings" -#define POWER_SETTINGS_VER_0 (0) // OLD version number -#define POWER_SETTINGS_VER (1) // NEW actual version nnumber +#define POWER_SETTINGS_VER_1 (1) // Previous version number +#define POWER_SETTINGS_VER (2) // New version number #define POWER_SETTINGS_PATH INT_PATH(POWER_SETTINGS_FILE_NAME) #define POWER_SETTINGS_MAGIC (0x18) typedef struct { - //inital set - empty -} PowerSettingsV0; + uint32_t auto_poweroff_delay_ms; +} PowerSettingsPrevious; void power_settings_load(PowerSettings* settings) { furi_assert(settings); @@ -25,7 +25,8 @@ void power_settings_load(PowerSettings* settings) { uint8_t version; if(!saved_struct_get_metadata(POWER_SETTINGS_PATH, NULL, &version, NULL)) break; - if(version == POWER_SETTINGS_VER) { // if config actual version - load it directly + // if config actual version - load it directly + if(version == POWER_SETTINGS_VER) { success = saved_struct_load( POWER_SETTINGS_PATH, settings, @@ -33,23 +34,23 @@ void power_settings_load(PowerSettings* settings) { POWER_SETTINGS_MAGIC, POWER_SETTINGS_VER); - } else if( - version == - POWER_SETTINGS_VER_0) { // if config previous version - load it and manual set new settings to inital value - PowerSettingsV0* settings_v0 = malloc(sizeof(PowerSettingsV0)); + // if config previous version - load it and manual set new settings to inital value + } else if(version == POWER_SETTINGS_VER_1) { + PowerSettingsPrevious* settings_previous = malloc(sizeof(PowerSettingsPrevious)); success = saved_struct_load( POWER_SETTINGS_PATH, - settings_v0, - sizeof(PowerSettingsV0), + settings_previous, + sizeof(PowerSettingsPrevious), POWER_SETTINGS_MAGIC, - POWER_SETTINGS_VER_0); - + POWER_SETTINGS_VER_1); + // new settings initialization if(success) { - settings->auto_poweroff_delay_ms = 0; + settings->charge_supress_percent = 0; + settings->charge_is_supressed = false; } - free(settings_v0); + free(settings_previous); } } while(false); diff --git a/applications/services/power/power_service/power_settings.h b/applications/services/power/power_service/power_settings.h index b1cc71001..c07199cf8 100644 --- a/applications/services/power/power_service/power_settings.h +++ b/applications/services/power/power_service/power_settings.h @@ -1,9 +1,12 @@ #pragma once #include +#include typedef struct { uint32_t auto_poweroff_delay_ms; + uint8_t charge_supress_percent; + bool charge_is_supressed; } PowerSettings; #ifdef __cplusplus diff --git a/applications/settings/power_settings_app/scenes/power_settings_scene_start.c b/applications/settings/power_settings_app/scenes/power_settings_scene_start.c index 3fc3a8a30..0d23d3915 100644 --- a/applications/settings/power_settings_app/scenes/power_settings_scene_start.c +++ b/applications/settings/power_settings_app/scenes/power_settings_scene_start.c @@ -15,6 +15,20 @@ const char* const auto_poweroff_delay_text[AUTO_POWEROFF_DELAY_COUNT] = const uint32_t auto_poweroff_delay_value[AUTO_POWEROFF_DELAY_COUNT] = {0, 300000, 600000, 900000, 1800000, 2700000, 3600000, 5400000}; +#define CHARGE_SUPRESS_PERCENT_COUNT 2 +const char* const charge_supress_percent_text[CHARGE_SUPRESS_PERCENT_COUNT] = {"OFF", "80%"}; + +const uint32_t charge_supress_percent_value[CHARGE_SUPRESS_PERCENT_COUNT] = {0, 80}; + +// change variable_item_list visible text and charge_supress_percent_settings when user change item in variable_item_list +static void power_settings_scene_start_charge_supress_percent_changed(VariableItem* item) { + PowerSettingsApp* app = variable_item_get_context(item); + uint8_t index = variable_item_get_current_value_index(item); + + variable_item_set_current_value_text(item, charge_supress_percent_text[index]); + app->settings.charge_supress_percent = charge_supress_percent_value[index]; +} + // change variable_item_list visible text and app_poweroff_delay_time_settings when user change item in variable_item_list static void power_settings_scene_start_auto_poweroff_delay_changed(VariableItem* item) { PowerSettingsApp* app = variable_item_get_context(item); @@ -24,9 +38,8 @@ static void power_settings_scene_start_auto_poweroff_delay_changed(VariableItem* app->settings.auto_poweroff_delay_ms = auto_poweroff_delay_value[index]; } -static void power_settings_scene_start_submenu_callback( - void* context, - uint32_t index) { //show selected menu screen +static void power_settings_scene_start_submenu_callback(void* context, uint32_t index) { + //show selected menu screen by index furi_assert(context); PowerSettingsApp* app = context; view_dispatcher_send_custom_event(app->view_dispatcher, index); @@ -42,11 +55,12 @@ void power_settings_scene_start_on_enter(void* context) { VariableItem* item; uint8_t value_index; + item = variable_item_list_add( variable_item_list, "Auto PowerOff", AUTO_POWEROFF_DELAY_COUNT, - power_settings_scene_start_auto_poweroff_delay_changed, //function for change visible item list value and app settings + power_settings_scene_start_auto_poweroff_delay_changed, app); value_index = value_index_uint32( @@ -56,14 +70,25 @@ void power_settings_scene_start_on_enter(void* context) { variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, auto_poweroff_delay_text[value_index]); + item = variable_item_list_add( + variable_item_list, + "Safe charging", + CHARGE_SUPRESS_PERCENT_COUNT, + power_settings_scene_start_charge_supress_percent_changed, + app); + + value_index = value_index_uint32( + app->settings.charge_supress_percent, + charge_supress_percent_value, + CHARGE_SUPRESS_PERCENT_COUNT); + variable_item_set_current_value_index(item, value_index); + variable_item_set_current_value_text(item, charge_supress_percent_text[value_index]); + variable_item_list_set_selected_item( variable_item_list, scene_manager_get_scene_state(app->scene_manager, PowerSettingsAppSceneStart)); - variable_item_list_set_enter_callback( //callback to show next mennu screen - variable_item_list, - power_settings_scene_start_submenu_callback, - app); - + variable_item_list_set_enter_callback( + variable_item_list, power_settings_scene_start_submenu_callback, app); view_dispatcher_switch_to_view(app->view_dispatcher, PowerSettingsAppViewVariableItemList); } @@ -88,5 +113,5 @@ bool power_settings_scene_start_on_event(void* context, SceneManagerEvent event) void power_settings_scene_start_on_exit(void* context) { PowerSettingsApp* app = context; variable_item_list_reset(app->variable_item_list); - power_settings_save(&app->settings); //actual need save every time when use ? + power_settings_save(&app->settings); }