提交 a3bde3c4 编写于 作者: H heyuanjie87

handle standard request to interface that defined in class

上级 9721603b
...@@ -355,6 +355,38 @@ static rt_err_t _set_address(struct udevice* device, ureq_t setup) ...@@ -355,6 +355,38 @@ static rt_err_t _set_address(struct udevice* device, ureq_t setup)
return RT_EOK; return RT_EOK;
} }
/**
* This function will handle standard request to
* interface that defined in class-specifics
*
* @param device the usb device object.
* @param setup the setup request.
*
* @return RT_EOK on successful.
*/
static rt_err_t _request_interface(struct udevice* device, ureq_t setup)
{
uintf_t intf;
uclass_t cls;
rt_err_t ret;
/* parameter check */
RT_ASSERT(device != RT_NULL);
RT_ASSERT(setup != RT_NULL);
RT_DEBUG_LOG(RT_DEBUG_USB, ("_request_interface\n"));
intf = rt_usbd_find_interface(device, setup->index & 0xFF, &cls);
if (intf != RT_NULL)
{
ret = intf->handler(device, cls, setup);
}
else
ret = -RT_ERROR;
return ret;
}
/** /**
* This function will handle standard request. * This function will handle standard request.
* *
...@@ -419,9 +451,14 @@ static rt_err_t _standard_request(struct udevice* device, ureq_t setup) ...@@ -419,9 +451,14 @@ static rt_err_t _standard_request(struct udevice* device, ureq_t setup)
_set_interface(device, setup); _set_interface(device, setup);
break; break;
default: default:
rt_kprintf("unknown interface request\n"); if (_request_interface(device, setup) != RT_EOK)
dcd_ep_stall(device->dcd, 0); {
break; rt_kprintf("unknown interface request\n");
dcd_ep_stall(device->dcd, 0);
return - RT_ERROR;
}
else
break;
} }
break; break;
case USB_REQ_TYPE_ENDPOINT: case USB_REQ_TYPE_ENDPOINT:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册