Script para configuração de controle de PSX na porta paralela

Iniciado por Akuhn, 02 de Janeiro de 2007, 20:16

tópico anterior - próximo tópico

Akuhn

Citação de: Fotondf online 15 de Outubro de 2007, 19:37
Sempre que eu uso este Script, ao final abre o JScalibrator e emite a seguinte mensagem.

CitarCould not access the specified path(s), verify that the patch(s) are specified correctly and that you have sufficient permission to access them. Also make sure that the joystick in question is actually connected, on (as needed), not in use by another program, and that the joystick driver or module is loaded (type 'modprobe <driver_name>').

Pelo o que eu entendi fala que eu não tenho acesso aos patchs e pede para eu verificar se o jostick está conectado, se está em uso por outro programa e se o driver está ativo.
Mas eu sei que o controle está devidamente conectado, não está em uso por outro programa, eu estou no modo root (sudo -i). O que está errado?
Depois de clicar em OK neste erro, aparece a mensagem:
CitarDeseja tornar essas configurações permanentes?
Clico em OK e aparece a mensagem de que a configuração está concluída.
Abro um emulador de SNES e não está funcionando.

Uso O Ubuntu Feisty 7.04. E o joystick é um de Playstation 1 original.

Analisando melhor vi que este erro também aparece no terminal:
Citarjstest: No such file or directory
O que vem a ser isto?



Bom, fui à /dev/input e criei a pasta js0. Com isso o primeiro erro foi trocado para
Citar
Joystick (Unknown) has 2 axes ((null), ?)
./joypl.sh: line 147:  9725 Falha de segmentação  (core dumped) jstest /dev/input/js0
Failed to set joystick /dev/input/js0 correction values: Inappropriate ioctl for device
Alguém poderia me dar uma força?

No seu caso acho que falta instalar alguns pacotes:
Citarsudo apt-get install jstest jscalibrator zenity

Aldefax Gilvan Kuhn

Linux User 410689

Akuhn

Fiz umas melhorias no script, ele agora suporta 2 joysticks de playstation na mesma porta.
Em breve vou testar um controle de N64 adaptado na porta paralela, só falta terminar o circuito e achar mais 1 CI 4006. Também pretendo fazer testes com controles de consoles adaptados para porta USB.

#####################
Citar
#!/bin/bash
# #########################################################
# Script para configuração de Joystick na porta paralela  #
# Desenvolvido por Aldefax Gilvan Kuhn           #
# Módulo utilizado gamecon - Kernel 2.6 Ubuntu 06.06     #
# Fiz este script para uso pessoal e estou compartilhando #
# a idéia, ele é livre para quem quiser copiar, modificar #
# ou fazer qualquer alteração, sugestões são bem-vindas.  #
# Correções, sugestões e contribuições aldefax@gmail.com  #
# Data da última modificação 21/12/2007-00:48        #
###########################################################

# Funções
Checa_Status() {
if [ $? -ne 0 ]
then
   zenity --error --text="Seu joystick não foi configurado!"
   exit 1
fi
}

# 1) Verificar se o usuário possui permissões sudo ou root para gravar em /etc/modules
if ! [ -w /etc/modules ]
then
   zenity --error --text="Não tenho permissão para gravar as alterações, desculpe!"
   zenity --error --text="Tente assim: sudo $0"
   exit 1
fi

# 2) Verificar se o pacote zenity e joystick estão instalados
dpkg -l zenity >/dev/null 2>/dev/null
Checa_Status
dpkg -l joystick >/dev/null 2>/dev/null
Checa_Status

# 3) Se não estiverem instalados fazer a instalação deles

# 4) Em qual porta de impressora o joystick está conectado?
PORTA=`zenity --title="Selecionando a porta" --width=400 --height=400 --list \
--text="Selecione a porta em que seu controle está conectado:" \
--radiolist --separator=separator --column "" --column "Cod." --column "Porta Paralela" --hide-column="2" \
   TRUE  0 "lp0 (Default para a maioria dos casos)" \
   FALSE 1 "lp1" \
   FALSE 2 "lp2" \
   FALSE 3   "lp3"`
Checa_Status

# 5) Quantos joysticks você tem conectados a essa porta?
QTDADE=`zenity --title="Quantos controles você tem contectados?" --width=400 --height=400 --list --text="Selecione quantos controles estão conectados na mesma porta:" \
--radiolist --column "" --column "Cod." --column "Quantidade" --hide-column="2" \
   TRUE  1 "Um" \
   FALSE 2 "Dois"`
Checa_Status

# 6) Qual o modelo do seu joystick?
MODELO=`zenity --title="Selecionando o controle" --width=400 --height=400 --list --text="Selecione o modelo do seu controle:" \
--radiolist --column "" --column "Cod." --column "Joystick/Gamepad" --hide-column="2" \
   TRUE  0 "Nenhum (Restaura configuração da porta paralela)" \
   FALSE 1 "Super Nintendo" \
   FALSE 2 "Nintendo" \
   FALSE 4 "Multisystem 1-botão joystick" \
   FALSE 5 "Multisystem 2-botão joystick" \
   FALSE 6 "Nintendo 64" \
   FALSE 7 "Sony PSX gamepad controller" \
   FALSE 8 "Sony PSX DDR (Dance Dance Revolution) controller" \
   FALSE 9 "SNES mouse"`
Checa_Status

# 7) Remove joystick e instala porta de impressora
if [ $MODELO -eq 0 ]
then
        (
        echo "10" ; sleep 1
        echo "# Removendo módulo joydev" ; sleep 1
   modprobe -r joydev >/dev/null 2>/dev/null
        echo "25" ; sleep 1
        echo "# Removendo módulo gamecon" ; sleep 1
   modprobe -r gamecon >/dev/null 2>/dev/null
        echo "50" ; sleep 1
        echo "# Adicionando módulo lp" ; sleep 1
   modprobe lp >/dev/null 2>/dev/null
        echo "75" ; sleep 1
        echo "# Concluíndo" ; sleep 1
        echo "100" ; sleep 1
        ) |
        zenity --progress \
          --title="Removendo joystick" \
          --text="Selecionando Módulos..." \
          --percentage=0

        if [ "$?" = -1 ] ; then
                zenity --error \
                  --text="Ação cancelada."
        fi
   zenity --error --text="Nenhum joystick não foi configurado!"

   grep -i -v gamecon /etc/modules |grep -i -v lp >/tmp/modules
   echo "lp" >>/tmp/modules
   cp /etc/modules /etc/modules-`date +%s`
   cat /tmp/modules >/etc/modules
   exit 1
fi

case $QTDADE in
1) CONF=$PORTA,$MODELO,0,0,0,0;;
2) CONF=$PORTA,$MODELO,0,0,$MODELO,0;;
3) CONF=$PORTA,$MODELO,$MODELO,$MODELO,0,0;;
4) CONF=$PORTA,$MODELO,$MODELO,$MODELO,$MODELO,0;;
5) CONF=$PORTA,$MODELO,$MODELO,$MODELO,$MODELO,$MODELO;;
esac

zenity --question --text="Deseja ativar o(s) joystick(s) agora?"
Checa_Status

# 8) Remove porta de impressora e instala joystick
        (
        echo "15" ; sleep 1
        echo "# Removendo módulo joydev" ; sleep 1
   modprobe -r joydev >/dev/null 2>/dev/null
        echo "30" ; sleep 1
        echo "# Removendo módulo gamecon" ; sleep 1
   modprobe -r gamecon >/dev/null 2>/dev/null
        echo "50" ; sleep 1
        echo "# Removendo módulo lp" ; sleep 1
   modprobe -r lp >/dev/null 2>/dev/null
        echo "75" ; sleep 1
        echo "# Adicionando módulo gamecon" ; sleep 1
   modprobe gamecon map=$CONF >/dev/null 2>/dev/null
        echo "100" ; sleep 1
        ) |
        zenity --progress \
          --title="Instalando joystick" \
          --text="Selecionando Módulos..." \
          --percentage=0

        if [ "$?" = -1 ] ; then
                zenity --error \
                  --text="Ação cancelada."
        fi

