Changeset d97d209 in mainline for uspace/lib/usbvirt/ctrlpipe.c
- Timestamp:
- 2010-10-10T22:01:32Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 2c970ee
- Parents:
- 0e41957
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usbvirt/ctrlpipe.c
r0e41957 rd97d209 45 45 ((value & GET_MIDBITS_MASK(size, shift)) >> shift) 46 46 47 static usb_direction_t request_get_direction(uint8_t request_type)48 {49 int bit7 = GET_MIDBITS(request_type, 1, 7);50 return bit7 ? USB_DIRECTION_IN : USB_DIRECTION_OUT;51 }52 53 47 static int request_get_type(uint8_t request_type) 54 48 { … … 56 50 } 57 51 58 static int request_get_recipient(uint8_t request_type)59 {60 return GET_MIDBITS(request_type, 5, 0);61 }62 52 63 64 typedef struct {65 uint8_t request_type;66 uint8_t request;67 uint16_t value;68 uint16_t index;69 uint16_t length;70 } __attribute__ ((packed)) devreq_setup_packet_t;71 53 72 54 int control_pipe(void *buffer, size_t size) 73 55 { 74 if (size < sizeof( devreq_setup_packet_t)) {56 if (size < sizeof(usb_device_request_setup_packet_t)) { 75 57 return ENOMEM; 76 58 } 77 59 78 devreq_setup_packet_t *request = (devreq_setup_packet_t *) buffer;79 uint8_t *remaining_data = ((uint8_t *) request) + sizeof( devreq_setup_packet_t);60 usb_device_request_setup_packet_t *request = (usb_device_request_setup_packet_t *) buffer; 61 uint8_t *remaining_data = ((uint8_t *) request) + sizeof(usb_device_request_setup_packet_t); 80 62 81 usb_direction_t direction = request_get_direction(request->request_type);82 63 int type = request_get_type(request->request_type); 83 int recipient = request_get_recipient(request->request_type);84 85 64 86 65 switch (type) { 87 66 case REQUEST_TYPE_STANDARD: 88 return handle_std_request(direction, recipient, 89 request->request, request->value, 90 request->index, request->length, 91 remaining_data); 67 return handle_std_request(request, remaining_data); 92 68 break; 93 69 case REQUEST_TYPE_CLASS: 94 70 if (DEVICE_HAS_OP(device, on_devreq_class)) { 95 71 return device->ops->on_devreq_class(device, 96 direction, recipient, 97 request->request, request->value, 98 request->index, request->length, 99 remaining_data); 72 request, remaining_data); 100 73 } 101 74 break;
Note:
See TracChangeset
for help on using the changeset viewer.