Changeset 0816c2e in mainline for uspace/lib/usbhost/src/hcd.c


Ignore:
Timestamp:
2013-01-04T11:22:10Z (12 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
b4c1c95
Parents:
17bbb28
Message:

libusbhost: Add hcd endpoint manipulation wrappers

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usbhost/src/hcd.c

    r17bbb28 r0816c2e  
    6262        hcd->ep_remove_hook = NULL;
    6363}
     64
     65/** Calls ep_add_hook upon endpoint registration.
     66 * @param ep Endpoint to be registered.
     67 * @param arg hcd_t in disguise.
     68 * @return Error code.
     69 */
     70static int register_helper(endpoint_t *ep, void *arg)
     71{
     72        hcd_t *hcd = arg;
     73        assert(ep);
     74        assert(hcd);
     75        if (hcd->ep_add_hook)
     76                return hcd->ep_add_hook(hcd, ep);
     77        return EOK;
     78}
     79
     80
     81/** Calls ep_remove_hook upon endpoint removal.
     82 * @param ep Endpoint to be unregistered.
     83 * @param arg hcd_t in disguise.
     84 */
     85static void unregister_helper(endpoint_t *ep, void *arg)
     86{
     87        hcd_t *hcd = arg;
     88        assert(ep);
     89        assert(hcd);
     90        if (hcd->ep_remove_hook)
     91                hcd->ep_remove_hook(hcd, ep);
     92}
     93
     94int hcd_add_ep(hcd_t *hcd, usb_target_t target, usb_direction_t dir,
     95    usb_transfer_type_t type, size_t max_packet_size, size_t size)
     96{
     97        assert(hcd);
     98        usb_speed_t speed = USB_SPEED_MAX;
     99        const int ret = usb_device_manager_get_info_by_address(
     100            &hcd->dev_manager, target.address, NULL, &speed);
     101        if (ret != EOK) {
     102                return ret;
     103        }
     104        return usb_endpoint_manager_add_ep(&hcd->ep_manager, target.address,
     105            target.endpoint, dir, type, speed, max_packet_size, size,
     106            register_helper, hcd);
     107}
     108
     109int hcd_remove_ep(hcd_t *hcd, usb_target_t target, usb_direction_t dir)
     110{
     111        assert(hcd);
     112        return usb_endpoint_manager_remove_ep(&hcd->ep_manager, target.address,
     113            target.endpoint, dir, unregister_helper, hcd);
     114}
     115
    64116
    65117typedef struct {
Note: See TracChangeset for help on using the changeset viewer.