Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Ce document détaille l’implémentation du protocole d’un appareil Haptic Pen qui se connecte à un hôte Windows 11 compatible. Cela n’inclut pas de conseils sur les contraintes mécaniques, les contraintes électriques ou la sélection de composants pour générer la réponse haptique au sein du transducteur de 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, mais une implémentation peut choisir 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 à des fins de modulation de la réponse haptique.
Classe d’appareil
Haptic Pen est une extension de la classe Pen Device sur Windows. Ce guide d’implémentation ajoute au Guide d’implémentation du stylet et se concentre sur l’implémentation de haptiques au sein du transducteur de stylet, de sorte que les stylos haptiques doivent répondre aux exigences du Guide d’implémentation de stylet en plus de ceux contenus ici.
Connectivité du bus d’appareil
Le stylet Haptic utilise les pilotes de boîte de réception fournis par Microsoft pour se connecter à un hôte Windows à l’aide de HID via Bluetooth.
Implémentation du protocole de stylet haptique
Une bonne compréhension du protocole HID est nécessaire pour pouvoir comprendre les informations présentées ici. Pour plus d’informations sur le protocole HID, consultez les ressources suivantes :
- Définition de classe d’appareil pour les appareils d’interface humaine (HID)
- Tables d’utilisation HID
Windows inclut un pilote de classe HID et un pilote miniport compatible HID Bluetooth correspondant, il n’est donc pas nécessaire de disposer de pilotes mini-port tiers. Le microprogramme du périphérique de stylet haptique doit uniquement signaler les utilisations décrites dans cette rubrique. Windows utilisera le microprogramme et ses propres pilotes HID pour activer l’appareil et accorder aux applications Windows l’accès à l’appareil.
Un exemple descripteur est fourni dans la section Exemples de descripteurs de rapport ci-dessous.
Collection HID de niveau supérieur requise
Un appareil Haptic Pen doit utiliser le protocole HID sur un système Windows 10 de telle sorte que l’appareil fournit 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 digitiseur de stylet doit signaler l’identificateur de stylet, qui est composé du numéro de série du transducteur et de l’ID du fournisseur de transducteur, dans les rapports d'entrée fournis au système d'exploitation. Le même identificateur de stylet doit être signalé à travers la collection de stylets. Cela permet au système d’exploitation de mettre en corrélation l’entrée du stylet générée par le numériseur. Vous trouverez plus d’informations sur le guide d’implémentation du stylet ici : Implémentation du protocole Pen.
Numéro de série du transducteur
Le numéro de série transducteur est un identificateur persistant unique pour le transducteur utilisé dans l’accessoire de stylet communiquant avec le numériseur de stylet. Cela doit être de 32 bits et est défini par le fournisseur ou l’entité identifiée par l’ID du fournisseur de 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 nulle n’est pas supportée 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 nulle n’est pas supportée par l’hôte.
| Page | ID | Remarques |
|---|---|---|
| 0xD | 0x5B | Obligatoire pour les fonctionnalités dépendantes 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 de transducteur
L’ID du fournisseur de transducteur est un champ permettant de communiquer avec le fabricant du transducteur utilisé dans l’accessoire de stylet qui communique avec le numériseur de stylet. Il faut qu’il s’agisse d’un ID de fournisseur de 2 octets USB-IF attribué soit du fabricant, soit de celui de l’IHV/OEM autorisant l’utilisation de son ID de fournisseur USB-IF à cet effet.
| Page | ID | Remarques |
|---|---|---|
| 0xD | 0x91 | Obligatoire pour les fonctionnalités dépendantes de l’identification unique du stylet (voir ci-dessous) |
Fonctionnalités dépendant de l'identification unique du stylet
La création de rapports PenID est obligatoire pour activer des scénarios tels que les haptiques de stylet (requis pour les fonctionnalités haptiques dans ce guide).
Il est également obligatoire dans les scénarios qui utilisent plusieurs stylets pour l'entrée manuscrite. Par exemple:
- L'application Whiteboard sur Windows prend en charge l'utilisation de plusieurs stylets, où chaque stylet peut être associé à un certain outil d'entrée manuscrite.
- En général, les applications qui souhaitent attribuer des attributs ou des comportements à différents stylets physiques, même si le numériseur ne peut prendre en charge qu’un seul stylet sur l’écran à la fois
- Applications qui souhaitent suivre plusieurs stylets simultanément sur des numériseurs pris en charge
Rapport de sortie haptique
Si un appareil de stylet prend en charge les commentaires haptiques, il peut permettre au système et aux applications de tirer parti de celui-ci en incluant une collection de commentaires haptique (Page 0x0E, Utilisation 0x01) dans le TLC de stylet. Pour plus d’informations sur la façon dont la spécification HID prend en charge les commentaires haptiques, consultez la page Haptics de ratification de la spécification HID.
L’hôte utilise les utilisations suivantes dans un rapport de sortie (via la collection de commentaires haptique) pour permettre à l’hôte d’émettre des événements de commentaires haptiques sur l’appareil de stylet haptique. Si un appareil choisit d’exposer un regroupement de commentaires haptique, certaines utilisations sont obligatoires pour permettre la prise en charge des commentaires haptiques initiés par l’hôte.
| Membre | Descriptif | Page | ID | Obligatoire/facultatif |
|---|---|---|---|---|
| Liste de formes d’ondes | Liste ordonnée des formes d’ondes haptiques prises en charge par l’appareil | 0x0E | 0x10 | Obligatoire |
| Liste de durées | Liste triée des durées des formes d’ondes dans la liste des formes d’ondes | 0x0E | 0x11 | Obligatoire |
| Déclencheur automatique | Forme d’onde à déclencher automatiquement à la discrétion de l’appareil | 0x0E | 0x20 | Obligatoire |
| Déclencheur automatique associé au contrôle | Utilisation HID de la commande liée aux commentaires haptiques | 0x0E | 0x22 | Obligatoire |
| Intensité | Sortie - Intensité de la forme d’onde du déclencheur manuel en pourcentage | 0x0E | 0x23 | Optional |
| Nombre de répétitions | Sortie - Nombre de fois pour lire la forme d’onde du déclencheur manuel après la lecture initiale | 0x0E | 0x24 | Optional |
| Période de retrigger | Sortie : durée d’attente avant de réactiver le déclencheur manuel lors de la répétition | 0x0E | 0x25 | Optional |
| Temps de coupure de forme d’onde | Durée maximale d’exécution d’une forme d’onde de déclencheur manuel avant d’être coupée | 0x0E | 0x28 | Optional |
Liste de formes d’ondes
La liste des formes d'ondes représente une collection des utilisations HID pour les formes d'ondes prises en charge, classées à l'aide de valeurs ordinales. Les formes d’ondes haptiques prédéfinies sont définies dans la spécification HID. Pour les appareils haptiques de stylet, ces formes d’onde peuvent être classées comme deux segments qui correspondent à différents scénarios :
- WAVEFORM_*CONTINUOUS - Retour basé sur l'encre pour simuler différentes textures tandis que l'utilisateur utilise activement divers outils tels que le stylet, le crayon, etc.
- WAVEFORM_* : commentaires discrets et non continus sur les interactions lorsqu’un utilisateur effectue une tâche pilotée par l’entrée, telle que le pointage sur un bouton, le clic sur un bouton désactivé et la reconnaissance de forme manuscrite réussie.
La liste complète des formes d’onde prises en charge pour les appareils haptiques de stylet est ci-dessous :
| Signaux | Descriptif | Page | ID | Obligatoire/facultatif |
|---|---|---|---|---|
| WAVEFORM_NONE | Non op. Ne doit pas avoir d’impact sur l’état de jeu des formes d’ondes en cours | 0x0E | 0x1001 | Obligatoire |
| WAVEFORM_STOP | Arrête la lecture des formes d’ondes en cours | 0x0E | 0x1002 | Obligatoire |
| WAVEFORM_CLICK | Crée une brève rétroaction « clic ». Solution de secours par défaut lorsque la forme d’onde de rétroaction d’interaction choisie par l’application n’est pas prise en charge par le stylet à retour haptique. | 0x0E | 0x1003 | Obligatoire |
| WAVEFORM_INKCONTINUOUS | Simule la sensation d'écriture avec un stylo à bille. Retourner à la valeur par défaut lorsqu'une forme d'onde d'encrage n'est pas prise en charge par le stylet haptique | 0x0E | 0x100B | Obligatoire |
| WAVEFORM_SUCCESS | Signal haptique fort pour alerter l’utilisateur qu’une action a réussi | 0x0E | 0x1009 | Optional |
| WAVEFORM_ERROR | Signal haptique fort pour alerter l’utilisateur qu’une action a échoué ou une erreur s’est produite | 0x0E | 0x100A | Optional |
| WAVEFORM_HOVER | Signal haptique lorsque l’utilisateur pointe sur un élément d’interface utilisateur interactif avec un stylet haptique | 0x0E | 0x1008 | Optional |
| WAVEFORM_PRESS | Signal haptique pour lequel un utilisateur appuie sur un élément d’interface utilisateur interactif dans une action incrémentielle (voir Release) | 0x0E | 0x1006 | Optional |
| WAVEFORM_RELEASE | Signal haptique pour lequel un utilisateur libère un élément d’interface utilisateur interactif dans une action incrémentielle (voir Press) | 0x0E | 0x1007 | Optional |
| WAVEFORM_PENCILCONTINUOUS | Signal haptique continu lorsque l’utilisateur sélectionne le crayon comme outil de marquage | 0x0E | 0x100C | Optional |
| WAVEFORM_MARKERCONTINUOUS | Signal haptique continu lorsque l'utilisateur sélectionne le marqueur comme outil de dessin. | 0x0E | 0x100D | Optional |
| WAVEFORM_CHISELMARKERCONTINUOUS | Signal haptique continu lorsque l’utilisateur sélectionne le marqueur/le surligneur comme outil d’entrée manuscrite | 0x0E | 0x100E | Optional |
| WAVEFORM_BRUSHCONTINUOUS | Signal haptique continu lorsque l’utilisateur sélectionne le pinceau comme outil d'encrage | 0x0E | 0x100F | Optional |
| WAVEFORM_ERASERCONTINUOUS | Signal haptique continu lorsque l’utilisateur sélectionne la gomme comme outil de dessin | 0x0E | 0x1010 | Optional |
| WAVEFORM_SPARKLECONTINUOUS | Signal haptique continu pour les outils d’encre spéciaux, tels qu’un pinceau multicolore | 0x0E | 0x1011 | Optional |
Note
Bien qu’il ne soit pas nécessaire, il est recommandé d’implémenter également les autres formes d’ondes énumérées afin de fournir une expérience utilisateur plus complète. En particulier, WAVEFORM_PRESS et WAVEFORM_RELEASE sont vivement recommandés, car ils fournissent des commentaires d’interaction précieux.
Les WAVEFORM_NONE et les WAVEFORM_STOP sont obligatoires pour tous les appareils haptiques compatibles HID. Les ordinals 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 Waveform List ou la Duration List. La liste des formes d'onde déclare les formes d'onde prises en charge par les minimum et maximum physiques de chaque ordinal de la liste.
Liste de durées
L’utilisation de la liste de durées représente une collection de durées pour les formes d’onde prises en charge dans la liste des formes d'onde, classée par ordre ordinal. L’unité pour la durée de la forme d’onde est en millisecondes, et la durée doit être une valeur positive non nulle pour toute forme d’onde non continue. Si une forme d’onde est continue (joue jusqu’à ce qu’elle soit arrêtée par l’hôte ou le temps de coupure de forme d’onde est dépassée), sa durée est définie comme zéro.
WAVEFORM_NONE et WAVEFORM_STOP sont supposés avoir une durée de zéro. Ils n’ont pas besoin d’être déclarés dans la liste de durées.
Intensité
L’utilisation de l’intensité représente le pourcentage d’intensité maximale à appliquer à une forme d’onde. Cette valeur doit varier entre 0 et 100 %. 100 % indique que les formes d’ondes seront déclenchées par l’appareil à leur force 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 indique combien de fois une forme d'onde doit être répétée. Un nombre de répétitions de zéro indique que la forme d’onde du déclencheur manuel ne doit être lue qu’une seule fois (aucune répétition). Si le délai de coupure de forme d’onde a été dépassé, il est prévu que toutes les répétitions incomplètes soient ignorées.
Période de retrigger
L’utilisation de la période de retrigger représente la durée pendant laquelle l’appareil doit attendre avant de répéter une forme d’onde de déclencheur manuel dans un rapport de sortie, conformément à la valeur spécifiée par le nombre de répétitions. Les unités de cette valeur sont des millisecondes. Si la période de retrigger est inférieure à la durée de la forme d’onde jouée, la forme d’onde doit être arrêtée et redémarrée au moment indiqué par la période de retrigger.
Temps de coupure de forme d’onde
L'utilisation du temps de coupure de la forme d'onde représente la durée maximale pendant laquelle l'appareil permet de répéter une forme d'onde déclenchée manuellement avant de terminer la lecture. Il s’agit d’une valeur constante pour l’appareil et inclut à la fois des formes d’ondes continues sans durées définies et des formes d’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 des millisecondes.
Rapport de sortie haptique
L’hôte utilise les usages suivants dans un rapport de sortie pour émettre des événements de retour haptique au dispositif Haptic Pen. Certaines utilisations sont obligatoires pour la compatibilité avec l’implémentation de l’hôte Windows.
| Membre | Descriptif | Page | ID | Obligatoire/facultatif |
|---|---|---|---|---|
| Déclencheur manuel | Forme d’onde à déclencher en tant que commande explicite à partir de l’hôte | 0x0E | 0x21 | Obligatoire |
| Intensité | Intensité de la forme d’onde du déclencheur manuel sous la forme d’un pourcentage | 0x0E | 0x23 | Obligatoire |
| Nombre de répétitions | Nombre de répétitions de la lecture de la forme d'onde du déclencheur manuel après la lecture initiale | 0x0E | 0x24 | Optional |
| Période de retrigger | Durée d’attente avant de relancer le déclenchement manuel lors de la répétition. | 0x0E | 0x25 | Optional |
Déclencheur manuel
L’utilisation du déclencheur manuel représente une utilisation de forme d’onde prise en charge dans la liste de formes d’ondes demandée par l’hôte pour être jouée. Lorsqu’un rapport de sortie contenant un déclencheur manuel autre que WAVEFORM_NONE est envoyé à l’appareil, il doit immédiatement commencer à lire la forme d’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 retrigger). Lorsqu’un rapport de sortie contient un déclencheur manuel de WAVEFORM_STOP, toute lecture de signal d'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 relance, veuillez consulter la section précédente en ce qui concerne le rapport des caractéristiques de sortie.
Démarrage et arrêt des haptics
L’organigramme ci-dessous décrit quand 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 reproduit activement la forme d’onde haptique
- Suspendu : le stylet est configuré avec une onde, mais ne la diffuse pas activement
- Arrêté : le stylet n’est pas configuré avec une forme d’onde et ne joue pas activement rien
Pour connaître l’état du stylet par rapport au digitzer, reportez-vous aux états du stylet Windows.
Note
Lorsque le stylet sort de la portée, il est recommandé, mais pas obligatoire, d’effacer les paramètres haptiques. Ceci est illustré dans le diagramme ci-dessous par les deux chemins alternatifs sortant de l'état « Stylet : À portée ; Haptics : Suspendus » lorsque le stylet sort de portée.
Note
L’hôte peut à tout moment demander la lecture d’une forme d’onde non continue. Dans ce cas, le stylet doit l'activer, puis revenir à son état précédent.
Note
L’hôte ne configure que les formes d’ondes continues. Les formes d’ondes discrètes/non continues ne doivent être déclenchées manuellement que.
Collection de claviers (facultatif)
Fonctionnalité facultative permettant d’activer la communication des clics de boutons finaux à l'hôte par le biais de rapports de clavier HID.
Un appareil compatible doit signaler 3 combinaisons de clavier distinctes correspondant à 3 actions de bouton distinctes via un appareil clavier BLUETOOTH HID exposé à l’hôte. Les actions et les combinaisons de clavier correspondantes sont décrites ci-dessous :
| Action du bouton | Combinaison de touches |
|---|---|
| Clic unique | WIN+F20 |
| Double-cliquer | WIN+F19 |
| Appuyez longuement | Win+F18 |
Implémentation du bouton Bluetooth
Pour implémenter un bouton Bluetooth de queue, l’appareil signale 3 combinaisons de clavier distinctes correspondant à 3 actions de bouton distinctes via un appareil clavier HID 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 pour signaler |
|---|---|
| Clic unique | WIN+F20 |
| Double-clic | WIN+F19 |
| Appuyer de manière prolongée | WIN+F18 |
Rangement de stylet
À compter de Windows 10, version 1903, Windows prend en charge les notifications pour les appareils incorporant un stockage 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 de clavier HID correspondant pour une paire de combinaisons de raccourcis. Pour signaler un ancrage (stylet rangé dans le rangement), signalez avec WIN+CTRL+F20, et pour signaler un désancrage (stylet retiré du rangement), signalez avec WIN+CTRL+F19. Cela peut être implémenté avec le microprogramme ou un pilote.
Ces événements de désancrage/ancrage affichent/masquent le menu Shell de l'espace de travail d'encre. À compter de Windows 10, version 2004, Office réagit également à ces événements à l’aide d’une API de plateforme qui permet aux développeurs d’étendre leur application pour connaître les événements de stockage. Il n’existe aucune fonctionnalité pour vérifier si le stylet est présent dans le dock, les applications ne sont averties que des événements de retrait et de retour s’ils se trouvent au premier plan.
Exemple de descripteur de rapport HID
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 ()