Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ab Windows 8 enthält das Windows-Betriebssystem einen eingebauten HID-Klassentreiber (SensorsHIDClassDriver.dll), der elf Sensortypen unterstützt, die über den HID-Transport kommunizieren.
Hier ist eine Liste der unterstützten Sensoren:
- Beschleunigungsmesser 3D
- Umgebungslicht
- Umgebungstemperatur
- Luftdruck
- Kompass 3D
- Ausrichtung des Geräts
- Gyroskop 3D
- Feuchtigkeit
- Neigungsmesser 3D
- Anwesenheit
- Nähe
Die folgende Abbildung zeigt den Datenfluss von zwei Sensoranwendungen über den Treiberstapel nach unten und schließlich an die Hardware selbst.
Unterstützung für benutzerdefinierte Sensoren
Zusätzlich zu den elf Sensoren, die in den vorherigen Listen behandelt werden, unterstützt der Klassentreiber auch eine benutzerdefinierte Klasse. Diese Klasse ermöglicht es einem Sensorhersteller, ein Gerät zu integrieren, das in der vorherigen Liste nicht gefunden wurde: z. B. ein Kohlenmonoxidsensor. Der benutzerdefinierte Sensor stellt sich der Sensor-API als benutzerdefiniertes Gerät mit eindeutigen Eigenschaften vor.
Architektur und Übersicht
Wenn Sie die Firmware für einen kompatiblen Sensor erstellen, benötigen Sie ein grundlegendes Verständnis des vom Klassentreiber unterstützten E/A-Modells.
- Der Sensor sendet entweder einen Featurebericht oder einen Eingabebericht an den HID-Klassen-Treiber aus. Ein Featurebericht wird als Antwort auf eine Anforderung des Treibers gesendet. Dieser Bericht enthält Eigenschaftsdaten, einschließlich der Änderungsempfindlichkeitseinstellung des Sensors, des Berichtsintervalls und des Berichtszustands. Ein Eingabebericht wird entweder auf Anforderung oder asynchron als Reaktion auf ein Ereignis gesendet. Dieser Bericht enthält die tatsächlichen Sensordaten. Beispielsweise enthält der Bericht für einen Beschleunigungsmesser die G-Kräfte entlang der X-, Y- und Z-Achse).
- Der HID-Klassentreiber sendet Funktionsberichte an den Sensor. Wenn die Anwendung beispielsweise ein neues Änderungsempfindlichkeits- oder Berichtsintervall anfordert, packt der Treiber diese Werte in einen Featurebericht und verwendet diesen Bericht, um die Anforderung an die Firmware des Sensors zu senden.
Das folgende Diagramm veranschaulicht das E/A-Modell:
Beispielberichtdeskriptor
Wenn Ihr Sensor eine der sieben Kategorien unterstützt, die für den Klassentreiber nativ sind, muss die Firmware bestimmte Feature- und Eingabeberichte unterstützen. Zu den Featureberichten gehören der aktuelle Berichtsstatus eines Sensors, dessen Status, die Änderungsempfindlichkeit und das Berichtsintervall (zusätzlich zu anderen möglichen Eigenschaften). Die Eingabeberichte enthalten Sensorwerte: True oder False für einen Schalter, G-Force-Werte für einen Beschleunigungsmesser oder LUX für einen Umgebungslichtsensor.
Beispielbericht zum Merkmal des Beschleunigungsmessers
Das folgende Codebeispiel zeigt den HID-Featurebericht für den Beschleunigungsmesser. Beachten Sie die selbstdeskriptive Natur dieses Berichts. Sie enthält Mindest- und Maximalwerte sowie die Anzahl und Größe einzelner Felder.
//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),
Beispiel für einen Beschleunigungsmesser-Eingabebericht
Das folgende Codebeispiel zeigt den HID-Eingabebericht für dasselbe Gerät. Beachten Sie auch hier die selbstdeskriptive Natur der Felder in diesem Bericht.
//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),