mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-13 08:28:36 -07:00
add auto power off timer setting [ci skip]
by @Dmitry422 with little fixes by @xMasterX
This commit is contained in:
@@ -19,6 +19,12 @@ static void desktop_auto_lock_arm(Desktop*);
|
||||
static void desktop_auto_lock_inhibit(Desktop*);
|
||||
static void desktop_start_auto_lock_timer(Desktop*);
|
||||
static void desktop_apply_settings(Desktop*);
|
||||
//--- auto_power_off_timer
|
||||
#include <power/power_service/power.h>
|
||||
static void desktop_start_auto_poweroff_timer(Desktop*);
|
||||
static void desktop_auto_poweroff_arm(Desktop*);
|
||||
static void desktop_auto_poweroff_inhibit(Desktop*);
|
||||
//---
|
||||
|
||||
static void desktop_loader_callback(const void* message, void* context) {
|
||||
furi_assert(context);
|
||||
@@ -131,6 +137,9 @@ static bool desktop_custom_event_callback(void* context, uint32_t event) {
|
||||
}
|
||||
|
||||
desktop_auto_lock_inhibit(desktop);
|
||||
//--- auto_power_off_timer
|
||||
desktop_auto_poweroff_inhibit(desktop);
|
||||
//--
|
||||
desktop->app_running = true;
|
||||
|
||||
furi_semaphore_release(desktop->animation_semaphore);
|
||||
@@ -138,6 +147,9 @@ static bool desktop_custom_event_callback(void* context, uint32_t event) {
|
||||
} else if(event == DesktopGlobalAfterAppFinished) {
|
||||
animation_manager_load_and_continue_animation(desktop->animation_manager);
|
||||
desktop_auto_lock_arm(desktop);
|
||||
//--- auto_power_off_timer
|
||||
desktop_auto_poweroff_arm(desktop);
|
||||
//---
|
||||
desktop->app_running = false;
|
||||
|
||||
} else if(event == DesktopGlobalAutoLock) {
|
||||
@@ -179,6 +191,9 @@ static void desktop_input_event_callback(const void* value, void* context) {
|
||||
Desktop* desktop = context;
|
||||
if(event->type == InputTypePress) {
|
||||
desktop_start_auto_lock_timer(desktop);
|
||||
//--- m96yda
|
||||
desktop_start_auto_poweroff_timer(desktop);
|
||||
//---
|
||||
}
|
||||
}
|
||||
|
||||
@@ -213,6 +228,39 @@ static void desktop_auto_lock_inhibit(Desktop* desktop) {
|
||||
}
|
||||
}
|
||||
|
||||
//--- auto_power_off_timer
|
||||
static void desktop_auto_poweroff_timer_callback(void* context) {
|
||||
UNUSED(context);
|
||||
Power* power = furi_record_open(RECORD_POWER);
|
||||
power_off(power);
|
||||
}
|
||||
|
||||
static void desktop_start_auto_poweroff_timer(Desktop* desktop) {
|
||||
furi_timer_start(
|
||||
desktop->auto_poweroff_timer, furi_ms_to_ticks(desktop->settings.auto_poweroff_delay_ms));
|
||||
}
|
||||
|
||||
static void desktop_stop_auto_poweroff_timer(Desktop* desktop) {
|
||||
furi_timer_stop(desktop->auto_poweroff_timer);
|
||||
}
|
||||
|
||||
static void desktop_auto_poweroff_arm(Desktop* desktop) {
|
||||
if(desktop->settings.auto_poweroff_delay_ms) {
|
||||
desktop->input_events_subscription = furi_pubsub_subscribe(
|
||||
desktop->input_events_pubsub, desktop_input_event_callback, desktop);
|
||||
desktop_start_auto_poweroff_timer(desktop);
|
||||
}
|
||||
}
|
||||
|
||||
static void desktop_auto_poweroff_inhibit(Desktop* desktop) {
|
||||
desktop_stop_auto_poweroff_timer(desktop);
|
||||
if(desktop->input_events_subscription) {
|
||||
furi_pubsub_unsubscribe(desktop->input_events_pubsub, desktop->input_events_subscription);
|
||||
desktop->input_events_subscription = NULL;
|
||||
}
|
||||
}
|
||||
//---
|
||||
|
||||
static void desktop_clock_timer_callback(void* context) {
|
||||
furi_assert(context);
|
||||
Desktop* desktop = context;
|
||||
@@ -238,6 +286,9 @@ static void desktop_apply_settings(Desktop* desktop) {
|
||||
|
||||
if(!desktop->app_running && !desktop->locked) {
|
||||
desktop_auto_lock_arm(desktop);
|
||||
//--- auto_power_off_timer
|
||||
desktop_auto_poweroff_arm(desktop);
|
||||
//---
|
||||
}
|
||||
|
||||
desktop->in_transition = false;
|
||||
@@ -373,6 +424,10 @@ static Desktop* desktop_alloc(void) {
|
||||
|
||||
desktop->auto_lock_timer =
|
||||
furi_timer_alloc(desktop_auto_lock_timer_callback, FuriTimerTypeOnce, desktop);
|
||||
//--- auto_power_off_timer
|
||||
desktop->auto_poweroff_timer =
|
||||
furi_timer_alloc(desktop_auto_poweroff_timer_callback, FuriTimerTypeOnce, desktop);
|
||||
//---
|
||||
|
||||
desktop->status_pubsub = furi_pubsub_alloc();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user