Pi Zero as HID: Как управлять компьютерной мышью от Pi Zero через USB?

10

Я спрашиваю об этом, потому что я не нашел ничего ясного по этому вопросу после нескольких дней поиска. Итак, извините, если вопрос уже существует.

Я работаю в проекте, просто для удовольствия, где я хочу управлять мышью ПК из Raspberry Pi. Пользовательский ввод будет осуществляться любым оборудованием, подключенным к RP, мое главное сомнение в том, как управлять отправкой инструкций перемещения на ПК с RP через USB.

Я знаю, что мне нужно включить режим OTG, чтобы ПК распознал его как USB-устройство, но я понятия не имею, как отправлять движения мыши на ПК через USB и заставить Windows / Linux понимать его. Я обнаружил, что «Linux-USB Gadget API Framework» существует, но нет примера его использования, и я на самом деле не знаю, является ли это лучшим подходом.

Не могли бы вы дать мне несколько подсказок или ресурсов, чтобы помочь мне?

Большое спасибо.

Desproposito
источник
Я думаю, что вот с чего начать: kernel.org/doc/Documentation/usb/gadget_hid.txt Там hid_gadget_testупоминается программа, у меня нет удобного пи, но вы можете проверить apt-file search hid_gadget_testapt install apt-fileсначала, если необходимо).
Златовласка
@goldilocks Нет, ваша ссылка выглядит довольно точно, это определенно правая сторона забора. С другой стороны живут обычные водители HID вродеusbkbd.ko
Дмитрий Григорьев
@goldilocks Нет, в Linux «гаджет» всегда означает работать как ведомый, а не как хост.
Хоббс
@hobbs Вы правы - я тут же догадался, потому что не мог вспомнить, с какого конца g_etherиспользуется привязка нуля в качестве гаджета Ethernet (но это ведомая сторона, драйвер на стороне хоста является более общим usbnet).
Златовласка

Ответы:

6

Попробуйте использовать g_hidмодуль, упомянутый @goldilocks:

  1. Добавьте строку dtoverlay=dwc2в свой config.txtи перезагрузите
  2. Вставьте драйвер с помощью modprobe g_hid
  3. Беги hid_gadget_test /dev/hidg0 keyboard. Вы , возможно , потребуется построить программу первых, используя пример , приведенный здесь .

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

К сожалению, статус gadgetfs на Rapsberry Pi является неопределенным. Эта ветка предполагает, что это не работает, но неясно, что автор пытался сделать точно. Я бы предложил попробовать это все же:

  1. Добавьте строку dtoverlay=dwc2в свой config.txtи перезагрузите
  2. Вставьте драйвер FS гаджета с modprobe gadgetfs
  3. Смонтируйте файловую систему пользователя с помощью mkdir /dev/gadget; mount -t gadgetfs none /dev/gadget/

Если в этот момент вы не получите ошибок, вы сможете использовать библиотеки gadgetfs, подобные этой, для программирования своих пользовательских USB-устройств.

Дмитрий Григорьев
источник
1
Большое спасибо за ответ! Я попробую оба пути и дам вам знать, как только смогу.
Desproposito
1
@Desproposito Вы когда-нибудь работали? Я хотел бы обновление
Сирены
@ Сирены, извините, куплю, я не смог заставить его работать :( Но я попробую другой подход, как только у меня будет время попробовать другие способы.
Desproposito
@Desproposito Не могли бы вы сказать, что именно вы не можете получить работу? Вы были в состоянии modprobeводителям? Не могли бы вы смонтировать gadgetfs? Не могли бы вы построить и запустить hid_gadget_test?
Дмитрий Григорьев