diff options
Diffstat (limited to 'apps/screens.c')
-rw-r--r-- | apps/screens.c | 45 |
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 | ||
94 | int 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 | |||
94 | void usb_screen(void) | 130 | void 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); |