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

    Disable controller input during startup

    Scheduled Pinned Locked Moved Help and Support
    emulationstatoninputsdisable
    12 Posts 2 Posters 828 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.
    • A
      apiso
      last edited by

      Is it possible to disable controller input during emulationstation startup? I ve seen that while loading all the input are recorded and reflected in the menu when emulationstation is loaded. This potentially could be a problem, producing unwanted effects when all is loaded.

      mituM 1 Reply Last reply Reply Quote 0
      • mituM
        mitu Global Moderator @apiso
        last edited by mitu

        @apiso said in Disable controller input during startup:

        This potentially could be a problem, producing unwanted effects when all is loaded.

        What unwanted effects are you referring to ? Input handling is disabled during loading, it's enabled only after EmulationStation has finished starting and the system's list is displayed.

        1 Reply Last reply Reply Quote 0
        • A
          apiso
          last edited by

          @mitu said in Disable controller input during startup:

          What unwanted effects are you referring to ? Input handling is disabled during loading, it's enabled only after EmulationStation has finished starting and the system's list is displayed.

          Sadly not in my case, for example if i press a menu button when emulationstation is loading, the menu appear when emulationstation is loaded. Can you confirm that you have not this problem?

          1 Reply Last reply Reply Quote 0
          • mituM
            mitu Global Moderator
            last edited by mitu

            Please post your system's details, as requested in https://retropie.org.uk/forum/topic/3/read-this-first.
            What EmulationStation version are you using ?

            1 Reply Last reply Reply Quote 0
            • A
              apiso
              last edited by

              I've built the latest version of emulationstation present on https://github.com/RetroPie/EmulationStation/commits/master

              And I'm using it on Pandora box 4 hardware that is an arm v7 board on jamma cabinet.

              All works great except this small problems.

              mituM 1 Reply Last reply Reply Quote 0
              • mituM
                mitu Global Moderator @apiso
                last edited by mitu

                @apiso Actually, this happens also on the Pi4. May be an improvement opportunity in EmulationStation.

                EDIT: what kind of controllers do you have connected to your system ?

                A 1 Reply Last reply Reply Quote 0
                • A
                  apiso @mitu
                  last edited by

                  The board is directly connected to a cabinet through the jamma interface that directly manage the controllers.

                  I think this could be a good improvement, for me it's a problem because in my board i can launch different configuration of emulationstation with different system in it pressing some button at startup.

                  mituM 1 Reply Last reply Reply Quote 0
                  • mituM
                    mitu Global Moderator @apiso
                    last edited by

                    @apiso said in Disable controller input during startup:

                    The board is directly connected to a cabinet through the jamma interface that directly manage the controllers.

                    Is this recognized as a keyboard or as a gamepad device ?

                    1 Reply Last reply Reply Quote 0
                    • A
                      apiso
                      last edited by

                      It's recognized as gamepad i think, I've noticed that in the code in the main function the sdl_joystik is already disabled for this purpose this is the code :

                      //dont generate joystick events while we're loading (hopefully fixes "automatically started emulator" bug)
                      SDL_JoystickEventState(SDL_DISABLE);

                      Maybe joystick should be disabled first.

                      mituM 1 Reply Last reply Reply Quote 0
                      • mituM
                        mitu Global Moderator @apiso
                        last edited by

                        @apiso said in Disable controller input during startup:

                        Maybe joystick should be disabled first.

                        Yes, the gamepad input disable code could be added earlier, before the splashscreen/configuration load is started. Should be pretty easy to add.

                        1 Reply Last reply Reply Quote 0
                        • A
                          apiso
                          last edited by

                          @mitu said in Disable controller input during startup:

                          e gamepad input disable code could be added earlier, before the splashscreen/configura

                          I've added in the main.cpp a simple loop before the main loop , that clear the buffer input , it seems to work good even if a keep pressing a button.

                          I've inserted this code on row 396 of main.cpp:

                          SDL_Event event;
                          //Clean buffer input if some controller is touched before running
                          do
                          {

                          } while(SDL_PollEvent(&event));
                          

                          I'm not a c++ programmer so probably there is a better way to do so , maybe calling directly an sdl api that clear the input buffer but it works.

                          1 Reply Last reply Reply Quote 0
                          • mituM
                            mitu Global Moderator
                            last edited by

                            This diff should do the trick, clearing also any keyboard type controllers

                            diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp
                            index 26faeb2..26bc328 100644
                            --- a/es-app/src/main.cpp
                            +++ b/es-app/src/main.cpp
                            @@ -320,6 +320,9 @@ int main(int argc, char* argv[])
                                bool splashScreen = Settings::getInstance()->getBool("SplashScreen");
                                bool splashScreenProgress = Settings::getInstance()->getBool("SplashScreenProgress");
                            
                            +   //dont generate joystick events while we're loading (hopefully fixes "automatically started emulator" bug)
                            +   SDL_JoystickEventState(SDL_DISABLE);
                            +
                                if(!scrape_cmdline)
                                {
                                    if(!window.init())
                            @@ -365,9 +368,6 @@ int main(int argc, char* argv[])
                                    return run_scraper_cmdline();
                                }
                            
                            -   //dont generate joystick events while we're loading (hopefully fixes "automatically started emulator" bug)
                            -   SDL_JoystickEventState(SDL_DISABLE);
                            -
                                // preload what we can right away instead of waiting for the user to select it
                                // this makes for no delays when accessing content, but a longer startup time
                                ViewController::get()->preload();
                            @@ -386,7 +386,10 @@ int main(int argc, char* argv[])
                                    }
                                }
                            
                            -   //generate joystick events since we're done loading
                            +   //generate joystick events since we're done loading and clear the input event queue
                            +   SDL_PumpEvents();
                            +   SDL_FlushEvent(SDL_KEYDOWN);
                            +   SDL_FlushEvent(SDL_KEYUP);
                                SDL_JoystickEventState(SDL_ENABLE);
                            
                                int lastTime = SDL_GetTicks();
                            

                            I don't think it's 100% correct, since any errors during startup would leave the joystick disabled, further testing is needed.

                            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.