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 @@ #define SYS_USB_CONNECTED_ACK MAKE_SYS_EVENT(SYS_EVENT_CLS_USB, 1) #define SYS_USB_DISCONNECTED MAKE_SYS_EVENT(SYS_EVENT_CLS_USB, 2) #define SYS_USB_DISCONNECTED_ACK MAKE_SYS_EVENT(SYS_EVENT_CLS_USB, 3) +#define SYS_USB_LUN_LOCKED MAKE_SYS_EVENT(SYS_EVENT_CLS_USB, 4) #define SYS_POWEROFF MAKE_SYS_EVENT(SYS_EVENT_CLS_POWER, 0) #define SYS_CHARGER_CONNECTED MAKE_SYS_EVENT(SYS_EVENT_CLS_POWER, 1) #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) } } -/* called by usb_code_init() */ +/* called by usb_core_init() */ void usb_storage_init(void) { int i; @@ -430,6 +430,12 @@ void usb_storage_init_connection(void) #endif #endif usb_drv_recv(ep_out, tb.transfer_buffer, 1024); + + int lun; + for(lun=0;luncommand_block[4] & 0x03) == 0) + { + queue_broadcast(SYS_USB_LUN_LOCKED, (lun<<16)+0); + } + else + { + queue_broadcast(SYS_USB_LUN_LOCKED, (lun<<16)+1); + } send_csw(UMS_STATUS_GOOD); break; case SCSI_READ_FORMAT_CAPACITY: {