| |
| |
| |
|
|
| #pragma once |
|
|
| #include <atomic> |
| #include <memory> |
| #include <thread> |
| #include <unordered_map> |
| #include "common/settings.h" |
| #include "common/threadsafe_queue.h" |
| #include "input_common/sdl/sdl.h" |
|
|
| union SDL_Event; |
| using SDL_Joystick = struct _SDL_Joystick; |
| using SDL_JoystickID = s32; |
| using SDL_GameController = struct _SDL_GameController; |
|
|
| namespace InputCommon::SDL { |
|
|
| class SDLJoystick; |
| class SDLGameController; |
| class SDLButtonFactory; |
| class SDLAnalogFactory; |
| class SDLMotionFactory; |
|
|
| class SDLState : public State { |
| public: |
| |
| SDLState(); |
|
|
| |
| ~SDLState() override; |
|
|
| |
| void HandleGameControllerEvent(const SDL_Event& event); |
|
|
| std::shared_ptr<SDLJoystick> GetSDLJoystickBySDLID(SDL_JoystickID sdl_id); |
| std::shared_ptr<SDLJoystick> GetSDLJoystickByGUID(const std::string& guid, int port); |
|
|
| Common::ParamPackage GetSDLControllerButtonBindByGUID(const std::string& guid, int port, |
| Settings::NativeButton::Values button); |
| Common::ParamPackage GetSDLControllerAnalogBindByGUID(const std::string& guid, int port, |
| Settings::NativeAnalog::Values analog); |
|
|
| |
| Pollers GetPollers(Polling::DeviceType type) override; |
|
|
| |
| std::atomic<bool> polling = false; |
| Common::SPSCQueue<SDL_Event> event_queue; |
|
|
| private: |
| void InitJoystick(int joystick_index); |
| void CloseJoystick(SDL_Joystick* sdl_joystick); |
|
|
| |
| void CloseJoysticks(); |
|
|
| |
| std::unordered_map<std::string, std::vector<std::shared_ptr<SDLJoystick>>> joystick_map; |
| std::mutex joystick_map_mutex; |
|
|
| std::shared_ptr<SDLButtonFactory> button_factory; |
| std::shared_ptr<SDLAnalogFactory> analog_factory; |
| std::shared_ptr<SDLMotionFactory> motion_factory; |
|
|
| bool start_thread = false; |
| std::atomic<bool> initialized = false; |
|
|
| std::thread poll_thread; |
| }; |
| } |
|
|