[Components][USB Device]增加协议栈对HS设备的支持

- 增加winusb对HS的支持。其余class还在完善中
This commit is contained in:
ZYH 2018-03-16 16:02:57 +08:00
parent bce9bc47af
commit 0ab93e70f0
4 changed files with 99 additions and 12 deletions

80
.vscode/c_cpp_properties.json vendored Normal file
View File

@ -0,0 +1,80 @@
{
"configurations": [
{
"name": "Mac",
"includePath": [
"/usr/include",
"/usr/local/include",
"${workspaceRoot}"
],
"defines": [],
"intelliSenseMode": "clang-x64",
"browse": {
"path": [
"/usr/include",
"/usr/local/include",
"${workspaceRoot}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
},
"macFrameworkPath": [
"/System/Library/Frameworks",
"/Library/Frameworks"
]
},
{
"name": "Linux",
"includePath": [
"/usr/include",
"/usr/local/include",
"${workspaceRoot}"
],
"defines": [],
"intelliSenseMode": "clang-x64",
"browse": {
"path": [
"/usr/include",
"/usr/local/include",
"${workspaceRoot}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
},
{
"name": "Win32",
"includePath": [
"C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.13.26128/include/*",
"C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.13.26128/atlmfc/include/*",
"C:/Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/um",
"C:/Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/ucrt",
"C:/Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/shared",
"C:/Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/winrt",
"${workspaceRoot}",
"${workspaceRoot}/include",
"${workspaceRoot}/components/drivers/include"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"intelliSenseMode": "msvc-x64",
"browse": {
"path": [
"C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.13.26128/include/*",
"C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.13.26128/atlmfc/include/*",
"C:/Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/um",
"C:/Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/ucrt",
"C:/Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/shared",
"C:/Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/winrt",
"${workspaceRoot}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
}
],
"version": 3
}

View File

@ -140,6 +140,7 @@ struct udcd
struct uendpoint ep0; struct uendpoint ep0;
uep0_stage_t stage; uep0_stage_t stage;
struct ep_id* ep_pool; struct ep_id* ep_pool;
rt_uint8_t device_is_hs;
}; };
typedef struct udcd* udcd_t; typedef struct udcd* udcd_t;

View File

@ -43,13 +43,14 @@ static struct udevice_descriptor dev_desc =
//FS and HS needed //FS and HS needed
static struct usb_qualifier_descriptor dev_qualifier = static struct usb_qualifier_descriptor dev_qualifier =
{ {
sizeof(dev_qualifier), sizeof(dev_qualifier), //bLength
USB_DESC_TYPE_DEVICEQUALIFIER, USB_DESC_TYPE_DEVICEQUALIFIER, //bDescriptorType
0x0200, 0x0200, //bcdUSB
0x00, 0xFF, //bDeviceClass
0x00, 0x00, //bDeviceSubClass
64, 0x00, //bDeviceProtocol
0x01, 64, //bMaxPacketSize0
0x01, //bNumConfigurations
0, 0,
}; };
@ -81,14 +82,14 @@ struct winusb_descriptor _winusb_desc =
USB_DESC_TYPE_ENDPOINT, USB_DESC_TYPE_ENDPOINT,
USB_DYNAMIC | USB_DIR_OUT, USB_DYNAMIC | USB_DIR_OUT,
USB_EP_ATTR_BULK, USB_EP_ATTR_BULK,
0x40, USB_DYNAMIC,
0x00, 0x00,
/*endpoint descriptor*/ /*endpoint descriptor*/
USB_DESC_LENGTH_ENDPOINT, USB_DESC_LENGTH_ENDPOINT,
USB_DESC_TYPE_ENDPOINT, USB_DESC_TYPE_ENDPOINT,
USB_DYNAMIC | USB_DIR_IN, USB_DYNAMIC | USB_DIR_IN,
USB_EP_ATTR_BULK, USB_EP_ATTR_BULK,
0x40, USB_DYNAMIC,
0x00, 0x00,
}; };
@ -197,11 +198,13 @@ static struct ufunction_ops ops =
RT_NULL, RT_NULL,
}; };
static rt_err_t _winusb_descriptor_config(winusb_desc_t winusb, rt_uint8_t cintf_nr) static rt_err_t _winusb_descriptor_config(winusb_desc_t winusb, rt_uint8_t cintf_nr, rt_uint8_t device_is_hs)
{ {
#ifdef RT_USB_DEVICE_COMPOSITE #ifdef RT_USB_DEVICE_COMPOSITE
winusb->iad_desc.bFirstInterface = cintf_nr; winusb->iad_desc.bFirstInterface = cintf_nr;
#endif #endif
winusb->ep_out_desc.wMaxPacketSize = device_is_hs ? 512 : 64;
winusb->ep_in_desc.wMaxPacketSize = device_is_hs ? 512 : 64;
winusb_func_comp_id_desc.bFirstInterfaceNumber = cintf_nr; winusb_func_comp_id_desc.bFirstInterfaceNumber = cintf_nr;
return RT_EOK; return RT_EOK;
} }
@ -293,7 +296,7 @@ ufunction_t rt_usbd_function_winusb_create(udevice_t device)
rt_usbd_altsetting_config_descriptor(winusb_setting, &_winusb_desc, (rt_off_t)&((winusb_desc_t)0)->intf_desc); rt_usbd_altsetting_config_descriptor(winusb_setting, &_winusb_desc, (rt_off_t)&((winusb_desc_t)0)->intf_desc);
/* configure the hid interface descriptor */ /* configure the hid interface descriptor */
_winusb_descriptor_config(winusb_setting->desc, winusb_intf->intf_num); _winusb_descriptor_config(winusb_setting->desc, winusb_intf->intf_num, device->dcd->device_is_hs);
/* create endpoint */ /* create endpoint */
winusb_desc = (winusb_desc_t)winusb_setting->desc; winusb_desc = (winusb_desc_t)winusb_setting->desc;

View File

@ -166,7 +166,7 @@ static rt_err_t _get_qualifier_descriptor(struct udevice* device, ureq_t setup)
RT_ASSERT(device != RT_NULL); RT_ASSERT(device != RT_NULL);
RT_ASSERT(setup != RT_NULL); RT_ASSERT(setup != RT_NULL);
if(device->dev_qualifier) if(device->dev_qualifier && device->dcd->device_is_hs)
{ {
/* send device qualifier descriptor to endpoint 0 */ /* send device qualifier descriptor to endpoint 0 */
rt_usbd_ep0_write(device, (rt_uint8_t*)device->dev_qualifier, rt_usbd_ep0_write(device, (rt_uint8_t*)device->dev_qualifier,
@ -210,6 +210,9 @@ static rt_err_t _get_descriptor(struct udevice* device, ureq_t setup)
case USB_DESC_TYPE_DEVICEQUALIFIER: case USB_DESC_TYPE_DEVICEQUALIFIER:
_get_qualifier_descriptor(device, setup); _get_qualifier_descriptor(device, setup);
break; break;
case USB_DESC_TYPE_OTHERSPEED:
_get_config_descriptor(device, setup);
break;
default: default:
rt_kprintf("unsupported descriptor request\n"); rt_kprintf("unsupported descriptor request\n");
rt_usbd_ep0_set_stall(device); rt_usbd_ep0_set_stall(device);