Changeset 4971812 in mainline
- Timestamp:
- 2010-10-10T21:20:02Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 0e41957
- Parents:
- 6c1315b
- Location:
- uspace
- Files:
-
- 1 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/virtusbkbd/virtusbkbd.c
r6c1315b r4971812 46 46 47 47 #include <usb/hcd.h> 48 #include <usb/device.h> 48 49 #include <usbvirt/device.h> 49 50 #include <usbvirt/hub.h> … … 69 70 } 70 71 72 static usb_standard_device_descriptor_t std_descriptor = { 73 .length = sizeof(usb_standard_device_descriptor_t), 74 .descriptor_type = 1, 75 .usb_spec_version = 0x110, 76 .device_class = 0x03, 77 .device_subclass = 0, 78 .device_protocol = 0, 79 .max_packet_size = 64, 80 .configuration_count = 1 81 }; 82 71 83 /** Keyboard callbacks. 72 84 * We abuse the fact that static variables are zero-filled. … … 81 93 static usbvirt_device_t keyboard_dev = { 82 94 .ops = &keyboard_ops, 95 .standard_descriptor = &std_descriptor, 83 96 .device_id_ = USBVIRT_DEV_KEYBOARD_ID 84 97 }; -
uspace/lib/usbvirt/Makefile
r6c1315b r4971812 36 36 ctrlpipe.c \ 37 37 incoming.c \ 38 main.c 38 main.c \ 39 stdreq.c 39 40 40 41 include $(USPACE_PREFIX)/Makefile.common -
uspace/lib/usbvirt/ctrlpipe.c
r6c1315b r4971812 37 37 #include "private.h" 38 38 39 #define REQUEST_TYPE_STANDARD 0 40 #define REQUEST_TYPE_CLASS 1 41 42 #define GET_MIDBITS_MASK(size, shift) \ 43 (((1 << size) - 1) << shift) 44 #define GET_MIDBITS(value, size, shift) \ 45 ((value & GET_MIDBITS_MASK(size, shift)) >> shift) 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 static int request_get_type(uint8_t request_type) 54 { 55 return GET_MIDBITS(request_type, 2, 5); 56 } 57 58 static int request_get_recipient(uint8_t request_type) 59 { 60 return GET_MIDBITS(request_type, 5, 0); 61 } 62 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 39 72 int control_pipe(void *buffer, size_t size) 40 73 { 41 // TODO 74 if (size < sizeof(devreq_setup_packet_t)) { 75 return ENOMEM; 76 } 77 78 devreq_setup_packet_t *request = (devreq_setup_packet_t *) buffer; 79 uint8_t *remaining_data = ((uint8_t *) request) + sizeof(devreq_setup_packet_t); 80 81 usb_direction_t direction = request_get_direction(request->request_type); 82 int type = request_get_type(request->request_type); 83 int recipient = request_get_recipient(request->request_type); 84 85 86 switch (type) { 87 case REQUEST_TYPE_STANDARD: 88 return handle_std_request(direction, recipient, 89 request->request, request->value, 90 request->index, request->length, 91 remaining_data); 92 break; 93 case REQUEST_TYPE_CLASS: 94 if (DEVICE_HAS_OP(device, on_devreq_class)) { 95 return device->ops->on_devreq_class(device, 96 direction, recipient, 97 request->request, request->value, 98 request->index, request->length, 99 remaining_data); 100 } 101 break; 102 default: 103 break; 104 } 105 42 106 return EOK; 43 107 } -
uspace/lib/usbvirt/device.h
r6c1315b r4971812 37 37 38 38 #include <usb/hcd.h> 39 #include <usb/device.h> 39 40 #include <usb/devreq.h> 40 41 … … 43 44 typedef int (*usbvirt_on_devreq_t)(struct usbvirt_device *dev, 44 45 usb_direction_t, int recipient, 45 usb_stddevreq_t, int value, int index, int length); 46 uint8_t request, uint16_t value, uint16_t index, uint16_t length, 47 uint8_t *remaining_data); 46 48 47 49 typedef struct { … … 64 66 usb_endpoint_t endpoint, void *buffer, size_t size); 65 67 68 69 70 /* Device attributes. */ 71 72 /** Standard device descriptor. 73 * If this descriptor is set (i.e. not NULL), the framework 74 * automatically handles call for its retrieval. 75 */ 76 usb_standard_device_descriptor_t *standard_descriptor; 77 78 79 /* Private attributes. */ 80 66 81 /** Phone to HC. 67 82 * @warning Do not change, this is private variable. -
uspace/lib/usbvirt/private.h
r6c1315b r4971812 41 41 extern usbvirt_device_t *device; 42 42 43 #define DEVICE_HAS_OP(dev, op) \ 44 ( \ 45 ( ((dev)->ops) != NULL ) \ 46 && \ 47 ( ((dev)->ops->op) != NULL ) \ 48 ) 43 49 44 50 int usbvirt_data_to_host(struct usbvirt_device *dev, … … 49 55 int control_pipe(void *buffer, size_t size); 50 56 57 int handle_std_request(usb_direction_t direction, int recipient, 58 uint16_t request, uint16_t value, uint16_t index, uint16_t length, 59 uint8_t *remaining_data); 60 51 61 #endif 52 62 /**
Note:
See TracChangeset
for help on using the changeset viewer.