Changes in uspace/drv/usbkbd/main.c [692f13e4:f9a0cef] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/usbkbd/main.c
r692f13e4 rf9a0cef 35 35 #include <usb/devreq.h> 36 36 #include <usb/descriptor.h> 37 #include "descparser.h"38 37 39 38 #define BUFFER_SIZE 32 40 39 #define NAME "usbkbd" 41 40 42 static const usb_endpoint_t CONTROL_EP = 0; 41 #define GUESSED_POLL_ENDPOINT 1 43 42 44 43 /* … … 48 47 void *arg) 49 48 { 50 printf("Got keys: "); 51 unsigned i; 52 for (i = 0; i < count; ++i) { 53 printf("%d ", key_codes[i]); 54 } 55 printf("\n"); 49 56 50 } 57 51 … … 59 53 * Kbd functions 60 54 */ 61 static int usbkbd_process_descriptors(usb_hid_dev_kbd_t *kbd_dev) 62 { 63 // get the first configuration descriptor (TODO: parse also other!) 55 static int usbkbd_parse_descriptors(usb_hid_dev_kbd_t *kbd_dev, 56 const uint8_t *data, size_t size) 57 { 58 // const uint8_t *pos = data; 59 60 // // get the configuration descriptor (should be first) 61 // if (*pos != sizeof(usb_standard_configuration_descriptor_t) 62 // || *(pos + 1) != USB_DESCTYPE_CONFIGURATION) { 63 // fprintf(stderr, "Wrong format of configuration descriptor"); 64 // return EINVAL; 65 // } 66 67 // usb_standard_configuration_descriptor_t config_descriptor; 68 // memcpy(&config_descriptor, pos, 69 // sizeof(usb_standard_configuration_descriptor_t)); 70 // pos += sizeof(usb_standard_configuration_descriptor_t); 71 72 // // parse other descriptors 73 // while (pos - data < size) { 74 // //uint8_t desc_size = *pos; 75 // uint8_t desc_type = *(pos + 1); 76 // switch (desc_type) { 77 // case USB_DESCTYPE_INTERFACE: 78 // break; 79 // case USB_DESCTYPE_ENDPOINT: 80 // break; 81 // case USB_DESCTYPE_HID: 82 // break; 83 // case USB_DESCTYPE_HID_REPORT: 84 // break; 85 // case USB_DESCTYPE_HID_PHYSICAL: 86 // break; 87 // } 88 // } 89 90 return EOK; 91 } 92 93 static int usbkbd_get_descriptors(usb_hid_dev_kbd_t *kbd_dev) 94 { 95 // get the first configuration descriptor (TODO: or some other??) 64 96 usb_standard_configuration_descriptor_t config_desc; 65 97 … … 90 122 } 91 123 92 kbd_dev->conf = (usb_hid_configuration_t *)calloc(1, 93 sizeof(usb_hid_configuration_t)); 94 if (kbd_dev->conf == NULL) { 95 free(descriptors); 96 return ENOMEM; 97 } 98 99 rc = usbkbd_parse_descriptors(descriptors, transferred, kbd_dev->conf); 124 rc = usbkbd_parse_descriptors(kbd_dev, descriptors, transferred); 100 125 free(descriptors); 101 126 … … 105 130 static usb_hid_dev_kbd_t *usbkbd_init_device(device_t *dev) 106 131 { 107 usb_hid_dev_kbd_t *kbd_dev = (usb_hid_dev_kbd_t *) calloc(1,108 132 usb_hid_dev_kbd_t *kbd_dev = (usb_hid_dev_kbd_t *)malloc( 133 sizeof(usb_hid_dev_kbd_t)); 109 134 110 135 if (kbd_dev == NULL) { … … 130 155 131 156 // default endpoint 132 kbd_dev-> default_ep = CONTROL_EP;157 kbd_dev->poll_endpoint = GUESSED_POLL_ENDPOINT; 133 158 134 159 /* … … 139 164 */ 140 165 141 // TODO: get descriptors, parse descriptors and save endpoints 142 usbkbd_process_descriptors(kbd_dev); 166 // TODO: get descriptors 167 usbkbd_get_descriptors(kbd_dev); 168 // TODO: parse descriptors and save endpoints 143 169 144 170 return kbd_dev; … … 178 204 usb_target_t poll_target = { 179 205 .address = kbd_dev->address, 180 .endpoint = kbd_dev-> default_ep206 .endpoint = kbd_dev->poll_endpoint 181 207 }; 182 208 183 209 while (true) { 210 async_usleep(1000 * 1000); 184 211 rc = usb_drv_async_interrupt_in(kbd_dev->device->parent_phone, 185 212 poll_target, buffer, BUFFER_SIZE, &actual_size, &handle);
Note:
See TracChangeset
for help on using the changeset viewer.