Pi Zero as HID: Jak sterować myszą PC od Pi Zero przez USB?

10

Pytam o to, ponieważ nie szukałem nic na ten temat po kilku dniach poszukiwań. Przykro mi, jeśli pytanie już istnieje.

Pracuję nad projektem, dla zabawy, w którym chcę sterować myszą PC z Raspberry Pi. Wkład użytkownika byłby dokonywany przez dowolny sprzęt podłączony do RP, moje główne wątpliwości dotyczą sposobu sterowania wysyłaniem instrukcji ruchu do komputera z RP przez USB.

Wiem, że muszę włączyć tryb OTG, aby komputer mógł rozpoznać go jako urządzenie USB, ale nie mam pojęcia, jak wysyłać ruchy myszy do komputera przez USB i sprawić, aby system Windows / Linux to rozumiał. Odkryłem, że „Linux-USB Gadget API Framework” istnieje, ale nie ma żadnego przykładu z jego użyciem i tak naprawdę nie wiem, czy jest to najlepsze podejście.

Czy możesz prosić o wskazówki lub zasoby, które pomogą mi?

Dziękuję Ci bardzo.


źródło
Myślę, że jest to miejsce na początek: kernel.org/doc/Documentation/usb/gadget_hid.txt Jest hid_gadget_testtam wspomniany program, nie mam przy sobie pi, ale możesz to sprawdzić apt-file search hid_gadget_test(i apt install apt-filenajpierw w razie potrzeby).
Złotowłosa
@goldilocks Nie, twój link wygląda dość trafnie, to zdecydowanie prawa strona ogrodzenia. Z drugiej strony żyją zwykli kierowcy HID, tacy jakusbkbd.ko
Dmitrij Grigoriew,
@goldilocks nah, w Linuksie „gadżet” zawsze oznacza działanie jako slave, a nie host.
hobbs
@hobbs Masz rację - zgadłem po raz drugi, ponieważ nie pamiętałem, który koniec g_etherjest używany podczas tetheringu zera jako gadżetu ethernetowego (ale jest to strona podrzędna, sterownik po stronie hosta jest bardziej ogólny usbnet).
Złotowłosa

Odpowiedzi:

5

Spróbuj użyć g_hidmodułu wymienionego przez @goldilocks:

  1. Dodaj linię dtoverlay=dwc2do config.txti uruchom ponownie
  2. Włóż sterownik sterownika za pomocą modprobe g_hid
  3. Uruchom hid_gadget_test /dev/hidg0 keyboard. Najpierw może być konieczne zbudowanie programu przy użyciu przykładowego kodu podanego tutaj .

Innym, bardziej elastycznym sposobem na osiągnięcie tego, czego chcesz (bez pisania niestandardowych sterowników), jest użycie gadgetfs . Znam co najmniej jeden projekt, który zmienił mały komputer ARM w klawiaturę / mysz / gamepad USB / Bluetooth przy użyciu tego podejścia.

Niestety status gadżetów na Rapsberry Pi jest niepewny. Ten wątek sugeruje, że nie działa, ale nie jest jasne, co autor próbował dokładnie zrobić. Mimo to sugeruję wypróbowanie:

  1. Dodaj linię dtoverlay=dwc2do config.txti uruchom ponownie
  2. Wstaw sterownik FS gadżetu za pomocą modprobe gadgetfs
  3. Zamontuj system plików przestrzeni użytkownika za pomocą mkdir /dev/gadget; mount -t gadgetfs none /dev/gadget/

Jeśli w tym momencie nie otrzymasz żadnych błędów, będziesz mógł używać bibliotek gadgetfs takich jak ta do programowania własnych urządzeń USB.

Dmitrij Grigoriew
źródło
1
Bardzo dziękuję za odpowiedź! Spróbuję na dwa sposoby i dam Ci znać, gdy tylko będę mógł.
1
@Desproposito Czy kiedykolwiek działało to? Chciałbym aktualizację
syreny
@Sirens, przepraszam, kup, nie udało mi się go uruchomić :( Ale spróbuję innego podejścia, jak tylko będę mieć czas, aby spróbować innych sposobów.
@Desproposito Czy możesz powiedzieć, czego dokładnie nie mogłeś rozpocząć? Czy byłeś w stanie modprobekierowców? Czy możesz zamontować gadgetfs? Czy potrafisz zbudować i uruchomić hid_gadget_test?
Dmitrij Grigoriew