// SPDX-License-Identifier: LicenseRef-GPL-3.0-or-later-OpenSSL #ifndef CHIAKI_LOG_SNIFFER_H #define CHIAKI_LOG_SNIFFER_H #include #include #include #include #include #ifdef CHIAKI_GUI_ENABLE_SDL_GAMECONTROLLER #include #endif class Controller; class ControllerManager : public QObject { Q_OBJECT friend class Controller; private: #ifdef CHIAKI_GUI_ENABLE_SDL_GAMECONTROLLER QSet available_controllers; #endif QMap open_controllers; void ControllerClosed(Controller *controller); private slots: void UpdateAvailableControllers(); void HandleEvents(); void ControllerEvent(int device_id); public: static ControllerManager *GetInstance(); ControllerManager(QObject *parent = nullptr); ~ControllerManager(); QSet GetAvailableControllers(); Controller *OpenController(int device_id); signals: void AvailableControllersUpdated(); }; class Controller : public QObject { Q_OBJECT friend class ControllerManager; private: Controller(int device_id, ControllerManager *manager); void UpdateState(); ControllerManager *manager; int id; #ifdef CHIAKI_GUI_ENABLE_SDL_GAMECONTROLLER SDL_GameController *controller; #endif public: ~Controller(); bool IsConnected(); int GetDeviceID(); QString GetName(); ChiakiControllerState GetState(); signals: void StateChanged(); }; #endif // CHIAKI_CONTROLLERMANAGER_H