corsairctl/CLAUDE.md
nevaforget 25eacfc02d fix: Audit-Befunde in Protokoll-Parsing, Error-Handling und Eingabe-Validierung
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.
2026-03-28 00:37:36 +01:00

1.3 KiB

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

cargo build
cargo test

Gerät testen (braucht Root oder udev-Regel)

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.

corsairctl udev | sudo tee /etc/udev/rules.d/99-corsair.rules
sudo udevadm control --reload-rules && sudo udevadm trigger