From dd410de49d966ebf65c97826ed3814b19904b640 Mon Sep 17 00:00:00 2001 From: nevaforget Date: Fri, 27 Mar 2026 23:33:04 +0100 Subject: [PATCH] fix: Flush vor jeder Property-Query gegen Response-Mixups Der HID-Puffer kann veraltete Antworten von vorherigen Queries enthalten. Flush vor jedem send_recv stellt sicher, dass wir die Antwort auf unsere aktuelle Anfrage lesen. --- src/bragi/device.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/bragi/device.rs b/src/bragi/device.rs index 7f3c756..077baa5 100644 --- a/src/bragi/device.rs +++ b/src/bragi/device.rs @@ -117,22 +117,25 @@ impl BragiDevice { } /// Liest eine Property vom Headset und parst die Antwort. + /// + /// Flusht den HID-Puffer vor dem Senden, um veraltete Responses + /// aus vorherigen Queries zu verwerfen. fn get_headset_property(&self, property: Property) -> Result { + hid::flush(&self.device)?; let packet = protocol::build_get_packet(ENDPOINT_HEADSET, property.id()); let raw = hid::send_recv(&self.device, &packet)?; if self.verbose { let hex: Vec = raw.iter().take(10).map(|b| format!("{b:02X}")).collect(); eprintln!("[query] GET 0x{:02X} → {}", property.id(), hex.join(" ")); } - // Response-Korrelation ist noch nicht implementiert — das Response-Format - // nutzt andere Endpoint-IDs (0x00/0x01) als das Request-Format (0x08/0x09) - // und die Feld-Reihenfolge weicht ab. Error-Detection via 0xF0/0xF1 - // auf raw[1] funktioniert aber korrekt. protocol::parse_response(&raw) } /// Setzt eine Property auf dem Headset. + /// + /// Flusht den HID-Puffer vor dem Senden. fn set_headset_property(&self, property: Property, data: &[u8]) -> Result { + hid::flush(&self.device)?; let packet = protocol::build_set_packet(ENDPOINT_HEADSET, property.id(), data); let raw = hid::send_recv(&self.device, &packet)?; protocol::parse_response(&raw)