hidapitester – Command-line program to exercise HIDAPI

To help diagnose USB HID communication and to test out updates to hidapi, I wrote hidapitester. It is a command-line program that allows you to exercise just about every aspect of hidapi. Pre-built binaries for MacOS, Windows, and Linux Ubuntu x64.

I’ve found it very useful. You can use it to:

  • Scan for connected HID devices, optionally by VID, PID, usagePage, usage
  • Send OUTPUT reports, with or without Report IDs
  • Receive INPUT reports, with or without Report IDs
  • Send FEATURE reports, with or without Report IDs
  • Receive FEATURE reports, with or without Report IDs

Commands are specified in-order on the command-line, so you can do all of these, repeated reads, close-and-open, etc. all in a single command. More details can be found on the hidapitester github README page.

It is written in really vanilla C to maximize compatibility and ease-of-compilation.

Here’s the help page:

Usage:
  hidapitester <cmd> [options]
where <cmd> is one of:
  --vidpid <vid/pid>          Filter by vendorId/productId (comma/slash delim)
  --usagePage <number>        Filter by usagePage
  --usage <number>            Filter by usage
  --list                      List HID devices (by filters)
  --list-detail               List HID devices w/ details (by filters)
  --open                      Open device with previously selected filters
  --open-path <pathstr>       Open device by path (as in --list-detail)
  --close                     Close currently open device
  --send-feature <datalist>   Send Feature report (1st byte reportId, if used)
  --read-feature <reportId>   Read Feature report (w/ reportId, 0 if unused)
  --send-output <datalist>    Send Ouput report to device
  --read-input [reportId]     Read Input report (w/ opt. reportId, if unused)
  --read-input-forever [rId]  Read Input reports in a loop forever
  --length <len>, -l <len>    Set buffer length in bytes of report to send/read
  --timeout <msecs>           Timeout in millisecs to wait for input reads
  --base <base>, -b <base>    Set decimal or hex buffer print mode
  --quiet, -q                 Print out nothing except when reading data
  --verbose, -v   

Leave a Reply

Your email address will not be published. Required fields are marked *