summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorFrank Gevaerts <frank@gevaerts.be>2009-03-08 18:45:19 +0000
committerFrank Gevaerts <frank@gevaerts.be>2009-03-08 18:45:19 +0000
commit871db6f5d997e9fffe4fe951e708e42ac77cc181 (patch)
tree4daacd7068637d12c4c43726a235567f96104bda /apps
parent30a2713b6eef28194d9feb4e9758624f821936ff (diff)
downloadrockbox-871db6f5d997e9fffe4fe951e708e42ac77cc181.tar.gz
rockbox-871db6f5d997e9fffe4fe951e708e42ac77cc181.zip
Allow the user to leave MSC mode by pressing the USB POWER button (the one that's used to go to usb power mode on plugin) when the host OS hasn't locked the device.
This only works for devices that expose a removable device, so for now the gigabeat S is out of luck. (slightly modified from FS#9993) git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20244 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-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);