Desktop: poweroff timer and 5 seconds delay and other improvements (#1312)

* Desktop: poweroff timer and 5 seconds delay
* Desktop: cleanup logic in settings application
This commit is contained in:
あく
2022-06-13 05:40:57 +03:00
committed by GitHub
parent 47acf24801
commit cc861dd92b
4 changed files with 44 additions and 20 deletions

View File

@@ -13,8 +13,16 @@ struct DesktopMainView {
View* view;
DesktopMainViewCallback callback;
void* context;
TimerHandle_t poweroff_timer;
};
#define DESKTOP_MAIN_VIEW_POWEROFF_TIMEOUT 5000
static void desktop_main_poweroff_timer_callback(TimerHandle_t timer) {
DesktopMainView* main_view = pvTimerGetTimerID(timer);
main_view->callback(DesktopMainEventOpenPowerOff, main_view->context);
}
void desktop_main_set_callback(
DesktopMainView* main_view,
DesktopMainViewCallback callback,
@@ -53,8 +61,17 @@ bool desktop_main_input(InputEvent* event, void* context) {
main_view->callback(DesktopMainEventOpenDebug, main_view->context);
} else if(event->key == InputKeyLeft) {
main_view->callback(DesktopMainEventOpenFavoriteSecondary, main_view->context);
} else if(event->key == InputKeyBack) {
main_view->callback(DesktopMainEventOpenPowerOff, main_view->context);
}
}
if(event->key == InputKeyBack) {
if(event->type == InputTypePress) {
xTimerChangePeriod(
main_view->poweroff_timer,
pdMS_TO_TICKS(DESKTOP_MAIN_VIEW_POWEROFF_TIMEOUT),
portMAX_DELAY);
} else if(event->type == InputTypeRelease) {
xTimerStop(main_view->poweroff_timer, portMAX_DELAY);
}
}
@@ -69,11 +86,19 @@ DesktopMainView* desktop_main_alloc() {
view_set_context(main_view->view, main_view);
view_set_input_callback(main_view->view, desktop_main_input);
main_view->poweroff_timer = xTimerCreate(
NULL,
pdMS_TO_TICKS(DESKTOP_MAIN_VIEW_POWEROFF_TIMEOUT),
pdFALSE,
main_view,
desktop_main_poweroff_timer_callback);
return main_view;
}
void desktop_main_free(DesktopMainView* main_view) {
furi_assert(main_view);
view_free(main_view->view);
osTimerDelete(main_view->poweroff_timer);
free(main_view);
}