Changes in uspace/drv/bus/usb/usbhid/usbhid.c [ad22fa4:e2dfa86] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/usbhid/usbhid.c
rad22fa4 re2dfa86 41 41 #include <usb/hid/hidreport.h> 42 42 #include <usb/hid/request.h> 43 43 44 #include <errno.h> 45 #include <macros.h> 44 46 #include <str_error.h> 45 47 … … 114 116 const usb_hid_subdriver_mapping_t *mapping) 115 117 { 116 assert(hid_dev != NULL); 117 assert(hid_dev->usb_dev != NULL); 118 119 return (hid_dev->usb_dev->descriptors.device.vendor_id 120 == mapping->vendor_id 121 && hid_dev->usb_dev->descriptors.device.product_id 122 == mapping->product_id); 118 assert(hid_dev); 119 assert(hid_dev->usb_dev); 120 assert(mapping); 121 const usb_standard_device_descriptor_t *d = 122 &usb_device_descriptors(hid_dev->usb_dev)->device; 123 124 return (d->vendor_id == mapping->vendor_id) 125 && (d->product_id == mapping->product_id); 123 126 } 124 127 … … 264 267 } 265 268 266 static int usb_hid_check_pipes(usb_hid_dev_t *hid_dev, constusb_device_t *dev)269 static int usb_hid_check_pipes(usb_hid_dev_t *hid_dev, usb_device_t *dev) 267 270 { 268 271 assert(hid_dev); … … 270 273 271 274 static const struct { 272 unsigned ep_number;275 const usb_endpoint_description_t *desc; 273 276 const char* description; 274 277 } endpoints[] = { 275 { USB_HID_KBD_POLL_EP_NO, "Keyboard endpoint"},276 { USB_HID_MOUSE_POLL_EP_NO, "Mouse endpoint"},277 { USB_HID_GENERIC_POLL_EP_NO, "Generic HID endpoint"},278 {&usb_hid_kbd_poll_endpoint_description, "Keyboard endpoint"}, 279 {&usb_hid_mouse_poll_endpoint_description, "Mouse endpoint"}, 280 {&usb_hid_generic_poll_endpoint_description, "Generic HID endpoint"}, 278 281 }; 279 282 280 for (unsigned i = 0; i < sizeof(endpoints)/sizeof(endpoints[0]); ++i) { 281 if (endpoints[i].ep_number >= dev->pipes_count) { 282 return EINVAL; 283 } 284 if (dev->pipes[endpoints[i].ep_number].present) { 283 for (unsigned i = 0; i < ARRAY_SIZE(endpoints); ++i) { 284 usb_endpoint_mapping_t *epm = 285 usb_device_get_mapped_ep_desc(dev, endpoints[i].desc); 286 if (epm && epm->present) { 285 287 usb_log_debug("Found: %s.\n", endpoints[i].description); 286 hid_dev->poll_pipe_ index = endpoints[i].ep_number;288 hid_dev->poll_pipe_mapping = epm; 287 289 return EOK; 288 290 } … … 351 353 /* The USB device should already be initialized, save it in structure */ 352 354 hid_dev->usb_dev = dev; 353 hid_dev->poll_pipe_ index = -1;355 hid_dev->poll_pipe_mapping = NULL; 354 356 355 357 int rc = usb_hid_check_pipes(hid_dev, dev); … … 381 383 "boot protocol.\n"); 382 384 383 switch (hid_dev->poll_pipe_ index) {384 case USB_HID_ KBD_POLL_EP_NO:385 switch (hid_dev->poll_pipe_mapping->interface->interface_protocol) { 386 case USB_HID_PROTOCOL_KEYBOARD: 385 387 usb_log_info("Falling back to kbd boot protocol.\n"); 386 388 rc = usb_kbd_set_boot_protocol(hid_dev); … … 389 391 } 390 392 break; 391 case USB_HID_ MOUSE_POLL_EP_NO:393 case USB_HID_PROTOCOL_MOUSE: 392 394 usb_log_info("Falling back to mouse boot protocol.\n"); 393 395 rc = usb_mouse_set_boot_protocol(hid_dev); … … 397 399 break; 398 400 default: 399 assert(hid_dev->poll_pipe_index400 == USB_HID_GENERIC_POLL_EP_NO);401 401 usb_log_info("Falling back to generic HID driver.\n"); 402 402 usb_hid_set_generic_hid_subdriver(hid_dev); … … 415 415 } 416 416 417 /* Initialize subdrivers */ 417 /* 418 * 1) subdriver vytvori vlastnu ddf_fun, vlastne ddf_dev_ops, ktore da 419 * do nej. 420 * 2) do tych ops do .interfaces[DEV_IFACE_USBHID (asi)] priradi 421 * vyplnenu strukturu usbhid_iface_t. 422 * 3) klientska aplikacia - musi si rucne vytvorit telefon 423 * (devman_device_connect() - cesta k zariadeniu (/hw/pci0/...) az 424 * k tej fcii. 425 * pouzit usb/classes/hid/iface.h - prvy int je telefon 426 */ 418 427 bool ok = false; 419 428 for (unsigned i = 0; i < hid_dev->subdriver_count; ++i) { … … 476 485 &hid_dev->report, buffer, buffer_size, &hid_dev->report_id); 477 486 if (rc != EOK) { 478 usb_log_warning(" Errorin usb_hid_parse_report():"487 usb_log_warning("Failure in usb_hid_parse_report():" 479 488 "%s\n", str_error(rc)); 480 489 }
Note:
See TracChangeset
for help on using the changeset viewer.