/*-----------------------------------------*\ | ResourceManager.h | | | | OpenRGB Resource Manager controls access | | to application components including | | RGBControllers, I2C interfaces, and | | network SDK components | | | | Adam Honse (CalcProgrammer1) 9/27/2020 | \*-----------------------------------------*/ #pragma once #include #include #include #include #include #include "i2c_smbus.h" #include "NetworkClient.h" #include "NetworkServer.h" #include "ProfileManager.h" #include "RGBController.h" #include "SettingsManager.h" #define HID_INTERFACE_ANY -1 #define HID_USAGE_ANY -1 #define HID_USAGE_PAGE_ANY -1L #define CONTROLLER_LIST_HID 0 typedef std::function&)> I2CBusDetectorFunction; typedef std::function&)> DeviceDetectorFunction; typedef std::function&, std::vector&)> I2CDeviceDetectorFunction; typedef void (*DeviceListChangeCallback)(void *); typedef void (*DetectionProgressCallback)(void *); typedef void (*I2CBusListChangeCallback)(void *); class ResourceManagerInterface { public: virtual std::vector & GetI2CBusses() = 0; virtual void RegisterRGBController(RGBController *rgb_controller) = 0; virtual void RegisterDeviceListChangeCallback(DeviceListChangeCallback new_callback, void * new_callback_arg) = 0; virtual void RegisterDetectionProgressCallback(DetectionProgressCallback new_callback, void * new_callback_arg) = 0; virtual void RegisterI2CBusListChangeCallback(I2CBusListChangeCallback new_callback, void * new_callback_arg) = 0; virtual std::vector & GetRGBControllers() = 0; virtual unsigned int GetDetectionPercent() = 0; virtual std::string GetConfigurationDirectory() = 0; virtual std::vector& GetClients() = 0; virtual NetworkServer* GetServer() = 0; virtual ProfileManager* GetProfileManager() = 0; virtual SettingsManager* GetSettingsManager() = 0; virtual void DeviceListChanged() = 0; protected: virtual ~ResourceManagerInterface() {}; }; class ResourceManager: public ResourceManagerInterface { public: static ResourceManager *get(); ResourceManager(); ~ResourceManager(); void RegisterI2CBus(i2c_smbus_interface *); std::vector & GetI2CBusses(); void RegisterRGBController(RGBController *rgb_controller); std::vector & GetRGBControllers(); void RegisterI2CBusDetector (I2CBusDetectorFunction detector); void RegisterDeviceDetector (std::string name, DeviceDetectorFunction detector); void RegisterI2CDeviceDetector (std::string name, I2CDeviceDetectorFunction detector); void RegisterDeviceListChangeCallback(DeviceListChangeCallback new_callback, void * new_callback_arg); void RegisterDetectionProgressCallback(DetectionProgressCallback new_callback, void * new_callback_arg); void RegisterI2CBusListChangeCallback(I2CBusListChangeCallback new_callback, void * new_callback_arg); unsigned int GetDetectionPercent(); const char* GetDetectionString(); std::string GetConfigurationDirectory(); std::vector& GetClients(); NetworkServer* GetServer(); ProfileManager* GetProfileManager(); SettingsManager* GetSettingsManager(); void SetConfigurationDirectory(std::string directory); void DeviceListChanged(); void DetectionProgressChanged(); void I2CBusListChanged(); void Cleanup(); void DetectDevices(); void DisableDetection(); void StopDeviceDetection(); void WaitForDeviceDetection(); };