summaryrefslogtreecommitdiff
path: root/bootloader
diff options
context:
space:
mode:
authorTomasz Moń <desowin@gmail.com>2021-06-09 20:50:30 +0200
committerTomasz Moń <desowin@gmail.com>2021-06-09 20:52:36 +0200
commit163e3507f87b7de7b9e1bdfc7b2c5d5e0357da51 (patch)
tree78c666fe344cb9491870a1162fd69dd3bf25a58e /bootloader
parenta11c88e0df66b4020ef4d9025b9fb07f04402852 (diff)
downloadrockbox-163e3507f87b7de7b9e1bdfc7b2c5d5e0357da51.tar.gz
rockbox-163e3507f87b7de7b9e1bdfc7b2c5d5e0357da51.zip
Sansa Connect: Working USB Mass Storage
Acknowledge SYS_USB_CONNECTED in all queues so USB task can gain exclusive access to the storage. Reduce CPPI requeue timeout to speed up disk access. Change-Id: I322aae4cac679696bb8186ccacf838a18f0715e9
Diffstat (limited to 'bootloader')
-rw-r--r--bootloader/sansaconnect.c60
1 files changed, 46 insertions, 14 deletions
diff --git a/bootloader/sansaconnect.c b/bootloader/sansaconnect.c
index c5dbca717d..a60fa71800 100644
--- a/bootloader/sansaconnect.c
+++ b/bootloader/sansaconnect.c
@@ -172,6 +172,49 @@ static void clear_recoverzap(void)
172 } 172 }
173} 173}
174 174
175static void handle_usb(int connect_timeout)
176{
177 long end_tick = 0;
178
179 if (usb_detect() != USB_INSERTED)
180 {
181 return;
182 }
183
184 usb_init();
185 usb_start_monitoring();
186
187 printf("USB: Connecting");
188
189 if (connect_timeout != TIMEOUT_BLOCK)
190 {
191 end_tick = current_tick + connect_timeout;
192 }
193
194 while (usb_detect() == USB_INSERTED)
195 {
196 if (button_get_w_tmo(HZ/2) == SYS_USB_CONNECTED)
197 {
198 printf("Bootloader USB mode");
199 usb_acknowledge(SYS_USB_CONNECTED_ACK);
200 while (button_get_w_tmo(HZ/2) != SYS_USB_DISCONNECTED)
201 {
202 storage_spin();
203 }
204 break;
205 }
206
207 if (connect_timeout != TIMEOUT_BLOCK &&
208 TIME_AFTER(current_tick, end_tick))
209 {
210 printf("USB: Timed out");
211 break;
212 }
213 }
214
215 usb_close();
216}
217
175extern void show_logo(void); 218extern void show_logo(void);
176 219
177void main(void) 220void main(void)
@@ -203,12 +246,8 @@ void main(void)
203 reset_screen(); 246 reset_screen();
204 show_logo(); 247 show_logo();
205 248
206 btn = button_read_device();
207
208 printf("Rockbox boot loader"); 249 printf("Rockbox boot loader");
209 printf("Version %s", rbversion); 250 printf("Version %s", rbversion);
210 usb_init();
211 usb_start_monitoring();
212 251
213 clear_recoverzap(); 252 clear_recoverzap();
214 253
@@ -218,21 +257,14 @@ void main(void)
218 257
219 filesystem_init(); 258 filesystem_init();
220 259
221 if (usb_detect() == USB_INSERTED) 260 handle_usb(2*HZ);
222 {
223 usb_enable(true);
224 while (usb_detect() == USB_INSERTED)
225 {
226 sleep(HZ);
227 storage_spin();
228 }
229 usb_enable(false);
230 }
231 261
232 ret = disk_mount_all(); 262 ret = disk_mount_all();
233 if (ret <= 0) 263 if (ret <= 0)
234 error(EDISK, ret, true); 264 error(EDISK, ret, true);
235 265
266 btn = button_read_device();
267
236 if (btn & BUTTON_PREV) 268 if (btn & BUTTON_PREV)
237 { 269 {
238 printf("Loading OF firmware..."); 270 printf("Loading OF firmware...");