Открыть сервис

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-отчётов

По типу передачи

  1. Input Report — отчёт от устройства к хосту (например, нажатие клавиши).
  2. Output Report — отчёт от хоста к устройству (например, команда включения светодиода Caps Lock).
  3. 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 →