From d55dceff371c4080d179fb26e6f175927cc48768 Mon Sep 17 00:00:00 2001 From: Aidan MacDonald Date: Sat, 16 Apr 2022 14:25:49 +0100 Subject: apps: Add ability to do a clean reboot Allow a clean shutdown to end in either power off or reboot. Add a new event SYS_REBOOT to signal it and sys_reboot() to trigger the event. SYS_REBOOT signals a reboot request and should be listened for alongside SYS_POWEROFF events. Change-Id: I99ba7fb5feed2bb5a0a40a274e8466ad74fe3a43 --- apps/plugins/battery_bench.c | 1 + apps/plugins/chessbox/chessbox.c | 3 +++ apps/plugins/lastfm_scrobbler.c | 1 + apps/plugins/lua/rocklib.c | 1 + apps/plugins/mpegplayer/mpeg_misc.c | 1 + apps/plugins/plugin_crt0.c | 3 ++- apps/plugins/solitaire.c | 1 + 7 files changed, 10 insertions(+), 1 deletion(-) (limited to 'apps/plugins') diff --git a/apps/plugins/battery_bench.c b/apps/plugins/battery_bench.c index d8e29d73ca..17d3b918cf 100644 --- a/apps/plugins/battery_bench.c +++ b/apps/plugins/battery_bench.c @@ -462,6 +462,7 @@ static void thread(void) in_usb_mode = false; break; case SYS_POWEROFF: + case SYS_REBOOT: exit_reason = "power off"; exit = true; break; diff --git a/apps/plugins/chessbox/chessbox.c b/apps/plugins/chessbox/chessbox.c index 13df4f177e..089cf7c400 100644 --- a/apps/plugins/chessbox/chessbox.c +++ b/apps/plugins/chessbox/chessbox.c @@ -222,6 +222,7 @@ static void cb_wt_callback ( void ) { button = rb->button_get(false); switch (button) { case SYS_POWEROFF: + case SYS_REBOOT: cb_sysevent = button; #ifdef CB_RC_QUIT case CB_RC_QUIT: @@ -585,6 +586,7 @@ static struct cb_command cb_get_viewer_command (void) { button = rb->button_get(true); switch (button) { case SYS_POWEROFF: + case SYS_REBOOT: cb_sysevent = button; #ifdef CB_RC_QUIT case CB_RC_QUIT: @@ -848,6 +850,7 @@ static struct cb_command cb_getcommand (void) { button = rb->button_get(true); switch (button) { case SYS_POWEROFF: + case SYS_REBOOT: cb_sysevent = button; #ifdef CB_RC_QUIT case CB_RC_QUIT: diff --git a/apps/plugins/lastfm_scrobbler.c b/apps/plugins/lastfm_scrobbler.c index 4d4940945d..7bd213b6d2 100644 --- a/apps/plugins/lastfm_scrobbler.c +++ b/apps/plugins/lastfm_scrobbler.c @@ -490,6 +490,7 @@ void thread(void) rb->beep_play(1500, 100, 1000); break; case SYS_POWEROFF: + case SYS_REBOOT: gCache.force_flush = true; /*fall through*/ case EV_EXIT: diff --git a/apps/plugins/lua/rocklib.c b/apps/plugins/lua/rocklib.c index 6131a479db..cadc8be6ac 100644 --- a/apps/plugins/lua/rocklib.c +++ b/apps/plugins/lua/rocklib.c @@ -1090,6 +1090,7 @@ LUALIB_API int luaopen_rock(lua_State *L) RB_CONSTANT(SYS_USB_DISCONNECTED), RB_CONSTANT(SYS_TIMEOUT), RB_CONSTANT(SYS_POWEROFF), + RB_CONSTANT(SYS_REBOOT), RB_CONSTANT(SYS_CHARGER_CONNECTED), RB_CONSTANT(SYS_CHARGER_DISCONNECTED), diff --git a/apps/plugins/mpegplayer/mpeg_misc.c b/apps/plugins/mpegplayer/mpeg_misc.c index c85285f4f8..31f0644212 100644 --- a/apps/plugins/mpegplayer/mpeg_misc.c +++ b/apps/plugins/mpegplayer/mpeg_misc.c @@ -192,6 +192,7 @@ int mpeg_sysevent_callback(int btn, { case SYS_USB_CONNECTED: case SYS_POWEROFF: + case SYS_REBOOT: mpeg_sysevent_id = btn; return ACTION_STD_CANCEL; } diff --git a/apps/plugins/plugin_crt0.c b/apps/plugins/plugin_crt0.c index 680bb0723d..5564c5575f 100644 --- a/apps/plugins/plugin_crt0.c +++ b/apps/plugins/plugin_crt0.c @@ -141,6 +141,7 @@ void exit_on_usb(int button) long result = rb->default_event_handler_ex(button, cleanup_wrapper, NULL); if (result == SYS_USB_CONNECTED) _exit(PLUGIN_USB_CONNECTED); - else if (result == SYS_POWEROFF) + else if (result == SYS_POWEROFF || result == SYS_REBOOT) + /* note: nobody actually pays attention to this exit code */ _exit(PLUGIN_POWEROFF); } diff --git a/apps/plugins/solitaire.c b/apps/plugins/solitaire.c index b1ede16f90..ebc042f6db 100644 --- a/apps/plugins/solitaire.c +++ b/apps/plugins/solitaire.c @@ -2149,6 +2149,7 @@ static int solitaire( int skipmenu ) break; case SYS_POWEROFF: + case SYS_REBOOT: return SOLITAIRE_SAVE_AND_QUIT; default: -- cgit v1.2.3