我知道最新版本的Android(Honeycomb和ICS)支持游戏杆和游戏手柄。 Guitar Hero(和Garage Band)控制器本质上是USB HID设备,对吗?
所以我的问题: 是否可以从Android设备上的Guitar Hero(或Rock Band)控制器接收数据(按钮点击)? Android会将其理解为游戏手柄输入吗?
P.S。我只需要在游戏中检测塑料吉他琴座上五个按钮的输入。
答案 0 :(得分:6)
一个很好的起点是审查Frets On Fire的linux源代码,它支持一些Guitar Hero控制器。
SVN:https://fretsonfire.svn.sourceforge.net/svnroot/fretsonfire
看起来很难普遍支持来自不同平台的所有控制器。每个控制台都有自己的协议,但在带有PS3控制器的PC上看起来可能看起来像JoyStick to keyboard emulation。在第二个链接上有一个PS3控制器的配置文件可能会有所帮助,它适用于JoyToKey(它不是开源),但配置中的某些值可能会对您有帮助。
答案 1 :(得分:4)
http://developer.android.com/guide/topics/usb/host.html
然后,看看这个样本:
http://developer.android.com/resources/samples/USB/MissileLauncher/index.html
在该示例中,有一个名为setDevice(UsbDevice device)
如果我正在实现这一点,我将从MissileLauncher
项目的副本开始,并修改此setDevice
方法。我会记录有关UsbDevice device
的所有可能信息,并尝试使用setDevice
方法尝试使用这些条件:
if (ep.getType() != UsbConstants.USB_ENDPOINT_XFER_INT) {
...
if (intf.getEndpointCount() != 1) {
虽然MissileLauncher
使用此type
和此endpointCount
,但很可能车库频段控制器会有不同的值
ALSO
查看run
方法,查看来回通信的示例
免责声明:我不知道这是否有效。我也看过博客说这不可能。
答案 2 :(得分:0)
我的猜测是它应该检测数据。这甚至可以在现有的Android设备上实现 - 但它不适合Android Market。
要在非4.0设备上完成此操作,您必须为USB端口提供备用电源。通常这可以通过泄漏电源的廉价USB集线器来完成。该设备也必须扎根。完成此操作后,您需要创建设备shell的接口,以在Dalvik VM之外启动C之类的本机语言。使用您的C绑定到适当的套接字,您应该能够来回传输数据。您可能还需要编译内核模块以提供驱动程序支持。
就像我说的那样,对4.0以下的设备来说这是一个完整的黑客攻击。但这是有可能的。