Устройства hid human interface devices windows 10

Human Interface Devices (HID)

Overview of the Human Interface Devices (HID) technology.

To develop Human Interface Devices (HID), you need these headers:

This section contains the programming interfaces related to Human Interface Devices (or HID). Typically, these are devices that humans use to directly control the operation of computer systems.

HIDClass Support Routines

There are system-supplied routines that user-mode applications, kernel-mode drivers, and HID minidrivers use to operate devices in the HIDClass device setup class.

As a general rule, user-mode applications can use the HidD_Xxx and HidP_Xxx routines. However, kernel-mode drivers can only call HidP_Xxx routines.

HID minidrivers use only the HidRegisterMinidriver routine.

For Windows 8.1 Microsoft introduced the new Windows.Devices.HumanInterfaceDevice API which lets you write Windows apps that access HID devices.

The header defines IOCTLs that a HID minidriver must support. Only the HID class driver sends these IOCTLs to a HID minidriver. User-mode applications and other kernel-mode drivers can only communicate with HID collections by using the HIDClass support routines and HID class driver ioctls.

HID Minidriver IOCTLs

A HID minidriver must handle a set of IOCTLs. Only the HID class driver sends these IOCTLs to a HID minidriver. User-mode applications and other kernel-mode drivers can only communicate with HID collections by using the HIDClass support routines and HID class driver ioctls.

Topic Description
IOCTL_HID_ACTIVATE_DEVICE The IOCTL_HID_ACTIVATE_DEVICE request activates a HIDClass device, which makes it ready for I/O operations.
IOCTL_HID_DEACTIVATE_DEVICE The IOCTL_HID_DEACTIVATE_DEVICE request deactivates a HIDClass device, which causes it to stop operations and terminate all outstanding I/O requests.
IOCTL_HID_GET_DEVICE_ATTRIBUTES The IOCTL_HID_GET_DEVICE_ATTRIBUTES request obtains a HIDClass device’s attributes in a HID_DEVICE_ATTRIBUTES structure.
IOCTL_HID_GET_DEVICE_DESCRIPTOR The IOCTL_HID_GET_DEVICE_DESCRIPTOR request obtains a HIDClass device’s HID descriptor.
IOCTL_HID_GET_REPORT_DESCRIPTOR The IOCTL_HID_GET_REPORT_DESCRIPTOR request obtains the report descriptor for a HIDClass device.
IOCTL_HID_GET_STRING The IOCTL_HID_GET_STRING request obtains a manufacturer ID, product ID, or serial number for a top-level collection. The retrieved string is a NULL-terminated wide character string in a human-readable format.
IOCTL_HID_READ_REPORT The IOCTL_HID_READ_REPORT request transfers an input report from a HIDClass device into the HID class driver’s buffer.
IOCTL_HID_WRITE_REPORT The IOCTL_HID_WRITE_REPORT request sends a HID report to a HIDClass device.
IOCTL_UMDF_GET_PHYSICAL_DESCRIPTOR The IOCTL_UMDF_GET_PHYSICAL_DESCRIPTOR control code obtains the physical descriptor of a HIDClass device.
IOCTL_UMDF_HID_GET_FEATURE The IOCTL_UMDF_HID_GET_FEATURE control code obtains a feature report from a HIDClass device.
IOCTL_UMDF_HID_GET_INPUT_REPORT The IOCTL_UMDF_HID_GET_INPUT_REPORT control code returns an input report from a HIDClass device.
IOCTL_UMDF_HID_SET_FEATURE The IOCTL_UMDF_HID_GET_FEATURE control code sends a feature report to a HIDClass device.
IOCTL_UMDF_HID_SET_OUTPUT_REPORT The IOCTL_UMDF_HID_SET_OUTPUT_REPORT control code sends an output report to a top-level collection.

HID Class Driver IOCTLs

The HID class driver handles IOCTLs to support for top-level collections.

Although user applications can communicate with the HID class driver by using HidD_Xxx HIDClass support routines, kernel-mode drivers must send the corresponding device control requests described in this section.

The input and output parameters are request-specific.

Upon completion of a request, the I/O status block members are set as follows:

The Status member is set by the HID class driver for all requests that it handles.

As described for each IOCTL, the Information member is set either by the class driver or a lower-level driver. Normally, when a lower-level driver transfers data from or to a device, the lower-level driver sets Information to the number of bytes transferred. However, the HID class driver might return a different value.

