Виртуальное USB HID устройство

9

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

Идеальная утилита, о которой я могу подумать, должна выглядеть следующим образом: модуль ядра, который при загрузке создает в системе два узла устройства:

  • виртуальное устройство usb-hid, которое, вероятно, неотличимо от любого реального узла устройства usb-hid /dev/hidraw0; и, конечно, это устройство должно просматриваться любыми библиотеками usb-hid, которые я бы использовал, например hidapi.
  • узел сервисного устройства, вроде /dev/virtual_hid_1.

Таким образом, когда кто-то пишет /dev/virtual_hid_1, эти данные должны быть буквально прочитаны /dev/hidraw0, и наоборот.

Таким образом, я могу написать какое-нибудь приложение для отладки на любом языке, который мне нужен, будь то pythonили что-то еще; это должно просто написать и прочитать к и от /dev/virtual_hid_1. Это было бы очень удобно для разработки.

Есть ли что-то подобное?

Дмитрий Франк
источник

Ответы:

5
  1. Возможно, вас заинтересует недорогое, элегантное и открытое аппаратное решение для эмуляции USB-устройств в процессе разработки: плата для микропифон . (У меня нет связи с этим оборудованием).

    Это небольшая автономная плата, которая работает на Python 3 и подключается к USB, где она может отображаться, например, как HID мыши или клавиатуры HID. Вы просто копируете исходный файл python на устройство, и оно запускается. Прекрасная концепция.

    Ладно, это не совсем то, что вам нужно, и вам может понадобиться скачать sdk и немного поработать на C, чтобы он выглядел именно так, как вам нужно, но большая часть вашего кода будет на python. Существуют последовательные порты уровня ttl, порты i2c, spi и т. Д.

  2. Для альтернативного решения есть плата, которая эмулирует USB-устройства с Python, но я не уверен, что вы можете купить готовый продукт.

  3. Также есть эмуляция usb с использованием usbip без дополнительного оборудования, на которую я еще не смотрел.

meuh
источник
5

Вы, вероятно, ищете uhidмодуль ядра. Смотрите документацию в исходниках ядра :

С помощью UHID драйвер транспорта пользовательского пространства может создавать hid-устройства ядра для каждого устройства, подключенного к шине, управляемой пользовательским пространством. UHID API определяет события ввода-вывода, передаваемые ядром в пространство пользователя и наоборот.

В приложении ./samples/uhid/uhid-example.c есть пример приложения в пользовательском пространстве.

Marmarek
источник