Changes in / [166c4752:1181249] in mainline
- Location:
- uspace/lib/usb/src
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usb/src/hiddescriptor.c
r166c4752 r1181249 101 101 } 102 102 103 104 /*105 *106 *107 */108 103 int usb_hid_report_append_fields(usb_hid_report_t *report, usb_hid_report_item_t *report_item) 109 104 { … … 139 134 if(report_item->usages_count > 0 && ((report_item->usage_minimum == 0) && (report_item->usage_maximum == 0))) { 140 135 uint32_t usage; 141 if(i < report_item->usages_count){ 142 usage = report_item->usages[i]; 136 if(report_item->type != USB_HID_REPORT_TYPE_OUTPUT) { 137 if(i < report_item->usages_count){ 138 usage = report_item->usages[i]; 139 } 140 else { 141 usage = report_item->usages[report_item->usages_count - 1]; 142 } 143 143 } 144 144 else { 145 usage = report_item->usages[report_item->usages_count - 1]; 145 if((report_item->count - i - 1) < report_item->usages_count){ 146 usage = report_item->usages[(report_item->count - i - 1)]; 147 } 148 else { 149 usage = report_item->usages[report_item->usages_count - 1]; 150 } 146 151 } 147 152 … … 159 164 160 165 if((USB_HID_ITEM_FLAG_VARIABLE(report_item->item_flags) != 0) && (!((report_item->usage_minimum == 0) && (report_item->usage_maximum == 0)))) { 161 field->usage = report_item->usage_minimum + i; 166 if(report_item->type == USB_HID_REPORT_TYPE_INPUT) { 167 field->usage = report_item->usage_maximum - i; 168 } 169 else { 170 field->usage = report_item->usage_minimum + i; 171 } 172 162 173 } 163 174 … … 168 179 169 180 field->size = report_item->size; 170 171 size_t offset_byte = (report_item->offset + (i * report_item->size)) / 8; 172 size_t offset_bit = 8 - ((report_item->offset + (i * report_item->size)) % 8) - report_item->size; 173 174 field->offset = 8 * offset_byte + offset_bit; 181 field->offset = report_item->offset + (i * report_item->size); 175 182 if(report_item->id != 0) { 176 183 field->offset += 8; … … 633 640 634 641 usb_log_debug("\t\tOFFSET: %X\n", report_item->offset); 635 usb_log_debug("\t\tSIZE: % X\n", report_item->size);642 usb_log_debug("\t\tSIZE: %zu\n", report_item->size); 636 643 usb_log_debug("\t\tLOGMIN: %d\n", report_item->logical_minimum); 637 644 usb_log_debug("\t\tLOGMAX: %d\n", report_item->logical_maximum); … … 672 679 usb_log_debug("Report ID: %d\n", report_des->report_id); 673 680 usb_log_debug("\tType: %d\n", report_des->type); 674 usb_log_debug("\tLength: % d\n", report_des->bit_length);675 usb_log_debug("\tItems: % d\n", report_des->item_length);681 usb_log_debug("\tLength: %zu\n", report_des->bit_length); 682 usb_log_debug("\tItems: %zu\n", report_des->item_length); 676 683 677 684 usb_hid_descriptor_print_list(&report_des->report_items); -
uspace/lib/usb/src/hidparser.c
r166c4752 r1181249 405 405 } 406 406 407 size_t shift = 8 - offset%8 - length;407 size_t shift = offset%8; 408 408 409 409 value = value << shift;
Note:
See TracChangeset
for help on using the changeset viewer.