Virtual hid device что это

от admin

Creating a virtual HID device

I’d like to create a virtual HID device (emulate it with a driver).

It must be visible to clients that implement standard HID detection:

  • Call HidD_GetHidGuid() – Get the HID device class GUID
  • Call SetupDiGetClassDevs() – Get a handle to a set of devices which implement the HID interface
  • Call SetupDiEnumDeviceInterfaces() – For each device in the returned set of devices, obtain the interface information for all exposed HID interfaces.
  • Call SetupDiGetDeviceInterfaceDetail() – For each interface obtained in the previous call, get the detailed information block for that interface. This detailed information includes the string that can be passed to CreateFile() to open a handle to the device
  • Call SetupDiDestroyDeviceInfoList() – Free up the device information set that was obtained in the call to SetupDiGetClassDevs().

The device should also support reading, so CreateFile / ReadFile would return data supplied by me from the driver.

I don’t really know where to begin, as I don’t have a lot of exp. in kernel dev. 🙁

Добро пожаловать в службу поддержки Logitech

Гарантийная замена обычно осуществляются по месту покупки. В текущих обстоятельствах компания Logitech не может осуществить замену по гарантии, мы рекомендуем Вам обратиться за гарантийной помощью по месту покупки. Мы не допустим истечения срока действия гарантии в этот период кризиса и выполним действующие гарантии как можно скорее. Наши телефонные линии, обслуживающие Россию, в настоящее время недоступны по техническим причинам. Вы можете связаться с нами через наш круглосуточный онлайн-чат или написать нам по электронной почте.

  • Зарегистрироваться
  • Начало работы
  • Вопросы и ответы
  • Сообщество
  • Файлы для загрузки
  • Гарантия
  • Технические характеристики
  • Запасные части
  • Галерея
  • Связаться с нами

Обновите драйвер для HID-устройства при помощи диспетчера устройств

Для данного продукта пока нет загружаемых файлов

Для данного продукта пока нет вопросов и ответов

По данному продукту нет документов.

На данный товар нет запчастей

Для данного товара нет изображений

  1. Откройте диспетчер устройств.
    • Windows 7, Windows 8, Windows 8.1: Панель управления > Система > Диспетчер устройств
    • Windows 10: на панели задач щелкните правой кнопкой мыши флажок Windows и выберите Диспетчер устройств
  2. В меню Диспетчер устройств выполните поиск вашего устройства. При использовании мыши или клавиатуры перейдите в меню Мышь или Клавиатура и разверните его. При использовании джойстика или любого другого устройства разверните меню HID-устройство.
  3. Отобразится имя устройства (например, MX Master 2s, Craft) или устройства, совместимого с HID-устройством. (Мышь будет совместима с HID-устройством, а клавиатура отобразится в качестве HID-клавиатуры.) Если устройство отображается в качестве совместимого с HID-устройством или рядом с ним стоит желтый восклицательный знак, обновите драйверы для набора микросхем USB.

Ознакомиться с гарантией Logitech можно здесь

Используйте гарантию наилучшим образом

Вопросы и ответы

Onboard Memory Manager is out of date. Please update to the most recent release.

Virtual hid device что это

I’d like to create a virtual HID device (emulate it with a driver).

It must be visible to clients that implement standard HID detection:

  • Call HidD_GetHidGuid() – Get the HID device class GUID
  • Call SetupDiGetClassDevs() – Get a handle to a set of devices which implement the HID interface
  • Call SetupDiEnumDeviceInterfaces() – For each device in the returned set of devices, obtain the interface information for all exposed HID interfaces.
  • Call SetupDiGetDeviceInterfaceDetail() – For each interface obtained in the previous call, get the detailed information block for that interface. This detailed information includes the string that can be passed to CreateFile() to open a handle to the device
  • Call SetupDiDestroyDeviceInfoList() – Free up the device information set that was obtained in the call to SetupDiGetClassDevs().

The device should also support reading, so CreateFile / ReadFile would return data supplied by me from the driver.

I don’t really know where to begin, as I don’t have a lot of exp. in kernel dev. 🙁

1. Краткое описание

Класс 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.

2. Протокол HID

Основываясь на введении базового протокола USB в предыдущей главе, в этой главе основное внимание уделяется классам взаимодействия человека и компьютера HID. (Базовый протокол USB-связи доступен по умолчанию)

2.1 Канал связи USB HID устройства

Все устройства HID связываются с хостом через канал управления USB (канал по умолчанию, конечная точка 0) и канал прерывания (конечная точка 1 или конечная точка 2).

Описание запроса конвейера

