用纯Python控制游戏控制器的振动电机?

2023-12-03

我买了一个带有振动电机的标准游戏控制器。它自称为“SHANWAN Android Gamepad”,但似乎与其他游戏兼容,因为它在 Linux 上开箱即用,运行良好。

我找到了一个脚本,使我能够从游戏控制器设备路径读取数据https://gist.github.com/rdb/8864666。我现在想知道:如何控制振动电机?我只能找到 Xbox API 代码示例,由于显而易见的原因,这些示例没有任何帮助。有人知道如何控制振动电机吗?


您链接的脚本仅查找 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 节点的路径。如果它支持振动,它应该为尝试上传到设备的一种或多种效果提供良好的结果:

$ 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 Android游戏手柄不熟悉。我有一台在 Linux 上运行的 SHANWAN 设备,它是一样的吗?

https://www.amazon.com/Gaming-Controller-Gamepad-Windows-Android/dp/B00OAYHIRA

IIRC,振动功能要求设备处于 XInput 模式,这样才能与 xpad 内核驱动程序一起工作。如果您的游戏手柄具有类似的模式切换功能,请尝试 XInput 模式。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用纯Python控制游戏控制器的振动电机? 的相关文章

随机推荐