Changes in / [166c4752:1181249] in mainline


Ignore:
Location:
uspace/lib/usb/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usb/src/hiddescriptor.c

    r166c4752 r1181249  
    101101}
    102102
    103 
    104 /*
    105  *
    106  *
    107  */
    108103int usb_hid_report_append_fields(usb_hid_report_t *report, usb_hid_report_item_t *report_item)
    109104{
     
    139134                if(report_item->usages_count > 0 && ((report_item->usage_minimum == 0) && (report_item->usage_maximum == 0))) {
    140135                        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                                }
    143143                        }
    144144                        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                                }
    146151                        }
    147152
     
    159164
    160165                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
    162173                }
    163174               
     
    168179
    169180                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);
    175182                if(report_item->id != 0) {
    176183                        field->offset += 8;
     
    633640
    634641                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);
    636643                usb_log_debug("\t\tLOGMIN: %d\n", report_item->logical_minimum);
    637644                usb_log_debug("\t\tLOGMAX: %d\n", report_item->logical_maximum);               
     
    672679                usb_log_debug("Report ID: %d\n", report_des->report_id);
    673680                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);
    676683
    677684                usb_hid_descriptor_print_list(&report_des->report_items);
  • uspace/lib/usb/src/hidparser.c

    r166c4752 r1181249  
    405405                                }
    406406
    407                                 size_t shift = 8 - offset%8 - length;
     407                                size_t shift = offset%8;
    408408
    409409                                value = value << shift;                                                 
Note: See TracChangeset for help on using the changeset viewer.