我买了一台带振动马达的标准游戏手柄。它将自己标识为“SHANWAN Android Gamepad”,但似乎与其他人兼容,因为它在Linux上开箱即用。
我找到了一个脚本,可以让我从https://gist.github.com/rdb/8864666的游戏控制器设备路径读取数据。我现在想知道:我如何控制振动电机?我只能找到XBox API代码示例,这些样本对于明显的原因没有帮助。有谁知道如何控制振动电机?
答案 0 :(得分:1)
您链接的脚本仅查找joydev设备。在Linux上,joydev是较旧的游戏手柄界面,并不支持振动。 joydev设备节点的路径可能类似于/ dev / input / js0。
较新的基于evdev的界面支持强制反馈。检查/ proc / bus / input / devices以查找与joydev节点对应的evdev节点。例如,我连接了有线Xbox 360游戏手柄并获得以下输出:
I: Bus=0003 Vendor=045e Product=028e Version=0110
N: Name="Microsoft X-Box 360 pad"
P: Phys=usb-0000:00:14.0-1.1/input0
S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb2/2-1/2-1.1/2-1.1:1.0/input/input27
U: Uniq=
H: Handlers=event16 js0
B: PROP=0
B: EV=20000b
B: KEY=7cdb000000000000 0 0 0 0
B: ABS=3003f
B: FF=107030000 0
以" H开头的行:"表示/ dev / input / js0和/ dev / input / event16都指向Xbox游戏手柄。 / dev / input / event16是evdev节点。
要测试设备上的振动,请使用fftest命令和evdev节点的路径。如果它支持振动,它应该为尝试上传到设备的一个或多个效果提供OK结果:
$ fftest /dev/input/event16
Force feedback test program.
HOLD FIRMLY YOUR WHEEL OR JOYSTICK TO PREVENT DAMAGES
Device /dev/input/event16 opened
Features:
* Absolute axes: X, Y, Z, RX, RY, RZ, Hat 0 X, Hat 0 Y,
[3F 00 03 00 00 00 00 00 ]
* Relative axes:
[00 00 ]
* Force feedback effects types: Periodic, Rumble, Gain,
Force feedback periodic effects: Square, Triangle, Sine,
[00 00 00 00 00 00 00 00 00 00 03 07 01 00 00 00 ]
* Number of simultaneous effects: 16
Setting master gain to 75% ... OK
Uploading effect #0 (Periodic sinusoidal) ... OK (id 0)
Uploading effect #1 (Constant) ... Error: Invalid argument
Uploading effect #2 (Spring) ... Error: Invalid argument
Uploading effect #3 (Damper) ... Error: Invalid argument
Uploading effect #4 (Strong rumble, with heavy motor) ... OK (id 1)
Uploading effect #5 (Weak rumble, with light motor) ... OK (id 2)
Enter effect number, -1 to exit
如果您收到“拒绝权限”错误,则可能表示设备未安装兼容驱动程序或驱动程序不支持强制反馈。您不应该以root身份运行此命令来测试力反馈。
我不熟悉SHANWAN安卓游戏手柄。我有一个可以在Linux上运行的SHANWAN设备,它是一样的吗?
https://www.amazon.com/Gaming-Controller-Gamepad-Windows-Android/dp/B00OAYHIRA
一旦您确认力反馈功能适用于您的设备,您应该能够使用python-evdev发送FF命令: