Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Начиная с Windows 8 операционная система Windows включает встроенный драйвер класса HID датчика (SensorsHIDClassDriver.dll), который поддерживает одиннадцать типов датчиков, взаимодействующих с использованием транспорта HID.
Ниже приведен список поддерживаемых датчиков:
- Акселерометр 3D
- Внешний свет
- Температура окружающей среды
- Атмосферное давление
- Компас 3D
- Ориентация устройства
- Трехмерный гироскоп
- Влажность
- Инклинометр 3D
- Присутствие
- Близость
На следующем рисунке показан поток данных из двух приложений датчиков вниз по стеку драйверов и, наконец, к самому оборудованию.
Поддержка пользовательских датчиков
Помимо одиннадцати датчиков, описанных в предыдущих списках, драйвер класса также поддерживает настраиваемый класс. Этот класс позволяет производителю датчика интегрировать устройство, не найденное в предыдущем списке: например, датчик углеродной оксиды. Пользовательский датчик представляется в API датчика как настраиваемое устройство с уникальными свойствами.
Архитектура и обзор
Если вы создаете встроенное ПО для совместимого датчика, вам потребуется базовое понимание модели ввода-вывода, поддерживаемой драйвером класса.
- Датчик отправляет отчет о функциях или входной отчет драйверу класса HID. Отчет о функциях отправляется в ответ на запрос от драйвера. Этот отчет содержит данные свойств, включая параметр изменения чувствительности датчика, интервал отчетности и состояние передачи данных. Входной отчет отправляется по запросу или асинхронно в ответ на событие. Этот отчет содержит фактические данные датчика. Например, для акселерометра отчет содержит силы G вдоль осей x, y и z).
- Драйвер класса HID отправляет отчеты о функциях датчику. Например, когда приложение запрашивает новую чувствительность к изменениям или интервал отчета, драйвер упаковывает эти значения в отчет о функции и использует этот отчет для отправки запроса прошивке датчика.
На следующей схеме показана модель ввода-вывода:
Пример дескриптора отчета
Если датчик поддерживает одну из семи категорий, собственных драйверу класса, его встроенное ПО потребуется поддерживать определенные отчеты о функциях и входных данных. Отчеты о функциях включают текущее состояние отчетности датчика, его статус, чувствительность к изменениям и интервал отчетности (помимо других возможных свойств). Входные отчеты содержат показания датчика: True или False для коммутатора, значения G-force для акселерометра или LUX для датчика внешнего света.
Пример отчета о функциях акселерометра
В следующем примере кода показан отчет о функциях HID для акселерометра. Обратите внимание на самоописательный характер этого отчета. Он включает минимальные и максимальные значения, а также количество и размер отдельных полей.
//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),
Пример входного отчета акселерометра
В следующем примере кода показан входной отчет HID для того же устройства. Также обратите внимание на самоописательный характер полей в этом отчете.
//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),