Zum Hauptinhalt springen

v3.5.1

3.5.1 ist ein Stabilisierungs- und Qualitätsrelease. Die Schwerpunkte sind: automatische Paarung bei 1↔1-Setups mit Inverse3 und Griff, frische Bewegungsdaten über GET /devices/{id} ohne eine offene Sitzung von WebSocket, ein Ende des Quietschens beim Wechsel zwischen Kraft- und Positionsmodus sowie ein selbstabstimmender Scheduler für den Service-Tick unter Dauerlast.

Highlights​

  • Automatische Paarung für 1↔1-Installationen mit Inverse3 und Griff. Sobald ein Inverse3 und ein Griff bereit sind, registriert das SDK automatisch eine Paarung. pen_attached und die Freischaltung der Minverse-Kalibrierung werden in Multi-Geräte-Setups nicht mehr fehlgeleitet.
  • Frische Snapshots über GET /devices/{id} ohne offene Sitzung. Bei Inverse3, Inverse3x und Minverse mit Firmware v7.5+ wird der Bewegungsstatus nun unabhängig von der Aktivität von WebSocket mit 20 Hz abgefragt. Firmware vor v7.5 überspringt die Abfrage und gibt einmalig eine Warnung aus.
  • Der Wechsel zwischen Kraft und Position quietscht nicht mehr. Das Umschalten zwischen set_cursor_force ↔ set_cursor_position ist slot-exklusiv: Zwischen zwei Ticks bleibt pro Gerät nur der jeweils neueste Befehl erhalten. Der Workaround für 200 ms Leerlaufpausen in HARP ist hinfällig.
  • Selbstabstimmender Tick-Scheduler. Die Hauptschleife passt ihre Versandrate unter Last an, sodass ein langsamer Tick die Befehlswarteschlange nicht unbegrenzt anwachsen lässt.
  • Streaming-Antworten unter Last nach dem Prinzip 1-rein-1-raus. Streaming-Antworten pro WS-Nachricht sind pro Sitzung auf 1/ms begrenzt. Greift die Begrenzung, wird der vorherige Puffer erneut abgespielt, sodass Simulationsschleifen nie an recv() blockieren.

Interne Verbesserungen​

Geräte​

  • Geräteweises Paarungsregister für Inverse3 ↔ VerseGrip. GET|POST|DELETE /devices/{sel}/paired_with ist eine geräteweise 1:1-Zuordnung. POST entfernt Konflikte auf beiden Seiten; DELETE löscht den ausgewählten Eintrag; der Selektor muss auf genau eine ID aufgelöst werden.
  • Abfrage des Bewegungsstatus mit 20 Hz ab Firmware v7.5+. GET /devices/{id} liefert alle 50 ms frische Werte für cursor_position, cursor_velocity, angular_position und angular_velocity; ohne Auswirkung auf aktive Sitzungen.
  • set_extension_data für VerseGrip über Funk mit gesteuerter Rate. Die Pipeline verwirft ältere Werte, wiederholt bei Leerlauf den letzten Wert und wird beim Service-Tick geleert. Zu häufiges Senden sättigt die Funkverbindung nicht mehr, zu seltenes Senden hinterlässt keinen veralteten Wert mehr.

Sitzungen​

  • Neuer WS-Empfangs-Schnellpfad für reine Steuer-Batches (Kraft/Position) überspringt die konfigurationsbewusste Pipeline; configure / set_profile und benutzerdefinierte Befehle laufen weiterhin über den Race-Fix.

Observability​

  • Der Log-Takt der Erkennung wird pro Port gesteuert und berücksichtigt, wie anhaltend eine Meldung ist. Jeder Port auf der Sperrliste wird unabhängig gedrosselt; die wiederkehrende Zeile "...blacklisted: skipping" trägt nun (×N) für Ticks, die zwischen zwei Auslösungen unterdrückt wurden.
  • Die Funk-Erkennung von VerseGrip überflutet das Log nicht mehr, wenn ein Nicht-WVG-Gerät abgefragt wird.

Fehlerbehebungen​

  • POST /device.config.preset mit defaults oder arm_front setzt die Halterung des Geräts nun auf die Werkseinstellung zurück (zuvor ein stiller No-Op). basis bleibt erhalten, damit app-konfigurierte Basen Änderungen der Halterungs-Voreinstellung überdauern.
  • force_render_full_state liefert keinen Snapshot mehr mit fehlendem config-Block, wenn die passende Konfiguration in derselben WS-Nachricht eingetroffen ist – der Konfigurationspfad wird vor dem Snapshot synchron abgearbeitet.
  • Sitzungsübergreifendes force_render_full_state liefert den vollständigen Snapshot des Ziels. Sowohl A als auch B erhalten nun eine vollständige Nutzlast (zuvor erhielt A nur Streaming-Daten).
  • Sitzungsübergreifende Befehle mit unbekannter target_session_id blockieren die Request-Reply-Schleife nicht mehr. Der Anfragende erhält seinen eigenen Snapshot sowie ein Ereignis session-command-dropped (cross-session-unknown-target).
  • Freischaltungen der Minverse-Kalibrierung über mehrere Geräte werden nicht mehr fehlgeleitet. Die Kalibrierung von Minverse A schaltet Minverse B nicht mehr frei; dieselbe Korrektur gilt für den Heading-Broadcast bei inkwell-success.
  • Geräteselektor von HTTP akzeptiert #1234 und 1234 als Geräte-ID; Selektorklassen (inverse3, verse_grip) funktionieren zusammen mit dem Index; 404-Meldungen behalten den ursprünglichen Selektorausdruck bei.
  • Das ready-Flag bei VerseGrip über Funk wird nun erst nach dem initialen Geräteinfo-Handshake gesetzt – zuvor konnte es auf bestimmten Re-Attach-Pfaden umspringen, bevor sich das Gerät vollständig angemeldet hatte.
  • Laufzeitänderungen an keyed-rate-gate-gestützten Einstellungen wirken nun beim nächsten Zugriff (zuvor wurden sie beim ersten emplace eingefroren; nur neue Sitzungen übernahmen die Änderung).

Mögliche Breaking Changes​

  • 404-Meldungen von HTTP vereinheitlicht über basis, preset, mount, transform, force_gate hinweg: "{type} device #{id} not found" → "no device matches selector '{expr}'". Die 404-Meldung für Sitzungen ist analog angepasst.
  • Settings-Glob devices/inverse*/... → devices/*inverse/... für die Verstärkung der Kraftskalierung, die Verstärkung des Kraft-Gates, das Steuer-Timeout und safeties/expose_in_snapshot. Settings-Dateien aus 3.5.0 mit dem alten Literal schlagen beim Binden fehl.
  • Einstellungen: Serialisierungs-Globals verschoben nach session/serialization/* (explicit_fields, force_complete_transforms, preview/*). Alte serialization/*-Pfade werden über veraltete Aliase weiterhin aufgelöst; Entfernung in 4.0.
  • Verhalten: Clients, die die WS-Antwort pro Nachricht als Tick-Sync-Handshake nutzen, erhalten unter Dauerlast höchstens eine Antwort pro ms und Sitzung. Vollständige Snapshots bei Konfigurationsänderungen bleiben unberührt.

Veraltete Funktionen​

Keine in 3.5.1. Der Preview-Hauptschalter ist die Infrastruktur für die kommende Pipeline in 3.6, die stille Hinweise in Warnungen umwandelt; die erste Deprecation-Runde ist für 3.5.2 geplant.