Index: uspace/app/usbinfo/Makefile
===================================================================
--- uspace/app/usbinfo/Makefile	(revision dec55cead7618c2b661c1adf8f7f2335f1dc7d62)
+++ uspace/app/usbinfo/Makefile	(revision e9c02b7b641738c150f790e5e97d75dee1d85c66)
@@ -31,4 +31,5 @@
 
 LIBS = \
+	$(LIBUSBHID_PREFIX)/libusbhid.a \
 	$(LIBUSBDEV_PREFIX)/libusbdev.a \
 	$(LIBUSB_PREFIX)/libusb.a \
@@ -37,4 +38,5 @@
 	-I$(LIBUSB_PREFIX)/include \
 	-I$(LIBUSBDEV_PREFIX)/include \
+	-I$(LIBUSBHID_PREFIX)/include \
 	-I$(LIBDRV_PREFIX)/include
 
Index: uspace/app/usbinfo/hid.c
===================================================================
--- uspace/app/usbinfo/hid.c	(revision dec55cead7618c2b661c1adf8f7f2335f1dc7d62)
+++ uspace/app/usbinfo/hid.c	(revision e9c02b7b641738c150f790e5e97d75dee1d85c66)
@@ -38,4 +38,5 @@
 #include <usb/classes/classes.h>
 #include <usb/dev/request.h>
+#include <usb/hid/hidparser.h>
 #include <errno.h>
 #include "usbinfo.h"
@@ -84,4 +85,27 @@
 }
 
+/** Dumps HID report in pseudo human-readable format.
+ *
+ * @param iface_no USB interface the report belongs to.
+ * @param report Parsed report descriptor.
+ */
+static void dump_hid_report_brief(int iface_no, usb_hid_report_t *report)
+{
+	printf("%sParsed HID report descriptor for interface %d\n",
+	    get_indent(0), iface_no);
+	list_foreach(report->reports, report_it) {
+		usb_hid_report_description_t *description = list_get_instance(report_it, usb_hid_report_description_t, link);
+		printf("%sReport %d (type %d)\n", get_indent(1),
+		    (int) description->report_id,
+		    (int) description->type);
+		list_foreach(description->report_items, item_it) {
+			usb_hid_report_field_t *field = list_get_instance(item_it, usb_hid_report_field_t, link);
+			printf("%sUsage page = 0x%04x    Usage = 0x%04x\n",
+			    get_indent(2),
+			    (int) field->usage_page, (int) field->usage);
+		}
+	}
+}
+
 /** Retrieves HID report from given USB device and dumps it.
  *
@@ -115,7 +139,16 @@
 	}
 
+	usb_hid_report_t report;
+	rc = usb_hid_parse_report_descriptor(&report, raw_report, report_size);
+	if (rc != EOK) {
+		usb_log_error("Failed to part report descriptor: %s.\n",
+		    str_error(rc));
+	}
+
 	dump_hid_report_raw(iface_no, raw_report, report_size);
+	dump_hid_report_brief(iface_no, &report);
 
 	free(raw_report);
+	usb_hid_free_report(&report);
 }
 
