Raspberry Pi 4上的鼠标模拟不起作用



对于一个个人项目,我目前正在尝试让我的Raspberry Pi 4模拟键盘和鼠标。键盘模拟效果非常好,令人信服,但在模拟鼠标时,我一直遇到问题
我已将Pi配置为HID设备,并在启动时执行以下代码:
#!/bin/bash
cd /sys/kernel/config/usb_gadget/
mkdir -p pihid
cd pihid
echo 0x1d6b > idVendor # Linux Foundation
echo 0x0104 > idProduct # Multifunction Composite Gadget
echo 0x0100 > bcdDevice # v1.0.0
echo 0x0200 > bcdUSB # USB2
mkdir -p strings/0x409
echo "fedcba9876543210" > strings/0x409/serialnumber
echo "test" > strings/0x409/manufacturer
echo "PiHID" > strings/0x409/product
mkdir -p configs/c.1/strings/0x409
echo "Config 1: ECM network" > configs/c.1/strings/0x409/configuration
echo 250 > configs/c.1/MaxPower
# Add functions here
mkdir -p functions/hid.usb0
echo 1 > functions/hid.usb0/protocol
echo 1 > functions/hid.usb0/subclass
echo 8 > functions/hid.usb0/report_length
echo -ne \x05\x01\x09\x06\xa1\x01\x05\x07\x19\xe0\x29\xe7\x15\x00\x25\x01\x75\x01\x95\x08\x81\x02\x95\x01\x75\x08\x81\x03\x95\x05\x75\x01\x05\x08\x19\x01\x29\x05\x91\x02\x95\x01\x75\x03\x91\x03\x95\x06\x75\x08\x15\x00\x25\x65\x05\x07\x19\x00\x29\x65\x81\x00\xc0 > functions/hid.usb0/report_desc
ln -s functions/hid.usb0 configs/c.1/
mkdir -p functions/hid.usb1
echo 2 > functions/hid.usb1/protocol
echo 2 > functions/hid.usb1/subclass
echo 8 > functions/hid.usb1/report_length
echo -ne \x05\x01\x09\x02\xA1\x01\x09\x01\xA1\x00\x05\x09\x19\x01\x29\x03\x15\x00\x25\x01\x95\x03\x75\x01\x81\x02\x95\x01\x75\x05\x81\x03\x05\x01\x09\x30\x09\x31\x15\x81\x25\x7F\x75\x08\x95\x02\x81\x06\xC0\xC0 > functions/hid.usb1/report_desc
ln -s functions/hid.usb1 configs/c.1/
# End functions
ls /sys/class/udc > UDC

在引导之后,/dev中有两个文件,称为";hidg0";以及";hidg1";,我应该能够向其写入;hidg0";使用这个python脚本完全可以:

NULL_CHAR = chr(0)
def write_report(report):
with open('/dev/hidg0', 'rb+') as fd:
fd.write(report.encode())
write_report(NULL_CHAR*2+chr(6)+chr(7)+chr(8)+chr(9)+chr(10)+chr(11))
write_report(NULL_CHAR*8)

当我担任编辑时;cdefgh";将出现

这是我用来写的剧本;hidg1":

NULL_CHAR = chr(0)
def ms_write(report):
with open("/dev/hidg1", "rb+") as fd:
fd.write(report.encode())
ms_write(NULL_CHAR+chr(100)+NULL_CHAR*6)
ms_write(NULL_CHAR*8)

但在执行之后,没有移动鼠标100个单位,而是什么也没发生,程序结束了。关于鼠标模拟或与Windows HID驱动程序的通信,我做错了什么?

我认为鼠标需要3个字节而不是8个字节。此外,尝试wb+而不是rb+

NULL_CHAR = chr(0)
def ms_write(report):
with open("/dev/hidg1", "wb+") as fd:
fd.write(report.encode())
ms_write(NULL_CHAR+chr(100)+NULL_CHAR)
ms_write(NULL_CHAR*3)

最新更新