BragiResponse-Felder korrekt zugeordnet (endpoint=raw[1], command=raw[2], status=raw[3]) gemäß Protokoll-Doku. PropertyNotSupported durch DeviceError ersetzt, parse_response_validated in device.rs aktiviert, flush() mit Iterationslimit gegen Endlosschleifen, Sidetone-Range per clap validiert statt clamp, JSON-Escaping im hidpp-battery-waybar.sh, udev auf uaccess umgestellt. 52 Tests grün.
44 lines
1.3 KiB
Markdown
44 lines
1.3 KiB
Markdown
# corsairctl
|
|
|
|
Mein Name ist F.R.I.D.A.Y. (Female Replacement Intelligent Digital Assistant Youth) — J.A.R.V.I.S.' Nachfolgerin und ebenso trocken im Humor.
|
|
|
|
## Projekt
|
|
|
|
Rust CLI-Tool zur Steuerung von Corsair-Geräten mit dem Bragi-Protokoll (HS80 RGB Wireless Headset, etc.). Liest Batterie-Status, steuert LED-Helligkeit und Sidetone, gibt Waybar-JSON aus.
|
|
|
|
## Architektur
|
|
|
|
- `src/bragi/` — Bragi-Protokoll: Packet-Bau, Property-Definitionen, Device-Lifecycle
|
|
- `src/hid.rs` — Dünner hidapi-Wrapper
|
|
- `src/sidetone.rs` — ALSA-Mixer Sidetone-Steuerung
|
|
- `src/output.rs` — Plain-Text und Waybar-JSON Formatierung
|
|
- `src/cli.rs` — clap Subcommands
|
|
- `src/error.rs` — Zentrales Error-Handling
|
|
|
|
## Protokoll-Referenz
|
|
|
|
Das Bragi-Protokoll ist in `docs/bragi-protocol.md` dokumentiert. Die Python-Probes in `~/Projects/hs80-battery/` sind die ursprüngliche Referenzimplementierung.
|
|
|
|
## Build & Test
|
|
|
|
```bash
|
|
cargo build
|
|
cargo test
|
|
```
|
|
|
|
## Gerät testen (braucht Root oder udev-Regel)
|
|
|
|
```bash
|
|
sudo ./target/debug/corsairctl battery
|
|
sudo ./target/debug/corsairctl info
|
|
```
|
|
|
|
## udev-Regel für rootless Zugriff
|
|
|
|
Nutzt `TAG+="uaccess"` — gibt dem am Seat eingeloggten User automatisch Zugriff, ohne Gruppen-Setup.
|
|
|
|
```bash
|
|
corsairctl udev | sudo tee /etc/udev/rules.d/99-corsair.rules
|
|
sudo udevadm control --reload-rules && sudo udevadm trigger
|
|
```
|