Index: apps/screens.c =================================================================== --- apps/screens.c (revision 20137) +++ apps/screens.c (working copy) @@ -91,6 +91,40 @@ } #endif +int handle_usb_events(struct event_queue *q, int ticks) +{ + struct queue_event ev; + + /* Don't return until we get SYS_USB_DISCONNECTED or SYS_TIMEOUT */ + while(1) + { + queue_wait_w_tmo(q, &ev, ticks); + switch(ev.id) + { + case SYS_USB_DISCONNECTED: + usb_acknowledge(SYS_USB_DISCONNECTED_ACK); + return 0; +#if defined(HAVE_USBSTACK) && defined(USE_ROCKBOX_USB) + case SYS_USB_LUN_LOCKED: + { + int lun,value; + lun=ev.data>>16; + value=ev.data&0x0000ffff; + if(value) + screens[0].set_foreground(LCD_RGBPACK(0xff,0,0)); + else + screens[0].set_foreground(LCD_RGBPACK(0,0xff,0)); + screens[0].fillrect(30,30*lun+40,20,20); + screens[0].update(); + break; + } +#endif + case SYS_TIMEOUT: + return 1; + } + } +} + void usb_screen(void) { #ifdef USB_NONE @@ -142,7 +176,7 @@ while (button_get(true) & BUTTON_REL); #else usb_acknowledge(SYS_USB_CONNECTED_ACK); - while(usb_wait_for_disconnect_w_tmo(&button_queue, HZ)) { + while(handle_usb_events(&button_queue, HZ)) { if(usb_inserted()) { #if (CONFIG_STORAGE & STORAGE_MMC) /* USB-MMC bridge can report activity */ led(mmc_usb_active(HZ));