Changeset 1affef2f in mainline for uspace/lib/usbhost/src/hcd.c
- Timestamp:
- 2012-12-22T23:20:45Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 3c4663e
- Parents:
- a6a9910
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usbhost/src/hcd.c
ra6a9910 r1affef2f 38 38 #include <usb_iface.h> 39 39 #include <usb/debug.h> 40 #include <usb/request.h> 40 41 41 42 #include <usb/host/hcd.h> … … 60 61 hcd->ep_add_hook = NULL; 61 62 hcd->ep_remove_hook = NULL; 63 } 64 65 typedef struct { 66 void *original_data; 67 usbhc_iface_transfer_out_callback_t original_callback; 68 usb_target_t target; 69 hcd_t *hcd; 70 } toggle_t; 71 72 static void toggle_reset_callback(int retval, void *arg) 73 { 74 assert(arg); 75 toggle_t *toggle = arg; 76 if (retval == EOK) { 77 usb_log_debug2("Reseting toggle on %d:%d.\n", 78 toggle->target.address, toggle->target.endpoint); 79 usb_endpoint_manager_reset_toggle(&toggle->hcd->ep_manager, 80 toggle->target, toggle->target.endpoint == 0); 81 } 82 83 toggle->original_callback(retval, toggle->original_data); 62 84 } 63 85 … … 106 128 } 107 129 108 /* No private data and no private data dtor */ 109 usb_transfer_batch_t *batch = 110 usb_transfer_batch_create(ep, data, size, setup_data, 111 in, out, arg, fun); 130 /* Check for commands that reset toggle bit */ 131 if (ep->transfer_type == USB_TRANSFER_CONTROL) { 132 const int reset_toggle = usb_request_needs_toggle_reset( 133 (usb_device_request_setup_packet_t *) &setup_data); 134 if (reset_toggle >= 0) { 135 assert(out); 136 toggle_t *toggle = malloc(sizeof(toggle_t)); 137 if (!toggle) 138 return ENOMEM; 139 toggle->target.address = target.address; 140 toggle->target.endpoint = reset_toggle; 141 toggle->original_callback = out; 142 toggle->original_data = arg; 143 toggle->hcd = hcd; 144 145 arg = toggle; 146 out = toggle_reset_callback; 147 } 148 } 149 150 usb_transfer_batch_t *batch = usb_transfer_batch_create( 151 ep, data, size, setup_data, in, out, arg, fun); 112 152 if (!batch) { 113 153 return ENOMEM;
Note:
See TracChangeset
for help on using the changeset viewer.