diff options
| author | bunnei <bunneidev@gmail.com> | 2022-05-28 00:55:53 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-05-28 00:55:53 -0700 |
| commit | e135944c4d1c4af2fdf4a3fc8366c5d70b7bcf4c (patch) | |
| tree | 049fb06784cc394ca40e3981d6286b23eb8f386b /src/input_common/drivers/sdl_driver.cpp | |
| parent | d1016268b3f3d14b5ebc1efea2c314b8b6cb3f88 (diff) | |
| parent | 3cd7b067e073be79990ed3c0be1a02857e4de680 (diff) | |
Merge pull request #8374 from german77/asnycvibrations
input_common: Make vibration request async
Diffstat (limited to 'src/input_common/drivers/sdl_driver.cpp')
| -rw-r--r-- | src/input_common/drivers/sdl_driver.cpp | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/input_common/drivers/sdl_driver.cpp b/src/input_common/drivers/sdl_driver.cpp index a5c63e74ac..1a14ef10bf 100644 --- a/src/input_common/drivers/sdl_driver.cpp +++ b/src/input_common/drivers/sdl_driver.cpp @@ -434,6 +434,7 @@ SDLDriver::SDLDriver(std::string input_engine_) : InputEngine(std::move(input_en using namespace std::chrono_literals; while (initialized) { SDL_PumpEvents(); + SendVibrations(); std::this_thread::sleep_for(1ms); } }); @@ -531,13 +532,31 @@ Common::Input::VibrationError SDLDriver::SetRumble( .type = Common::Input::VibrationAmplificationType::Exponential, }; - if (!joystick->RumblePlay(new_vibration)) { - return Common::Input::VibrationError::Unknown; + if (vibration.type == Common::Input::VibrationAmplificationType::Test) { + if (!joystick->RumblePlay(new_vibration)) { + return Common::Input::VibrationError::Unknown; + } + return Common::Input::VibrationError::None; } + vibration_queue.Push(VibrationRequest{ + .identifier = identifier, + .vibration = new_vibration, + }); + return Common::Input::VibrationError::None; } +void SDLDriver::SendVibrations() { + while (!vibration_queue.Empty()) { + VibrationRequest request; + vibration_queue.Pop(request); + const auto joystick = GetSDLJoystickByGUID(request.identifier.guid.RawString(), + static_cast<int>(request.identifier.port)); + joystick->RumblePlay(request.vibration); + } +} + Common::ParamPackage SDLDriver::BuildAnalogParamPackageForButton(int port, std::string guid, s32 axis, float value) const { Common::ParamPackage params{}; |
