|
|
@@ -193,12 +193,28 @@ a hex triple.
|
|
|
## Effect Names Are Per Board
|
|
|
|
|
|
The keyboard holds effect numbers, not names, so `effect <name>` needs a catalog
|
|
|
-and the tool has one for the Impact 80. Its 46 backlight names are QMK's
|
|
|
-`rgb_matrix_effects.inc` in order, verified against the keyboard's register; the
|
|
|
-7 `logo` and 7 `side` names are that board's vendor VIA definition, whose
|
|
|
+and the tool has one for the Impact 80. Its 46 backlight names are the QMK
|
|
|
+`rgb_matrix_effects.inc` of the VIA era, transcribed from that board's vendor VIA
|
|
|
+definition, and the 7 `logo` and 7 `side` names are that same definition, whose
|
|
|
dropdowns read `fixed wave` and `breathe`; the compatibility aliases are the
|
|
|
tool's own.
|
|
|
|
|
|
+`effect` writes the ID and reads the register back, because a board can refuse
|
|
|
+one. All 46 backlight IDs are taken, and so are the `logo` and `side` IDs from 1
|
|
|
+to 6. ID 0 is not: on those two channels the firmware reads it as "lighting
|
|
|
+off" and leaves the mode register where it was, so `effect none --zone logo`
|
|
|
+leaves the previous effect running and says so.
|
|
|
+
|
|
|
+```
|
|
|
+$ qmk-rgb-tool effect none --zone logo
|
|
|
+Effect logo "wave" (1) (requested "none" (0))
|
|
|
+```
|
|
|
+
|
|
|
+The read-back proves an ID is one the keyboard takes, not that the name labels
|
|
|
+it correctly; the names come from the vendor definition. The board takes 47 IDs
|
|
|
+on the backlight channel, 0 to 46, of which this catalog names 46 — ID 46 exists,
|
|
|
+is reported as `unknown`, and is set with `mode 46`.
|
|
|
+
|
|
|
A keyboard without a catalog is still driven: `brightness`, `speed`, `color`,
|
|
|
`mode <index>` and `info` all work, because none of them needs a name. Four
|
|
|
commands need the catalog and say so rather than guessing:
|
|
|
@@ -279,7 +295,7 @@ failure, but the summary line always states the value that was actually applied.
|
|
|
- **Cross-platform** — Linux, macOS, Windows via [hidapi](https://github.com/libusb/hidapi)
|
|
|
- **Channel-aware effects** — per-channel effect control with per-board effect catalogs, so a board without one is still driven
|
|
|
- **Profile system** — save, load, list, and delete RGB presets as JSON files in `profiles/`
|
|
|
-- **46 backlight effects** — complete Impact 80 effect family mapped to zone-aware effect names
|
|
|
+- **46 backlight effect names** — the Impact 80's VIA-era QMK family, mapped to zone-aware names; the board takes 47 IDs, the highest has no name
|
|
|
- **Compatibility aliases** — `off`, `breathe`, `rainbow`, `rainbow_wave`, `solid`, `static` resolve to correct effect IDs per channel
|
|
|
- **Reactive & splash effects** — honor `color` and `speed` for key-press illumination
|
|
|
- **Machine-parseable output** — JSON for `keyboard info`, `info`, `list`, and `effect --list`
|
|
|
@@ -365,14 +381,22 @@ for Logo/Side and `rainbow_moving_chevron` for Backlight, `rainbow_wave` →
|
|
|
for Backlight. The legacy `static` alias remains accepted as a compatibility
|
|
|
alias for `solid`.
|
|
|
|
|
|
-The effect catalog is consistent with the QMK RGB Matrix firmware. The
|
|
|
-keyboard implements the VIA protocol (version 3) and its 46 backlight effect
|
|
|
-names match the QMK RGB Matrix effect catalog exactly — verified through live
|
|
|
-testing. The animations are defined in
|
|
|
+The effect catalog follows the QMK RGB Matrix firmware of the VIA era, not
|
|
|
+current QMK master: the two lists differ in length, in naming and in numbering
|
|
|
+(`alpha_mods` against `alphas_mods`, `colorband_sat` against `band_sat`, and
|
|
|
+`pixel_fractal`, `typing_heatmap` and `starlight_smooth` among the names QMK has
|
|
|
+since added), so the catalog must not be repaired against upstream. The
|
|
|
+keyboard implements the VIA protocol (version 3). The animations are defined in
|
|
|
[QMK `rgb_matrix/animations/`](https://github.com/qmk/qmk_firmware/tree/master/quantum/rgb_matrix/animations),
|
|
|
where each effect has its own header file (e.g.
|
|
|
`digital_rain_anim.h`, `solid_reactive_anim.h`, `riverflow_anim.h`).
|
|
|
|
|
|
+Its other two channels are not QMK's at all. QMK's lightweight `rgblight`
|
|
|
+subsystem has about 49 modes named `STATIC_LIGHT`, `RAINBOW_MOOD`, `SNAKE`,
|
|
|
+`KNIGHT`, `CHRISTMAS` and `TWINKLE`, and shares no name with the seven the Impact
|
|
|
+80 offers on `logo` and `side`. A per-subsystem catalog taken from QMK would
|
|
|
+therefore be wrong for those channels.
|
|
|
+
|
|
|
ID 39 is `multisplash`; ID 41 is the distinct `solid_multisplash` name.
|
|
|
|
|
|
`info` reports a `zones` array with each zone's channel, enabled state,
|
|
|
@@ -463,6 +487,36 @@ Two models are listed in `keyboards.json`:
|
|
|
| Wobkey Rainy 75 | 0x6666 | 0x0001 |
|
|
|
| Wobkey Impact 80 | 0x36B0 | 0x309F |
|
|
|
|
|
|
+### Impact 80 Sources
|
|
|
+
|
|
|
+The vendor's
|
|
|
+[Driver & Firmware page](https://wiki.wobkey.com/en/Products/PMOKEY-Impact-80/Driver-Firmware)
|
|
|
+is where the effect catalog in `internal/rgb/impact80.go` comes from. It is the
|
|
|
+authority on the wire format, and it settles two things this tool cannot:
|
|
|
+
|
|
|
+- The board must be in **wired mode** for VIA to see it. On 2.4G or Bluetooth
|
|
|
+ the keyboard is not detected at all, so a tool that finds no keyboard is
|
|
|
+ consistent with the hardware being on wireless. Changes made in wired mode are
|
|
|
+ saved to onboard memory and still apply in wireless mode.
|
|
|
+- The vendor ships **two firmware variants**. The VIA variant is what this tool
|
|
|
+ drives. The proprietary variant offers the advanced lighting (music rhythm,
|
|
|
+ SyncLight) but **disables VIA**, so a board flashed with it exposes no QMK Raw
|
|
|
+ HID interface and is invisible to the tool, not unsupported by it. The audio
|
|
|
+ channel this board reports as `side` is where that lighting lives.
|
|
|
+
|
|
|
+The page links the sources used here directly:
|
|
|
+
|
|
|
+| What | Where |
|
|
|
+|------|-------|
|
|
|
+| VIA definition JSON, the origin of all three effect lists | [`Impact_80.JSON`](https://drive.wobkey.com/f/d/6BtO/Impact_80.JSON) |
|
|
|
+| VIA firmware image | [`impact_80.bin`](https://drive.wobkey.com/f/d/9yH8/impact_80.bin) |
|
|
|
+| Update instructions, vendor's warning against updating a working board | [Driver & Firmware page](https://wiki.wobkey.com/en/Products/PMOKEY-Impact-80/Driver-Firmware) |
|
|
|
+
|
|
|
+Stock VIA exposes no way to ask a keyboard which effect IDs it implements, so
|
|
|
+the names come from that JSON and not from the board. The counts the board
|
|
|
+actually takes were measured here: 47 on the backlight channel, 6 on `logo` and
|
|
|
+`side`.
|
|
|
+
|
|
|
## CLI Reference
|
|
|
|
|
|
| Command | Description |
|
|
|
@@ -471,7 +525,7 @@ Two models are listed in `keyboards.json`:
|
|
|
| `qmk-rgb-tool enable` | Enable selected lighting zones |
|
|
|
| `qmk-rgb-tool disable` | Disable selected lighting zones |
|
|
|
| `qmk-rgb-tool info` | Show per-zone RGB state (JSON) |
|
|
|
-| `qmk-rgb-tool effect <name>` | Set a zone-aware effect by name |
|
|
|
+| `qmk-rgb-tool effect <name>` | Set a zone-aware effect by name, verified by read-back |
|
|
|
| `qmk-rgb-tool effect` | With no argument, list every effect per channel (JSON) |
|
|
|
| `qmk-rgb-tool effect --list` | The same list, as a flag |
|
|
|
| `qmk-rgb-tool brightness <val>` | Set brightness (0–255) on selected zones, verified by read-back |
|
|
|
@@ -479,7 +533,7 @@ Two models are listed in `keyboards.json`:
|
|
|
| `qmk-rgb-tool color <hex>` | Set color (e.g. `ff0000`) on selected zones |
|
|
|
| `qmk-rgb-tool color rgb:<hex>` | The same hex color, written out |
|
|
|
| `qmk-rgb-tool color hsv:<h>,<s>,<v>` | Set hue and saturation (0–255) and write `v` to the brightness of the same zones |
|
|
|
-| `qmk-rgb-tool mode <index>` | Set a raw zone-specific effect ID |
|
|
|
+| `qmk-rgb-tool mode <index>` | Set a raw zone-specific effect ID, verified by read-back; a board that does not implement the index clamps it to the highest it does |
|
|
|
| `qmk-rgb-tool --zone <channel> ...` | Target one channel: `backlight`, `rgblight`, `rgb_matrix`, `audio` or `led_matrix`, or a name from `keyboards.json` |
|
|
|
| `qmk-rgb-tool --device <n> ...` | Target keyboard by number (see `keyboard info`) |
|
|
|
| `qmk-rgb-tool -v`, `--version` | Print the version |
|