Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
notes:hw:xencelabs-quickkeys [2023/04/24 18:20] – maff | notes:hw:xencelabs-quickkeys [2023/06/26 14:17] (current) – maff | ||
---|---|---|---|
Line 86: | Line 86: | ||
The FCC-published information about this device indicates that yes - this is simply bluetooth/ | The FCC-published information about this device indicates that yes - this is simply bluetooth/ | ||
+ | |||
+ | Diagnostic information in the software reports the dongle' | ||
+ | |||
+ | ===== Linux Drivers ===== | ||
+ | |||
+ | Somehow never occurred to me that the linux driver package might shed more light on how the software and hardware interact. | ||
+ | |||
+ | The Linux download contains packages for RPM and dpkg-based distros, as well as a tarball with installation scripts - the most obvious point for examination. It contains normal XDG stuff for startup, application registration and so on, but also contains udev rules: | ||
+ | |||
+ | <code text 10-xencelabs.rules> | ||
+ | KERNEL==" | ||
+ | SUBSYSTEMS==" | ||
+ | </ | ||
+ | |||
+ | It also contains the actual software and a set of Qt5 libraries. The application itself is invoked via a script which exports LD_LIBRARY_PATH beforehand. | ||
+ | |||
+ | The application binary is (predictably) a dynamically-linked ELF built for amd64. | ||
===== Plans ===== | ===== Plans ===== | ||
Line 108: | Line 125: | ||
* Checks for updates to itself by calling '' | * Checks for updates to itself by calling '' | ||
* Checks for firmware updates by calling '' | * Checks for firmware updates by calling '' | ||
+ | |||
+ | ===== Notes during reverse-engineering ===== | ||
+ | |||
+ | Both the dongle and the direct USB connection expose a USB Usage with page FF0Ah | ||
+ | |||
+ | Not 100% on packet/HID report format, but.. | ||
+ | |||
+ | * All writes are 32-byte packets | ||
+ | * Bytes 10-15 inclusive are the MAC address of the device, or zeroes if connected via USB instead of the dongle | ||
+ | * Byte 0 is always 0x02 - this is the endpoint I think | ||
+ | * Data is only sent from the device once it has been subscribed to: | ||
+ | * 02b410 - Subscribes to battery change events | ||
+ | * 02b004 - Subscribes to button press and wheel events | ||
+ | * 02b801 - Subscribes to dongle connection events | ||
+ | |||
+ | Commands/ | ||
+ | |||
+ | * 02b40801& | ||
+ | * 02b4040101& | ||
+ | * 02b10a01& | ||
+ | * 02b1&0 - Set the display rotation (0 = 0º, 3 = 270º) | ||
+ | * 02b40101& | ||
+ | * 02b100& | ||
+ | * 02b1& | ||
===== Links ===== | ===== Links ===== |