summaryrefslogtreecommitdiff
path: root/apps/screens.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/screens.c')
-rw-r--r--apps/screens.c45
1 files changed, 37 insertions, 8 deletions
diff --git a/apps/screens.c b/apps/screens.c
index c327e65037..e1e1c37bf5 100644
--- a/apps/screens.c
+++ b/apps/screens.c
@@ -91,6 +91,42 @@ static int clamp_value_wrap(int value, int max, int min)
91} 91}
92#endif 92#endif
93 93
94int handle_usb_events(struct event_queue *q)
95{
96 struct queue_event ev;
97 int next_update=0;
98
99 /* Don't return until we get SYS_USB_DISCONNECTED or SYS_TIMEOUT */
100 while(1)
101 {
102 queue_wait_w_tmo(q, &ev, HZ/4);
103 switch(ev.id)
104 {
105 case SYS_USB_DISCONNECTED:
106 usb_acknowledge(SYS_USB_DISCONNECTED_ACK);
107 return 0;
108 case SYS_TIMEOUT:
109 break;
110 }
111#if defined(HAVE_USBSTACK) && defined(USE_ROCKBOX_USB)
112 if((button_status() & ~USBPOWER_BTN_IGNORE) == USBPOWER_BUTTON)
113 {
114 usb_storage_try_release_storage();
115 }
116#endif
117 if(TIME_AFTER(current_tick,next_update))
118 {
119 if(usb_inserted()) {
120#if (CONFIG_STORAGE & STORAGE_MMC) /* USB-MMC bridge can report activity */
121 led(mmc_usb_active(HZ));
122#endif /* STORAGE_MMC */
123 gui_syncstatusbar_draw(&statusbars, false);
124 }
125 next_update=current_tick+HZ/2;
126 }
127 }
128}
129
94void usb_screen(void) 130void usb_screen(void)
95{ 131{
96#ifdef USB_NONE 132#ifdef USB_NONE
@@ -142,14 +178,7 @@ void usb_screen(void)
142 while (button_get(true) & BUTTON_REL); 178 while (button_get(true) & BUTTON_REL);
143#else 179#else
144 usb_acknowledge(SYS_USB_CONNECTED_ACK); 180 usb_acknowledge(SYS_USB_CONNECTED_ACK);
145 while(usb_wait_for_disconnect_w_tmo(&button_queue, HZ)) { 181 while(handle_usb_events(&button_queue));
146 if(usb_inserted()) {
147#if (CONFIG_STORAGE & STORAGE_MMC) /* USB-MMC bridge can report activity */
148 led(mmc_usb_active(HZ));
149#endif /* STORAGE_MMC */
150 gui_syncstatusbar_draw(&statusbars, false);
151 }
152 }
153#endif /* SIMULATOR */ 182#endif /* SIMULATOR */
154#ifdef HAVE_LCD_CHARCELLS 183#ifdef HAVE_LCD_CHARCELLS
155 status_set_usb(false); 184 status_set_usb(false);