Changes in uspace/drv/usbhid/usbhid.c [f3f9733:8fb45e08] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/usbhid/usbhid.c
rf3f9733 r8fb45e08 78 78 } 79 79 80 assert(hid_dev->subdriver_count >= 0);81 82 80 // set the init callback 83 hid_dev->subdrivers[ hid_dev->subdriver_count].init = usb_kbd_init;81 hid_dev->subdrivers[0].init = usb_kbd_init; 84 82 85 83 // set the polling callback 86 hid_dev->subdrivers[hid_dev->subdriver_count].poll = 87 usb_kbd_polling_callback; 84 hid_dev->subdrivers[0].poll = usb_kbd_polling_callback; 88 85 89 86 // set the polling ended callback 90 hid_dev->subdrivers[ hid_dev->subdriver_count].poll_end = NULL;87 hid_dev->subdrivers[0].poll_end = NULL; 91 88 92 89 // set the deinit callback 93 hid_dev->subdrivers[ hid_dev->subdriver_count].deinit = usb_kbd_deinit;90 hid_dev->subdrivers[0].deinit = usb_kbd_deinit; 94 91 95 92 // set subdriver count 96 ++hid_dev->subdriver_count;93 hid_dev->subdriver_count = 1; 97 94 98 95 return EOK; … … 111 108 } 112 109 113 assert(hid_dev->subdriver_count >= 0);114 115 110 // set the init callback 116 hid_dev->subdrivers[ hid_dev->subdriver_count].init = usb_mouse_init;111 hid_dev->subdrivers[0].init = usb_mouse_init; 117 112 118 113 // set the polling callback 119 hid_dev->subdrivers[hid_dev->subdriver_count].poll = 120 usb_mouse_polling_callback; 114 hid_dev->subdrivers[0].poll = usb_mouse_polling_callback; 121 115 122 116 // set the polling ended callback 123 hid_dev->subdrivers[ hid_dev->subdriver_count].poll_end = NULL;117 hid_dev->subdrivers[0].poll_end = NULL; 124 118 125 119 // set the deinit callback 126 hid_dev->subdrivers[ hid_dev->subdriver_count].deinit = usb_mouse_deinit;120 hid_dev->subdrivers[0].deinit = usb_mouse_deinit; 127 121 128 122 // set subdriver count 129 ++hid_dev->subdriver_count;123 hid_dev->subdriver_count = 1; 130 124 131 125 return EOK; … … 144 138 } 145 139 146 assert(hid_dev->subdriver_count >= 0);147 148 140 // set the init callback 149 hid_dev->subdrivers[hid_dev->subdriver_count].init = 150 usb_generic_hid_init; 141 hid_dev->subdrivers[0].init = usb_generic_hid_init; 151 142 152 143 // set the polling callback 153 hid_dev->subdrivers[hid_dev->subdriver_count].poll = 154 usb_generic_hid_polling_callback; 144 hid_dev->subdrivers[0].poll = usb_generic_hid_polling_callback; 155 145 156 146 // set the polling ended callback 157 hid_dev->subdrivers[ hid_dev->subdriver_count].poll_end = NULL;147 hid_dev->subdrivers[0].poll_end = NULL; 158 148 159 149 // set the deinit callback 160 hid_dev->subdrivers[ hid_dev->subdriver_count].deinit = NULL;150 hid_dev->subdrivers[0].deinit = NULL; 161 151 162 152 // set subdriver count 163 ++hid_dev->subdriver_count;153 hid_dev->subdriver_count = 1; 164 154 165 155 return EOK; … … 206 196 } 207 197 208 //if (mapping->report_id >= 0) {209 //usb_hid_report_path_set_report_id(usage_path,210 //mapping->report_id);211 //}198 if (mapping->report_id >= 0) { 199 usb_hid_report_path_set_report_id(usage_path, 200 mapping->report_id); 201 } 212 202 213 203 assert(hid_dev->report != NULL); … … 216 206 // size_t size = usb_hid_report_size(hid_dev->report, 0, 217 207 // USB_HID_REPORT_TYPE_INPUT); 218 // size_t size = 0; 219 220 bool matches = false; 221 222 // usb_hid_report_description_t *report_des = 223 // usb_hid_report_find_description(hid_dev->report, 224 // mapping->report_id, USB_HID_REPORT_TYPE_INPUT); 225 uint8_t report_id = mapping->report_id; 226 227 /*while(report_des != NULL)*/do { 228 229 // if((mapping->report_id) == 0 && (report_des->report_id != 0)) { 230 // usb_hid_report_path_set_report_id(usage_path, 231 // report_des->report_id); 232 // } 233 234 usb_log_debug("Trying report id %u\n", report_id); 235 236 if (report_id != 0) { 237 usb_hid_report_path_set_report_id(usage_path, 238 report_id); 239 } 240 241 usb_hid_report_field_t *field = usb_hid_report_get_sibling( 242 hid_dev->report, 243 NULL, usage_path, mapping->compare, 244 USB_HID_REPORT_TYPE_INPUT); 245 246 usb_log_debug("Field: %p\n", field); 247 248 if (field != NULL) { 249 // size++; 250 // field = usb_hid_report_get_sibling(hid_dev->report, 251 // field, usage_path, mapping->compare, 252 // USB_HID_REPORT_TYPE_INPUT); 253 matches = true; 254 break; 255 } 256 257 report_id = usb_hid_get_next_report_id( 258 hid_dev->report, report_id, 259 USB_HID_REPORT_TYPE_INPUT); 260 261 // if((mapping->report_id == 0) && (report_des->report_id != 0)) { 262 // uint8_t report_id = usb_hid_get_next_report_id( 263 // hid_dev->report, report_des->report_id, 264 // USB_HID_REPORT_TYPE_INPUT); 265 266 // if(report_id == 0) { 267 // break; 268 // } 269 270 // report_des = usb_hid_report_find_description( 271 // hid_dev->report, report_id, 272 // USB_HID_REPORT_TYPE_INPUT); 273 // } 274 // else { 275 // break; 276 // } 277 } while (!matches && report_id != 0); 278 279 // usb_log_debug("Size of the input report: %zu\n", size); 208 size_t size = 0; 209 usb_hid_report_field_t *field = usb_hid_report_get_sibling (hid_dev->report, 210 NULL, usage_path, mapping->compare, USB_HID_REPORT_TYPE_INPUT); 211 while(field != NULL) { 212 size++; 213 field = usb_hid_report_get_sibling (hid_dev->report, 214 field, usage_path, mapping->compare, 215 USB_HID_REPORT_TYPE_INPUT); 216 } 217 218 usb_log_debug("Size of the input report: %zuB\n", size); 280 219 usb_hid_report_path_free(usage_path); 281 220 282 return matches;221 return (size > 0); 283 222 } 284 223 … … 429 368 430 369 do { 431 usb_log_debug("Getting size of the report.\n");432 370 size = usb_hid_report_byte_size(hid_dev->report, report_id, 433 371 USB_HID_REPORT_TYPE_INPUT); 434 372 usb_log_debug("Report ID: %u, size: %zu\n", report_id, size); 435 373 max_size = (size > max_size) ? size : max_size; 436 usb_log_debug("Getting next report ID\n");437 374 report_id = usb_hid_get_next_report_id(hid_dev->report, 438 375 report_id, USB_HID_REPORT_TYPE_INPUT); … … 564 501 hid_dev->subdriver_count); 565 502 //usb_hid_free(&hid_dev); 566 567 503 } else { 568 504 bool ok = false; … … 591 527 } 592 528 593 594 if (rc == EOK) { 595 // save max input report size and allocate space for the report 596 rc = usb_hid_init_report(hid_dev); 597 if (rc != EOK) { 598 usb_log_error("Failed to initialize input report buffer" 599 ".\n"); 600 } 601 } 602 529 // save max input report size and allocate space for the report 530 rc = usb_hid_init_report(hid_dev); 531 if (rc != EOK) { 532 usb_log_error("Failed to initialize input report buffer.\n"); 533 } 603 534 604 535 return rc; … … 623 554 usb_log_debug("Max input report size: %zu, buffer size: %zu\n", 624 555 hid_dev->max_input_report_size, buffer_size); 625 //assert(hid_dev->max_input_report_size >= buffer_size); 626 if (hid_dev->max_input_report_size >= buffer_size) { 627 /*! @todo This should probably be atomic. */ 628 memcpy(hid_dev->input_report, buffer, buffer_size); 629 hid_dev->input_report_size = buffer_size; 630 usb_hid_new_report(hid_dev); 631 } 556 assert(hid_dev->max_input_report_size >= buffer_size); 557 558 // if (/*!allocated*/ 559 // /*|| *//*hid_dev->input_report_size < buffer_size*/) { 560 // uint8_t *input_old = hid_dev->input_report; 561 // uint8_t *input_new = (uint8_t *)malloc(buffer_size); 562 563 // if (input_new == NULL) { 564 // usb_log_error("Failed to allocate space for input " 565 // "buffer. This event may not be reported\n"); 566 // memset(hid_dev->input_report, 0, 567 // hid_dev->input_report_size); 568 // } else { 569 // memcpy(input_new, input_old, 570 // hid_dev->input_report_size); 571 // hid_dev->input_report = input_new; 572 // if (allocated) { 573 // free(input_old); 574 // } 575 // usb_hid_new_report(); 576 // } 577 // } 578 579 /*! @todo This should probably be atomic. */ 580 memcpy(hid_dev->input_report, buffer, buffer_size); 581 hid_dev->input_report_size = buffer_size; 582 usb_hid_new_report(hid_dev); 632 583 633 584 bool cont = false;
Note:
See TracChangeset
for help on using the changeset viewer.