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 :
- Définition de classe d’appareil pour les appareils IHM (Human Interface Devices)
- Tableaux d’utilisation d’IHM
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
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.
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 ()