Handle SYS_POWEROFF event in recorder and chessbox plugins
Credit to Igor Poretsky
Change-Id: I151d3511b9cee269190d87df7fa7dd355aaafc9b
diff --git a/apps/plugins/chessbox/chessbox.c b/apps/plugins/chessbox/chessbox.c
index 7d42b72..c7cd94c 100644
--- a/apps/plugins/chessbox/chessbox.c
+++ b/apps/plugins/chessbox/chessbox.c
@@ -92,6 +92,9 @@
/* "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 @@
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 @@
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 @@
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 @@
#if LCD_DEPTH > 1
rb->lcd_set_backdrop(NULL);
#endif
+ cb_sysevent = 0;
/* end of plugin init */
@@ -1070,5 +1080,8 @@
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 0098fea..0ab5654 100644
--- a/apps/recorder/recording.c
+++ b/apps/recorder/recording.c
@@ -1615,6 +1615,11 @@
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))