Устройство интерфейса пользователя — Human interface device

Устройство интерфейса с человеком или HID — это тип компьютерного устройства, обычно используемого людьми, которое принимает ввод от людей и выдает вывод людям.

Термин «HID» чаще всего относится к спецификации USB-HID . Этот термин был придуман Майком Ван Фландерном из Microsoft, когда он предложил комитету USB создать рабочую группу класса «Устройства ввода для человека». Рабочая группа была переименована в класс устройств интерфейса человека по предложению Тома Шмидта из DEC, поскольку предлагаемый стандарт поддерживает двунаправленную связь.

Менее распространенные HID

  • Устройства для симуляторов вождения и имитаторыполета : рычаги переключения передач, рули, педали.
  • Проводная перчатка ( Nintendo Power Glove )
  • Танцевальная площадка
  • Пульт Wii
  • Поверхностное вычислительное устройство
  • Устройство Apple Sudden Motion Sensor

СОДЕРЖАНИЕ

HID стандарт

Стандарт HID был принят в первую очередь для того, чтобы внедрить инновации в устройства ввода ПК и упростить процесс установки таких устройств. До введения концепции HID устройства обычно соответствовали строго определенным протоколам для мыши , клавиатуры и джойстика ; например, стандартный протокол мыши в то время поддерживал относительные данные по осям X и Y и двоичный ввод для двух кнопок без поддержки устаревших версий. Все аппаратные инновации требовали либо перегрузки использования данных в существующем протоколе, либо создания настраиваемых драйверов устройств и пропаганды нового протокола среди разработчиков. Напротив, все устройства, определенные HID, доставляют пакеты с самоописанием, которые могут содержать любое количество типов и форматов данных. Один драйвер HID на компьютере анализирует данные и позволяет динамически связывать ввод-вывод данных с функциональностью приложения, что позволяет быстро внедрять инновации и разработку, а также расширять ассортимент новых устройств с интерфейсом пользователя.

Рабочий комитет с представителями нескольких известных компаний разработал стандарт HID. Список участников отображается в документе «Определение класса устройств для устройств с интерфейсом пользователя (HID)». Идея расширяемого протокола с самоописанием изначально пришла от Майка Ван Фландерна и Манолито Адана во время работы над проектом под названием «Raptor» в Microsoft и независимо от Стива Макгоуэна, который работал над протоколом устройства для Access Bus в Forte . После сравнения заметок на конференции разработчиков потребительских игр Стив и Майк согласились сотрудничать в разработке нового стандарта для появляющейся универсальной последовательной шины (USB).

Протокол HID имеет свои ограничения, но все современные основные операционные системы распознают стандартные USB-устройства HID, такие как клавиатуры и мыши, без специального драйвера. После установки на экране обычно появляется сообщение о том, что «HID-совместимое устройство» было распознано ». Для сравнения, это сообщение обычно не появляется для устройств, подключенных через 6-контактные разъемы DIN PS / 2, которые предшествовали USB. PS / 2 обычно не поддерживает plug-and-play , что означает, что подключение клавиатуры или мыши PS / 2 к включенному компьютеру не всегда работает и может представлять опасность для материнской платы компьютера. Точно так же стандарт PS / 2 не поддерживает протокол HID. Класс USB-устройств с интерфейсом пользователя описывает USB HID.

Компоненты протокола HID

В протоколе HID есть 2 объекта: «хост» и «устройство». Устройство — это объект, который напрямую взаимодействует с человеком, например, клавиатура или мышь. Хост связывается с устройством и получает от устройства входные данные о действиях, выполняемых человеком. Выходные данные передаются от хоста к устройству, а затем к человеку. Наиболее распространенным примером хоста является ПК, но некоторые сотовые телефоны и КПК также могут быть хостами.

Протокол HID делает установку устройств очень простой. Устройства определяют свои пакеты данных, а затем представляют хосту «дескриптор HID». Дескриптор HID — это жестко закодированный массив байтов, который описывает пакеты данных устройства. Сюда входят: сколько пакетов поддерживает устройство, размер пакетов и назначение каждого байта и бита в пакете. Например, клавиатура с программной кнопкой калькулятора может сообщить хосту, что состояние нажатия / отпускания кнопки сохраняется как 2-й бит в 6-м байте в пакете данных номер 4 (примечание: эти местоположения являются только иллюстративными и зависят от устройства) . Устройство обычно хранит дескриптор HID в ПЗУ, и ему не нужно внутренне понимать или анализировать дескриптор HID. Некоторое оборудование для мыши и клавиатуры, представленное сегодня на рынке, реализовано с использованием только 8-битного процессора .

