Введение

Компьютерное устройство, принимающее ввод от человека и выдающее вывод для человека.

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

HID для вывода:
Компьютерный монитор
Обновляемый брайлевский дисплей
Громкоговорители
Гарнитура
Хаптические технологии

Распространенные HID:
Клавиатура и обновляемый брайлевский дисплей
Устройства указания: мышь, трекбол, тачпад, трекпоинт, световое перо
Сенсорный экран
Считыватель магнитной полосы
Графический планшет
Джойстик, геймпад, аналоговый стик
Веб-камера
Сканер отпечатков пальцев

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

Стандарт HID

Стандарт HID был принят прежде всего для стимулирования инноваций в устройствах ввода для ПК и упрощения процесса их установки. До появления концепции HID устройства обычно соответствовали строго определенным протоколам для мышей, клавиатур и джойстиков; например, стандартный протокол мыши того времени поддерживал относительные данные по осям X и Y и двоичный ввод для максимум двух кнопок, без поддержки устаревших устройств. Любые аппаратные инновации требовали либо перегрузки использования данных в существующем протоколе, либо создания пользовательских драйверов и продвижения нового протокола среди разработчиков. В отличие от этого, все устройства, соответствующие стандарту HID, предоставляют самоописываемые пакеты, которые могут содержать любое количество типов и форматов данных. Один HID-драйвер на компьютере анализирует данные и обеспечивает динамическое связывание ввода-вывода данных с функциональностью приложения, что позволило быстро внедрять инновации и развиваться, а также значительно расширить ассортимент новых устройств человеко-машинного интерфейса. Стандарт HID был разработан рабочим комитетом с участием представителей нескольких известных компаний. Список участников приведен в документе "Определение класса устройств для устройств с человеческим интерфейсом (HID)". Идея самоописываемого расширяемого протокола впервые возникла у Майка Ван Фландерна и Манолито Адана во время работы над проектом "Raptor" в Microsoft, а независимо от них – у Стива Макгоуэна, который работал над проектом "SIM", определившим протокол устройства для VR-гарнитуры VFX1 и ее периферийных устройств на базе шины ACCESS, будучи сотрудником Forte Technologies. SIM также был самоописываемым и расширяемым, однако он был больше ориентирован на устройства моделирования, используемые для виртуальной реальности и захвата движения. После обмена информацией на конференции разработчиков потребительских игр Стив и Майк договорились о сотрудничестве над новым стандартом для новой универсальной последовательной шины (USB). До появления HID (ок. 1995 г.) для почти каждого устройства, подключаемого к ПК, требовалась установка проприетарных драйверов. Это означало, что производителям устройств необходимо отслеживать выпуски операционных систем, регулярно предлагать обновленные драйверы для своих устройств и разрабатывать драйверы для каждой операционной системы, которую они хотели поддерживать. Кроме того, любые новые устройства, например, джойстики для авиасимуляторов с дополнительными кнопками или D-pad, требовали программной поддержки не только от драйвера, но и от каждой игры, которая их поддерживала, для обеспечения новых элементов управления. Это возлагало на разработчиков устройств дополнительную ответственность за поддержку каждой игры, которую они хотели поддерживать. Возможность устройства HID самоописываться с помощью дескриптора отчета отделила разработчиков аппаратного обеспечения от разработчиков игр. Концепция дескриптора отчета также означала, что производители операционных систем могли написать HID-драйвер (парсер), который мог бы поддерживать практически любое устройство HID, которое только можно было придумать, без необходимости писать или поддерживать драйвер для каждой операционной системы, которую они хотели поддерживать. Таким образом, класс HID отделил производителей устройств от производителей игр и операционных систем, что позволило производителям устройств быстрее внедрять инновации и снижать затраты на разработку (например, отсутствие необходимости в драйверах или поддержке разработчиков игр). В документе "Таблица использования HID" определены тысячи элементов управления, которые могут предоставлять устройства HID. Производители игр могут запрашивать HID-парсер операционной системы, чтобы определить набор элементов управления, предоставляемых устройством, а затем сопоставить эти элементы управления с функциями в своей игре. С момента своего первоначального выпуска в документ "Таблица использования HID" (HUT) было добавлено сотни новых применений. Протокол HID имеет свои ограничения, но все современные основные операционные системы распознают стандартные USB HID-устройства, такие как клавиатуры и мыши, без необходимости в специализированном драйвере. Однако его универсальность подтверждается тем фактом, что он не обновлялся более 22 лет и по-прежнему поддерживается каждым ПК, планшетом и мобильным телефоном, выпускаемым сегодня. USB, а следовательно, и HID-устройства, можно подключать и отключать на ходу, поэтому при установке на экране обычно появляется сообщение о том, что "Устройство, совместимое с HID, было распознано". В отличие от этого, такое сообщение обычно не появлялось для устройств, подключенных через 6-контактные разъемы PS/2, которые предшествовали USB. PS/2 обычно не поддерживал Plug and Play, что означает, что подключение клавиатуры или мыши PS/2 при включенном компьютере не всегда работает и может представлять опасность для материнской платы компьютера. Кроме того, стандарт PS/2 не поддерживал протокол HID. Класс USB human interface device описывает USB HID. Протокол HID (дескриптор отчета и механизм отчета) был реализован на многих шинах, отличных от USB, включая Bluetooth и I2C. Существуют также многочисленные расширения HID, определенные в документах "HID Integrated Usage Table Documents", включая источники бесперебойного питания, элементы управления видеомониторами, устройства для точек продаж, аркадные и игровые (игровые автоматы) устройства.

Описание отчетов

Описатель отчетов раскрывает сообщения, генерируемые или принимаемые HID-устройством. Каждое сообщение называется «отчетом». Отчеты могут определять биты/управления в устройстве, которые можно читать или записывать, или генерировать периодически для информирования хоста о текущем состоянии устройства. Например, мышь обычно генерирует отчет 200 раз в секунду, чтобы сообщить хосту о любых движениях или нажатиях кнопок. Описатели отчетов «битоориентированы», то есть элементы управления могут представлять от 1 до 32 бит информации. Каждый элемент управления, определенный в описателе отчета, имеет идентификатор и определяет его размер и положение в отчете. Описатель отчетов может определять множество отчетов, каждый из которых сообщает о различном наборе или комбинации информации. Например, базовая мышь определяет 3-байтовый отчет, где наименее значимый (0) бит отчета соответствует левой кнопке, следующий (1) бит – средней кнопке, а третий (2) бит – правой кнопке. Чтобы 8-битные координаты X и Y мыши удобно располагались по границам байтов, определяется 5-битная «заглушка». Затем координата X определяется как 8-битное относительное значение (то есть количество «микки» с предыдущего отчета), которое находится в битовых позициях 8–15, а координата Y определяется как 8-битное относительное значение, которое находится в битовых позициях 16–24, в результате чего пакет данных передается хосту. Описатель отчетов чрезвычайно универсален, позволяя устройству определять разрешение, диапазон и многие другие характеристики каждого элемента управления, который оно предоставляет. Разработанный в то время, когда контроллеру мыши или клавиатуры повезло иметь 1 КБ ПЗУ для всего своего кода и данных, синтаксис описателя отчетов имеет множество функций, позволяющих минимизировать его размер, например, выбранные параметры управления могут сохраняться в нескольких определениях управления, требуя повторного объявления только при изменении их значения. Отчеты, генерируемые базовой мышью, могут быть описаны 50 байтами, а 104-клавишная клавиатура – 65 байтами.

Физический дескриптор

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

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

В протоколе HID существует 2 сущности: "хост" и "устройство". Устройство – это сущность, которая непосредственно взаимодействует с человеком, например, клавиатура или мышь. Хост взаимодействует с устройством и получает от него входные данные о действиях, выполняемых человеком. Выходные данные передаются от хоста к устройству, а затем к человеку. Наиболее распространенным примером хоста является ПК, но некоторые сотовые телефоны и КПК также могут выступать в роли хостов. Протокол HID значительно упрощает реализацию устройств. Устройства определяют свои пакеты данных, а затем предоставляют хосту "дескриптор HID". Дескриптор 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 определенной американской клавиатуры будут функционировать, но клавиши "Калькулятор" и "Выход из системы" не будут, поскольку они определены на странице использования 12 и не могут быть зарегистрированы в протоколе загрузки. Мышь – Доступны только оси X и Y, а также первые 3 кнопки. Любые дополнительные функции мыши не будут работать. Одно из распространенных применений режима загрузки – первые моменты последовательности загрузки компьютера. Прямая настройка BIOS компьютера часто выполняется только в режиме загрузки. Иногда появляется сообщение, информирующее пользователя о том, что устройство установило правильный драйвер и теперь готово к использованию.

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

Согласно спецификации HID, устройство в режиме передачи отчетов описывается как набор элементов управления или группа элементов управления. Элементы управления сопоставляются с полем, содержащим данные, и другим полем, содержащим тег использования. Каждый тег использования в спецификации описывается как рекомендуемое назначение данных, представленных в режиме передачи отчетов. Это приложение для Windows, которое позволяет генерировать все дескрипторы, связанные с HID-устройством (см. ссылку ниже). Оно выполняет синтаксическую проверку и может генерировать файлы на C, заголовочные файлы C и бинарные файлы для HID-дескрипторов. Его текстовые файлы определения таблицы использования также можно легко расширить для определения собственных применений (типов управления) или таблиц использования (набора применений, связанных с устройством или функцией).