提交 600eb257 编写于 作者: W Wayne Lin

Solved USB device class issue.

上级 997c6527
......@@ -589,8 +589,9 @@ ufunction_t rt_usbd_function_cdc_create(udevice_t device)
/* create a cdc function */
func = rt_usbd_function_new(device, &dev_desc, &ops);
//not support HS
//rt_usbd_device_set_qualifier(device, &dev_qualifier);
/* support HS */
rt_usbd_device_set_qualifier(device, &dev_qualifier);
/* allocate memory for cdc vcom data */
data = (struct vcom*)rt_malloc(sizeof(struct vcom));
......
......@@ -29,7 +29,7 @@ struct hid_s
uep_t ep_in;
uep_t ep_out;
int status;
rt_uint16_t protocol;
rt_uint8_t protocol;
rt_uint8_t report_buf[MAX_REPORT_SIZE];
struct rt_messagequeue hid_mq;
};
......@@ -246,7 +246,7 @@ static struct udevice_descriptor _dev_desc =
USB_DESC_LENGTH_DEVICE, //bLength;
USB_DESC_TYPE_DEVICE, //type;
USB_BCD_VERSION, //bcdUSB;
USB_CLASS_HID, //bDeviceClass;
0x0, //bDeviceClass;
0x00, //bDeviceSubClass;
0x00, //bDeviceProtocol;
64, //bMaxPacketSize0;
......@@ -266,8 +266,8 @@ static struct usb_qualifier_descriptor dev_qualifier =
sizeof(dev_qualifier), //bLength
USB_DESC_TYPE_DEVICEQUALIFIER, //bDescriptorType
0x0200, //bcdUSB
USB_CLASS_MASS_STORAGE, //bDeviceClass
0x06, //bDeviceSubClass
0x0, //bDeviceClass
0x0, //bDeviceSubClass
0x50, //bDeviceProtocol
64, //bMaxPacketSize0
0x01, //bNumConfigurations
......@@ -347,7 +347,7 @@ const static struct uhid_comm_descriptor _hid_comm_desc =
USB_DYNAMIC | USB_DIR_IN,
USB_EP_ATTR_INT,
0x40,
0x01,
0x0A,
},
/* Endpoint Descriptor OUT */
......@@ -458,6 +458,7 @@ static rt_err_t _interface_handler(ufunction_t func, ureq_t setup)
struct hid_s *data = (struct hid_s *) func->user_data;
switch (setup->bRequest)
{
case USB_REQ_GET_DESCRIPTOR:
......@@ -486,7 +487,7 @@ static rt_err_t _interface_handler(ufunction_t func, ureq_t setup)
dcd_ep0_send_status(func->device->dcd);
break;
case USB_HID_REQ_GET_PROTOCOL:
rt_usbd_ep0_write(func->device, &data->protocol,2);
rt_usbd_ep0_write(func->device, &data->protocol,1);
break;
case USB_HID_REQ_SET_REPORT:
......@@ -692,8 +693,9 @@ ufunction_t rt_usbd_function_hid_create(udevice_t device)
/* create a cdc function */
func = rt_usbd_function_new(device, &_dev_desc, &ops);
//not support hs
//rt_usbd_device_set_qualifier(device, &_dev_qualifier);
/* For high speed mode supporting */
rt_usbd_device_set_qualifier(device, &dev_qualifier);
/* allocate memory for cdc vcom data */
data = (struct hid_s*)rt_malloc(sizeof(struct hid_s));
......
......@@ -611,7 +611,9 @@ static rt_err_t _ep_in_handler(ufunction_t func, rt_size_t size)
}
else
{
rt_usbd_ep_set_stall(func->device, data->ep_in);
//rt_kprintf("warning:in stall path but not stall\n");
/* FIXME: Disable the operation or the disk cannot work. */
//rt_usbd_ep_set_stall(func->device, data->ep_in);
}
data->csw_response.data_reside = 0;
}
......@@ -719,6 +721,19 @@ static void _cb_len_calc(ufunction_t func, struct scsi_cmd* cmd,
break;
}
}
//workaround: for stability in full-speed mode
else if(cmd->cmd_len == 12)
{
switch(cmd->type)
{
case COUNT:
data->cb_data_size = cbw->cb[4];
break;
default:
break;
}
}
else
{
// rt_kprintf("cmd_len error %d\n", cmd->cmd_len);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册