Changes in / [8cbd512:10849ffc] in mainline


Ignore:
Location:
uspace/lib/usb
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usb/include/usb/classes/hiddescriptor.h

    r8cbd512 r10849ffc  
    7878uint32_t usb_hid_report_tag_data_uint32(const uint8_t *data, size_t size);
    7979
     80usb_hid_report_path_t *usb_hid_report_path_try_insert(usb_hid_report_t *report, usb_hid_report_path_t *cmp_path);
    8081#endif
    8182/**
  • uspace/lib/usb/src/hiddescriptor.c

    r8cbd512 r10849ffc  
    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);
     
    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        }
Note: See TracChangeset for help on using the changeset viewer.