Index: uspace/lib/usb/include/usb/classes/hidparser.h
===================================================================
--- uspace/lib/usb/include/usb/classes/hidparser.h	(revision a8def7d8500034405ad3c075274cb7b3e4d8745b)
+++ uspace/lib/usb/include/usb/classes/hidparser.h	(revision 0bd4810ce0faf13c2d91fb897a1d5d2e5ccaf73c)
@@ -64,4 +64,11 @@
 
 /**
+ * Description of path of usage pages and usages in report descriptor
+ */
+typedef struct {
+	int32_t usage_page;
+} usb_hid_report_path_t;
+
+/**
  * Description of report items
  */
@@ -185,4 +192,7 @@
     const usb_hid_report_in_callbacks_t *callbacks, void *arg);
 
+int usb_hid_report_input_length(const usb_hid_report_parser_t *parser,
+	const usb_hid_report_path_t *path);
+
 
 void usb_hid_free_report_parser(usb_hid_report_parser_t *parser);
Index: uspace/lib/usb/src/hidparser.c
===================================================================
--- uspace/lib/usb/src/hidparser.c	(revision a8def7d8500034405ad3c075274cb7b3e4d8745b)
+++ uspace/lib/usb/src/hidparser.c	(revision 0bd4810ce0faf13c2d91fb897a1d5d2e5ccaf73c)
@@ -719,4 +719,27 @@
 	
 }
+
+int usb_hid_report_input_length(const usb_hid_report_parser_t *parser,
+	const usb_hid_report_path_t *path)
+{
+	int ret = 0;
+	link_t *item;
+	usb_hid_report_item_t *report_item;
+
+	item = (&parser->input)->next;
+	while(&parser->input != item) {
+		report_item = list_get_instance(item, usb_hid_report_item_t, link);
+		if(report_item->usage_page == path->usage_page) {
+			ret += report_item->count;
+		}
+
+		item = item->next;
+	} 
+
+	return ret;
+}
+
+
+
 /**
  * @}
