瀏覽代碼

1. Fix some spell error;
2. Fix data transfer size calculate error issue;

shaolin 11 年之前
父節點
當前提交
64a2902fa9

+ 2 - 2
components/drivers/include/drivers/usb_common.h

@@ -373,7 +373,7 @@ struct uhid_descriptor
 };
 };
 typedef struct uhid_descriptor* uhid_desc_t;
 typedef struct uhid_descriptor* uhid_desc_t;
 
 
-struct ureqest
+struct urequest
 {
 {
     rt_uint8_t request_type;
     rt_uint8_t request_type;
     rt_uint8_t request;
     rt_uint8_t request;
@@ -381,7 +381,7 @@ struct ureqest
     rt_uint16_t index;
     rt_uint16_t index;
     rt_uint16_t length;
     rt_uint16_t length;
 };
 };
-typedef struct ureqest* ureq_t;
+typedef struct urequest* ureq_t;
 
 
 #ifndef MIN
 #ifndef MIN
 #define MIN(a, b) (a < b ? a : b)
 #define MIN(a, b) (a < b ? a : b)

+ 3 - 3
components/drivers/include/drivers/usb_device.h

@@ -76,7 +76,7 @@ typedef enum
     /* request to read full count */
     /* request to read full count */
     UIO_REQUEST_READ_FULL,
     UIO_REQUEST_READ_FULL,
     /* request to read any count */
     /* request to read any count */
-    UIO_REQUEST_READ_BEST,  
+    UIO_REQUEST_READ_MOST,  
     /* request to write full count */
     /* request to write full count */
     UIO_REQUEST_WRITE,
     UIO_REQUEST_WRITE,
 }UIO_REQUEST_TYPE;
 }UIO_REQUEST_TYPE;
@@ -239,7 +239,7 @@ struct udev_msg
     union
     union
     {
     {
         struct ep_msg ep_msg;
         struct ep_msg ep_msg;
-        struct ureqest setup;
+        struct urequest setup;
     } content;
     } content;
 };
 };
 typedef struct udev_msg* udev_msg_t;
 typedef struct udev_msg* udev_msg_t;
@@ -292,7 +292,7 @@ rt_err_t rt_usbd_ep_set_stall(udevice_t device, uep_t ep);
 rt_err_t rt_usbd_ep_clear_stall(udevice_t device, uep_t ep);
 rt_err_t rt_usbd_ep_clear_stall(udevice_t device, uep_t ep);
 rt_err_t rt_usbd_ep0_set_stall(udevice_t device);
 rt_err_t rt_usbd_ep0_set_stall(udevice_t device);
 rt_err_t rt_usbd_ep0_clear_stall(udevice_t device);
 rt_err_t rt_usbd_ep0_clear_stall(udevice_t device);
-rt_err_t rt_usbd_ep0_setup_handler(udcd_t dcd, struct ureqest* setup);
+rt_err_t rt_usbd_ep0_setup_handler(udcd_t dcd, struct urequest* setup);
 rt_err_t rt_usbd_ep0_in_handler(udcd_t dcd);
 rt_err_t rt_usbd_ep0_in_handler(udcd_t dcd);
 rt_err_t rt_usbd_ep0_out_handler(udcd_t dcd, rt_size_t size);
 rt_err_t rt_usbd_ep0_out_handler(udcd_t dcd, rt_size_t size);
 rt_err_t rt_usbd_ep_in_handler(udcd_t dcd, rt_uint8_t address);
 rt_err_t rt_usbd_ep_in_handler(udcd_t dcd, rt_uint8_t address);

+ 2 - 2
components/drivers/usb/usbdevice/class/cdc_vcom.c

@@ -280,7 +280,7 @@ static rt_err_t _ep_out_handler(ufunction_t func, rt_size_t size)
 
 
     data->ep_out->request.buffer = data->ep_out->buffer;
     data->ep_out->request.buffer = data->ep_out->buffer;
     data->ep_out->request.size = EP_MAXPACKET(data->ep_out);
     data->ep_out->request.size = EP_MAXPACKET(data->ep_out);
-    data->ep_out->request.req_type = UIO_REQUEST_READ_BEST;    
+    data->ep_out->request.req_type = UIO_REQUEST_READ_MOST;    
     rt_usbd_io_request(func->device, data->ep_out, &data->ep_out->request);
     rt_usbd_io_request(func->device, data->ep_out, &data->ep_out->request);
 
 
     return RT_EOK;
     return RT_EOK;
@@ -435,7 +435,7 @@ static rt_err_t _function_enable(ufunction_t func)
     data->ep_out->request.buffer = data->ep_out->buffer;
     data->ep_out->request.buffer = data->ep_out->buffer;
     data->ep_out->request.size = EP_MAXPACKET(data->ep_out);
     data->ep_out->request.size = EP_MAXPACKET(data->ep_out);
     
     
