diff options
| author | [email protected] <[email protected]> | 2012-12-12 16:37:38 +0000 |
|---|---|---|
| committer | [email protected] <[email protected]> | 2012-12-12 16:37:38 +0000 |
| commit | d8796d9639bb6e9e2c5d5a7cf4d54623ed905b93 (patch) | |
| tree | 20f4b0e0fe0151b0bd4aa4e4e8a4094fff62c20d /components/drivers | |
| parent | 53efe928d61504b04aa35064048364afb9364265 (diff) | |
change endpoint and class handler
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@2477 bbd45198-f89e-11dd-88c7-29a3b14d5316
Diffstat (limited to 'components/drivers')
| -rw-r--r-- | components/drivers/usb/usbdevice/core/core.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/components/drivers/usb/usbdevice/core/core.c b/components/drivers/usb/usbdevice/core/core.c index 13da280c17..312b186c6f 100644 --- a/components/drivers/usb/usbdevice/core/core.c +++ b/components/drivers/usb/usbdevice/core/core.c @@ -9,7 +9,8 @@ *
* Change Logs:
* Date Author Notes
- * 2012-10-01 Yi Qiu first version
+ * 2012-10-01 Yi Qiu first version
+ * 2012-12-12 heyuanjie87 change endpoint and class handler
*/
#include <rtthread.h>
@@ -318,7 +319,8 @@ static rt_err_t _set_config(struct udevice* device, ureq_t setup) }
}
/* after running all endpoints, then run class */
- if(cls->ops->run != RT_NULL) cls->ops->run(device);
+ if(cls->ops->run != RT_NULL)
+ cls->ops->run(device, cls);
}
/* issue status stage */
@@ -557,7 +559,7 @@ rt_err_t _sof_notify(udevice_t device) {
cls = (uclass_t)rt_list_entry(i, struct uclass, list);
if(cls->ops->sof_handler != RT_NULL)
- cls->ops->sof_handler(device);
+ cls->ops->sof_handler(device, cls);
}
return RT_EOK;
@@ -793,8 +795,7 @@ uclass_t rt_usbd_class_create(udevice_t device, udev_desc_t dev_desc, *
* @return an usb endpoint object on success, RT_NULL on fail.
*/
-uep_t rt_usbd_endpoint_create(uep_desc_t ep_desc,
- rt_err_t (*handler)(struct udevice*, rt_size_t size))
+uep_t rt_usbd_endpoint_create(uep_desc_t ep_desc, udep_handler_t handler)
{
uep_t ep;
@@ -957,7 +958,7 @@ ualtsetting_t rt_usbd_find_altsetting(uintf_t intf, rt_uint8_t value) *
* @return an usb endpoint object on found or RT_NULL on not found.
*/
-uep_t rt_usbd_find_endpoint(udevice_t device, rt_uint8_t ep_addr)
+uep_t rt_usbd_find_endpoint(udevice_t device, uclass_t* pcls, rt_uint8_t ep_addr)
{
uep_t ep;
struct rt_list_node *i, *j, *k;
@@ -980,7 +981,11 @@ uep_t rt_usbd_find_endpoint(udevice_t device, rt_uint8_t ep_addr) {
ep = (uep_t)rt_list_entry(k, struct uendpoint, list);
if(ep->ep_desc->bEndpointAddress == ep_addr)
+ {
+ if (pcls != RT_NULL)
+ *pcls = cls;
return ep;
+ }
}
}
}
@@ -1226,8 +1231,9 @@ static void rt_usbd_thread_entry(void* parameter) {
while(1)
{
- struct udev_msg msg;
+ struct udev_msg msg;
udevice_t device;
+ uclass_t cls;
uep_t ep;
/* receive message */
@@ -1244,9 +1250,9 @@ static void rt_usbd_thread_entry(void* parameter) rt_kprintf("invalid usb device\n");
break;
case USB_MSG_DATA_NOTIFY:
- ep = rt_usbd_find_endpoint(device, msg.content.ep_msg.ep_addr);
- if(ep != RT_NULL)
- ep->handler(device, msg.content.ep_msg.size);
+ ep = rt_usbd_find_endpoint(device, &cls, msg.content.ep_msg.ep_addr);
+ if(ep != RT_NULL)
+ ep->handler(device, cls, msg.content.ep_msg.size);
else
rt_kprintf("invalid endpoint\n");
break;
|
