Repository navigation
Releases
gp2040ce-hostlighting v1.0.0rc6
gp2040ce-hostlighting v1.0.0rc6
Released 6 November 2026. This is a release candidate of the Python library and tools for the GP2040-CE Host Lighting add-on, which lets host software drive a board's RGB LEDs live over a vendor HID interface. It speaks Host Lighting Protocol 2.0 as HLP v2.0-rc14 implements it.
Changes since v1.0.0rc5
HLP v2.0-rc14 describes every input mode and the board's boot holds. This release reads them:
- Page 2 records gain the capabilities, USB host and authentication, and device type groups, and
InputModeFlags.acceptedfor the modesSET_INPUT_MODEaccepts.method_valuesandsupported_valuesgive the authentication and device type bitmaps as values. - Page 3's names cover every enum the pages carry (
NAME_ENUMS0 to 9). - Page 4 decodes to
BootHoldRecord: the buttons or pins held at plug-in that boot an input mode, the web configurator or the UF2 bootloader. - Page 8's
Summary.usb_hostreads the new USB host flag. hlp-capsprints page 2's new fields and page 4, and names input modes from page 2. In an analog D-pad mode the tools note that a hold's Up is theDIGITAL_DIRECTION_UPcontrol.set_input_mode()andhlp-input-moderefuse a mode the board does not accept. For a mode without the lighting interface,hlp-input-modeprints the boot holds back to one with it, or to the web configurator, before it switches with--force.hlp-conformancechecks the new pages and flags, a page 3 name for every value the pages carry,SET_INPUT_MODE's refusals (with a wrong magic, so a board never reboots) and page reads past the last record. A board passes 223 checks with--settingsand 212 plain or exclusive when it allows keyboard mapping changes, and 214 and 206 when it does not.- A page from firmware that defines fewer of its groups, as before a later addition, reads with the groups it has.
- The fake and model boards model the new pages,
testing.summary_record()takesusb_host, and the test vectors were regenerated.
The specification copy in docs/ is HLP v2.0-rc14's.
Install
The hlp app needs no Python. Download the file for your system below:
| File | System |
|---|---|
hlp-windows-x64.exe |
Windows 10 and 11, x64, and Windows 11 on ARM through its x64 emulation |
hlp-macos-x64.zip |
macOS on Intel (x64), built on macOS 15 |
hlp-macos-arm64.zip |
macOS on Apple silicon (ARM64), built on macOS 15 |
hlp-linux-x64.tar.gz |
Linux x64, glibc 2.35 or later |
hlp-linux-arm64.tar.gz |
Linux ARM64, glibc 2.35 or later |
Opened from a file manager, the app picks the board and offers its commands from a menu; in a terminal, hlp COMMAND runs one directly. The apps are not signed: Windows SmartScreen may warn on the first run, and macOS asks you to allow the app in System Settings, Privacy & Security, the first time. On Linux, the README's udev rule gives the logged-in user access to the board.
The library and the hlp-* commands install with pip, on Python 3.14 or later:
pip install git+https://github.com/djGLiTCH/gp2040ce-hostlighting@v1.0.0rc6
Firmware
It needs a board running HLP v2.0-rc14, with the Host Lighting add-on enabled in the web configurator. HLP v2.0-rc13 and earlier have no page 4 and none of page 2's new fields, so this release shows their input modes as not accepted and set_input_mode() refuses them. Use v1.0.0rc5 with those builds.
The add-on is proposed to GP2040-CE in OpenStickCommunity/GP2040-CE#1691, where its review can be followed. Until it merges, test builds for every board are pre-releases on djGLiTCH/GP2040-CE.
What it contains
- The library: the protocol, the device and board discovery,
LightsClaim, frames for a streaming host,ConfigurationCache,Session(the specification's whole host flow),SessionRunnerandAsyncSessionfor a GUI or asyncio program,BoardWatcherandSessionGroupfor every board on the bus, the LED layout grid, and fake and model boards to test host software without a board. - The commands:
hlp-ping,hlp-caps,hlp-settings,hlp-watch,hlp-fill,hlp-set-light,hlp-stream,hlp-show,hlp-buttons,hlp-input-mode,hlp-reboot,hlp-conformance, which checks a board against the protocol, andhlp-bench. hlp, which runs each command as a subcommand, with its menu, and the hlp app built from it.- The test vectors (
tests/vectors/): exact request and reply reports, for hosts that test against a board model of their own. - Issue forms for bug reports, enhancement requests and documentation.
Hosts
- hlp-spice2x shows the cabinet lighting of games running under spice2x on a GP2040-CE controller's buttons, and is built on this library.
- MESH (Modern Emulator State Hub, not public yet) drives controller lighting from emulator game state. It implements the protocol itself, with this library as the reference for host behaviour.
Testing
| Where | Result |
|---|---|
| The library | Each commit passes its tests on Python 3.14 (501 at this release), mypy strict, REUSE, bandit and flake8 |
| Haute42|COSMOX M Ultra Gen 2 on HLP v2.0-rc14, keyboard mapping changes allowed | hlp-conformance --settings 223 of 223, --exclusive 212 of 212, the test vectors, page 2 and page 4 against the board's settings, a 90-second run with three applications sharing the board |
| Haute42|COSMOX on HLP v2.0-rc14, keyboard mapping changes off | hlp-conformance --quick 206 of 206, --settings 214 of 214, the test vectors for that setting, hlp-settings --keyboard-code refused |
| The release's Windows app on HLP v2.0-rc14 | On the M Ultra Gen 2, keyboard mapping changes allowed: ping, caps (and --page, with input-modes and boot-holds), settings, fill, set-light, buttons, watch, stream, show (600 of 600 frames on 46 lights), bench (round trip median 2.00 ms), conformance --quick (212 of 212) and conformance --settings (223 of 223), and input-mode 4 refused with the boot holds back shown. On the COSMOX, keyboard mapping changes off: ping, caps, conformance --quick (206 of 206) and --settings (214 of 214), settings --keyboard-code refused |
| macOS and Linux | Built and started by the Release workflow (--version, --help, --licences); not run on a board |
Licence
GPL-3.0-or-later. hlp --licences (or --licenses), or l in the app's menu, prints the licence and the notices of the libraries the app bundles; each archive also carries them as THIRD-PARTY-NOTICES.txt. The Linux apps take their libraries from Ubuntu 22.04's packages, and hlp-linux-x64-sources.tar.gz and hlp-linux-arm64-sources.tar.gz hold the exact source of those under a GPL-family licence.
gp2040ce-hostlighting v1.0.0rc5
gp2040ce-hostlighting v1.0.0rc5
Released 30 October 2026. This is a release candidate of the Python library and tools for the GP2040-CE Host Lighting add-on, which lets host software drive a board's RGB LEDs live over a vendor HID interface. It speaks Host Lighting Protocol 2.0 as HLP v2.0-rc12 implements it.
Changes since v1.0.0rc4
HLP v2.0-rc12 adds a web configurator setting, Allow hosts to change the keyboard mapping, off by default. While it is off, the board's HELLO does not list SET_KEYBOARD_MAPPING (0x34) and the board answers it with status 1. This release works with boards either way:
hlp-conformancetreats 0x34 as optional. Without it, a note says so, the checks that send it are skipped, and 0x34 must answer status 1, under another application's exclusive claim too. A board without it passes 183 checks quick or plain and 191 with--settings, and a board with it 189 and 200, as before.hlp-settings --keyboard-codeis refused, before anything is sent, on a board that does not allow it, andhlp-settingsmarks the codes read-only there.- The test vectors gain the setup codes
keyboard_mapping_changesandno_keyboard_mapping_changeson the keyboard vectors, and a new vector,keyboard_mapping_not_allowed. A replay runs those vectors only on a board that matches, and comparesHELLO's bit 0x34 only in them.tests/vectors/README.mdgives the format. - The fake and model boards list 0x34 by default, as the firmware does with the setting on. Taking
CMD_SET_KEYBOARD_MAPPINGout of a fake'scommandsgives the firmware's default.
The specification copy in docs/ describes the setting, as HLP v2.0-rc12's does. The specification copy says a keyboard mapping change applies only to the input profile active when it is made.
Install
The hlp app needs no Python. Download the file for your system below:
| File | System |
|---|---|
hlp-windows-x64.exe |
Windows 10 and 11, x64, and Windows 11 on ARM through its x64 emulation |
hlp-macos-x64.zip |
macOS on Intel (x64), built on macOS 15 |
hlp-macos-arm64.zip |
macOS on Apple silicon (ARM64), built on macOS 15 |
hlp-linux-x64.tar.gz |
Linux x64, glibc 2.35 or later |
hlp-linux-arm64.tar.gz |
Linux ARM64, glibc 2.35 or later |
Opened from a file manager, the app picks the board and offers its commands from a menu; in a terminal, hlp COMMAND runs one directly. The apps are not signed: Windows SmartScreen may warn on the first run, and macOS asks you to allow the app in System Settings, Privacy & Security, the first time. On Linux, the README's udev rule gives the logged-in user access to the board.
The library and the hlp-* commands install with pip, on Python 3.14 or later:
pip install git+https://github.com/djGLiTCH/gp2040ce-hostlighting@v1.0.0rc5
Firmware
It needs a board running HLP v2.0-rc12, with the Host Lighting add-on enabled in the web configurator. HLP v2.0-rc11 and rc10 work too, as boards that list 0x34. Earlier HLP 2.0 release candidates use other page layouts, and the library refuses their pages.
The add-on is proposed to GP2040-CE in OpenStickCommunity/GP2040-CE#1691, where its review can be followed. Until it merges, test builds for every board are pre-releases on djGLiTCH/GP2040-CE.
What it contains
- The library: the protocol, the device and board discovery,
LightsClaim, frames for a streaming host,ConfigurationCache,Session(the specification's whole host flow),SessionRunnerandAsyncSessionfor a GUI or asyncio program,BoardWatcherandSessionGroupfor every board on the bus, the LED layout grid, and fake and model boards to test host software without a board. - The commands:
hlp-ping,hlp-caps,hlp-settings,hlp-watch,hlp-fill,hlp-set-light,hlp-stream,hlp-show,hlp-buttons,hlp-input-mode,hlp-reboot,hlp-conformance, which checks a board against the protocol, andhlp-bench. hlp, which runs each command as a subcommand, with its menu, and the hlp app built from it.- The test vectors (
tests/vectors/): exact request and reply reports, for hosts that test against a board model of their own. - Issue forms for bug reports, enhancement requests and documentation.
Hosts
- hlp-spice2x shows the cabinet lighting of games running under spice2x on a GP2040-CE controller's buttons, and is built on this library.
- MESH (Modern Emulator State Hub, not public yet) drives controller lighting from emulator game state. It implements the protocol itself, with this library as the reference for host behaviour.
Testing
| Where | Result |
|---|---|
| The library | Each commit passes its tests on Python 3.14 (494 at this release), mypy strict, REUSE, bandit and flake8 |
| Haute42|COSMOX M Ultra Gen 2 on HLP v2.0-rc12, the setting on | hlp-conformance --settings 200 of 200, --exclusive 189 of 189, the test vectors, a 90-second run with three applications sharing the board |
| Haute42|COSMOX on HLP v2.0-rc12, the setting off | hlp-conformance --quick 183 of 183, the test vectors for that setting, hlp-settings --keyboard-code refused |
| The release's Windows app on HLP v2.0-rc12 | On the M Ultra Gen 2, the setting on: ping, caps (and --page), settings, fill, set-light, buttons, watch, stream, show (600 of 600 frames on 46 lights), bench, conformance --quick (189 of 189) and conformance --settings (200 of 200). On the COSMOX, the setting off: ping, caps, conformance --quick (183 of 183), settings --keyboard-code refused |
| macOS and Linux | Built and started by the Release workflow (--version, --help, --licences); not run on a board |
Licence
GPL-3.0-or-later. hlp --licences (or --licenses), or l in the app's menu, prints the licence and the notices of the libraries the app bundles; each archive also carries them as THIRD-PARTY-NOTICES.txt. The Linux apps take their libraries from Ubuntu 22.04's packages, and hlp-linux-x64-sources.tar.gz and hlp-linux-arm64-sources.tar.gz hold the exact source of those under a GPL-family licence.
gp2040ce-hostlighting v1.0.0rc4
gp2040ce-hostlighting v1.0.0rc4
Released 29 October 2026. This is a release candidate of the Python library and tools for the GP2040-CE Host Lighting add-on, which lets host software drive a board's RGB LEDs live over a vendor HID interface. It speaks Host Lighting Protocol 2.0 as HLP v2.0-rc11 implements it.
Changes since v1.0.0rc3
Page 1's group 1 is named Holder, as the specification now names it. No report byte changes, but code that uses these names needs the new ones:
| v1.0.0rc3 | v1.0.0rc4 |
|---|---|
Controller |
Holder |
StateRecord.controller |
StateRecord.holder |
CONTROLLER_SIZE |
HOLDER_SIZE |
decode_controller() |
decode_holder() |
Page 1's controller key in hlp-caps --json |
holder |
hlp-conformance's "Controller claim flags" check |
"Holder claim flags" |
The specification copy in docs/ lists the input modes in the Web Configurator's order, as HLP v2.0-rc11's does.
Install
The hlp app needs no Python. Download the file for your system below:
| File | System |
|---|---|
hlp-windows-x64.exe |
Windows 10 and 11, x64, and Windows 11 on ARM through its x64 emulation |
hlp-macos-x64.zip |
macOS on Intel (x64), built on macOS 15 |
hlp-macos-arm64.zip |
macOS on Apple silicon (ARM64), built on macOS 15 |
hlp-linux-x64.tar.gz |
Linux x64, glibc 2.35 or later |
hlp-linux-arm64.tar.gz |
Linux ARM64, glibc 2.35 or later |
Opened from a file manager, the app picks the board and offers its commands from a menu; in a terminal, hlp COMMAND runs one directly. The apps are not signed: Windows SmartScreen may warn on the first run, and macOS asks you to allow the app in System Settings, Privacy & Security, the first time. On Linux, the README's udev rule gives the logged-in user access to the board.
The library and the hlp-* commands install with pip, on Python 3.14 or later:
pip install git+https://github.com/djGLiTCH/gp2040ce-hostlighting@v1.0.0rc4
Firmware
It needs a board running HLP v2.0-rc11, with the Host Lighting add-on enabled in the web configurator. HLP v2.0-rc10 works too, as no report byte changed. Earlier HLP 2.0 release candidates use other page layouts, and the library refuses their pages.
The add-on is proposed to GP2040-CE in OpenStickCommunity/GP2040-CE#1691, where its review can be followed. Until it merges, test builds for every board are pre-releases on djGLiTCH/GP2040-CE.
What it contains
- The library: the protocol, the device and board discovery,
LightsClaim, frames for a streaming host,ConfigurationCache,Session(the specification's whole host flow),SessionRunnerandAsyncSessionfor a GUI or asyncio program,BoardWatcherandSessionGroupfor every board on the bus, the LED layout grid, and fake and model boards to test host software without a board. - The commands:
hlp-ping,hlp-caps,hlp-settings,hlp-watch,hlp-fill,hlp-set-light,hlp-stream,hlp-show,hlp-buttons,hlp-input-mode,hlp-reboot,hlp-conformance, which checks a board against the protocol, andhlp-bench. hlp, which runs each command as a subcommand, with its menu, and the hlp app built from it.hlp-show: a light show across the buttons, case, player and turbo lights, as a visual test.hlp-caps --page: one or more pages alone, by name or number, such as the controls with their GPIO pins or Hall-effect triggers, the keyboard mapping or the lights.- Progress as each step starts: the commands say when they take the lights and when each timed step begins, and the menu shows the command line it runs.
- The test vectors (
tests/vectors/): exact request and reply reports, for hosts that test against a board model of their own. - Issue forms for bug reports, enhancement requests and documentation.
Hosts
- hlp-spice2x shows the cabinet lighting of games running under spice2x on a GP2040-CE controller's buttons, and is built on this library.
- MESH (Modern Emulator State Hub, not public yet) drives controller lighting from emulator game state. It implements the protocol itself, with this library as the reference for host behaviour.
Testing
| Where | Result |
|---|---|
| The library | Each commit passes its tests on Python 3.14 (487 at this release), mypy strict, REUSE, bandit and flake8 |
| Haute42|COSMOX M Ultra Gen 2 on HLP v2.0-rc11 | Windows app: ping, caps (and --page), settings, fill, set-light, buttons, watch, stream, show (600 of 600 frames on 46 lights), bench, conformance --quick (189 of 189) and conformance --settings (200 of 200) |
| macOS and Linux | Built and started by the Release workflow (--version, --help, --licences); not run on a board |
Licence
GPL-3.0-or-later. hlp --licences (or --licenses), or l in the app's menu, prints the licence and the notices of the libraries the app bundles; each archive also carries them as THIRD-PARTY-NOTICES.txt. The Linux apps take their libraries from Ubuntu 22.04's packages, and hlp-linux-x64-sources.tar.gz and hlp-linux-arm64-sources.tar.gz hold the exact source of those under a GPL-family licence.
gp2040ce-hostlighting v1.0.0rc3
gp2040ce-hostlighting v1.0.0rc3
Released 29 October 2026. This is a release candidate of the Python library and tools for the GP2040-CE Host Lighting add-on, which lets host software drive a board's RGB LEDs live over a vendor HID interface. It speaks Host Lighting Protocol 2.0 as HLP v2.0-rc10 implements it.
Install
The hlp app needs no Python. Download the file for your system below:
| File | System |
|---|---|
hlp-windows-x64.exe |
Windows 10 and 11, x64, and Windows 11 on ARM through its x64 emulation |
hlp-macos-x64.zip |
macOS on Intel (x64), built on macOS 15 |
hlp-macos-arm64.zip |
macOS on Apple silicon (ARM64), built on macOS 15 |
hlp-linux-x64.tar.gz |
Linux x64, glibc 2.35 or later |
hlp-linux-arm64.tar.gz |
Linux ARM64, glibc 2.35 or later |
Opened from a file manager, the app picks the board and offers its commands from a menu; in a terminal, hlp COMMAND runs one directly. The apps are not signed: Windows SmartScreen may warn on the first run, and macOS asks you to allow the app in System Settings, Privacy & Security, the first time. On Linux, the README's udev rule gives the logged-in user access to the board.
The library and the hlp-* commands install with pip, on Python 3.14 or later:
pip install git+https://github.com/djGLiTCH/gp2040ce-hostlighting@v1.0.0rc3
Firmware
It needs a board running HLP v2.0-rc10, with the Host Lighting add-on enabled in the web configurator. Earlier HLP 2.0 release candidates use other page layouts, and the library refuses their pages.
The add-on is proposed to GP2040-CE in OpenStickCommunity/GP2040-CE#1691, where its review can be followed. Until it merges, test builds for every board are pre-releases on djGLiTCH/GP2040-CE.
What it contains
- The library: the protocol, the device and board discovery,
LightsClaim, frames for a streaming host,ConfigurationCache,Session(the specification's whole host flow),SessionRunnerandAsyncSessionfor a GUI or asyncio program,BoardWatcherandSessionGroupfor every board on the bus, the LED layout grid, and fake and model boards to test host software without a board. - The commands:
hlp-ping,hlp-caps,hlp-settings,hlp-watch,hlp-fill,hlp-set-light,hlp-stream,hlp-show,hlp-buttons,hlp-input-mode,hlp-reboot,hlp-conformance, which checks a board against the protocol, andhlp-bench. hlp, which runs each command as a subcommand, with its menu, and the hlp app built from it.hlp-show: a light show across the buttons, case, player and turbo lights, as a visual test.hlp-caps --page: one or more pages alone, by name or number, such as the controls with their GPIO pins or Hall-effect triggers, the keyboard mapping or the lights.- Progress as each step starts: the commands say when they take the lights and when each timed step begins, and the menu shows the command line it runs.
- The test vectors (
tests/vectors/): exact request and reply reports, for hosts that test against a board model of their own. - Issue forms for bug reports, enhancement requests and documentation.
Hosts
- hlp-spice2x shows the cabinet lighting of games running under spice2x on a GP2040-CE controller's buttons, and is built on this library.
- MESH (Modern Emulator State Hub, not public yet) drives controller lighting from emulator game state. It implements the protocol itself, with this library as the reference for host behaviour.
Testing
| Where | Result |
|---|---|
| The library | Each commit passes its tests on Python 3.14 (487 at this release), mypy strict, REUSE, bandit and flake8 |
| Haute42|COSMOX M Ultra Gen 2 on HLP v2.0-rc10 | Windows app: ping, caps (and --page), settings, fill, set-light, buttons, watch, stream, show (600 of 600 frames on 46 lights), bench, conformance --quick (189 of 189) and conformance --settings (200 of 200) |
| macOS and Linux | Built and started by the Release workflow (--version, --help, --licences); not run on a board |
Licence
GPL-3.0-or-later. hlp --licences (or --licenses), or l in the app's menu, prints the licence and the notices of the libraries the app bundles; each archive also carries them as THIRD-PARTY-NOTICES.txt. The Linux apps take their libraries from Ubuntu 22.04's packages, and hlp-linux-x64-sources.tar.gz and hlp-linux-arm64-sources.tar.gz hold the exact source of those under a GPL-family licence.