Delen via


Sensor HID-klassestuurprogramma

Vanaf Windows 8 bevat het Windows-besturingssysteem een in-box sensor HID Class driver (SensorsHIDClassDriver.dll), die ondersteuning biedt voor elf typen sensoren die communiceren met behulp van het HID-transport.

Hier volgt een lijst met de ondersteunde sensoren:

  • Versnellingsmeter 3D
  • Omgevingslicht
  • Omgevingstemperatuur
  • Luchtdruk
  • Kompas 3D
  • Afdrukstand apparaat
  • Gyroscoop 3D
  • Vochtigheid
  • Inclinometer 3D
  • Aanwezigheid
  • Nabijheid

In de volgende afbeelding ziet u de gegevensstroom heen en weer van twee sensortoepassingen omlaag door de stuurprogrammastack en ten slotte naar de hardware zelf.

client-sensorarchitectuur.

Ondersteuning voor aangepaste sensoren

Naast de elf sensoren die in de vorige lijsten worden behandeld, ondersteunt het klasstuurprogramma ook een Aangepaste klasse. Met deze klasse kan een sensorfabrikant een apparaat integreren dat niet in de vorige lijst staat: bijvoorbeeld een koolmonoxidesensor. De aangepaste sensor presenteert zich aan de sensor-API als een aangepast apparaat met unieke eigenschappen.

Architectuur en overzicht

Als u de firmware voor een compatibele sensor maakt, hebt u een basiskennis nodig van het I/O-model dat wordt ondersteund door het klassestuurprogramma.

  • De sensor verzendt een functierapport of een invoerrapport naar het HID-klassestuurprogramma. Er wordt een functieverslag verzonden als reactie op een verzoek van de driver. Dit rapport bevat eigenschapsgegevens, waaronder de instelling voor wijzigingsgevoeligheid van de sensor, het rapportinterval en de rapportagestatus. Er wordt een invoerrapport verzonden op aanvraag of asynchroon als reactie op een gebeurtenis. Dit rapport bevat de werkelijke sensorgegevens. Voor een versnellingsmeter bevat het rapport bijvoorbeeld de G-krachten langs de x-, y- en z-assen.
  • Het HID-klassestuurprogramma verzendt functierapporten naar de sensor. Wanneer de toepassing bijvoorbeeld een nieuwe wijzigingsgevoeligheid of rapportinterval aanvraagt, verpakt het stuurprogramma deze waarden in een functierapport en gebruikt dit rapport om de aanvraag naar de firmware van de sensor te verzenden.

In het volgende diagram ziet u het I/O-model:

i/o-model.

Voorbeeldrapportdescriptor

Als uw sensor een van de zeven categorieën ondersteunt die systeemeigen zijn voor het klassestuurprogramma, moet de firmware specifieke functie- en invoerrapporten ondersteunen. De functierapporten bevatten de huidige rapportagestatus van een sensor, de status, de wijzigingsgevoeligheid en het rapportage-interval (naast andere mogelijke eigenschappen). De invoerrapporten bevatten sensormetingen: Waar of Onwaar voor een schakelaar, G-force-waarden voor een versnellingsmeter of LUX voor een omgevingslichtsensor.

Voorbeeld funktierapport voor versnellingsmeter

In het volgende codevoorbeeld ziet u het HID-functierapport voor de versnellingsmeter. Let op de zelfdescriptieve aard van dit rapport. Het bevat minimum- en maximumwaarden en het aantal en de grootte van afzonderlijke velden.

//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),

Voorbeeldrapport voor accelerometerinvoer

In het volgende codevoorbeeld ziet u het HID-invoerrapport voor hetzelfde apparaat. Let nogmaals op de zelfdescriptieve aard van de velden in dit 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),