我知道最新版本的Android(Honeycomb和ICS)支持游戏杆和游戏手柄。 Guitar Hero(和Garage Band)控制器本质上是USB HID设备,对吗?
所以我的问题: 是否可以从Android设备上的Guitar Hero(或Rock Band)控制器接收数据(按钮点击)? Android会将其理解为游戏手柄输入吗?
附:我只需要在游戏中检测塑料吉他琴座上的五个按钮的输入。
我知道最新版本的Android(Honeycomb和ICS)支持游戏杆和游戏手柄。 Guitar Hero(和Garage Band)控制器本质上是USB HID设备,对吗?
所以我的问题: 是否可以从Android设备上的Guitar Hero(或Rock Band)控制器接收数据(按钮点击)? Android会将其理解为游戏手柄输入吗?
附:我只需要在游戏中检测塑料吉他琴座上的五个按钮的输入。
一个很好的起点是审查Frets On Fire的linux源代码,它支持一些Guitar Hero控制器。
SVN: https://fretsonfire.svn.sourceforge.net/svnroot/fretsonfire
看起来很难普遍支持来自不同平台的所有控制器。每个控制台都有自己的协议,但看起来确实如此 JoyStick键盘模拟 可以在带有PS3控制器的PC上使用。在第二个链接上有一个PS3控制器的配置文件可能会有所帮助,它适用于JoyToKey(非开源),但配置中的某些值可能对您有所帮助。
嘿,这是一个非常酷的主意。从这里开始:
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
,车库频段控制器很可能会有不同的值
也
看看 run
查看来回通信示例的方法
免责声明:我不知道这是否有效。我也看过博客说这不可能。
我的猜测是它应该检测数据。这甚至可以在现有的Android设备上实现 - 但它不适合Android Market。
要在非4.0设备上完成此操作,您必须为USB端口提供备用电源。通常这可以通过泄漏电源的廉价USB集线器来完成。该设备也必须是root。完成此操作后,您需要创建设备shell的接口,以在Dalvik VM之外启动C之类的本机语言。使用您的C绑定到适当的套接字,您应该能够来回传输数据。您可能还需要编译内核模块以提供驱动程序支持。
就像我说的那样,对于低于4.0的设备来说这是一个完整的黑客但这是可能的。