Changeset cc5908e in mainline for uspace/lib/usb/src/hiddescriptor.c
- Timestamp:
- 2011-05-07T14:28:51Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 252cf2a, 68b614e
- Parents:
- bd2394b (diff), 7205209 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usb/src/hiddescriptor.c
rbd2394b rcc5908e 116 116 int i; 117 117 118 for(i=0; i<report_item->usages_count; i++){ 119 usb_log_debug("usages (%d) - %x\n", i, report_item->usages[i]); 120 } 121 118 usb_log_debug("usages_count - %zu\n", report_item->usages_count); 119 120 uint32_t *usages; 121 int usages_used=0; 122 if(report_item->usages_count > 0){ 123 usages = malloc(sizeof(int32_t) * report_item->usages_count); 124 memcpy(usages, report_item->usages, sizeof(int32_t) * report_item->usages_count); 125 } 126 else { 127 usages = NULL; 128 } 129 122 130 usb_hid_report_path_t *path = report_item->usage_path; 123 131 for(i=0; i<report_item->count; i++){ … … 133 141 field->physical_maximum = report_item->physical_maximum; 134 142 135 field->usage_minimum = report_item->usage_minimum; 136 field->usage_maximum = report_item->usage_maximum; 137 if(report_item->extended_usage_page != 0){ 138 field->usage_page = report_item->extended_usage_page; 143 if(USB_HID_ITEM_FLAG_VARIABLE(report_item->item_flags) == 0){ 144 /* 145 Store usage array. The Correct Usage Page and Usage is depending 146 on data in report and will be filled later 147 */ 148 field->usage = 0; 149 field->usage_page = report_item->usage_page; 150 151 field->usages_count = report_item->usages_count; 152 field->usages = usages; 153 usages_used = 1; 139 154 } 140 155 else { 141 field->usage_page = report_item->usage_page; 142 } 143 144 if(report_item->usages_count > 0 && ((report_item->usage_minimum == 0) && (report_item->usage_maximum == 0))) { 145 uint32_t usage; 146 if(i < report_item->usages_count){ 156 /* Fill the correct Usage and Usage Page */ 157 int32_t usage; 158 if(i < report_item->usages_count) { 147 159 usage = report_item->usages[i]; 148 160 } … … 151 163 } 152 164 153 154 if((usage & 0xFFFF0000) != 0){ 155 field->usage_page = (usage >> 16); 156 field->usage = (usage & 0xFFFF); 165 if(USB_HID_IS_EXTENDED_USAGE(usage)){ 166 field->usage = USB_HID_EXTENDED_USAGE(usage); 167 field->usage_page = USB_HID_EXTENDED_USAGE_PAGE(usage); 157 168 } 158 169 else { 159 170 field->usage = usage; 160 } 161 162 163 } 164 165 if((USB_HID_ITEM_FLAG_VARIABLE(report_item->item_flags) != 0) && (!((report_item->usage_minimum == 0) && (report_item->usage_maximum == 0)))) { 166 field->usage = report_item->usage_minimum + i; 171 field->usage_page = report_item->usage_page; 172 } 167 173 } 168 174 … … 209 215 } 210 216 217 // free only when not used!!! 218 if(usages && usages_used == 0) { 219 free(usages); 220 } 211 221 212 222 return EOK; … … 565 575 } 566 576 break; 567 case USB_HID_REPORT_TAG_USAGE_MINIMUM: 568 569 usb_log_debug("USAGE_MINIMUM (SIZE: %d), data[0](%x), data[1](%x), data[2](%x) data[3](%x)\n", 570 item_size, *data, *(data+1), *(data+2), *(data+3)); 571 577 case USB_HID_REPORT_TAG_USAGE_MINIMUM: 572 578 if (item_size == 3) { 573 579 // usage extended usages … … 581 587 case USB_HID_REPORT_TAG_USAGE_MAXIMUM: 582 588 if (item_size == 3) { 589 590 if(report_item->extended_usage_page != ((usb_hid_report_tag_data_uint32(data,item_size) & 0xFF00) >> 16)) { 591 return EINVAL; 592 } 593 583 594 // usage extended usages 584 595 report_item->extended_usage_page = (usb_hid_report_tag_data_uint32(data,item_size) & 0xFF00) >> 16; … … 588 599 report_item->usage_maximum = usb_hid_report_tag_data_uint32(data,item_size); 589 600 } 601 602 // vlozit zaznamy do pole usages 603 int32_t i; 604 for(i=report_item->usage_minimum; i<=report_item->usage_maximum; i++) { 605 if(report_item->extended_usage_page) { 606 report_item->usages[report_item->usages_count++] = (report_item->extended_usage_page << 16) + i; 607 } 608 else { 609 report_item->usages[report_item->usages_count++] = i; 610 } 611 } 612 report_item->extended_usage_page = 0; 613 590 614 break; 591 615 case USB_HID_REPORT_TAG_DESIGNATOR_INDEX: … … 660 684 661 685 usb_log_debug("\t\tOFFSET: %X\n", report_item->offset); 662 usb_log_debug("\t\tSIZE: % X\n", report_item->size);686 usb_log_debug("\t\tSIZE: %zu\n", report_item->size); 663 687 usb_log_debug("\t\tLOGMIN: %d\n", report_item->logical_minimum); 664 688 usb_log_debug("\t\tLOGMAX: %d\n", report_item->logical_maximum); … … 699 723 usb_log_debug("Report ID: %d\n", report_des->report_id); 700 724 usb_log_debug("\tType: %d\n", report_des->type); 701 usb_log_debug("\tLength: % d\n", report_des->bit_length);702 usb_log_debug("\tItems: % d\n", report_des->item_length);725 usb_log_debug("\tLength: %zu\n", report_des->bit_length); 726 usb_log_debug("\tItems: %zu\n", report_des->item_length); 703 727 704 728 usb_hid_descriptor_print_list(&report_des->report_items);
Note:
See TracChangeset
for help on using the changeset viewer.