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 ===== | ||