# 9) Testando joystick (não consegui colocar saída em um information dialog box)
sleep 1
jstest /dev/input/js0

# 10) Para funcionar o joystick é necessário calibrá-lo
# para calibrar o(s) joystick(s) clique em calibrate, mova para todos os lados.
# Teste todos os botões, se tiver mais de 1 joystick selecione em Joystick Device
# depois no menu Joystick clique em reopen(CTRL + E)
jscalibrator
Checa_Status

# 11) Remove porta de impressora e instala joystick
        (
        echo "15" ; sleep 1
#        echo "# Removendo módulo joydev" ; sleep 1
   modprobe -r joydev >/dev/null 2>/dev/null
        echo "30" ; sleep 1
#        echo "# Removendo módulo gamecon" ; sleep 1
   modprobe -r gamecon >/dev/null 2>/dev/null
        echo "50" ; sleep 1
#        echo "# Removendo módulo lp" ; sleep 1
   modprobe -r lp >/dev/null 2>/dev/null
        echo "75" ; sleep 1
#        echo "# Atualizando módulo gamecon" ; sleep 1
   modprobe gamecon map=$CONF >/dev/null 2>/dev/null
        echo "100" ; sleep 1
        ) |
        zenity --progress \
          --title="Atualizando configuração" \
          --text="Atualizando Módulos..." \
          --percentage=0

        if [ "$?" = -1 ] ; then
                zenity --error \
                  --text="Ação cancelada."
        fi

zenity --question --text="Deseja tornar essas configurações permanentes?"
Checa_Status

grep -i -v gamecon /etc/modules |grep -i -v lp >/tmp/modules
echo "gamecon map=$CONF" >>/tmp/modules
cp /etc/modules /etc/modules-`date +%s`
cat /tmp/modules >/etc/modules

zenity --info --text="Configuração concluída."


Aldefax Gilvan Kuhn

Linux User 410689

wingnux

Cara... MUUUUUUUUUUITO BOM!!!

Seu script salvou minha vida eheheh! Meu controle usb acabou de morrer ai desenterrei 2 pads de psx q tinha, ambos conectando-se na mesma porta, com seu script tudo foi configurado direitinho, parabens!!!  ;D

wingnux

As configuraçoes nao ficam mais salvas no Ubuntu Hardy =/ Tenho q executar o script sempre que reinicio o computador, alguma ajuda?

Akuhn

Citação de: wingnux online 24 de Abril de 2008, 18:33
As configuraçoes nao ficam mais salvas no Ubuntu Hardy =/ Tenho q executar o script sempre que reinicio o computador, alguma ajuda?

Não tenho o Hardy Heron (8.04) instalado ainda, mas assim que der um tempinho eu vou verificar, quero ver se consigo alguns modelos de joysticks usb para testar, para compatibilizar o script com esses modelos também.

Também estou pensando em fazer um pacote .deb para a instalação ficar mais fácil, daí já coloco as dependências e tudo mais, talvez também mude o script de zenity para gdialog ou gtk, mas ainda estou avaliando isso, pois por enquanto estou bastante atarrefado com a TCC do curso de Redes, a partir do mês de julho vou ter bastante tempo e prometo dar o meu melhor.

[ ]'s.
Aldefax Gilvan Kuhn

Linux User 410689

wyk.3

Amigo Akuhn,

seu script é simplismente genial!
mas devido à minha inexperiência com o Linux Metamorphose (sou usuário recém chegado do mundo rWindows)
acabei fazendo uma "pequena" besteira...

a fim de deixar "mais prático" o seu já SuperPrático script, cometi o grave erro de incluir os comandos de permissão de execução do script, no próprio script! desta forma, o próprio script requisitaria permissão pra funcionar...
mas, como nem toda intenção traz bons resultados, eu acabei que por pressa minha, achando que não tinha dado certo, deletando o script (ainda tentando entender porque fiz isso...)
resultado: o script está executando repetidamente sem fim...
preciso de ajuda :(