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

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

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

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

3 ответа

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

Лады в огне: SourceForge

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

Похоже, было бы сложно универсально поддерживать все контроллеры с разных платформ. Каждая консоль имеет свой собственный протокол, но похоже, что эмуляция клавиатуры JoyStick возможна на ПК с контроллером PS3. Во второй ссылке есть файл конфигурации для контроллера 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-концентратора, который пропускает энергию. Устройство также должно быть рутованным. После этого вам нужно создать интерфейс к оболочке устройства, чтобы запустить собственный язык, такой как C, за пределами вашей виртуальной машины Dalvik. Используйте ваш C для привязки к соответствующему сокету, и вы сможете передавать данные туда и обратно. Вам также может понадобиться скомпилировать модуль ядра для поддержки драйверов.

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

Другие вопросы по тегам