Partager via


Guide d’implémentation du stylet haptique

Ce document détaille l’implémentation du protocole pour un appareil à stylet haptique qui se connecte à un hôte Windows 11 compatible. Il n’inclut pas de conseils sur les contraintes mécaniques, les contraintes électriques ou la sélection des composants pour générer la réponse haptique dans le transducteur du stylet. Ce guide d’implémentation est indépendant du protocole de stylet utilisé entre le transducteur de stylet et le numériseur de stylet. Toutefois, on peut choisir pour l’implémentation d’utiliser un protocole de stylet avec une fonctionnalité de liaison montante qui permet au numériseur de stylet de fournir des paramètres supplémentaires au transducteur de stylet à des fins de modulation de la réponse haptique.

Classe d’appareil

Le stylet haptique est une extension de la classe Appareil à stylet sur Windows. Ce guide d’implémentation s’ajoute au Guide d’implémentation du stylet et se concentre sur l’implémentation de l’haptique dans le transducteur de stylet. Par conséquent, les stylets haptiques doivent répondre aux exigences du Guide d’implémentation du stylet en plus de celles données ici.

Connectivité du bus d’appareil

Le stylet haptique doit utiliser les pilotes de boîte de réception fournis par Microsoft pour se connecter à un hôte Windows à l’aide d’IHM par Bluetooth.

Implémentation d'un protocole de stylet

Une bonne compréhension du protocole IHM est nécessaire pour comprendre les informations présentées ici. Pour plus d’informations sur le protocole IHM, consultez les ressources suivantes :

Windows inclut un pilote de classe IHM et un pilote miniport compatible IHM Bluetooth correspondant. Il n’est donc pas nécessaire d’utiliser des pilotes de mini-port tiers. Le microprogramme de l’appareil à stylet haptique doit uniquement signaler les utilisations décrites dans cette rubrique. Windows utilisera le microprogramme et ses propres pilotes IHM pour activer l’appareil et y donner aux applications Windows.

Un exemple de descripteur est fourni dans la section Exemples de descripteurs de rapport.

Collection IHM de niveau supérieur requise

Collection IHM de niveau supérieur requise pour le stylet haptique

Un appareil à stylet haptique doit utiliser le protocole IHM sur un système de Windows 10 de manière à ce qu’il fournisse une collection de niveau supérieur qui s’affiche sous la forme d’un numériseur/stylet (page 0x0D, utilisation 0x20).

Rapport d’entrée du numériseur de stylet

La collection du numériseur de stylet doit signaler l’identificateur du stylet composé du numéro de série du transducteur et de l’ID du fournisseur du transducteur dans les rapports d’entrée signalés au système d’exploitation. Le même identificateur de stylet doit être signalé par le biais de la collection de stylets. Cela permet au système d’exploitation de mettre en corrélation l’entrée de stylet générée par le numériseur avec le stylet. Vous trouverez plus d’informations sur le guide d’implémentation du stylet ici : Implémentation du protocole de stylet.

Numéro de série du transducteur

Le numéro de série du transducteur est un identificateur persistant unique pour le transducteur utilisé dans l’accessoire de stylet qui communique avec le numériseur de stylet. Il doit être de 32 bits et il est défini par le fournisseur ou l’entité identifié par l’ID du fournisseur du transducteur. Dans les circonstances où le numéro de série transducteur est inconnu du numériseur, soit parce que l’accessoire de stylet ne prend pas en charge la transmission de cette valeur ou que la transmission n’a pas été reçue en intégralité, le numériseur doit signaler 0 à l’hôte. La position Null n’est pas prise en charge par l’hôte.

Numéro de série du transducteur – Partie 2

Numéro de série du transducteur : la partie 2 permet de spécifier un nombre supplémentaire de 32 bits dans le cadre de l’identificateur persistant unique du transducteur utilisé dans un accessoire de stylet. Dans les circonstances où le numéro de série transducteur – La partie 2 est inconnue du numériseur, soit parce que l’accessoire de stylet ne prend pas en charge la transmission de cette valeur ou que la transmission n’a pas été reçue en intégralité, le numériseur doit signaler 0 à l’hôte. La position Null n’est pas prise en charge par l’hôte.

