Partager via


Prise en charge des utilisations dans les descripteurs de rapport du numériseur

Une utilisation est le nom d’une valeur, d’un bouton ou d’une collection dans un rapport HID. L’hôte utilise les utilisations suivantes lors de l’extraction de données à partir d’un stylet ou d’un appareil tactile.

Membre Description Page id Appareil
X Coordonnée X de la position du contact. Desktop (Expérience utilisateur) 0x30 Stylet, Tactile
O Coordonnée Y de la position du contact. Desktop (Expérience utilisateur) 0x31 Stylet, Tactile
Conseil Définir si le doigt ou le stylet se trouve sur la surface du numériseur. Numériseur 0x42 Stylet, Tactile
Dans la plage Défini lorsque le doigt ou le stylet est détecté en pointant sur le numériseur ou en contact avec la surface du numériseur. Numériseur 0x32 Stylet, Tactile
Confiance Défini lorsque le contact est un doigt (pas une paume ou toute autre partie de la main qui ne doit pas déclencher l’entrée du doigt). Numériseur 0x47 Toucher
Largeur Largeur du contact. Numériseur 0x48 Toucher
Hauteur Hauteur du contact. Numériseur 0x49 Toucher
Heure de l’analyse Temps d’analyse relatif. Numériseur 0x56 Toucher
Pression Quantité de pression appliquée par l’utilisateur au point de contact. Numériseur 0x30 Stylet, Tactile
Barrel Définir si le bouton sur le canon d’un stylet est enfoncé Numériseur 0x44 Stylet
Azimuth Rotation dans le sens inverse des aiguilles d’une montre du curseur autour de l’axe Z. Numériseur 0x3f Stylet, Tactile
Inverser : Défini lorsque l’extrémité opposée du stylet pointe sur le numériseur. Numériseur 0x3c Stylet
Gomme Défini lorsque l’extrémité opposée du stylet se trouve sur la surface du numériseur. Numériseur 0x45 Stylet
X Tilt Angle entre le plan Y-Z et le plan contenant l’axe du dispositif de pointeur et l’axe Y. Numériseur 0x3d Stylet
Y Tilt Angle entre le plan X-Z et le plan d’appareil de pointeur ; une inclinaison Y positive est vers l’utilisateur. Numériseur 0x3e Stylet
Tournant Rotation dans le sens des aiguilles d’une montre du curseur sur son propre axe. Numériseur 0x41 Stylet

Note Les utilisations répertoriées dans le tableau ci-dessus sont connues de Windows et sont remises aux applications à l’aide du message WM_POINTER.

Note Les appareils pointeurs sont libres de prendre en charge d’autres utilisations (y compris les utilisations spécifiques au fournisseur). D’autres utilisations ne sont pas remises aux applications dans WM_POINTER messages. La valeur de ces utilisations peut être récupérée à l’aide de la fonction GetRawPointerDeviceData . Pour rendre les utilisations accessibles à partir de la fonction GetRawPointerDeviceData , les utilisations doivent se trouver dans le même rapport que les utilisations X et Y.

Descripteur HID pour les numériseurs

À compter de Windows 8, un numériseur tactile doit apparaître sous la forme d’un écran tactile (page = 0x0D, utilisation = 0x04). Un numériseur de stylet doit apparaître sous la forme d’un stylet intégré (page = 0x0D, utilisation = 0x02) ou d’un stylet externe (page = 0x0D, utilisation = 0x01). Les appareils tactiles et stylet intégrés sont mappés à l’affichage auquel ils sont physiquement connectés. Les périphériques de stylet externes sont mappés au bureau virtuel.

Utilisations HID requises pour les numériseurs

Les utilisations suivantes sont requises pour tous les numériseurs. Les appareils qui ne prennent pas en charge toutes les utilisations requises ne fonctionnent pas sur Windows 8 :

X et Y
X et Y indiquent les coordonnées du contact. Dans Windows 8, un appareil peut signaler deux points pour chaque contact. Le premier point (appelé T) est considéré comme le point que l’utilisateur a l’intention de toucher, tandis que le deuxième point (appelé C) est considéré comme le centre du contact. Les appareils capables de signaler T et C doivent avoir un tableau d’utilisation de deux valeurs X et deux valeurs Y. Les valeurs de la première position dans les tableaux sont interprétées comme les coordonnées de T et les valeurs de la deuxième position sont interprétées comme les coordonnées pour C. (le nombre de rapports pour les deux utilisations est de 2 pour indiquer la présence d’un tableau d’utilisation). Les appareils qui signalent C doivent également signaler les utilisations largeur et hauteur . L’hôte utilise C pour générer le rectangle englobant autour du contact. Si l’appareil ne signale qu’une seule paire X et Y, l’hôte utilise cette paire pour T et C. L’exemple de descripteur tactile inclut des tableaux d’utilisation pour X et Y. Les extraits suivants de l’exemple de descripteur illustrent la différence entre un appareil qui prend uniquement en charge T et un appareil qui prend en charge T et C.

Un appareil qui signale uniquement T ne doit pas avoir de tableau d’utilisation pour les propriétés X et Y (autrement dit, le nombre de rapports pour chaque utilisation est de 1 comme indiqué dans la section suivante).

0x05, 0x01,                         //       USAGE_PAGE (Generic Desk..
    0x26, 0xff, 0x0f,                   //       LOGICAL_MAXIMUM (4095)         
    0x75, 0x10,                         //       REPORT_SIZE (16)             
    0x55, 0x0e,                         //       UNIT_EXPONENT (-2)           
    0x65, 0x13,                         //       UNIT(Inch,EngLinear)                  
    0x09, 0x30,                         //       USAGE (X)                    
    0x35, 0x00,                         //       PHYSICAL_MINIMUM (0)         
    0x46, 0xb5, 0x04,                   //       PHYSICAL_MAXIMUM (1205)
    0x95, 0x01,                         //       REPORT_COUNT (1)         
    0x81, 0x02,                         //       INPUT (Data,Var,Abs)         
    0x46, 0x8a, 0x03,                   //       PHYSICAL_MAXIMUM (906)
    0x09, 0x31,                         //       USAGE (Y)                    
    0x81, 0x02,                         //       INPUT (Data,Var,Abs)

Un appareil qui prend en charge T et C utilise des tableaux d’utilisation pour signaler les valeurs X et Y. Le nombre de rapports pour X et Y est de 2.

0x05, 0x01,                         //       USAGE_PAGE (Generic Desk..
    0x26, 0xff, 0x0f,                   //       LOGICAL_MAXIMUM (4095)         
    0x75, 0x10,                         //       REPORT_SIZE (16)             
    0x55, 0x0e,                         //       UNIT_EXPONENT (-2)           
    0x65, 0x13,                         //       UNIT(Inch,EngLinear)                  
    0x09, 0x30,                         //       USAGE (X)                    
    0x35, 0x00,                         //       PHYSICAL_MINIMUM (0)         
    0x46, 0xb5, 0x04,                   //       PHYSICAL_MAXIMUM (1205)
    0x95, 0x02,                         //       REPORT_COUNT (2)         
    0x81, 0x02,                         //       INPUT (Data,Var,Abs)         
    0x46, 0x8a, 0x03,                   //       PHYSICAL_MAXIMUM (906)
    0x09, 0x31,                         //       USAGE (Y)                    
    0x81, 0x02,                         //       INPUT (Data,Var,Abs)

Note Ces exemples tirent parti de la règle HID selon laquelle les éléments globaux restent les mêmes pour chaque élément main jusqu’à ce qu’ils soient modifiés. Cela permet aux utilisations X et Y de partager une seule entrée pour le nombre de rapports.

Les appareils à stylet doivent utiliser le premier exemple pour leurs descripteurs, car C n’est pas pertinent pour ces appareils.

Les éléments globaux suivants doivent être spécifiés pour les utilisations X et Y :

  • Minimum logique
  • Maximum logique
  • Minimum physique
  • Maximum physique
  • Unité
  • Exposant d’unité

La plage physique de l’appareil et les unités doivent être signalées avec précision. Si les informations sont inexactes, l’appareil ne fonctionnera pas correctement. Les appareils doivent également signaler des données dans la plage logique spécifiée dans le descripteur de rapport. Toute valeur signalée en dehors de cette plage sera considérée comme donnée non valide, et la valeur sera remplacée par la valeur limite la plus proche (valeur minimale logique ou maximale logique).

Pointe
Utilisez le commutateur Tip pour indiquer le contact du doigt ou du stylet et le décollage de la surface du numériseur. Il doit y avoir un élément main avec une taille de rapport de 1. Lors de la remise de rapports, la position du bit doit être définie lorsque le doigt ou le stylet est en contact avec la surface du numériseur. Sinon, le bit doit être effacé.

Heure d’analyse
Le temps d’analyse indique le temps relatif en unités de 100 microsecondes. Il représente le delta par rapport à la première image qui a été signalée après qu’un appareil a commencé à signaler des données après une période d’inactivité. L’heure de la première analyse reçue est traitée comme une heure de base pour les heures signalées suivantes. Les deltas entre les heures d’analyse signalées doivent refléter la fréquence d’analyse du numériseur. Il est important de noter que contrairement à d’autres utilisations, l’hôte n’offre aucune flexibilité pour l’unité pour l’utilisation du temps d’analyse. La valeur est censée être remplacée, car un seul octet est alloué au compteur. La valeur de temps d’analyse doit être la même pour tous les contacts au sein d’une trame. Cette exigence s’applique également aux appareils qui signalent des données en utilisant le mode hybride

Note Cette utilisation est requise uniquement pour les appareils tactiles.

Dans la plage
Si l’appareil prend en charge la détection de l’axe Z, le numériseur doit définir l’utilisation dans la plage dans le rapport d’entrée lorsque le transducteur se trouve dans la région où la numérisation est possible. Si l’appareil ne prend pas en charge la détection de l’axe Z, le pilote ne doit pas inclure l’utilisation dans la plage dans son descripteur de rapport.

Les versions antérieures de Windows ont des instructions différentes sur la façon dont les pilotes de numériseur tactile doivent gérer les rapports en plage.

Les appareils qui prennent en charge le stylet et le tactile doivent prendre en charge les états NULL pour les utilisations X et Y dans la collection de niveau supérieur pour le stylet. Lorsque le stylet est détecté à une hauteur où les valeurs X et Y ne peuvent pas être détectées avec précision, l’appareil doit signaler les valeurs NULL pour X et Y et définir l’utilisation dans la plage . Les valeurs NULL signifient simplement des valeurs en dehors de la plage logique spécifiée pour ces utilisations, à condition que l’appareil ait indiqué qu’il prend en charge NULL pour l’utilisation appropriée. L’appareil peut ensuite signaler des valeurs X et Y précises une fois que le stylet est suffisamment proche de la surface pour que cela soit possible. Ce protocole permet à l’hôte d’implémenter le rejet de la paume lorsque le stylet est à portée.

Il convient de noter que l’hôte reconnaît les valeurs en dehors de la plage logique comme signifiant l’implémentation de ce protocole uniquement si le descripteur de rapport inclut spécifiquement le bit indiquant que X et Y prennent en charge les états NULL . Sinon, les valeurs en dehors de la plage logique sont simplement déplacées vers la valeur de limite la plus proche. Les extraits suivants des descripteurs de rapport illustrent la différence entre un appareil qui prend en charge NULL pour X et Y et un autre qui ne le fait pas. Il convient de noter que la prise en charge DE NULL est uniquement nécessaire dans la collection de niveau supérieur du stylet. Les collections tactiles de niveau supérieur n’ont pas besoin de prendre en charge NULL pour X et Y à cet effet.

Extrait de rapport avec prise en charge NULL pour X et Y :