Ожидается, что хост будет более сложным объектом, чем устройство. Хосту необходимо получить дескриптор HID с устройства и проанализировать его, прежде чем он сможет полностью взаимодействовать с устройством. Анализ дескриптора HID может быть сложным. Известно, что многие операционные системы содержат ошибки в драйверах устройств, ответственных за анализ дескрипторов HID, спустя годы после того, как драйверы устройств были изначально выпущены для общественности. Однако эта сложность является причиной того, что возможны быстрые инновации с HID-устройствами.

Вышеупомянутый механизм описывает так называемый «протокол отчетов» HID. Поскольку было понятно, что не все хосты могут анализировать дескрипторы HID, HID также определяет «протокол загрузки». В протоколе загрузки поддерживаются только определенные устройства с определенными функциями, поскольку используются фиксированные форматы пакетов данных. В этом режиме дескриптор HID не используется, поэтому нововведения ограничены. Однако преимущество в том, что минимальная функциональность все еще возможна на хостах, которые в противном случае не смогли бы поддерживать HID. Единственные устройства, поддерживаемые в протоколе загрузки:

  • Клавиатура. Любой из первых 256 кодов клавиш («Использование»), определенных в таблицах использования HID на странице 7, может быть передан с клавиатуры с использованием протокола загрузки, но большинство систем обрабатывают только подмножество этих клавиш. Большинство систем поддерживают все 104 клавиши в макете IBM AT-101 , а также три дополнительных клавиши, разработанные для Microsoft Windows 95 (левая и правая клавиша Windows и клавиша меню ). Многие системы также поддерживают дополнительные клавиши на базовых 105-, корейских 106-, бразильских ABNT 107- и японских DOS / V 109-клавишных раскладках. Кнопки, ручки и клавиши, о которых не сообщается на странице использования 7, недоступны. Например, клавиши QWERTY на конкретной американской клавиатуре будут работать, а клавиши «Калькулятор» и «Выход из системы» — нет, потому что они определены на странице «Использование» и не могут быть указаны в протоколе загрузки.
  • Мышь — будут доступны только ось X, ось Y и первые 3 кнопки. Никакие дополнительные функции мыши работать не будут.

Обычно режим загрузки используется в первые моменты загрузки компьютера. Непосредственная настройка BIOS компьютера часто выполняется только в режиме загрузки. Иногда появляется сообщение, информирующее пользователя о том, что на устройстве установлен правильный драйвер и теперь его можно использовать.

HID определение устройства

Согласно спецификации HID, устройство описывается в режиме отчета как набор элементов управления или группа элементов управления. Элементы управления совпадают с полем, содержащим данные, и другим полем, содержащим тег использования. Каждый тег использования описан в спецификации, поскольку конструктор предложил использовать данные, описанные в режиме отчета.

Другие протоколы с использованием HID

Поскольку исходное определение HID через USB, HID теперь также используется в других компьютерных коммуникационных шинах . Это позволяет использовать HID-устройства, которые традиционно находились только на USB, на альтернативных шинах. Это сделано, поскольку существующая поддержка устройств USB HID обычно может быть адаптирована намного быстрее, чем необходимость изобретать совершенно новый протокол для поддержки мыши, сенсорной панели, клавиатуры и т.п. Известные автобусы, использующие HID:

  • Bluetooth HID — используется для мыши и клавиатур, подключенных через Bluetooth.
  • Последовательный HID — используется в приемниках дистанционного управления ПК Microsoft Windows Media Center .
  • Устройство ввода ZigBee — ZigBee ( RF4CE ) поддерживает устройства HID через профиль устройства ввода ZigBee.
  • HID over I²C — используется для встроенных устройств в Microsoft Windows 8.
  • HOGP (HID over GATT) — используется для устройств HID, подключенных с помощью технологии Bluetooth с низким энергопотреблением.

Human Interface Devices (HID)

Overview of the Human Interface Devices (HID) technology.

