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

    Syncing button leds with gameplay

    Scheduled Pinned Locked Moved Help and Support
    led buttonsled cledspicer
    68 Posts 5 Posters 8.1k 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.
    • F
      Folly @MeduZaPaT
      last edited by Folly

      @MeduZaPaT said in Syncing button leds with gameplay:

      @Folly I complete agree :)
      anything we do, should be posted here for future use.

      Perfect !

      Based on your results, looks like the profile it is working fine, it passed the test

      I agree, I think it should work now.
      Although in my ledspicer.conf the default color is Green.
      Not sure how this works but in the galaga.xml we use White.
      Does that matter ?

      I discourage running ledspicer with sudo, but is up to you :)

      Sure, running without that should be the case.
      However the when using the GPIO of the raspberrypi with your program the led doesn't blink using it without sudo.
      Here you can find the information of that test.
      Perhaps I need to add the GPIO to the user pi group.
      Strange thing is that raspi-gpio will work without sudo
      Will have a look at that later.

      Now we can try it on the real hardware.
      Let me know the results.

      Edit :
      Great !!!
      It works ;-)
      Will take some time tomorrow to see If I can add some more stuff to it.

      Just as you said, I got it working with :

      sudo ledspicerd -f
      

      &

      emitter LoadProfile arcade/galaga
      
      or
      
      emitter LoadProfileByEmulator galaga arcade
      

      I looked again at the permissions and groups for gpio.
      Seems pi is part of the gpio group, also is dialout as I read that has to be in it as well to use the gpio as regular user.
      As raspi-gpio also works without sudo one would expect ledspicer would too.
      Is your check ok in LEDSpicer-development/src/devices/RaspberryPiGPIO/RaspberryPi.cpp as this throws a failed to initialized.
      (see that there is a typo should be failed to initialise)

      1 Reply Last reply Reply Quote 1
      • F
        Folly @hopwon
        last edited by

        @hopwon

        Are you still around ?

        H 1 Reply Last reply Reply Quote 0
        • F
          Folly @MeduZaPaT
          last edited by Folly

          @MeduZaPaT @hopwon

          I added Player2 and P2_START to the ledspicer.conf and the galaga.xml.
          I also assigned all green,red and blue from P1_START to GPIO 4 and P2_START to 5.
          So now the full mame network output works and outputting it to two GPIO's.
          I can confirm that MAME and lr-mame works and most likely lr-mess does too.
          We are now at version 258.

          I integrated ledspicer into RetroPie in a different way by using
          (paste them in /opt/retropie/configs/all) :

          • runcommand-onstart.sh
          • runcommand-onlaunch.sh
          • runcommand-onend.sh

          runcommand-onstart.sh :

          echo Load LEDSpicer deamon
          #sudo ledspicerd -f &
          sudo ledspicerd #edit : changed, see next post !
          

          runcommand-onlaunch.sh :

          # Get system name
          system=$1
          emulator=$2
          rom=$3
          command=$4
           
          # rom_bn receives $rom excluding everything from the first char to the last slash '/'
          rom_bn="${rom##*/}"
          # rom_bn receives $rom_bn excluding everything from the last char to the first dot '.'
          rom_bn="${rom_bn%.*}"
          
          emitter LoadProfile $system/$rom_bn
          

          runcommand-onend.sh

          echo Kill LEDSpicer deamon
          killall -15 ledspicerd
          

          Would like to add some impulse / Blinker xml's too.
          Tried some stuff but it did not work.
          If I want to combine "mame imput" and "impulse" or "Blinker" xml's how do I do that.
          Must I load multiple profiles with emitter to accomplish that ?

          MeduZaPaTM 1 Reply Last reply Reply Quote 1
          • MeduZaPaTM
            MeduZaPaT @Folly
            last edited by MeduZaPaT

            @Folly said in Syncing button leds with gameplay:

            @MeduZaPaT @hopwon

            I added Player2 and P2_START to the ledspicer.conf and the galaga.xml.
            I also assigned all green,red and blue from P1_START to GPIO 4 and P2_START to 5.
            So now the full mame network output works and outputting it to two GPIO's.
            I can confirm that MAME and lr-mame works and most likely lr-mess does too.
            We are now at version 258.

            Excellent news!

            I integrated ledspicer into RetroPie in a different way by using
            (paste them in /opt/retropie/configs/all) :

            • runcommand-onstart.sh
            • runcommand-onlaunch.sh
            • runcommand-onend.sh

            runcommand-onstart.sh :

            echo Load LEDSpicer deamon
            sudo ledspicerd -f &
            

            runcommand-onlaunch.sh :

            # Get system name
            system=$1
            emulator=$2
            rom=$3
            command=$4
             
            # rom_bn receives $rom excluding everything from the first char to the last slash '/'
            rom_bn="${rom##*/}"
            # rom_bn receives $rom_bn excluding everything from the last char to the first dot '.'
            rom_bn="${rom_bn%.*}"
            
            emitter LoadProfile $system/$rom_bn
            

            runcommand-onend.sh

            echo Kill LEDSpicer deamon
            killall -15 ledspicerd
            

            Good Work.
            Just note that ledspicerd -f is only for testing,
            What I mean is, the -f is not necessary for normal use (just ledspicerd is more than ok) but, while testing, gives nice debug output.
            Also for normal use, when you get everything the way you want working, in the config, set LogLevel to Warning, so the log file don't eat too much space.
            So change:

            sudo ledspicerd -f &
            

            with

            sudo ledspicerd
            

            I will check on my RPI how I did the permissions so the GPIO was accessible to the user and come back to you.

            Would like to add some impulse / Blinker xml's too.
            Tried some stuff but it did not work.
            If I want to combine "mame imput" and "impulse" or "Blinker" xml's how do I do that.
            Must I load multiple profiles with emitter to accomplish that ?

            Paste the other plugins you need help with, I will fix the errors for you.

            BTW, I am working on the dialog to add Input plugins right now :)

            a78fbb24-fec3-46f0-918d-4515c59a243c-image.png

            LEDSpicer

            H 1 Reply Last reply Reply Quote 1
            • H
              hopwon @Folly
              last edited by

              @Folly Sorry, was tied up all week. Am back now and busy catching up. I can put some time in this weekend to work on this. @MeduZaPaT Thanks for joining in!

              F 1 Reply Last reply Reply Quote 2
              • F
                Folly @hopwon
                last edited by

                @hopwon

                Sure, welcome back again ;-)

                H 1 Reply Last reply Reply Quote 1
                • H
                  hopwon @Folly
                  last edited by

                  @Folly @MeduZaPaT I have it nearly working but I think my issue now is network.
                  Following the instructions above, I have created the profile for the game, ledspicerd -p arcade/invaders works and produces output but nothing in game.
                  Whilst I have the game up and running, trying netcat (nc -v 127.0.0.1 8000) produces an error:

                  nc: connect to 127.0.0.1 port 8000 (tcp) failed: Connection refused
                  

                  Running with -output console, I see the led0 & led1 in the runcommand.log.

                  I think this is a network rather than configuration issue. NC works if I set up a server on another screen (nc -l -p localhost) then run nc -v localhost, the command is accepted but no output fro mame.
                  I can confirm mame is running and the game is loaded OK.
                  Where to look now, any ideas?

                  MeduZaPaTM F 3 Replies Last reply Reply Quote 0
                  • MeduZaPaTM
                    MeduZaPaT @hopwon
                    last edited by

                    @hopwon That looks like MAME is not opening the network port.
                    Can you check the MAME configuration? It is some replies above.
                    Yo need to set MAME to send output data using the network, so nc or ledspicer can pick that info.

                    LEDSpicer

                    1 Reply Last reply Reply Quote 0
                    • F
                      Folly @hopwon
                      last edited by Folly

                      removed double post

                      1 Reply Last reply Reply Quote 0
                      • F
                        Folly @hopwon
                        last edited by Folly

                        @hopwon said in Syncing button leds with gameplay:

                        @Folly @MeduZaPaT I have it nearly working but I think my issue now is network.
                        Following the instructions above, I have created the profile for the game, ledspicerd -p arcade/invaders works and produces output but nothing in game.
                        Whilst I have the game up and running, trying netcat (nc -v 127.0.0.1 8000) produces an error:

                        nc: connect to 127.0.0.1 port 8000 (tcp) failed: Connection refused
                        

                        Running with -output console, I see the led0 & led1 in the runcommand.log.

                        I think this is a network rather than configuration issue. NC works if I set up a server on another screen (nc -l -p localhost) then run nc -v localhost, the command is accepted but no output fro mame.
                        I can confirm mame is running and the game is loaded OK.
                        Where to look now, any ideas?

                        I checked invaders on my laptop.
                        I had no output in both situations (network and console).
                        I am not able to check the source code of invaders now as I cannot download it now.
                        I will check it on my pi.
                        I checked other drivers yesterday and you will be able to find whether there is led output or not in the source code.
                        For now it seems invaders doesn't have it.

                        Did you load nc after mame or before ?
                        Make sure you run mame first and then nc.
                        I use socat now for checking, it works much better as it will output line by line with : ,cr .
                        Make sure you install it first :

                        sudo apt install socat
                        

                        Then use :

                        socat - TCP4:0:8000,cr
                        

                        You will get the same output as you get when outputting to the console.

                        Edit :
                        I looked at the source of invaders :

                        pi@raspberrypi:~ $ /opt/retropie/emulators/mame/mame -listsource invaders
                        invaders         midw8080/mw8080bw.cpp
                        

                        (is in src/mame/.....)
                        Searching in mw8080bw.h on "output_finder" looks like it can output to lamps :

                        output_finder<16> m_exp_lamps;
                        output_finder<4> m_torp_lamps;
                        

                        Not sure why there is no output either.

                        H 1 Reply Last reply Reply Quote 0
                        • H
                          hopwon @Folly
                          last edited by

                          @Folly Thanks for the info, I just assuumed Invaders would work! I will download the correct version of Galaga (not sure what version I have but it doesn't work with lr-mame) then I am working on the same game.
                          @MeduZaPaT You are correct I had not configured mame for network output. Thanks for the tip

                          H 1 Reply Last reply Reply Quote 1
                          • H
                            hopwon @hopwon
                            last edited by

                            @hopwon Waaaahooooooo! I did it. Well I have now got -network working for mame and lr-mame

                            I could not get the correct ROM version for mame/lr-mame for Galaga so I used Galaxians instead:

                            socat - TCP4:0:8000,cr
                            mame_start = galaxian
                            lamp0 = 1
                            lamp0 = 0
                            lamp0 = 1
                            lamp0 = 0
                            lamp0 = 1
                            lamp0 = 0
                            ...
                            ...
                            
                            

                            This behavior is the games starts, put a coin in and it start flashing Start (lamp0 on and off) until Start is pressed and then it stops flashing. As long as there is credit in, when a game ends it starts flashing the Start button (if there is credit, if not, it stays off).
                            Now to set up LEDSpicer mame plugin...
                            I will update later

                            1 Reply Last reply Reply Quote 1
                            • H
                              hopwon
                              last edited by

                              @MeduZaPaT Its not producing the output I want, can you check my profile_arcade and inputs file to see if you can figure whats wrong? I can confirm that during testing the games is outputting lamp0 =.... text.

                              I am running ledspicer in foreground for debug but its not outputing anything:

                              galaxians.xml

                              <?xml version="1.0" encoding="UTF-8"?>
                              <LEDSpicer
                                  version="1.0"
                                  type="Input"
                                  name="Mame"
                              >
                                      <map
                                          type="Element"                 
                                          target="P1_START"   
                                          trigger="lamp0 = 0"
                                          color="Purple"
                                          filter="Normal"
                                      />
                              </LEDSpicer>
                              
                              

                              profile_arcade.xml

                              <?xml version="1.0" encoding="UTF-8"?>
                              <LEDSpicer
                              	version="1.0"
                              	type="Profile"
                              	backgroundColor="Black"
                              >
                              <inputs>
                              	<input name="galaxians"/>
                              </inputs>
                              </LEDSpicer>
                              

                              I also tried creating a game specific profile with the same results:

                              profiles/arcade/galaxians.xml

                              <?xml version="1.0" encoding="UTF-8"?>
                              <LEDSpicer
                              	version="1.0"
                              	type="Profile"
                              	backgroundColor="Black"
                              >
                              	<inputs>
                              		<input name="galaxians"/>
                              	</inputs>
                              </LEDSpicer
                              

                              As a double check I can confirm that P1_START is valid and working via ledspicerd -e

                              MeduZaPaTM 1 Reply Last reply Reply Quote 0
                              • MeduZaPaTM
                                MeduZaPaT @hopwon
                                last edited by MeduZaPaT

                                @hopwon hey, is only the name for triggers, not the value or the =:
                                lamp0 = 0 means TRIGGER with name lamp0, VALUE 0, you only need the name (lamp0 in this case)
                                so in ledspicer you should type just this:

                                        <map
                                            type="Element"                 
                                            target="P1_START"   
                                            trigger="lamp0"
                                            color="Purple"
                                            filter="Normal"
                                        />
                                

                                so ledspicer will read that trigger and check the value as 0 = OFF and 1 = ON

                                You will find a lot of different triggers coming out of MAME for different games, there is no standard, I have an Excel file I can share with you with most of them (outdated but better than nothing),
                                LAMP, LED, LIGHT, TRIGGER, KNOCKER, and a big etc.

                                look, this my input for terminator 2 (just a test I did for the this video on YT

                                <?xml version="1.0" encoding="UTF-8"?>
                                <LEDSpicer
                                	version="1.0"
                                	type="Input"
                                	name="Mame"
                                >
                                	<map
                                		type="Group"
                                		target="player 1"
                                		trigger="Left_Gun_Red_Led"
                                		color="Red"
                                		filter="Normal"
                                	/>
                                	<map
                                		type="Group"
                                		target="player 1"
                                		trigger="Left_Gun_Green_Led"
                                		color="Green"
                                		filter="Normal"
                                	/>
                                	<map
                                		type="Group"
                                		target="player 1"
                                		trigger="Left_Flash_1"
                                		color="Yellow"
                                		filter="Combine"
                                	/>
                                	<map
                                		type="Group"
                                		target="player 1"
                                		trigger="Left_Flash_2"
                                		color="Brown"
                                		filter="Combine"
                                	/>
                                	<map
                                		type="Group"
                                		target="player 3"
                                		trigger="Left_Flash_3"
                                		color="Gold"
                                		filter="Combine"
                                	/>
                                	<map
                                		type="Group"
                                		target="player 3"
                                		trigger="Left_Flash_4"
                                		color="Orange"
                                		filter="Combine"
                                	/>
                                
                                	<map
                                		type="Group"
                                		target="player 2"
                                		trigger="right_Gun_Red_Led"
                                		color="Red"
                                		filter="Normal"
                                	/>
                                	<map
                                		type="Group"
                                		target="player 2"
                                		trigger="right_Gun_Green_Led"
                                		color="Green"
                                		filter="Normal"
                                	/>
                                	<map
                                		type="Group"
                                		target="player 2"
                                		trigger="right_Flash_1"
                                		color="Yellow"
                                		filter="Combine"
                                	/>
                                	<map
                                		type="Group"
                                		target="player 2"
                                		trigger="right_Flash_2"
                                		color="Brown"
                                		filter="Combine"
                                	/>
                                	<map
                                		type="Group"
                                		target="player 4"
                                		trigger="right_Flash_3"
                                		color="Gold"
                                		filter="Combine"
                                	/>
                                	<map
                                		type="Group"
                                		target="player 4"
                                		trigger="right_Flash_4"
                                		color="Orange"
                                		filter="Combine"
                                	/>
                                
                                </LEDSpicer>
                                

                                Hope that this helps
                                regards.

                                LEDSpicer

                                H 2 Replies Last reply Reply Quote 2
                                • H
                                  hopwon @MeduZaPaT
                                  last edited by

                                  @MeduZaPaT Thanks I am implementing your suggestions now :)
                                  Incidently I found that, just for Galaxians there are two LEDs, P1 Start and P2 Start. When looking at the network output from mame I see (with one credit) lamp0 = 0, lamp0 = 1, lamp0 = 0, etc.
                                  Put two credits in then:
                                  lamp0 = 1
                                  lamp1 = 1
                                  lamp0 = 0
                                  lamp1 = 0

                                  So its basically flashing both start buttons on and off.
                                  Will LEDSpicer accept the whole string or does it not work with spaces in the text?

                                  MeduZaPaTM 1 Reply Last reply Reply Quote 0
                                  • H
                                    hopwon @MeduZaPaT
                                    last edited by

                                    @MeduZaPaT said in Syncing button leds with gameplay:

                                    You will find a lot of different triggers coming out of MAME for different games, there is no standard, I have an Excel file I can share with you with most of them (outdated but better than nothing),
                                    LAMP, LED, LIGHT, TRIGGER, KNOCKER, and a big etc.

                                    One project is to wire up a knocker for QBert so would appreciate any and all help and later on Santa is going to bring me some base shakers which will be fun to enable with LEDSpicer....

                                    MeduZaPaTM 1 Reply Last reply Reply Quote 0
                                    • H
                                      hopwon
                                      last edited by

                                      Its working! Its WORKING! Oh man I am over the moon, I understand (mostly!) now how it all hangs together and works and it does WORK :)

                                      I have to say a massive thanks both of you for supporting this, @Folly & @MeduZaPaT
                                      Its been a great education which I will put to good use. I will try to build some cool animations and triggers and whatever I want now :)

                                      F 1 Reply Last reply Reply Quote 1
                                      • F
                                        Folly @hopwon
                                        last edited by Folly

                                        @hopwon

                                        Just an idea.
                                        Can you summarise this topic in your first post, like a tutorial or is this too much to ask ?

                                        H 1 Reply Last reply Reply Quote 0
                                        • H
                                          hopwon @Folly
                                          last edited by

                                          @Folly I feel like I should. To be honest I have been looking for years and apart from the Wiki, there is that post on attractmode and thats it. After all the input from you guys its the least I can do :)

                                          F 1 Reply Last reply Reply Quote 0
                                          • F
                                            Folly @hopwon
                                            last edited by

                                            @hopwon

                                            Would be great ;-)
                                            Take your time, no hurry.

                                            It's not done yet, I have to look at the Blinker and the Impulse stuff when I can.
                                            And most likely more.

                                            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.