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 驅動程式”檢視後續更改