Power Script PIN356ONOFFRESET avec switches SNES d'origine
-
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
-
-
@FF-Sounds de rien
@voljega c'est déjà le cas, relis ce que j'ai écrit ^^ et au final ça ne change rien, les sous fonctions (inner procedures dans mon langage) sont dans la même unité, donc le nombre de ligne de l'unité sera toujours le même...enfin bref ^^
-
@neeeeb qu'est ce que t'appelle une unité ? Un package / fichier ?
-
@voljega un fichier, qui peut contenir 1 à xxxx fonctions, comme un package en java, ou un fichier .c en C++
-
@neeeeb ben du coup y'a toujours possibilité de le diviser en plusieurs fichiers par pas mal de critères non ?
-
Bon alors après plusieurs essais, ça ne fonctionne pas, grrr
Le dernier code testé ci-dessous, il y a la LED qui fonctionne, le retour ES en jeu sur appui long, normal, pas touché à ça, mais pour les appuis courts toujours aucune réactions !
J'ai essayé un peu tout...import RPi.GPIO as GPIO import time import os import thread import datetime import socket import sys import argpa**e import subprocess from datetime import datetime from configgen import recalboxFiles # this last one retrieves emulators bin names pa**er = argpa**e.ArgumentPa**er(description='power manager') pa**er.add_argument("-m", help="mode onoff or push", type=str, required=True) args = pa**er.pa**e_args() mode = args.m # present = False IPADDR = "127.0.0.1" PORTNUM = 55355 # IP and port for retroarch network commands POWERPLUS = 3 RESETPLUS = 2 LED = 14 GPIO.setwarnings(False) # no warnings GPIO.setmode(GPIO.BCM) # set up BCM GPIO numbering GPIO.setup(RESETPLUS, GPIO.IN, pull_up_down=GPIO.PUD_UP) # GPIO on pin 3 is the GPIO 2 in BCM mode #to Reset+ GPIO.setup(POWERPLUS, GPIO.IN, pull_up_down=GPIO.PUD_UP) # GPIO on pin 5 is the GPIO 3 in BCM mode #to Power+ GPIO.setup(LED, GPIO.OUT) GPIO.output(LED, True) # GPIO on pin 8 is the GPIO 14 in BCM mode #to LED+ # Define a threaded callback function to run in another thread when events are detected def button_pressed(channel): timer = 0 flag = True while flag: if GPIO.input(channel) == False: timer += 1 print "Button pressed" elif GPIO.input(channel) == True: print "Button released" print timer #timer adds 1 each 0.1 seconds if timer = 10, button is pressed for 1s if (timer > 10): nwcommand="QUIT" retroarch(nwcommand) print "retroarch" elif (timer >1): # search_launcher(channel) # if present == True: # nwcommand="RESET" # retroarch(nwcommand) # print "retroarch" # killthats**t(channel) if search_launcher(channel) == True: nwcommand="RESET" retroarch(nwcommand) print "retroarch" killthats**t(channel) # else elif search_launcher(channel) == False: 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: proce=subprocess.Popen('ps -ef | grep emulatorlauncher', stdout=subprocess.PIPE) tmp=proce.stdout.read() if tmp: return True else: return False #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 button_changed(channel): if channel == POWERPLUS: speed=0.15 shutdownstring="shutdown -h now" offreset(speed, shutdownstring) # on power short press, trying to kill all listed emus def killthats**t(channel): if channel == POWERPLUS: for bin in recalboxFiles.recalboxBins: print bin proc = os.path.basename(bin) print proc os.system("killall -9 "+proc) # on long button press clean stop of ES then shutdown -h or -r def offreset(speed, shutdownstring): thread.start_new_thread( blink, (speed, )) flag=True pids = [pid for pid in os.listdir('/proc') if pid.isdigit()] os.system("/etc/init.d/S31emulationstation stop") while flag: flag = False for pid in pids: try: print pid commandpath = open(os.path.join('/proc', pid, 'cmdline'), 'rb').read() if "emulationstation" in commandpath: flag = True except IOError: continue os.system(shutdownstring) # threaded blinking function for LED def blink(speed): while True: GPIO.output(LED, False) time.sleep(speed) GPIO.output(LED, True) time.sleep(speed) # sending network command to retroarch (only exit and reset atm) def retroarch(nwcommand): try: s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) except socket.error: print 'Failed to create socket' sys.exit() s.sendto(nwcommand, (IPADDR, PORTNUM)) #if mode == "onoff" : GPIO.add_event_detect(POWERPLUS, GPIO.RISING, callback=button_changed, bouncetime=2) #elif mode == "push": #GPIO.add_event_detect(POWERPLUS, GPIO.BOTH, callback=button_pressed, bouncetime=2) GPIO.add_event_detect(RESETPLUS, GPIO.BOTH, callback=button_pressed, bouncetime=2) while True: time.sleep(0.2)
Help...
-
@ff-sounds essaye de faire des logs dans un fichier pour voir où l'exécution de ton code passe et si les différents types d'appui sont bien détectés