fix: 5ms Sleep vor HID-Read gegen Response-Mixups

Komplett ohne Sleep kam es sporadisch zu vertauschten Antworten
(267% Batterie = PID-Response statt Battery-Response). 5ms reicht
als Verarbeitungszeit für das Gerät, ist aber 10x schneller als
die ursprünglichen 50ms aus der Python-Referenz.
This commit is contained in:
nevaforget 2026-03-27 23:27:50 +01:00
parent 348b7c95e5
commit f3a4bf82a8

View File

@ -1,6 +1,8 @@
// ABOUTME: Dünner Wrapper um hidapi für Corsair-Geräte.
// ABOUTME: Kapselt Device-Discovery, Send/Receive und Buffer-Flushing.
use std::time::Duration;
use hidapi::{HidApi, HidDevice};
use crate::bragi::protocol::{CORSAIR_VID, HID_INTERFACE, PACKET_SIZE, REPORT_SIZE};
@ -58,6 +60,9 @@ const KNOWN_BRAGI_PIDS: &[u16] = &[
/// Sendet ein Paket und liest die Antwort.
pub fn send_recv(device: &HidDevice, packet: &[u8; PACKET_SIZE]) -> Result<Vec<u8>> {
device.write(packet)?;
// Kurze Pause damit das Gerät die Antwort vorbereiten kann.
// Ohne Sleep kommt es sporadisch zu Response-Mixups.
std::thread::sleep(Duration::from_millis(5));
let mut buf = [0u8; REPORT_SIZE];
let bytes_read = device.read_timeout(&mut buf, 200)?;
@ -72,6 +77,7 @@ pub fn send_recv(device: &HidDevice, packet: &[u8; PACKET_SIZE]) -> Result<Vec<u
/// Sendet ein Paket und ignoriert die Antwort (für Init-Sequenz).
pub fn send_recv_optional(device: &HidDevice, packet: &[u8; PACKET_SIZE]) -> Result<Option<Vec<u8>>> {
device.write(packet)?;
std::thread::sleep(Duration::from_millis(5));
let mut buf = [0u8; REPORT_SIZE];
let bytes_read = device.read_timeout(&mut buf, 200)?;