17. xpad - 用于 Xbox 兼容控制器的 Linux USB 驱动程序

此驱动程序公开了所有第一方和第三方 Xbox 兼容控制器。 它拥有悠久的历史,并且由于 Windows 的 xinput 库导致大多数 PC 游戏专注于 Xbox 控制器兼容性而得到广泛使用。

由于向后兼容性,所有按钮都报告为数字信号。 这仅影响原始 Xbox 控制器。 所有后续控制器型号都只有数字面部按钮。

一些 Xbox 360 控制器型号支持震动,但原始 Xbox 控制器和 Xbox One 控制器不支持。 截至撰写本文时,尚未对 Xbox One 的震动协议进行逆向工程,但将来可能会支持。

17.1. 注意

报告的按钮/轴的数量因 3 件事而异

  • 是否正在使用已知的控制器

  • 是否正在使用已知的跳舞毯

  • 如果使用未知设备(下面未列出的设备),则在模块配置中为“将 D-PAD 映射到按钮而不是未知控制板的轴”设置什么(模块选项 dpad_to_buttons)

如果将 dpad_to_buttons 设置为 N 并且您正在使用未知设备,则驱动程序会将方向键映射到轴 (X/Y)。 如果您说 Y,它会将 d-pad 映射到按钮,这对于跳舞类游戏正确运行是必需的。 默认值为 Y。

dpad_to_buttons 对已知控制板没有影响。 一个错误的提交消息声称 dpad_to_buttons 可用于强制已知设备上的行为。 这不是真的。 dpad_to_buttons 和 triggers_to_buttons 都只会影响未知控制器。

17.1.1. 普通控制器

使用普通控制器,方向键映射到其自身的 X/Y 轴。 来自 joystick-1.2.15 的 jstest-program(jstest-version 2.1.0)将报告 8 个轴和 10 个按钮。

所有 8 个轴都可以工作,尽管它们都具有相同的范围 (-32768..32767),并且触发器的零设置不正确(我不知道这是否是 jstest 的某些限制,因为输入设备设置应该没问题。 我还没有看过 jstest 本身)。

所有 10 个按钮都可以工作(在数字模式下)。 右侧的六个按钮(A、B、X、Y、黑色、白色)被认为是“模拟”的,并将其值报告为 8 位无符号,不确定这有什么用。

我用 quake3 测试了控制器,配置和游戏内功能都正常。 但是,我发现用控制板玩第一人称射击游戏相当困难。 您的体验可能会有所不同。

17.1.2. Xbox 跳舞毯

使用已知的跳舞毯时,jstest 将报告 6 个轴和 14 个按钮。

对于跳舞风格的控制板(如 redoctane 控制板),已经进行了一些更改。 旧驱动程序会将 d-pad 映射到轴,导致驱动程序无法报告用户何时同时按下左+右或上+下,从而使 DDR 风格的游戏无法玩。

已知的跳舞毯会自动将 d-pad 映射到按钮,并且可以开箱即用。

如果您的跳舞毯被驱动程序识别,但使用轴而不是按钮,请参见第 0.3 节 - 未知控制器

我用 Stepmania 测试了它,效果很好。

17.1.3. 未知控制器

如果您有未知的 Xbox 控制器,它应该可以使用默认设置正常工作。

但是,如果您有一个未知的跳舞毯未在下面列出,除非您在模块配置中将“dpad_to_buttons”设置为 1,否则它将无法工作。

17.2. USB 适配器

所有代的 Xbox 控制器都通过 USB 进行通信。

  • 原始 Xbox 控制器使用专有连接器,需要适配器。

  • 无线 Xbox 360 控制器需要“适用于 Windows 的 Xbox 360 无线游戏接收器”

  • 有线 Xbox 360 控制器使用标准 USB 连接器。

  • Xbox One 控制器可以是无线的,但使用 Wi-Fi Direct 并且尚未支持。

  • Xbox One 控制器可以是有线的,并使用标准 Micro-USB 连接器。

17.2.1. 原始 Xbox USB 适配器

将此驱动程序与原始 Xbox 控制器一起使用需要一个适配器电缆,以将专有连接器的引脚分解为 USB。 您可以在网上以相当便宜的价格购买这些,或者自己构建。

