v3.5.1
La version 3.5.1 est une version axée sur la stabilité et la qualité. Thèmes principaux : appariement automatique pour les configurations 1↔1 de Inverse3 + poignée, état de mouvement GET /devices/{id} une mise à jour sans session WebSocket ouverte, la fin du grésillement lors du basculement entre les modes « force » et « position », et un ordonnanceur de ticks de service s'adaptant automatiquement en cas de charge soutenue.
Points forts
- Appairage automatique pour les configurations 1↔1 « Inverse3 » + poignée. Lorsqu'un Inverse3 et une poignée sont prêts, le SDK enregistre automatiquement un appairage ; les déverrouillages déclenchés par
pen_attachedet grâce à l'étalonnage Minverse s ne sont plus mal acheminés dans les configurations comportant plusieurs appareils. - Instantanés
GET /devices/{id}à jour sans session ouverte. Inverse3 / Inverse3x / Les modèles Minverse équipés du micrologiciel v7.5 ou version ultérieure voient désormais leur état de mouvement interrogé à une fréquence de 20 Hz, quelle que soit l'activité du WebSocket. Les versions du micrologiciel antérieures à la v7.5 ignorent cette interrogation et n'émettent qu'un seul avertissement. - Le commutateur Force/Position ne grince plus. Le passage de
set_cursor_force↔set_cursor_positionutilise un créneau exclusif : seule la dernière valeur par appareil est conservée entre deux ticks. La solution de contournement de 200 ms pour les intervalles d'inactivité de HARP est désormais obsolète. - Ordreur de ticks auto-ajustable. La boucle principale adapte sa cadence d'envoi en fonction de la charge, de sorte qu'un tick lent ne puisse pas faire croître indéfiniment la file d'attente des commandes.
- Réponses en temps réel, une par une, même en cas de forte affluence. Les réponses en flux par message WS sont limitées à une par milliseconde et par session ; le message précédemment mis en mémoire tampon est renvoyé lorsque la limite empêche l'envoi, de sorte que les boucles de simulation ne se bloquent jamais sur
recv().
Améliorations internes
Appareils
- Registre d'appairage Inverse3 ↔ VerseGrip par appareil.
GET|POST|DELETE /devices/{sel}/paired_withcorrespond à un rapport de 1 pour 1 par appareil.POSTélimine les conflits des deux côtés ;DELETEefface l'entrée sélectionnée ; le sélecteur doit correspondre à un seul identifiant. - Interrogation de l'état de mouvement à 20 Hz sur le micrologiciel v7.5+.
GET /devices/{id}renvoie les dernières valeurs decursor_position,cursor_velocity,angular_position,angular_velocitytoutes les 50 ms ; transparent pour les sessions actives. - Débit contrôlé pour
set_extension_datasans fil de VerseGrip. File d'attente « abandon des plus anciens / répétition en cas d'inactivité » vidée à chaque tick du service — un envoi excessif ne sature plus la liaison radio, un envoi insuffisant ne laisse plus de valeur périmée.
Séances
- Nouveau raccourci de réception WS pour les lots de contrôle uniquement (force/position) qui contourne le pipeline en tenant compte de la configuration ;
configure/set_profile/ Les commandes personnalisées sont toujours soumises au correctif de condition de concurrence.
Observabilité
- La fréquence des journaux de détection dépend du port et tient compte de la récurrence. Chaque port figurant sur la liste noire est vérifié séparément ; la ligne récurrente
"...blacklisted: skipping"affiche désormais(×N)pour les ticks ignorés entre deux déclenchements. - Le système de détection sans fil VerseGrip ne génère plus de messages dans le journal lorsqu'un appareil autre que le WVG est détecté.
Corrections
POST /device.config.presetavecdefaultsouarm_frontréinitialise désormais la configuration de l'appareil aux paramètres d'usine (auparavant, cela n'avait aucun effet et ne générait aucune erreur).basisest conservé afin que les bases configurées dans l'application soient préservées malgré les modifications apportées aux préréglages de montage.force_render_full_statene renvoie plus d'instantanés sans blocconfiglorsque la configuration correspondante arrive dans le même message WS ; le chemin de configuration se vide de manière synchrone avant l'instantané.force_render_full_stateLa fonction « inter-sessions » renvoie l'instantané complet de la cible. A et B reçoivent désormais l'intégralité de la charge utile (auparavant, A ne recevait que le flux continu).- Les commandes inter-sessions dont le
target_session_iddont la valeur est inconnue ne bloquent plus la boucle requête-réponse. Le demandeur reçoit son propre instantané ainsi qu'une notificationsession-command-dropped(cross-session-unknown-target). - Les déverrouillages d'étalonnage multi-appareils Minverse ne sont plus mal acheminés. L'étalonnage de Minverse A ne déverrouille plus Minverse B ; même correction pour la diffusion du cap de réussite inkwell.
- Le sélecteur d'appareil HTTP accepte
#1234et1234comme identifiant d'appareil ; les classes de sélecteur (inverse3,verse_grip) fonctionnent également avec l'index ; les messages 404 conservent l'expression de sélecteur d'origine. - L'indicateur
readyLe fonctionnement sans fil de VerseGrip dépend désormais de la connexion initiale établie avec l'appareil — Auparavant, il pouvait basculer avant que l'appareil ne se soit entièrement connecté lors de certaines reconnexions. - Les modifications apportées à l'exécution des paramètres basés sur une porte de synchronisation par clé prennent désormais effet dès le prochain déclenchement (auparavant, la valeur était figée dès la première initialisation ; seules les nouvelles sessions tenaient compte de la modification).
Modifications potentiellement incompatibles
- Chaînes 404 HTTP unifiées dans
basis,preset,mount,transform,force_gate:"{type} device #{id} not found"→"no device matches selector '{expr}'". Les erreurs 404 liées à la session sont traitées de la même manière. - Motif « glob »
devices/inverse*/...→devices/*inverse/...pour le gain d'échelle de force, le gain de la porte de force, le délai d'expiration de la commande etsafeties/expose_in_snapshot. Les fichiers de paramètres de la version 3.5.0 qui utilisent l'ancienne forme littérale ne pourront pas être liés. - Paramètres : les variables globales de sérialisation ont été déplacées vers
session/serialization/*(explicit_fields,force_complete_transforms,preview/*). Les anciens cheminsserialization/*sont toujours résolus par des alias obsolètes ; ils seront supprimés dans la version 4.0. - Comportement: les clients qui utilisent la réponse WS par message comme « poignée de main » de synchronisation des ticks ne reçoivent au maximum qu'une réponse par milliseconde et par session en cas de trafic soutenu. Les instantanés complets effectués lors d'un changement de configuration ne sont pas affectés.
Fonctionnalités obsolètes
Aucune dans la version 3.5.1. Le commutateur principal de l'aperçu sert de mécanisme de dépréciation en vue du futur pipeline de transition du mode silencieux au mode d'avertissement de la version 3.6 ; la première série de dépréciations est prévue pour la version 3.5.2.