Changeset cac458f in mainline for uspace/lib/usbhid/src/hiddescriptor.c
- Timestamp:
- 2011-06-22T01:59:39Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 41e2118
- Parents:
- 79506d6 (diff), f1fae414 (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. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usbhid/src/hiddescriptor.c
r79506d6 rcac458f 88 88 * @retval NULL If some error occurs 89 89 */ 90 usb_hid_report_path_t *usb_hid_report_path_try_insert( 91 usb_hid_report_t *report, usb_hid_report_path_t *cmp_path) { 92 93 link_t *path_it = report->collection_paths. prev->next;90 usb_hid_report_path_t *usb_hid_report_path_try_insert(usb_hid_report_t *report, 91 usb_hid_report_path_t *cmp_path) 92 { 93 link_t *path_it = report->collection_paths.head.next; 94 94 usb_hid_report_path_t *path = NULL; 95 95 … … 98 98 } 99 99 100 while(path_it != &report->collection_paths ) {100 while(path_it != &report->collection_paths.head) { 101 101 path = list_get_instance(path_it, usb_hid_report_path_t, 102 link);102 cpath_link); 103 103 104 104 if(usb_hid_report_compare_usage_path(path, cmp_path, 105 105 USB_HID_PATH_COMPARE_STRICT) == EOK){ 106 106 break; 107 } 107 } 108 108 path_it = path_it->next; 109 109 } 110 if(path_it == &report->collection_paths ) {110 if(path_it == &report->collection_paths.head) { 111 111 path = usb_hid_report_path_clone(cmp_path); 112 112 if(path == NULL) { 113 113 return NULL; 114 114 } 115 list_append(&path-> link, &report->collection_paths);115 list_append(&path->cpath_link, &report->collection_paths); 116 116 report->collection_paths_count++; 117 117 … … 120 120 else { 121 121 return list_get_instance(path_it, usb_hid_report_path_t, 122 link);122 cpath_link); 123 123 } 124 124 } … … 192 192 193 193 memset(field, 0, sizeof(usb_hid_report_field_t)); 194 li st_initialize(&field->link);194 link_initialize(&field->ritems_link); 195 195 196 196 /* fill the attributes */ … … 291 291 } 292 292 293 li st_initialize (&report_des->link);293 link_initialize (&report_des->reports_link); 294 294 list_initialize (&report_des->report_items); 295 295 296 list_append(&report_des-> link, &report->reports);296 list_append(&report_des->reports_link, &report->reports); 297 297 report->report_count++; 298 298 } 299 299 300 300 /* append this field to the end of founded report list */ 301 list_append (&field->link, &report_des->report_items);301 list_append(&field->ritems_link, &report_des->report_items); 302 302 303 303 /* update the sizes */ … … 333 333 } 334 334 335 link_t *report_it = report->reports.next;336 335 usb_hid_report_description_t *report_des = NULL; 337 336 338 while(report_it != &report->reports) {337 list_foreach(report->reports, report_it) { 339 338 report_des = list_get_instance(report_it, 340 usb_hid_report_description_t, link);339 usb_hid_report_description_t, reports_link); 341 340 342 341 // if report id not set, return the first of the type … … 345 344 return report_des; 346 345 } 347 348 report_it = report_it->next;349 346 } 350 347 … … 377 374 size_t offset_output=0; 378 375 size_t offset_feature=0; 379 380 link_t stack; 381 list_initialize(&stack); 376 377 link_t *item_link; 378 379 list_t stack; 380 list_initialize(&stack); 382 381 383 382 /* parser structure initialization*/ … … 391 390 } 392 391 memset(report_item, 0, sizeof(usb_hid_report_item_t)); 393 li st_initialize(&(report_item->link));392 link_initialize(&(report_item->link)); 394 393 395 394 /* usage path context initialization */ … … 493 492 case USB_HID_REPORT_TAG_POP: 494 493 // restore current state from stack 495 if(list_empty (&stack)) { 494 item_link = list_first(&stack); 495 if (item_link == NULL) { 496 496 return EINVAL; 497 497 } 498 498 free(report_item); 499 500 report_item = list_get_instance( stack.next,499 500 report_item = list_get_instance(item_link, 501 501 usb_hid_report_item_t, link); 502 502 503 503 usb_hid_report_usage_path_t *tmp_usage_path; 504 504 tmp_usage_path = list_get_instance( 505 report_item->usage_path-> link.prev,506 usb_hid_report_usage_path_t, link);507 505 report_item->usage_path->cpath_link.prev, 506 usb_hid_report_usage_path_t, rpath_items_link); 507 508 508 usb_hid_report_set_last_item(usage_path, 509 509 USB_HID_TAG_CLASS_GLOBAL, tmp_usage_path->usage_page); … … 513 513 514 514 usb_hid_report_path_free(report_item->usage_path); 515 list_initialize(&report_item->usage_path->link); 516 list_remove (stack.next); 515 list_remove (item_link); 517 516 518 517 break; … … 610 609 611 610 /* store collection atributes */ 612 path_item = list_get_instance( usage_path->head.prev,613 usb_hid_report_usage_path_t, link);614 path_item->flags = *data; 611 path_item = list_get_instance(list_first(&usage_path->items), 612 usb_hid_report_usage_path_t, rpath_items_link); 613 path_item->flags = *data; 615 614 616 615 /* set last item */ … … 901 900 * @return void 902 901 */ 903 void usb_hid_descriptor_print_list(li nk_t *head)902 void usb_hid_descriptor_print_list(list_t *list) 904 903 { 905 904 usb_hid_report_field_t *report_item; 906 link_t *item; 907 908 909 if(head == NULL || list_empty(head)) { 905 906 if(list == NULL || list_empty(list)) { 910 907 usb_log_debug("\tempty\n"); 911 908 return; 912 909 } 913 914 for(item = head->next; item != head; item = item->next) { 915 916 report_item = list_get_instance(item, usb_hid_report_field_t, 917 link); 910 911 list_foreach(*list, item) { 912 report_item = list_get_instance(item, usb_hid_report_field_t, 913 ritems_link); 918 914 919 915 usb_log_debug("\t\tOFFSET: %X\n", report_item->offset); 920 916 usb_log_debug("\t\tSIZE: %zu\n", report_item->size); 921 usb_log_debug("\t\tLOGMIN: %d\n", 917 usb_log_debug("\t\tLOGMIN: %d\n", 922 918 report_item->logical_minimum); 923 usb_log_debug("\t\tLOGMAX: %d\n", 924 report_item->logical_maximum); 925 usb_log_debug("\t\tPHYMIN: %d\n", 926 report_item->physical_minimum); 927 usb_log_debug("\t\tPHYMAX: %d\n", 928 report_item->physical_maximum); 929 usb_log_debug("\t\ttUSAGEMIN: %X\n", 919 usb_log_debug("\t\tLOGMAX: %d\n", 920 report_item->logical_maximum); 921 usb_log_debug("\t\tPHYMIN: %d\n", 922 report_item->physical_minimum); 923 usb_log_debug("\t\tPHYMAX: %d\n", 924 report_item->physical_maximum); 925 usb_log_debug("\t\ttUSAGEMIN: %X\n", 930 926 report_item->usage_minimum); 931 927 usb_log_debug("\t\tUSAGEMAX: %X\n", 932 928 report_item->usage_maximum); 933 usb_log_debug("\t\tUSAGES COUNT: %zu\n", 929 usb_log_debug("\t\tUSAGES COUNT: %zu\n", 934 930 report_item->usages_count); 935 931 … … 937 933 usb_log_debug("\t\ttUSAGE: %X\n", report_item->usage); 938 934 usb_log_debug("\t\tUSAGE PAGE: %X\n", report_item->usage_page); 939 935 940 936 usb_hid_print_usage_path(report_item->collection_path); 941 937 942 usb_log_debug("\n"); 938 usb_log_debug("\n"); 943 939 944 940 } … … 959 955 } 960 956 961 link_t *report_it = report->reports.next;962 957 usb_hid_report_description_t *report_des; 963 958 964 while(report_it != &report->reports) {965 report_des = list_get_instance(report_it, 966 usb_hid_report_description_t, link);959 list_foreach(report->reports, report_it) { 960 report_des = list_get_instance(report_it, 961 usb_hid_report_description_t, reports_link); 967 962 usb_log_debug("Report ID: %d\n", report_des->report_id); 968 963 usb_log_debug("\tType: %d\n", report_des->type); 969 usb_log_debug("\tLength: %zu\n", report_des->bit_length); 964 usb_log_debug("\tLength: %zu\n", report_des->bit_length); 970 965 usb_log_debug("\tB Size: %zu\n", 971 usb_hid_report_byte_size(report, 972 report_des->report_id, 966 usb_hid_report_byte_size(report, 967 report_des->report_id, 973 968 report_des->type)); 974 usb_log_debug("\tItems: %zu\n", report_des->item_length); 969 usb_log_debug("\tItems: %zu\n", report_des->item_length); 975 970 976 971 usb_hid_descriptor_print_list(&report_des->report_items); 977 978 report_it = report_it->next;979 972 } 980 973 } … … 984 977 * Releases whole linked list of report items 985 978 * 986 * @param head Head of list of report descriptor items (usb_hid_report_item_t)979 * @param list List of report descriptor items (usb_hid_report_item_t) 987 980 * @return void 988 981 */ 989 void usb_hid_free_report_list(li nk_t *head)982 void usb_hid_free_report_list(list_t *list) 990 983 { 991 return; 992 993 usb_hid_report_item_t *report_item;984 return; /* XXX What's this? */ 985 986 /* usb_hid_report_item_t *report_item; 994 987 link_t *next; 995 988 996 if( head == NULL || list_empty(head)) {989 if(list == NULL || list_empty(list)) { 997 990 return; 998 991 } 999 992 1000 next = head->next;1001 while (next !=head) {1002 1003 report_item = list_get_instance(next, usb_hid_report_item_t,link);993 next = list->head.next; 994 while (next != &list->head) { 995 report_item = list_get_instance(next, usb_hid_report_item_t, 996 rpath_items_link); 1004 997 1005 998 while(!list_empty(&report_item->usage_path->link)) { 1006 999 usb_hid_report_remove_last_item(report_item->usage_path); 1007 1000 } 1008 1001 … … 1014 1007 1015 1008 return; 1016 1009 */ 1017 1010 } 1018 1011 /*---------------------------------------------------------------------------*/ … … 1030 1023 1031 1024 // free collection paths 1025 link_t *path_link; 1032 1026 usb_hid_report_path_t *path; 1033 1027 while(!list_empty(&report->collection_paths)) { 1034 path = list_get_instance(report->collection_paths.next, 1035 usb_hid_report_path_t, link); 1036 1037 usb_hid_report_path_free(path); 1028 path_link = list_first(&report->collection_paths); 1029 path = list_get_instance(path_link, 1030 usb_hid_report_path_t, cpath_link); 1031 1032 list_remove(path_link); 1033 usb_hid_report_path_free(path); 1038 1034 } 1039 1035 … … 1042 1038 usb_hid_report_field_t *field; 1043 1039 while(!list_empty(&report->reports)) { 1044 report_des = list_get_instance( report->reports.next,1045 usb_hid_report_description_t, link);1046 1047 list_remove(&report_des-> link);1040 report_des = list_get_instance(list_first(&report->reports), 1041 usb_hid_report_description_t, reports_link); 1042 1043 list_remove(&report_des->reports_link); 1048 1044 1049 1045 while(!list_empty(&report_des->report_items)) { 1050 1046 field = list_get_instance( 1051 report_des->report_items.next,1052 usb_hid_report_field_t,link);1053 1054 list_remove(&field-> link);1047 list_first(&report_des->report_items), 1048 usb_hid_report_field_t, ritems_link); 1049 1050 list_remove(&field->ritems_link); 1055 1051 1056 1052 free(field);
Note:
See TracChangeset
for help on using the changeset viewer.