Skip to content

x20ctl 0.2.1

Choose a tag to compare

@AmjadAAYD AmjadAAYD released this 11 Aug 21:17
· 61 commits to main since this release
Immutable release. Only release title and notes can be modified.

Small update on top of 0.2.0, and the repo is public now so other people can
try it.

This is a test phase. I built this against one controller, mine. It works on
that pad. I don't know yet whether it works on anyone else's. If you have an X20
and you try it, tell me what happens either way.

It never touches firmware. Anything it changes is undone by holding C for five
seconds, which is a factory reset.

Added

  • An intro animation. The logo and name fly in, hold, then leave to the left
    before the interface shows. Click, press a key, or set X20CTL_NO_SPLASH=1 to
    skip it.
  • A security policy, and three ways to check the executable: the published
    SHA-256 below, scanning it yourself, or skipping the binary and running from
    source.
  • tools/macro_from_video.py, which turns a stick movement in a
    gamepad-overlay video into a macro.
  • Tests run on push, on 3.10 and 3.12, on Windows runners.

Changed

  • Says it's Windows only, and why. The input tester uses XInput directly,
    save files go to %APPDATA%, and the taskbar icon needs a Windows call. The
    protocol layer itself is pure computation and bleak covers Linux and macOS, so
    a port would mostly mean replacing the XInput reader.
  • Wrote down what the macro format can't do, measured against a real game
    rather than guessed. Sticks store eight compass headings at full deflection
    and nothing else, so a macro can say "up" or "up-right" but nothing between
    them, and it can't say "half right". There's one partial workaround, and a
    note on where it stops working. See
    docs/01-protocol.md.

Fixed

  • Closing the window during transport detection crashed a background thread.
    Detection runs off the GUI thread and takes a moment. If the window went away
    first, emitting the result raised "Signal source has been deleted" somewhere
    nothing could catch it.

Install

Download x20ctl.exe below. It needs no Python. Save files live in
%APPDATA%\x20ctl\profiles and survive replacing the executable.

Settings travel over Bluetooth, so Bluetooth needs to be on to change anything
even if you play wired or on the receiver. Playing is unaffected, and the input
tester works without it.

From source:

pip install -e ".[gui]"

Checking the download

SHA-256  0593a3251b19f8d2cd0376456dcb691adaa7eac8c9f7d23edf6a472cb7913cb4
size     51,915,231 bytes
Get-FileHash .\x20ctl.exe -Algorithm SHA256

If it doesn't match, don't run it and tell me.

Your antivirus may flag it. It's a one-file PyInstaller build, which bundles a
Python interpreter and unpacks itself to a temp folder on startup, and several
engines treat that as suspicious on its own. It's also unsigned because I don't
have a code signing certificate. Check the hash or build from source if you'd
rather not trust the binary. There's no network code in it at all.