Pi Zero เป็น HID: จะควบคุม PC Mouse จาก Pi Zero ผ่าน USB ได้อย่างไร?


10

ฉันถามสิ่งนี้เพราะฉันไม่พบอะไรที่ชัดเจนเกี่ยวกับเรื่องนี้หลังจากค้นหาวัน ดังนั้นฉันขอโทษถ้าคำถามมีอยู่แล้ว

ฉันทำงานในโครงการเพื่อความสนุกที่ฉันต้องการควบคุมเมาส์พีซีจาก Raspberry Pi การป้อนข้อมูลผู้ใช้จะกระทำโดยฮาร์ดแวร์ชนิดใดก็ตามที่เชื่อมต่อกับ RP ข้อสงสัยหลักของฉันคือเกี่ยวกับวิธีควบคุมการส่งคำแนะนำการเคลื่อนไหวไปยังพีซีจาก RP ผ่านทาง USB

ฉันรู้ว่าฉันต้องเปิดใช้งานโหมด OTG เพื่อให้พีซีรับรู้ว่าเป็นอุปกรณ์ usb แต่ฉันไม่รู้ว่าจะส่งการเคลื่อนไหวของเมาส์ไปยังพีซีผ่าน USB และทำให้ Windows / Linux เข้าใจได้อย่างไร ฉันพบว่ามี "Framework ของ Linux-USB Gadget API Framework" อยู่ แต่ไม่มีตัวอย่างเกี่ยวกับการใช้งานและฉันไม่ทราบว่าเป็นวิธีที่ดีที่สุดหรือไม่

คุณช่วยบอกเบาะแสหรือแหล่งช่วยฉันหน่อยได้ไหม?

ขอบคุณมาก.

usb  pi-zero 

ที่นี่เป็นสถานที่สำหรับเริ่มต้นฉันคิดว่า: kernel.org/doc/Documentation/usb/gadget_hid.txtมีhid_gadget_testโปรแกรมที่กล่าวถึงที่นั่นฉันไม่มี pi ที่มีประโยชน์ แต่คุณอาจตรวจสอบapt-file search hid_gadget_test(และapt install apt-fileถ้าจำเป็น)
goldilocks

@goldilocks ไม่ลิงค์ของคุณดูสปอตมากมันเป็นด้านขวาของรั้ว ในอีกทางหนึ่งอาศัยไดรเวอร์ HID แบบปกติเช่นusbkbd.ko
Dmitry Grigoryev

@goldilocks nah, ใน Linux "gadget" มักจะหมายถึงทำงานเป็นทาสไม่ใช่โฮสต์
ฮอบส์

@hobbs คุณกำลังขวา - ฉันเดาสองมีเพราะผมจำไม่ได้ซึ่งทำให้g_etherถูกนำมาใช้เมื่อ tethering ศูนย์เป็นอีเธอร์เน็ตแกดเจ็ต ( แต่มันเป็นด้านทาสขับด้านโฮสต์เป็นทั่วไปมากขึ้นusbnet)
goldilocks

คำตอบ:


5

ลองใช้g_hidโมดูลที่กล่าวถึงโดย @goldilocks:

  1. เพิ่มบรรทัดdtoverlay=dwc2ลงในconfig.txtและรีบูตของคุณ
  2. ใส่ไดรเวอร์ไดรเวอร์ด้วย modprobe g_hid
  3. hid_gadget_test /dev/hidg0 keyboardวิ่ง คุณอาจจะต้องสร้างโปรแกรมแรกที่ใช้โค้ดตัวอย่างที่ให้ไว้ที่นี่

อีกวิธีที่มีความยืดหยุ่นมากขึ้นเพื่อให้บรรลุที่คุณต้องการ (โดยไม่ต้องเขียนโปรแกรมควบคุมที่กำหนดเอง) คือการใช้gadgetfs ฉันรู้ว่าอย่างน้อยหนึ่งโครงการที่เปลี่ยนคอมพิวเตอร์ ARM ขนาดเล็กเป็น USB / Bluetooth Keyboard / Mouse / Gamepad โดยใช้วิธีการนี้

น่าเสียดายที่สถานะของ Gadgetfs ใน Rapsberry Pi ไม่แน่นอน กระทู้นี้แสดงให้เห็นว่ามันใช้งานไม่ได้ แต่ก็ไม่ชัดเจนว่าผู้เขียนพยายามทำอะไร ฉันขอแนะนำให้ลองใช้อย่างไรก็ตาม:

  1. เพิ่มบรรทัดdtoverlay=dwc2ลงในconfig.txtและรีบูตของคุณ
  2. ใส่ไดรเวอร์ FS ของ gadget ด้วย modprobe gadgetfs
  3. เมาท์ระบบไฟล์ userspace ด้วย mkdir /dev/gadget; mount -t gadgetfs none /dev/gadget/

หากคุณไม่มีข้อผิดพลาดในตอนนี้คุณจะสามารถใช้ไลบรารีfsแบบนี้เพื่อโปรแกรมอุปกรณ์ USB ที่กำหนดเองของคุณ


1
ขอบคุณมากสำหรับคำตอบของคุณ! ฉันจะลองทั้งสองวิธีและแจ้งให้คุณทราบโดยเร็วที่สุด

1
@Desproposito คุณเคยทำงานนี้หรือไม่? ฉันรักการอัปเดต
Sirens

@ ไซเรนฉันขอโทษซื้อฉันไม่สามารถทำงานได้ :( แต่ฉันจะลองวิธีอื่นทันทีที่ฉันมีเวลาลองวิธีอื่น

@Desproposito คุณช่วยบอกได้ไหมว่าคุณไม่สามารถทำงานได้ คุณสามารถmodprobeใช้ไดรเวอร์ได้หรือไม่ คุณเมานได้gadgetfsไหม คุณสามารถสร้างและเรียกใช้hid_gadget_test?
Dmitry Grigoryev
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.