0x05, 0x01,                         //     USAGE_PAGE (Generic Desktop) 42
    0x09, 0x30,                         //     USAGE (X)                    44
    0x75, 0x10,                         //     REPORT_SIZE (16)             46
    0x95, 0x01,                         //     REPORT_COUNT (1)             48
    0xa4,                               //     PUSH                         50
    0x55, 0x0d,                         //     UNIT_EXPONENT (-3)           51
    0x65, 0x13,                         //     UNIT (Inch,EngLinear)        53
    0x35, 0x00,                         //     PHYSICAL_MINIMUM (0)         55
    0x46, 0x3a, 0x20,                   //     PHYSICAL_MAXIMUM (8250)      57
    0x26, 0xf8, 0x52,                   //     LOGICAL_MAXIMUM (21240)      60
    0x81, 0x42,                         //     INPUT (Data,Var,Abs)         63
    0x09, 0x31,                         //     USAGE (Y)                    65
    0x46, 0x2c, 0x18,                   //     PHYSICAL_MAXIMUM (6188)      67
    0x26, 0x6c, 0x3e,                   //     LOGICAL_MAXIMUM (15980)      70
    0x81, 0x42,                         //     INPUT (Data,Var,Abs)         73

Extrait de rapport sans prise en charge NULL pour X et Y :

0x05, 0x01,                         //       USAGE_PAGE (Generic Desk..
    0x26, 0xff, 0x0f,                   //       LOGICAL_MAXIMUM (4095)         
    0x75, 0x10,                         //       REPORT_SIZE (16)             
    0x55, 0x0e,                         //       UNIT_EXPONENT (-2)           
    0x65, 0x13,                         //       UNIT(Inch,EngLinear)                  
    0x09, 0x30,                         //       USAGE (X)                    
    0x35, 0x00,                         //       PHYSICAL_MINIMUM (0)         
    0x46, 0xb5, 0x04,                   //       PHYSICAL_MAXIMUM (1205)
    0x95, 0x01,                         //       REPORT_COUNT (1)         
    0x81, 0x02,                         //       INPUT (Data,Var,Abs)         
    0x46, 0x8a, 0x03,                   //       PHYSICAL_MAXIMUM (906)
    0x09, 0x31,                         //       USAGE (Y)                    
    0x81, 0x02,                         //       INPUT (Data,Var,Abs)

Consultez la section Prise en charge des touches et des stylets pour obtenir un descripteur complet d’un stylet qui prend en charge les valeurs NULL pour X et Y.

Note Cette utilisation est obligatoire pour tous les appareils à stylet, mais est facultative pour les appareils tactiles.

Utilisations IHM facultatives

Les utilisations suivantes sont facultatives, mais vous devez les implémenter si le matériel du numériseur les prend en charge. Les numériseurs qui ne prennent pas en charge ces utilisations ne doivent pas les inclure dans le descripteur de rapport.

Largeur et hauteur
Les utilisations Largeur et Hauteur représentent la largeur et la hauteur du cadre englobant autour du contact tactile. Les valeurs signalées ne doivent jamais être 0 sauf lorsqu’un événement « UP » est signalé, auquel cas elles doivent être 0.

La largeur et la hauteur sont également exposées aux développeurs d’applications via le message WM_POINTER.

Confiance
La confiance est une suggestion de l’appareil indiquant si le contact tactile était un contact intentioné ou accidentel. Si vous êtes sûr que le toucher est destiné, définissez l’utilisation de confiance sur 1 (true). Votre périphérique doit rejeter les touches accidentelles le plus minutieusement possible, tandis que la latence reste dans la plage requise. Si vous n’êtes pas certain que le contact tactile est destiné et que votre appareil n’a pas rejeté le toucher comme étant accidentel, définissez l’utilisation de confiance sur 0 (false). Si votre périphérique rejette toujours les interactions accidentelles, vous n’avez pas besoin d’inclure l’usage de confiance.

