2012-02-23 24 views
11

Sé que las últimas versiones de Android (Honeycomb e ICS) tienen soporte para joysticks y gamepads. Los controladores de Guitar Hero (y Garage Band) son esencialmente dispositivos USB HID, ¿no?Android and Guitar Hero controller

Así que mi pregunta es: ¿Es posible recibir datos (clic de botón) de los controladores de Guitar Hero (o Rock Band) en un dispositivo Android? ¿Lo entendería el Android como una entrada de gamepad?

P.S. todo lo que necesito es detectar en mi juego la entrada de esos cinco botones en el traste de guitarra de plástico.

+0

Una alternativa sería piratear el guitarrista, dejando que un Arduino actúe como intermediario entre el androide y el guitarrista. – Andreas

Respuesta

6

Un buen punto de partida sería revisar el código fuente de Linux para Frets On Fire, que es compatible con algunos de los controladores de Guitar Hero.

Frets on Fire: SourceForge

SVN: https://fretsonfire.svn.sourceforge.net/svnroot/fretsonfire

Parece que sería difícil apoyar universalmente todos los controladores, desde diferentes plataformas. Cada consola tiene su propio protocolo, pero parece que JoyStick to keyboard emulation es posible en la PC con el controlador PS3. Hay un archivo de configuración para el controlador PS3 en el segundo enlace que puede ser útil, es para JoyToKey (que no es de código abierto), pero algunos de los valores en la configuración pueden ayudarlo.

4

Hola, esta es una idea genial. comience aquí:

http://developer.android.com/guide/topics/usb/host.html

A continuación, echa un vistazo a este ejemplo:

http://developer.android.com/resources/samples/USB/MissileLauncher/index.html

en esa muestra, hay un método llamado setDevice(UsbDevice device)

Si estuviera poniendo en práctica esto, sería comience con un duplicado del proyecto MissileLauncher y modifique este método setDevice. Me conecto todo lo que podía posible encontrar sobre el UsbDevice device y tratar de experimentar con estos condicionales en el setDevice método:

if (ep.getType() != UsbConstants.USB_ENDPOINT_XFER_INT) { 
... 
if (intf.getEndpointCount() != 1) { 

Mientras que el MissileLauncher utiliza este type y esto endpointCount, es muy probable que el controlador GarageBand tendrá valores diferentes

TAMBIÉN

cheque a cabo el método run para ver un ejemplo de ida y vuelta comunicación

DESCARGO DE RESPONSABILIDAD: No tengo idea si esto funcionará. También he visto blogs que dicen que esto no se puede hacer.

0

Supongo que debería detectar datos. Esto es posible incluso en dispositivos Android existentes, pero no es compatible con Android Market.

Para lograr esto en dispositivos que no sean 4.0, debe proporcionar una fuente de alimentación alternativa al puerto usb. Por lo general, esto se puede hacer con un concentrador usb barato que pierde potencia. El dispositivo también debe estar rooteado. Una vez que esto se complete, debe crear una interfaz para el shell del dispositivo para iniciar un idioma nativo como C fuera de su máquina virtual Dalvik.Use su C para enlazar al socket apropiado y podrá transferir datos de bus hacia adelante y hacia atrás. También es posible que necesite compilar un módulo kernel para dar soporte al controlador.

Como dije, este es un truco completo para dispositivos por debajo de 4.0. Pero es posible.