Changes in uspace/drv/usbkbd/main.c [f9a0cef:692f13e4] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/usbkbd/main.c
rf9a0cef r692f13e4 35 35 #include <usb/devreq.h> 36 36 #include <usb/descriptor.h> 37 #include "descparser.h" 37 38 38 39 #define BUFFER_SIZE 32 39 40 #define NAME "usbkbd" 40 41 41 #define GUESSED_POLL_ENDPOINT 1 42 static const usb_endpoint_t CONTROL_EP = 0; 42 43 43 44 /* … … 47 48 void *arg) 48 49 { 49 50 printf("Got keys: "); 51 unsigned i; 52 for (i = 0; i < count; ++i) { 53 printf("%d ", key_codes[i]); 54 } 55 printf("\n"); 50 56 } 51 57 … … 53 59 * Kbd functions 54 60 */ 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??) 61 static int usbkbd_process_descriptors(usb_hid_dev_kbd_t *kbd_dev) 62 { 63 // get the first configuration descriptor (TODO: parse also other!) 96 64 usb_standard_configuration_descriptor_t config_desc; 97 65 … … 122 90 } 123 91 124 rc = usbkbd_parse_descriptors(kbd_dev, descriptors, transferred); 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); 125 100 free(descriptors); 126 101 … … 130 105 static usb_hid_dev_kbd_t *usbkbd_init_device(device_t *dev) 131 106 { 132 usb_hid_dev_kbd_t *kbd_dev = (usb_hid_dev_kbd_t *) malloc(133 107 usb_hid_dev_kbd_t *kbd_dev = (usb_hid_dev_kbd_t *)calloc(1, 108 sizeof(usb_hid_dev_kbd_t)); 134 109 135 110 if (kbd_dev == NULL) { … … 155 130 156 131 // default endpoint 157 kbd_dev-> poll_endpoint = GUESSED_POLL_ENDPOINT;132 kbd_dev->default_ep = CONTROL_EP; 158 133 159 134 /* … … 164 139 */ 165 140 166 // TODO: get descriptors 167 usbkbd_get_descriptors(kbd_dev); 168 // TODO: parse descriptors and save endpoints 141 // TODO: get descriptors, parse descriptors and save endpoints 142 usbkbd_process_descriptors(kbd_dev); 169 143 170 144 return kbd_dev; … … 204 178 usb_target_t poll_target = { 205 179 .address = kbd_dev->address, 206 .endpoint = kbd_dev-> poll_endpoint180 .endpoint = kbd_dev->default_ep 207 181 }; 208 182 209 183 while (true) { 210 async_usleep(1000 * 1000);211 184 rc = usb_drv_async_interrupt_in(kbd_dev->device->parent_phone, 212 185 poll_target, buffer, BUFFER_SIZE, &actual_size, &handle);
Note:
See TracChangeset
for help on using the changeset viewer.