OUYA - Wiimote and Wii Classic Controller suppport
AVISO: Faça por sua conta e risco!
Como já deve ser sabido de todos que acessa este tópico, o OUYA suporta o classic controller do Wii e do Wii U, mas apenas nos emuladores do Robert Broglia. São todos aqueles que terminam em ".emu" na loja do OUYA, como o caso do MD.emu.
Bem.... ocorre que não é bem assim.....
Tava procurando algo sobre usar o wii classic controller no Ouya e me deparei com esse tópico no forum do Ouya:
Wiimotes in OUYA
Basicamente ele manda acessar o OUYA via adb (pode ser via rede) e como super usuário rodar o comando "wminput -d &" e depois parear o wiimote e pronto, wiimote funcionando no OUYA. Estranho.... mas nem tanto.
Dentro da pasta "etc" no OUYA temos o arquivo "button" com o seguinte conteúdo:
Seria a configuração de botões do wiimote e o classic controller para o OUYA, só que esse arquivo não faz nada.
MAS em "/system/usr/keylayout" temos o arquivo "Vendor_057e_Product_0306.kl", que ai sim possui a configuração de butões do wiimote.
- Arquivos kl são os arquivos de layout que o android usa para mapear um dispositivo como um teclado ou um controle. O nome do arquivo é a identificação do dispositivo.
Por fim, o OUYA tem o wminput, que nada mais é que "wminput is an Linux event, mouse, and joystick driver for the wiimote using the uinput system.", segundo a página dele:
WMINPUT.
O que ocorre é que o OUYA sempre suportou o wiimote e o wii classic controller, a turma do OUYA só não fez isso ficar automático e ativo por padrão e suspeito que os emuladores do Robert Broglia fazem exatamente isso, chamam esse pequeno programinha (wminput) com um "wminput -d &" quando você manda mapear um wiimote e pronto. Só que o controle também funciona na própria interface do OUYA e em outros programas, como BOMBSQUAD, Mupen64Plus, Retroarch, SPMC, é completamente funcional por causa do arquivo "Vendor_057e_Product_0306.kl".
Então vamos deixar o suporte ao wiimote automático e quando ligar o OUYA só precisa parear o controle:
1 - Faça ROOT no seu OUYA
Não vou tratar aqui de como fazer isso, tem vários tópicos na NET e dica aqui mesmo para fazer isso, ai é com você!
2 - Baixando o script wiimoted
Baixe o arquivo do link a seguir e deixe salvo no micro:
WIIMOTED
3 - Baixe o apk Universal Init.d e o busybox
O Universal Init.d vai ficar encarregado de rodar o script wiimoted, e o busybox é basicamente uma série de programinhas *NIX que a grande maioria de scripts usa para rodar normalmente. O Universal Init.d e o busybox são completamente free e você encontra por ai, mas o busybox é baratinho (R$5,00) na versão PRO, então eu recomendo comprar e instalar via sideload.
3 - Preparando a casa
- Instale o busybox, use a opção SmartInstall e reinicie o OUYA;
- Instale o Universal Init.d e dê persmissão permanente de root pra ele e reinicie o OUYA;
- Acesse o OUYA via adb, remonte a partição "system" com leitura e escrita:
- (su mount -o rw,remount -t ext4 /dev/block/platform/sdhci-tegra.3/by-name/APP)
- Copie o arquivo wiimoted para "/sytem/etc/init.d/" e deixe ele com permisão 755 (chmod 755 wiimoted)
Pronto, agora basta executar o script através do Universal Init.d ou deixar ele programado para rodar no boot do OUYA e sempre parear seu Wiimote!
4 - Considerações
- No arquivo wiimoted, na linha aonde temos "if [ $(ps | grep wminput | wc -l) -lt 4 ]", o 4 são quantas instâncias do wminput estarão rodando, sendo que é preciso uma para cada wiimote conectado. Antes de copiar o script, edite para o número de wiimotes que você tem.
- Se você deixar com 4 instâncias e for usar o controle oficial do OUYA, o LED do controle não vai ligar, pois o OUYA seria o 5º controle conectado, mas o sistema espera um máximo de 4 controles.
- No Retroarch o wiimote não funciona direito, o D-PAD não funciona, mas o classic controller pro funciona de boa.
- Como não tenho, não sei se o WiiU Pro Controller funciona com esse esquema.