Page id Notes
0xD 0x5B Obligatoire pour les fonctionnalités qui dépendent de l’identification unique du stylet (voir ci-dessous)
0xD 0x6E Extension facultative du numéro de série par un nombre supplémentaire de 32 bits

ID du fournisseur du transducteur

L’ID du fournisseur du transducteur est un champ permettant de communiquer le fabricant du transducteur utilisé dans l’accessoire de stylet qui communique avec le numériseur de stylet. Il doit s’agir d’un ID de fournisseur USB-IF de 2 octets attribué par le fabricant ou celui de l’IHV/OEM autorisant l’utilisation de leur ID de fournisseur USB-IF à cette fin.

Page id Notes
0xD 0x91 Obligatoire pour les fonctionnalités qui dépendent de l’identification unique du stylet (voir ci-dessous)

Fonctionnalités dépendantes de l’identification unique du stylet

L’ID de stylet de création de rapports est obligatoire pour activer des scénarios tels que l’haptique du stylet (requis pour les fonctionnalités haptiques de ce guide).

Il est également obligatoire pour les scénarios qui utilisent plusieurs stylets pour l’entrée manuscrite. Par exemple :

  • L’application Tableau blanc sur Windows prend en charge l’utilisation de plusieurs stylets où chaque stylet peut être mappé à un certain outil d’entrée manuscrite
  • Il s’agit généralement d’applications qui souhaitent affecter des attributs ou des comportements à différents stylets physiques, même si le numériseur ne peut prendre en charge qu’un seul stylet à l’écran à ce moment-là
  • Applications qui souhaitent suivre plusieurs stylets simultanés sur des numériseurs pris en charge

Rapport de sortie haptique

Si un appareil à stylet prend en charge les réactions tactiles, il peut permettre au système et aux applications d’en tirer parti en incluant une collection de réactions tactiles (Page 0x0E, Utilisation 0x01) dans le stylet TLC. Pour plus d’informations sur la façon dont la spécification IHM prend en charge les réactions tactiles, consultez la ratification sur la page consacrée à l’haptique de la spécification IHM.

L’hôte a recours aux utilisations suivantes dans un rapport de sortie (via la collection de réactions tactiles) pour permettre à l’hôte d’émettre des événements de réactions tactiles à destination de l’appareil à stylet haptique. Si un appareil choisit d’exposer une collection de réactions tactiles, certaines utilisations sont obligatoires pour permettre la prise en charge des réactions tactiles initiées par l’hôte.

Membre Description Page id Obligatoire/facultatif
Liste des ondes Liste triée des ondes haptiques prises en charge par l’appareil 0x0E 0x10 Obligatoire
Liste des durées Liste triée des durées pour les ondes dans la liste des ondes 0x0E 0x11 Obligatoire
Déclenchement automatique Onde permettant de déclencher automatiquement, à la convenance de l’appareil 0x0E 0x20 Obligatoire
Contrôle associé au déclenchement automatique Utilisation IHM du contrôle associé à une réaction tactile 0x0E 0x22 Obligatoire
Intensité Sortie - Intensité de l’onde de déclenchement manuel en pourcentage 0x0E 0x23 Facultatif
Nombre de répétitions Sortie : nombre de fois où lire l’onde de déclenchement manuel après la lecture initiale 0x0E 0x24 Facultatif
Période de redéclenchement Sortie : durée avant laquelle réactiver le déclenchement manuel lors de la répétition 0x0E 0x25 Facultatif
Temps limite de l’onde Durée maximale pendant laquelle une onde de déclenchement manuel peut être lue avant d’être coupée 0x0E 0x28 Facultatif

Liste des ondes

