diff --git a/ResourceManager.cpp b/ResourceManager.cpp index 45b6da77..b4e359af 100644 --- a/ResourceManager.cpp +++ b/ResourceManager.cpp @@ -172,12 +172,6 @@ void ResourceManager::RegisterDeviceListChangeCallback(DeviceListChangeCallback DeviceListChangeCallbackArgs.push_back(new_callback_arg); } -void ResourceManager::RegisterDeviceListWarningCallback(DeviceListWarningCallback new_callback, void *new_callback_arg) -{ - DeviceListWarningCallbacks.push_back(new_callback); - DeviceListWarningCallbackArgs.push_back(new_callback_arg); -} - void ResourceManager::RegisterI2CBusListChangeCallback(I2CBusListChangeCallback new_callback, void * new_callback_arg) { I2CBusListChangeCallbacks.push_back(new_callback); @@ -190,15 +184,22 @@ void ResourceManager::RegisterDetectionProgressCallback(DetectionProgressCallbac DetectionProgressCallbackArgs.push_back(new_callback_arg); } +void ResourceManager::RegisterDetectionStartCallback(DetectionStartCallback new_callback, void *new_callback_arg) +{ + DetectionStartCallbacks.push_back(new_callback); + DetectionStartCallbackArgs.push_back(new_callback_arg); +} + +void ResourceManager::RegisterDetectionEndCallback(DetectionEndCallback new_callback, void *new_callback_arg) +{ + DetectionEndCallbacks.push_back(new_callback); + DetectionEndCallbackArgs.push_back(new_callback_arg); +} + void ResourceManager::UpdateDeviceList() { DeviceListChangeMutex.lock(); - for(unsigned int callback_idx = 0; callback_idx < (int)DeviceListWarningCallbacks.size(); callback_idx++) - { - DeviceListWarningCallbacks[callback_idx](DeviceListWarningCallbackArgs[callback_idx]); - } - /*-------------------------------------------------*\ | Insert hardware controllers into controller list | \*-------------------------------------------------*/ @@ -477,6 +478,14 @@ void ResourceManager::Cleanup() void ResourceManager::DetectDevices() { + /*-----------------------------------------------------*\ + | Call detection start callbacks | + \*-----------------------------------------------------*/ + for(unsigned int callback_idx = 0; callback_idx < DetectionStartCallbacks.size(); callback_idx++) + { + DetectionStartCallbacks[callback_idx](DetectionStartCallbackArgs[callback_idx]); + } + /*-----------------------------------------------------*\ | Update the detector settings | \*-----------------------------------------------------*/ @@ -524,7 +533,15 @@ void ResourceManager::DetectDevices() \*-------------------------------------------------*/ detection_percent = 100; DetectionProgressChanged(); - } + + /*-----------------------------------------------------*\ + | Call detection end callbacks | + \*-----------------------------------------------------*/ + for(unsigned int callback_idx = 0; callback_idx < DetectionEndCallbacks.size(); callback_idx++) + { + DetectionEndCallbacks[callback_idx](DetectionEndCallbackArgs[callback_idx]); + } + } } void ResourceManager::DisableDetection() @@ -903,6 +920,14 @@ void ResourceManager::DetectDevicesThreadFunction() DetectDeviceMutex.unlock(); + /*-----------------------------------------------------*\ + | Call detection end callbacks | + \*-----------------------------------------------------*/ + for(unsigned int callback_idx = 0; callback_idx < DetectionEndCallbacks.size(); callback_idx++) + { + DetectionEndCallbacks[callback_idx](DetectionEndCallbackArgs[callback_idx]); + } + LOG_NOTICE("Detection completed"); } diff --git a/ResourceManager.h b/ResourceManager.h index 566d0845..90c01ca6 100644 --- a/ResourceManager.h +++ b/ResourceManager.h @@ -47,8 +47,9 @@ typedef struct } HIDDeviceDetectorBlock; typedef void (*DeviceListChangeCallback)(void *); -typedef void (*DeviceListWarningCallback)(void *); typedef void (*DetectionProgressCallback)(void *); +typedef void (*DetectionStartCallback)(void *); +typedef void (*DetectionEndCallback)(void *); typedef void (*I2CBusListChangeCallback)(void *); class ResourceManagerInterface @@ -60,8 +61,9 @@ public: virtual void UnregisterRGBController(RGBController *rgb_controller) = 0; virtual void RegisterDeviceListChangeCallback(DeviceListChangeCallback new_callback, void * new_callback_arg) = 0; - virtual void RegisterDeviceListWarningCallback(DeviceListWarningCallback new_callback, void * new_callback_arg) = 0; virtual void RegisterDetectionProgressCallback(DetectionProgressCallback new_callback, void * new_callback_arg) = 0; + virtual void RegisterDetectionStartCallback(DetectionStartCallback new_callback, void * new_callback_arg) = 0; + virtual void RegisterDetectionEndCallback(DetectionEndCallback new_callback, void * new_callback_arg) = 0; virtual void RegisterI2CBusListChangeCallback(I2CBusListChangeCallback new_callback, void * new_callback_arg) = 0; virtual std::vector & GetRGBControllers() = 0; @@ -111,8 +113,9 @@ public: int usage = HID_USAGE_ANY); void RegisterDeviceListChangeCallback(DeviceListChangeCallback new_callback, void * new_callback_arg); - void RegisterDeviceListWarningCallback(DeviceListWarningCallback new_callback, void * new_callback_arg); void RegisterDetectionProgressCallback(DetectionProgressCallback new_callback, void * new_callback_arg); + void RegisterDetectionStartCallback(DetectionStartCallback new_callback, void * new_callback_arg); + void RegisterDetectionEndCallback(DetectionEndCallback new_callback, void * new_callback_arg); void RegisterI2CBusListChangeCallback(I2CBusListChangeCallback new_callback, void * new_callback_arg); unsigned int GetDetectionPercent(); @@ -214,22 +217,25 @@ private: const char* detection_string; /*-------------------------------------------------------------------------------------*\ - | Device List Changed and Warning Callbacks | + | Device List Changed Callback | \*-------------------------------------------------------------------------------------*/ std::mutex DeviceListChangeMutex; std::vector DeviceListChangeCallbacks; std::vector DeviceListChangeCallbackArgs; - std::vector DeviceListWarningCallbacks; - std::vector DeviceListWarningCallbackArgs; - /*-------------------------------------------------------------------------------------*\ - | Detection Progress Callback | + | Detection Progress, Start, and End Callbacks | \*-------------------------------------------------------------------------------------*/ std::mutex DetectionProgressMutex; std::vector DetectionProgressCallbacks; std::vector DetectionProgressCallbackArgs; + std::vector DetectionStartCallbacks; + std::vector DetectionStartCallbackArgs; + + std::vector DetectionEndCallbacks; + std::vector DetectionEndCallbackArgs; + /*-------------------------------------------------------------------------------------*\ | I2C/SMBus Adapter List Changed Callback | \*-------------------------------------------------------------------------------------*/