From c64fa9f059727e77e44d775598694e6c6f01d11e Mon Sep 17 00:00:00 2001 From: MiraculousConch Date: Wed, 29 Nov 2017 14:25:45 +0800 Subject: [PATCH 1/2] [Components][Drivers][USB][Core]fix io request --- components/drivers/usb/usbdevice/core/core.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/components/drivers/usb/usbdevice/core/core.c b/components/drivers/usb/usbdevice/core/core.c index 3c0d8f1e26..15ab31e9f7 100644 --- a/components/drivers/usb/usbdevice/core/core.c +++ b/components/drivers/usb/usbdevice/core/core.c @@ -840,6 +840,10 @@ static rt_err_t _data_notify(udevice_t device, struct ep_msg* ep_msg) { EP_HANDLER(ep, func, ep->request.size); } + else + { + dcd_ep_read_prepare(device->dcd, EP_ADDRESS(ep), ep->request.buffer, ep->request.remain_size > EP_MAXPACKET(ep) ? EP_MAXPACKET(ep) : ep->request.remain_size); + } } return RT_EOK; @@ -973,7 +977,7 @@ static rt_size_t rt_usbd_ep_read_prepare(udevice_t device, uep_t ep, void *buffe RT_ASSERT(buffer != RT_NULL); RT_ASSERT(ep->ep_desc != RT_NULL); - return dcd_ep_read_prepare(device->dcd, EP_ADDRESS(ep), buffer, size); + return dcd_ep_read_prepare(device->dcd, EP_ADDRESS(ep), buffer, size > EP_MAXPACKET(ep) ? EP_MAXPACKET(ep) : size); } /** From e87512811586cabebc9e7a5b8527eb71ad97c103 Mon Sep 17 00:00:00 2001 From: MiraculousConch Date: Wed, 29 Nov 2017 14:26:15 +0800 Subject: [PATCH 2/2] [Components][Driver][USB][Class]fix msc class --- .../drivers/usb/usbdevice/class/mstorage.c | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/components/drivers/usb/usbdevice/class/mstorage.c b/components/drivers/usb/usbdevice/class/mstorage.c index 1bde46fffa..17ea6c2379 100644 --- a/components/drivers/usb/usbdevice/class/mstorage.c +++ b/components/drivers/usb/usbdevice/class/mstorage.c @@ -706,7 +706,7 @@ static void _cb_len_calc(ufunction_t func, struct scsi_cmd* cmd, } else { - rt_kprintf("cmd_len error %d\n", cmd->cmd_len); +// rt_kprintf("cmd_len error %d\n", cmd->cmd_len); } } @@ -722,7 +722,7 @@ static rt_bool_t _cbw_verify(ufunction_t func, struct scsi_cmd* cmd, data = (struct mstorage*)func->user_data; if(cmd->cmd_len != cbw->cb_len) { - rt_kprintf("cb_len error\n"); + // rt_kprintf("cb_len error\n"); cmd->cmd_len = cbw->cb_len; } @@ -753,7 +753,7 @@ static rt_bool_t _cbw_verify(ufunction_t func, struct scsi_cmd* cmd, if(cbw->xfer_len < data->cb_data_size) { - rt_kprintf("xfer_len < data_size\n"); + // rt_kprintf("xfer_len < data_size\n"); data->cb_data_size = cbw->xfer_len; data->csw_response.status = 1; } @@ -769,7 +769,7 @@ static rt_size_t _cbw_handler(ufunction_t func, struct scsi_cmd* cmd, RT_ASSERT(func != RT_NULL); RT_ASSERT(cbw != RT_NULL); RT_ASSERT(cmd->handler != RT_NULL); - + data = (struct mstorage*)func->user_data; data->processing = cmd; return cmd->handler(func, cbw); @@ -896,32 +896,32 @@ static rt_err_t _interface_handler(ufunction_t func, ureq_t setup) RT_DEBUG_LOG(RT_DEBUG_USB, ("mstorage_interface_handler\n")); - switch(setup->request) + switch(setup->bRequest) { case USBREQ_GET_MAX_LUN: RT_DEBUG_LOG(RT_DEBUG_USB, ("USBREQ_GET_MAX_LUN\n")); - if(setup->value || setup->length != 1) + if(setup->wValue || setup->wLength != 1) { rt_usbd_ep0_set_stall(func->device); } else { - rt_usbd_ep0_write(func->device, &lun, 1); + rt_usbd_ep0_write(func->device, &lun, setup->wLength); } break; case USBREQ_MASS_STORAGE_RESET: RT_DEBUG_LOG(RT_DEBUG_USB, ("USBREQ_MASS_STORAGE_RESET\n")); - if(setup->value || setup->length != 0) + if(setup->wValue || setup->wLength != 0) { rt_usbd_ep0_set_stall(func->device); } else - { - rt_usbd_ep0_write(func->device, RT_NULL, 0); + { + dcd_ep0_send_status(func->device->dcd); } break; default: