|
@@ -61,7 +61,7 @@ re-run the command whenever commands or flags change.
|
|
|
# Discover connected keyboards
|
|
# Discover connected keyboards
|
|
|
./qmk-rgb-tool keyboard info
|
|
./qmk-rgb-tool keyboard info
|
|
|
|
|
|
|
|
-# RGB commands target Logo, Backlight, and Side by default
|
|
|
|
|
|
|
+# RGB commands target every channel the keyboard reports, in channel order
|
|
|
./qmk-rgb-tool effect breathing
|
|
./qmk-rgb-tool effect breathing
|
|
|
./qmk-rgb-tool effect rainbow_moving_chevron
|
|
./qmk-rgb-tool effect rainbow_moving_chevron
|
|
|
./qmk-rgb-tool effect rainbow_moving_chevron --zone backlight
|
|
./qmk-rgb-tool effect rainbow_moving_chevron --zone backlight
|
|
@@ -108,7 +108,24 @@ The keyboard is asked which channels it has: one read per channel, and a channel
|
|
|
its firmware does not implement answers as unhandled. `keyboard info` does not
|
|
its firmware does not implement answers as unhandled. `keyboard info` does not
|
|
|
report them, because it never opens the keyboard.
|
|
report them, because it never opens the keyboard.
|
|
|
|
|
|
|
|
-All output is machine-parseable JSON when applicable.
|
|
|
|
|
|
|
+All output is machine-parseable JSON when applicable. The shapes an agent parses:
|
|
|
|
|
+
|
|
|
|
|
+```jsonc
|
|
|
|
|
+// info
|
|
|
|
|
+{"enabled": true, "mode": "fixed_wave", "brightness": 10, "speed": 0,
|
|
|
|
|
+ "zones": [{"zone": "logo", "channel": 2, "enabled": true, "effect": "fixed_wave",
|
|
|
|
|
+ "effectId": 2, "brightness": 10, "speed": 0,
|
|
|
|
|
+ "color": {"hue": 0, "saturation": 255}, "error": "only on a channel that failed"}]}
|
|
|
|
|
+
|
|
|
|
|
+// effect --list
|
|
|
|
|
+{"catalog": "impact80",
|
|
|
|
|
+ "zones": [{"zone": "logo", "channel": 2, "subsystem": "rgblight",
|
|
|
|
|
+ "effect": "none", "id": 0}]}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+`effect --list` reports `"catalog": ""` and an empty `zones` array for a board
|
|
|
|
|
+that has no catalog, and it reads the keyboard to learn which channels to list.
|
|
|
|
|
+`info` prints the JSON and then exits non-zero if a channel could not be read.
|
|
|
|
|
|
|
|
## Selecting a Keyboard
|
|
## Selecting a Keyboard
|
|
|
`keyboard info` numbers every connected QMK keyboard starting at 1, and
|
|
`keyboard info` numbers every connected QMK keyboard starting at 1, and
|
|
@@ -225,7 +242,7 @@ failure, but the summary line always states the value that was actually applied.
|
|
|
## Features
|
|
## Features
|
|
|
|
|
|
|
|
- **Cross-platform** — Linux, macOS, Windows via [hidapi](https://github.com/libusb/hidapi)
|
|
- **Cross-platform** — Linux, macOS, Windows via [hidapi](https://github.com/libusb/hidapi)
|
|
|
-- **Zone-aware effects** — per-zone effect control (Logo, Backlight, Side) with zone-specific effect catalogs
|
|
|
|
|
|
|
+- **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/`
|
|
- **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 effects** — complete Impact 80 effect family mapped to zone-aware effect names
|
|
|
- **Compatibility aliases** — `off`, `breathe`, `rainbow`, `solid`, `static` resolve to correct effect IDs per zone
|
|
- **Compatibility aliases** — `off`, `breathe`, `rainbow`, `solid`, `static` resolve to correct effect IDs per zone
|
|
@@ -236,12 +253,16 @@ failure, but the summary line always states the value that was actually applied.
|
|
|
|
|
|
|
|
## Impact 80 Zones and Effects
|
|
## Impact 80 Zones and Effects
|
|
|
|
|
|
|
|
-| Zone | CLI name | VIA channel | Effect IDs |
|
|
|
|
|
|
|
+| Zone on the Impact 80 | CLI name | VIA channel | Effect IDs |
|
|
|
|---|---|---:|---|
|
|
|---|---|---:|---|
|
|
|
| Logo | `logo` | 2 | 0–6 |
|
|
| Logo | `logo` | 2 | 0–6 |
|
|
|
| Backlight | `backlight` | 3 | 0–45 |
|
|
| Backlight | `backlight` | 3 | 0–45 |
|
|
|
| Side | `side` | 4 | 0–6 |
|
|
| Side | `side` | 4 | 0–6 |
|
|
|
|
|
|
|
|
|
|
+Those three display names live in `keyboards.json`; the QMK subsystem names for
|
|
|
|
|
+the same channels are `rgblight`, `rgb_matrix` and `audio`, and both spellings
|
|
|
|
|
+work on this board.
|
|
|
|
|
+
|
|
|
Logo and Side share this complete effect family:
|
|
Logo and Side share this complete effect family:
|
|
|
|
|
|
|
|
| ID | Name |
|
|
| ID | Name |
|
|
@@ -383,11 +404,12 @@ Any keyboard running QMK with the RGB Matrix subsystem and VIA support is
|
|
|
detected automatically via the QMK Raw HID signature (Usage Page 0xFF60,
|
|
detected automatically via the QMK Raw HID signature (Usage Page 0xFF60,
|
|
|
Usage 0x61). No manual configuration required.
|
|
Usage 0x61). No manual configuration required.
|
|
|
|
|
|
|
|
-`keyboards.json` is optional. When present it only supplies friendly names:
|
|
|
|
|
-`keyboard info` reports `"known": true` for models listed there and
|
|
|
|
|
-`"known": false` for every other QMK keyboard. Both are fully controllable —
|
|
|
|
|
-`known` describes the name lookup, not compatibility. Deleting or corrupting
|
|
|
|
|
-the file costs you names only.
|
|
|
|
|
|
|
+`keyboards.json` is optional. When present it supplies a name for the model and,
|
|
|
|
|
+per entry, a display name per channel: `keyboard info` reports `"known": true`
|
|
|
|
|
+for models listed there and `"known": false` for every other QMK keyboard. Both
|
|
|
|
|
+are fully controllable — `known` describes the name lookup, not compatibility.
|
|
|
|
|
+Deleting or corrupting the file costs names only: the channel vocabulary
|
|
|
|
|
+survives, because the QMK subsystem name follows from the channel number.
|
|
|
|
|
|
|
|
Two models are listed in `keyboards.json`:
|
|
Two models are listed in `keyboards.json`:
|
|
|
|
|
|