Raspberry Pi 4

For information, Recalbox IS NOT compatible with Raspberry Pi 4 yet.
Pour information, Recalbox N'EST PAS encore compatible avec le Raspberry Pi 4.

The Recalbox Team.

Bouton gpio quitter émulateur


  • Staff
    Team
    Creator
    Moderator

    @Substring pas mieux



  • @Substring
    Bonsoir, puis je créer un nouveau script et bêtement l'appeler :
    system.power.switch=MONNOMDESCRIPT
    Ou suis je obligé de modifier le script rpi-pin356-power.py ?
    Par avance merci.



  • @godhunter74 me semble pas que c'est possible parce que le nom de l'option n'est pas nécessairement un nom de script (de mémoire y'a un switch/case en bash)



  • Merci beaucoup



  • @supernature2k
    Mon projet est enfin terminé, il ne me reste plus qu'à intégrer le short/long press et à ce titre je me permets de revenir vers toi pour savoir dans quelles conditions tu pourrais mettre ton script à disposition ?
    Par avance, je te remerci.
    Édit :
    Veuilles agréer l'expression de mes rétro salutations



  • @godhunter74 Quel formalisme ! tu as oublié "Veuilles agréer l'expression de mes rétro salutations" :D



  • @Substring merci du conseil 😂


  • Staff
    Team
    Creator
    Moderator

    @godhunter74

    import RPi.GPIO as GPIO
    import time
    import os
    import thread
    import datetime
    import socket
    import sys
    import argparse
    from datetime import datetime
    from configgen import recalboxFiles
    # this last one retrieves emulators bin names
    
    parser = argparse.ArgumentParser(description='power manager')
    parser.add_argument("-m", help="mode onoff or push", type=str, required=True)
    args = parser.parse_args()
    
    mode = args.m
    
    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):
    	if channel == POWERPLUS:
    		speed=0.15
    		shutdownstring="shutdown -h now"
    		nwcommand="QUIT"
    		
    	elif channel == RESETPLUS:
    		speed=0.05
    		shutdownstring="shutdown -r now"
    		nwcommand="RESET"
    		
    	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):
    				offreset(speed, shutdownstring)
    				print "shutdown"
    			elif (timer >1):
    				retroarch(nwcommand)
    				print "retroarch"
    				killthatshit(channel)
    				
    			timer = 0
    			flag = False
    		time.sleep(0.1)
    		
    	
    #	on power short press, trying to kill all listed emus 
    def killthatshit(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))
    		
    
    GPIO.add_event_detect(RESETPLUS, GPIO.BOTH, callback=button_pressed, bouncetime=2)
    GPIO.add_event_detect(POWERPLUS, GPIO.BOTH, callback=button_pressed, bouncetime=2)
    while True:
    	time.sleep(0.2)
    


  • @supernature2k
    Merci beaucoup
    @Substring
    Ca a marché 😂



  • @godhunter74 @substring @supernature2k Bonjour à tous,
    J'essaie de suivre la manip pour avoir moi aussi la possibilité de sortir des émulateurs avec un bref appui sur Power off.
    J'ai télécharger putty, connexion SSH ok,
    modif des droits en écriture ok...
    mais ou diable rpi-pin356-power.py se cache t'il ? j'ai parcouru les fichiers accéssible via mon réseau, nada...
    j'ai retirer la micro SD, fourré dans mon ordi, exploré les dossiers...mais pas mieux. Je suis persuadé que vous allez me tirer dessus en me lisant tellement la réponse doit être bête...mais par pitié, sortez-moi de là :D !



  • @babastorm dans /recalbox/scripts de mémoire



  • @Substring
    J'ai trouvé entre temps, la bonne question aurait dû être "comment accède t'on à rpi-pin356-power.py ?"
    Ce qui aurait conduit à une réponse du genre "par winSCP, banane !!"

    En comparant les fichiers rpi-pin56-power.py et rpi-pin356-power.py, je vois que sur le second, on peut ajouter une LED.

    • Puis-je ajouter la LED au code du rpi-pin56-power.py ? (j'utilise déjà le pin 3 pour autre chose et ne souhaite donc pas la fonction RESET)

    • Quel est le principe de fonctionnement de la LED (sous quelle condition est-elle allumé, sous quelle condition s'éteint-elle ?

    Merci par avance pour vos réponses ;)



  • @babastorm said in Bouton gpio quitter émulateur:

    Puis-je ajouter la LED au code du rpi-pin56-power.py ? (j'utilise déjà le pin 3 pour autre chose et ne souhaite donc pas la fonction RESET)

    Oh oui sûrement, je doute que ca pose problème. Par contre le script va sauter à chaque mise à jour

    Quel est le principe de fonctionnement de la LED (sous quelle condition est-elle allumé, sous quelle condition s'éteint-elle ?

    là faut demander à @supernature2k ou que je lise le script mais j'aurais tendance à dire "s'allume quand le script est lancé"



  • @Substring
    Ha mince, et je suppose que le problème (raz maj) reste identique si je touche à rpi-pin356-power.py ? Dommage, le script d'éjection des émulateurs de @supernature2k étais vraiment top !
    Une implémentation de prévus à court, moyen ou long terme ?

    Si je pige bien tout au code :

    • Au démarrage de Recalbox (ou ES, parfois du mal à faire la distinction tant la fusion est parfaite) la LED est allumée.
    • Lors de L'appui sur Power ou reset, la LED clignote (de deux façon différente pour distinguer sur quel bouton on à appuyé)
    • Je ne vois aucune déclaration pour éteindre la LED, je suppose que la fermeture d'ES ou Recalbox provoque l’extinction.

    Mon idée serait de modifier le comportement de la led, car je pense exploiter la pin pour monter dessus un relais de puissance pour allumer mon marquee...



  • @babastorm said in Bouton gpio quitter émulateur:

    Ha mince, et je suppose que le problème (raz maj) reste identique si je touche à rpi-pin356-power.py ?
    Dommage, le script d'éjection des émulateurs de @supernature2k étais vraiment top !

    et oui !

    Une implémentation de prévus à court, moyen ou long terme ?

    yep ! pas en 4.1, mais sûrement après. L'idée de base est de faire un escript plus général de gerstion/configuration des GPIO. Mais comme tout, ca prend du temps (beaucoup parfois même)



  • @Substring
    Ho super ! Je me doute qu'il est sûrement trop tôt pour en parler, mais ce système de gestion permettra t'il de définir le type de données attendu/envoyé sur un pin (je rêve de connecter un arduino en esclave au raspberry, pour pouvoir illuminé uniquement les boutons nécessaires suivant les émulateurs lancés (et dans la bonne couleur, tant qu'à faire) :)



  • @babastorm C'est une éventualité, mais ca restera TRES limité ... On essaierait au moins d'intégrer les qq trucs qu'on à vu à droite à gauche (genre un encodeur rotatif pour le volume, pour ne parler que de lui). Après, si on goupille bien le truc, ca reste ouvert à des scripts côté user, donc la balle serait dans "votre" camps.


  • Staff
    Team
    Creator
    Moderator

    @babastorm

    Désolé j'arrive un peu tard. Donc oui pour l'instant le script saute à chaque fois mais les mises à jour c'est pas tout le temps donc tu mets ton script modifié au chaud et à chaque update, tu écrases le script et le tour est joué.

    Pour la LED, avant elle s'allumait dès la mise sous tension, maintenant elle s'allume, s'éteint puis se rallume à peu près au moment ou ES se lance (et je ne sais pas pourquoi :D )

    Ensuite elle s'éteint en même temps que le rpi.



  • @supernature2k
    Salut,

    As-tu régler ton problème de Led qui s'allume/s'éteint/s'allume/s'éteint.
    J'ai exactement le même soucis et je sèche.

    Merci bien et désolé du déterrage mais le problème étant exactement le même =)



  • Bon au cas où ça puisse intéresser quelqu'un, juste un petit changement sûrement dû à la 4.1.
    La solution est de passer du "system.power.switch=PIN56ONOFF" au "system.power.switch=PIN356ONOFFRESET".


Log in to reply
 

Want to support us ?

183
Online

56128
Users

18258
Topics

137362
Posts

Looks like your connection to Recalbox Forum was lost, please wait while we try to reconnect.