diff --git a/firmware/export/kernel.h b/firmware/export/kernel.h index 8b55a57daa..b8f2b906fd 100644 --- a/firmware/export/kernel.h +++ b/firmware/export/kernel.h @@ -66,6 +66,8 @@ #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_USB_READ_DATA MAKE_SYS_EVENT(SYS_EVENT_CLS_USB, 5) +#define SYS_USB_WRITE_DATA MAKE_SYS_EVENT(SYS_EVENT_CLS_USB, 6) #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 ed9efd67c3..5f28638224 100644 --- a/firmware/usbstack/usb_storage.c +++ b/firmware/usbstack/usb_storage.c @@ -966,6 +966,7 @@ static void handle_scsi(struct command_block_wrapper* cbw) cbw->command_block[8]); //logf("scsi read %d %d", cur_cmd.sector, cur_cmd.count); + queue_broadcast(SYS_USB_READ_DATA, (lun<<16)+cur_cmd.count); if((cur_cmd.sector + cur_cmd.count) > block_count) { send_csw(UMS_STATUS_FAIL); @@ -1015,6 +1016,8 @@ static void handle_scsi(struct command_block_wrapper* cbw) cur_cmd.count = block_size_mult * (cbw->command_block[7] << 8 | cbw->command_block[8]); + + queue_broadcast(SYS_USB_WRITE_DATA, (lun<<16)+cur_cmd.count); /* expect data */ if((cur_cmd.sector + cur_cmd.count) > block_count) { send_csw(UMS_STATUS_FAIL);