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.
This commit is contained in:
nevaforget 2026-03-27 23:33:04 +01:00
parent f3a4bf82a8
commit dd410de49d

View File

@ -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<BragiResponse> {
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<String> = 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<BragiResponse> {
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)