Ignore:
File:
1 edited

Legend:

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

    rb9d7965 r3b5d5b9d  
    101101}
    102102
     103
     104/*
     105 *
     106 *
     107 */
    103108int usb_hid_report_append_fields(usb_hid_report_t *report, usb_hid_report_item_t *report_item)
    104109{
     
    134139                if(report_item->usages_count > 0 && ((report_item->usage_minimum == 0) && (report_item->usage_maximum == 0))) {
    135140                        uint32_t usage;
    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                                 }
     141                        if(i < report_item->usages_count){
     142                                usage = report_item->usages[i];
    143143                        }
    144144                        else {
    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                                 }
     145                                usage = report_item->usages[report_item->usages_count - 1];
    151146                        }
    152147
     
    164159
    165160                if((USB_HID_ITEM_FLAG_VARIABLE(report_item->item_flags) != 0) && (!((report_item->usage_minimum == 0) && (report_item->usage_maximum == 0)))) {
    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 
     161                        field->usage = report_item->usage_minimum + i;                                 
    173162                }
    174163               
     
    179168
    180169                field->size = report_item->size;
    181                 field->offset = report_item->offset + (i * 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;
    182175                if(report_item->id != 0) {
    183176                        field->offset += 8;
Note: See TracChangeset for help on using the changeset viewer.