Power Script PIN356ONOFFRESET avec switches SNES d'origine
-
T'as fait une petite erreur dans le nom de la nouvelle fonction button_changed, elle est nommée button_pressed comme l'autre
Après cette correction:- Avec un switch ON/OFF, ça fonctionne correctement
- Avec un PUSH ON/OFF, le boot fonctionne correctement mais, une fois booté, il n'y que l'appui court qui est pris en compte, pas de timer visiblement, dès qu'on appui, shutdown propre direct... pas de reboot que ce soit en jeu ou sous ES
Pour le RESET, il n'y a que le reset du system Retroarch en jeu qui ne fonctionne pas...
Merci pour la modif en tout cas
-
@ff-sounds J'avoue je viens de le faire à l'arrache du bureau... pas testé
je vais éditer le post...Pour passer en momentary il faut du coup activer le :
system.power.switch=PIN356PUSHRESET dans recalbox.conf (tu peux tester?)Pour le reset RA, c'est étrange, il a toujours fonctionné chez moi.
Check le retroarchcustom.cfg et vérifie que tu as bien une ligne :
network_cmd_enable = "true"
-
Haaaa mais je ne savais pas qu'il existait ce mode PIN356PUSHRESET !!
D'où le if mode == "onoff"/elif mode == "push".... rolala...En effet, network_cmd_enable = "true" n'était pas dans retroarchcustom.cfg, à corriger dans la prochaine release, il ne doit pas y être initialement je pense, car jamais touché à retroarchcustom.cfg
ça fonctionne bien avec l'ajout de la ligne en mode PIN356PUSHRESET et PIN356ONOFFRESET
Je vais me pencher sur un script perso dans ce cas, avec:
- switch ON/OFF classique
- Reset court en jeu => reset du jeu
- Reset long en jeu => retour ES
- Reset court sous ES => reboot propre
- Reset long sous ES => rien
Je partagerai le code pour ceux que ça intéresseraient (c'est quoi la fonction pour mettre du code sur le forum ??)
Merci beaucoup !
-
@ff-sounds Pas bête cette idée de script, si tu y arrives fait une MR pour l'ajouter
-
Est ce que tu pourrais me dire comment identifier si Retroarch est en cours d'execution ?
Le reset court et long en jeu c'est facile (et ça marche !), mais pour poser les conditions pour ES il faut que je sache si on est en jeu ou pas...
Je ne sais pas comment faire du coup.
Ma pratique du code (même pas Python en plus) remonte à 2002.. lol !Please help
-
@ff-sounds Pour retroarch tu peux chercher si le pid existe (comme je le fais pour ES pour le clean shutdown).
Par contre il y a les autres emulateurs standalone, là ça se complique -
Salut !
Bon alors après plein d'essais, ça ne fonctionne pas, y'a un truc que je pige pas, tant pis, je vais laisser le reset court/long en jeu, ça me va bien comme ça
Comme tu dis, ça se complique pour les autres emus standalone, je me demande si il n'y a pas un moyen de savoir qui à la main en affichage, ce serait vite réglé !
si pas ES on est en jeu, simplementA réfléchir !
Merci pour le coup de main !
-
@ff-sounds suffit de vérifier qu'il y a un processus avec 'emulatorlauncher.py' dans le titre de lancé par
ps -ef | grep emulatorlauncher
si oui tu es en cours d'exécution d'un emulateur, sinon dans ES -
Oui c'est pas bête, mais je suis loin d'assurer à max en code !
J'ai la logique mais pas tous les "mots" pour mettre en oeuvre, alors c'est plutôt embêtantMais je vais y regarder, ça m’intéresse, ça prendra le temps que ça prendra, je demanderai peut être un coup de main
Merci pour ton aide !
-
Bonjour,
J'ai besoin de vos lumières, j'ai testé tout un tas de chose, il me manque juste un truc, je n'arrive pas un récupéré une variable (present) pour la tester...
Please help
elif (timer >1): search_launcher(channel) if present == True: nwcommand="RESET" retroarch(nwcommand) print "retroarch" killthats**t(channel) else: speed=0.05 shutdownstring="shutdown -r now" offreset(speed, shutdownstring) print "reboot" timer = 0 flag = False time.sleep(0.1) def search_launcher(channel): if channel == RESETPLUS: pids = [pid for pid in os.listdir('/proc') if pid.isdigit()] for pid in pids: try: print pid commandpath = open(os.path.join('/proc', pid, 'cmdline'), 'rb').read() if "emulatorlauncher" in commandpath: present = True except IOError: continue
-
def search_launcher(channel): if channel == RESETPLUS: proc = subprocess.Popen('ps -ef | grep emulatorlauncher', stdout=subprocess.PIPE) tmp = proc.stdout.read() if tmp: present = true else: present = false
Pas sur du tout de mon coup, le python n'est pas un langage que je maitrise ^^
Y'a même moyen de se passer de ta variable present et de tester le result renvoyé par search_launcher (à la place de present = true tu mets result = true, pareil pour false, et dans la première partie de ton code tu fais if search_launcher(channel) == true : etc... -
elif (timer >1): if search_launcher(channel) == True: nwcommand="RESET" retroarch(nwcommand) print "retroarch" killthats**t(channel) else: speed=0.05 shutdownstring="shutdown -r now" offreset(speed, shutdownstring) print "reboot" timer = 0 flag = False time.sleep(0.1) def search_launcher(channel): if channel == RESETPLUS: proc=subprocess.Popen('ps -ef | grep emulatorlauncher', stdout=subprocess.PIPE) tmp=proc.stdout.read() if tmp: return True else: return False
Un truc dans le genre, les cadors du .py seront plus à même de valider ma grouille ^^
-
@neeeeb @FF-Sounds ouip ce que t'as dit neeeeb est plus simple et moins source d'erreur, je ne me souviens plus de la portée exacte des variables en python.
autre possiblité, déclare juste ta varaible en haut de ton code en dehors de toute fonction, juste par
present = False
(après les imports tout de même) -
Les variables globales c'est le mal ^^ j'essaye toujours de les éviter au maximum.
-
@NeeeeB mouais c'est un peu idéologique en python (si tu fais pas de l'objet) ça me semble pas très dommageable perso, je le ferai pas en javascript ou en C++ ça c'est sûr
-
@voljega disons que quand t'as une unité de 6000 lignes t'as du mal à t'y retrouver après...mais sinon oui c'est pas spécialement dommageable, ça rend juste les choses moins lisibles selon moi.
-
@neeeeb le problème dans ce cas c'est plutôt d'avoir une unité de 6000 lignes
-
@voljega ça dépend du soft que tu développes tu sais...dans mon taf c'est pas rare, genre l'algo de prescription de médicaments y'a tellement de cas à gérer que rien qu'à lui tout seul il pèse pas loin des 4000 lignes, sur une fonction avec une dizaine d'inner procedures.
-
@neeeeb dans ce cas il devrait être découpé en plusieurs sous fonctions
-