To develop Human Interface Devices (HID), you need these headers:

This section contains the programming interfaces related to Human Interface Devices (or HID). Typically, these are devices that humans use to directly control the operation of computer systems.

HIDClass Support Routines

There are system-supplied routines that user-mode applications, kernel-mode drivers, and HID minidrivers use to operate devices in the HIDClass device setup class.

As a general rule, user-mode applications can use the HidD_Xxx and HidP_Xxx routines. However, kernel-mode drivers can only call HidP_Xxx routines.

HID minidrivers use only the HidRegisterMinidriver routine.

For Windows 8.1 Microsoft introduced the new Windows.Devices.HumanInterfaceDevice API which lets you write Windows apps that access HID devices.

The header defines IOCTLs that a HID minidriver must support. Only the HID class driver sends these IOCTLs to a HID minidriver. User-mode applications and other kernel-mode drivers can only communicate with HID collections by using the HIDClass support routines and HID class driver ioctls.

HID Minidriver IOCTLs

A HID minidriver must handle a set of IOCTLs. Only the HID class driver sends these IOCTLs to a HID minidriver. User-mode applications and other kernel-mode drivers can only communicate with HID collections by using the HIDClass support routines and HID class driver ioctls.

Topic Description
IOCTL_HID_ACTIVATE_DEVICE The IOCTL_HID_ACTIVATE_DEVICE request activates a HIDClass device, which makes it ready for I/O operations.
IOCTL_HID_DEACTIVATE_DEVICE The IOCTL_HID_DEACTIVATE_DEVICE request deactivates a HIDClass device, which causes it to stop operations and terminate all outstanding I/O requests.
IOCTL_HID_GET_DEVICE_ATTRIBUTES The IOCTL_HID_GET_DEVICE_ATTRIBUTES request obtains a HIDClass device’s attributes in a HID_DEVICE_ATTRIBUTES structure.
IOCTL_HID_GET_DEVICE_DESCRIPTOR The IOCTL_HID_GET_DEVICE_DESCRIPTOR request obtains a HIDClass device’s HID descriptor.
IOCTL_HID_GET_REPORT_DESCRIPTOR The IOCTL_HID_GET_REPORT_DESCRIPTOR request obtains the report descriptor for a HIDClass device.
IOCTL_HID_GET_STRING The IOCTL_HID_GET_STRING request obtains a manufacturer ID, product ID, or serial number for a top-level collection. The retrieved string is a NULL-terminated wide character string in a human-readable format.
IOCTL_HID_READ_REPORT The IOCTL_HID_READ_REPORT request transfers an input report from a HIDClass device into the HID class driver’s buffer.
IOCTL_HID_WRITE_REPORT The IOCTL_HID_WRITE_REPORT request sends a HID report to a HIDClass device.
IOCTL_UMDF_GET_PHYSICAL_DESCRIPTOR The IOCTL_UMDF_GET_PHYSICAL_DESCRIPTOR control code obtains the physical descriptor of a HIDClass device.
IOCTL_UMDF_HID_GET_FEATURE The IOCTL_UMDF_HID_GET_FEATURE control code obtains a feature report from a HIDClass device.
IOCTL_UMDF_HID_GET_INPUT_REPORT The IOCTL_UMDF_HID_GET_INPUT_REPORT control code returns an input report from a HIDClass device.
IOCTL_UMDF_HID_SET_FEATURE The IOCTL_UMDF_HID_GET_FEATURE control code sends a feature report to a HIDClass device.
IOCTL_UMDF_HID_SET_OUTPUT_REPORT The IOCTL_UMDF_HID_SET_OUTPUT_REPORT control code sends an output report to a top-level collection.

HID Class Driver IOCTLs

The HID class driver handles IOCTLs to support for top-level collections.

Although user applications can communicate with the HID class driver by using HidD_Xxx HIDClass support routines, kernel-mode drivers must send the corresponding device control requests described in this section.

The input and output parameters are request-specific.

Upon completion of a request, the I/O status block members are set as follows:

The Status member is set by the HID class driver for all requests that it handles.

As described for each IOCTL, the Information member is set either by the class driver or a lower-level driver. Normally, when a lower-level driver transfers data from or to a device, the lower-level driver sets Information to the number of bytes transferred. However, the HID class driver might return a different value.

Читайте также:  Тонкий клиент astra linux
Оцените статью