Pi Zero as HID: Bagaimana cara mengontrol PC Mouse dari Pi Zero melalui USB?

10

Saya menanyakan hal ini karena saya belum menemukan sesuatu yang jelas tentang subjek ini setelah mencari selama berhari-hari. Jadi, saya minta maaf jika pertanyaannya sudah ada.

Saya bekerja dalam sebuah proyek, hanya untuk bersenang-senang, di mana saya ingin mengontrol mouse PC dari Raspberry Pi. Input pengguna akan dilakukan oleh segala jenis perangkat keras yang terhubung ke RP, keraguan utama saya adalah tentang bagaimana mengontrol untuk mengirim instruksi pergerakan ke PC dari RP melalui USB.

Saya tahu bahwa saya harus mengaktifkan mode OTG untuk membuat PC mengenalinya sebagai perangkat usb, tetapi saya tidak tahu bagaimana cara mengirim gerakan mouse ke PC melalui USB dan membuat Windows / Linux memahaminya. Saya menemukan bahwa "Kerangka Kerja API Linux-USB Gadget" ada, tetapi tidak ada contoh tentang menggunakannya, dan saya tidak benar-benar tahu apakah itu pendekatan terbaik.

Bisakah Anda memberi saya beberapa petunjuk atau sumber daya untuk membantu saya?

Terima kasih banyak.

Desproposito
sumber
Inilah tempat untuk memulai, saya pikir: kernel.org/doc/Documentation/usb/gadget_hid.txt Ada hid_gadget_testprogram yang disebutkan di sana, saya tidak memiliki pi berguna tetapi Anda mungkin memeriksa apt-file search hid_gadget_test(dan apt install apt-filepertama jika perlu).
goldilocks
@goldilocks Tidak, tautan Anda terlihat cukup tepat, itu pasti sisi kanan pagar. Di sisi lain hidup driver HID biasa sepertiusbkbd.ko
Dmitry Grigoryev
@goldilocks nah, di Linux, "gadget" selalu berarti berjalan sebagai budak, bukan host.
hobbs
@ hobbs Anda benar - saya menebak di sana karena saya tidak ingat dari mana ujungnya g_etherdigunakan ketika menambatkan nol sebagai gadget ethernet (tetapi itu adalah sisi pendukung, driver sisi host adalah yang lebih umum usbnet).
goldilocks

Jawaban:

6

Coba gunakan g_hidmodul yang disebutkan oleh @goldilocks:

  1. Tambahkan baris dtoverlay=dwc2ke Anda config.txtdan reboot
  2. Masukkan driver driver dengan modprobe g_hid
  3. Lari hid_gadget_test /dev/hidg0 keyboard. Anda mungkin perlu membangun program terlebih dahulu, menggunakan kode sampel yang disediakan di sini .

Cara lain yang lebih fleksibel untuk mencapai yang Anda inginkan (tanpa menulis driver khusus) adalah dengan menggunakan gadget . Saya tahu setidaknya satu proyek yang mengubah komputer ARM kecil menjadi USB / keyboard Bluetooth / mouse / gamepad menggunakan pendekatan ini.

Sayangnya, status gadget di Rapsberry Pi tidak pasti. Utas ini menunjukkan tidak berfungsi, tetapi tidak jelas apa yang penulis coba lakukan dengan tepat. Saya sarankan untuk mencobanya:

  1. Tambahkan baris dtoverlay=dwc2ke Anda config.txtdan reboot
  2. Masukkan driver FS gadget dengan modprobe gadgetfs
  3. Pasang sistem file userspace dengan mkdir /dev/gadget; mount -t gadgetfs none /dev/gadget/

Jika Anda tidak mendapatkan kesalahan pada titik ini, Anda akan dapat menggunakan perpustakaan gadget seperti ini untuk memprogram perangkat USB khusus Anda.

Dmitry Grigoryev
sumber
1
Terimakasih banyak atas jawaban Anda! Saya akan mencoba keduanya dan memberi tahu Anda sesegera mungkin.
Desproposito
1
@Desproposito Apakah Anda pernah mendapatkan ini berfungsi? Saya ingin pembaruan
Sirens
@ Sirens, saya minta maaf, beli saya tidak bisa membuatnya bekerja :( Tapi saya akan mencoba pendekatan lain segera setelah saya punya waktu untuk mencoba cara lain.
Desproposito
@Desproposito Bisakah Anda memberi tahu apa yang sebenarnya tidak bisa Anda lakukan? Apakah Anda dapat modprobemenggunakan driver? Bisakah kamu mount gadgetfs? Bisakah Anda membangun dan berlari hid_gadget_test?
Dmitry Grigoryev