Changeset 574f276 in mainline for uspace/lib/usbhid/src/hidparser.c


Ignore:
Timestamp:
2011-05-27T17:37:21Z (14 years ago)
Author:
Matej Klonfar <maklf@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
4967c1e
Parents:
0c904a3
Message:

parsing of customer controls bug fixed

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usbhid/src/hidparser.c

    r0c904a3 r574f276  
    258258                                foo = data + i;
    259259                                mask =  ((1 << (item->size-part_size))-1);
    260                                 value = (*foo & mask) << part_size;
     260                                value = (*foo & mask);
    261261                        }
    262262                        else if(i == ((offset+item->size-1)/8)){
    263263                                // the lower one
    264264                                foo = data + i;
    265                                 mask =  ((1 << part_size)-1) << (8-part_size);
    266                                 value += ((*foo & mask) >> (8-part_size));
     265                                mask = ((1 << (item->size - part_size)) - 1)
     266                                        << (8 - (item->size - part_size));
     267
     268                                value = (((*foo & mask) >> (8 -
     269                                    (item->size - part_size))) << part_size )
     270                                    + value;
    267271                        }
    268272                        else {
    269                                 value = value << 8;
    270                                 value += *(data + 1);
     273                                value = (*(data + 1) << (part_size + 8)) + value;
    271274                                part_size += 8;
    272275                        }
     
    386389                report_item = list_get_instance(item, usb_hid_report_field_t, link);
    387390
    388                 if(USB_HID_ITEM_FLAG_VARIABLE(report_item->item_flags) == 0) {
    389                                        
    390                         // array
    391                         value = usb_hid_translate_data_reverse(report_item,
    392                                 report_item->value);
    393 
    394                         offset = report_item->offset;
    395                         length = report_item->size;
    396                 }
    397                 else {
    398                         // variable item
    399                         value  = usb_hid_translate_data_reverse(report_item,
    400                                 report_item->value);
    401 
    402                         offset = report_item->offset;
    403                         length = report_item->size;
    404                 }
    405 
     391                value = usb_hid_translate_data_reverse(report_item,
     392                        report_item->value);
     393
     394                offset = report_des->bit_length - report_item->offset - 1;
     395                length = report_item->size;
     396               
    406397                usb_log_debug("\ttranslated value: %x\n", value);
    407398
Note: See TracChangeset for help on using the changeset viewer.