L’utilisation de la liste des ondes représente une collection des utilisations IHM des ondes prises en charge, ordonnées à l’aide d’ordinaux. Les ondes haptiques prédéfinies sont définies dans la spécification IHM. Pour les appareils à stylet haptique, ces ondes peuvent être classées en tant que deux segments qui correspondent à différents scénarios :

  • WAVEFORM_*CONTINOUS : réactions basées sur l’entrée manuscrite pour simuler différentes textures pendant que l’utilisateur effectue activement une entrée manuscrite à l’aide de différents outils tels que le stylet, le pinceau, etc.
  • WAVEFORM_* : réactions discrètes et non continues basées sur les interactions lorsqu’un utilisateur effectue une tâche pilotée par une entrée, comme pointer sur un bouton, cliquer sur un bouton désactivé et la reconnaître avec succès une forme manuscrite.

Voici la liste complète des ondes prises en charge pour les appareils à stylet haptique :

Onde Description Page id Obligatoire/facultatif
WAVEFORM_NONE No-op. Ne doit pas avoir d’impact sur l’état de lecture des ondes en cours 0x0E 0x1001 Obligatoire
WAVEFORM_STOP Arrête la lecture des ondes en cours 0x0E 0x1002 Obligatoire
WAVEFORM_CLICK Crée une brève réaction « clic ». Secours par défaut lorsque l’onde de réaction d’interaction sélectionnée par l’application n’est pas prise en charge par le stylet haptique 0x0E 0x1003 Obligatoire
WAVEFORM_INKCONTINUOUS Simule la sensation d’entrée manuscrite à l’aide d’un stylo à bille physique. Secours par défaut lorsqu’une onde d’entrée manuscrite n’est pas prise en charge par le stylet haptique 0x0E 0x100B Obligatoire
WAVEFORM_SUCCESS Signal haptique fort pour avertir l’utilisateur qu’une action a réussi 0x0E 0x1009 Facultatif
WAVEFORM_ERROR Signal haptique fort pour avertir l’utilisateur qu’une action a échoué ou qu’une erreur s’est produite 0x0E 0x100A Facultatif
WAVEFORM_HOVER Signal haptique lorsque l’utilisateur pointe sur un élément d’interface utilisateur interactif avec un stylet haptique 0x0E 0x1008 Facultatif
WAVEFORM_PRESS Signal haptique pour un moment où l’utilisateur appuie sur un élément d’interface utilisateur interactif dans une action incrémentielle (voir Libérer) 0x0E 0x1006 Facultatif
WAVEFORM_RELEASE Signal haptique pour un moment où un utilisateur libère un élément d’interface utilisateur interactif dans une action incrémentielle (voir Appuyer) 0x0E 0x1007 Facultatif
WAVEFORM_PENCILCONTINUOUS Signal haptique continu lorsque l’utilisateur sélectionne le pinceau comme outil d’entrée manuscrite 0x0E 0x100C Facultatif
WAVEFORM_MARKERCONTINUOUS Signal haptique continu lorsque l’utilisateur sélectionne le marqueur comme outil d’entrée manuscrite 0x0E 0x100D Facultatif
WAVEFORM_CHISELMARKERCONTINUOUS Signal haptique continu lorsque l’utilisateur sélectionne le marqueur biseau/surligneur comme outil d’entrée manuscrite 0x0E 0x100E Facultatif
WAVEFORM_BRUSHCONTINUOUS Signal haptique continu lorsque l’utilisateur sélectionne le pinceau comme outil d’entrée manuscrite 0x0E 0x100F Facultatif
WAVEFORM_ERASERCONTINUOUS Signal haptique continu lorsque l’utilisateur sélectionne la gomme comme outil d’entrée manuscrite 0x0E 0x1010 Facultatif
WAVEFORM_SPARKLECONTINUOUS Signal haptique continu pour les outils Encre spéciaux, tels qu’un pinceau multicolore 0x0E 0x1011 Facultatif

Notes

Bien que cela ne soit pas obligatoire, il est recommandé d’implémenter également les autres ondes énumérées afin de fournir une expérience utilisateur plus complète. WAVEFORM_PRESS et WAVEFORM_RELEASE; notamment, sont fortement recommandés, car elles fournissent de précieuses réactions d’interaction.

