Aller au contenu principal

v3.5.1

La version 3.5.1 est une version de stabilisation et de qualité. Thèmes principaux : appairage automatique pour les configurations 1↔1 de Inverse3 + poignée, état de mouvement GET /devices/{id} à jour sans session WebSocket ouverte, fin du crissement lors du basculement entre les modes force et position, et un ordonnanceur de tick de service auto-ajustable sous charge soutenue.

Faits saillants​

  • Appairage automatique pour les installations 1↔1 de 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_attached et par l'étalonnage Minverse ne sont plus mal acheminés dans les configurations à plusieurs appareils.
  • Instantanés GET /devices/{id} à jour sans session ouverte. Inverse3 / Inverse3x / Minverse avec micrologiciel v7.5+ ont désormais leur état de mouvement interrogé à 20 Hz, peu importe l'activité de WebSocket. Le micrologiciel antérieur à la v7.5 ignore cette interrogation et n'émet qu'un seul avertissement.
  • Le basculement Force/Position ne crisse plus. Le passage de set_cursor_force ↔ set_cursor_position utilise 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 devenue obsolète.
  • Ordonnanceur de tick auto-ajustable. La boucle principale adapte sa cadence d'envoi sous charge, de sorte qu'un tick lent ne puisse pas faire croître indéfiniment la file de commandes.
  • Réponses en flux 1 pour 1 sous charge. Les réponses en flux par message WS sont plafonnées à une par milliseconde et par session ; le tampon précédent est rejoué lorsque le plafond refuse 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_with est une correspondance 1:1 par appareil. POST évince les conflits des deux côtés ; DELETE efface l'entrée sélectionnée ; le sélecteur doit correspondre à un seul identifiant.
  • Interrogation de l'état de mouvement à 20 Hz sur micrologiciel v7.5+. GET /devices/{id} retourne des valeurs fraîches de cursor_position, cursor_velocity, angular_position, angular_velocity toutes les 50 ms ; transparent pour les sessions actives.
  • Débit contrôlé pour set_extension_data sans fil de VerseGrip. Pipeline « abandon des plus anciens / répétition à l'inactivité » vidé à chaque tick du service — un envoi excessif ne sature plus la liaison radio, un envoi insuffisant ne laisse plus de valeur périmée.

Sessions​

  • Nouveau chemin rapide de réception WS pour les lots de contrôle seul (force/position) qui contourne le pipeline tenant compte de la configuration ; configure / set_profile / les commandes personnalisées passent toujours par le 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 sur liste noire est contrôlé indépendamment ; la ligne récurrente "...blacklisted: skipping" affiche désormais (×N) pour les ticks mis sous silence entre deux déclenchements.
  • La détection sans fil VerseGrip n'inonde plus le journal lorsqu'un appareil autre que WVG est sondé.

Corrections​

  • POST /device.config.preset avec defaults ou arm_front réinitialise désormais le montage de l'appareil au préréglage d'usine (auparavant, sans effet et sans erreur). basis est conservé afin que les bases configurées dans l'application survivent aux changements de préréglage de montage.
  • force_render_full_state ne renvoie plus d'instantané sans bloc config lorsque la configuration correspondante arrive dans le même message WS ; le chemin de configuration se vide de façon synchrone avant l'instantané.
  • force_render_full_state inter-sessions renvoie l'instantané complet de la cible. A et B voient désormais une charge utile complète (auparavant, A ne recevait que le flux continu).
  • Les commandes inter-sessions dont le target_session_id est inconnu ne bloquent plus la boucle requête-réponse. Le demandeur reçoit son propre instantané ainsi qu'un événement session-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 #1234 et 1234 comme identifiant d'appareil ; les classes de sélecteur (inverse3, verse_grip) fonctionnent aussi avec l'index ; les messages 404 conservent l'expression de sélecteur d'origine.
  • L'indicateur ready sans fil de VerseGrip dépend désormais de la poignée de main initiale d'informations sur l'appareil — auparavant, il pouvait basculer avant que l'appareil ne se soit entièrement signalé lors de certains rattachements.
  • Les modifications à l'exécution des paramètres reposant sur une porte de cadencement par clé prennent désormais effet au prochain déclenchement (auparavant, la valeur était figée au premier emplace ; seules les nouvelles sessions prenaient la modification en compte).

Changements potentiellement incompatibles​

  • Chaînes 404 de HTTP unifiées dans basis, preset, mount, transform, force_gate : "{type} device #{id} not found" → "no device matches selector '{expr}'". Les 404 de session sont traitées de la même façon.
  • 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 du contrôle et safeties/expose_in_snapshot. Les fichiers de paramètres de la version 3.5.0 qui utilisent l'ancienne forme littérale échoueront à se lier.
  • Paramètres : les variables globales de sérialisation ont été déplacées vers session/serialization/* (explicit_fields, force_complete_transforms, preview/*). Les anciens chemins serialization/* sont toujours résolus par des alias dépréciés ; ils seront supprimés en 4.0.
  • Comportement : les clients qui utilisent la réponse WS par message comme poignée de main de synchronisation de tick ne reçoivent au plus qu'une réponse par ms et par session sous trafic soutenu. Les instantanés complets lors d'un changement de configuration ne sont pas affectés.

Fonctionnalités dépréciées​

Aucune dans la version 3.5.1. Le commutateur principal de l'aperçu sert de mécanisme de dépréciation pour le futur pipeline de passage du mode silencieux au mode avertissement de la version 3.6 ; la première série de dépréciations est prévue pour la version 3.5.2.