未验证 提交 109576c8 编写于 作者: B Bernard Xiong 提交者: GitHub

Merge pull request #3068 from Guozhanxin/usb_fix

[usb device] 修复多备用设备的接口不能正常枚举的问题。
...@@ -1488,9 +1488,10 @@ uep_t rt_usbd_find_endpoint(udevice_t device, ufunction_t* pfunc, rt_uint8_t ep_ ...@@ -1488,9 +1488,10 @@ uep_t rt_usbd_find_endpoint(udevice_t device, ufunction_t* pfunc, rt_uint8_t ep_
*/ */
rt_err_t rt_usbd_device_add_config(udevice_t device, uconfig_t cfg) rt_err_t rt_usbd_device_add_config(udevice_t device, uconfig_t cfg)
{ {
struct rt_list_node *i, *j, *k; struct rt_list_node *i, *j, *k, *m;
ufunction_t func; ufunction_t func;
uintf_t intf; uintf_t intf;
ualtsetting_t altsetting;
uep_t ep; uep_t ep;
RT_DEBUG_LOG(RT_DEBUG_USB, ("rt_usbd_device_add_config\n")); RT_DEBUG_LOG(RT_DEBUG_USB, ("rt_usbd_device_add_config\n"));
...@@ -1512,11 +1513,14 @@ rt_err_t rt_usbd_device_add_config(udevice_t device, uconfig_t cfg) ...@@ -1512,11 +1513,14 @@ rt_err_t rt_usbd_device_add_config(udevice_t device, uconfig_t cfg)
intf = (uintf_t)rt_list_entry(j, struct uinterface, list); intf = (uintf_t)rt_list_entry(j, struct uinterface, list);
cfg->cfg_desc.bNumInterfaces++; cfg->cfg_desc.bNumInterfaces++;
for(k=intf->setting_list.next; k!=&intf->setting_list;k=k->next)
{
altsetting = (ualtsetting_t)rt_list_entry(k, struct ualtsetting, list);
/* allocate address for every endpoint in the interface alternate setting */ /* allocate address for every endpoint in the interface alternate setting */
for(k=intf->curr_setting->ep_list.next; for(m=altsetting->ep_list.next; m!=&altsetting->ep_list; m=m->next)
k!=&intf->curr_setting->ep_list; k=k->next)
{ {
ep = (uep_t)rt_list_entry(k, struct uendpoint, list); ep = (uep_t)rt_list_entry(m, struct uendpoint, list);
if(rt_usbd_ep_assign(device, ep) != RT_EOK) if(rt_usbd_ep_assign(device, ep) != RT_EOK)
{ {
rt_kprintf("endpoint assign error\n"); rt_kprintf("endpoint assign error\n");
...@@ -1525,9 +1529,10 @@ rt_err_t rt_usbd_device_add_config(udevice_t device, uconfig_t cfg) ...@@ -1525,9 +1529,10 @@ rt_err_t rt_usbd_device_add_config(udevice_t device, uconfig_t cfg)
/* construct complete configuration descriptor */ /* construct complete configuration descriptor */
rt_memcpy((void*)&cfg->cfg_desc.data[cfg->cfg_desc.wTotalLength - USB_DESC_LENGTH_CONFIG], rt_memcpy((void*)&cfg->cfg_desc.data[cfg->cfg_desc.wTotalLength - USB_DESC_LENGTH_CONFIG],
(void*)intf->curr_setting->desc, (void*)altsetting->desc,
intf->curr_setting->desc_size); altsetting->desc_size);
cfg->cfg_desc.wTotalLength += intf->curr_setting->desc_size; cfg->cfg_desc.wTotalLength += altsetting->desc_size;
}
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册