Load sizes for hardware controllers registered using RegisterRGBController() before putting them in the general controllers list and updating the UI
This commit is contained in:
parent
6cda8f56ab
commit
7bf0e40fd8
2 changed files with 60 additions and 28 deletions
|
|
@ -150,6 +150,29 @@ void ResourceManager::RegisterRGBController(RGBController *rgb_controller)
|
||||||
LOG_INFO("[%s] Registering RGB controller", rgb_controller->name.c_str());
|
LOG_INFO("[%s] Registering RGB controller", rgb_controller->name.c_str());
|
||||||
rgb_controllers_hw.push_back(rgb_controller);
|
rgb_controllers_hw.push_back(rgb_controller);
|
||||||
|
|
||||||
|
/*-------------------------------------------------*\
|
||||||
|
| If the device list size has changed, call the |
|
||||||
|
| device list changed callbacks |
|
||||||
|
| |
|
||||||
|
| TODO: If all detection is reworked to use |
|
||||||
|
| RegisterRGBController, tracking of previous list |
|
||||||
|
| size can be removed and profile can be loaded per |
|
||||||
|
| controller before adding to list |
|
||||||
|
\*-------------------------------------------------*/
|
||||||
|
if(rgb_controllers_hw.size() != detection_prev_size)
|
||||||
|
{
|
||||||
|
/*-------------------------------------------------*\
|
||||||
|
| First, load sizes for the new controllers |
|
||||||
|
\*-------------------------------------------------*/
|
||||||
|
for(unsigned int controller_size_idx = detection_prev_size; controller_size_idx < rgb_controllers_hw.size(); controller_size_idx++)
|
||||||
|
{
|
||||||
|
profile_manager->LoadDeviceFromListWithOptions(rgb_controllers_sizes, detection_size_entry_used, rgb_controllers_hw[controller_size_idx], true, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
UpdateDeviceList();
|
||||||
|
}
|
||||||
|
detection_prev_size = rgb_controllers_hw.size();
|
||||||
|
|
||||||
UpdateDeviceList();
|
UpdateDeviceList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -609,7 +632,12 @@ void ResourceManager::Cleanup()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*-------------------------------------------------*\
|
||||||
|
| Clear the hardware controllers list and set the |
|
||||||
|
| previous hardware controllers list size to zero |
|
||||||
|
\*-------------------------------------------------*/
|
||||||
rgb_controllers_hw.clear();
|
rgb_controllers_hw.clear();
|
||||||
|
detection_prev_size = 0;
|
||||||
|
|
||||||
for(RGBController* rgb_controller : rgb_controllers_hw_copy)
|
for(RGBController* rgb_controller : rgb_controllers_hw_copy)
|
||||||
{
|
{
|
||||||
|
|
@ -795,18 +823,19 @@ void ResourceManager::DetectDevicesThreadFunction()
|
||||||
unsigned int hid_device_count = 0;
|
unsigned int hid_device_count = 0;
|
||||||
hid_device_info* hid_devices = NULL;
|
hid_device_info* hid_devices = NULL;
|
||||||
bool hid_safe_mode = false;
|
bool hid_safe_mode = false;
|
||||||
unsigned int prev_count = 0;
|
|
||||||
std::vector<bool> size_used;
|
|
||||||
|
|
||||||
LOG_INFO("------------------------------------------------------");
|
LOG_INFO("------------------------------------------------------");
|
||||||
LOG_INFO("| Start device detection |");
|
LOG_INFO("| Start device detection |");
|
||||||
LOG_INFO("------------------------------------------------------");
|
LOG_INFO("------------------------------------------------------");
|
||||||
|
|
||||||
size_used.resize(rgb_controllers_sizes.size());
|
/*-------------------------------------------------*\
|
||||||
|
| Reset the size entry used flags vector |
|
||||||
|
\*-------------------------------------------------*/
|
||||||
|
detection_size_entry_used.resize(rgb_controllers_sizes.size());
|
||||||
|
|
||||||
for(unsigned int size_idx = 0; size_idx < size_used.size(); size_idx++)
|
for(unsigned int size_idx = 0; size_idx < detection_size_entry_used.size(); size_idx++)
|
||||||
{
|
{
|
||||||
size_used[size_idx] = false;
|
detection_size_entry_used[size_idx] = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-------------------------------------------------*\
|
/*-------------------------------------------------*\
|
||||||
|
|
@ -909,14 +938,14 @@ void ResourceManager::DetectDevicesThreadFunction()
|
||||||
| If the device list size has changed, call the |
|
| If the device list size has changed, call the |
|
||||||
| device list changed callbacks |
|
| device list changed callbacks |
|
||||||
\*-------------------------------------------------*/
|
\*-------------------------------------------------*/
|
||||||
if(rgb_controllers_hw.size() != prev_count)
|
if(rgb_controllers_hw.size() != detection_prev_size)
|
||||||
{
|
{
|
||||||
/*-------------------------------------------------*\
|
/*-------------------------------------------------*\
|
||||||
| First, load sizes for the new controllers |
|
| First, load sizes for the new controllers |
|
||||||
\*-------------------------------------------------*/
|
\*-------------------------------------------------*/
|
||||||
for(unsigned int controller_size_idx = prev_count; controller_size_idx < rgb_controllers_hw.size(); controller_size_idx++)
|
for(unsigned int controller_size_idx = detection_prev_size; controller_size_idx < rgb_controllers_hw.size(); controller_size_idx++)
|
||||||
{
|
{
|
||||||
profile_manager->LoadDeviceFromListWithOptions(rgb_controllers_sizes, size_used, rgb_controllers_hw[controller_size_idx], true, false);
|
profile_manager->LoadDeviceFromListWithOptions(rgb_controllers_sizes, detection_size_entry_used, rgb_controllers_hw[controller_size_idx], true, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateDeviceList();
|
UpdateDeviceList();
|
||||||
|
|
@ -925,7 +954,7 @@ void ResourceManager::DetectDevicesThreadFunction()
|
||||||
{
|
{
|
||||||
LOG_DEBUG("[%s] no devices found", detection_string);
|
LOG_DEBUG("[%s] no devices found", detection_string);
|
||||||
}
|
}
|
||||||
prev_count = rgb_controllers_hw.size();
|
detection_prev_size = rgb_controllers_hw.size();
|
||||||
|
|
||||||
LOG_TRACE("[%s] detection end", detection_string);
|
LOG_TRACE("[%s] detection end", detection_string);
|
||||||
|
|
||||||
|
|
@ -977,14 +1006,14 @@ void ResourceManager::DetectDevicesThreadFunction()
|
||||||
| If the device list size has changed, call the |
|
| If the device list size has changed, call the |
|
||||||
| device list changed callbacks |
|
| device list changed callbacks |
|
||||||
\*-------------------------------------------------*/
|
\*-------------------------------------------------*/
|
||||||
if(rgb_controllers_hw.size() != prev_count)
|
if(rgb_controllers_hw.size() != detection_prev_size)
|
||||||
{
|
{
|
||||||
/*-------------------------------------------------*\
|
/*-------------------------------------------------*\
|
||||||
| First, load sizes for the new controllers |
|
| First, load sizes for the new controllers |
|
||||||
\*-------------------------------------------------*/
|
\*-------------------------------------------------*/
|
||||||
for(unsigned int controller_size_idx = prev_count; controller_size_idx < rgb_controllers_hw.size(); controller_size_idx++)
|
for(unsigned int controller_size_idx = detection_prev_size; controller_size_idx < rgb_controllers_hw.size(); controller_size_idx++)
|
||||||
{
|
{
|
||||||
profile_manager->LoadDeviceFromListWithOptions(rgb_controllers_sizes, size_used, rgb_controllers_hw[controller_size_idx], true, false);
|
profile_manager->LoadDeviceFromListWithOptions(rgb_controllers_sizes, detection_size_entry_used, rgb_controllers_hw[controller_size_idx], true, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateDeviceList();
|
UpdateDeviceList();
|
||||||
|
|
@ -993,7 +1022,7 @@ void ResourceManager::DetectDevicesThreadFunction()
|
||||||
{
|
{
|
||||||
LOG_DEBUG("[%s] no devices found", detection_string);
|
LOG_DEBUG("[%s] no devices found", detection_string);
|
||||||
}
|
}
|
||||||
prev_count = rgb_controllers_hw.size();
|
detection_prev_size = rgb_controllers_hw.size();
|
||||||
|
|
||||||
LOG_TRACE("[%s] detection end", detection_string);
|
LOG_TRACE("[%s] detection end", detection_string);
|
||||||
|
|
||||||
|
|
@ -1073,14 +1102,14 @@ void ResourceManager::DetectDevicesThreadFunction()
|
||||||
| If the device list size has changed, call the |
|
| If the device list size has changed, call the |
|
||||||
| device list changed callbacks |
|
| device list changed callbacks |
|
||||||
\*-------------------------------------------------*/
|
\*-------------------------------------------------*/
|
||||||
if(rgb_controllers_hw.size() != prev_count)
|
if(rgb_controllers_hw.size() != detection_prev_size)
|
||||||
{
|
{
|
||||||
/*-------------------------------------------------*\
|
/*-------------------------------------------------*\
|
||||||
| First, load sizes for the new controllers |
|
| First, load sizes for the new controllers |
|
||||||
\*-------------------------------------------------*/
|
\*-------------------------------------------------*/
|
||||||
for(unsigned int controller_size_idx = prev_count; controller_size_idx < rgb_controllers_hw.size(); controller_size_idx++)
|
for(unsigned int controller_size_idx = detection_prev_size; controller_size_idx < rgb_controllers_hw.size(); controller_size_idx++)
|
||||||
{
|
{
|
||||||
profile_manager->LoadDeviceFromListWithOptions(rgb_controllers_sizes, size_used, rgb_controllers_hw[controller_size_idx], true, false);
|
profile_manager->LoadDeviceFromListWithOptions(rgb_controllers_sizes, detection_size_entry_used, rgb_controllers_hw[controller_size_idx], true, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateDeviceList();
|
UpdateDeviceList();
|
||||||
|
|
@ -1089,7 +1118,7 @@ void ResourceManager::DetectDevicesThreadFunction()
|
||||||
{
|
{
|
||||||
LOG_DEBUG("[%s] no devices found", detection_string);
|
LOG_DEBUG("[%s] no devices found", detection_string);
|
||||||
}
|
}
|
||||||
prev_count = rgb_controllers_hw.size();
|
detection_prev_size = rgb_controllers_hw.size();
|
||||||
|
|
||||||
LOG_TRACE("[%s] detection end", detection_string);
|
LOG_TRACE("[%s] detection end", detection_string);
|
||||||
}
|
}
|
||||||
|
|
@ -1162,7 +1191,7 @@ void ResourceManager::DetectDevicesThreadFunction()
|
||||||
|
|
||||||
hid_device_detectors[hid_detector_idx].function(current_hid_device, hid_device_detectors[hid_detector_idx].name);
|
hid_device_detectors[hid_detector_idx].function(current_hid_device, hid_device_detectors[hid_detector_idx].name);
|
||||||
|
|
||||||
if(rgb_controllers_hw.size() != prev_count)
|
if(rgb_controllers_hw.size() != detection_prev_size)
|
||||||
{
|
{
|
||||||
LOG_VERBOSE("[%s] successfully added", detection_string);
|
LOG_VERBOSE("[%s] successfully added", detection_string);
|
||||||
}
|
}
|
||||||
|
|
@ -1228,14 +1257,14 @@ void ResourceManager::DetectDevicesThreadFunction()
|
||||||
| If the device list size has changed, call the |
|
| If the device list size has changed, call the |
|
||||||
| device list changed callbacks |
|
| device list changed callbacks |
|
||||||
\*-------------------------------------------------*/
|
\*-------------------------------------------------*/
|
||||||
if(rgb_controllers_hw.size() != prev_count)
|
if(rgb_controllers_hw.size() != detection_prev_size)
|
||||||
{
|
{
|
||||||
/*-------------------------------------------------*\
|
/*-------------------------------------------------*\
|
||||||
| First, load sizes for the new controllers |
|
| First, load sizes for the new controllers |
|
||||||
\*-------------------------------------------------*/
|
\*-------------------------------------------------*/
|
||||||
for(unsigned int controller_size_idx = prev_count; controller_size_idx < rgb_controllers_hw.size(); controller_size_idx++)
|
for(unsigned int controller_size_idx = detection_prev_size; controller_size_idx < rgb_controllers_hw.size(); controller_size_idx++)
|
||||||
{
|
{
|
||||||
profile_manager->LoadDeviceFromListWithOptions(rgb_controllers_sizes, size_used, rgb_controllers_hw[controller_size_idx], true, false);
|
profile_manager->LoadDeviceFromListWithOptions(rgb_controllers_sizes, detection_size_entry_used, rgb_controllers_hw[controller_size_idx], true, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateDeviceList();
|
UpdateDeviceList();
|
||||||
|
|
@ -1244,7 +1273,7 @@ void ResourceManager::DetectDevicesThreadFunction()
|
||||||
{
|
{
|
||||||
LOG_DEBUG("[%s] no devices found", detection_string);
|
LOG_DEBUG("[%s] no devices found", detection_string);
|
||||||
}
|
}
|
||||||
prev_count = rgb_controllers_hw.size();
|
detection_prev_size = rgb_controllers_hw.size();
|
||||||
|
|
||||||
LOG_TRACE("[%s] detection end", detection_string);
|
LOG_TRACE("[%s] detection end", detection_string);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -111,18 +111,18 @@ class ResourceManager: public ResourceManagerInterface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static ResourceManager *get();
|
static ResourceManager *get();
|
||||||
|
|
||||||
ResourceManager();
|
ResourceManager();
|
||||||
~ResourceManager();
|
~ResourceManager();
|
||||||
|
|
||||||
void RegisterI2CBus(i2c_smbus_interface *);
|
void RegisterI2CBus(i2c_smbus_interface *);
|
||||||
std::vector<i2c_smbus_interface*> & GetI2CBusses();
|
std::vector<i2c_smbus_interface*> & GetI2CBusses();
|
||||||
|
|
||||||
void RegisterRGBController(RGBController *rgb_controller);
|
void RegisterRGBController(RGBController *rgb_controller);
|
||||||
void UnregisterRGBController(RGBController *rgb_controller);
|
void UnregisterRGBController(RGBController *rgb_controller);
|
||||||
|
|
||||||
std::vector<RGBController*> & GetRGBControllers();
|
std::vector<RGBController*> & GetRGBControllers();
|
||||||
|
|
||||||
void RegisterI2CBusDetector (I2CBusDetectorFunction detector);
|
void RegisterI2CBusDetector (I2CBusDetectorFunction detector);
|
||||||
void RegisterDeviceDetector (std::string name, DeviceDetectorFunction detector);
|
void RegisterDeviceDetector (std::string name, DeviceDetectorFunction detector);
|
||||||
void RegisterI2CDeviceDetector (std::string name, I2CDeviceDetectorFunction detector);
|
void RegisterI2CDeviceDetector (std::string name, I2CDeviceDetectorFunction detector);
|
||||||
|
|
@ -136,7 +136,7 @@ public:
|
||||||
int usage = HID_USAGE_ANY);
|
int usage = HID_USAGE_ANY);
|
||||||
void RegisterDynamicDetector (std::string name, DynamicDetectorFunction detector);
|
void RegisterDynamicDetector (std::string name, DynamicDetectorFunction detector);
|
||||||
void RegisterPreDetectionHook (PreDetectionHookFunction hook);
|
void RegisterPreDetectionHook (PreDetectionHookFunction hook);
|
||||||
|
|
||||||
void RegisterDeviceListChangeCallback(DeviceListChangeCallback new_callback, void * new_callback_arg);
|
void RegisterDeviceListChangeCallback(DeviceListChangeCallback new_callback, void * new_callback_arg);
|
||||||
void RegisterDetectionProgressCallback(DetectionProgressCallback 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 RegisterDetectionStartCallback(DetectionStartCallback new_callback, void * new_callback_arg);
|
||||||
|
|
@ -197,7 +197,7 @@ private:
|
||||||
| Detection enabled flag |
|
| Detection enabled flag |
|
||||||
\*-------------------------------------------------------------------------------------*/
|
\*-------------------------------------------------------------------------------------*/
|
||||||
bool detection_enabled;
|
bool detection_enabled;
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------------------*\
|
/*-------------------------------------------------------------------------------------*\
|
||||||
| Profile Manager |
|
| Profile Manager |
|
||||||
\*-------------------------------------------------------------------------------------*/
|
\*-------------------------------------------------------------------------------------*/
|
||||||
|
|
@ -254,8 +254,11 @@ private:
|
||||||
|
|
||||||
std::atomic<bool> detection_is_required;
|
std::atomic<bool> detection_is_required;
|
||||||
std::atomic<unsigned int> detection_percent;
|
std::atomic<unsigned int> detection_percent;
|
||||||
|
std::atomic<unsigned int> detection_prev_size;
|
||||||
|
std::vector<bool> detection_size_entry_used;
|
||||||
const char* detection_string;
|
const char* detection_string;
|
||||||
|
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------------------*\
|
/*-------------------------------------------------------------------------------------*\
|
||||||
| Device List Changed Callback |
|
| Device List Changed Callback |
|
||||||
\*-------------------------------------------------------------------------------------*/
|
\*-------------------------------------------------------------------------------------*/
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue