HID-отчёт
HID-отчёт — это структурированный блок данных, передаваемый от устройства ввода (клавиатуры, мыши, джойстика, сенсорной панели) к хост-системе (компьютеру, смартфону, игровой консоли) по протоколу HID (Human Interface Device). Отчёт содержит текущее состояние элементов управления устройства (нажатых кнопок, положения осей, уровня сигнала датчиков) в формате, определённом дескриптором отчёта (Report Descriptor). HID-отчёты являются основным механизмом обмена данными в USB- и Bluetooth-устройствах ввода, обеспечивая универсальную совместимость без необходимости установки драйверов для каждого конкретного устройства.
История
Протокол HID был разработан в рамках спецификации USB-IF (USB Implementers Forum) и впервые представлен в версии 1.0 в 1996 году. Его создание было вызвано необходимостью стандартизации взаимодействия разнородных устройств ввода (клавиатур, мышей, джойстиков) с персональными компьютерами. До появления HID каждое устройство требовало собственного драйвера, что усложняло разработку и эксплуатацию.
В 2001 году протокол HID был адаптирован для беспроводной связи Bluetooth (HID over GATT), что позволило использовать беспроводные клавиатуры и мыши без дополнительных адаптеров. С развитием USB-стандарта (USB 2.0, USB 3.0) и появлением новых типов устройств (тачпады, сенсорные экраны, игровые рули) формат HID-отчётов расширялся, но базовая структура осталась неизменной.
Структура HID-отчёта
HID-отчёт представляет собой последовательность байтов, каждый из которых кодирует определённое состояние элемента управления. Формат отчёта строго регламентируется дескриптором отчёта — метаданными, которые устройство передаёт хосту при подключении. Дескриптор описывает:
- Размер отчёта (в байтах).
- Типы данных: кнопки (битовые поля), оси (целые числа со знаком или без), датчики (фиксированная или плавающая точка).
- Диапазоны значений (например, ось X мыши от 0 до 255).
- Порядок следования полей.
Типовой HID-отчёт для клавиатуры (USB HID Keyboard) имеет длину 8 байт:
- Байт 0: модификаторы (Ctrl, Shift, Alt, Win) — битовая маска.
- Байт 1: зарезервирован (обычно 0).
- Байты 2–7: коды нажатых клавиш (до 6 одновременно, по стандарту Boot Protocol).
Для мыши отчёт обычно содержит 3–5 байт:
- Байт 0: состояние кнопок (битовая маска: левая, правая, средняя).
- Байты 1–2: относительное перемещение по оси X (целое со знаком).
- Байты 3–4: относительное перемещение по оси Y.
- Дополнительно: колёсико прокрутки (байт 5).
Классификация HID-отчётов
По типу передачи
- Input Report — отчёт от устройства к хосту (например, нажатие клавиши).
- Output Report — отчёт от хоста к устройству (например, команда включения светодиода Caps Lock).
- Feature Report — двунаправленный отчёт для чтения/записи конфигурационных параметров (например, настройка чувствительности мыши).
По протоколу
- USB HID Report — передаётся по USB-шине через прерывающие (interrupt) или управляющие (control) транзакции.
- Bluetooth HID Report — передаётся по протоколу HID over GATT (Generic Attribute Profile) в Bluetooth Low Energy (BLE) или по классическому Bluetooth (RFCOMM).
- I²C HID Report — используется в устройствах, подключаемых по шине I²C (например, тачпады в ноутбуках).
По режиму работы
- Boot Protocol — упрощённый режим, используемый на этапе загрузки BIOS/UEFI. Отчёты имеют фиксированный формат (8 байт для клавиатуры, 3 байта для мыши) и не требуют дескриптора.
- Report Protocol — полноценный режим с произвольным форматом, определяемым дескриптором.
Применение
Компьютерные периферийные устройства
HID-отчёты используются в подавляющем большинстве проводных и беспроводных клавиатур, мышей, трекболов, графических планшетов, веб-камер (для управления зумом и фокусом) и игровых контроллеров (геймпады, рули, джойстики). Благодаря стандартизации, любое HID-совместимое устройство может быть распознано операционной системой (Windows, macOS, Linux) без установки драйвера.
Промышленные и медицинские устройства
В промышленности HID-отчёты применяются в сканерах штрих-кодов, считывателях RFID-меток, терминалах сбора данных и панелях оператора. В медицине — в хирургических манипуляторах, диагностических датчиках и интерфейсах управления медицинским оборудованием.
Игровые и VR-устройства
Современные игровые контроллеры (например, Xbox, PlayStation, Nintendo Switch) передают HID-отчёты с частотой до 1000 Гц, обеспечивая минимальную задержку. В виртуальной реальности HID-отчёты используются для трекеров движения, контроллеров и тактильных перчаток.
Ограничения и критика
- Ограниченная пропускная способность: USB HID-отчёты передаются через прерывающие транзакции, максимальная частота которых ограничена скоростью шины (до 1 кГц для USB 1.1, до 8 кГц для USB 3.0). Для высокоскоростных устройств (например, игровых мышей с частотой опроса 8000 Гц) это может быть недостаточно.
- Фиксированный размер отчёта: Дескриптор задаёт точный размер отчёта, что неэффективно для устройств с переменным числом элементов (например, клавиатура с разным количеством нажатых клавиш).
- Сложность для сложных устройств: Для устройств с большим числом осей (например, симуляторы полёта) HID-отчёты могут становиться громоздкими, а дескрипторы — сложными для реализации.
- Отсутствие гарантии доставки: USB HID-отчёты передаются без подтверждения (best-effort), что может приводить к потере пакетов при помехах (особенно в Bluetooth-соединениях).
Интересные факты
- HID-отчёты могут использоваться для атак на компьютерные системы: например, эмуляция клавиатуры через USB-устройство (BadUSB) позволяет вводить команды без ведома пользователя. Для защиты от таких атак применяются аппаратные блокираторы USB-портов и программные фильтры.
- В операционной системе Linux HID-отчёты обрабатываются подсистемой
hid(ядро) и пользовательскими библиотеками (libhid, hidapi). В Windows — драйверомhidclass.sys. - Стандарт HID допускает создание виртуальных устройств, которые генерируют HID-отчёты программно (например, для эмуляции джойстика в играх).
Источники
- USB Implementers Forum. Universal Serial Bus Device Class Definition for Human Interface Devices (HID), Version 1.11, 2001.
- Bluetooth SIG. HID over GATT Profile Specification, Version 1.0, 2012.
- Microsoft Corporation. HID Architecture (документация Windows Driver Kit).
- Linux Kernel Documentation. HID Subsystem (kernel.org).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →