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 17.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.
    • mituM
      mitu Global Moderator @Semper 5
      last edited by

      @semper-5 You copied the contents of the script in Notepad by any chance ? Use Notepad++ to create/edit the scripts in Windows and set the line endings to Unix (LF), Notepad saves with Win/DOS line endings (the extra \r character in the script file).

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

        @mitu yup that's what I've been using the whole time (Notepad ++)
        I've made scripts with no problems many times before. but its just getting hung up on this one

        anyway I can get this script in RAW? I could clear up just a few of the errors but not the rest. :/

        cyperghostC J 2 Replies Last reply Reply Quote 0
        • cyperghostC
          cyperghost @Semper 5
          last edited by cyperghost

          @semper-5 The best way would be to edit with SSH connection and nano.

          use putty, don't use WINSCP

          1. cd /home/pi/RetroPie/scripts
            1.1 if directory scripts does not exists use mkdir /home/pi/RetroPie/scripts
            1.2 then try again with cd /home/pi/RetroPie/scripts
          2. rm switch.sh this will remove script
          3. nano switch.sh copy text from code box below
            3.1 After inserting code with left mouse button
            3.2 Press CTRL+X and press Y to save script
          4. chmod +x switch.sh makes script executable
          5. sudo ./switch.sh & to start script in background with root privileges ;)

          switch.sh CODEBOX

          #!/bin/bash
          # End Emulationstation if condition of running binary is true (v1.599)
          # v1.0 07/21/17 by cyperghost - Inital run 
          # v1.5 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.595 11/14/17 - Inserted newest emucall detection // meleu
          # v1.599 04/18/18 - NESPI case
          # v1.6 04/20/18 - added kill -9 to terminate emulators // julenvitoria
          # greetings @pjft for his famous favorits and @meleu for his RegEx sniplets and his constant help! 
          
          #this is the GPIO pin connected to POWER SWITCH
          GPIOpin1=24
          
          #this is the GPIO pin connected to POWER ON CONTROL
          GPIOpin2=25
          
          echo "$GPIOpin1" > /sys/class/gpio/export
          echo "in" > /sys/class/gpio/gpio$GPIOpin1/direction
          echo "$GPIOpin2" > /sys/class/gpio/export
          echo "out" > /sys/class/gpio/gpio$GPIOpin2/direction
          echo "1" > /sys/class/gpio/gpio$GPIOpin2/value
          
          power=$(cat /sys/class/gpio/gpio$GPIOpin1/value)
          [[ $power == 0 ]] && switchtype="1" #Not a momentary button
          [[ $power == 1 ]] && switchtype="0" #Momentary button
          
          until [[ $power == $switchtype ]]; do
              power=$(cat /sys/class/gpio/gpio$GPIOpin1/value)
              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: $power - Switchtype: $switchtype"
          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!"
          
          1 Reply Last reply Reply Quote 0
          • J
            julenvitoria Banned @Semper 5
            last edited by

            @semper-5 It's very strange... for example lines 10, 13, 16, 22 and 26 are blank... It works for me but not in the totality of the emulators.

            @cyperghost As I mentioned it really works for me, but not in the totality of the emulators... For example it works with retroarch and advancemame but doesn't work with pifba, pcsx-rearmed or mame4all. If I try the commands separately pgrep -f doesn't detect this emulators... pgrep -f "$emucall" doesn't show any pid. Any suggestion for detect the emulators properly?

            Thanks

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

              @julenvitoria Thanks for the headup. As I wrote this is just a basic script! meleu is the RegEx wizard out here. I changed codebox.... please try again.
              I added emupid="$(pgrep -f "$emucall" | tr '\n' ' ')" pkill -P "$(echo $emupid | tr ' ' ',')"
              PS: That are the outfindings of @meleu

              I'm working on annother emulator detection - Shutdown script some input for better emulator detection

              The errors @Semper-5 descripes are caused because these "empty" lines contain Carriage Return (CR) character (0x0D, \r) ... Windows uses linefeed (LF) and carrige return (CR) for creating a new line.

              1 Reply Last reply Reply Quote 0
              • J
                julenvitoria Banned
                last edited by

                @cyperghost said in METADATA not saving - Favorites will never remain tagged:

                emupid="$(pgrep -f "$emucall" | tr '\n' ' ')" pkill -P "$(echo $emupid | tr ' ' ',')"

                Hi! I tried your new code but don't work with pifba nor mame4 all. However it worked with pcsx-rearmed emulator. I tried kill -9 "$emupid" and then it works. I dont know if it is advisable or not to do this. If you know any other way I would appreciate it.

                Thanks!

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

                  @julenvitoria said in METADATA not saving - Favorites will never remain tagged:

                  @cyperghost said in METADATA not saving - Favorites will never remain tagged:

                  emupid="$(pgrep -f "$emucall" | tr '\n' ' ')" pkill -P "$(echo $emupid | tr ' ' ',')"

                  Hi! I tried your new code but don't work with pifba nor mame4 all. However it worked with pcsx-rearmed emulator. I tried kill -9 "$emupid" and then it works. I dont know if it is advisable or not to do this. If you know any other way I would appreciate it.

                  Thanks!

                  Really don't know why this is happening. I just copied some text parts.
                  But you may test this script here, please?
                  All you have to do is to copy from textbox into a bashfile. Maybe emu_shutdown.sh, make it executable with chmod +x emu_shutdown.sh and execute it via SSH if an emulator is running?

                  Maybe you will get better results then? It will only terminate emulators, not more not less.

                  1 Reply Last reply Reply Quote 0
                  • J
                    julenvitoria Banned
                    last edited by julenvitoria

                    @cyperghost Hi, I tried your emulator detector too and the result was the same more or less. There were some emulators that dont stop... If you prefer I could write you throug the other thread.

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

                      @julenvitoria Thanks! You are right the signal levels are ignored by some emulators.
                      I would suggest to use kill -9 <PID>

                      I will update both scripts. So you see - once again something new explored .... ;)

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

                        Ok, so no errors to report. But the power switch doesn't work now.
                        I temporarily took out the entry in autostart.sh just to see what would happen in putty. and like I said, no errors. but when i press the power button (off) it does nothing

                        cyperghostC 1 Reply Last reply Reply Quote 0
                        • J
                          julenvitoria Banned @cyperghost
                          last edited by

                          @cyperghost wow! It’s perfect!! I’ll try the other script later

                          Thanks!

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

                            @semper-5 Please do so as you wrote. Take auto entry from autostart.sh!
                            and do a manuel start via SSH to see error messages. I need the routine how the POLOLU acts with the switch.

                            Please use sudo /path/to/switch.sh & command with the latest script version.

                            @julenvitoria You are welcome! Thank you for testing. The other script is also working! I tested several times.

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

                              @cyperghost it doesn't output any errors.

                              I enter: sudo bash /home/pi/RetroPie/scripts/switch.sh &
                              output: [1] 10921

                              I think it s working to some extent because if I try to run it again it will tell line 18 & 20 write protection due to device being busy

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

                                @semper-5 That's okay ... this [10921] thing is the process number.
                                So what happens if you press the power button? With the script in background running?

                                You should see a message like:
                                Switch press 0 - Switchtype 1
                                ES-PID: 1232

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

                                  @cyperghost no message, no activity, no error. nothing :/

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

                                    @semper-5 What is the output of
                                    cat /sys/class/gpio/gpio24/value

                                    if the power button is pressed, and then if the power button is released?
                                    It should be 1 if pressed and 0 if released

                                    The script must be active for this ;)

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

                                      @cyperghost it's 0 on both being pressed and released

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

                                        @semper-5 That's the error here ... but tell me why? That's not possible! The python scripts are working?

                                        Maybe @Yahmez knows the answer?
                                        If we watch for input of GPIO24 (=power button), why there is no change in input value?

                                        S YahmezY mituM 3 Replies Last reply Reply Quote 0
                                        • S
                                          Semper 5 @cyperghost
                                          last edited by

                                          @cyperghost I know! Our frustration is real. I mean it works as it should with Yahmez's script. And just to be sure I am following your instructions immaculately, yours is the ONLY script I'm running on this fresh image.

                                          Geez it was embarrassing you guys telling me to use Notepad++ and how to invoke the script LOL. but I do appreciate all your efforts to walk me through it. I'm just thinking you guys must be getting as frustrated with me as I'm getting frustrated with this not working - I'm yelling at this damn box like "you're making an idiot out of me in front of the community, damn you!" haha

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

                                            @cyperghost
                                            I am late to the game here but if my script works as intended (minus saving metadata which was never implemented) and cypherghost's script is not seeing the button presses then the logical thing would be to compare the two scripts and see how they are being handled differently.

                                            cyperghostC 1 Reply Last reply Reply Quote 1
                                            • 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.