Ignore:
File:
1 edited

Legend:

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

    rb72efe8 r0dd3e49  
    8888 * @retval NULL If some error occurs
    8989 */
    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;
     90usb_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;
    9494        usb_hid_report_path_t *path = NULL;
    9595       
     
    9898        }
    9999       
    100         while(path_it != &report->collection_paths.head) {
     100        while(path_it != &report->collection_paths) {
    101101                path = list_get_instance(path_it, usb_hid_report_path_t,
    102                                 cpath_link);
     102                                link);
    103103               
    104104                if(usb_hid_report_compare_usage_path(path, cmp_path,
    105105                                        USB_HID_PATH_COMPARE_STRICT) == EOK){
    106106                        break;
    107                 }
     107                }                       
    108108                path_it = path_it->next;
    109109        }
    110         if(path_it == &report->collection_paths.head) {
     110        if(path_it == &report->collection_paths) {
    111111                path = usb_hid_report_path_clone(cmp_path);
    112112                if(path == NULL) {
    113113                        return NULL;
    114114                }
    115                 list_append(&path->cpath_link, &report->collection_paths);
     115                list_append(&path->link, &report->collection_paths);                                   
    116116                report->collection_paths_count++;
    117117
     
    120120        else {
    121121                return list_get_instance(path_it, usb_hid_report_path_t,
    122                                 cpath_link);
     122                                link);
    123123        }
    124124}
     
    192192
    193193                memset(field, 0, sizeof(usb_hid_report_field_t));
    194                 link_initialize(&field->ritems_link);
     194                list_initialize(&field->link);
    195195
    196196                /* fill the attributes */               
     
    291291                        }
    292292
    293                         link_initialize (&report_des->reports_link);
     293                        list_initialize (&report_des->link);
    294294                        list_initialize (&report_des->report_items);
    295295
    296                         list_append(&report_des->reports_link, &report->reports);
     296                        list_append(&report_des->link, &report->reports);
    297297                        report->report_count++;
    298298                }
    299299
    300300                /* append this field to the end of founded report list */
    301                 list_append(&field->ritems_link, &report_des->report_items);
     301                list_append (&field->link, &report_des->report_items);
    302302               
    303303                /* update the sizes */
     
    333333        }
    334334
     335        link_t *report_it = report->reports.next;
    335336        usb_hid_report_description_t *report_des = NULL;
    336337       
    337         list_foreach(report->reports, report_it) {
     338        while(report_it != &report->reports) {
    338339                report_des = list_get_instance(report_it,
    339                                 usb_hid_report_description_t, reports_link);
     340                                usb_hid_report_description_t, link);
    340341
    341342                // if report id not set, return the first of the type
     
    344345                        return report_des;
    345346                }
     347               
     348                report_it = report_it->next;
    346349        }
    347350
     
    374377        size_t offset_output=0;
    375378        size_t offset_feature=0;
    376        
    377         link_t *item_link;
    378 
    379         list_t stack;
    380         list_initialize(&stack);
     379
     380        link_t stack;
     381        list_initialize(&stack);       
    381382
    382383        /* parser structure initialization*/
     
    390391        }
    391392        memset(report_item, 0, sizeof(usb_hid_report_item_t));
    392         link_initialize(&(report_item->link));
     393        list_initialize(&(report_item->link)); 
    393394
    394395        /* usage path context initialization */
     
    492493                        case USB_HID_REPORT_TAG_POP:
    493494                                // restore current state from stack
    494                                 item_link = list_first(&stack);
    495                                 if (item_link == NULL) {
     495                                if(list_empty (&stack)) {
    496496                                        return EINVAL;
    497497                                }
    498498                                free(report_item);
    499                                
    500                                 report_item = list_get_instance(item_link,
     499                                               
     500                                report_item = list_get_instance(stack.next,
    501501                                    usb_hid_report_item_t, link);
    502                                
     502                                       
    503503                                usb_hid_report_usage_path_t *tmp_usage_path;
    504504                                tmp_usage_path = list_get_instance(
    505                                     report_item->usage_path->cpath_link.prev,
    506                                     usb_hid_report_usage_path_t, rpath_items_link);
    507                                
     505                                    report_item->usage_path->link.prev,
     506                                    usb_hid_report_usage_path_t, link);
     507                                       
    508508                                usb_hid_report_set_last_item(usage_path,
    509509                                    USB_HID_TAG_CLASS_GLOBAL, tmp_usage_path->usage_page);
     
    513513
    514514                                usb_hid_report_path_free(report_item->usage_path);
    515                                 list_remove (item_link);
     515                                list_initialize(&report_item->usage_path->link);
     516                                list_remove (stack.next);
    516517                                       
    517518                                break;
     
    609610
    610611                /* store collection atributes */
    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;
     612                path_item = list_get_instance(usage_path->head.prev,
     613                        usb_hid_report_usage_path_t, link);
     614                path_item->flags = *data;       
    614615                       
    615616                /* set last item */
     
    900901 * @return void
    901902 */
    902 void usb_hid_descriptor_print_list(list_t *list)
     903void usb_hid_descriptor_print_list(link_t *head)
    903904{
    904905        usb_hid_report_field_t *report_item;
    905 
    906         if(list == NULL || list_empty(list)) {
     906        link_t *item;
     907
     908
     909        if(head == NULL || list_empty(head)) {
    907910            usb_log_debug("\tempty\n");
    908911            return;
    909912        }
    910 
    911         list_foreach(*list, item) {
    912                 report_item = list_get_instance(item, usb_hid_report_field_t,
    913                                 ritems_link);
     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);
    914918
    915919                usb_log_debug("\t\tOFFSET: %X\n", report_item->offset);
    916920                usb_log_debug("\t\tSIZE: %zu\n", report_item->size);
    917                 usb_log_debug("\t\tLOGMIN: %d\n",
     921                usb_log_debug("\t\tLOGMIN: %d\n", 
    918922                        report_item->logical_minimum);
    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",
     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", 
    926930                        report_item->usage_minimum);
    927931                usb_log_debug("\t\tUSAGEMAX: %X\n",
    928932                               report_item->usage_maximum);
    929                 usb_log_debug("\t\tUSAGES COUNT: %zu\n",
     933                usb_log_debug("\t\tUSAGES COUNT: %zu\n", 
    930934                        report_item->usages_count);
    931935
     
    933937                usb_log_debug("\t\ttUSAGE: %X\n", report_item->usage);
    934938                usb_log_debug("\t\tUSAGE PAGE: %X\n", report_item->usage_page);
    935 
     939               
    936940                usb_hid_print_usage_path(report_item->collection_path);
    937941
    938                 usb_log_debug("\n");
     942                usb_log_debug("\n");           
    939943
    940944        }
     
    955959        }
    956960
     961        link_t *report_it = report->reports.next;
    957962        usb_hid_report_description_t *report_des;
    958963
    959         list_foreach(report->reports, report_it) {
    960                 report_des = list_get_instance(report_it,
    961                         usb_hid_report_description_t, reports_link);
     964        while(report_it != &report->reports) {
     965                report_des = list_get_instance(report_it, 
     966                        usb_hid_report_description_t, link);
    962967                usb_log_debug("Report ID: %d\n", report_des->report_id);
    963968                usb_log_debug("\tType: %d\n", report_des->type);
    964                 usb_log_debug("\tLength: %zu\n", report_des->bit_length);
     969                usb_log_debug("\tLength: %zu\n", report_des->bit_length);               
    965970                usb_log_debug("\tB Size: %zu\n",
    966                         usb_hid_report_byte_size(report,
    967                                 report_des->report_id,
     971                        usb_hid_report_byte_size(report, 
     972                                report_des->report_id, 
    968973                                report_des->type));
    969                 usb_log_debug("\tItems: %zu\n", report_des->item_length);
     974                usb_log_debug("\tItems: %zu\n", report_des->item_length);               
    970975
    971976                usb_hid_descriptor_print_list(&report_des->report_items);
     977
     978                report_it = report_it->next;
    972979        }
    973980}
     
    977984 * Releases whole linked list of report items
    978985 *
    979  * @param list List of report descriptor items (usb_hid_report_item_t)
     986 * @param head Head of list of report descriptor items (usb_hid_report_item_t)
    980987 * @return void
    981988 */
    982 void usb_hid_free_report_list(list_t *list)
     989void usb_hid_free_report_list(link_t *head)
    983990{
    984         return; /* XXX What's this? */
    985        
    986 /*      usb_hid_report_item_t *report_item;
     991        return;
     992       
     993        usb_hid_report_item_t *report_item;
    987994        link_t *next;
    988995       
    989         if(list == NULL || list_empty(list)) {
     996        if(head == NULL || list_empty(head)) {         
    990997            return;
    991998        }
    992999       
    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);
     1000        next = head->next;
     1001        while(next != head) {
     1002       
     1003            report_item = list_get_instance(next, usb_hid_report_item_t, link);
    9971004
    9981005                while(!list_empty(&report_item->usage_path->link)) {
    999                         usb_hid_report_remove_last_item(report_item->usage_path);
     1006                    usb_hid_report_remove_last_item(report_item->usage_path);
    10001007                }
    10011008
     
    10071014       
    10081015        return;
    1009         */
     1016       
    10101017}
    10111018/*---------------------------------------------------------------------------*/
     
    10231030
    10241031        // free collection paths
    1025         link_t *path_link;
    10261032        usb_hid_report_path_t *path;
    10271033        while(!list_empty(&report->collection_paths)) {
    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);
     1034                path = list_get_instance(report->collection_paths.next,
     1035                                usb_hid_report_path_t, link);
     1036
     1037                usb_hid_report_path_free(path);         
    10341038        }
    10351039       
     
    10381042        usb_hid_report_field_t *field;
    10391043        while(!list_empty(&report->reports)) {
    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);
     1044                report_des = list_get_instance(report->reports.next,
     1045                                usb_hid_report_description_t, link);
     1046
     1047                list_remove(&report_des->link);
    10441048               
    10451049                while(!list_empty(&report_des->report_items)) {
    10461050                        field = list_get_instance(
    1047                             list_first(&report_des->report_items),
    1048                             usb_hid_report_field_t, ritems_link);
    1049 
    1050                         list_remove(&field->ritems_link);
     1051                                report_des->report_items.next,
     1052                                usb_hid_report_field_t, link);
     1053
     1054                        list_remove(&field->link);
    10511055
    10521056                        free(field);
Note: See TracChangeset for help on using the changeset viewer.