Контроллер Android и Guitar Hero

Я знаю, что в последних версиях Android (Honeycomb и ICS) есть поддержка джойстиков и игровых приставок. Контроллеры Guitar Hero (и Garage Band) - это устройства USB HID, правда?

Итак, мой вопрос: Возможно ли получать данные (нажатие кнопок) с контроллеров Guitar Hero (или Rock Band) на Android-устройстве? Будет ли Android понимать это как вход геймпада?

P.S. все, что мне нужно, - это обнаружить в моей игре вход от этих пяти кнопок на пластиковой гитаре.

Ответ 1

Хорошей отправной точкой будет просмотр исходного кода linux для Frets On Fire, который поддерживает некоторые из контроллеров Guitar Hero.

Фрейты в огне: SourceForge

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

Похоже, что было бы сложно повсеместно поддерживать все контроллеры с разных платформ. У каждой консоли есть собственный протокол, но это похоже на JoyStick для эмуляции клавиатуры можно на ПК с контроллером PS3. Существует файл конфигурации для контроллера PS3 на втором канале, который может быть полезен, это для JoyToKey (который не является открытым исходным кодом), но некоторые из значений в конфигурации могут вам помочь.

Ответ 2

Эй, это действительно крутая идея. начинайте здесь:

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, чтобы увидеть пример обратной и четвертой связи

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я не знаю, будет ли это работать. Я также видел блоги, в которых говорится, что это невозможно.

Ответ 3

Я предполагаю, что он должен обнаруживать данные. Это возможно даже на существующих устройствах Android - но это не Android Market.

Чтобы выполнить это на устройствах не-4.0, вы должны предоставить альтернативный источник питания для USB-порта. Обычно это можно сделать с помощью дешевого USB-концентратора, который теряет мощность. Устройство также должно быть внедрено. Как только это будет завершено, вам необходимо создать интерфейс для оболочки устройства, чтобы запустить родной язык, например, C вне вашей Dalvik VM. Используйте C для привязки к соответствующему сокету, и вы должны иметь возможность шить данные взад и вперед. Вам также может потребоваться скомпилировать модуль ядра, чтобы предоставить поддержку драйверов.

Как я уже сказал, это полный взлом для устройства ниже 4.0. Но это возможно.