Index: uspace/lib/usb/include/usb/classes/hid.h
===================================================================
--- uspace/lib/usb/include/usb/classes/hid.h	(revision cf978f2e8306ba4f632bf50ec92e1cc612e36083)
+++ uspace/lib/usb/include/usb/classes/hid.h	(revision 243cb862efdca342a3d56442ae4a4fe91c8c1e81)
@@ -36,4 +36,8 @@
 #define LIBUSB_HID_H_
 
+#include <usb/usb.h>
+#include <driver.h>
+#include <usb/classes/hidparser.h>
+
 /** USB/HID device requests. */
 typedef enum {
@@ -54,4 +58,16 @@
 } usb_hid_protocol_t;
 
+/**
+ * @brief USB/HID keyboard device type.
+ *
+ * Quite dummy right now.
+ */
+typedef struct {
+	device_t *device;
+	usb_address_t address;
+	usb_endpoint_t default_ep;
+	usb_hid_report_parser_t *parser;
+} usb_hid_dev_kbd_t;
+
 #endif
 /**
Index: uspace/lib/usb/include/usb/classes/hidparser.h
===================================================================
--- uspace/lib/usb/include/usb/classes/hidparser.h	(revision cf978f2e8306ba4f632bf50ec92e1cc612e36083)
+++ uspace/lib/usb/include/usb/classes/hidparser.h	(revision 243cb862efdca342a3d56442ae4a4fe91c8c1e81)
@@ -50,5 +50,5 @@
 	 * @param arg Custom argument.
 	 */
-	void (*keyboard)(const uint32_t *key_codes, size_t count, void *arg);
+	void (*keyboard)(const uint16_t *key_codes, size_t count, void *arg);
 } usb_hid_report_in_callbacks_t;
 
Index: uspace/lib/usb/src/hidparser.c
===================================================================
--- uspace/lib/usb/src/hidparser.c	(revision cf978f2e8306ba4f632bf50ec92e1cc612e36083)
+++ uspace/lib/usb/src/hidparser.c	(revision 243cb862efdca342a3d56442ae4a4fe91c8c1e81)
@@ -62,5 +62,15 @@
     const usb_hid_report_in_callbacks_t *callbacks, void *arg)
 {
-	return ENOTSUP;
+	int i;
+	
+	// TODO: parse report
+	
+	uint16_t keys[6];
+	
+	for (i = 0; i < 6; ++i) {
+		keys[i] = data[i];
+	}
+	
+	callbacks->keyboard(keys, 6, arg);
 }
 
