summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Gevaerts <frank@gevaerts.be>2009-02-28 14:47:18 +0000
committerFrank Gevaerts <frank@gevaerts.be>2009-02-28 14:47:18 +0000
commitb6a1af2a9b8d54ed8e94e2a36f5564cf3f239919 (patch)
tree2f2e78a6d0a9f9ad7e79f7b50ce9dde7ba3fd099
parent027b023241dbc0e6e5f1d44b16d7fe1cf50ece25 (diff)
downloadrockbox-b6a1af2a9b8d54ed8e94e2a36f5564cf3f239919.tar.gz
rockbox-b6a1af2a9b8d54ed8e94e2a36f5564cf3f239919.zip
Adds the possibility to show nice "do not disconnect" screens/icons on the USB screen. A proof-of-concept for the actual screen is at FS#9969
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20138 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/export/kernel.h1
-rw-r--r--firmware/usbstack/usb_storage.c17
2 files changed, 16 insertions, 2 deletions
diff --git a/firmware/export/kernel.h b/firmware/export/kernel.h
index 63cc174cb6..8b55a57daa 100644
--- a/firmware/export/kernel.h
+++ b/firmware/export/kernel.h
@@ -65,6 +65,7 @@
65#define SYS_USB_CONNECTED_ACK MAKE_SYS_EVENT(SYS_EVENT_CLS_USB, 1) 65#define SYS_USB_CONNECTED_ACK MAKE_SYS_EVENT(SYS_EVENT_CLS_USB, 1)
66#define SYS_USB_DISCONNECTED MAKE_SYS_EVENT(SYS_EVENT_CLS_USB, 2) 66#define SYS_USB_DISCONNECTED MAKE_SYS_EVENT(SYS_EVENT_CLS_USB, 2)
67#define SYS_USB_DISCONNECTED_ACK MAKE_SYS_EVENT(SYS_EVENT_CLS_USB, 3) 67#define SYS_USB_DISCONNECTED_ACK MAKE_SYS_EVENT(SYS_EVENT_CLS_USB, 3)
68#define SYS_USB_LUN_LOCKED MAKE_SYS_EVENT(SYS_EVENT_CLS_USB, 4)
68#define SYS_POWEROFF MAKE_SYS_EVENT(SYS_EVENT_CLS_POWER, 0) 69#define SYS_POWEROFF MAKE_SYS_EVENT(SYS_EVENT_CLS_POWER, 0)
69#define SYS_CHARGER_CONNECTED MAKE_SYS_EVENT(SYS_EVENT_CLS_POWER, 1) 70#define SYS_CHARGER_CONNECTED MAKE_SYS_EVENT(SYS_EVENT_CLS_POWER, 1)
70#define SYS_CHARGER_DISCONNECTED MAKE_SYS_EVENT(SYS_EVENT_CLS_POWER, 2) 71#define SYS_CHARGER_DISCONNECTED MAKE_SYS_EVENT(SYS_EVENT_CLS_POWER, 2)
diff --git a/firmware/usbstack/usb_storage.c b/firmware/usbstack/usb_storage.c
index 2080865e11..e769216a8d 100644
--- a/firmware/usbstack/usb_storage.c
+++ b/firmware/usbstack/usb_storage.c
@@ -346,7 +346,7 @@ void usb_storage_reconnect(void)
346 } 346 }
347} 347}
348 348
349/* called by usb_code_init() */ 349/* called by usb_core_init() */
350void usb_storage_init(void) 350void usb_storage_init(void)
351{ 351{
352 int i; 352 int i;
@@ -430,6 +430,12 @@ void usb_storage_init_connection(void)
430#endif 430#endif
431#endif 431#endif
432 usb_drv_recv(ep_out, tb.transfer_buffer, 1024); 432 usb_drv_recv(ep_out, tb.transfer_buffer, 1024);
433
434 int lun;
435 for(lun=0;lun<NUM_VOLUMES;lun++)
436 {
437 queue_broadcast(SYS_USB_LUN_LOCKED, (lun<<16)+0);
438 }
433} 439}
434 440
435void usb_storage_disconnect(void) 441void usb_storage_disconnect(void)
@@ -895,7 +901,14 @@ static void handle_scsi(struct command_block_wrapper* cbw)
895 901
896 case SCSI_ALLOW_MEDIUM_REMOVAL: 902 case SCSI_ALLOW_MEDIUM_REMOVAL:
897 logf("scsi allow_medium_removal %d",lun); 903 logf("scsi allow_medium_removal %d",lun);
898 /* TODO: use this to show the connect screen ? */ 904 if((cbw->command_block[4] & 0x03) == 0)
905 {
906 queue_broadcast(SYS_USB_LUN_LOCKED, (lun<<16)+0);
907 }
908 else
909 {
910 queue_broadcast(SYS_USB_LUN_LOCKED, (lun<<16)+1);
911 }
899 send_csw(UMS_STATUS_GOOD); 912 send_csw(UMS_STATUS_GOOD);
900 break; 913 break;
901 case SCSI_READ_FORMAT_CAPACITY: { 914 case SCSI_READ_FORMAT_CAPACITY: {