From a51e2f8ac8a1e09cd4647ac721d633100ae98bfc Mon Sep 17 00:00:00 2001 From: silas Date: Wed, 10 Feb 2021 12:12:34 -0600 Subject: [PATCH] Make device list change warning callback This will be helpful for keeping plugins from crashing Commit amended to change callback function name for consistency by Adam Honse --- ResourceManager.cpp | 11 +++++++++++ ResourceManager.h | 8 +++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/ResourceManager.cpp b/ResourceManager.cpp index 39291003..471bb0e1 100644 --- a/ResourceManager.cpp +++ b/ResourceManager.cpp @@ -172,6 +172,12 @@ 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); @@ -188,6 +194,11 @@ void ResourceManager::DeviceListChanged() { 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 | \*-------------------------------------------------*/ diff --git a/ResourceManager.h b/ResourceManager.h index 47840e5e..7d7e048f 100644 --- a/ResourceManager.h +++ b/ResourceManager.h @@ -47,6 +47,7 @@ typedef struct } HIDDeviceDetectorBlock; typedef void (*DeviceListChangeCallback)(void *); +typedef void (*DeviceListWarningCallback)(void *); typedef void (*DetectionProgressCallback)(void *); typedef void (*I2CBusListChangeCallback)(void *); @@ -59,6 +60,7 @@ 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 RegisterI2CBusListChangeCallback(I2CBusListChangeCallback new_callback, void * new_callback_arg) = 0; @@ -109,6 +111,7 @@ 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 RegisterI2CBusListChangeCallback(I2CBusListChangeCallback new_callback, void * new_callback_arg); @@ -207,12 +210,15 @@ private: const char* detection_string; /*-------------------------------------------------------------------------------------*\ - | Device List Changed Callback | + | Device List Changed and Warning Callbacks | \*-------------------------------------------------------------------------------------*/ std::mutex DeviceListChangeMutex; std::vector DeviceListChangeCallbacks; std::vector DeviceListChangeCallbackArgs; + std::vector DeviceListWarningCallbacks; + std::vector DeviceListWarningCallbackArgs; + /*-------------------------------------------------------------------------------------*\ | Detection Progress Callback | \*-------------------------------------------------------------------------------------*/