Fehler #138
Von Julius Haman vor 5 Tagen aktualisiert
Bei ANT+-Trainern Die Suche nach dem ANT+-Trainer (FE-C) wurden Zeit, Strecke, Geschwindigkeit und Puls aus dem falschen Datenfeld gelesen und waren dadurch falsch. Leistung und Trittfrequenz waren nicht betroffen. Das ist korrigiert. Außerdem gibt die Trainer-Suche im Training gibt nicht mehr nach etwa 30 Sekunden auf, und auf: Startet das Training, bevor der Trainer sendet, wird er trotzdem noch gefunden. Außerdem steht im Log stehen Verbindungsverlust und Kanal-Ereignisse. Log, wenn die Verbindung zum Trainer verloren geht oder der Kanal geschlossen wird. ### Hinweis zum Test **Nicht an echter Hardware geprüft:** **Dieser Punkt kann nicht getestet werden:** Es steht kein ANT+-Trainer (FE-C) zur Verfügung. Die Byte-Zuordnung wurde gegen eine produktiv genutzte Referenz-Implementierung (incyclist/ant-plus, Datei `src/sensors/fitness-equipment-sensors.ts`, für Änderung folgt ausschließlich den ANT+ Bluetooth-Trainer-Betrieb Erfahrungen mit echten Trainern) abgeglichen, nicht gegen die offizielle Spec D000001231 (kein Zugriff). Test mit einem Trainer steht aus. dem ANT+-Pulsgurt aus #137 und ist **nicht auf echter Hardware verifiziert**. ### Hintergrund Folgeticket zu #137 (Pulsgurt). Beim Pulsgurt war der Decoder ebenfalls falsch belegt. #137. Dort wurden Pulsgurt-Erkennung und Trainer-Suche (`--fec-scan`) korrigiert. Der FE-C-Betriebskanal (`FecControlRole`) hatte nur die Broadcast-Erkennung über `responseID` bekommen. ### Technische Details **Seite 0x10 (General FE Data), `FecControlRole.HandleGeneralFeData` und `AntFecTester`:** Die Zuordnung war um ein Byte verschoben, weil der Equipment Type Umgesetzt in Byte 1 nicht berücksichtigt war. Korrekt: | Byte | Inhalt | `FecControlRole`: |---|---| | 1 | Equipment Type | | 2 | Elapsed Time (0,25 s) | | 3 | Distance (m) | | 4/5 | Speed (0,001 m/s, 0xFFFF = ungültig) | | 6 | Puls (0xFF = ungültig) | | 7 | Capabilities (Bits 0-3), FE State (Bits 4-6), Lap Toggle (Bit 7) | Vorher wurde Elapsed Time aus Byte 1, Distance aus Byte 2, Speed aus Byte 3/4 und Puls aus Byte 5 gelesen. FE State enthält jetzt nur noch Bits 4-6 (vorher Bits 4-7 inklusive Lap Toggle). Seite 0x19 (Specific Trainer Data: Kadenz Byte 2, Leistung Byte 5/6 mit 12 Bit) und die Zielleistung 0x31 (Byte 6/7, 0,25 W) stimmen mit der Referenz überein. **`FecControlRole`, Kanal 1:** * Search-Timeout und Low-Priority-Search-Timeout auf 255 (unbegrenzt). Ohne diese Einstellung schließt ANT den Kanal nach etwa 30 Sekunden Suche selbst. Die Referenz-Implementierung setzt ebenfalls `TIMEOUT_NEVER`. * Kanal-Events werden geloggt (außer RX_FAIL). RX_FAIL, das bei Funkproblemen ständig auftritt). * Die Startzeile zeigt die Rückgabewerte von Search-Timeout, LP-Timeout und `openChannel`. Offen: Offen, noch zu prüfen: * **Decoder der Seite 0x10 (General FE Data) gegen die Spec D000001231 prüfen.** Die Byte-Zuordnung in `HandleGeneralFeData` beginnt mit Elapsed Time in Byte 1. Nach meiner Erinnerung steht in Byte 1 der Equipment Type, danach Elapsed Time (2), Distance (3), Speed (4/5), Puls (6) und FE State im oberen Halbbyte von Byte 7. Dann wären alle Werte der Seite um eins verschoben. Nicht belegt, die Spec liegt nicht im Repo, eine Websuche hat die Struktur nicht bestätigt. Bei der Pulsseite war genau diese Art Annahme falsch. Die Seite 0x19 (Specific Trainer Data) passt nach meiner Erinnerung. * `AntFecTester` ruft `getMessageID()` ohne Absicherung auf (wirft bei erweiterten Broadcasts). Betrifft nur das Testprogramm, solange es keine erweiterten Nachrichten aktiviert. * Test an echter Hardware (Trainer-Suche mit einem ANT+-Trainer (Suche mit `--fec-scan`, Betrieb, Werte-Vergleich mit der Trainer-Anzeige, Zielleistung). Zielleistung), sobald ein ANT+-Trainer verfügbar ist.