Changes in / [bb41b85:6e3b9a58] in mainline


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

Legend:

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

    rbb41b85 r6e3b9a58  
    5252 * Input/Output/Feature Item flags
    5353 */
    54 /** Constant (1) / Variable (0) */
    55 #define USB_HID_ITEM_FLAG_CONSTANT(flags)       ((flags & 0x1) == 0x1)
    56 /** Variable (1) / Array (0) */
    57 #define USB_HID_ITEM_FLAG_VARIABLE(flags)       ((flags & 0x2) == 0x2)
    58 /** Absolute / Relative*/
    59 #define USB_HID_ITEM_FLAG_RELATIVE(flags)       ((flags & 0x4) == 0x4)
    60 /** Wrap / No Wrap */
    61 #define USB_HID_ITEM_FLAG_WRAP(flags)           ((flags & 0x8) == 0x8)
    62 #define USB_HID_ITEM_FLAG_LINEAR(flags)         ((flags & 0x10) == 0x10)
    63 #define USB_HID_ITEM_FLAG_PREFERRED(flags)      ((flags & 0x20) == 0x20)
    64 #define USB_HID_ITEM_FLAG_POSITION(flags)       ((flags & 0x40) == 0x40)
    65 #define USB_HID_ITEM_FLAG_VOLATILE(flags)       ((flags & 0x80) == 0x80)
    66 #define USB_HID_ITEM_FLAG_BUFFERED(flags)       ((flags & 0x100) == 0x100)
     54#define USB_HID_ITEM_FLAG_CONSTANT(flags)       (flags & 0x1)
     55#define USB_HID_ITEM_FLAG_VARIABLE(flags)       (flags & 0x2)
     56#define USB_HID_ITEM_FLAG_RELATIVE(flags)       (flags & 0x4)
     57#define USB_HID_ITEM_FLAG_WRAP(flags)           (flags & 0x8)
     58#define USB_HID_ITEM_FLAG_LINEAR(flags)         (flags & 0x10)
     59#define USB_HID_ITEM_FLAG_PREFERRED(flags)      (flags & 0x20)
     60#define USB_HID_ITEM_FLAG_POSITION(flags)       (flags & 0x40)
     61#define USB_HID_ITEM_FLAG_VOLATILE(flags)       (flags & 0x80)
     62#define USB_HID_ITEM_FLAG_BUFFERED(flags)       (flags & 0x100)
    6763
    68 
    69 /**
    70  * Description of path of usage pages and usages in report descriptor
    71  */
    72 typedef struct {
    73         int32_t usage_page;
    74 } usb_hid_report_path_t;
    7564
    7665/**
     
    196185    const usb_hid_report_in_callbacks_t *callbacks, void *arg);
    197186
    198 int usb_hid_report_input_length(const usb_hid_report_parser_t *parser,
    199         const usb_hid_report_path_t *path);
    200 
    201187
    202188void usb_hid_free_report_parser(usb_hid_report_parser_t *parser);
  • uspace/lib/usb/src/hidparser.c

    rbb41b85 r6e3b9a58  
    178178                                        }
    179179                                        memcpy(new_report_item,report_item, sizeof(usb_hid_report_item_t));
    180                                         /* reset local items */
    181                                         new_report_item->usage_minimum = 0;
    182                                         new_report_item->usage_maximum = 0;
    183                                        
    184180                                        link_initialize(&(new_report_item->link));
    185181                                        report_item = new_report_item;
     
    505501                usb_log_debug("\tCOUNT: %X\n", report_item->count);
    506502                usb_log_debug("\tSIZE: %X\n", report_item->size);
    507                 usb_log_debug("\tCONSTANT/VAR: %X\n", USB_HID_ITEM_FLAG_CONSTANT(report_item->item_flags));
    508                 usb_log_debug("\tVARIABLE/ARRAY: %X\n", USB_HID_ITEM_FLAG_VARIABLE(report_item->item_flags));
     503                usb_log_debug("\tCONSTANT: %X\n", USB_HID_ITEM_FLAG_CONSTANT(report_item->item_flags));
    509504                usb_log_debug("\tUSAGE: %X\n", report_item->usage);
    510505                usb_log_debug("\tUSAGE PAGE: %X\n", report_item->usage_page);
     
    513508                usb_log_debug("\tPHYMIN: %X\n", report_item->physical_minimum);         
    514509                usb_log_debug("\tPHYMAX: %X\n", report_item->physical_maximum);                         
    515                 usb_log_debug("\tUSAGEMIN: %X\n", report_item->usage_minimum);
    516                 usb_log_debug("\tUSAGEMAX: %X\n", report_item->usage_maximum);
    517                
    518510                usb_log_debug("\n");           
    519511
     
    610602        usb_hid_report_item_t *item;
    611603        uint8_t *keys;
    612         uint8_t item_value;
    613604        size_t key_count=0;
    614605        size_t i=0;
     
    616607
    617608        // get the size of result keycodes array
    618         usb_hid_report_path_t path;
    619         path.usage_page = BAD_HACK_USAGE_PAGE;
    620         key_count = usb_hid_report_input_length(parser, &path);
    621 
     609        list_item = parser->input.next;   
     610        while(list_item != &(parser->input)) {
     611
     612                item = list_get_instance(list_item, usb_hid_report_item_t, link);
     613                if(item->usage_page == BAD_HACK_USAGE_PAGE) {
     614                        key_count += item->count;
     615                }
     616
     617                list_item = list_item->next;
     618        }
     619
     620       
    622621        if(!(keys = malloc(sizeof(uint8_t) * key_count))){
    623622                return ENOMEM;
     
    629628
    630629                item = list_get_instance(list_item, usb_hid_report_item_t, link);
    631                 if(!USB_HID_ITEM_FLAG_CONSTANT(item->item_flags) &&
    632                    (item->usage_page == path.usage_page)) {
     630                if(item->usage_page == BAD_HACK_USAGE_PAGE) {
    633631                        for(j=0; j<(size_t)(item->count); j++) {
    634                                 if((USB_HID_ITEM_FLAG_VARIABLE(item->item_flags) == 0) ||
    635                                    ((item->usage_minimum == 0) && (item->usage_maximum == 0))) {
    636                                         // variable item
    637                                         keys[i++] = usb_hid_translate_data(item, data,j);
    638                                 }
    639                                 else {
    640                                         // bitmapa
    641                                         if((item_value = usb_hid_translate_data(item, data, j)) != 0) {
    642                                                 keys[i++] = j + item->usage_minimum;
    643                                         }
    644                                         else {
    645                                                 keys[i++] = 0;
    646                                         }
    647                                 }
     632                                keys[i++] = usb_hid_translate_data(item, data,j);
    648633                        }
    649634                }
     
    734719       
    735720}
    736 
    737 int usb_hid_report_input_length(const usb_hid_report_parser_t *parser,
    738         const usb_hid_report_path_t *path)
    739 {
    740         int ret = 0;
    741         link_t *item;
    742         usb_hid_report_item_t *report_item;
    743 
    744         item = (&parser->input)->next;
    745         while(&parser->input != item) {
    746                 report_item = list_get_instance(item, usb_hid_report_item_t, link);
    747                 if(!USB_HID_ITEM_FLAG_CONSTANT(report_item->item_flags) &&
    748                    (report_item->usage_page == path->usage_page)) {
    749                         ret += report_item->count;
    750                 }
    751 
    752                 item = item->next;
    753         }
    754 
    755         return ret;
    756 }
    757 
    758 
    759 
    760721/**
    761722 * @}
Note: See TracChangeset for help on using the changeset viewer.