Hello everyone, I would like to announce a HID report descriptor library and tool I'm making in my spare time, as a part of the DIGImend project [1]. It is called simply "hidrd". It is aimed to replace the HID Descriptor Tool [2], produced by the USB Implementers Forum, and address its shortcomings. To me these are mainly the inability to read native descriptor format, GUI-only interface, and instability, plus it is Windows-only (although it runs under WINE). The ultimate goal is to make a command-line tool which could be used to conveniently make your own and modify existing descriptors. So the idea is to implement conversion to/from some format more suitable for human consumption and editing. XML was chosen for a start. Yeah, I know, some people consider it ugly and not that convenient, but it was the easiest way to me. The tool is called "hidrd-convert" and currently can only convert from the native format to XML. However it could already be useful for a developer wishing to better understand a particular descriptor, or HID report descriptors as a whole. The next major release (0.2) will include conversion from XML to the native format. Here is how the output looks for a Microsoft's Natural Ergonomic Keyboard: <?xml version="1.0"?> <descriptor xmlns="http://digimend.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://digimend.sourceforge.net hidrd.xsd"> <usage_page>desktop<!-- Generic desktop controls --></usage_page> <usage>desktop_keyboard<!-- Keyboard (06, top-level) --></usage> <COLLECTION type="application"> <usage_page>led<!-- LEDs --></usage_page> <usage_minimum>01<!-- Top-level --></usage_minimum> <usage_maximum>03<!-- Top-level --></usage_maximum> <logical_minimum>0</logical_minimum> <logical_maximum>1</logical_maximum> <report_size>1</report_size> <report_count>3</report_count> <output> <variable/> </output> <usage>4B</usage> <report_count>1</report_count> <output> <variable/> </output> <report_count>4</report_count> <output> <constant/> </output> <usage_page>keyboard<!-- Keyboard/keypad --></usage_page> <usage_minimum>keyboard_kb_leftcontrol<!-- Keyboard left control (E0) --></usage_minimum> <usage_maximum>keyboard_kb_right_gui<!-- Keyboard right GUI (E7) --></usage_maximum> <report_count>8</report_count> <input> <variable/> </input> <report_size>8</report_size> <report_count>1</report_count> <input> <constant/> </input> <usage_minimum>keyboard_none<!-- No event (00) --></usage_minimum> <usage_maximum>keyboard_kb_lang2<!-- Keyboard LANG2 (91) --></usage_maximum> <logical_maximum>255</logical_maximum> <report_count>6</report_count> <input/> </COLLECTION> </descriptor> This is produced by running the hidrd-convert tool like this: hidrd-convert -o xml descriptor.bin descriptor.xml I can show you some a bit more interesting examples (including a Genius tablet and the PS3 gamepad) on request (since they are bigger). The hidrd release 0.1.1 could be downloaded here: https://sourceforge.net/projects/digimend/files/hidrd/0.1/hidrd-0.1.1.tar.gz/download You can also visit the hidrd section on the DIGImend project page [3]. Any comments and feedback are welcome, of course :) Thank you for you attention. Sincerely, Nick [1] http://digimend.sourceforge.net/ [2] http://www.usb.org/developers/hidpage/#Descriptor_Tool [3] http://digimend.sourceforge.net/#proj-hidrd -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html