Highlights {#highlights}
Konfigurationsschreibvorgänge auf Geräteebene erreichen jetzt jede Client-Sitzung, die dieses Gerät belegt, nichtnur die, die geschrieben hat. Ein zweiter Viewer aktualisiert sich über sein eigenes session-updated-Ereignis, statt
zu pollen — genau ein Ereignis pro belegender Sitzung und niemals zwei für den Schreibenden.
Die physische Montageposition eines Geräts kann jetzt an einen Client gemeldet werden, statt dass der Dienst immer dieMontage meldet, die die Sitzung konfiguriert hat. Das Label, das angibt, welche der beiden Angaben Sie gerade betrachten,
ist jetzt konstruktionsbedingt zutreffend, in jeder Ausgabeform.
Pflegt ein Gerät seine eigene Mount-Referenz, hält der Dienst damit Schritt. Bisher lieferte der Dienst einen Wert, der beimHochfahren des Geräts erfasst und nie erneut geprüft wurde. Er kann diese Referenz jetzt auf Anforderung im eigenen Render-Takt
des Clients aktualisieren — dienstseitig ratenbegrenzt, damit ein schneller Client die Geräteverbindung nicht fluten kann — und
die Änderung einmal melden, sobald sich die Montage tatsächlich gedreht hat.
Interne Verbesserungen {#internal-improvements}
Experimentelle automatische Korrektur der Gierdrift des Griffs. Ein neues Dienstmodul schließt die Regelschleife für dieinertiale Gierdrift des Wireless VerseGrip: Es gleicht die absolute Gierung des Griffs mit der Bewegung des gekoppelten Inverse3 oder
Minverse ab, an dem er befestigt ist. Sobald ein Stapel von Qualitätsprüfungen erfüllt ist, schreibt es eine einzelne Korrektur
zurück in die Firmware des Griffs. Das Modul wird deaktiviert ausgeliefert, ist nur bei eingeschalteter experimenteller
Opt-in-Option erreichbar und verfügt über einen Laufzeitschalter, der jeden aktiven Griff sofort wieder deaktiviert, sobald er
umgelegt wird — nicht optional bei einer Funktion, die in die Firmware des Geräts schreibt.
Ein Konfigurationsschreibvorgang, der alle Geräte gleichzeitig betrifft, ist jetzt alles oder nichts. Die gesamte Auswahl wird— Firmware-Funktionen und Gerätebereitschaft — validiert, bevor ein Gerät geändert wird. So kann eine Flotte mit gemischten
Firmware-Versionen nicht mehr halb umgeschaltet zurückbleiben, nur weil das zweite Gerät einen Fehler meldet.
Bestätigungen der Griff-Firmware werden jetzt pro Anfrage verfolgt. Ein einziger gemeinsamer Ergebnisplatz führte dazu,dass zwei gleichzeitige Anfragende die Antwort des jeweils anderen verlieren konnten, und ein mehrdeutiger Wert stand sowohl
für „abgelehnt“ als auch für „noch nichts“ — wodurch eine Ablehnung in einen Wiederholungssturm umschlagen konnte. Jede Anfrage
trägt jetzt ein eigenes Token, eine Anfrage, die die Leitung nie erreicht hat, registriert nichts, und eine verlorene Antwort
wird als fehlgeschlagen aufgelöst, statt hängen zu bleiben. Der Prüfdurchlauf, der dies leistet, kostet nichts, solange keine
Anfrage offen ist.
Die Kalibrierung beim Andocken am Inkwell-Dock ist von den neuen Firmware-Funktionsprüfungen des Griffs nicht betroffen. DasAndocken eines Stifts führt eine vollständige Neukalibrierung der Pose durch, die bei jedem ausgelieferten Stift unabhängig von
der Firmware-Version korrekt ist. Dieser Pfad ist ausdrücklich von der Funktionsuntergrenze ausgenommen, die für berechnete
Kurskorrekturen eingeführt wurde, und die Ausnahme ist an der Aufrufstelle ausformuliert statt abgeleitet.
Fehlerbehebungen {#fixes}
Das Zurücksetzen der Schwerkraftkompensation stellt jetzt den echten Standardwert wieder her, statt zu überkompensieren.Trotz seines Namens ist das Feld scaling_factor in config/gravity_compensation kein Multiplikator: Es ist die zusätzliche
Nutzlastmasse am Endeffektor in Kilogramm, die das Gerät zusätzlich zu seinem eigenen Gewicht kompensiert. Das Zurücksetzen
nahm den Namen wörtlich und stellte den „neutralen“ Faktor 1 wieder her — eine Phantom-Nutzlast von einem Kilogramm. Das Gerät
drückte den Griff danach nach oben, was ein frisch verbundenes Gerät nicht tut. Das Zurücksetzen liefert jetzt den echten
Standardwert zurück: Kompensation aktiviert, scaling_factor bei 0, d. h. das Gerät trägt sein eigenes Gewicht und nimmt keine
Nutzlast an. Falls Ihre Anwendung das Zurücksetzen dazu genutzt hatte, die Stärke der Kompensation zu erhöhen, setzen Sie
stattdessen den gewünschten Wert explizit.
Das Zurücksetzen der Rückkehr zur Grundposition schaltet sie jetzt tatsächlich wieder ein. Das Zurücksetzen von config/home_returnhatte die Rückkehr zur Grundposition deaktiviert, während es dem Aufrufer meldete, sie sei aktiviert. Ein Reset stellt jetzt
wirklich den Werkseinstellungswert (eingeschaltet) wieder her, und der Wert, den Ihre Anwendung danach ausliest, ist der Wert,
den das Gerät tatsächlich verwendet.
Ein Schreibvorgang für Montage oder Ausrichtung auf Geräteebene lässt andere Clients nicht mehr mit veralteten Werten zurück.Vor 3.5.6 aktualisierte ein Schreibvorgang, der auf dem Gerät selbst landete — also von jeder Sitzung geteilt, die dieses Gerät
belegt —, nur die Konfiguration des schreibenden Clients, und die geräteweiten Routen aktualisierten überhaupt niemanden. Jeder
andere Client auf demselben Gerät meldete weiterhin den alten Wert, bis er abfragte. Jede belegende Sitzung wird jetzt benachrichtigt.
Ein wiederholter Andockversuch am Inkwell-Dock gibt nach einer einzigen Ablehnung nicht mehr auf. Der Zustand eines früherenAndockens blieb über Andockvorgänge hinweg erhalten, sodass das zweite Andocken seine erste Ablehnung als Ende seines
Wiederholungsfensters behandelte. Das Wiederholungsfenster wird jetzt pro Andockversuch zurückgesetzt.
Data Race im Gerätetick des Wireless VerseGrip behoben. Die Kennung des Geräts konnte vom Verbindungsthread neu zugewiesen werden,während ein Vorbereitungspfad sie unter einem anderen Lock las. Die Kennung wird jetzt einmal unter dem richtigen Lock als
Momentaufnahme erfasst, und jeder der folgenden Pfade — einschließlich der Ablehnungen — arbeitet mit dieser Kopie.
Nicht synchronisierte Nachrichtenvorbereitung bei vier Sendern des Wireless VerseGrip behoben. Vier ausgehende Nachrichtenpfadestellten ihre Nutzlast und Prüfsumme zusammen und forderten das Senden an, ohne den Schreib-Lock zu nehmen, sodass zwei Sender
im gemeinsamen Puffer ineinander schreiben konnten.
Mögliche Breaking Changes {#potential-breaking-changes}
Keine Änderungen an API, Wire-Format oder Einstellungen. Die Standardausgabe ist byte-identisch mit 3.5.5, keine Route wurdegelöscht oder in ihrem Pfad geändert, die öffentliche C-API hat keinen Diff, und kein Einstellungsschlüssel wurde umbenannt,
entfernt oder mit einem neuen Standardwert versehen. Anwendungen, die die Vorschau- oder experimentellen Schnittstellen des SDK
aktivieren, haben in diesem Zyklus allerdings Migrationsarbeit, darunter eine Änderung der Schalterstufe und ein entfernter
Token-Satz; jeder Schritt ist im begleitenden Engineering-Changelog dokumentiert.
Das Zurücksetzen der Schwerkraftkompensation liefert einen anderen Wert als in 3.5.5. Kein Feld, keine Route und keineAntwortstruktur haben sich geändert, aber eine Anwendung, die sich darauf verließ, dass das Zurücksetzen scaling_factor auf 1
schreibt, erhält jetzt den Werkseinstellungswert 0 — die Kompensation selbst bleibt in beiden Fällen aktiviert. Setzen Sie den
Wert explizit, statt sich auf das Zurücksetzen zu verlassen; siehe die Korrektur oben.
Das Zurücksetzen der Rückkehr zur Grundposition lässt sie jetzt eingeschaltet, nicht ausgeschaltet. Kein Feld, keine Route undkeine Antwortstruktur haben sich geändert, aber eine Anwendung, die sich darauf verließ, dass das Zurücksetzen die Rückkehr zur
Grundposition deaktiviert, findet sie nun aktiviert vor. Setzen Sie sie nach einem Reset explizit auf aus, wenn Sie das
benötigen; siehe die Korrektur oben.
Clients erhalten zusätzliche Konfigurationsereignisse. Eine Anwendung, die annahm, dass ein session-updated-Ereignis nur wegendes eigenen Schreibvorgangs eintrifft, erhält jetzt auch eines, wenn ein anderer Client ein Gerät ändert, das beide belegen,
gefolgt von einer vollständigen Neudarstellung der Konfiguration. Das ist die beabsichtigte Folge des oben beschriebenen Fan-outs;
ein Client, der beim Ereignis einfach neu einliest, benötigt keine Änderung.