Fehler #162
Von Julius Haman vor 19 Tagen aktualisiert
## Problem
Bei einem ANT+ FE-C-Trainer wird die Leistung nicht geregelt. Die Soll-Leistung steht in der Anzeige (z. B. 210 W), die Ist-Leistung folgt ihr nicht (46 W bei 54 rpm). Rückmeldung eines Testers (Wox, ErControl 3.1.7), Screenshots und Logs liegen vor.
## Ursache
Die Befehle an die AntInterface kommen dort nie an. Im AntInterface-Log steht keine einzige Zeile "Ziel-Leistung ... gesendet", obwohl der Modus über Minuten "Zielleistung wird vorgegeben" war. Telemetrie und Puls kommen dagegen an, weil sie über eine zweite, getrennte Pipe laufen.
Die Steuer-Pipe zwischen ErControl und AntInterface wird synchron geöffnet. Der ReadLoop-Thread hängt dauerhaft im Lesen dieser Pipe, und Windows blockiert währenddessen jeden Schreibzugriff auf demselben synchronen Handle. Die Nachrichten (Ziel-Leistung, Power-Broadcast-Werte) bleiben liegen. Der Rückstau wurde in einer früheren Änderung nur auf 8 wartende Nachrichten begrenzt, danach werden sie verworfen. Das Problem betrifft damit auch die Weitergabe der Leistung per ANT+-Broadcast.
Nicht betroffen: Bluetooth (FTMS und Tacx FE-C over BLE) und der serielle Kettler, sie laufen nicht über diese Pipe.
## Lösung
Der Client der Steuer-Pipe wird asynchron (overlapped) geöffnet, damit Lesen und Schreiben gleichzeitig möglich sind. Dazu ein Test, der das Blockieren mit einem synchronen Client reproduziert.
## Prüfen
- Im AntInterface-Log erscheinen Zeilen wie "Kanal 1 (FE-C): Ziel-Leistung 210 W gesendet -> Pass".
- Die Ist-Leistung folgt der Soll-Leistung (Gangschaltung an bzw. Leistungsprofil).
- Der Power-Broadcast an eine Uhr oder einen Radcomputer liefert Werte.