// SPDX-License-Identifier: LicenseRef-GPL-3.0-or-later-OpenSSL #ifndef CHIAKI_LOG_SNIFFER_H #define CHIAKI_LOG_SNIFFER_H #include <chiaki/controller.h> #include <QObject> #include <QSet> #include <QMap> #include <QString> #ifdef CHIAKI_GUI_ENABLE_SDL_GAMECONTROLLER #include <SDL.h> #endif class Controller; class ControllerManager : public QObject { Q_OBJECT friend class Controller; private: #ifdef CHIAKI_GUI_ENABLE_SDL_GAMECONTROLLER QSet<SDL_JoystickID> available_controllers; #endif QMap<int, Controller *> 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<int> 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