编辑 3.18 内核的 xpad.c 以支持 xbone pad

编辑 3.18 内核的 xpad.c 以支持 xbone pad

好的,所以 xpad.c 现在支持 XBOXONE 控制器。我购买了 PowerA Spectra XBOXONE 控制器。它似乎所做的就是连接和断开连接。所以那时我注意到 xpad 无法识别控制器,并决定编辑 xpad.c 并重新编译。

Linux CtrlZ 3.18.7-sabayon #1 SMP 2015 年 2 月 16 日星期一 14:29:37 UTC x86_64 AMD A10-7850K Radeon R7,12 个计算核心 4C+8G AuthenticAMD GNU/Linux


例子

[ 660.061511] usb 3-2:使用 xhci_hcd 的新全速 USB 设备编号 39
[ 660.205548] usb 3-2:发现新 USB 设备,idVendor=24c6,idProduct=542a
[ 660.205551] usb 3-2:新 USB 设备字符串:Mfr=1,Product=2,SerialNumber=3
[ 660.205554] usb 3-2:产品:控制器
[ 660.205555] usb 3-2:制造商:Microsoft
[ 660.205557] usb 3-2:SerialNumber:0000F2292EF239AD
[ 675.295032] usb 3-2:USB 断开连接,设备编号 39
[ 675.541979] usb 3-2:使用 xhci_hcd 的新全速 USB 设备编号 40
[675.686018] usb 3-2:发现新 USB 设备,idVendor=24c6,idProduct=542a
[675.686022] usb 3-2:新 USB 设备字符串:Mfr=1,Product=2,SerialNumber=3
[675.686024] usb 3-2:产品:控制器
[675.686025] usb 3-2:制造商:Microsoft
[675.686027] usb 3-2:SerialNumber:0000F2292EF239AD


使用以上信息,我能够修补 xpad.c 以包含以下第 207 行和第 311 行。


例子

206:{0x24c6,0x5300,“PowerA MINI PROEX 控制器”,0,XTYPE_XBOX360},
207:{0x24c6,0x542a,“PowerA Spectra”,0,XTYPE_XBOXONE},
310:XPAD_XBOX360_VENDOR(0x24c6),/* PowerA 控制器/
311:XPAD_XBOXONE_VENDOR(0x24c6),/
PowerA 控制器 */


有用吗?没有,但我确实更接近目标了。有没有熟练的内核开发人员愿意帮助我?在驱动程序编辑方面,我是个菜鸟。我知道基本的编程,但这完全是另一个层次。不过我愿意学习。

#当前输出

[ 1217.579190] usb 3-2:使用 xhci_hcd 的新全速 USB 设备编号 75
[ 1217.721294] usb 3-2:发现新 USB 设备,idVendor=24c6,idProduct=542a
[ 1217.721298] usb 3-2:新 USB 设备字符串:Mfr=1,Product=2,SerialNumber=3
[ 1217.721300] usb 3-2:产品:控制器
[ 1217.721302] usb 3-2:制造商:Microsoft
[ 1217.721303] usb 3-2:SerialNumber:0000F2292EF239AD
[ 1217.723396] 输入:PowerA Spectra 作为/devices/pci0000:00/0000:00:10.1/usb3/3-2/3-2:1.0/input/input93
[ 1232.812766] usb 3-2:USB 断开连接,设备编号 75
[ 1233.060659] usb 3-2:使用 xhci_hcd 的新全速 USB 设备编号 76
[ 1233.203764] usb 3-2:发现新 USB 设备,idVendor=24c6,idProduct=542a
[ 1233.203768] usb 3-2:新 USB 设备字符串:Mfr=1,Product=2,SerialNumber=3
[ 1233.203771] usb 3-2:产品:控制器
[ 1233.203772] usb 3-2:制造商:Microsoft
[ 1233.203774] usb 3-2:序列号:0000F2292EF239AD
[ 1233.205895] 输入:PowerA Spectra 作为 /devices/pci0000:00/0000:00:10.1/usb3/3-2/3-2:1.0/input/input94


看起来它没有进行某种形式的握手?也许尝试与控制器对话,就像它是 360 控制器而不是一个控制器?

答案1

前几天我将内核升级到 3.19 以支持 xpad 控制器,但同时发现我的 PowerA Spectra 控制器无法工作。在对驱动程序进行一些调查后,我发现就像您所说的那样,驱动程序没有执行有效的握手。然而,这并不是我遇到的唯一问题,因为与交换了输入/输出端点的官方 Xbone 控制器不同,PowerA 没有交换(就像 360 一样)。

说到点子上,我已经设法让我的控制器工作了。除了官方控制器的端点之外,补丁应该可以正常工作,因为我没有编写任何代码来检测它。我不确定我是否应该为 PowerA 控制器或官方控制器添加例外,但如果我提交上游补丁,可能很快就会解决这个问题。为了修复握手,我还需要实现一个数据包队列,但幸运的是,其他人已经在内核补丁尚未被接受。我已将他们的代码包含在我的补丁中。

补丁文件(基于 3.19,但不要认为它自 3.18 以来发生了变化)可以在这里找到这里。希望您能利用它。

相关内容