USB обзор HID

Класс Human Interface Device (HID) является одним из нескольких классов устройства, описанных USB (Универсальная последовательная шина) архитектура. Класс HID состоит прежде всего из использования людей устройств для управления операциями компьютерной системы. Примеры таких устройств класса HID включают:

OS X предоставляет менеджеру по HID (описанный в менеджере по HID) к доступу к поддержке к любым устройствам, приспосабливающим USB спецификации HID. В то время как это обычно используется для связи с устройствами ввода данных, много других устройств также используют дескрипторы HID и могут таким образом быть получены доступ с помощью того же механизма.

Например, можно использовать менеджера по HID для получения информации от многого UPS (источник бесперебойного питания) устройства. Устройства UPS совместно используют ту же структуру дескриптора отчета как другие устройства класса HID и предоставляют информацию, такую как напряжение, текущее, и частота. Для управления устройством UPS, однако, Вы получаете доступ к информации устройства с помощью менеджера по HID функции и используете ее для управления Диспетчером электропитания, процесс, не описанный в этом документе.

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

Терминология класса HID и понятия

Информация об устройстве класса HID содержится в его дескрипторах отчета HID. Дескрипторы отчета предоставлены резидентным ядром драйвером устройства и содержат описания каждой части данных, сгенерированных устройством. Ключевой компонент этих дескрипторов отчета является информацией об использовании, определенной в USB Таблицы Использования HID. (Можно загрузить их с http://www .usb.org/developers/hidpage.) Значения использования описывают три основных типа информации об устройстве:

Взятый вместе, страница использования и число использования определяют уникальную константу, описывающую определенный тип устройства или часть того устройства. Например, на Универсальной Настольной странице использования (номер страницы 0x01), число использования 0x05 число использования и игровой планшет 0x39 переключатель шляпы.

Логически отличные компоненты устройства класса HID, такие как ось X, ось y, набор, или ползунок, вызывают элементами. Информация об элементах устройства класса HID сгруппирована в массивы вложенных словарей. Главный или внешний элемент уровня обычно описывает само устройство. Например, высокоуровневый элемент для игрового планшета включал бы страницу 0x01 использования (универсальный рабочий стол) и использование номер 0x05 (игровой планшет), сопровождаемый массивом других элементов. Для игрового планшета, содержащего и манипулятор и некоторое число кнопок, этот массив содержал бы элемент для манипулятора и элемент для каждой кнопки. В свою очередь, элемент, представляющий манипулятор, вероятно, содержал бы свой собственный массив элементов, каждый представляющий ось.

Каждый словарь элемента содержит cookie элемента (32-разрядное значение раньше ссылалось на тот определенный элемент), страница использования и число использования, тип набора, и возможно другая информация, такая как минимум и максимум элемента (например, ось X могла бы иметь минимум-127 и максимум 127), и имеет ли элемент предпочтительное состояние. Информация об элементе для всех устройств класса HID, в настоящее время присоединяемых к рабочей системе, доступна в Реестре I/O, таким образом, можно проверить, чтобы видеть, имеет ли устройство элементы, Вам нужно перед созданием интерфейса устройства для передачи с ним.

Менеджер по HID

OS X менеджер по HID состоит из трех уровней:

Как разработчик приложений, Вы будете непосредственно заинтересованы только с первым уровнем, менеджер по HID клиент API, который этот документ просто вызывает менеджера по HID. Можно получить доступ к информации о менеджере по HID от раздела Sample Code> Hardware & Drivers> Human Interface Device & Force Feedback веб-сайта документации разработчика.

Функции интерфейса устройства

Менеджер по HID включает IOHIDManager.h, IOHIDLib.h, и IOHIDKeys.h (расположенный в /System/Library/Frameworks/IOKit.framework/Headers/hid) которые определяют ключи свойства, описывающие устройство, ключи элемента, описывающие элементы устройства, и функции интерфейса устройства и структуры данных, которые Вы используете для передачи с устройством. После создания интерфейса устройства для выбранного устройства класса HID можно использовать функции интерфейса устройства, чтобы открыть и закрыть устройство, получить новое значение элемента или установить значение элемента. Для полного списка функций посмотрите IOHIDLib.h.

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

Много устаревших функций интерфейса устройства такой как getElementValue, getNextEvent, и setElementDefault используйте структуру, вызванную IOHIDEventStruct содержать информацию о событиях. (Событие является значением определенного элемента вместе со временем, это произошло.) Эти устаревшие функции, которые должны получить доступ к значению элемента, используют IOHIDEventStruct даже при том, что некоторые могут проигнорировать время, значение произошло.

Очереди

Как только Вы создали интерфейс устройства, можно использовать функции, предоставленные менеджером по HID для получения нового значения элемента. Для многих элементов это достаточно. Если, однако, необходимо отслеживать все значения элемента, а не просто новое, можно использовать функции, предоставленные менеджером по HID, чтобы создать очередь и добавить элемент к нему. Затем все события, включающие тот элемент, будут содержаться в очереди (до глубины очереди).

Например, во время игровой игры, не необходимо отслеживать каждое значение игровой оси x и y устройства, достаточно обновить состояние игры к новым значениям этих элементов. Если существует кнопка «огня», однако, важно реагировать на каждое нажатие кнопки, не только новое, таким образом, необходимо добавить кнопку «огня» к очереди. Затем каждый раз через игровой цикл, можно считать очередь, пока это не будет пусто, и Вы не пропустите событий “огня".