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.
36 lines
1.2 KiB
Bash
36 lines
1.2 KiB
Bash
#!/bin/bash
|
|
# ABOUTME: Waybar-Modul für Logitech HID++ Geräte-Batterien.
|
|
# ABOUTME: Findet den richtigen hidpp_battery_* Eintrag dynamisch per MODEL_NAME.
|
|
|
|
MODEL="G515 LS TKL"
|
|
ICON=""
|
|
|
|
# hidpp_battery_* mit passendem MODEL_NAME finden
|
|
for dev in /sys/class/power_supply/hidpp_battery_*; do
|
|
[[ -d "$dev" ]] || continue
|
|
name=$(cat "$dev/model_name" 2>/dev/null)
|
|
if [[ "$name" == "$MODEL" ]]; then
|
|
capacity=$(cat "$dev/capacity" 2>/dev/null || echo 0)
|
|
status=$(cat "$dev/status" 2>/dev/null || echo "Unknown")
|
|
|
|
# Eingabe-Validierung gegen JSON-Injection
|
|
[[ "$capacity" =~ ^[0-9]+$ ]] || capacity=0
|
|
[[ "$status" =~ ^[A-Za-z\ ]+$ ]] || status="Unknown"
|
|
|
|
class="normal"
|
|
if [[ "$status" == "Charging" ]]; then
|
|
class="charging"
|
|
elif (( capacity <= 15 )); then
|
|
class="critical"
|
|
elif (( capacity <= 30 )); then
|
|
class="warning"
|
|
fi
|
|
|
|
echo "{\"text\":\"${capacity}% ${ICON}\",\"tooltip\":\"${MODEL}: ${capacity}% — ${status}\",\"class\":\"${class}\",\"percentage\":${capacity}}"
|
|
exit 0
|
|
fi
|
|
done
|
|
|
|
# Gerät nicht gefunden — nichts ausgeben, Waybar versteckt das Modul
|
|
exit 0
|