From 11ddc6cf1cd4380e0bd2ec45c3debfe04810097f Mon Sep 17 00:00:00 2001 From: William Wilgus Date: Sat, 13 Nov 2021 03:38:28 -0500 Subject: 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 --- apps/plugins/announce_status.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'apps/plugins/announce_status.c') 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; } -- cgit v1.2.3