这样的电缆很容易构建。 控制器本身是一个 USB 复合设备(一个集线器,带有两个扩展槽和一个控制器设备的三个端口),唯一的区别在于非标准连接器(5 针与标准 USB 1.0 连接器的 4 针)。

您只需要将 USB 连接器焊接到电缆上,并保持黄色线未连接。 其他引脚在两个连接器上具有相同的顺序,因此没有任何魔力。 可以在网上找到有关这些事项的详细信息 ([1], [2], [3])。

由于电缆上的分线器,您甚至不需要剪断原始电缆。 您可以购买延长线并剪断它。 这样,如果您有 Xbox,仍然可以使用控制器 ;)

17.3. 驱动程序安装

一旦您拥有了适配器电缆(如果需要)并且连接了控制器,xpad 模块应该会自动加载。 要确认,您可以 cat /sys/kernel/debug/usb/devices。 应该有一个像这样的条目

来自 InterAct PowerPad Pro(德国)的转储
 T:  Bus=01 Lev=03 Prnt=04 Port=00 Cnt=01 Dev#=  5 Spd=12  MxCh= 0
 D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=32 #Cfgs=  1
 P:  Vendor=05fd ProdID=107a Rev= 1.00
 C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
 I:  If#= 0 Alt= 0 #EPs= 2 Cls=58(unk. ) Sub=42 Prot=00 Driver=(none)
 E:  Ad=81(I) Atr=03(Int.) MxPS=  32 Ivl= 10ms
 E:  Ad=02(O) Atr=03(Int.) MxPS=  32 Ivl= 10ms
来自 Redoctane Xbox 跳舞毯(美国)的转储
 T:  Bus=01 Lev=02 Prnt=09 Port=00 Cnt=01 Dev#= 10 Spd=12  MxCh= 0
 D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
 P:  Vendor=0c12 ProdID=8809 Rev= 0.01
 S:  Product=XBOX DDR
 C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
 I:  If#= 0 Alt= 0 #EPs= 2 Cls=58(unk. ) Sub=42 Prot=00 Driver=xpad
 E:  Ad=82(I) Atr=03(Int.) MxPS=  32 Ivl=4ms
 E:  Ad=02(O) Atr=03(Int.) MxPS=  32 Ivl=4ms

17.4. 支持的控制器

有关支持的控制器和相关供应商和产品 ID 的完整列表,请参见 xpad_device[] 数组[4]

截至历史版本 0.0.6 (2006-10-10),支持以下设备

original Microsoft XBOX controller (US),    vendor=0x045e, product=0x0202
smaller  Microsoft XBOX controller (US),    vendor=0x045e, product=0x0289
original Microsoft XBOX controller (Japan), vendor=0x045e, product=0x0285
InterAct PowerPad Pro (Germany),            vendor=0x05fd, product=0x107a
RedOctane Xbox Dance Pad (US),              vendor=0x0c12, product=0x8809

无法识别的 Xbox 控制器型号应作为通用 Xbox 控制器运行。 无法识别的跳舞毯控制器需要设置模块选项“dpad_to_buttons”。

如果您有无法识别的控制器,请参见 0.3 - 未知控制器

17.5. 手动测试

要测试此驱动程序的功能,您可以使用“jstest”。

例如

> modprobe xpad
> modprobe joydev
> jstest /dev/js0

如果您使用的是普通控制器,则应该有一行显示 18 个输入(8 个轴,10 个按钮),并且如果您移动摇杆和按下按钮,其值应该会改变。 如果您使用的是跳舞毯,它应该显示 20 个输入(6 个轴,14 个按钮)。

它工作了吗? 瞧,您完成了 ;)

17.6. 感谢

我必须感谢 ITO Takayuki 在他的网站上提供的详细信息

http://euc.jp/periphs/xbox-controller.ja.html.

他的有用信息以及 usb-skeleton 和 iforce 输入驱动程序(Greg Kroah-Hartmann;Vojtech Pavlik)在快速原型化基本功能方面提供了很大帮助。

17.7. 参考

17.8. 历史编辑

2002-07-16 - Marko Friedemann <mfr@bmx-chemnitz.de>
  • 原始文档

2005-03-19 - Dominic Cerquetti <binary1230@yahoo.com>
  • 为跳舞毯添加了内容,新的 d-pad->轴映射

可以使用“git log --follow xpad - 用于 Xbox 兼容控制器的 Linux USB 驱动程序”查看后续更改