Changeset d5e7668 in mainline for uspace/lib/usbvirt/src/ctrlpipe.c
- Timestamp:
- 2010-12-13T14:56:16Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 266d0871
- Parents:
- 76daaf9f
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usbvirt/src/ctrlpipe.c
r76daaf9f rd5e7668 76 76 } 77 77 78 #define _GET_BIT(byte, bit) \ 79 (((byte) & (1 << (bit))) ? '1' : '0') 80 #define _GET_BITS(byte) \ 81 _GET_BIT(byte, 7), _GET_BIT(byte, 6), _GET_BIT(byte, 5), \ 82 _GET_BIT(byte, 4), _GET_BIT(byte, 3), _GET_BIT(byte, 2), \ 83 _GET_BIT(byte, 1), _GET_BIT(byte, 0) 84 85 static int find_and_run_handler(usbvirt_device_t *device, 86 usbvirt_control_transfer_handler_t *handlers, 87 usb_device_request_setup_packet_t *setup_packet, 88 uint8_t *data) 89 { 90 int rc = EFORWARD; 91 usbvirt_control_transfer_handler_t *suitable_handler 92 = find_handler(handlers, setup_packet); 93 if (suitable_handler != NULL) { 94 const char *callback_name = "user handler"; 95 if (suitable_handler->name != NULL) { 96 callback_name = suitable_handler->name; 97 } 98 device->lib_debug(device, 1, USBVIRT_DEBUGTAG_CONTROL_PIPE_ZERO, 99 "pipe #0 - calling %s " \ 100 "[%c.%c%c.%c%c%c%c%c, R%d, V%d, I%d, L%d]", 101 callback_name, 102 _GET_BITS(setup_packet->request_type), 103 setup_packet->request, setup_packet->value, 104 setup_packet->index, setup_packet->length); 105 rc = suitable_handler->callback(device, setup_packet, data); 106 } 107 108 return rc; 109 } 110 #undef _GET_BITS 111 #undef _GET_BIT 78 112 79 113 … … 82 116 int control_pipe(usbvirt_device_t *device, usbvirt_control_transfer_t *transfer) 83 117 { 84 device->lib_debug(device, 1, USBVIRT_DEBUGTAG_CONTROL_PIPE_ZERO,118 device->lib_debug(device, 2, USBVIRT_DEBUGTAG_CONTROL_PIPE_ZERO, 85 119 "op on control pipe zero (request_size=%u)", transfer->request_size); 86 120 … … 91 125 usb_device_request_setup_packet_t *request 92 126 = (usb_device_request_setup_packet_t *) transfer->request; 93 printf("Request: %d,%d\n", request->request_type, request->request); 94 127 95 128 /* 96 129 * First, see whether user provided its own callback. … … 98 131 int rc = EFORWARD; 99 132 if (device->ops) { 100 usbvirt_control_transfer_handler_t *user_handler 101 = find_handler(device->ops->control_transfer_handlers, 102 request); 103 if (user_handler != NULL) { 104 rc = user_handler->callback(device, request, 105 transfer->data); 106 } 133 rc = find_and_run_handler(device, 134 device->ops->control_transfer_handlers, 135 request, transfer->data); 107 136 } 108 137 … … 112 141 */ 113 142 if (rc == EFORWARD) { 114 usbvirt_control_transfer_handler_t *lib_handler 115 = find_handler(control_pipe_zero_local_handlers, 116 request); 117 if (lib_handler != NULL) { 118 rc = lib_handler->callback(device, request, 119 transfer->data); 120 } 143 rc = find_and_run_handler(device, 144 control_pipe_zero_local_handlers, 145 request, transfer->data); 121 146 } 122 147
Note:
See TracChangeset
for help on using the changeset viewer.