Add detection progress callback to avoid unnecessary device list updates
This commit is contained in:
parent
c3b4489fd3
commit
c30480af91
2 changed files with 44 additions and 7 deletions
|
|
@ -89,12 +89,18 @@ void ResourceManager::RegisterDeviceDetector(std::string name, DeviceDetectorFun
|
|||
device_detectors.push_back(detector);
|
||||
}
|
||||
|
||||
void ResourceManager::RegisterDeviceListChangeCallback(ResourceManagerCallback new_callback, void * new_callback_arg)
|
||||
void ResourceManager::RegisterDeviceListChangeCallback(DeviceListChangeCallback new_callback, void * new_callback_arg)
|
||||
{
|
||||
DeviceListChangeCallbacks.push_back(new_callback);
|
||||
DeviceListChangeCallbackArgs.push_back(new_callback_arg);
|
||||
}
|
||||
|
||||
void ResourceManager::RegisterDetectionProgressCallback(DetectionProgressCallback new_callback, void *new_callback_arg)
|
||||
{
|
||||
DetectionProgressCallbacks.push_back(new_callback);
|
||||
DetectionProgressCallbackArgs.push_back(new_callback_arg);
|
||||
}
|
||||
|
||||
void ResourceManager::DeviceListChanged()
|
||||
{
|
||||
DeviceListChangeMutex.lock();
|
||||
|
|
@ -116,6 +122,27 @@ void ResourceManager::DeviceListChanged()
|
|||
DeviceListChangeMutex.unlock();
|
||||
}
|
||||
|
||||
void ResourceManager::DetectionProgressChanged()
|
||||
{
|
||||
DetectionProgressMutex.lock();
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Detection progress has changed, call the callbacks|
|
||||
\*-------------------------------------------------*/
|
||||
for(unsigned int callback_idx = 0; callback_idx < DetectionProgressCallbacks.size(); callback_idx++)
|
||||
{
|
||||
DetectionProgressCallbacks[callback_idx](DetectionProgressCallbackArgs[callback_idx]);
|
||||
}
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Device list has changed, inform all clients |
|
||||
| connected to this server |
|
||||
\*-------------------------------------------------*/
|
||||
server->DeviceListChanged();
|
||||
|
||||
DetectionProgressMutex.unlock();
|
||||
}
|
||||
|
||||
NetworkServer* ResourceManager::GetServer()
|
||||
{
|
||||
return(server);
|
||||
|
|
@ -236,7 +263,7 @@ void ResourceManager::DetectDevicesThreadFunction()
|
|||
for(unsigned int i2c_detector_idx = 0; i2c_detector_idx < i2c_device_detectors.size() && detection_is_required.load(); i2c_detector_idx++)
|
||||
{
|
||||
detection_string = i2c_device_detector_strings[i2c_detector_idx].c_str();
|
||||
DeviceListChanged();
|
||||
DetectionProgressChanged();
|
||||
|
||||
bool this_device_disabled = false;
|
||||
for(std::size_t disabled_idx = 0; disabled_idx < disabled_devices_list.size(); disabled_idx++)
|
||||
|
|
@ -274,7 +301,7 @@ void ResourceManager::DetectDevicesThreadFunction()
|
|||
for(unsigned int detector_idx = 0; detector_idx < device_detectors.size() && detection_is_required.load(); detector_idx++)
|
||||
{
|
||||
detection_string = device_detector_strings[detector_idx].c_str();
|
||||
DeviceListChanged();
|
||||
DetectionProgressChanged();
|
||||
|
||||
bool this_device_disabled = false;
|
||||
for(std::size_t disabled_idx = 0; disabled_idx < disabled_devices_list.size(); disabled_idx++)
|
||||
|
|
@ -317,7 +344,7 @@ void ResourceManager::DetectDevicesThreadFunction()
|
|||
detection_percent = 100;
|
||||
detection_string = "";
|
||||
|
||||
DeviceListChanged();
|
||||
DetectionProgressChanged();
|
||||
|
||||
DetectDeviceMutex.unlock();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,8 @@ typedef std::function<void(std::vector<i2c_smbus_interface*>&)>
|
|||
typedef std::function<void(std::vector<RGBController*>&)> DeviceDetectorFunction;
|
||||
typedef std::function<void(std::vector<i2c_smbus_interface*>&, std::vector<RGBController*>&)> I2CDeviceDetectorFunction;
|
||||
|
||||
typedef void (*ResourceManagerCallback)(void *);
|
||||
typedef void (*DeviceListChangeCallback)(void *);
|
||||
typedef void (*DetectionProgressCallback)(void *);
|
||||
|
||||
class ResourceManager
|
||||
{
|
||||
|
|
@ -46,7 +47,8 @@ public:
|
|||
void RegisterDeviceDetector (std::string name, DeviceDetectorFunction detector);
|
||||
void RegisterI2CDeviceDetector (std::string name, I2CDeviceDetectorFunction detector);
|
||||
|
||||
void RegisterDeviceListChangeCallback(ResourceManagerCallback new_callback, void * new_callback_arg);
|
||||
void RegisterDeviceListChangeCallback(DeviceListChangeCallback new_callback, void * new_callback_arg);
|
||||
void RegisterDetectionProgressCallback(DetectionProgressCallback new_callback, void * new_callback_arg);
|
||||
|
||||
unsigned int GetDetectionPercent();
|
||||
const char* GetDetectionString();
|
||||
|
|
@ -55,6 +57,7 @@ public:
|
|||
NetworkServer* GetServer();
|
||||
|
||||
void DeviceListChanged();
|
||||
void DetectionProgressChanged();
|
||||
|
||||
void Cleanup();
|
||||
|
||||
|
|
@ -113,6 +116,13 @@ private:
|
|||
| Device List Changed Callback |
|
||||
\*-------------------------------------------------------------------------------------*/
|
||||
std::mutex DeviceListChangeMutex;
|
||||
std::vector<ResourceManagerCallback> DeviceListChangeCallbacks;
|
||||
std::vector<DeviceListChangeCallback> DeviceListChangeCallbacks;
|
||||
std::vector<void *> DeviceListChangeCallbackArgs;
|
||||
|
||||
/*-------------------------------------------------------------------------------------*\
|
||||
| Detection Progress Callback |
|
||||
\*-------------------------------------------------------------------------------------*/
|
||||
std::mutex DetectionProgressMutex;
|
||||
std::vector<DeviceListChangeCallback> DetectionProgressCallbacks;
|
||||
std::vector<void *> DetectionProgressCallbackArgs;
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue