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.
À compter de Windows 8, le système d’exploitation Windows inclut un pilote de classe HID de capteur intégré (SensorsHIDClassDriver.dll), qui prend en charge onze types de capteurs qui communiquent à l’aide du transport HID.
Voici la liste des capteurs pris en charge :
- Accéléromètre 3D
- Lumière ambiante
- Température ambiante
- Pression atmosphérique
- Boussole 3D
- Orientation de l’appareil
- Gyroscope 3D
- Humidité
- Inclinomètre 3D
- Présence
- Proximité
L'illustration suivante montre l'aller-retour du flux de données entre deux applications de capteurs, à travers la pile des pilotes, et, enfin, vers le matériel lui-même.
Prise en charge des capteurs personnalisés
Outre les onze capteurs couverts dans les listes précédentes, le pilote de classe prend également en charge une classe personnalisée. Cette classe permet à un fabricant de capteurs d’intégrer un appareil introuvable dans la liste précédente : par exemple, un capteur de monoxyde de carbone. Le capteur personnalisé se présente à l’API de capteur en tant qu’appareil personnalisé avec des propriétés uniques.
Architecture et vue d’ensemble
Si vous créez le microprogramme pour un capteur compatible, vous aurez besoin d’une compréhension de base du modèle d’E/S pris en charge par le pilote de classe.
- Le capteur envoie un rapport de fonctionnalité ou un rapport d’entrée au pilote de classe HID. Un rapport de fonctionnalité est envoyé en réponse à une demande du pilote. Ce rapport contient des données de propriété, notamment le paramètre de sensibilité aux modifications du capteur, son intervalle de transmission des rapports et son état de rapport. Un rapport d’entrée est envoyé à la demande ou de manière asynchrone en réponse à un événement. Ce rapport contient les données de capteur réelles. Par exemple, pour un accéléromètre, le rapport contient les forces G le long des axes x, y et z).
- Le pilote de classe HID envoie des rapports de fonctionnalités au capteur. Par exemple, lorsque l’application demande un nouveau réglage de sensibilité au changement ou un intervalle de rapport, le pilote empaquette ces valeurs dans un rapport de fonction et utilise ce rapport pour envoyer la demande au microprogramme du capteur.
Le diagramme suivant illustre le modèle d’E/S :
Exemple de descripteur de rapport
Si votre capteur prend en charge l’une des sept catégories natives du pilote de classe, son microprogramme doit prendre en charge des rapports de fonctionnalité et d’entrée spécifiques. Les rapports de fonctionnalités incluent l’état actuel des rapports d’un capteur, son état, la modification de la sensibilité et l’intervalle de création de rapports (en plus d’autres propriétés possibles). Les rapports d’entrée contiennent des lectures de capteur : True ou False pour un commutateur, des valeurs de force G pour un accéléromètre ou LUX pour un capteur de lumière ambiante.
Exemple de rapport de fonctionnalité d’accéléromètre
L’exemple de code suivant montre le rapport de fonctionnalité HID pour l’accéléromètre. Notez la nature auto-descriptive de ce rapport. Il inclut les valeurs minimales et maximales, ainsi que le nombre et la taille des champs individuels.
//feature reports (xmit/receive)
HID_USAGE_PAGE_SENSOR,
HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE,
HID_LOGICAL_MIN_8(0x00), //LOGICAL_MINIMUM (0)
HID_LOGICAL_MAX_8(0xFF), //LOGICAL_MAXIMUM (255)
HID_REPORT_SIZE(8),
HID_REPORT_COUNT(1),
HID_FEATURE(Data_Var_Abs),
HID_USAGE_SENSOR_PROPERTY_SENSOR_STATUS,
HID_LOGICAL_MIN_8(0x00), //LOGICAL_MINIMUM (0)
HID_LOGICAL_MAX_8(0xFF), //LOGICAL_MAXIMUM (255)
HID_REPORT_SIZE(8),
HID_REPORT_COUNT(1),
HID_FEATURE(Data_Var_Abs),
HID_USAGE_SENSOR_PROPERTY_CHANGE_SENSITIVITY_ABS,
HID_LOGICAL_MIN_8(0x00), //LOGICAL_MINIMUM (0)
HID_LOGICAL_MAX_16(0xFF,0xFF), //LOGICAL_MAXIMUM (65535)
HID_REPORT_SIZE(16),
HID_REPORT_COUNT(1),
HID_USAGE_SENSOR_UNITS_G,
HID_UNIT_EXPONENT(0xE),
HID_FEATURE(Data_Var_Abs),
HID_USAGE_SENSOR_PROPERTY_REPORT_INTERVAL,
HID_LOGICAL_MIN_8(0x00), //LOGICAL_MINIMUM (0)
HID_LOGICAL_MAX_32(0xFF,0xFF,0xFF,0xFF), //LOGICAL_MAXIMUM (4294967295)
HID_REPORT_SIZE(32),
HID_REPORT_COUNT(1),
HID_USAGE_SENSOR_UNITS_MILLISECOND,
HID_UNIT_EXPONENT(0),
HID_FEATURE(Data_Var_Abs),
Exemple de rapport d’entrée d’accéléromètre
L’exemple de code suivant montre le rapport d’entrée HID pour le même appareil. Là encore, notez la nature auto-descriptive des champs de ce rapport.
//input reports (transmit)
HID_USAGE_PAGE_SENSOR,
HID_USAGE_SENSOR_STATE,
HID_LOGICAL_MIN_8(0x00), //LOGICAL_MINIMUM (0)
HID_LOGICAL_MAX_8(0xFF), //LOGICAL_MAXIMUM (255)
HID_REPORT_SIZE(8),
HID_REPORT_COUNT(1),
HID_INPUT(Data_Var_Abs),
HID_USAGE_SENSOR_EVENT,
HID_LOGICAL_MIN_8(0x00), //LOGICAL_MINIMUM (0)
HID_LOGICAL_MAX_8(0xFF), //LOGICAL_MAXIMUM (255)
HID_REPORT_SIZE(8),
HID_REPORT_COUNT(1),
HID_INPUT(Data_Var_Abs),
HID_USAGE_SENSOR_DATA_MOTION_ACCELERATION_X_AXIS,
HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
HID_REPORT_SIZE(16),
HID_REPORT_COUNT(1),
HID_USAGE_SENSOR_UNITS_G,
HID_UNIT_EXPONENT(0xE),
HID_INPUT(Data_Var_Abs),
HID_USAGE_SENSOR_DATA_MOTION_ACCELERATION_Y_AXIS,
HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
HID_REPORT_SIZE(16),
HID_REPORT_COUNT(1),
HID_USAGE_SENSOR_UNITS_G,
HID_UNIT_EXPONENT(0xE),
HID_INPUT(Data_Var_Abs),
HID_USAGE_SENSOR_DATA_MOTION_ACCELERATION_Z_AXIS,
HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
HID_REPORT_SIZE(16),
HID_REPORT_COUNT(3),
HID_USAGE_SENSOR_UNITS_G,
HID_UNIT_EXPONENT(0xE),
HID_INPUT(Data_Var_Abs),
HID_USAGE_SENSOR_DATA_MOTION_INTENSITY,
HID_LOGICAL_MIN_8(0x00), //LOGICAL_MINIMUM (0)
HID_LOGICAL_MAX_8(0xFF), //LOGICAL_MAXIMUM (255)
HID_REPORT_SIZE(8),
HID_REPORT_COUNT(1),
HID_INPUT(Data_Var_Abs),