bInterfaceNumber is expected to return the `%02x` format according to
the current kernel sources. Even if that is not true, a user can always
manually specify the hidraw device if the wrong device is detected.
Caught by UndefinedBehaviorSanitizer (UBSan):
ltunify.c:785:32: runtime error: load of misaligned address
0x7ffc0e4c38a5 for type 'uint32_t' (aka 'unsigned int'), which
requires 4 byte alignment
Fix "Unknown protocol 0x0a in devcon notif" errors when trying to list
or pair new devices connected to the Nano receiver with device ID c534.
This receiver is limited to 2 devices only and does not allow unpairing.
Update the hidraw autodetection since the first detected hidraw device
is wrong. Check the interface number, similar to Solaar, this avoids
more complicated HID descriptor parsing.
To confirm whether a device supports the HID++ protocol, either use
`sudo lsusb -v046d:` (without a kernel driver bound to it) or use
hidrd-convert -o spec /sys/class/hidraw/hidrawX/device/report_descriptor output.txt
to find a Vendor-Specific page.
When a touchpad event occurs while the device is being queried (e.g.
for features), then do_io (for do_read) would fail because the report
was not of the correct type (0x20 vs 0x11 for example). To fix this,
make do_read retry reads (within the allowed timeout).
Previously the expected report type was hidden in the msg parameter,
make this expected report type more explicit now in a new parameter.
This reverts commit 98f9432088. This was a
lazy trick from me to allow adding `-fsanitize=address` easier, but
apparantly not all users are so happy with it.
Conflicts:
Makefile
Fixes the warning messages below:
$ ltunify unpair 2
Unexpected disconnection type 0000
Device 0x02 Touchpad successfully unpaired
$ ltunify pair
Please turn your wireless device off and on to start pairing.
Found new device, id=0x02 Touchpad
Dev conn notif is expected to be short, got 0x20 instead
Dev conn notif is expected to be short, got 0x20 instead
Dev conn notif is expected to be short, got 0x20 instead
Dev conn notif is expected to be short, got 0x20 instead
Dev conn notif is expected to be short, got 0x20 instead
- Add second official Unifying receiver (mentioned in from hid-logitech-dj.c)
and "Unifying Ready" Nano receiver (mentioned in Solaar).
- Introduce an extra label for easier extension.
- Remove world-writable suggestion, no reason to do so with uaccess.
Use basename instead of memcmp with some calculations. Move the hiddraw device
matching outside a block in preparation for adding multiple match conditions.
In case a message does not get a response (user pulled out the receiver,
thunder hit the device, coke has fallen on a keyboard, etc.), do not wait
`for(;;)`. (2 seconds because accessing registers may be slow)