用纯Python控制游戏控制器的振动马达?

时间:2018-04-22 17:04:12

标签: python-3.x gamepad

我买了一台带振动马达的标准游戏手柄。它将自己标识为“SHANWAN Android Gamepad”,但似乎与其他人兼容,因为它在Linux上开箱即用。

我找到了一个脚本,可以让我从https://gist.github.com/rdb/8864666的游戏控制器设备路径读取数据。我现在想知道:我如何控制振动电机?我只能找到XBox API代码示例,这些样本对于明显的原因没有帮助。有谁知道如何控制振动电机?

1 个答案:

答案 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

IIRC,振动功能要求设备处于XInput模式,允许它与xpad内核驱动程序一起使用。如果您的游戏手柄具有类似的模式切换功能,请尝试X输入模式。

一旦您确认力反馈功能适用于您的设备,您应该能够使用python-evdev发送FF命令:

http://python-evdev.readthedocs.io/en/latest/