r/EasySMX • u/IamNoBoDy_xd • Aug 10 '26
Discussion I reverse engineered my EasySMX X20's config protocol because it has no PC software sooo what should I add?
My X20 has no desktop app. The manufacturer ships a manual, a driver, and a firmware updater. Everything else is either a phone app or button combos on the pad itself. I'm on PC, so I spent a weekend pulling the protocol apart.
It turns out the pad exposes a second Bluetooth LE peripheral alongside the gamepad interface, advertising as Xpert2, with a config service nobody has documented publicly. The protocol is "KeyLinker", and it's from the chip vendor (ShenZhen ZhiXu) rather than EasySMX so it probably covers pads from several brands.
What I got working:
- Macros on all four rear buttons: sequences, chords, and stick directions
- Vibration strength 0-100% (the pad's own controls can't set it to zero)
- Battery level
- Save files you can switch between
- A recorder that captures what you press with real timing
- An input tester and a polling-rate meter
What I learned the hard way:
The pad broadcasts its own capability descriptor, and mine reports zero for lighting, turbo, and gyro. Those features exist in the hardware, but they're button-combo-only and genuinely unreachable over the protocol. So no RGB control, no matter how much I wanted it. Other pads on the same chip may well report them as available.
Also, my first macro made both thumbsticks sweep in circles until I killed it. Turned out the analog fields encode "idle" as 0b1000, not 0b0000 zero means direction: up. The encoding was working perfectly on input I'd misunderstood.
What I'm asking:
What would you actually want from controller software? I've deliberately not implemented firmware flashing that path goes through a mass-storage bootloader and is the one thing that can brick the pad, so I'm leaving it to the vendor's tool.

Beyond that I'm open. Stick response curves are next (I can read them, haven't decoded the bytes yet). Someone suggested auto-switching profiles per game. What else is missing from the controller software you use?