Changes in uspace/drv/usbhid/usbhid.c [4125b7d:054537b] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/usbhid/usbhid.c
r4125b7d r054537b 136 136 137 137 // set the init callback 138 hid_dev->subdrivers[0].init = NULL;138 hid_dev->subdrivers[0].init = usb_generic_hid_init; 139 139 140 140 // set the polling callback … … 158 158 const usb_hid_subdriver_mapping_t *mapping) 159 159 { 160 return false; 160 assert(hid_dev != NULL); 161 assert(hid_dev->usb_dev != NULL); 162 163 return (hid_dev->usb_dev->descriptors.device.vendor_id 164 == mapping->vendor_id 165 && hid_dev->usb_dev->descriptors.device.product_id 166 == mapping->product_id); 161 167 } 162 168 … … 192 198 } 193 199 194 assert(hid_dev-> parser!= NULL);200 assert(hid_dev->report != NULL); 195 201 196 202 usb_log_debug("Compare flags: %d\n", mapping->compare); 197 size_t size = usb_hid_report_input_length(hid_dev-> parser, usage_path,203 size_t size = usb_hid_report_input_length(hid_dev->report, usage_path, 198 204 mapping->compare); 199 205 usb_log_debug("Size of the input report: %zuB\n", size); … … 251 257 while (count < USB_HID_MAX_SUBDRIVERS && 252 258 (mapping->usage_path != NULL 253 || mapping->vendor_id != 0 || mapping->product_id != 0)) {259 || mapping->vendor_id >= 0 || mapping->product_id >= 0)) { 254 260 // check the vendor & product ID 255 if (mapping->vendor_id != 0 && mapping->product_id ==0) {256 usb_log_warning("Missing Product ID for Vendor ID % u\n",261 if (mapping->vendor_id >= 0 && mapping->product_id < 0) { 262 usb_log_warning("Missing Product ID for Vendor ID %d\n", 257 263 mapping->vendor_id); 258 264 return EINVAL; 259 265 } 260 if (mapping->product_id != 0 && mapping->vendor_id ==0) {261 usb_log_warning("Missing Vendor ID for Product ID % u\n",266 if (mapping->product_id >= 0 && mapping->vendor_id < 0) { 267 usb_log_warning("Missing Vendor ID for Product ID %d\n", 262 268 mapping->product_id); 263 269 return EINVAL; … … 267 273 matched = false; 268 274 269 if (mapping->vendor_id != 0) {270 assert(mapping->product_id != 0);275 if (mapping->vendor_id >= 0) { 276 assert(mapping->product_id >= 0); 271 277 usb_log_debug("Comparing device against vendor ID %u" 272 278 " and product ID %u.\n", mapping->vendor_id, … … 341 347 } 342 348 343 hid_dev-> parser = (usb_hid_report_parser_t *)(malloc(sizeof(344 usb_hid_report_ parser_t)));345 if (hid_dev-> parser== NULL) {349 hid_dev->report = (usb_hid_report_t *)(malloc(sizeof( 350 usb_hid_report_t))); 351 if (hid_dev->report == NULL) { 346 352 usb_log_fatal("No memory!\n"); 347 353 free(hid_dev); … … 382 388 return rc; 383 389 } 384 385 /* Initialize the report parser. */ 386 rc = usb_hid_parser_init(hid_dev->parser); 387 if (rc != EOK) { 388 usb_log_error("Failed to initialize report parser.\n"); 389 //usb_hid_free(&hid_dev); 390 return rc; 391 } 392 390 393 391 /* Get the report descriptor and parse it. */ 394 392 rc = usb_hid_process_report_descriptor(hid_dev->usb_dev, 395 hid_dev-> parser);393 hid_dev->report); 396 394 397 395 bool fallback = false; … … 492 490 usb_hid_dev_t *hid_dev = (usb_hid_dev_t *)arg; 493 491 492 int allocated = (hid_dev->input_report != NULL); 493 494 if (!allocated 495 || hid_dev->input_report_size < buffer_size) { 496 uint8_t *input_old = hid_dev->input_report; 497 uint8_t *input_new = (uint8_t *)malloc(buffer_size); 498 499 if (input_new == NULL) { 500 usb_log_error("Failed to allocate space for input " 501 "buffer. This event may not be reported\n"); 502 memset(hid_dev->input_report, 0, 503 hid_dev->input_report_size); 504 } else { 505 memcpy(input_new, input_old, 506 hid_dev->input_report_size); 507 hid_dev->input_report = input_new; 508 if (allocated) { 509 free(input_old); 510 } 511 } 512 } 513 514 /*! @todo This should probably be atomic. */ 515 memcpy(hid_dev->input_report, buffer, buffer_size); 516 hid_dev->input_report_size = buffer_size; 517 494 518 bool cont = false; 495 519 … … 530 554 /*----------------------------------------------------------------------------*/ 531 555 532 const char *usb_hid_get_function_name(const usb_hid_dev_t *hid_dev)533 {534 switch (hid_dev->poll_pipe_index) {535 case USB_HID_KBD_POLL_EP_NO:536 return HID_KBD_FUN_NAME;537 break;538 case USB_HID_MOUSE_POLL_EP_NO:539 return HID_MOUSE_FUN_NAME;540 break;541 default:542 return HID_GENERIC_FUN_NAME;543 }544 }545 546 /*----------------------------------------------------------------------------*/ 547 548 const char *usb_hid_get_class_name(const usb_hid_dev_t *hid_dev)549 {550 // this means that only boot protocol keyboards will be connected551 // to the console; there is probably no better way to do this552 553 switch (hid_dev->poll_pipe_index) {554 case USB_HID_KBD_POLL_EP_NO:555 return HID_KBD_CLASS_NAME;556 break;557 case USB_HID_MOUSE_POLL_EP_NO:558 return HID_MOUSE_CLASS_NAME;559 break;560 default:561 return HID_GENERIC_CLASS_NAME;562 }563 }556 //const char *usb_hid_get_function_name(const usb_hid_dev_t *hid_dev) 557 //{ 558 // switch (hid_dev->poll_pipe_index) { 559 // case USB_HID_KBD_POLL_EP_NO: 560 // return HID_KBD_FUN_NAME; 561 // break; 562 // case USB_HID_MOUSE_POLL_EP_NO: 563 // return HID_MOUSE_FUN_NAME; 564 // break; 565 // default: 566 // return HID_GENERIC_FUN_NAME; 567 // } 568 //} 569 570 /*----------------------------------------------------------------------------*/ 571 572 //const char *usb_hid_get_class_name(const usb_hid_dev_t *hid_dev) 573 //{ 574 // // this means that only boot protocol keyboards will be connected 575 // // to the console; there is probably no better way to do this 576 577 // switch (hid_dev->poll_pipe_index) { 578 // case USB_HID_KBD_POLL_EP_NO: 579 // return HID_KBD_CLASS_NAME; 580 // break; 581 // case USB_HID_MOUSE_POLL_EP_NO: 582 // return HID_MOUSE_CLASS_NAME; 583 // break; 584 // default: 585 // return HID_GENERIC_CLASS_NAME; 586 // } 587 //} 564 588 565 589 /*----------------------------------------------------------------------------*/ … … 591 615 592 616 // destroy the parser 593 if ((*hid_dev)-> parser!= NULL) {594 usb_hid_free_report _parser((*hid_dev)->parser);617 if ((*hid_dev)->report != NULL) { 618 usb_hid_free_report((*hid_dev)->report); 595 619 } 596 620
Note:
See TracChangeset
for help on using the changeset viewer.