背景
在索尼公司的 PS3 游戏机里面,游戏手柄是通过蓝牙协议与游戏主机进行无线通信的,一个名为 Dancing Pixel 的开发商开发了一款名为 Sixaxis Controller 的安卓应用,实现了 PS3 手柄与安卓设备(安卓手机或者平板)的蓝牙连接,现在我们有机会直接使用 PS3 手柄在安卓设备上面玩游戏了。
硬件要求1:PS3 手柄 + 手柄配套的USB线
以下简称“手柄”和“USB线”,如下图所示:
硬件要求2:已经获得 ROOT 权限并且支持蓝牙的安卓设备
以下简称“设备”。实践证明,原装手柄肯定是可以连接设备的,而组装手柄则有的可以有的不可以,有意入手组装手柄的同学注意事先跟卖家确认清楚。至于设备的类型则没有限制,手机平板皆可。
经过本人实测,小米2和三星Galaxy Note 10.1都是支持与PS3手柄连接的。
软件要求1:Sixaxis Compatibility Checker
以下简称 SCC。俗话说“不是所有特仑苏都是牛奶”,同样道理,不是所有设备都能和手柄连接,于是就有了这款用来检测设备是否支持手柄的应用。
SCC 在谷歌官方的 Play 商店上就有得下载,小伙伴们赶紧先检测一下自己的设备是否支持这一令人兴奋功能吧:
安装完毕之后,先打开设备的蓝牙,然后在 SCC 里面点“Start”启动设备检测:
静待片刻,检测通过的设备会看到以下的提示语:Your device appears to be supported……此处省略好些字。
SCC 里面的“Pair Controller”是给支持 OTG 的设备用的,在本文的下一节中会加以说明。
对于未能通过检测的设备,本文接下来的内容可能就暂时与你无关了。不过话说回来,设备未能通过检测又分为硬件原因和软件(系统)原因,前者是由于设备硬件本身就不支持,我们暂时是无能为力的,而后者则是可以通过刷机或者升级系统解决,比如我手上的小米2在2013年中做过一次系统升级之后,每次启动 SCC 检测都会提示 Permission denied,后来经过确认是由于此版本的 MIUI,在授权管理模块有 Bug,会导致所有应用都无法获获得 ROOT 权限,需要等到下一次系统更新时来修复,果然再次进行系统更新之后,问题解决,整个世界又清静了。所以建议各位未能通过检测的小伙伴们,可以通过互联网,搜索一下同款设备有没有连接成功的案例,进一步寻求解决的方法。
PS3 手柄和设备连接配对的原理分析
蓝牙设备通信的时候,是根据对方(目标设备)的蓝牙地址来进行定位的。这就是传说中的“你知道我的长短,我也知道你的深浅”,这一点 PS3 手柄也不例外。但一般的蓝牙设备都具有“被发现”的特性,以蓝牙音箱为例,就是打开音箱以后,其他设备可以通过搜索来定位到蓝牙音箱,然后进行连接。但 PS3 手柄却不支持这种特性,实际上 PS3 手柄第一次和 PS3 主机配对的时候,也是需要用 USB 线才能完成的。大致的流程我推测是这样:
流程中的“(4)刷新手柄芯片上的目标设备地址”是最关键的,要实现手柄和设备的连接配对,就要想办法把设备的蓝牙地址保存到手柄芯片上。
对于支持 OTG 的设备(比如小米2),只要用 USB 线把手柄和设备连接好,再点一下 SCC 里面的“Pair Controller”,就能搞定:
设备不支持 OTG,或者手上没有 OTG 连接线的小伙伴们也不用担心,用 USB 线连接手柄和电脑,通过下面介绍的这个软件一样能搞定。
软件要求2:Sixaxis Pair Tool
以下简称“SPT”。SPT 是一个电脑上的软件,手柄第一次和设备配对的时候,可以用 SPT 把设备的蓝牙地址保存到手柄的芯片上。具体步骤如下:
1. 在电脑上下载和安装“SixaxisPairToolSetup”,百度一下,你就知道,SPT 运行之后是这个样子的:
2. 用 USB 线连接手柄和电脑,待驱动安装完毕,SPT 识别出手柄之后,能够在 Current Master 后面看到当前手柄芯片上的目标设备地址。原来的目标设备地址是多少我们不需要关心,在 Change Master 后面填好我们要连接的设备的蓝牙地址,点“Update ”。查看设备蓝牙地址的方法多了去了,这里不一一列举,在上文提到的 SCC 里面也能看到:
3. 稍等片刻,如果 Current Master 后面的地址变成了我们在 Change Master 填写的那个,说明手柄芯片上的目标设备地址已被更改,接下来就可以拔掉 USB 线,开始进行手柄和设备的蓝牙连接了。
前文提到的某些山寨手柄无法连接设备,问题就出在这里,无法通过以上的手段更改手柄芯片上的目标设备地址,我手上就有这么一个奇葩的组装手柄。但这并不意味着我就完全没有办法用这样的手柄在设备上面玩游戏了,这事还是要看人品的,比如我发现用 OTG 连接手柄和小米2之后,通过这种“有线连接”的方式,配合接下来还是能够实现
虽然完全没有办法用在设备如果遇到SCC检测通过,而SC无法连接手柄,可以重启一下设备,再重新运行SC进行连接。