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:
parent
348b7c95e5
commit
f3a4bf82a8
@ -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)?;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user