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


Ignore:
Timestamp:
2011-05-30T11:40:58Z (14 years ago)
Author:
Matus Dekanek <smekideki@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
b2387c2
Parents:
98e15b1 (diff), 3dfdcb7 (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.
Message:

merge with usb/development

File:
1 edited

Legend:

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

    r98e15b1 rd600874  
    153153
    154154
    155         report_des = usb_hid_report_find_description(report, *report_id, type);
     155        report_des = usb_hid_report_find_description(report, *report_id,
     156                type);
     157
    156158        if(report_des == NULL) {
    157159                return EINVAL;
     
    167169                if(USB_HID_ITEM_FLAG_CONSTANT(item->item_flags) == 0) {
    168170                       
    169                         if(USB_HID_ITEM_FLAG_VARIABLE(item->item_flags) == 0) {
     171                        if(USB_HID_ITEM_FLAG_VARIABLE(item->item_flags) == 0){
    170172
    171173                                // array
     
    174176               
    175177                                item->usage = USB_HID_EXTENDED_USAGE(
    176                                     item->usages[item->value - item->physical_minimum]);
    177 
    178                                 item->usage_page = USB_HID_EXTENDED_USAGE_PAGE(
    179                                     item->usages[item->value - item->physical_minimum]);
    180 
    181                                 usb_hid_report_set_last_item (item->collection_path,
    182                                     USB_HID_TAG_CLASS_GLOBAL, item->usage_page);
    183 
    184                                 usb_hid_report_set_last_item (item->collection_path,
     178                                    item->usages[
     179                                    item->value - item->physical_minimum]);
     180
     181                                item->usage_page =
     182                                    USB_HID_EXTENDED_USAGE_PAGE(
     183                                    item->usages[
     184                                    item->value - item->physical_minimum]);
     185
     186                                usb_hid_report_set_last_item (
     187                                    item->collection_path,
     188                                    USB_HID_TAG_CLASS_GLOBAL,
     189                                    item->usage_page);
     190
     191                                usb_hid_report_set_last_item (
     192                                    item->collection_path,
    185193                                    USB_HID_TAG_CLASS_LOCAL, item->usage);
    186194                               
     
    188196                        else {
    189197                                // variable item
    190                                 item->value = usb_hid_translate_data(item, data);                               
    191                         }                               
     198                                item->value = usb_hid_translate_data(item,
     199                                    data);                             
     200                        }                       
    192201                }
    193202                list_item = list_item->next;
     
    213222       
    214223        int32_t value=0;
    215         int32_t mask;
    216         const uint8_t *foo;
     224        int32_t mask=0;
     225        const uint8_t *foo=0;
    217226
    218227        // now only shot tags are allowed
     
    240249        if((size_t)(offset/8) != (size_t)((offset+item->size-1)/8)) {
    241250               
    242                 part_size = ((offset+item->size)%8);
     251                part_size = 0;
    243252
    244253                size_t i=0;
     
    246255                        if(i == (size_t)(offset/8)) {
    247256                                // the higher one
     257                                part_size = 8 - (offset % 8);
    248258                                foo = data + i;
    249259                                mask =  ((1 << (item->size-part_size))-1);
    250                                 value = (*foo & mask) << part_size;
     260                                value = (*foo & mask);
    251261                        }
    252262                        else if(i == ((offset+item->size-1)/8)){
    253263                                // the lower one
    254264                                foo = data + i;
    255                                 mask =  ((1 << part_size)-1) << (8-part_size);
    256                                 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;
    257271                        }
    258272                        else {
    259                                 value = value << 8;
    260                                 value += *(data + 1);
     273                                value = (*(data + 1) << (part_size + 8)) + value;
     274                                part_size += 8;
    261275                        }
    262276                }
     
    375389                report_item = list_get_instance(item, usb_hid_report_field_t, link);
    376390
    377                 if(USB_HID_ITEM_FLAG_VARIABLE(report_item->item_flags) == 0) {
    378                                        
    379                         // array
    380                         value = usb_hid_translate_data_reverse(report_item,
    381                                 report_item->value);
    382 
    383                         offset = report_item->offset;
    384                         length = report_item->size;
    385                 }
    386                 else {
    387                         // variable item
    388                         value  = usb_hid_translate_data_reverse(report_item,
    389                                 report_item->value);
    390 
    391                         offset = report_item->offset;
    392                         length = report_item->size;
    393                 }
    394 
     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               
    395397                usb_log_debug("\ttranslated value: %x\n", value);
    396398
     
    617619                        return report_des->report_id;
    618620                }
     621
     622                report_it = report_it->next;
    619623        }
    620624
Note: See TracChangeset for help on using the changeset viewer.