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 859 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 @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.