Changeset feeac0d in mainline for uspace/lib/usbhid/src/hidparser.c
- Timestamp:
- 2013-09-10T16:32:35Z (11 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 4982d87
- Parents:
- e8d6ce2
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usbhid/src/hidparser.c
re8d6ce2 rfeeac0d 130 130 size_t size, uint8_t *report_id) 131 131 { 132 usb_hid_report_field_t *item;133 134 132 usb_hid_report_description_t *report_des; 135 133 usb_hid_report_type_t type = USB_HID_REPORT_TYPE_INPUT; 136 134 137 135 if (report == NULL) { 138 136 return EINVAL; … … 153 151 154 152 /* read data */ 155 list_foreach(report_des->report_items, list_item) { 156 item = list_get_instance(list_item, usb_hid_report_field_t, 157 ritems_link); 153 list_foreach(report_des->report_items, ritems_link, 154 usb_hid_report_field_t, item) { 158 155 159 156 if (USB_HID_ITEM_FLAG_CONSTANT(item->item_flags) == 0) { 160 157 161 158 if (USB_HID_ITEM_FLAG_VARIABLE(item->item_flags) == 0) { 162 159 /* array */ 163 160 item->value = 164 161 usb_hid_translate_data(item, data); 165 162 166 163 item->usage = USB_HID_EXTENDED_USAGE( 167 164 item->usages[item->value - … … 184 181 /* variable item */ 185 182 item->value = usb_hid_translate_data(item, 186 data); 187 } 183 data); 184 } 188 185 } 189 186 } 190 187 191 188 return EOK; 192 189 } … … 295 292 usb_hid_report_description_t *report_des = NULL; 296 293 297 list_foreach(report->reports, report_it) { 298 report_des = list_get_instance(report_it, 299 usb_hid_report_description_t, reports_link); 300 294 list_foreach(report->reports, reports_link, 295 usb_hid_report_description_t, report_des) { 301 296 if ((report_des->report_id == report_id) && 302 297 (report_des->type == USB_HID_REPORT_TYPE_OUTPUT)) { … … 345 340 int length; 346 341 int32_t tmp_value; 347 342 348 343 if (report == NULL) { 349 344 return EINVAL; … … 351 346 352 347 if (report->use_report_ids != 0) { 353 buffer[0] = report_id; 348 buffer[0] = report_id; 354 349 } 355 350 … … 357 352 report_des = usb_hid_report_find_description(report, report_id, 358 353 USB_HID_REPORT_TYPE_OUTPUT); 359 354 360 355 if (report_des == NULL) { 361 356 return EINVAL; 362 357 } 363 358 364 usb_hid_report_field_t *report_item; 365 366 list_foreach(report_des->report_items, item) { 367 report_item = list_get_instance(item, usb_hid_report_field_t, 368 ritems_link); 369 359 list_foreach(report_des->report_items, ritems_link, 360 usb_hid_report_field_t, report_item) { 370 361 value = usb_hid_translate_data_reverse(report_item, 371 362 report_item->value); … … 373 364 offset = report_des->bit_length - report_item->offset - 1; 374 365 length = report_item->size; 375 366 376 367 usb_log_debug("\ttranslated value: %x\n", value); 377 368 … … 382 373 } 383 374 size_t shift = 8 - offset % 8 - length; 384 value = value << shift; 375 value = value << shift; 385 376 value = value & (((1 << length) - 1) << shift); 386 377 387 378 uint8_t mask = 0; 388 379 mask = 0xff - (((1 << length) - 1) << shift); … … 400 391 401 392 tmp_value = tmp_value << (offset % 8); 402 393 403 394 mask = ~(((1 << (8 - (offset % 8))) - 1) 404 395 << (offset % 8)); … … 407 398 tmp_value; 408 399 } else if (i == ((offset + length - 1) / 8)) { 409 400 410 401 value = value >> (length - 411 402 ((offset + length) % 8)); … … 413 404 value = value & ((1 << (length - 414 405 ((offset + length) % 8))) - 1); 415 406 416 407 mask = (1 << (length - 417 408 ((offset + length) % 8))) - 1; … … 427 418 report_item->value = 0; 428 419 } 429 420 430 421 return EOK; 431 422 }
Note:
See TracChangeset
for help on using the changeset viewer.