Changeset 64dbc83 in mainline


Ignore:
Timestamp:
2011-04-05T19:33:11Z (13 years ago)
Author:
Matej Klonfar <maklf@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
b04967a, fee6381
Parents:
a9974ef
Message:
  • Report ID implementation
  • Push and Pop report descriptor instructions

both need testing

Location:
uspace/lib/usb
Files:
2 edited

Legend:

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

    ra9974ef r64dbc83  
    9292        /** */ 
    9393        link_t link;
     94
    9495} usb_hid_report_path_t;
    9596
     
    158159       
    159160        int use_report_id;
    160        
     161
     162        /** */
     163        link_t stack;
    161164} usb_hid_report_parser_t;     
    162165
  • uspace/lib/usb/src/hidparser.c

    ra9974ef r64dbc83  
    6464int usb_hid_report_reset_local_items();
    6565void usb_hid_free_report_list(link_t *head);
    66 
     66usb_hid_report_item_t *usb_hid_report_item_clone(const usb_hid_report_item_t *item);
    6767/*
    6868 * Data translation private functions
     
    105105    list_initialize(&(parser->output));
    106106    list_initialize(&(parser->feature));
     107
     108        list_initialize(&(parser->stack));
    107109
    108110        parser->use_report_id = 0;
     
    222224                                        }                                       
    223225                                        memcpy(new_report_item,report_item, sizeof(usb_hid_report_item_t));
     226                                        link_initialize(&(new_report_item->link));
    224227                                       
    225228                                        /* reset local items */
    226229                                        new_report_item->usage_minimum = 0;
    227230                                        new_report_item->usage_maximum = 0;
    228                                         new_report_item->usage = 0;
    229231                                        new_report_item->designator_index = 0;
    230232                                        new_report_item->designator_minimum = 0;
     
    232234                                        new_report_item->string_index = 0;
    233235                                        new_report_item->string_minimum = 0;
    234                                         new_report_item->string_maximum = 0;                                                                           
     236                                        new_report_item->string_maximum = 0;
     237
     238                                        /* reset usage from current usage path */
     239                                        usb_hid_report_usage_path_t *path = list_get_instance(&usage_path->link, usb_hid_report_usage_path_t, link);
     240                                        path->usage = 0;
    235241                                       
    236                                         link_initialize(&(new_report_item->link));
    237242                                        report_item = new_report_item;
    238243                                                                               
     
    240245                                case USB_HID_REPORT_TAG_PUSH:
    241246                                        // push current state to stack
    242                                         // not yet implemented
     247                                        new_report_item = usb_hid_report_item_clone(report_item);
     248                                        list_prepend (&parser->stack, &new_report_item->link);
     249                                       
    243250                                        break;
    244251                                case USB_HID_REPORT_TAG_POP:
    245252                                        // restore current state from stack
    246                                         // not yet implemented                                             
     253                                        if(list_empty (&parser->stack)) {
     254                                                return EINVAL;
     255                                        }
     256                                       
     257                                        report_item = list_get_instance(&parser->stack, usb_hid_report_item_t, link);
     258                                        list_remove (parser->stack.next);
     259                                       
    247260                                        break;
    248261                                       
     
    13711384}
    13721385
     1386
     1387usb_hid_report_item_t *usb_hid_report_item_clone(const usb_hid_report_item_t *item)
     1388{
     1389        usb_hid_report_item_t *new_report_item;
     1390       
     1391        if(!(new_report_item = malloc(sizeof(usb_hid_report_item_t)))) {
     1392                return NULL;
     1393        }                                       
     1394        memcpy(new_report_item,item, sizeof(usb_hid_report_item_t));
     1395        link_initialize(&(new_report_item->link));
     1396
     1397        return new_report_item;
     1398}
     1399
    13731400/**
    13741401 * @}
Note: See TracChangeset for help on using the changeset viewer.