Элемент управления (конечная точка 0) должен передавать дескриптор USB, код запроса класса и данные сообщения для запроса

Вход прерывания должен передавать входные данные с устройства на хост

Выход прерывания Дополнительно Передача выходных данных с хоста на устройство

Примечание. USB-хост — это ПК и USB-устройства, такие как мышь. В описании конечной точки прерывания указан временной интервал опроса хоста. То есть хост будет «запрашивать» данные через определенные промежутки времени.

Конвейер управления в основном используется в следующих трех аспектах

  • Получение / ответ на запрос управления USB-хостом и связанные данные
  • Передавать данные, когда USB-хост запрашивает (например, отвечает на запрос Get_Report и т. Д.)
  • Получать данные с USB-хоста

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

  • USB-хост получает данные асинхронной передачи от USB-устройства
  • USB-хост отправляет данные в реальном времени на USB-устройство.

Передача выходных данных прерывания от USB-хоста к USB-устройству является необязательной.Когда выходные данные прерывания не поддерживаются, USB-хост передает данные на USB-устройство через канал управления.

2.2 Дескрипторы, относящиеся к USB HID устройствам

В дополнение к пяти стандартным дескрипторам USB (дескриптор устройства, дескриптор конфигурации, дескриптор интерфейса, дескриптор конечной точки, строковый дескриптор), дескрипторы устройства HID также включают три дескриптора, зависящих от класса устройства HID: Дескриптор HID, дескриптор отчета (Отчет), дескриптор объекта (Физический) 。

Иерархическая взаимосвязь между ними показана на рисунке:

Можно видеть, что на уровне Interface desc указано HID desc.

В дополнение к трем конкретным дескрипторам HID, которые составляют интерпретацию устройств HID, к устройствам HID относятся пять стандартных дескрипторов:

  1. Дескриптор устройства : bDeviceClass, bDeviceSubClass, bDeviceProtocolТри значения должны быть 0
  2. Дескриптор интерфейса : bInterfaceClass Значение должно быть 0x03,bInterfaceSubClass Имеет значение 0 или 1 , 1 указывает, что HID-устройство является загрузочным устройством (BootDevice, обычно значимым для ПК, что означает, что BIOS может распознать HID-устройство, которое вы используете при загрузке, и только стандартную мышь или клавиатуру можно назвать BootDevice), 0 указывает устройство HID. Операционная система может распознавать используемое устройство только при загрузке. bInterfaceProtocol Смысл значения следующий:

0 — No Sub Class

1 — Boot Interface SubClass

2.2.1 Дескриптор HID

Дескриптор 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 цифровой Общая длина дескриптора, используемого в устройствах с более чем одним дескриптором.
Читать:
Как зайти в библиотеки на пайтоне
Определение типа дескриптора, связанного с HID

Тип дескриптора, связанный с HID

В стандартном запросе USB, когда используется дескриптор конфигурации get, он будет возвращен в следующем порядке, то есть дескриптор HID также будет возвращен.

Дескриптор HID также содержит тип и длину присоединенного к нему дескриптора (например, дескриптора отчета), а затем хост запрашивает соответствующий дескриптор на основе информации в дескрипторе HID. Другими словами, хост знает, что устройство является HID-устройством, получая дескриптор.

Обычно в процессе запроса дескрипторов конфигурации и получения всех дескрипторов выбирают " Class 0x01 ”:

Значение Request — это содержание выше.

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

| —— Ввод: указывает режим ввода данных о работе устройства на хост. Этот формат данных формирует входной отчет.Хотя входной отчет может быть передан конвейером управляющего типа с получением отчета (входом), он обычно передается входным конвейером типа прерывания, чтобы гарантировать, что обновленный входной отчет может быть передан в каждый фиксированный период. Передайте хосту.

| —— Вывод: представляет формат данных, выводимых хостом для операции устройства. Этот формат данных формирует выходной отчет. Выходной отчет обычно не отправляется на устройство путем опроса, но выходной отчет должен быть отправлен прикладным программным обеспечением в соответствии с фактическими потребностями, поэтому большинство конвейеров контрольного типа используются для отправки отчета на устройство с установить команду отчета (вывода). Конечно, вы также можете использовать прерванный выходной конвейер для передачи, но обычно это не рекомендуется.

| —— Функция: указывает формат данных конфигурации, требуемых хостом для отправки на устройство. Этот образец данных формирует характерный отчет. Отчет о функциях может использовать конвейер управления только для получения и установки значения функции устройства с помощью команд получить отчет (функция) и установить отчет (функция) соответственно.

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. Имена данных и коды всех Коллекций показаны в таблице:

Похожие статьи

Значение типа дескриптора