[Components][USB Device]增加协议栈对HS设备的支持
- 增加winusb对HS的支持。其余class还在完善中
This commit is contained in:
parent
bce9bc47af
commit
0ab93e70f0
|
@ -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
|
||||||
|
}
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue