https://internetmetro.ru/shirokoformatnayapechat.html печать А1 - формат печать.
К классу HID (Human Interface Device) относятся устройства, обеспечивающие интерфейс между человеком и компьютером:
Для этих устройств характерен небольшой объем передаваемых данных, возникающих для компьютера спонтанно (асинхронно), и умеренные требования к задержке обслуживания. К данному классу относятся и иные устройства с похожим характером данных (считыватели штрихкода, термометры, вольтметры и т. п.). Подробно данный класс описан в документе Device Class Definition for Human Interface Devices (HID), в 2001 году вышла его версия 1.11. Класс HID допускает работу устройств на любой скорости шины USB.
Деление на подклассы учитывает только необходимость поддержки данного устройства на этапе загрузки. Специальный код протокола выделяет только клавиатуру и мышь — стандартные устройства ввода.
С HID-устройствами хост обменивается сообщениями-рапортами (report), которые могут быть трех типов (Report Type):
Если устройство способно обмениваться разнообразными (не по типу, а по назначению) рапортами, то каждый рапорт начинается с байта идентификатора рапорта (Reprt ID). Например, комбинация клавиатуры с указателем может давать как рапорты нажатий клавиш, так и рапорты устройства-указателя.
Интерфейс HID-устройства обеспечивает двунаправленный обмен рапортами между устройством и драйвером. В нем имеется:
HID-устройства имеют специальный классовый HID-дескриптор, ссылающийся на дескриптор рапортов и набор физических дескрипторов (указываются тип и длина этих дескрипторов, что позволяет получить их по запросу Get_Descriptor).
Дескриптор рапорта представляет собой сложную структуру, описывающую передаваемые данные: назначение (ввод, вывод или управление свойствами), использование, диапазон допустимых значений, размер… Эта информация нужна драйверу HID-устройств, разбирающему (и собирающему) рапорты. Драйвер содержит модуль Item Parser, разбирающий, какому приложению следует передать тот или иной рапорт. Без должного дескриптора рапорта приложение рапорт ни принять, ни послать не сможет.
Набор физических дескрипторов описывает, какой частью тела человек воздействует на тот или иной орган управления. Эти дескрипторы необязательны и сообщаются не многими устройствами; они вносят дополнительные сложности в описание, хотя позволяют приложениям точнее использовать те или иные органы.
HID-устройства поддерживают все стандартные запросы к устройствам и специфические запросы, приведенные в таблице.
Запрос | bmRequestType | bRequest |
Get_Report | 10100001 | 01 |
Get_Idle | 10100001 | 02 |
Get_Protocol | 10100001 | 03 |
Set_Report | 00100001 | 09 |
Set_Idle | 00100001 | 0A |
Set_Protocol | 00100001 | 0B |
Запросы Get_Report и Set_Report служат для приема и передачи рапортов через EP0. Здесь в поле wValue старший байт задает тип рапорта, младший — его идентификатор. В поле wIndex задается номер интерфейса, поле wLength задает длину рапорта, который передается в фазе данных.
Запрос Set_Idle позволяет управлять подачей рапортов по каналу прерываний в случае отсутствия изменений состояния рапортуемых величин. Здесь в поле wValue старший байт задает длительность молчания в покое (idle duration), младший — идентификатор рапорта. В поле wIndex задается номер интерфейса, поле wLength = 0 (фаза данных отсутствует). Если задана нулевая длительность, то устройство будет передавать рапорты только в случае изменений состояния (что требуется, например, для клавиатуры). Ненулевое значение трактуется как длительность интервала (в 4-миллисекундных единицах), в течение которого точка Interrupt-IN отвечает на опросы NAK’ами, если нет изменений состояния. Так, например, можно уменьшить поток «пустых» данных опроса устройств-указателей (мыши или джойстика), не теряя быстроты реакции на события (задаваемая длительность и bInterval, задающий частоту опроса точки Interrupt-IN, независимы).
Запрос Get_Idle позволяет считать текущее значение длительности для рапорта, идентификатор которого задан в младшем байте поля wValue. В поле wIndex задается номер интерфейса, поле wLength = 1 (принимается один байт данных).
Запрос Set_Protocol (только для устройств, участвующих в начальной загрузке) позволяет переключать протокол работы устройства. Тип протокола задается в поле wValue: 0 — протокол (упрощенный), используемый при загрузке (Boot Protocol); 1 — нормальный протокол рапортов (Report Protocol). В поле wIndex задается номер интерфейса, поле wLength = 0.
Запрос Get_Protocol позволяет определить текущий протокол. В поле wIndex задается номер интерфейса, поле wLength=1 (принимается один байт данных).