Ignore:
File:
1 edited

Legend:

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

    r0dd3e49 r1432fcf3  
    187187
    188188                field = malloc(sizeof(usb_hid_report_field_t));
    189                 if(field == NULL) {
    190                         return ENOMEM;
    191                 }
    192 
    193189                memset(field, 0, sizeof(usb_hid_report_field_t));
    194190                list_initialize(&field->link);
     
    220216                        }
    221217                        else {
    222                                 usage = report_item->usages[
     218                                usage = report_item->usages[
    223219                                        report_item->usages_count- 1];
    224220                        }
     
    245241
    246242                field->size = report_item->size;
    247 
    248                 if(report_item->type == USB_HID_REPORT_TYPE_INPUT) {
    249                         int offset = report_item->offset + report_item->size * i;
    250                         int field_offset = (offset/8)*8 + (offset/8 + 1) * 8 -
    251                                 offset - report_item->size;
    252                         if(field_offset < 0) {
    253                                 field->offset = 0;
    254                         }
    255                         else {
    256                                 field->offset = field_offset;
    257                         }
    258                 }
    259                 else {
    260                         field->offset = report_item->offset + (i * report_item->size);
    261                 }
    262 
    263 
    264                 if(report->use_report_ids != 0) {
     243               
     244                size_t offset_byte = (report_item->offset + (i *
     245                        report_item->size)) / 8;
     246
     247                size_t offset_bit = 8 - ((report_item->offset + (i *
     248                        report_item->size)) % 8) - report_item->size;
     249
     250                field->offset = 8 * offset_byte + offset_bit;
     251                if(report_item->id != 0) {
    265252                        field->offset += 8;
    266253                        report->use_report_ids = 1;
    267254                }
    268 
    269255                field->item_flags = report_item->item_flags;
    270256
     
    329315                usb_hid_report_type_t type) {
    330316
    331         if(report == NULL) {
    332                 return NULL;
    333         }
    334 
    335317        link_t *report_it = report->reports.next;
    336318        usb_hid_report_description_t *report_des = NULL;
     
    340322                                usb_hid_report_description_t, link);
    341323
    342                 // if report id not set, return the first of the type
    343                 if(((report_des->report_id == report_id) || (report_id == 0)) &&
     324                if((report_des->report_id == report_id) &&
    344325                   (report_des->type == type)) {
    345326                        return report_des;
Note: See TracChangeset for help on using the changeset viewer.