Usb hid pos что это
Класс USB HID - это стандартный класс USB-устройств, который включает в себя множество устройств. Устройство HID определяет его как устройство для взаимодействия человека с компьютером, используемое для управления некоторыми аспектами работы компьютера, такими как USB-мышь, USB-клавиатура, игровой USB-джойстик и т. Д. Однако оборудование HID не обязательно требует интерфейса человек-машина, если оборудование, соответствующее спецификации категории HID, является оборудованием HID.
Одним из преимуществ устройств USB HID является то, что операционная система поставляется с драйверами HID, и пользователям не нужно разрабатывать драйверы, если они используют системные вызовы API для завершения взаимодействия.
Он содержит две наиболее важные инструкции:
1. 《Device Class Definition for human interface device (HID)》
2. 《Universal Serial Bus HID Usage Tables》
Документ 1 описывает базовый состав и формат HID, а документ 2 является дополнением к документу 1, в котором перечислены основные компоненты различных устройств HID.
Основываясь на введении базового протокола USB в предыдущей главе, в этой главе основное внимание уделяется классам взаимодействия человека и компьютера HID. (Базовый протокол USB-связи доступен по умолчанию)
2.1 Канал связи USB HID устройства
Все устройства HID связываются с хостом через канал управления USB (канал по умолчанию, конечная точка 0) и канал прерывания (конечная точка 1 или конечная точка 2).
Описание запроса конвейера
Выход прерывания Дополнительно Передача выходных данных с хоста на устройство
Примечание. USB-хост - это ПК и USB-устройства, такие как мышь. В описании конечной точки прерывания указан временной интервал опроса хоста. То есть хост будет «запрашивать» данные через определенные промежутки времени.
Конвейер управления в основном используется в следующих трех аспектах
- Получение / ответ на запрос управления USB-хостом и связанные данные
- Передавать данные, когда USB-хост запрашивает (например, отвечает на запрос Get_Report и т. Д.)
- Получать данные с USB-хоста
Конвейер прерывания в основном используется в следующих двух аспектах
- USB-хост получает данные асинхронной передачи от USB-устройства
- USB-хост отправляет данные в реальном времени на USB-устройство.
Передача выходных данных прерывания от USB-хоста к USB-устройству является необязательной.Когда выходные данные прерывания не поддерживаются, USB-хост передает данные на USB-устройство через канал управления.
Выберите EndPoint и перенесите данные
Фактический маршрут отправки (этап подготовки данных)
Фактический маршрут отправки выглядит следующим образом:
USBD_CUSTOM_HID_SendReport -->USBD_LL_Transmit–>HAL_PCD_EP_Transmit -->USB_EPStartXfer
USBD_CUSTOM_HID_SendReport
Функция USBD_LL_Transmit, которую он вызывает, полезно только одно предложение
HAL_PCD_EP_Transmit
USB_EPStartXfer
В этой функции в основном устанавливаются USB_OTG_DOEPTSIZ_XFRSIZ и USB_OTG_DOEPTSIZ_PKTCNT,
USBx_INEP(ep->num)->DIEPTSIZ |= (USB_OTG_DIEPTSIZ_PKTCNT & (((ep->xfer_len + ep->maxpacket -1U)/ ep->maxpacket)
Возьмем предыдущий пример, maxpacket = CUSTOM_HID_EPIN_SIZE = 2, что означает, что может быть передано максимум 2 КБ. В этом примере xfer_len = 5 = XFRSIZ байтов,
PKCNT = (ep->xfer_len + ep->maxpacket -1U) / ep->maxpacket = 6/2 = 3
Наконец вызов прерывания
USBx_INEP(ep->num)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
Для отправки данных необходимо понимать, что, когда данные отправляются вне контроля пользователя, это можно увидеть с помощью инструмента захвата пакетов, что связано с конкретной ситуацией связи хоста.
Step-by-step
HAL_PCD_DataInStageCallback(hpcd, epnum);
Здесь hpcd - это hpcd_USB_OTG_FS,
USBD_LL_DataInStage((USBD_HandleTypeDef*)hpcd->pData, epnum, hpcd->IN_ep[epnum].xfer_buff);
Пока все готово, и тогда функция прерывания HAL_PCD_IRQHandler вызовет PCD_WriteEmptyTxFifo для передачи данных.
И PCD_WriteEmptyTxFifo, наконец, вызывает функцию USB_WritePacket.
USB_WritePacket(USBx, ep->xfer_buff, epnum, len, hpcd->Init.dma_enable);
PCD_WriteEmptyTxFifo
Обратите особое внимание на то, что len32b здесь имеет дело с 32-битным выравниванием.В справочном руководстве 34.16 OTG_FS регистры управления и состояния все регистры, включая DFIFO, требуют выравнивания 32-битного блока.
Последний send-USB_WritePacket
Как и в случае с предыдущей функцией, здесь также обрабатывается 32-битное выравнивание.Каждый раз USBx_DFIFO отправляет 4 байта данных, а последние менее 4 байтов также отправляются с 4 байтами. Из функций PCD_WriteEmptyTxFifo и USB_WritePacket видно, что чем больше параметр maxpacket, тем выше скорость отправки, поскольку это может значительно сэкономить время определения размера данных.
Другой момент заключается в том, что объем данных, отправленных за один раз, не имеет ничего общего с maxpacket (на самом деле, правильность отправки и получения больше зависит от дескриптора отчета HID). Функция maxpacket заключается только в том, чтобы определять размер данных, записываемых в DFIFO каждый раз. Готовый еще будет рассылаться до конца. Что касается того, когда и сколько чип отправит после записи в FIFO, все это связано с конструкцией оборудования и не может контролироваться пользователем.
По сути, то, сколько данных может быть записано в DFIFO за один раз, определяется USB_OTG_DTXFSTS_INEPTFSAV, поэтому его необходимо постоянно проверять в программе. while (((USBx_INEP(epnum)->DTXFSTS & USB_OTG_DTXFSTS_INEPTFSAV) > len32b) ,
USBx_DFIFO (i) - регистр передачи данных
Точно так же давайте посчитаем, к какому USBx_DFIFO относится, предполагая, что i = 1,
Следовательно, USBx_DFIFO (1) = 0x50001000U + 1 * 0x1000
Это в точности карта регистра доступа Data FIFO (DFIFO), упомянутая в руководстве 34.6.1.
hUsbDeviceFS
Тип структурной переменной - USBD_HandleTypeDef,
/* USB Device Core handle declaration. */
USBD_HandleTypeDef hUsbDeviceFS;
Обратите внимание, что это глобальная переменная, используемая нашим USB, которая сохраняет всю информацию о жизненном цикле USB.
2.2 Дескрипторы, относящиеся к USB HID устройствам
В дополнение к пяти стандартным дескрипторам USB (дескриптор устройства, дескриптор конфигурации, дескриптор интерфейса, дескриптор конечной точки, строковый дескриптор), дескрипторы устройства HID также включают три дескриптора, зависящих от класса устройства HID: Дескриптор HID, дескриптор отчета (Отчет), дескриптор объекта (Физический) 。
Иерархическая взаимосвязь между ними показана на рисунке:
Можно видеть, что на уровне Interface desc указано HID desc.
В дополнение к трем конкретным дескрипторам HID, которые составляют интерпретацию устройств HID, к устройствам HID относятся пять стандартных дескрипторов:
- Дескриптор устройства : bDeviceClass, bDeviceSubClass, bDeviceProtocolТри значения должны быть 0
- Дескриптор интерфейса : bInterfaceClass Значение должно быть 0x03,bInterfaceSubClass Имеет значение 0 или 1 , 1 указывает, что HID-устройство является загрузочным устройством (BootDevice, обычно значимым для ПК, что означает, что BIOS может распознать HID-устройство, которое вы используете при загрузке, и только стандартную мышь или клавиатуру можно назвать BootDevice), 0 указывает устройство HID. Операционная система может распознавать используемое устройство только при загрузке. bInterfaceProtocol Смысл значения следующий:
0 — No Sub Class
1 — Boot Interface SubClass
USBx_OUTEP(i)
Точно так же давайте посчитаем, к какому USBx_OUTEP относится, предполагая, что x = 3,
Следовательно, USBx_OUTEP (15) = 0x50000B00U + 3 * 0x20
В функции прерывания приема и отправки HAL_PCD_IRQHandler первый проход
USB_ReadDevOutEPInterrupt (или USB_ReadDevInEPInterrupt)
Определите, из какой конечной точки исходит прерывание (всего 16),
USB_ReadDevOutEPInterrupt или USB_ReadDevInEPInterrupt для подтверждения следующего кода:
epint = USB_ReadDevOutEPInterrupt(hpcd->Instance, epnum);
epint = USB_ReadDevInEPInterrupt(hpcd->Instance, epnum);
Конкретный код реализации выглядит следующим образом:
STM32F4xx исходный код библиотеки usb подробный пользовательский HID
Сначала я перечислю несколько отличных справочных документов:
Keil USB documentation
Введение в базовые знания USB
Зарегистрировать маршрут
Эта структурная переменная передается
USBD_RegisterClass(&hUsbDeviceFS, &USBD_CUSTOM_HID);
Зарегистрируйтесь в глобальных переменных
USBD_HandleTypeDef hUsbDeviceFS;
, который часто называют
hUsbDeviceFS->pClass (pdev->pClass)
Проблема направления передачи
Он специально указан здесь, потому что передача всегда относится к HOST. Для устройства IN означает вывод на HOST (IN - это ввод для HOST, а вывод для DEVICE) OUT принимает.
Таблицы использования
Рабочая группа USB-IF публикует таблицы использования HID, которые являются частью дескрипторов отчетов, описывающих, что разрешено выполнять HID-устройства. Эти таблицы использования HID содержат список с описаниями использования, описывающими целевое значение и использование определенного элемента, описанного в дескрипторе отчета. Например, для левой кнопки мыши определено использование. Дескриптор отчета может определять, где в отчете приложение может найти текущее состояние левой кнопки мыши. Таблицы использования разбиваются на несколько пространств имен, которые называются страницами использования. На каждой странице использования описывается набор взаимосвязанных применений, помогающих организовать документ. Сочетание страницы использования и использования определяет идентификатор использования, который однозначно определяет конкретное использование в таблицах использования.
USBD_CUSTOM_HID
Тип структурной переменной - USBD_ClassTypeDef, который определяется следующим образом:
Windows мобильных устройств со встроенным сканером штрихкодов
Изготовитель | Моделирование | Операционная система |
---|---|---|
Bluebird | EF400 | Windows Mobile |
Bluebird | EF500 | Windows Mobile |
Bluebird | EF500R | Windows Mobile |
Honeywell | CT50 | Windows Mobile |
Honeywell | D75e | Windows Mobile |
Janam | XT2 | Windows Mobile |
Panasonic | FZ-E1 | Windows Mobile |
Panasonic | FZ-F1 | Windows Mobile |
PointMobile | PM80 | Windows Mobile |
Зебра | TC700j | Windows Mobile |
HP | Элитная куртка X3 | Windows Mobile |
Дисплей для клиента (LineDisplay)
Поддерживает все совместимые с OPOS дисплеи для клиентов через служебные объекты OPOS, предоставляемые производителем. Установите драйверы OPOS согласно инструкциям производителя устройства.
USBD_CUSTOM_HID_Init
В этой функции USBD_LL_OpenEP полезно только одно предложение,
Так что действительно работает только функция HAL_PCD_EP_Open.
Функция передачи
USBD_CUSTOM_HID_DataIn
Здесь снова, относительно устройства, IN означает отправку. Как упоминалось ранее, функция отправки - USBD_CUSTOM_HID_DataIn,
Однако обратите внимание, что этот USBD_CUSTOM_HID_DataIn, похоже, ничего не делает, поэтому давайте еще раз подумаем об этом: где данные и как они отправляются?
Фактически, эта функция вызывается во время процесса отправки прерывания HAL_PCD_IRQHandler, мы увидим позже
USBD_EndpointTypeDef(ep_in/ep_out)
Настройки трансмиссии
USBD_HandleTypeDef
Каждая конечная точка (ep_in / ep_out) имеет свою собственную конфигурацию, тип - USBD_EndpointTypeDef,
Чековый принтер (POSPrinter)
Windows поддерживает сетевые и подключенные по Bluetooth чековые принтеры с использованием языка управления принтерами Epson ESC/POS. Указанные ниже принтеры обнаруживаются автоматически с помощью API POSPrinter. Дополнительные принтеры квитанций, обеспечивающие эмуляцию ESC/POS, также могут работать, но необходимо связать с помощью процесса связывания аппаратного контроллера .
Примечание. Этот метод не поддерживает бланковые и журнальные станции.
Поддерживает любые совместимые с OPOS чековые принтеры через служебные объекты OPOS. Установите драйверы OPOS согласно инструкциям производителя устройства.
Сканеры штрихкодов можно настроить в нескольких различных режимах для поддержки определенных приложений.
Маршрут звонка
Режим передачи и объем данных устанавливаются при инициализации USB.Маршрут вызова функции следующий:
OTG_FS_IRQHandler --> HAL_PCD_IRQHandler --> HAL_PCD_SetupStageCallback --> USBD_LL_SetupStage --> USBD_StdDevReq --> USBD_SetConfig --> USBD_SetClassConfig --> USBD_CUSTOM_HID_Init --> USBD_LL_OpenEP --> HAL_PCD_EP_Open
Примечание: pClass в USBD_SetClassConfig упоминал ранее, что if (pdev-> pClass-> Init (pdev, cfgidx) вызывает USBD_CUSTOM_HID_Init.
Понять дескрипторы слова конфигурации
Windows устройства со встроенным сканером штрихкодов
Изготовитель | Моделирование | Операционная система |
---|---|---|
Innowi | ChecOut-M | Windows 10 |
2.2.1 Дескриптор HID
Дескриптор HID связан с дескриптором интерфейса, поэтому, если устройство имеет только один дескриптор интерфейса, независимо от того, сколько дескрипторов конечных точек оно имеет, устройство HID имеет только один дескриптор HID. Дескриптор устройства HID в основном описывает номер версии спецификации HID, дополнительные дескрипторы, используемые при обмене данными HID, и длину дескриптора отчета. В следующей таблице показана структура дескриптора HID.
Смещение | площадь | Размер (байт) | ценность | описание |
0 | bLength | 1 | цифровой | Длина этого дескриптора в байтах |
1 | bDescriptorType | 1 | постоянный | Тип дескриптора (здесь 0x21 Категория HID) |
2 | bcdHID | 2 | цифровой | Номер версии спецификации HID (код BCD) с использованием 4-х шестнадцатеричных кодов формата BCD |
4 | bCountryCode | 1 | цифровой | Идентификационный код страны назначения оборудования |
5 | bNumDescriptors | 1 | цифровой | Количество поддерживаемых вспомогательных дескрипторов |
6 | bDescriptorType | 1 | постоянный | Типы дескрипторов, связанных с HID, см. В таблице ниже |
7 | wDescriptorLength | 2 | цифровой | Сообщите общую длину дескриптора |
9 | bDescriptorType | 1 | постоянный | Константа, используемая для определения типа дескриптора, используйте устройство с более чем одним дескриптором |
10 | wDescriptorLength | 2 | цифровой | Общая длина дескриптора, используемого в устройствах с более чем одним дескриптором. |
Значение типа дескриптора |
---|
Производитель | Модели | Номер детали |
---|---|---|
IDTech | SecureMag (VID:0ACD PID:2010) | IDRE-3x5xxxx |
MiniMag (VID:0ACD PID:0500) | IDMB-3x5xxxx | |
Magtek | MagneSafe (VID:0801 PID:0011) | 210730xx |
Dynamag (VID:0801 PID:0002) | 210401xx |
Windows поддерживает внедрение дополнительных драйверов от определенных поставщиков для поддержки дополнительных считывателей магнитных карт. Наличие дополнительных драйверов уточняйте у изготовителя считывателя магнитных карт. Производители магнитных полос читателя пожалуйста, обратитесь к руководству по проектированию драйвера для чтения магнитной полосы, чтобы получить информацию о создании пользовательского драйвера чтения магнитной полосы.
Сколько там конечных точек
В микросхемах серии STM32F407 / 417/27/37/29/39 количество двунаправленных EP, включая EP0, составляет всего 4 вместо 16. Этому месту следует уделить особое внимание, но для общности программы в HAL_PCD_IRQHandler опрашиваются 16 конечных точек.
Для получения более конкретной и подробной информации рекомендуется обратиться к "STM-AN4879》,
Режим клина клавиатуры
Многие сканеры штрихкодов поддерживают режим ввода с клавиатуры , в результате чего сканер штрихкода отображается как клавиатура для Windows. это позволяет сканировать штрихкоды в приложениях, не поддерживающих сканер штрих-кодов, например Блокнот. При сканировании штрихкода в этом режиме декодированные данные со сканера штрихкодов вставляются в точку вставки, как будто бы вы ввели эти данные с клавиатуры. Если вы хотите в большей степени контролировать сканер штрихкодов из своего приложения UWP, вам понадобится настроить его в другом режиме.
PCD_EPTypeDef (IN_ep/OUT_ep)
CUSTOM_HID_ReportDesc_FS
- В каждой транзакции максимальный пакет для полной скорости составляет всего 64 байта, а максимум для низкой скорости - 8 байтов; каждая миллисекунда (за миллисекунду) инициирует транзакцию, поэтому количество байтов, передаваемых в секунду, FullSpeed составляет около 64 КБ, LowSpeed составляет около 8 КБ. ,
- Только ввод может быть отправлен конвейером прерывания, а вывод и функция должны быть инициированы хостом через конвейер управления. (HID1.11chapter5.6)
- Если REPORT_ID используется в дескрипторе отчета, первым байтом буфера данных USB-отправки должен быть REPORT_ID, чтобы сообщить системе Windows / Linux, к какому идентификатору принадлежат данные, в противном случае система не сможет нормально получить данные;
- Когда нижний компьютер выгружает данные, он должен передавать в соответствии с количеством байтов, указанным в дескрипторе отчета. Если он был задан как 64 байта, и у нижнего компьютера есть только 10 байтов для отправки на хост в определенное время, то количество байтов в фактически отправленном буфере также должно быть 64 байта, а не только 10 байтов. Что касается завершения этих 64 байтов, не имеет значения, что это за контент. Только в этом случае Readfile компьютера верхнего уровня сможет правильно получать данные.
В приведенном выше исходном коде мы настроили 3 светодиода, которые управляются главным компьютером (USB HID Demonstrator, предоставленный официальным веб-сайтом ST), и определили ключ на плате разработки, а затем определили 3 63 (включая report_ID, фактически 64 А) байтовый канал связи.
В Windows эта информация получается с помощью следующей структуры, такой как количество каналов (я не знаю, как это перевести, английский - это возможности), максимальное количество байтов связи и т. Д.
Последнее в принципе не составляет труда, оцените и выложите исходный код!
Некоторые общие вопросы
2.2.2 Дескриптор отчета
Дескриптор отчета является наиболее сложным из всех описаний USB, потому что он отличается от других и не имеет фиксированной длины и таблицы. Это переменный и разнообразный дескриптор.
Дескриптор отчета фактически сообщает хосту, какие биты или байты представляют значение данных, передаваемых через конечную точку прерывания. Таким образом, он может быть более абстрактным, но после прочтения следующего описания он станет более ясным в ретроспективе.
Чтобы понять дескриптор отчета, необходимы два официальных USB HID-данных:
《Device Class Definition for human interface device (HID)》
《Universal Serial Bus HID Usage Tables》
Один - это протокол, описывающий дескриптор HID, а другой - определение содержания дескриптора отчета HID.
Дескриптор отчета состоит из одного элемента. Элемент делится на два типа. Имеются следующие форматы:
1. Short Item
2. Long Item
Из вышеперечисленного здесь в основном речь идет оShort Item, Наиболее используемым является Short Item 。
Короче говоря, первый 1 байт представляет цель этого элемента:
bSize: представляет следующие данные размером до 4 байтов.
bType: показывает, какой тип элемента является данным элементом. Существует три основных типа: основной (0x00), глобальный (0x01) и локальный (0x02).
bTag: представляет более подробную классификацию по соответствующему элементу.
| —— Основное разделено на: ввод, вывод, функция, коллекция, конечная коллекция.
| —— Глобальное разделение на: страницу использования, логический минимум, логический максимум и т. Д.
| —— Локальное разделение на: использование, минимум использования, максимум использования, строку и т. Д.
ДляbSize + bType + bTag Комбинация из 1 байта показана в таблице ниже:
В таблице перечислены все взаимодействия. Знак "?" Представляет значение младших 4 битов. Например, короткий элемент:
0x05(Prefix), 0x01(Data) , // USAGE_PAGE (Generic Desktop)
Среди них 0x05 представляет префикс, а 0x01 - часть данных.
0x05 =》 0000 01 01 Можно разбить:bSize = 1;bType = 1(Global);bTag = 0(Usage Page)
Приведенная выше интерпретация исходит из 《Device Class Definition for human interface device (HID)》 Файл, следующий за 0x01 Это 1 байт данных. Необходимо выяснить конкретное значение этих данных:《Universal Serial Bus HID Usage Tables》 Может быть найдено в, что означает: Generic Desktop 。
То есть согласно [bSize + bType + bTag】 Информация знает конкретное значение тега. Комбинируя таблицу таблицы и конкретный тег, найдите соответствующее значение следующих данных, чтобы достичь цели интерпретации дескриптора отчета.
Разберем функцию и значение нескольких важных тегов.
Main
| —— Ввод: указывает режим ввода данных о работе устройства на хост. Этот формат данных формирует входной отчет.Хотя входной отчет может быть передан конвейером управляющего типа с получением отчета (входом), он обычно передается входным конвейером типа прерывания, чтобы гарантировать, что обновленный входной отчет может быть передан в каждый фиксированный период. Передайте хосту.
| —— Вывод: представляет формат данных, выводимых хостом для операции устройства. Этот формат данных формирует выходной отчет. Выходной отчет обычно не отправляется на устройство путем опроса, но выходной отчет должен быть отправлен прикладным программным обеспечением в соответствии с фактическими потребностями, поэтому большинство конвейеров контрольного типа используются для отправки отчета на устройство с установить команду отчета (вывода). Конечно, вы также можете использовать прерванный выходной конвейер для передачи, но обычно это не рекомендуется.
| —— Функция: указывает формат данных конфигурации, требуемых хостом для отправки на устройство. Этот образец данных формирует характерный отчет. Отчет о функциях может использовать конвейер управления только для получения и установки значения функции устройства с помощью команд получить отчет (функция) и установить отчет (функция) соответственно.
No Null Position
Данные / константа: данные основного элемента представляют собой значение переменной (установленное на Data) или фиксированное неизменяемое значение (установлено на Constant). Константы используются в отчете Feature или используются для заполнения, поэтому длина отчета указывается в байтах.
Массив / переменная: каждое поле данных основного элемента может указывать, что запускается одна из нескольких различных операций (установлено значение «Массив»), или каждое поле указывает только одну операцию (установлено значение «Переменная»). Если это переменная, значение данных Report Count равно количеству полей данных отчета. Если это массив, значение данных Report Count указывает максимальное количество операций, которые могут быть запущены одновременно.
Абсолютный / Относительный: данные основного элемента предоставляют абсолютные значения относительно фиксированной контрольной точки (установленной на Абсолютный) или предоставляют относительные значения относительно предыдущего отчета (установленный на Относительный).
Без переноса / переноса: когда значение данных основного элемента достигает экстремального значения, оно переключается на чрезвычайно низкое значение, и наоборот, что называется намоткой (установлено значение Wrap). Например, поворотную ручку можно повернуть на 360 °, а выходное значение находится в диапазоне от 0 до 10. Если установлено значение Wrap, значение достигает 10, а значение становится 0, если она вращается в том же направлении. В противном случае, если он достигнет 0, поверните его снова, чтобы получить 10.
Линейный / Нелинейный: данные основного элемента и шкалы операций являются линейными (для параметра "Линейный") или нелинейными (для параметра "Нелинейный").
Предпочтительное состояние / Нет предпочтений: операция, соответствующая основному элементу, автоматически вернется в исходное состояние (установленное на Предпочтительное состояние), когда она не запущена, или она не вернется в исходное состояние (установлено на Нет предпочтительного). Например, клавиши клавиатуры и самоцентрирующиеся джойстики являются предпочтительными состояниями.
Нет нулевой позиции / нулевое состояние: операция, соответствующая основному элементу, имеет состояние, при котором значимые данные не будут отправляться, то есть данные не будут находиться между логическим минимумом и логическим максимумом. Этот вид манипуляции должен быть отмечен как нулевой. Состояние, иначе это не нулевая позиция. Например, если имеется несколько клавиш, но в столбце Использование не указано, что ни одна клавиша не нажата, вы можете установить нулевое состояние в данных основного элемента, чтобы исключить состояние отсутствия нажатой клавиши из логического элемента. Минимальный и логический максимальный диапазон, см.Universal Serial Bus HID Usage Tables Пример в Приложении A.3 документа.
Non Volatile / Volatile: Данные основного элемента Feature не могут быть изменены хостом (установлен на Non Volatile) или разрешены для изменения хостом (установлен на Volatile). Обратите внимание на основные пункты Input и Output, эта установка метки бессмысленна, поэтому код бита 7 должен быть 0.
Битовое поле / буферизованные байты: формат данных основного элемента должен быть в байтах.Если этого недостаточно для формирования байтов, он будет автоматически заполнен байтами, затем установите буферизованные байты.
Сбор и завершение сбора. В случае с мышью, это фактически указатель, который используется только как компьютерная мышь; и этот указатель содержит три кнопки и две оси перемещения X и Y. Следовательно, отчет указателя состоит из данных в разных форматах, поэтому необходимо использовать Сборник и Завершить сборник, чтобы сгруппировать несколько элементов ввода в группу, которая используется в качестве указателя, а затем использовать Сбор и Завершить сборку, чтобы заключить указатель. чтобы указать, что он используется как мышь. Метка тома End Collection не соответствует никаким данным. Но метка тома Collection следует за одним байтом данных.Например, имя данных указателя - Physical, а данные мыши - Application. Имена данных и коды всех Коллекций показаны в таблице:
Windows также поддерживает внедрение драйверов конкретных поставщиков для поддержки дополнительных сканеров штрихкодов, которые не поддерживают стандарт USB.HID.POS Scanner. Наличие драйверов для определенных поставщиков уточняйте у производителя сканера штрихкодов.
Производителям сканеров штрихкодов следует ознакомиться с информацией о создании пользовательского драйвера сканера штрихкодов в разделе Руководство по проектированию драйверов для сканеров штрихкодов
Windows поддерживает Bluetooth-сканеры штрихкодов на основе SPP-SSI (протокол последовательного порта — простой последовательный интерфейс). Список известных совместимых устройств см. в таблице ниже. Смотрите руководство для сканера штрихкодов или обратитесь к производителю, чтобы определить, как настроить сканер в режиме SPP-SSI.
Начиная с Windows 10 версии 1803 можно считывать штрихкоды через объектив стандартной камеры из универсального приложения для Windows. Рекомендуется использовать камеру, поддерживающая автоматическую фокусировку и имеющую разрешение не менее 1920 x 1440. Некоторые камеры с более низким разрешением способны считывать стандартные штрихкоды, если штрихкод напечатан достаточно крупно. Штрихкоды с более тонкими элементами могут требовать камер с более высоким разрешением.
1 Обновление для поддержки 2D-штрихкодов с помощью Honeywell
Требуется 2 минимальное значение встроенного ПО 009 (2018.07.09). Возможность обновления с помощью Zebra 123Scan.
Требуется 3 минимальное значение встроенного ПО 016 (2018.01.18). Возможность обновления с помощью Zebra 123Scan.
Требуется 4 минимальное значение встроенного ПО 023 (2019.03.11). Возможность обновления с помощью Zebra 123Scan.
Несколько концепций передачи данных USBx
USBx, широко используемый в библиотеке, относится к базовым адресам USB_OTG_FS и USB_OTG_HS регистров конфигурации режима передачи FS и HS.
Обратите внимание, что адреса регистров USB_OTG_FS и USB_OTG_HS в STM32F4xx могут относиться к адресам границ регистров таблицы 10 таблицы данных STM32F4xx. Фактические физические адреса определены следующим образом:
USBx_INEP(i)
Здесь мы берем USB_OTG_FS в качестве примера для объяснения,
Итак, USBx_INEP (0) - это OTG_FS_DIEPCTL0, 0x50000900
Функция приема
USBD_CUSTOM_HID_DataOut
Прием относительно простой, поэтому не буду вдаваться в подробности. Исходный код также прост для понимания.
hpcd_USB_OTG_FS
Тип структурной переменной:
Среди них PCD означает аппаратный контроллер: устройство / драйвер периферийного контроллера.
Отчеты
Приложения и HID-устройства обмениваются данными через отчеты. Существует три типа отчетов:
Каждая коллекция верхнего уровня, определенная в дескрипторе отчета, может содержать ноль или более отчетов каждого типа.
Сканер штрихкодов, подключаемый по USB
Сканер штрихкодов, подключаемый по USB, должен быть настроен в режиме Сканер POS HID, чтобы он мог работать с драйвером сканера, входящим в состав Windows. Этот драйвер является реализацией спецификации таблиц использования HID , опубликованной в USB-HID. Чтобы узнать, как включить сканер штрихкодов в режиме Сканер POS HID, обратитесь к документации сканера или свяжитесь с производителем сканера. Будучи настроенным как Сканер POS HID, ваш сканер штрихкодов появится в диспетчере устройств в узле Сканер штрихкодов пункта обслуживания и будет называться Сканер штрихкодов POS HID.
У производителя сканера штрихкодов также может быть собственный драйвер, который поддерживает API-интерфейсы для сканеров штрихкодов в UWP и использует другой режим (не Сканер POS HID). если вы уже установили драйвер, совместимый с производителями api сканеров штрихкодов UWP, вы можете увидеть устройство, указанное в разделе сканер штрихкодов POS в диспетчер устройств.
Размер передаваемых данных
USBD_LL_OpenEP устанавливает номер конечной точки, такой как CUSTOM_HID_EPIN_ADDR, режим передачи, такой как USBD_EP_TYPE_INTR, и размер тома передачи данных, такой как USB_FS_MAX_PACKET_SIZE (настраиваемый). Также обратите внимание, что в режиме VCP / CDC режим передачи часто устанавливается на USBD_EP_TYPE_BULK.
Основные понятия HID
В состав HID входят два фундаментальных понятия: дескриптор отчета и отчеты. Отчеты — это фактические данные, которыми обмениваются устройство и клиент программного обеспечения. Дескриптор отчета описывает формат и значение данных, которые поддерживает устройство.
HAL_PCD_EP_Open
О конкретных настройках заботится HAL_PCD_EP_Open, где maxpacket в IN_ep / OUT_ep в PCD_HandleTypeDef - это максимально допустимый объем передачи, а mps - это значение максимального размера пакета.
Примечание. В исходной подпрограмме STM ep-> maxpacket = CUSTOM_HID_EPIN_SIZE = 2k; то есть максимальный объем данных каждого пакета равен 2k.
DataIn, DataOut - функция передачи данных
Из определения этих двух переменных видно, что соответствующие функции ввода и вывода
Основной маршрут звонка:
Также видно, что его отправка и получение обрабатываются в функции прерывания HAL_PCD_IRQHandler.
Читайте также:
- Illustrator текст по контуру
- Чистка ноутбука от пыли раменское
- Самый мощный компьютер саммит
- Файлы не открываются после копирования
- При заходе в доту компьютер перезагружается