WAVEFORM_NONE et WAVEFORM_STOP sont requises pour tous les appareils haptiques compatibles IHM. Les ordinaux 1 et 2 sont implicitement définis sur WAVEFORM_NONE et WAVEFORM_STOP. Ils n’ont pas besoin d’être déclarés dans la liste des ondes ou la liste des durées. La liste Ondes indique les ondes prises en charge par le minimum et le maximum physique de chaque ordinal de la liste.

Liste des durées

L’utilisation de la liste des durées représente une collection des durées des ondes prises en charge dans la liste des ondes, classées à l’aide d’ordinaux. L’unité de durée d’une onde est la milliseconde et cette durée doit être une valeur positive non nulle pour toute onde non continue. Si une onde est continue (est lue jusqu’à ce qu’elle soit arrêtée par l’hôte ou que le temps limite de l’onde soit dépassé), sa durée est définie comme zéro.

WAVEFORM_NONE et WAVEFORM_STOP sont supposées avoir une durée de zéro. Elles n’ont pas besoin d’être déclarées dans la liste des durées.

Intensité

L’utilisation de l’intensité représente le pourcentage d’intensité maximale à appliquer à une onde. Cette valeur doit varier entre 0 et 100 %. 100 % indique que les ondes seront déclenchées par l’appareil à leur puissance maximale et 0 % indique que le transducteur haptique n’est pas activé.

Nombre de répétitions

L’utilisation du nombre de répétitions représente le nombre de fois qu’une onde doit être répétée. Un nombre de répétitions égal à zéro indique que l’onde de déclenchement manuel ne doit être lue qu’une seule fois (pas de répétition). Si le temps limite de l’onde a été dépassé, il est prévu que toutes les répétitions incomplètes soient ignorées.

Période de redéclenchement

L’utilisation de la période de redéclenchement représente le temps d’attente de l’appareil avant de répéter une onde de déclenchement manuel dans un rapport de sortie, selon la valeur spécifiée par le Nombre de répétitions. Les unités de cette valeur sont les millisecondes. Si la période de redéclenchement est inférieure à la durée de l’onde en cours de lecture, l’onde doit être arrêtée et redémarrée à la période indiquée par la période de redéclenchement.

Temps limite de l’onde

L’utilisation du temps limite de l’onde représente la durée maximale pendant laquelle l’appareil permet de répéter une onde de déclenchement manuel avant de mettre fin à la lecture. Il s’agit d’une valeur constante pour l’appareil qui inclut à la fois des ondes continues sans durées définies et des ondes avec des durées discrètes qui sont définies pour se répéter plusieurs fois. Les unités de cette valeur sont les millisecondes.

Rapport de sortie haptique

L’hôte a recours aux utilisations suivantes dans un rapport de sortie pour émettre des événements de réactions tactiles à destination de l’appareil à stylet haptique. Certaines utilisations sont obligatoires pour la compatibilité avec l’implémentation de l’hôte Windows.

Membre Description Page id Obligatoire/facultatif
Déclenchement manuel Onde à déclencher en tant que commande explicite depuis l’hôte 0x0E 0x21 Obligatoire
Intensité Intensité de l’onde de déclenchement manuel en pourcentage 0x0E 0x23 Obligatoire
Nombre de répétitions Nombre de fois où lire l’onde de déclenchement manuel après la lecture initiale 0x0E 0x24 Facultatif
Période de redéclenchement Durée d’attente avant de redéclencher le déclenchement manuel lors d’une répétition 0x0E 0x25 Facultatif

Déclenchement manuel

L’utilisation du déclenchement manuel représente une utilisation prise en charge de l’onde de la liste des ondes dont il a été demandé à ce qu’elle soit lue par l’hôte. Lorsqu’un rapport de sortie contenant un déclenchement manuel autre que WAVEFORM_NONE est envoyé à l’appareil, il doit immédiatement commencer à lire l’onde spécifiée avec les propriétés supplémentaires incluses dans le rapport de sortie (Intensité, Nombre de répétitions, Période de redéclenchement). Lorsqu’un rapport de sortie contient un déclenchement manuel de WAVEFORM_STOP, toute lecture de l’onde en cours doit être arrêtée.

