Ignore:
File:
1 edited

Legend:

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

    r0a494fe rb9d7965  
    5656#define USB_HID_UNKNOWN_TAG             -99
    5757
    58 
    59 /**
    60  * Initialize the report descriptor parser structure
    61  *
    62  * @param parser Report descriptor parser structure
    63  * @return Error code
    64  */
    65 int usb_hid_report_init(usb_hid_report_t *report)
    66 {
    67         if(report == NULL) {
    68                 return EINVAL;
    69         }
    70 
    71         memset(report, 0, sizeof(usb_hid_report_t));
    72         list_initialize(&report->reports);
    73         list_initialize(&report->collection_paths);
    74 
    75         report->use_report_ids = 0;
    76     return EOK;   
    77 }
    78 
    79 int usb_hid_report_append_fields(usb_hid_report_t *report, usb_hid_report_item_t *report_item)
    80 {
    81         usb_hid_report_field_t *field;
    82         int i;
    83 
    84 
     58usb_hid_report_path_t *usb_hid_report_path_try_insert(usb_hid_report_t *report, usb_hid_report_path_t *cmp_path)
     59{
    8560        /* find or append current collection path to the list */
    8661        link_t *path_it = report->collection_paths.next;
     
    8964                path = list_get_instance(path_it, usb_hid_report_path_t, link);
    9065               
    91                 if(usb_hid_report_compare_usage_path(path, report_item->usage_path, USB_HID_PATH_COMPARE_STRICT) == EOK){
     66                if(usb_hid_report_compare_usage_path(path, cmp_path, USB_HID_PATH_COMPARE_STRICT) == EOK){
    9267                        break;
    9368                }                       
     
    9570        }
    9671        if(path_it == &report->collection_paths) {
    97                 path = usb_hid_report_path_clone(report_item->usage_path);                     
     72                path = usb_hid_report_path_clone(cmp_path);                     
    9873                list_append(&path->link, &report->collection_paths);                                   
    9974                report->collection_paths_count++;
    100         }
     75
     76                return path;
     77        }
     78        else {
     79                return list_get_instance(path_it, usb_hid_report_path_t, link);
     80        }
     81}
     82
     83/**
     84 * Initialize the report descriptor parser structure
     85 *
     86 * @param parser Report descriptor parser structure
     87 * @return Error code
     88 */
     89int usb_hid_report_init(usb_hid_report_t *report)
     90{
     91        if(report == NULL) {
     92                return EINVAL;
     93        }
     94
     95        memset(report, 0, sizeof(usb_hid_report_t));
     96        list_initialize(&report->reports);
     97        list_initialize(&report->collection_paths);
     98
     99        report->use_report_ids = 0;
     100    return EOK;   
     101}
     102
     103int usb_hid_report_append_fields(usb_hid_report_t *report, usb_hid_report_item_t *report_item)
     104{
     105        usb_hid_report_field_t *field;
     106        int i;
    101107
    102108        for(i=0; i<report_item->usages_count; i++){
     
    104110        }
    105111
    106        
     112        usb_hid_report_path_t *path = report_item->usage_path; 
    107113        for(i=0; i<report_item->count; i++){
    108114
     
    112118
    113119                /* fill the attributes */               
    114                 field->collection_path = path;
    115120                field->logical_minimum = report_item->logical_minimum;
    116121                field->logical_maximum = report_item->logical_maximum;
     
    168173                }
    169174               
     175                usb_hid_report_set_last_item(path, USB_HID_TAG_CLASS_GLOBAL, field->usage_page);
     176                usb_hid_report_set_last_item(path, USB_HID_TAG_CLASS_LOCAL, field->usage);
     177
     178                field->collection_path = usb_hid_report_path_try_insert(report, path);
     179
    170180                field->size = report_item->size;
    171181                field->offset = report_item->offset + (i * report_item->size);
     
    349359                                        tmp_usage_path = list_get_instance(report_item->usage_path->link.prev, usb_hid_report_usage_path_t, link);
    350360                                       
    351                                         usb_hid_report_set_last_item(usage_path, tmp_usage_path->usage_page, tmp_usage_path->usage);
     361                                        usb_hid_report_set_last_item(usage_path, USB_HID_TAG_CLASS_GLOBAL, tmp_usage_path->usage_page);
     362                                        usb_hid_report_set_last_item(usage_path, USB_HID_TAG_CLASS_LOCAL, tmp_usage_path->usage);
    352363
    353364                                        usb_hid_report_path_free(report_item->usage_path);
     
    629640
    630641                usb_log_debug("\t\tOFFSET: %X\n", report_item->offset);
    631                 usb_log_debug("\t\tSIZE: %zu\n", report_item->size);
     642                usb_log_debug("\t\tSIZE: %X\n", report_item->size);                             
    632643                usb_log_debug("\t\tLOGMIN: %d\n", report_item->logical_minimum);
    633644                usb_log_debug("\t\tLOGMAX: %d\n", report_item->logical_maximum);               
     
    640651                usb_log_debug("\t\ttUSAGE: %X\n", report_item->usage);
    641652                usb_log_debug("\t\tUSAGE PAGE: %X\n", report_item->usage_page);
    642                                                
    643 //              usb_log_debug("\n");           
     653               
     654                //usb_hid_print_usage_path(report_item->collection_path);
     655
     656                usb_log_debug("\n");           
    644657
    645658        }
     
    666679                usb_log_debug("Report ID: %d\n", report_des->report_id);
    667680                usb_log_debug("\tType: %d\n", report_des->type);
    668                 usb_log_debug("\tLength: %zu\n", report_des->bit_length);
    669                 usb_log_debug("\tItems: %zu\n", report_des->item_length);
     681                usb_log_debug("\tLength: %d\n", report_des->bit_length);               
     682                usb_log_debug("\tItems: %d\n", report_des->item_length);               
    670683
    671684                usb_hid_descriptor_print_list(&report_des->report_items);
Note: See TracChangeset for help on using the changeset viewer.