From 75fe78c8029b26fbc14f13a71901f223ac214e34 Mon Sep 17 00:00:00 2001 From: Solomon Peachy Date: Sat, 22 Dec 2018 22:16:32 -0500 Subject: [PATCH] Handle SYS_POWEROFF event in recorder and chessbox plugins Credit to Igor Poretsky Change-Id: I151d3511b9cee269190d87df7fa7dd355aaafc9b --- apps/plugins/chessbox/chessbox.c | 19 ++++++++++++++++--- apps/recorder/recording.c | 5 +++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/apps/plugins/chessbox/chessbox.c b/apps/plugins/chessbox/chessbox.c index 7d42b72c1b..c7cd94c7e1 100644 --- a/apps/plugins/chessbox/chessbox.c +++ b/apps/plugins/chessbox/chessbox.c @@ -92,6 +92,9 @@ const char *level_string[] = { "Level 1: 60 moves / 5 min" , /* "While thinking" command */ int wt_command = COMMAND_NOP; +/* System event id */ +static long cb_sysevent = 0; + /* ---- Get the board column and row (e2 f.e.) for a physical x y ---- */ static void xy2cr ( short x, short y, short *c, short *r ) { if (computer == black ) { @@ -189,12 +192,14 @@ static void cb_wt_callback ( void ) { wt_command = COMMAND_NOP; button = rb->button_get(false); switch (button) { + case SYS_POWEROFF: + cb_sysevent = button; #ifdef CB_RC_QUIT case CB_RC_QUIT: +#endif wt_command = COMMAND_QUIT; timeout = true; break; -#endif case CB_MENU: wt_command = COMMAND_MENU; timeout = true; @@ -531,11 +536,13 @@ static struct cb_command cb_get_viewer_command (void) { while ( true ) { button = rb->button_get(true); switch (button) { + case SYS_POWEROFF: + cb_sysevent = button; #ifdef CB_RC_QUIT case CB_RC_QUIT: +#endif result.type = COMMAND_QUIT; return result; -#endif #ifdef CB_RESTART case CB_RESTART: result.type = COMMAND_RESTART; @@ -764,11 +771,13 @@ static struct cb_command cb_getcommand (void) { while ( true ) { button = rb->button_get(true); switch (button) { + case SYS_POWEROFF: + cb_sysevent = button; #ifdef CB_RC_QUIT case CB_RC_QUIT: +#endif result.type = COMMAND_QUIT; return result; -#endif #ifdef CB_RESTART case CB_RESTART: result.type = COMMAND_RESTART; @@ -1058,6 +1067,7 @@ enum plugin_status plugin_start(const void* parameter) { #if LCD_DEPTH > 1 rb->lcd_set_backdrop(NULL); #endif + cb_sysevent = 0; /* end of plugin init */ @@ -1070,5 +1080,8 @@ enum plugin_status plugin_start(const void* parameter) { cb_play_game(); } + if (cb_sysevent) + rb->default_event_handler(cb_sysevent); + return PLUGIN_OK; } diff --git a/apps/recorder/recording.c b/apps/recorder/recording.c index 0098fea007..0ab5654b10 100644 --- a/apps/recorder/recording.c +++ b/apps/recorder/recording.c @@ -1615,6 +1615,11 @@ bool recording_screen(bool no_source) break; #endif /* CONFIG_KEYPAD == RECORDER_PAD */ + case SYS_POWEROFF: + default_event_handler(SYS_POWEROFF); + done = true; + break; + case SYS_USB_CONNECTED: /* Only accept USB connection when not recording */ if(!(audio_stat & AUDIO_STATUS_RECORD))