summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Wilgus <wilgus.william@gmail.com>2021-11-13 03:38:28 -0500
committerWilliam Wilgus <wilgus.william@gmail.com>2021-11-13 03:38:28 -0500
commit11ddc6cf1cd4380e0bd2ec45c3debfe04810097f (patch)
tree000c191648d611c8c1263ee861afd49f367b2144
parent59ef877c94c9cabd9007e86994bc858c35fd5c95 (diff)
downloadrockbox-11ddc6cf1c.tar.gz
rockbox-11ddc6cf1c.zip
announce_status Fix USB fall through and usb on plugin start
When running and USB plugged announce status ack'd the USB and then un intentionally fell through to EV_EXIT this caused the thread to exit but not the TSR hook Now: plugin keeps track of usb status and doesn't announce till usb is unplugged again on unplug the start-up beep is played to announce its presence announce_status on startup blocks usb since USB handling is done in the thread that hasn't started yet Now: don't start if USB is plugged Plugin now beeps if it couldn't play the announcement excpept for missing voice file unfortunately Change-Id: I69cf7e687508ce02358432e7bd1adc27c78c4072
-rw-r--r--apps/plugins/announce_status.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/apps/plugins/announce_status.c b/apps/plugins/announce_status.c
index a9958f198d..77e9015000 100644
--- a/apps/plugins/announce_status.c
+++ b/apps/plugins/announce_status.c
@@ -191,6 +191,8 @@ void announce(void)
rb->talk_force_shutup();
rb->sleep(HZ / 2);
voice_general_info(false);
+ if (rb->talk_id(VOICE_PAUSE, true) < 0)
+ rb->beep_play(800, 100, 1000);
//rb->talk_force_enqueue_next();
}
@@ -412,6 +414,7 @@ static int settings_menu(void)
/****************** main thread + helper ******************/
void thread(void)
{
+ bool in_usb = false;
long interval;
long last_tick = *rb->current_tick; /* for 1 sec tick */
@@ -424,6 +427,14 @@ void thread(void)
{
case SYS_USB_CONNECTED:
rb->usb_acknowledge(SYS_USB_CONNECTED_ACK);
+ in_usb = true;
+ break;
+ case SYS_USB_DISCONNECTED:
+ in_usb = false;
+ /*fall through*/
+ case EV_STARTUP:
+ rb->beep_play(1500, 100, 1000);
+ break;
case EV_EXIT:
return;
case EV_OTHINSTANCE:
@@ -431,15 +442,12 @@ void thread(void)
{
last_tick += interval;
rb->sleep(HZ / 10);
- announce();
+ if (!in_usb) announce();
}
break;
- case EV_STARTUP:
- rb->beep_play(1500, 100, 1000);
- break;
case EV_TRACKCHANGE:
rb->sleep(HZ / 10);
- announce();
+ if (!in_usb) announce();
break;
}
}
@@ -464,6 +472,7 @@ void thread_quit(void)
rb->thread_wait(gThread.id);
/* we don't want any more events */
rb->remove_event(PLAYBACK_EVENT_TRACK_CHANGE, playback_event_callback);
+
/* remove the thread's queue from the broadcast list */
rb->queue_delete(&gThread.queue);
gThread.exiting = true;
@@ -560,6 +569,8 @@ int plugin_main(const void* parameter)
enum plugin_status plugin_start(const void* parameter)
{
/* now go ahead and have fun! */
+ if (rb->usb_inserted() == true)
+ return PLUGIN_USB_CONNECTED;
int ret = plugin_main(parameter);
return (ret==0) ? PLUGIN_OK : PLUGIN_ERROR;
}