mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-04-24 03:29:57 -07:00
event based check for auto shutdown timer setting
This commit is contained in:
@@ -42,6 +42,10 @@ static void power_stop_auto_shutdown_timer(Power* power) {
|
||||
furi_timer_stop(power->auto_shutdown_timer);
|
||||
}
|
||||
|
||||
static uint32_t power_is_running_auto_shutdown_timer(Power* power) {
|
||||
return furi_timer_is_running(power->auto_shutdown_timer);
|
||||
}
|
||||
|
||||
static void power_input_event_callback(const void* value, void* context) {
|
||||
furi_assert(value);
|
||||
furi_assert(context);
|
||||
@@ -54,8 +58,10 @@ static void power_input_event_callback(const void* value, void* context) {
|
||||
|
||||
static void power_auto_shutdown_arm(Power* power) {
|
||||
if(power->shutdown_idle_delay_ms) {
|
||||
power->input_events_subscription =
|
||||
furi_pubsub_subscribe(power->input_events_pubsub, power_input_event_callback, power);
|
||||
if(power->input_events_subscription == NULL) {
|
||||
power->input_events_subscription = furi_pubsub_subscribe(
|
||||
power->input_events_pubsub, power_input_event_callback, power);
|
||||
}
|
||||
power_start_auto_shutdown_timer(power);
|
||||
}
|
||||
}
|
||||
@@ -75,18 +81,14 @@ static void power_auto_shutdown_timer_callback(void* context) {
|
||||
power_off(power);
|
||||
}
|
||||
|
||||
static void auto_shutdown_update(Power* power) {
|
||||
uint32_t old_time = power->shutdown_idle_delay_ms;
|
||||
LOAD_POWER_SETTINGS(&power->shutdown_idle_delay_ms);
|
||||
static void power_shutdown_time_changed_callback(const void* event, void* context) {
|
||||
furi_assert(event);
|
||||
furi_assert(context);
|
||||
Power* power = context;
|
||||
power->shutdown_idle_delay_ms = *(uint32_t*)event;
|
||||
if(power->shutdown_idle_delay_ms) {
|
||||
if(power->shutdown_idle_delay_ms != old_time) {
|
||||
if(old_time) {
|
||||
power_start_auto_shutdown_timer(power);
|
||||
} else {
|
||||
power_auto_shutdown_arm(power);
|
||||
}
|
||||
}
|
||||
} else if(old_time) {
|
||||
power_auto_shutdown_arm(power);
|
||||
} else if(power_is_running_auto_shutdown_timer(power)) {
|
||||
power_auto_shutdown_inhibit(power);
|
||||
}
|
||||
}
|
||||
@@ -100,7 +102,8 @@ Power* power_alloc() {
|
||||
|
||||
// Pubsub
|
||||
power->event_pubsub = furi_pubsub_alloc();
|
||||
|
||||
power->settings_events = furi_pubsub_alloc();
|
||||
furi_pubsub_subscribe(power->settings_events, power_shutdown_time_changed_callback, power);
|
||||
power->input_events_pubsub = furi_record_open(RECORD_INPUT_EVENTS);
|
||||
power->input_events_subscription = NULL;
|
||||
|
||||
@@ -150,6 +153,7 @@ void power_free(Power* power) {
|
||||
|
||||
// FuriPubSub
|
||||
furi_pubsub_free(power->event_pubsub);
|
||||
furi_pubsub_free(power->settings_events);
|
||||
furi_pubsub_free(power->input_events_pubsub);
|
||||
|
||||
if(power->input_events_subscription) {
|
||||
@@ -285,9 +289,6 @@ int32_t power_srv(void* p) {
|
||||
furi_record_create(RECORD_POWER, power);
|
||||
|
||||
while(1) {
|
||||
//Check current setting for automatic shutdown
|
||||
auto_shutdown_update(power);
|
||||
|
||||
// Update data from gauge and charger
|
||||
bool need_refresh = power_update_info(power);
|
||||
|
||||
|
||||
@@ -80,6 +80,14 @@ void power_get_info(Power* power, PowerInfo* info);
|
||||
*/
|
||||
FuriPubSub* power_get_pubsub(Power* power);
|
||||
|
||||
/** Get power settings events pubsub handler
|
||||
*
|
||||
* @param power Power instance
|
||||
*
|
||||
* @return FuriPubSub instance
|
||||
*/
|
||||
FuriPubSub* power_get_settings_events_pubsub(Power* power);
|
||||
|
||||
/** Check battery health
|
||||
*
|
||||
* @return true if battery is healthy
|
||||
|
||||
@@ -38,6 +38,11 @@ FuriPubSub* power_get_pubsub(Power* power) {
|
||||
return power->event_pubsub;
|
||||
}
|
||||
|
||||
FuriPubSub* power_get_settings_events_pubsub(Power* power) {
|
||||
furi_assert(power);
|
||||
return power->settings_events;
|
||||
}
|
||||
|
||||
bool power_is_battery_healthy(Power* power) {
|
||||
furi_assert(power);
|
||||
bool is_healthy = false;
|
||||
|
||||
@@ -30,6 +30,7 @@ struct Power {
|
||||
Gui* gui;
|
||||
NotificationApp* notification;
|
||||
FuriPubSub* event_pubsub;
|
||||
FuriPubSub* settings_events;
|
||||
FuriPubSub* input_events_pubsub;
|
||||
FuriPubSubSubscription* input_events_subscription;
|
||||
PowerEvent event;
|
||||
|
||||
@@ -25,6 +25,9 @@ PowerSettingsApp* power_settings_app_alloc(uint32_t first_scene) {
|
||||
app->gui = furi_record_open(RECORD_GUI);
|
||||
app->power = furi_record_open(RECORD_POWER);
|
||||
|
||||
//PubSub
|
||||
app->settings_events = power_get_settings_events_pubsub(app->power);
|
||||
|
||||
// View dispatcher
|
||||
app->view_dispatcher = view_dispatcher_alloc();
|
||||
app->scene_manager = scene_manager_alloc(&power_settings_scene_handlers, app);
|
||||
|
||||
@@ -26,6 +26,7 @@ typedef struct {
|
||||
PowerInfo info;
|
||||
VariableItemList* variable_item_list;
|
||||
uint32_t shutdown_idle_delay_ms;
|
||||
FuriPubSub* settings_events;
|
||||
} PowerSettingsApp;
|
||||
|
||||
typedef enum {
|
||||
|
||||
@@ -63,5 +63,6 @@ bool power_settings_scene_shutdown_idle_on_event(void* context, SceneManagerEven
|
||||
void power_settings_scene_shutdown_idle_on_exit(void* context) {
|
||||
PowerSettingsApp* app = context;
|
||||
SAVE_POWER_SETTINGS(&app->shutdown_idle_delay_ms);
|
||||
furi_pubsub_publish(app->settings_events, &app->shutdown_idle_delay_ms);
|
||||
variable_item_list_reset(app->variable_item_list);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
entry,status,name,type,params
|
||||
Version,+,2.2,,
|
||||
Version,+,2.3,,
|
||||
Header,+,applications/services/bt/bt_service/bt.h,,
|
||||
Header,+,applications/services/cli/cli.h,,
|
||||
Header,+,applications/services/cli/cli_vcp.h,,
|
||||
@@ -1786,6 +1786,7 @@ Function,-,pow10f,float,float
|
||||
Function,-,power_enable_low_battery_level_notification,void,"Power*, _Bool"
|
||||
Function,+,power_get_info,void,"Power*, PowerInfo*"
|
||||
Function,+,power_get_pubsub,FuriPubSub*,Power*
|
||||
Function,+,power_get_settings_events_pubsub,FuriPubSub*,Power*
|
||||
Function,+,power_is_battery_healthy,_Bool,Power*
|
||||
Function,+,power_off,void,Power*
|
||||
Function,+,power_reboot,void,PowerBootMode
|
||||
|
||||
|
Reference in New Issue
Block a user