RetroPie forum home
    • Recent
    • Tags
    • Popular
    • Home
    • Docs
    • Register
    • Login
    Please do not post a support request without first reading and following the advice in https://retropie.org.uk/forum/topic/3/read-this-first

    METADATA not saving - Favorites will never remain tagged

    Scheduled Pinned Locked Moved Help and Support
    nespi casemetadata issuesfavoritesshutdown scriptgameslist.xml
    121 Posts 7 Posters 19.6k Views
    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.
    • YahmezY
      Yahmez @cyperghost
      last edited by Yahmez

      @cyperghost No. It will absolutely not work without the pullup. There is a reason I put it in my script :p

      1 Reply Last reply Reply Quote 1
      • cyperghostC
        cyperghost @Semper 5
        last edited by cyperghost

        @semper-5 Why is GPIO25 set low? Okay corrected now.
        @Yahmez Okay, that's interesting.... but I think it's no problem to integrate the script into yours. So I would suggest to remove the GPIO init and just make a call to to PID detection/removal routine.

        1 Reply Last reply Reply Quote 0
        • YahmezY
          Yahmez @Semper 5
          last edited by

          @semper-5 Looks like the script is not setting GPIO 25 high according to your GPIO readall

          cyperghostC 1 Reply Last reply Reply Quote 0
          • cyperghostC
            cyperghost @Yahmez
            last edited by cyperghost

            @Semper-5 Use sudo command for this

            echo "$GPIOpin2" > /sys/class/gpio/export
            echo "out" > /sys/class/gpio/gpio$GPIOpin2/direction
            echo "1" > /sys/class/gpio/gpio$GPIOpin2/value
            

            With GPIOpin2=25 it will be a self runner ;)

            @Yahmez Ah so you tried out without using the pullups? That's interesting. So I should investigate this ;) As I said: No POLOLU switch, no testing area.

            So I say thank you to both of you! You should integrate a small 3,3V regulator. Then it's no problem to generate this. So intead of

            python os.system("sudo shutdown -h now")

            hook to a stripped down script with sudo command

            # Detect PID or EMULATOR NAMES
            emucall="$(sed '4!d; s/\([\\"]\|[[:alnum:]_]\+=[^ ]* \)//g; s/[][(){}^$*.|+? ]/\\&/g' /dev/shm/runcommand.info)"
            espid="$(pgrep -f "/opt/retropie/supplementary/.*/emulationstation([^.]|$)")"
            
            # Handle calls and send TERM signal
            if [[ -n "$emucall" ]]; then
                emupid="$(pgrep -f "$emucall" | tr '\n' ' ')"
                pkill -P "$(echo $emupid | tr ' ' ',')"
                kill -9 "$emupid"
                sleep 4
            fi    
            
            if [[ -n "$espid" ]]; then
                touch /tmp/es-shutdown && chown pi:pi /tmp/es-shutdown
                kill "$espid"
                exit
            fi
            
            poweroff
            
            YahmezY 2 Replies Last reply Reply Quote 0
            • YahmezY
              Yahmez @cyperghost
              last edited by

              @cyperghost it's not just the Pololu, but the way everything is wired in the case, the existing switches plus the added parts to convert it for safe shutdown. The Pololu on it's own is straight forward. Pin 25 has a diode between it's self and the switch to protect it from the 5v. It's internal pullup pulls it high. When you hit the switch it connects to ground and pulls gpio 25 down, which the script detects and initiates the shutdown.

              cyperghostC 1 Reply Last reply Reply Quote 0
              • cyperghostC
                cyperghost @Yahmez
                last edited by cyperghost

                @Yahmez But what is the difference to connect a GPIO directly to ground (maybe over an external resistor) or to activate the internal ones? I see there no difference. Maybe you can explain, me?

                The internal pullup prevents from floating... yes.. but where is the difference?

                1 Reply Last reply Reply Quote 0
                • YahmezY
                  Yahmez @cyperghost
                  last edited by Yahmez

                  @cyperghost Not sure what you mean about the 3.3v regulator but the pin needs a pull-up resistor to work. It can be a physical resistor added to the circuit from the pi's 3.3v rail or it can be the internal pullup. I used the internal pullup in my tutorial because it was cheaper and easier.

                  You want the pin to be high by default, detect a low, then shutdown.

                  If you can get the internal pullups working thru bash, it should all work. If you can not, than how about stripping out the shutdown part from my script and calling the bash to exit es and shutdown? Basically have the python handle the pins and the bash handle the exit and shutdown...

                  cyperghostC 1 Reply Last reply Reply Quote 0
                  • cyperghostC
                    cyperghost @Yahmez
                    last edited by cyperghost

                    @yahmez Well a regulator would convert the 5.0V to 3.3V (just a few cents) are use the internal 3.3V rail... or strip down the script ... Already done here

                    Thank you for your patience and helpfull explaination. So it would be nice that you would implent this in your scripts.
                    It has to be excuted with sudo command

                    YahmezY 1 Reply Last reply Reply Quote 0
                    • YahmezY
                      Yahmez @cyperghost
                      last edited by

                      @cyperghost no problem. Unfortunately, I do not have the knowledge to properly incorporate your script into mine. At best, it would be trial and error on my part. Perhaps @Semper-5 can tinker with it though.

                      cyperghostC 1 Reply Last reply Reply Quote 0
                      • cyperghostC
                        cyperghost @Yahmez
                        last edited by cyperghost

                        @yahmez Well.... I can also try to deal with raspi-gpio
                        Let us work together on this if you want.
                        sudo apt install raspi-gpio will install a 66kB binary

                        help page ;)

                          raspi-gpio get [GPIO]
                        OR
                          raspi-gpio set <GPIO> [options]
                        OR
                          raspi-gpio funcs [GPIO]
                        OR
                          raspi-gpio raw
                        
                        Valid [options] for raspi-gpio set are:
                          ip      set GPIO as input
                          op      set GPIO as output
                          a0-a5   set GPIO to alternate function alt0-alt5
                          pu      set GPIO in-pad pull up
                          pd      set GPIO pin-pad pull down
                          pn      set GPIO pull none (no pull)
                          dh      set GPIO to drive to high (1) level (only valid if set to be an outpu$
                          dl      set GPIO to drive low (0) level (only valid if set to be an output)
                        Examples:
                          raspi-gpio get              Prints state of all GPIOs one per line
                          raspi-gpio get 20           Prints state of GPIO20
                          raspi-gpio set 20 a5        Set GPIO20 to ALT5 function (GPCLK0)
                          raspi-gpio set 20 pu        Enable GPIO20 ~50k in-pad pull up
                          raspi-gpio set 20 pd        Enable GPIO20 ~50k in-pad pull down
                          raspi-gpio set 20 op        Set GPIO20 to be an output
                          raspi-gpio set 20 dl        Set GPIO20 to output low/zero (must already be se$
                          raspi-gpio set 20 ip pd     Set GPIO20 to input with pull down
                        

                        @Semper-5 Ready for some tests?

                        S 1 Reply Last reply Reply Quote 0
                        • S
                          Semper 5 @cyperghost
                          last edited by

                          @cyperghost oh I'm excited to do some testing :)

                          Forgive me in advance if my replies are a bit far and few between this weekend. I packed up my system to take home but I'll be doing a lot of errands and driving. I'll check in as frequent as I can. Thank you once again team for your efforts!

                          Let's kick this can of worms!

                          cyperghostC 1 Reply Last reply Reply Quote 1
                          • cyperghostC
                            cyperghost @Semper 5
                            last edited by cyperghost

                            @semper-5

                            Please install raspi-gpio, this tool gives BASH control over internal pullup resistors ;)
                            install with sudo apt install raspi-gpio
                            That are just 66kB ;)

                            Then copy script as done times before, make it executable and execute it in SSH ;)
                            I'm not sure if it needs sudo privileges.

                            1. If it is not working, then you may alter until [[ $power == 0 ]] from 0 to 1
                            2. If this is sill not working then alter raspi-gpio set $GPIO_powerswitch ip pu from pu to pd
                              So all in all you have 4 possibilites ;)

                            then the new switch.sh

                            #!/bin/bash
                            # End Emulationstation if condition of running binary is true (v1.7)
                            # v1.00 07/21/17 by cyperghost - Inital run 
                            # v1.50 07/27/17 - Great step to exit ES even if emulators is running by runcommand.sh are started // meleu
                            # v1.56 07/30/17 - All emulators will be detected. // meleu
                            # v1.58 08/02/17 - generel method: Use PPID to detect child PIDs now (ScummVM fix) // cyperghost
                            # v1.59 11/14/17 - Inserted newest emucall detection // meleu
                            # v1.60 04/20/18 - added kill -9 to terminate emulators // julenvitoria
                            # v1.70 version for NESPi case // Yahmez, Semper-5
                            
                            # Please install raspi-gpio via sudo apt install raspi-gpio before!
                            
                            #this is the GPIO pin connected to POWER SWITCH
                            GPIO_powerswitch=24
                            
                            #this is the GPIO pin connected to POWER ON CONTROL
                            GPIO_powerctrl=25
                            
                            # Init ...
                            raspi-gpio set $GPIO_powerswitch ip pu
                            raspi-gpio set $GPIO_powerctrl op dh
                            
                            until [[ $power == 0 ]]; do
                                power=$(raspi-gpio get $GPIO_powerswitch | grep -c "level=1 fsel=0 func=INPUT")
                                sleep 1
                            done
                            
                            # Detect PID or EMULATOR NAMES
                            emucall="$(sed '4!d; s/\([\\"]\|[[:alnum:]_]\+=[^ ]* \)//g; s/[][(){}^$*.|+? ]/\\&/g' /dev/shm/runcommand.info)"
                            espid="$(pgrep -f "/opt/retropie/supplementary/.*/emulationstation([^.]|$)")"
                            
                            echo "Button Pressed pullup going from 1 to 0: $power"
                            echo "ES-PID: $espid"
                            sleep 5
                            
                            # Handle calls and send TERM signal
                            
                            if [[ -n "$emucall" ]]; then
                                emupid="$(pgrep -f "$emucall" | tr '\n' ' ')"
                                pkill -P "$(echo $emupid | tr ' ' ',')"
                                kill -9 "$emupid"
                                sleep 4
                            fi
                            
                            if [[ -n "$espid" ]]; then
                                touch /tmp/es-shutdown && chown pi:pi /tmp/es-shutdown
                                kill "$espid"
                                exit
                            fi
                            
                            echo "Script terminated not by ES!"
                            

                            Thanks for your patience!


                            @Yahmez I tested the script on my old Pi1B+. Just connected a momentary push button to GPIO24 and to ground. Works flawless if I press the button. On default (no button action) the GPIO24 status is 1, if the button is pressed the pullup is dropped to 0 and the loop is breaked! Got an excellent knowledge base from you - Thx.

                            @Semper-5
                            If you need guidance then don't hestiate to ask. But I think the script should work out of the box after installing the raspi-gpio binary

                            1 Reply Last reply Reply Quote 1
                            • S
                              Semper 5
                              last edited by Semper 5

                              EUREKA! IT WORKS!

                              Just some minor bumps in the road...some emulators/ports I can add games/entries and they'll save to favorites but can't be removed (they can be removed but on a power down, power up, they remain added). I'm going to be doing some updating from sources to see if this will fix it, but this is a huge leap in the right way team :D

                              Also to add, this has been tested on the 4.4 Retropie image

                              cyperghostC 1 Reply Last reply Reply Quote 1
                              • cyperghostC
                                cyperghost @Semper 5
                                last edited by cyperghost

                                @semper-5 Thx ;)

                                Now I have ready setted script for you!
                                This got working power button
                                If you press reset and a emulator is running it will fire you back to ES
                                If you are in ES and press reset again ES will reload!

                                It's uses the same script base as here but is much much extended!

                                Use the same procedure to install script as always....

                                But now it supports parameters:
                                in your case: scriptname.sh --nespicase &

                                Get this thread here

                                S 1 Reply Last reply Reply Quote 1
                                • S
                                  Semper 5 @cyperghost
                                  last edited by Semper 5

                                  @cyperghost I had a chance to update the script to its entirety from your thread and using your parameters, but unfortunately I'm set back a bit.

                                  I ran the script with its parameter in SSH and it was complaining about not finding commands, but with executing it, it immediately starts a shutdown command and does not keep any favorites tagged. It's a good thing I didn't put it into the autostart.sh or else it'd probably start up and shutdown as soon as ES was loaded.

                                  SSH output screenshot

                                  1 Reply Last reply Reply Quote 0
                                  • cyperghostC
                                    cyperghost
                                    last edited by

                                    Well I don't know why this is don't running.
                                    Did you have raspi-gpio installed?

                                    Please do so with sudo apt install raspi-gpio

                                    Then cd /home/pi/RetroPie/scripts

                                    Then wget https://raw.githubusercontent.com/crcerror/ES-generic-shutdown/master/multi_switch.sh && chmod +x multi_switch.sh

                                    Then run the scripts via SSH
                                    ./multi_switch.sh --nespicase &

                                    You don't need sudo, you don't need the bash interpreter to call, all automatic done ;)

                                    caver01C 1 Reply Last reply Reply Quote 0
                                    • caver01C
                                      caver01 @cyperghost
                                      last edited by

                                      @cyperghost I think there is an unmatched single quote' in the script text above, or maybe a " that should be a ' in the emucall. See how the comment # Handle calls and send TERM signal is the wrong color? Something is not right in one of the commands above that.

                                      My 4-player cocktail style cabinet built as a custom "roadcase"

                                      cyperghostC 1 Reply Last reply Reply Quote 0
                                      • cyperghostC
                                        cyperghost @caver01
                                        last edited by cyperghost

                                        @caver01 No the script is working ;)
                                        But raspi-gpio is not installed ;) As command is not found
                                        The ticks are taken from the original script.

                                        caver01C 1 Reply Last reply Reply Quote 0
                                        • caver01C
                                          caver01 @cyperghost
                                          last edited by

                                          @cyperghost Ok, fair enough, but you see how the colors are messed up before that comment, right?

                                          My 4-player cocktail style cabinet built as a custom "roadcase"

                                          1 Reply Last reply Reply Quote 0
                                          • cyperghostC
                                            cyperghost
                                            last edited by cyperghost

                                            Oh... No I get you ;)

                                            We are talking about this one here

                                            The other script was just for testing purposes if I understand the logic of the NESPICase mod done by @Yahmez

                                            By the way..... BASH is also capable of handling the pullup resistors.
                                            That's very nice, becasue now you just connect the switch with an GPIO to GROUND!

                                            raspi-gpio set YOURGPIONr ip pu sets up internal pull up resistor
                                            Now the PULLUP is setted 1 if it's not connected to ground
                                            Press the button and connect to ground and the pull is set to 0

                                            the logic

                                            until [[ $power == 0 ]]; do
                                            power=$(raspi-gpio get $GPIO_powerswitch | grep -c "level=1 fsel=0 func=INPUT")
                                            done
                                            
                                            caver01C 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.

                                            Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.