Recalbox 7.0

Emulstation/Autre - Script pour communiquer a Arduino le nom du jeu en cours



  • Bonjour a tous,

    Dans le projet d’intégrer ma recalbox dans un boîtier de Megadrive, je suis en train de faire la modification d'une cartouche pour que lorsque celle-ci est branché dans son slot, j'ai un écran qui s'allume et affiche le nom du jeu en cours !

    Je pense utiliser un script python pour communiquer cela en i2c vers un Arduino mini, mais, la grande question, est-ce que les devs de recalbox on prévu une "variable système", une solution pour connaître le nom du jeu ( voir d'autre info en prime ) en cours que mon script python soit capable de récupérer ?

    Merci beaucoup !

    Fabrice.


  • Developer
    Global moderator
    Creator
    Team

    @aigleblanc tu dois pouvoir récupérer le nom de la rom à coup de  ps et de grep une fois le jeu lancé...



  • Effectivement sans doute, faut que je regarde du coup tiens...
    Mais comme il y a une belle api web, je me suis dit qu'il existait sans doute une belle api utilisable en systeme 🙂



  •  2154 root     sh -c python /usr/lib/python2.7/site-packages/configgen/emulatorlauncher.pyc -p1index 0 -p1guid 03000000790000001100000010010000 -p1name "USB Gamepad " -p1nbaxes 2 -p1devicepath /dev/input/event0  -system megadrive -rom /recalbox/share/roms/megadrive/Alien\ Soldier\ \(Europe\).zip -emulator default -core default -ratio auto  2> /recalbox/share/system/logs/es_launch_stderr.log | head -300 > /recalbox/share/system/logs/es_launch_stdout.log
     2155 root     python /usr/lib/python2.7/site-packages/configgen/emulatorlauncher.pyc -p1index 0 -p1guid 03000000790000001100000010010000 -p1name USB Gamepad  -p1nbaxes 2 -p1devicepath /dev/input/event0 -system megadrive -rom /recalbox/share/roms/megadrive/Alien Soldier (Europe).zip -emulator default -core default -ratio auto
     2156 root     head -300
     2217 root     [kworker/u8:1]
     2234 root     /usr/bin/retroarch -L /usr/lib/libretro/picodrive_libretro.so --config /recalbox/share/system/configs/retroarch/retroarchcustom.cfg --appendconfig /recalbox/share/system/configs/retroarch/megadrive.cfg /recalbox/share/roms/megadrive/Alien Soldier (Europe).zip
    

    Effectivement, dans le ps il y a moyen de trouver le nom du jeu.

    Bonjour pour l'extraire... on va sortir la doc python pour grep tout ça.

    Je suis un peu trop habituer a bosser en php avec du json 😛


    Bon, emulatorlauncher.pyc est pre-compile donc impossible de lui rajouter une instruction dedans, dommage...


  • Banned

    @aigleblanc a priori c'est pas comme ça qu'il faut procéder pour ce que tu veux faire mais il te suffit d'effacet le pyc, modifier le py et le pyc sera regénéré au premier lancement



  • Ma logique de départ est sans doute mauvaise, developper h24 pour le web on prend des habitudes.

    Pour le coup, j'ai ecrit un code py pour choper la ligne qui charge le jeu et l'emulateur et j'en extrait les infos,

    Ensuite, me suffit de mettre ce script dans le .py qu'il faut, et rajouter mon code pour envoyer ca a l'arduino.

    import subprocess
    import re
    
    proc1 = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE)
    proc2 = subprocess.Popen(['grep', 'roms'], stdin=proc1.stdout,
                             stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    
    proc1.stdout.close() # Allow proc1 to receive a SIGPIPE if proc2 exits.
    out, err = proc2.communicate()
    
    a = out.split('\n')
    
    m = re.search('\/roms\/(.*)\/(.*)\.', a[1])
    
    print(m.group(1)); #emulateur
    print(m.group(2)); # jeux ( le nom du rom ... )
    

    A défaut de mieux, j'ai déjà ca 🙂



  • @voljega said in Emulstation/Autre - Script pour communiquer a Arduino le nom du jeu en cours:

    @aigleblanc a priori c'est pas comme ça qu'il faut procéder pour ce que tu veux faire mais il te suffit d'effacet le pyc, modifier le py et le pyc sera regénéré au premier lancement

    Alors... humm, le pyc ne se régénère pas apres un reboot 🙂

    Ni meme apres une relance d'un jeu ... ecran de load, noir et retour a la liste. pas de .pyc ...

    Bon je le genere a la mano,

    Reste a trouver pourquoi il lance pas mon script que j'ai foutu avec os. dedans... la decouverte de python est brutal la lol



  • @aigleblanc je te propose une solution plus simple à mon sens: il faut modifier le fichier es_systems.cfg pour chacune des plateforme.

    La commande de lancement est la suivante :
    <command>python /usr/lib/python2.7/site-packages/configgen/emulatorlauncher.pyc %CONTROLLERSCONFIG% -system %SYSTEM% -rom %ROM% -emulator %EMULATOR% -core %CORE% -ratio %RATIO% %NETPLAY%</command>

    tu pourrais ajouter une commande avant le python en lui passant la variable %ROM% pour afficher le titre puis une commande après pour effacer. un truc du style ...
    affiche.py %ROM% && python .... && clean_affiche.py

    A réaliser pour chaque système....



  • @nordicpower said in Emulstation/Autre - Script pour communiquer a Arduino le nom du jeu en cours:

    @aigleblanc je te propose une solution plus simple à mon sens: il faut modifier le fichier es_systems.cfg pour chacune des plateforme.

    La commande de lancement est la suivante :
    <command>python /usr/lib/python2.7/site-packages/configgen/emulatorlauncher.pyc %CONTROLLERSCONFIG% -system %SYSTEM% -rom %ROM% -emulator %EMULATOR% -core %CORE% -ratio %RATIO% %NETPLAY%</command>

    tu pourrais ajouter une commande avant le python en lui passant la variable %ROM% pour afficher le titre puis une commande après pour effacer. un truc du style ...
    affiche.py %ROM% && python .... && clean_affiche.py

    A réaliser pour chaque système....

    En effet, cela éviterait de modifier les fichiers de l'os, je vais explorer la piste la après avoir fini mes testes quand meme !! 🙂

    Merci.



  • Ahahahaha, ext4-fs error 🙂

    Saloperie de carteSD



  • @nordicpower said in Emulstation/Autre - Script pour communiquer a Arduino le nom du jeu en cours:

    @aigleblanc je te propose une solution plus simple à mon sens: il faut modifier le fichier es_systems.cfg pour chacune des plateforme.

    La commande de lancement est la suivante :
    <command>python /usr/lib/python2.7/site-packages/configgen/emulatorlauncher.pyc %CONTROLLERSCONFIG% -system %SYSTEM% -rom %ROM% -emulator %EMULATOR% -core %CORE% -ratio %RATIO% %NETPLAY%</command>

    tu pourrais ajouter une commande avant le python en lui passant la variable %ROM% pour afficher le titre puis une commande après pour effacer. un truc du style ...
    affiche.py %ROM% && python .... && clean_affiche.py

    A réaliser pour chaque système....

    Je viens de tester... ca ne marche pas.

        <command>python /usr/lib/python2.7/site-packages/configgen/emulatorlauncher.pyc %CONTROLLERSCONFIG% -system %SYSTEM% -rom %ROM% -emulator %EMULATOR% -core %CORE% -ratio %RATIO% && python /recalbox/share/scripts/game.py %ROM% %EMULATOR%</command>
    

    le jeu se lance, pas de log, et quand je quitte le jeu, j'ai un ecran vert, je pense qu'il n'est pas capable de lancer deux scripts...


    Edit :

    J'ai séparé les deux commandes par ; et c'est beaucoup mieux !



Want to support us ?

171
Online

79.1k
Users

20.3k
Topics

149.1k
Posts