|
@@ -13,8 +13,16 @@ struct DesktopMainView {
|
|
|
View* view;
|
|
View* view;
|
|
|
DesktopMainViewCallback callback;
|
|
DesktopMainViewCallback callback;
|
|
|
void* context;
|
|
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(
|
|
void desktop_main_set_callback(
|
|
|
DesktopMainView* main_view,
|
|
DesktopMainView* main_view,
|
|
|
DesktopMainViewCallback callback,
|
|
DesktopMainViewCallback callback,
|
|
@@ -53,8 +61,17 @@ bool desktop_main_input(InputEvent* event, void* context) {
|
|
|
main_view->callback(DesktopMainEventOpenDebug, main_view->context);
|
|
main_view->callback(DesktopMainEventOpenDebug, main_view->context);
|
|
|
} else if(event->key == InputKeyLeft) {
|
|
} else if(event->key == InputKeyLeft) {
|
|
|
main_view->callback(DesktopMainEventOpenFavoriteSecondary, main_view->context);
|
|
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_context(main_view->view, main_view);
|
|
|
view_set_input_callback(main_view->view, desktop_main_input);
|
|
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;
|
|
return main_view;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void desktop_main_free(DesktopMainView* main_view) {
|
|
void desktop_main_free(DesktopMainView* main_view) {
|
|
|
furi_assert(main_view);
|
|
furi_assert(main_view);
|
|
|
view_free(main_view->view);
|
|
view_free(main_view->view);
|
|
|
|
|
+ osTimerDelete(main_view->poweroff_timer);
|
|
|
free(main_view);
|
|
free(main_view);
|
|
|
}
|
|
}
|