Pour les utilisations de l’intensité, du nombre de répétitions et de la période de redéclenchement, consultez la section précédente concernant le rapport des fonctionnalités de sortie.

Démarrage et arrêt de l’haptique

L’organigramme ci-dessous décrit les moments auxquels les signaux haptiques du stylet doivent être configurés, effacés, démarrés et arrêtés.

Les différents états haptiques décrits ci-dessous sont les suivants :

  • Lecture : le stylet lit activement l’onde haptique
  • En pause : le stylet est configuré avec une onde, mais ne la lit pas activement
  • Arrêté : le stylet n’est pas configuré avec une onde et ne lit pas activement quoi que ce soit

Pour connaître l’état du stylet en ce qui concerne le numérisateur, consultez États du stylet Windows.

Remarque

Lorsque le stylet sort de la plage, il est recommandé, mais pas obligatoire, d’effacer la configuration haptique. Ceci est transmis dans le diagramme ci-dessous par les deux chemins d’accès alternatifs sortant du « Stylet : Dans la plage ; Haptics : état suspendu » lorsque le stylet sort de la plage.

Remarque

L’hôte peut à tout moment demander la lecture d’une onde non continue. Dans ce cas, le stylet doit la lire, puis revenir à l’état dans lequel il se trouvait précédemment.

Notes

L’hôte doit uniquement configurer des ondes continues. Les ondes discrètes/non continues doivent uniquement être déclenchées manuellement.

Diagramme de l’état du stylet haptique

Collection de claviers (facultatif)

Une fonctionnalité facultative permettant de signaler les clics sur les boutons poussoirs à l’hôte via les rapports de clavier IHM.

Un appareil compatible doit signaler trois combinaisons de clavier distinctes correspondant à trois actions du bouton distinctes via un dispositif de clavier Bluetooth IHM exposé à l'hôte. Les actions et les combinaisons de clavier correspondantes sont décrites ci-dessous :

Actions du bouton Combinaison de touches
Clic simple WIN+F20
Double-clic WIN+F19
Appuyer longuement Win+F18

Implémentation du bouton Bluetooth

Pour implémenter un bouton Bluetooth de fin, l’appareil signale trois combinaisons de claviers distinctes correspondant à trois actions de bouton distinctes via un périphérique clavier IHM Bluetooth LE exposé à l’hôte. Les actions et les combinaisons de clavier correspondantes sont décrites ci-dessous :

Action du bouton Bluetooth Combinaison de touches dans le rapport
Effectuez un clic simple sur WIN+F20
Double-clic WIN+F19
Appuyer de manière prolongée WIN+F18

Rangement du stylet

À partir de Windows 10, version 1903, Windows prend en charge les notifications pour les appareils incorporant un rangement de stylet compatible. Le mécanisme s’appuie sur le matériel qui détecte le stylet en cours de suppression ou de remplacement et génère un rapport clavier IHM correspondant pour une paire de combinaisons de raccourcis. Pour signaler un ancrage (stylet remplacé dans le rangement), indiquez WIN+CTRL+F20. Pour signaler une annulation d’ancrage (stylet supprimé du rangement), indiquez WIN+CTRL+F19. Cela peut être implémenté avec un microprogramme ou un pilote.

Ces événements d’ancrage/annulation d’ancrage affichent/ignorent le menu de l’espace de travail Shell Ink. À partir de Windows 10, version 2004, Office réagit également à ces événements à l’aide d’une API de plateforme qui permet à n’importe quel développeur d’étendre son application pour connaître les événements de rangement. Il n’existe aucune prise en charge pour demander si le stylet est présent dans la station d’accueil. Les applications ne sont averties des événements de suppression et de retour que s’ils se trouvent au premier plan.

Exemple de descripteur de rapport IHM

