Recalbox Forum

    • Register
    • Login
    • Search
    • Recent
    • Tags
    • recalbox.com
    • Gitlab repository
    • Documentation
    • Discord

    Power Script PIN356ONOFFRESET avec switches SNES d'origine

    Recalbox Général
    pin356onoffrese on off button snes originale
    8
    80
    15014
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • voljega
      voljega Banned @FF-Sounds last edited by

      @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

      FF-Sounds 1 Reply Last reply Reply Quote 0
      • FF-Sounds
        FF-Sounds @voljega last edited by

        @voljega

        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êtant 🙂

        Mais 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 !

        1 Reply Last reply Reply Quote 0
        • FF-Sounds
          FF-Sounds last edited by FF-Sounds

          @voljega @supernature2k

          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
          
          1 Reply Last reply Reply Quote 0
          • NeeeeB
            NeeeeB last edited by NeeeeB

            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...

            Vieux geek ^^
            GameList Editor : https://github.com/NeeeeB/GameList_Editor

            1 Reply Last reply Reply Quote 0
            • NeeeeB
              NeeeeB last edited by NeeeeB

              	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 ^^

              Vieux geek ^^
              GameList Editor : https://github.com/NeeeeB/GameList_Editor

              voljega 1 Reply Last reply Reply Quote 1
              • voljega
                voljega Banned @NeeeeB last edited by voljega

                @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)

                1 Reply Last reply Reply Quote 0
                • NeeeeB
                  NeeeeB last edited by

                  Les variables globales c'est le mal ^^ j'essaye toujours de les éviter au maximum.

                  Vieux geek ^^
                  GameList Editor : https://github.com/NeeeeB/GameList_Editor

                  voljega 1 Reply Last reply Reply Quote 0
                  • voljega
                    voljega Banned @NeeeeB last edited by voljega

                    @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 😛

                    NeeeeB 1 Reply Last reply Reply Quote 1
                    • NeeeeB
                      NeeeeB @voljega last edited by

                      @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.

                      Vieux geek ^^
                      GameList Editor : https://github.com/NeeeeB/GameList_Editor

                      voljega 1 Reply Last reply Reply Quote 0
                      • voljega
                        voljega Banned @NeeeeB last edited by

                        @neeeeb le problème dans ce cas c'est plutôt d'avoir une unité de 6000 lignes 😉

                        NeeeeB 1 Reply Last reply Reply Quote 0
                        • NeeeeB
                          NeeeeB @voljega last edited by

                          @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.

                          Vieux geek ^^
                          GameList Editor : https://github.com/NeeeeB/GameList_Editor

                          voljega 1 Reply Last reply Reply Quote 0
                          • voljega
                            voljega Banned @NeeeeB last edited by

                            @neeeeb dans ce cas il devrait être découpé en plusieurs sous fonctions 🙂

                            NeeeeB 1 Reply Last reply Reply Quote 0
                            • FF-Sounds
                              FF-Sounds last edited by

                              @NeeeeB @voljega

                              Salut !
                              Je vois que ma demande a suscité des réponses , ça fait plaisir 🙂 merci !
                              Je ne vais pas rentrer dans votre "bataille" idéologique ^^ je ne suis pas assez calé pour en discuter 😛

                              Je teste le code ce soir et vous tiens au courant, j'ai hâte 😉

                              Encore merci !

                              1 Reply Last reply Reply Quote 0
                              • NeeeeB
                                NeeeeB @voljega last edited by

                                @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 ^^

                                Vieux geek ^^
                                GameList Editor : https://github.com/NeeeeB/GameList_Editor

                                voljega 1 Reply Last reply Reply Quote 0
                                • voljega
                                  voljega Banned @NeeeeB last edited by

                                  @neeeeb qu'est ce que t'appelle une unité ? Un package / fichier ?

                                  NeeeeB 1 Reply Last reply Reply Quote 0
                                  • NeeeeB
                                    NeeeeB @voljega last edited by

                                    @voljega un fichier, qui peut contenir 1 à xxxx fonctions, comme un package en java, ou un fichier .c en C++

                                    Vieux geek ^^
                                    GameList Editor : https://github.com/NeeeeB/GameList_Editor

                                    voljega 1 Reply Last reply Reply Quote 0
                                    • voljega
                                      voljega Banned @NeeeeB last edited by

                                      @neeeeb ben du coup y'a toujours possibilité de le diviser en plusieurs fichiers par pas mal de critères non ?

                                      NeeeeB 1 Reply Last reply Reply Quote 0
                                      • FF-Sounds
                                        FF-Sounds last edited by

                                        @voljega @NeeeeB

                                        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...

                                        voljega 1 Reply Last reply Reply Quote 0
                                        • voljega
                                          voljega Banned @FF-Sounds last edited by

                                          @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

                                          FF-Sounds 1 Reply Last reply Reply Quote 0
                                          • NeeeeB
                                            NeeeeB @voljega last edited by

                                            @voljega bah si tu veux rendre ton architecture de code illisible parce que t'as disséminé des fonctions relatives à la même chose un peu partout, oui tu peux...mais pour garder une cohérence et une lisibilité on préfère mettre tout ce qui se rapporte a la même chose dans la même unité.
                                            Après je parle pour le Delphi, où ça ne pose aucun souci de faire comme ça.
                                            Franchement si tu voyais l'usine à gaz qu'on développe (3.500.000 lignes de code), y'a déjà assez d'unités pour qu'on s'y perde en cherchant qqchose...
                                            Je préfère vraiment quand j'ouvre U_PrescriptionEditor.pas (par exemple) y trouver tout ce qui se rapporte à l'éditeur de prescriptions que devoir aller chercher 10 unités pour avoir tout le code relatif sous les yeux. D'ailleurs ça serait même bien chiant parce qu'il faudrait importer toutes les unités entre elles etc...ce qui alourdit bien la compilation.

                                            M'enfin après on a tous une manière de développer différente.
                                            Tkt on m'a bien appris aussi que le code doit être modulaire, mais parfois trop de modulaire tue le modulaire.

                                            @FF-Sounds en même temps je t'ai donné du code dont je ne suis absolument pas certain qu'il soit correct ^^ (ceci dit Voljega n'a pas eu l'air de tiquer dessus donc ça devrait être bon).

                                            Vieux geek ^^
                                            GameList Editor : https://github.com/NeeeeB/GameList_Editor

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Want to support us ?

                                            90
                                            Online

                                            99.6k
                                            Users

                                            28.1k
                                            Topics

                                            187.1k
                                            Posts

                                            Copyright © 2021 recalbox.com