Pression
La pression est une mesure de la force que le doigt ou le stylet exerce sur la surface du numériseur. Il n’y a aucune restriction concernant la plage autorisée pour la pression. Toutefois, la plage spécifiée par un appareil sera normalisée entre 0 et 1024 lors de la remise de données aux applications clientes.

Baril
Le barillet doit être défini lorsque vous appuyez sur le bouton du barillet du stylet. Sinon, il doit être réinitialisé. Le barillet est utilisé par Windows pour modifier la fonction du pourboire pour une action principale (appuyez, faites glisser) ou une action secondaire (appuyez avec le bouton droit, faites glisser vers le droite).

Bien que pression et barillet soient des utilisations facultatives, il est recommandé de les implémenter pour les numériseurs de stylet. Une valeur supplémentaire est ajoutée pour ces utilisations : la pression définit la largeur du trait de stylet, ce qui le rend plus réaliste, et le commutateur de barillet permet la fonctionnalité du bouton droit de la souris lors de l’utilisation du stylet.

X Tilt
X Tilt représente l’angle du plan entre le plan Y-Z et le plan contenant l’axe du transducteur et l’axe Y.

La plage physique et la plage logique doivent être spécifiées. La plage physique doit être comprise entre -90 et 90. La plage logique doit être suffisamment grande pour fournir des données précises, à au moins deux décimales. Radians peut également être utilisé pour la plage physique. La liste suivante présente une combinaison logique et physique classique.

  • Minimum logique : -9000
  • Maximum logique : 9000
  • Unité : Degrés
  • Exposant d’unité : -2
  • Minimum physique : -9000
  • Maximum physique : 9000

Inclinaison Y
Y Tilt représente l’angle du plan entre le plan X-Z et le plan contenant les plans X du transducteur.

La plage physique et la plage logique doivent être spécifiées. La plage physique doit être comprise entre -90 et 90. La plage logique doit être suffisamment grande pour fournir des données précises, à au moins deux décimales. Radians peut également être utilisé pour la plage physique. La liste suivante présente une combinaison logique et physique classique.

  • Minimum logique : 0
  • Maximum logique : 18000
  • Unité : Degrés
  • Exposant d’unité : -2
  • Minimum physique : -9000
  • Maximum physique : 9000

Tournant
Twist spécifie la rotation du curseur dans le sens des aiguilles d’une montre autour de son propre axe principal.

La plage physique et la plage logique doivent être spécifiées. La plage physique doit être comprise entre 0 et 360. La plage logique doit être suffisamment grande pour fournir des données précises, à au moins deux décimales. Radians peut également être utilisé pour la plage physique. Dans ce cas, la plage logique doit être suffisamment grande pour signaler des valeurs qui sont exactes à au moins quatre décimales. La liste suivante présente une combinaison logique et physique classique.

  • Minimum logique : 0
  • Maximum logique : 62831
  • Unité : Radians
  • Exposant d’unité : -4
  • Minimum physique : 0
  • Maximum physique : 62831

Azimut
Azimuth spécifie la rotation dans le sens inverse des aiguilles d’une montre du curseur autour de l’axe Z via une plage circulaire complète. La plage physique et la plage logique doivent être spécifiées. La plage physique doit être comprise entre 0 et 360, mais l’appareil peut indiquer la plage complète ou la moitié de la plage en supposant que les points de suspension tactiles sont symétriques en fonction des fonctionnalités matérielles. La plage logique doit être suffisamment grande pour fournir des données précises, à au moins deux décimales. Radians peut également être utilisé pour la plage physique. Dans ce cas, la plage logique doit être suffisamment grande pour signaler des valeurs qui sont exactes à au moins 4 décimales. La liste suivante présente une combinaison logique et physique classique.

  • Minimum logique : 0
  • Maximum logique : 36000
  • Unité : Degrés
  • Exposant d’unité : -2
  • Minimum physique : 0
  • Maximum physique : 36000

Note L’exposant d’unité doit être -2 lorsque l’unité a la valeur Degrés et -4 lorsque l’unité est Radians.