05,0D,                      // Usage Page (Digitizers)
09,20,                      // Usage (Stylus)
A1,01,                      // Collection (Application)
85,40,                      //   Report ID (64)
95,01,                      //   Report Count (1)
75,20,                      //   Report Size (32)
17,00,00,00,80,             //   Logical Minimum (-2147483648)
27,FF,FF,FF,7F,             //   Logical Maximum (2147483647)
09,5B,                      //   Transducer Serial Number
81,02,                      //   Input (Data,Var,Abs)
75,10,                      //   Report Size (16)
15,01,                      //   Logical Minimum (1)
27,FF,FF,00,00,             //   Logical Maximum (65535)
09,91,                      //   Transducer Vendor ID
81,02,                      //   Input (Data,Var,Abs)
05,0E,                      //   Usage Page (Haptics)
09,01,                      //   Usage (0x01)
A1,02,                      //   Collection (Logical)
85,41,                      //     Report ID (65)
95,01,                      //     Report Count (1)
75,08,                      //     Report Size (8)
15,01,                      //     Logical Minimum (1)
26,FF,00,                   //     Logical Maximum (255)
09,24,                      //     Usage (0x24)
B1,02,                      //     Feature (Data,Var,Abs)
09,24,                      //     Usage (0x24)
91,02,                      //     Output (Data,Var,Abs)
09,23,                      //     Usage (0x23)
B1,02,                      //     Feature (Data,Var,Abs)
09,23,                      //     Usage (0x23)
91,02,                      //     Output (Data,Var,Abs)
15,01,                      //     Logical Minimum (1)
25,12,                      //     Logical Maximum (18)
09,20,                      //     Usage (0x20)
B1,02,                      //     Feature (Data,Var,Abs)
09,21,                      //     Usage (0x21)
91,02,                      //     Output (Data,Var,Abs)
15,00,                      //     Logical Minimum (0)
26,FE,00,                   //     Logical Maximum (254)
66,01,10,                   //     Unit (SI Linear)
55,FD,                      //     Unit Exponent (253)
35,00,                      //     Physical Minimum (0)
46,EC,09,                   //     Physical Maximum (2540)
09,28,                      //     Usage (0x28)
91,02,                      //     Output (Data,Var,Abs)
75,10,                      //     Report Size (16)
26,D0,07,                   //     Logical Maximum (2000)
46,D0,07,                   //     Physical Maximum (2000)
09,25,                      //     Usage (0x25)
91,02,                      //     Output (Data,Var,Abs)
09,25,                      //     Usage (0x25)
B1,02,                      //     Feature (Data,Var,Abs)
45,00,                      //     Physical Maximum (0)
85,42,                      //     Report ID (66)
75,20,                      //     Report Size (32)
17,42,00,0D,00,             //     Logical Minimum (852034)
27,42,00,0D,00,             //     Logical Maximum (852034)
09,22,                      //     Usage (0x22)
B1,02,                      //     Feature (Data,Var,Abs)
09,11,                      //     Usage (0x11)
A1,02,                      //     Collection (Logical)
05,0A,                      //       Usage Page (Ordinal)
75,10,                      //       Report Size (16)
95,10,                      //       Report Count (16)
15,01,                      //       Logical Minimum (1)
27,FF,FF,00,00,             //       Logical Maximum (65535)
19,03,                      //       Usage Minimum (0x03)
29,12,                      //       Usage Maximum (0x12)
B1,02,                      //       Feature (Data,Var,Abs)
C0,                         //     End Collection ()
05,0E,                      //     Usage Page (Haptics)
09,10,                      //     Usage (0x10)
A1,02,                      //     Collection (Logical)
05,0A,                      //       Usage Page (Ordinal)
16,03,10,                   //       Logical Minimum (4099)
26,FF,2F,                   //       Logical Maximum (12287)
19,03,                      //       Usage Minimum (0x03)
29,12,                      //       Usage Maximum (0x12)
B1,02,                      //       Feature (Data,Var,Abs)
C0,                         //     End Collection ()
C0,                         //   End Collection ()
C0                          // End Collection ()