| | |
| | |
| | |
| |
|
| | #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; |
| | }; |
| | } |
| |
|