From f3a4bf82a87dc37d317d962963c2ff53c29515d1 Mon Sep 17 00:00:00 2001 From: nevaforget Date: Fri, 27 Mar 2026 23:27:50 +0100 Subject: [PATCH] fix: 5ms Sleep vor HID-Read gegen Response-Mixups MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- src/hid.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/hid.rs b/src/hid.rs index 3aadd92..6d0c98b 100644 --- a/src/hid.rs +++ b/src/hid.rs @@ -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> { 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 Result>> { 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)?;