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 10.3k 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.
    • FollyF
      Folly @hopwon
      last edited by

      @hopwon

      It seems LEDspicer is the way to go but it's very daunting :
      https://retropie.org.uk/forum/topic/21573/ledspicer-led-animation-controller-for-linux
      https://sourceforge.net/p/ledspicer/wiki/Deployment/

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

        @Folly I am using LEDSpicer and I want to get it working as discussed. LEDSpicer does have a PulseAudio plugin to make cool VUE Meter type animations etc but I am not using PulseAudio :)
        So I need to make it work via maybe a program to watch a log file and when it see's "0" it runs a profile/animation to light the credit button.
        Not the most elegant solution but I am not going to use a ton of this type of animation/interaction so just for one or two situations I think is fine

        FollyF 2 Replies Last reply Reply Quote 0
        • FollyF
          Folly @hopwon
          last edited by Folly

          @hopwon

          I configured with --enable-raspberrypi and compiled.
          But the files are looked up in /usr/local.
          So I copied the rules files and the config file to that prefix and added the user to the groups.
          This command didn't seem to work :

          sudo udevadm control --reload-rules && udevadm trigger
          

          After that I am lost.

          If you get it working let me know how you did it.


          I was only able to extract the led info if I used -output console.
          When using -output network and using wget, curl, netcat, telnet or socat I can't extract the data because it's refreshed on the same line.
          Very tricky to find a simple solution ;-(

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

            @Folly
            sudo udevadm control --reload-rules && sudo udevadm trigger - missing sudo. I installed it as a Service, its just more convenient.
            I will try tonight when I get home but does the command spit out error codes as we can use them...

            FollyF 2 Replies Last reply Reply Quote 0
            • FollyF
              Folly @hopwon
              last edited by Folly

              @hopwon

              It took me more than 4 hours to find a solution in bash readout the socket info correctly.
              The problem is that every line send by mame ends with /r (carriage return) only.
              Therefor no new line is written to the sdio and so the info cannot be grabbed to do something.
              Have looked a numerous options like sed, awk etc but nothing worked.
              With this I came a bit further, showing more lines and the \r :

              netcat 0 8000|od -c
              

              But piping it again did not work good enough.
              Instead of netcat I found socat which will work somewhat the same and still had the same issue using it like this :

              socat - TCP4:localhost:8000
              

              Now I found this site :
              https://superuser.com/questions/942217/how-do-i-interactively-type-r-n-terminated-query-in-netcat
              Which explaines to use ,crnl at the end.
              I figured I only try ,cr and that worked like this :

              socat - TCP4:localhost:8000,cr
              

              Now we can read the led info and do something with it :

              socat - TCP4:localhost:8000,cr|while read line;do echo $line;done
              

              echo $line can be replace by an if function to enable/disable leds on the gpio pins.

              The socat command can be reduced using 0 for localhost like this :

              socat - TCP4:0:8000,cr
              

              Edit :
              I have it running for 1 led :

              socat - TCP4:localhost:8000,cr|while read line;do [[ $line == "led0 = 1" ]] && raspi-gpio set 4 op pn dh;[[ $line == "led0 = 0" ]] && raspi-gpio set 4 op pn dl ;done
              
              1 Reply Last reply Reply Quote 1
              • FollyF
                Folly @hopwon
                last edited by

                @hopwon said in Syncing button leds with gameplay:

                does the command spit out error codes as we can use them...

                With the -d option it gives an error something about a device missing.
                Have to look again when I get home.

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

                  @Folly Just looking at my (default) runcommand output:

                  /opt/retropie/emulators/retroarch/bin/retroarch -L /opt/retropie/libretrocores/lr-mame/mamearcade_libretro.so --config /opt/retropie/configs/arcade/retroarch.cfg "/home/pi/RetroPie/roms/arcade/1944.zip"
                  
                  

                  To integrate into this would probably mean recompiling with support for mame output features.
                  I see you are just launching mame with a different cli, default mame, if there is such a thing.
                  I think I am in above my head here!!
                  I might see what I can do with LEDSpicer. I have it working to the point that, when a game starts both start and credit flash until credit is pressed at which point it stays steady. Maybe a simple counter output to a file when the button is pressed and watched by a background process so that when it gets to 0 again, I can issue an Emitter command to make it flash again... just some draft thoughts!

                  Just looking into this:

                  LED Spicer Docs

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

                    @hopwon

                    Indeed I use mame standalone for this.
                    Could be that lr-mame supports it too but it needs adding the options.
                    Will look at it later.

                    Edit :
                    I used my script to produce lr-mame runcommands for arcade :
                    https://retropie.org.uk/forum/topic/29682/development-of-module-script-generator-for-lr-mess-lr-mame-and-mame-standalone
                    (used mamedev.sh, the other is not updated anymore, installed arcade from the category menu item)
                    This will produce configs and runcommands where we can add the -output network option :

                    lr-mame-basename = "/opt/retropie/emulators/retroarch/bin/retroarch --config /opt/retropie/configs/arcade/retroarch.cfg --appendconfig /opt/retropie/configs/arcade/retroarch.cfg.basename -S /home/pi/RetroPie/roms/arcade -s /home/pi/RetroPie/roms/arcade -v -L /opt/retropie/libretrocores/lr-mame/mamearcade_libretro.so 'mame  -cfg_directory /opt/retropie/configs/arcade/lr-mame -c -ui_active -rompath /home/pi/RetroPie/BIOS/mame;/home/pi/RetroPie/roms/arcade/ '%BASENAME%''"
                    lr-mame-basename-network = "/opt/retropie/emulators/retroarch/bin/retroarch --config /opt/retropie/configs/arcade/retroarch.cfg --appendconfig /opt/retropie/configs/arcade/retroarch.cfg.basename -S /home/pi/RetroPie/roms/arcade -s /home/pi/RetroPie/roms/arcade -v -L /opt/retropie/libretrocores/lr-mame/mamearcade_libretro.so 'mame  -cfg_directory /opt/retropie/configs/arcade/lr-mame -output network -c -ui_active -rompath /home/pi/RetroPie/BIOS/mame;/home/pi/RetroPie/roms/arcade/ '%BASENAME%''"
                    
                    

                    Manually added in the second !
                    Testing it reveals THAT THIS WORKS !!!! ;-)

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

                      @hopwon said in Syncing button leds with gameplay:

                      does the command spit out error codes as we can use them...

                      pi@raspberrypi:~ $ ledspicerd -d
                      Program terminated by error: Empty devices section
                      
                      H 1 Reply Last reply Reply Quote 0
                      • G
                        gomisensei @hopwon
                        last edited by

                        @hopwon If no ones suggested it yet, advanceMame has a scripting system that can take actions on emulated external outputs such as Led's, and other hardware...

                        https://www.advancemame.it/doc-script here is the documentation for the scripting and outputs.

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

                          @Folly The computer is telling the truth, you need to populate the /etc/ledspicerd.conf file :)

                          But this is fantastic, I will have a go at compiling and then give LR-mame a go. I looked at various scripting options last night and while I can create a counter which will increment every time the credit button is pressed, I could not find a way to decrement it, so I went to bed!

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

                            @hopwon

                            On which hardware do you run retropie ?
                            lr-mame can be installed from binary when using rpi.

                            Tell me, what script did you make to count the inserted coins and do you use a joystick or keyboard ?

                            mituM H 3 Replies Last reply Reply Quote 1
                            • mituM
                              mitu Global Moderator @Folly
                              last edited by

                              @Folly said in Syncing button leds with gameplay:

                              On which hardware do you run retropie ?

                              First post:

                              ... I am using LEDSpicer on RPI4.

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

                                @Folly said in Syncing button leds with gameplay:

                                Tell me, what script did you make to count the inserted coins and do you use a joystick or keyboard ?

                                A bit nasty but:

                                I used inputseeker running in background to grep for a credit button being pressed on(6=P1, 7=P2 in my case) and when it successfully finds a 6 or 7 it increments a counter +1.
                                You can do it with awk also but I got tired and when to bed :)

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

                                  @Folly said in Syncing button leds with gameplay:

                                  lr-mame can be installed from binary when using rpi.

                                  Installing it now

                                  FollyF 2 Replies Last reply Reply Quote 0
                                  • FollyF
                                    Folly @hopwon
                                    last edited by

                                    @hopwon

                                    I will look at ledspicer with inputseeker again.
                                    Seem a really nice package but I have to take some time to dig into it.
                                    Hopefully I will grasp it.

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

                                      @hopwon

                                      I uninstalled my previous install of LEDspice.

                                      This I what I did :

                                      cd ~/Downloads/LEDSpicer-development/
                                      ./autogen.sh
                                      ./configure --prefix=/usr --sysconfdir=/etc --enable-raspberrypi 
                                      make
                                      sudo make install
                                      sudo usermod -a -G users pi #replace user with your username
                                      sudo usermod -a -G input pi #replace user with your username
                                      sudo cp /usr/share/doc/ledspicer/examples/21-ledspicer.rules /etc/udev/rules.d/
                                      sudo chmod 744 /etc/udev/rules.d/21-ledspicer.rules
                                      sudo udevadm control --reload-rules && sudo udevadm trigger
                                      sudo cp /usr/share/doc/ledspicer/examples/ledspicer.conf /etc
                                      ledspicerd -v
                                      ledspicerd -d
                                      sudo ledspicerd -d #seems to be the way to go with RaspberryPi
                                      

                                      Running with -d gives :
                                      Program terminated by error: Empty devices section

                                      Added the controller name in /etc/ledspicer.conf :

                                      	<devices
                                      		name="RaspberryPi"
                                          		boardId="1"
                                      >
                                      	</devices>
                                      

                                      or

                                      	<devices>
                                      		name="RaspberryPi"
                                          		boardId="1"
                                      	</devices>
                                      

                                      Still no dice.

                                      Any help would be appreciated.

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

                                        @Folly You need to manually create your ledspicer.conf, I've attached mine to give you some idea (sorry admins no pastebin!), But basically the file maps pins #'s on your LED controller to an "Element", you can then create groups of Elements and address either the group or Element...

                                        FYI On this controller I have 2 x Joystick + Trackball, each player has 8 buttons, plus start, credit, hotkey and exit.

                                        pi@pacman:~ $ cat /etc/ledspicer.conf 
                                        <?xml version="1.0" encoding="UTF-8"?>
                                        <LEDSpicer
                                            version="1.0"
                                            type="Configuration"
                                            fps="30"
                                            port="16161"
                                            colors="webColors"
                                            loglevel="Info"
                                            userId="1000"
                                            groupId="1000"
                                            craftProfile="true"
                                        >
                                            <devices>
                                                <device
                                                    name="UltimarcUltimate"
                                                    boardId="1"
                                                >
                                                    <element
                                                        name="P1_BUTTON1"
                                                        red="54"
                                                        green="53"
                                                        blue="52"
                                        		defaultColor="Red"
                                                    />
                                                    <element
                                                        name="P1_BUTTON2"
                                                        red="57"
                                                        green="56"
                                                        blue="55"
                                        		defaultColor="VeryDarkMagenta"
                                                    />
                                                    <element
                                                        name="P1_BUTTON3"
                                                        red="60"
                                                        green="59"
                                                        blue="58"
                                        		defaultColor="Blue"
                                                    />
                                                    <element
                                                        name="P1_BUTTON4"
                                                        red="63"
                                                        green="62"
                                        		blue="61"
                                        		defaultColor="Yellow"
                                        	    />
                                                    <element
                                                        name="P1_BUTTON5"
                                                        red="66"
                                                        green="65"
                                        		blue="64"
                                        		defaultColor="Salmon"
                                        	    />
                                                    <element
                                                        name="P1_BUTTON6"
                                                        red="69"
                                                        green="68"
                                        		blue="67"
                                        		defaultColor="Lime"
                                        	    />
                                                    <element
                                                        name="P1_BUTTON7"
                                                        red="72"
                                                        green="71"
                                        		blue="70"
                                        		defaultColor="Violet"
                                        	    />
                                                    <element
                                                        name="P1_BUTTON8"
                                                        red="75"
                                                        green="74"
                                        		blue="73"
                                        		defaultColor="VeryDarkYellow"
                                        	    />
                                                    <element
                                                        name="P1_START"
                                                        red="79"
                                                        green="80"
                                        		blue="81"
                                        		defaultColor="DarkOrange"
                                                    />
                                                    <element
                                                        name="P1_CREDIT"
                                                        red="93"
                                                        green="92"
                                        		blue="91"
                                        		defaultColor="DarkOrange"
                                                    />
                                                    <element
                                                        name="P1_TRACKBALL"
                                                        red="28"
                                                        green="29"
                                                        blue="30"
                                         	        defaultColor="Cyan"
                                                    />
                                                    <element
                                                        name="P1_JOYSTICK1"
                                                        red="49"
                                                        green="50"
                                        		blue="51"
                                        		defaultColor="Lime"
                                        	    />
                                                    <element
                                                        name="HOTKEY"
                                                        led="85"
                                                    />
                                                    <element
                                                        name="EXIT_KEY"
                                                        led="88"
                                                    />
                                                    <element
                                                        name="P2_CREDIT"
                                                        red="84"
                                                        green="83"
                                        		blue="82"
                                        		defaultColor="DarkOrange"
                                                    />
                                                    <element
                                                        name="P2_START"
                                                        red="78"
                                                        green="77"
                                        		blue="76"
                                        		defaultColor="DarkOrange"
                                                    />
                                                    <element
                                                        name="P2_BUTTON1"
                                                        red="4"
                                                        green="5"
                                                        blue="6"
                                        		defaultColor="Red"
                                                    />
                                                    <element
                                                        name="P2_BUTTON2"
                                                        red="7"
                                                        green="8"
                                                        blue="9"
                                        		defaultColor="Green"
                                                    />
                                                    <element
                                                        name="P2_BUTTON3"
                                                        red="10"
                                                        green="11"
                                                        blue="12"
                                        		defaultColor="Blue"
                                                    />
                                                    <element
                                                        name="P2_BUTTON4"
                                                        red="13"
                                                        green="14"
                                        		blue="15"
                                        		defaultColor="Yellow"
                                        	    />
                                                    <element
                                                        name="P2_BUTTON5"
                                                        red="16"
                                                        green="17"
                                        		blue="18"
                                        		defaultColor="Salmon"
                                        	    />
                                                    <element
                                                        name="P2_BUTTON6"
                                                        red="19"
                                                        green="20"
                                        		blue="21"
                                        		defaultColor="Lime"
                                        	    />
                                                    <element
                                                        name="P2_BUTTON7"
                                                        red="22"
                                                        green="23"
                                        		blue="24"
                                        		defaultColor="Violet"
                                        	    />
                                                    <element
                                                        name="P2_BUTTON8"
                                                        red="25"
                                                        green="26"
                                        		blue="27"
                                        		defaultColor="VeryDarkYellow"
                                        	    />
                                                    <element
                                                        name="P2_JOYSTICK1"
                                                        red="1"
                                                        green="2"
                                        		blue="3"
                                        		defaultColor="HotPink"
                                        	    />
                                                </device>
                                            </devices>
                                            <restrictors>
                                              <restrictor name="ServoStik" boardId="1" player="1" joystick="1" />
                                                <!-- Player 2 with ServoStik -->
                                              <restrictor name="ServoStik" boardId="1" player="2" joystick="1" />
                                            </restrictors>
                                            <layout defaultProfile="default">
                                                <group name="whole board">
                                                    <element name="P1_JOYSTICK1"/> 
                                        	    <element name="P1_TRACKBALL"/>
                                                    <element name="P1_START"/>
                                                    <element name="P1_CREDIT"/>
                                                    <element name="P1_BUTTON1"/>
                                                    <element name="P1_BUTTON2"/>
                                                    <element name="P1_BUTTON3"/>
                                                    <element name="P1_BUTTON4"/>
                                                    <element name="P1_BUTTON5"/>
                                                    <element name="P1_BUTTON6"/>
                                                    <element name="P1_BUTTON7"/>
                                                    <element name="P1_BUTTON8"/>
                                                    <element name="P2_JOYSTICK1"/>
                                                    <element name="P2_BUTTON1"/>
                                                    <element name="P2_BUTTON2"/>
                                                    <element name="P2_BUTTON3"/>
                                                    <element name="P2_BUTTON4"/>
                                                    <element name="P2_BUTTON5"/>
                                                    <element name="P2_BUTTON6"/>
                                                    <element name="P2_BUTTON7"/>
                                                    <element name="P2_BUTTON8"/>
                                                    <element name="P2_CREDIT"/>
                                                    <element name="P2_START"/>
                                                </group>
                                                <group name="Player1">
                                                    <element name="P1_JOYSTICK1"/>
                                                    <element name="P1_TRACKBALL"/>
                                                    <element name="P1_START"/>
                                                    <element name="P1_CREDIT"/>
                                                    <element name="P1_BUTTON1"/>
                                                    <element name="P1_BUTTON2"/>
                                                    <element name="P1_BUTTON3"/>
                                                    <element name="P1_BUTTON4"/>
                                                    <element name="P1_BUTTON5"/>
                                                    <element name="P1_BUTTON6"/>
                                                    <element name="P1_BUTTON7"/>
                                                    <element name="P1_BUTTON8"/>
                                                </group>    
                                                <group name="Player2">
                                                    <element name="P2_JOYSTICK1"/>
                                                    <element name="P2_BUTTON1"/>
                                                    <element name="P2_BUTTON2"/>
                                                    <element name="P2_BUTTON3"/>
                                                    <element name="P2_BUTTON4"/>
                                                    <element name="P2_BUTTON5"/>
                                                    <element name="P2_BUTTON6"/>
                                                    <element name="P2_BUTTON7"/>
                                                    <element name="P2_BUTTON8"/>
                                                    <element name="P2_CREDIT"/>
                                                    <element name="P2_START"/>
                                                </group>
                                                <group name="Players">
                                                    <element name="P1_JOYSTICK1"/>
                                                    <element name="P1_TRACKBALL"/>
                                                    <element name="P1_START"/>
                                                    <element name="P1_CREDIT"/>
                                                    <element name="P1_BUTTON1"/>
                                                    <element name="P1_BUTTON2"/>
                                                    <element name="P1_BUTTON3"/>
                                                    <element name="P1_BUTTON4"/>
                                                    <element name="P1_BUTTON5"/>
                                                    <element name="P1_BUTTON6"/>
                                                    <element name="P1_BUTTON7"/>
                                                    <element name="P1_BUTTON8"/>
                                                    <element name="P2_JOYSTICK1"/>
                                                    <element name="P2_BUTTON1"/>
                                                    <element name="P2_BUTTON2"/>
                                                    <element name="P2_BUTTON3"/>
                                                    <element name="P2_BUTTON4"/>
                                                    <element name="P2_BUTTON5"/>
                                                    <element name="P2_BUTTON6"/>
                                                    <element name="P2_BUTTON7"/>
                                                    <element name="P2_BUTTON8"/>
                                                    <element name="P2_CREDIT"/>
                                                    <element name="P2_START"/>
                                                </group>
                                        	<group name="Whole board as a circle">
                                            	    <element name="HOTKEY"/>
                                                    <element name="P1_CREDIT"/>
                                        	    <element name="P1_START"/>
                                                    <element name="P1_JOYSTICK1"/>
                                                    <element name="P1_BUTTON5"/>
                                                    <element name="P1_BUTTON1"/>
                                                    <element name="P1_BUTTON6"/>
                                                    <element name="P1_BUTTON2"/>
                                                    <element name="P1_BUTTON7"/>
                                                    <element name="P1_BUTTON3"/>
                                                    <element name="P1_BUTTON8"/>
                                                    <element name="P1_BUTTON4"/>
                                                    <element name="P1_TRACKBALL"/>
                                                    <element name="P2_JOYSTICK1"/>
                                                    <element name="P2_BUTTON5"/>
                                                    <element name="P2_BUTTON1"/>
                                                    <element name="P2_BUTTON6"/>
                                                    <element name="P2_BUTTON2"/>
                                                    <element name="P2_BUTTON7"/>
                                                    <element name="P2_BUTTON3"/>
                                                    <element name="P2_BUTTON8"/>
                                                    <element name="P2_BUTTON4"/>
                                                    <element name="P2_CREDIT"/>
                                                    <element name="P2_START"/>
                                        	</group>
                                                <group name="Ctrl keys">
                                            	    <element name="HOTKEY"/>
                                                    <element name="P1_CREDIT"/>
                                        	    <element name="P1_START"/>
                                                    <element name="P2_CREDIT"/>
                                                    <element name="P2_START"/>
                                                    <element name="EXIT_KEY"/>
                                        	</group>
                                                <group name="TopRow">
                                        	    <element name="P1_CREDIT"/>
                                        	    <element name="P1_START"/>
                                                    <element name="HOTKEY"/>
                                                    <element name="EXIT_KEY"/>
                                        	    <element name="P2_CREDIT"/>
                                        	    <element name="P2_START"/>
                                                </group>
                                            </layout>
                                        </LEDSpicer>
                                        
                                        
                                        1 Reply Last reply Reply Quote 1
                                        • H
                                          hopwon @Folly
                                          last edited by

                                          @Folly said in Syncing button leds with gameplay:

                                          @hopwon

                                          I uninstalled my previous install of LEDspice.

                                          This I what I did :

                                          cd ~/Downloads/LEDSpicer-development/
                                          ./autogen.sh
                                          ./configure --prefix=/usr --sysconfdir=/etc --enable-raspberrypi 
                                          make
                                          sudo make install
                                          sudo usermod -a -G users pi #replace user with your username
                                          sudo usermod -a -G input pi #replace user with your username
                                          sudo cp /usr/share/doc/ledspicer/examples/21-ledspicer.rules /etc/udev/rules.d/
                                          sudo chmod 744 /etc/udev/rules.d/21-ledspicer.rules
                                          sudo udevadm control --reload-rules && sudo udevadm trigger
                                          sudo cp /usr/share/doc/ledspicer/examples/ledspicer.conf /etc
                                          ledspicerd -v
                                          ledspicerd -d
                                          sudo ledspicerd -d #seems to be the way to go with RaspberryPi
                                          

                                          Running with -d gives :
                                          Program terminated by error: Empty devices section

                                          Added the controller name in /etc/ledspicer.conf :

                                          	<devices
                                          		name="RaspberryPi"
                                              		boardId="1"
                                          >
                                          	</devices>
                                          

                                          or

                                          	<devices>
                                          		name="RaspberryPi"
                                              		boardId="1"
                                          	</devices>
                                          

                                          Still no dice.

                                          Any help would be appreciated.

                                          Make sure when you are starting for the first time, run the daemon in foreground (-f) as it is the best way to troubleshoot. Its quite verbose in its output so if there is a problem you should get a good indication of exactly what it is.

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

                                            @hopwon

                                            Thanks, will have a look when I am using my pi.

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