Joystick : Remapeando botões e eixos no Linux
Saturday, July 4, 2009
Tenho muitos joypads / joysticks com muitos esquemas diferentes botão, e utilizando este simples utilitário posso reconfigurar o layout dos botões, executando um simples script, ao invés de reconfigurar todos os jogos e emuladores sempre que eu quiser usar um joystick diferente.
Faça o DOWNLOAD aqui:
http://www.mediafire.com/?msitbdej0ad
http://ubuntuforums.org/attachment.php?attachmentid=66632&d=1208782381
É uma versão alterada do utilitário "jscal" do pacote "joystick". Este utilitário permite o remapeamento de botões e eixos diretamente junto ao driver.
Compilei para o Ubuntu 7.10 AMD64, mas vai funcionar com qualquer versão posterior. Além disso, você pode recompila-lo para qualquer versão, ao fazer um "make clean; make"
Procurei uma ferramenta que me permitisse fazer isso durante muito tempo. Encontrei-a aqui: http://bugs.debian.org/cgi-bin/bugreport.cgi? bug = 444142
Citando o autor do patch (traduzido com Google translator):
Citação: Pacote: joystick Versão: 20051019-1 Severity: wishlist Tags: patch Motivação Eu encontrei nenhuma ferramenta simples que remapear o joystick eixos e botões no dispositivo controlador nível (joydev módulo), enquanto que o condutor prevê claramente a interface para isso. Meu sistema estende-se a capacidades de jscal, a fim de remapear eixos e botões. Enquanto remapeamento X no ficheiro de configuração é possível, que o mapeamento não aparentemente para ajudar em todos os jogos. Detalhe Eu comprei uma Trust GM-2550 Predator joystick no outro dia, e eu reparei que os eixos foram mapeados incorretamente: a borboleta no lugar do leme, bem como o botão do pinky eixos foram deslocados até 1 ranhura no eixo mapa. Eu encontrei nenhuma ferramenta para re-mapear os eixos sobre o driver de dispositivo (joydev) nível. Embora remapeamento é possível, no X config, esta situação não se resolve para o problema - por exemplo - SearchAndRescue. Também achei nada para remapear os botões do joystick driver de dispositivo nível. Isto é muito necessário, por exemplo, para tuxkart, porque alguns dos utiliza os botões do jogo são, infelizmente, inacessível, mantendo confortavelmente o joystick (alguns botões estão demasiado longe no stick). Achei que o módulo do kernel joydev API para não fornecer os eixos e botão remapeamento. Eu adicionei duas opções de linha de comando para jscal e dois respectivas funções que utilizam a API e remapear botões e eixos. Eu testei os eixos e remapeamento botão, e ele funciona como se pretende. I podem trocar botões e eixos como eu desejo. Implementação Por favor, localize o diff do joystick jscal.c em anexo (joystick.diff). A modificação jscal.c acrescenta dois argumentos da linha de comando: -q - print-mapeamentos Imprimir o actual eixo eo botão mapeamentos jscal como uma linha de comando e -u ...> - Set-Define mapeamentos eixo eo botão mapeamentos para o valores especificados Um exemplo de saída de-q parece com isso (./jscal -q /dev/input/js0): jscal -u 10,0,1,2,5,6,16,17,40,41,42,13,288,289,290,291,292, 293.294.295.296.297.298.299.300 /dev/input/js0 O joystick tem 10 eixos e 13 botões. Se agora é a de um interruptor eixos 2 e 5 (para obter o leme e do acelerador à direita), um tem de executar: jscal -u 10,0,1,5,2,6,16,17,40,41,42,13,288,289,290,291,292, 293.294.295.296.297.298.299.300 /dev/input/js0 mudando 2,5 para 5,2 na linha. Remapeamento botões é feito da mesma maneira. |
Além disso, existe um método muito bom de carregar a configuração automaticamente quando você conecta seu joystick, usando o udev.
Primeiro você deve criar uma regra udev. Esta é a minha:
##/etc/udev/rules.d/85-joy-config.rules # # digiusb 0e8f: 0013 BUS == "usb", ACTION == "add", attrs (idVendor) == "0e8f", attrs (idProduct) == "0013", RUN + = "/usr/bin/joy-config-digiusb.sh" # # genesis6b 0f00: 0008 BUS == "usb", ACTION == "add", attrs (idVendor) == "0f00", attrs (idProduct) == "0008", RUN + = "/usr/bin/joy-config-genesis6b.sh" |
Como você pode ver, a regra irá executar o script especificado, logo que o dispositivo com o dado idVendor e idProduct for conectado.
E assim eu fiz os scripts:
"/usr/bin/joy-config-digiusb.sh"
#!/bin/bash # digiusb 0e8f: 0013 # /usr/bin/joy-config-digiusb.sh sleep 1 jscal -u 4,0,1,16,17,10,289,290,291,293,294,295,296,297,288,292 /dev/input/js0 jscal -u 4,0,1,16,17,10,289,290,291,293,294,295,296,297,288,292 /dev/input/js1 jscal -u 4,0,1,16,17,10,289,290,291,293,294,295,296,297,288,292 /dev/input/js2 jscal -u 4,0,1,16,17,10,289,290,291,293,294,295,296,297,288,292 /dev/input/js3 |
"/usr/bin/joy-config-genesis6b.sh"
#!/bin/bash #genesis6b 0f00: 0008 #/usr/bin/joy-config-genesis6b.sh sleep 1 jscal -u 2,0,1,16,309,310,311,312,313,314,308,316,317,318,319,315,304,305,306,307 /dev/input/js0 jscal -u 2,0,1,16,309,310,311,312,313,314,308,316,317,318,319,315,304,305,306,307 /dev/input/js1 jscal -u 2,0,1,16,309,310,311,312,313,314,308,316,317,318,319,315,304,305,306,307 /dev/input/js2 jscal -u 2,0,1,16,309,310,311,312,313,314,308,316,317,318,319,315,304,305,306,307 /dev/input/js3 |
Acrescentei um "sleep 1" apenas no caso de o driver não carregar a tempo.
Importante: não se esqueça do "#!/bin/bash" ou tudo vai falhar silenciosamente.
Além disso, os meus scripts tentarão aplicar o layout para js0-3, uma vez que isso só terá êxito se o dispositivo corresponder ao layout de botões / eixos. Eu não pude descobrir uma solução mais elegante, mas esta funciona para mim.
Espero que você ache útil.
Divirta-se.
0 comentários:
Post a Comment