Changes in / [fee6381:f8e8738] in mainline
- Location:
- uspace/lib/usb
- Files:
-
- 2 edited
-
include/usb/classes/hidparser.h (modified) (2 diffs)
-
src/hidparser.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usb/include/usb/classes/hidparser.h
rfee6381 rf8e8738 92 92 /** */ 93 93 link_t link; 94 95 94 } usb_hid_report_path_t; 96 95 … … 159 158 160 159 int use_report_id; 161 162 /** */ 163 link_t stack; 160 164 161 } usb_hid_report_parser_t; 165 162 -
uspace/lib/usb/src/hidparser.c
rfee6381 rf8e8738 64 64 int usb_hid_report_reset_local_items(); 65 65 void usb_hid_free_report_list(link_t *head); 66 usb_hid_report_item_t *usb_hid_report_item_clone(const usb_hid_report_item_t *item); 66 67 67 /* 68 68 * Data translation private functions … … 105 105 list_initialize(&(parser->output)); 106 106 list_initialize(&(parser->feature)); 107 108 list_initialize(&(parser->stack));109 107 110 108 parser->use_report_id = 0; … … 222 220 if(!(new_report_item = malloc(sizeof(usb_hid_report_item_t)))) { 223 221 return ENOMEM; 224 } 222 } 225 223 memcpy(new_report_item,report_item, sizeof(usb_hid_report_item_t)); 226 link_initialize(&(new_report_item->link));227 228 224 /* reset local items */ 229 225 new_report_item->usage_minimum = 0; 230 226 new_report_item->usage_maximum = 0; 231 new_report_item->designator_index = 0;232 new_report_item->designator_minimum = 0;233 new_report_item->designator_maximum = 0;234 new_report_item->string_index = 0;235 new_report_item->string_minimum = 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;241 227 228 link_initialize(&(new_report_item->link)); 242 229 report_item = new_report_item; 243 230 … … 245 232 case USB_HID_REPORT_TAG_PUSH: 246 233 // push current state to stack 247 new_report_item = usb_hid_report_item_clone(report_item); 248 list_prepend (&parser->stack, &new_report_item->link); 249 234 // not yet implemented 250 235 break; 251 236 case USB_HID_REPORT_TAG_POP: 252 237 // restore current state from stack 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 238 // not yet implemented 260 239 break; 261 240 … … 1384 1363 } 1385 1364 1386 1387 usb_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 1400 1365 /** 1401 1366 * @}
Note:
See TracChangeset
for help on using the changeset viewer.