-    data->ep_out->request.req_type = UIO_REQUEST_READ_BEST;    
+    data->ep_out->request.req_type = UIO_REQUEST_READ_MOST;    
     rt_usbd_io_request(func->device, data->ep_out, &data->ep_out->request);
     rt_usbd_io_request(func->device, data->ep_out, &data->ep_out->request);
     
     
     return RT_EOK;
     return RT_EOK;

+ 29 - 18
components/drivers/usb/usbdevice/core/core.c

@@ -772,10 +772,18 @@ static rt_err_t _data_notify(udevice_t device, struct ep_msg* ep_msg)
             size = dcd_ep_read(device->dcd, EP_ADDRESS(ep),
             size = dcd_ep_read(device->dcd, EP_ADDRESS(ep),
                 ep->request.buffer);
                 ep->request.buffer);
         }
         }
-        ep->request.remain_size -= size;
-        ep->request.buffer += size;
 
 
-        if(ep->request.req_type == UIO_REQUEST_READ_BEST)
+        if(size > ep->request.remain_size)
+        {
+            ep->request.remain_size = 0;
+        }
+        else
+        {
+            ep->request.remain_size -= size;
+            ep->request.buffer += size;
+        }
+
+        if(ep->request.req_type == UIO_REQUEST_READ_MOST)
         {
         {
             EP_HANDLER(ep, func, size);
             EP_HANDLER(ep, func, size);
         }
         }
