todbot / win-hid-dump

Sort of a Windows version of `usbhid-dump` to show HID Report Descriptors
52 stars 10 forks source link

not issue, but some feedback #9

Closed ullMarksin closed 1 year ago

ullMarksin commented 1 year ago

Device: ps4 controller Os: Windows 10 Left side is your app output, right side is wireshark with USBPcap1 interface I captured data with wireshare using this example: https://github.com/liquidctl/liquidctl/blob/main/docs/developer/capturing-usb-traffic.md I know that right side is correct because I verified with https://www.psdevwiki.com/ps4/DS4-USB report, so it looks like your app outputs incorrect data or/and adds unnecessary data , and descriptor is more than 2x bigger(1249 bytes vs 499 bytes). I am new/not expert on this, so maybe I am something missing or don't understand?

hid_dp1 hid_dp2

ullMarksin commented 1 year ago

raw data , before parsing: 054C:05C4: Sony Computer Entertainment - Wireless Controller

DESCRIPTOR: 05 01 09 05 A1 01 85 01 09 30 15 00 25 FF 35 00 45 00 65 00 55 00 75 08 95 01 81 02 09 31 81 02 09 32 81 02 09 35 81 02 09 39 25 07 46 3B 01 65 14 75 04 81 42 05 09 19 01 29 0E 25 01 45 01 65 00 75 01 95 0E 81 02 06 00 FF 09 20 25 7F 46 3B 01 75 06 95 01 81 02 05 01 09 33 25 FF 75 08 81 02 09 34 81 02 06 00 FF 09 21 95 36 81 02 85 05 09 22 95 1F 91 02 85 04 09 23 95 24 B1 02 25 01 45 01 75 01 95 D8 B1 03 85 02 09 24 25 FF 46 3B 01 75 08 95 24 B1 02 25 01 45 01 75 01 95 D8 B1 03 85 08 09 25 25 FF 46 3B 01 75 08 95 03 B1 02 25 01 45 01 75 01 96 E0 01 B1 03 85 10 09 26 25 FF 46 3B 01 75 08 95 04 B1 02 25 01 45 01 75 01 96 D8 01 B1 03 85 11 09 27 25 FF 46 3B 01 75 08 95 02 B1 02 25 01 45 01 75 01 96 E8 01 B1 03 85 12 06 02 FF 09 21 25 FF 46 3B 01 75 08 95 0F B1 02 25 01 45 01 75 01 96 80 01 B1 03 85 13 09 22 25 FF 46 3B 01 75 08 95 16 B1 02 25 01 45 01 75 01 96 48 01 B1 03 85 14 06 05 FF 09 20 25 FF 46 3B 01 75 08 95 10 B1 02 25 01 45 01 75 01 96 78 01 B1 03 85 15 09 21 25 FF 46 3B 01 75 08 95 2C B1 02 25 01 45 01 75 01 95 98 B1 03 85 80 06 80 FF 09 20 25 FF 46 3B 01 75 08 95 06 B1 02 25 01 45 01 75 01 96 C8 01 B1 03 85 81 09 21 25 FF 46 3B 01 75 08 95 06 B1 02 25 01 45 01 75 01 96 C8 01 B1 03 85 82 09 22 25 FF 46 3B 01 75 08 95 05 B1 02 25 01 45 01 75 01 96 D0 01 B1 03 85 83 09 23 25 FF 46 3B 01 75 08 95 01 B1 02 25 01 45 01 75 01 96 F0 01 B1 03 85 84 09 24 25 FF 46 3B 01 75 08 95 04 B1 02 25 01 45 01 75 01 96 D8 01 B1 03 85 85 09 25 25 FF 46 3B 01 75 08 95 06 B1 02 25 01 45 01 75 01 96 C8 01 B1 03 85 86 09 26 25 FF 46 3B 01 75 08 95 06 B1 02 25 01 45 01 75 01 96 C8 01 B1 03 85 87 09 27 25 FF 46 3B 01 75 08 95 23 B1 02 25 01 45 01 75 01 95 E0 B1 03 85 88 09 28 25 FF 46 3B 01 75 08 95 22 B1 02 25 01 45 01 75 01 95 E8 B1 03 85 89 09 29 25 FF 46 3B 01 75 08 95 02 B1 02 25 01 45 01 75 01 96 E8 01 B1 03 85 90 09 30 25 FF 46 3B 01 75 08 95 05 B1 02 25 01 45 01 75 01 96 D0 01 B1 03 85 91 09 31 25 FF 46 3B 01 75 08 95 03 B1 02 25 01 45 01 75 01 96 E0 01 B1 03 85 92 09 32 25 FF 46 3B 01 75 08 95 03 B1 02 25 01 45 01 75 01 96 E0 01 B1 03 85 93 09 33 25 FF 46 3B 01 75 08 95 0C B1 02 25 01 45 01 75 01 96 98 01 B1 03 85 A0 09 40 25 FF 46 3B 01 75 08 95 06 B1 02 25 01 45 01 75 01 96 C8 01 B1 03 85 A1 09 41 25 FF 46 3B 01 75 08 95 01 B1 02 25 01 45 01 75 01 96 F0 01 B1 03 85 A2 09 42 25 FF 46 3B 01 75 08 95 01 B1 02 25 01 45 01 75 01 96 F0 01 B1 03 85 A3 09 43 25 FF 46 3B 01 75 08 95 30 B1 02 25 01 45 01 75 01 95 78 B1 03 85 A4 09 44 25 FF 46 3B 01 75 08 95 0D B1 02 25 01 45 01 75 01 96 90 01 B1 03 85 A5 09 45 25 FF 46 3B 01 75 08 95 15 B1 02 25 01 45 01 75 01 96 50 01 B1 03 85 A6 09 46 25 FF 46 3B 01 75 08 95 15 B1 02 25 01 45 01 75 01 96 50 01 B1 03 85 F0 09 47 25 FF 46 3B 01 75 08 95 3F B1 02 85 F1 09 48 B1 02 85 F2 09 49 95 0F B1 02 25 01 45 01 75 01 96 80 01 B1 03 85 A7 09 4A 25 FF 46 3B 01 75 08 95 01 B1 02 25 01 45 01 75 01 96 F0 01 B1 03 85 A8 09 4B 25 FF 46 3B 01 75 08 95 01 B1 02 25 01 45 01 75 01 96 F0 01 B1 03 85 A9 09 4C 25 FF 46 3B 01 75 08 95 08 B1 02 25 01 45 01 75 01 96 B8 01 B1 03 85 AA 09 4E 25 FF 46 3B 01 75 08 95 01 B1 02 25 01 45 01 75 01 96 F0 01 B1 03 85 AB 09 4F 25 FF 46 3B 01 75 08 95 39 B1 02 25 01 45 01 75 01 95 30 B1 03 85 AC 09 50 25 FF 46 3B 01 75 08 95 39 B1 02 25 01 45 01 75 01 95 30 B1 03 85 AD 09 51 25 FF 46 3B 01 75 08 95 0B B1 02 25 01 45 01 75 01 96 A0 01 B1 03 85 AE 09 52 25 FF 46 3B 01 75 08 95 01 B1 02 25 01 45 01 75 01 96 F0 01 B1 03 85 AF 09 53 25 FF 46 3B 01 75 08 95 02 B1 02 25 01 45 01 75 01 96 E8 01 B1 03 85 B0 09 54 25 FF 46 3B 01 75 08 95 3F B1 02 85 B1 09 55 95 02 B1 02 25 01 45 01 75 01 96 E8 01 B1 03 85 B2 09 56 25 FF 46 3B 01 75 08 95 02 B1 02 25 01 45 01 75 01 96 E8 01 B1 03 85 B3 09 55 25 FF 46 3B 01 75 08 95 3F B1 02 85 B4 09 55 B1 02 C1 00 (1249 bytes)

todbot commented 1 year ago

It's not you, or this program. It's Windows.

It's impossible for userspace apps on Windows to get the actual HID Report Descriptor. This program is just a thin wrapper of the HidSharp library. You can download it and its test program to compare output.

The HidSharp library is actually being really clever, attempting to reconstruct the HID Report Descriptor from various Windows APIs. But it will never create a HID Report Descriptor that exactly matches what the device provides over the wire. For that you need either a USB Snooper, or use Linux or MacOS. The resultant HID Report Descriptors from HidSharp should be functionally identical to what the device provides, but they may be a lot more verbose because they specify defaults. The HID Report Description protocol can be quite complicated.

The hidapi library now includes a similar HID Report Descriptor reconstruction algorithm on Windows and it runs into similar problems. It's very frustrating.