@@ -881,6 +889,7 @@ static rt_err_t _stop_notify(udevice_t device)
 static rt_size_t rt_usbd_ep_write(udevice_t device, uep_t ep, void *buffer, rt_size_t size)
 static rt_size_t rt_usbd_ep_write(udevice_t device, uep_t ep, void *buffer, rt_size_t size)
 {
 {
     rt_uint16_t maxpacket;
     rt_uint16_t maxpacket;
+    rt_size_t sent_size;
         
         
     RT_ASSERT(device != RT_NULL);    
     RT_ASSERT(device != RT_NULL);    
     RT_ASSERT(device->dcd != RT_NULL);
     RT_ASSERT(device->dcd != RT_NULL);
@@ -889,18 +898,18 @@ static rt_size_t rt_usbd_ep_write(udevice_t device, uep_t ep, void *buffer, rt_s
     maxpacket = EP_MAXPACKET(ep);
     maxpacket = EP_MAXPACKET(ep);
     if(ep->request.remain_size >= maxpacket)
     if(ep->request.remain_size >= maxpacket)
     {
     {
-        dcd_ep_write(device->dcd, EP_ADDRESS(ep), ep->request.buffer, maxpacket);
-        ep->request.remain_size -= maxpacket;
+        sent_size = dcd_ep_write(device->dcd, EP_ADDRESS(ep), ep->request.buffer, maxpacket);
+        ep->request.remain_size -= sent_size;
         ep->request.buffer += maxpacket;    
         ep->request.buffer += maxpacket;    
     }
     }
     else
     else
     {
     {
-        dcd_ep_write(device->dcd, EP_ADDRESS(ep), ep->request.buffer, 
+        sent_size = dcd_ep_write(device->dcd, EP_ADDRESS(ep), ep->request.buffer, 
             ep->request.remain_size);
             ep->request.remain_size);
-        ep->request.remain_size = 0;
+        ep->request.remain_size -= sent_size;
     }
     }
 
 
-    return size;
+    return sent_size;
 }
 }
 
 
 static rt_size_t rt_usbd_ep_read_prepare(udevice_t device, uep_t ep, void *buffer, rt_size_t size)
 static rt_size_t rt_usbd_ep_read_prepare(udevice_t device, uep_t ep, void *buffer, rt_size_t size)
@@ -1623,7 +1632,7 @@ rt_size_t rt_usbd_io_request(udevice_t device, uep_t ep, uio_request_t req)
     {
     {
         switch(req->req_type)
         switch(req->req_type)
         {
         {
-        case UIO_REQUEST_READ_BEST:
+        case UIO_REQUEST_READ_MOST:
         case UIO_REQUEST_READ_FULL:
         case UIO_REQUEST_READ_FULL:
             ep->request.remain_size = ep->request.size;
             ep->request.remain_size = ep->request.size;
             size = rt_usbd_ep_read_prepare(device, ep, req->buffer, req->size);
             size = rt_usbd_ep_read_prepare(device, ep, req->buffer, req->size);
@@ -1757,7 +1766,8 @@ static rt_err_t rt_usbd_ep_assign(udevice_t device, uep_t ep)
     while(device->dcd->ep_pool[i].addr != 0xFF)
     while(device->dcd->ep_pool[i].addr != 0xFF)
     {
     {
         if(device->dcd->ep_pool[i].status == ID_UNASSIGNED && 
         if(device->dcd->ep_pool[i].status == ID_UNASSIGNED && 
-            ep->ep_desc->bmAttributes == device->dcd->ep_pool[i].type)
+            ep->ep_desc->bmAttributes == device->dcd->ep_pool[i].type &&
+            ep->ep_desc->bEndpointAddress == device->dcd->ep_pool[i].dir)
         {
         {
             EP_ADDRESS(ep) |= device->dcd->ep_pool[i].addr;
             EP_ADDRESS(ep) |= device->dcd->ep_pool[i].addr;
             ep->id = &device->dcd->ep_pool[i];
             ep->id = &device->dcd->ep_pool[i];
@@ -1786,7 +1796,7 @@ static rt_err_t rt_usbd_ep_unassign(udevice_t device, uep_t ep)
     return RT_EOK;
     return RT_EOK;
 }
 }
 
 
-rt_err_t rt_usbd_ep0_setup_handler(udcd_t dcd, struct ureqest* setup)
+rt_err_t rt_usbd_ep0_setup_handler(udcd_t dcd, struct urequest* setup)
 {
 {
     struct udev_msg msg;
     struct udev_msg msg;
     rt_size_t size;
     rt_size_t size;
@@ -1796,7 +1806,7 @@ rt_err_t rt_usbd_ep0_setup_handler(udcd_t dcd, struct ureqest* setup)
     if(setup == RT_NULL)
     if(setup == RT_NULL)
     {
     {
         size = dcd_ep_read(dcd, EP0_OUT_ADDR, (void*)&msg.content.setup);
         size = dcd_ep_read(dcd, EP0_OUT_ADDR, (void*)&msg.content.setup);
-        if(size != sizeof(struct ureqest))
+        if(size != sizeof(struct urequest))
         {
         {
             rt_kprintf("read setup packet error\n");
             rt_kprintf("read setup packet error\n");
             return -RT_ERROR;
             return -RT_ERROR;
@@ -1804,7 +1814,7 @@ rt_err_t rt_usbd_ep0_setup_handler(udcd_t dcd, struct ureqest* setup)
     }
     }
     else
     else
     {
     {
-        rt_memcpy((void*)&msg.content.setup, (void*)setup, sizeof(struct ureqest));
+        rt_memcpy((void*)&msg.content.setup, (void*)setup, sizeof(struct urequest));
     }    
     }    
     
     
     msg.type = USB_MSG_SETUP_NOTIFY;
     msg.type = USB_MSG_SETUP_NOTIFY;
@@ -1935,6 +1945,7 @@ rt_err_t rt_usbd_sof_handler(udcd_t dcd)
 rt_size_t rt_usbd_ep0_write(udevice_t device, void *buffer, rt_size_t size)
 rt_size_t rt_usbd_ep0_write(udevice_t device, void *buffer, rt_size_t size)
 {
 {
     uep_t ep0;
     uep_t ep0;
+    rt_size_t sent_size = 0;
 
 
     RT_ASSERT(device != RT_NULL);    
     RT_ASSERT(device != RT_NULL);    
     RT_ASSERT(device->dcd != RT_NULL);
     RT_ASSERT(device->dcd != RT_NULL);
@@ -1947,17 +1958,17 @@ rt_size_t rt_usbd_ep0_write(udevice_t device, void *buffer, rt_size_t size)
     ep0->request.remain_size = size;
     ep0->request.remain_size = size;
     if(ep0->request.remain_size >= ep0->id->maxpacket)
     if(ep0->request.remain_size >= ep0->id->maxpacket)
     {
     {
-        dcd_ep_write(device->dcd, EP0_IN_ADDR, ep0->request.buffer, ep0->id->maxpacket);
-        ep0->request.remain_size -= ep0->id->maxpacket;
+        sent_size = dcd_ep_write(device->dcd, EP0_IN_ADDR, ep0->request.buffer, ep0->id->maxpacket);
+        ep0->request.remain_size -= sent_size;
         ep0->request.buffer += ep0->id->maxpacket;
         ep0->request.buffer += ep0->id->maxpacket;
     }
     }
     else
     else
     {
     {
-        dcd_ep_write(device->dcd, EP0_IN_ADDR, ep0->request.buffer, ep0->request.remain_size);
-        ep0->request.remain_size = 0;
+        sent_size = dcd_ep_write(device->dcd, EP0_IN_ADDR, ep0->request.buffer, ep0->request.remain_size);
+        ep0->request.remain_size -= sent_size;        
     }
     }
 
 
-    return size;
+    return sent_size;
 }
 }
 
 
 rt_size_t rt_usbd_ep0_read(udevice_t device, void *buffer, rt_size_t size, 
 rt_size_t rt_usbd_ep0_read(udevice_t device, void *buffer, rt_size_t size,