Update the detector settings list before running the detectors, so that the list is populated even if a detector crashes
This commit is contained in:
parent
b24f989dbc
commit
276c7e66e9
2 changed files with 76 additions and 41 deletions
|
|
@ -375,6 +375,11 @@ void ResourceManager::Cleanup()
|
|||
|
||||
void ResourceManager::DetectDevices()
|
||||
{
|
||||
/*-----------------------------------------------------*\
|
||||
| Update the detector settings |
|
||||
\*-----------------------------------------------------*/
|
||||
UpdateDetectorSettings();
|
||||
|
||||
if(detection_enabled)
|
||||
{
|
||||
/*-------------------------------------------------*\
|
||||
|
|
@ -437,7 +442,6 @@ void ResourceManager::DetectDevicesThreadFunction()
|
|||
hid_device_info* hid_devices = NULL;
|
||||
bool hid_safe_mode = false;
|
||||
unsigned int prev_count = 0;
|
||||
bool save_settings = false;
|
||||
std::vector<bool> size_used;
|
||||
|
||||
LOG_NOTICE("Detection started");
|
||||
|
|
@ -520,19 +524,13 @@ void ResourceManager::DetectDevicesThreadFunction()
|
|||
detection_string = i2c_device_detector_strings[i2c_detector_idx].c_str();
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Check if this detector is enabled or needs to be |
|
||||
| added to the settings list |
|
||||
| Check if this detector is enabled |
|
||||
\*-------------------------------------------------*/
|
||||
bool this_device_enabled = true;
|
||||
if(detector_settings.contains("detectors") && detector_settings["detectors"].contains(detection_string))
|
||||
{
|
||||
this_device_enabled = detector_settings["detectors"][detection_string];
|
||||
}
|
||||
else
|
||||
{
|
||||
detector_settings["detectors"][detection_string] = true;
|
||||
save_settings = true;
|
||||
}
|
||||
|
||||
if(this_device_enabled)
|
||||
{
|
||||
|
|
@ -574,21 +572,6 @@ void ResourceManager::DetectDevicesThreadFunction()
|
|||
\*-------------------------------------------------*/
|
||||
current_hid_device = hid_devices;
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Loop through all HID detectors and see if any |
|
||||
| need to be saved to the settings |
|
||||
\*-------------------------------------------------*/
|
||||
for(unsigned int hid_detector_idx = 0; hid_detector_idx < hid_device_detectors.size(); hid_detector_idx++)
|
||||
{
|
||||
detection_string = hid_device_detectors[hid_detector_idx].name.c_str();
|
||||
|
||||
if(!(detector_settings.contains("detectors") && detector_settings["detectors"].contains(detection_string)))
|
||||
{
|
||||
detector_settings["detectors"][detection_string] = true;
|
||||
save_settings = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(hid_safe_mode)
|
||||
{
|
||||
LOG_NOTICE("Detecting HID devices in safe mode");
|
||||
|
|
@ -765,26 +748,20 @@ void ResourceManager::DetectDevicesThreadFunction()
|
|||
detection_string = device_detector_strings[detector_idx].c_str();
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Check if this detector is enabled or needs to be |
|
||||
| added to the settings list |
|
||||
| Check if this detector is enabled |
|
||||
\*-------------------------------------------------*/
|
||||
bool this_device_enabled = true;
|
||||
if(detector_settings.contains("detectors") && detector_settings["detectors"].contains(detection_string))
|
||||
{
|
||||
this_device_enabled = detector_settings["detectors"][detection_string];
|
||||
}
|
||||
else
|
||||
{
|
||||
detector_settings["detectors"][detection_string] = true;
|
||||
save_settings = true;
|
||||
}
|
||||
|
||||
if(this_device_enabled)
|
||||
{
|
||||
{
|
||||
DetectionProgressChanged();
|
||||
|
||||
device_detectors[detector_idx](rgb_controllers_hw);
|
||||
}
|
||||
}
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| If the device list size has changed, call the |
|
||||
|
|
@ -824,15 +801,6 @@ void ResourceManager::DetectDevicesThreadFunction()
|
|||
|
||||
DetectDeviceMutex.unlock();
|
||||
|
||||
if(save_settings)
|
||||
{
|
||||
LOG_NOTICE("Saving detector settings");
|
||||
|
||||
settings_manager->SetSettings("Detectors", detector_settings);
|
||||
|
||||
settings_manager->SaveSettings();
|
||||
}
|
||||
|
||||
LOG_NOTICE("Detection completed");
|
||||
}
|
||||
|
||||
|
|
@ -844,6 +812,72 @@ void ResourceManager::StopDeviceDetection()
|
|||
detection_string = "Stopping";
|
||||
}
|
||||
|
||||
void ResourceManager::UpdateDetectorSettings()
|
||||
{
|
||||
json detector_settings;
|
||||
bool save_settings = false;
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Open device disable list and read in disabled |
|
||||
| device strings |
|
||||
\*-------------------------------------------------*/
|
||||
detector_settings = settings_manager->GetSettings("Detectors");
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Loop through all I2C detectors and see if any |
|
||||
| need to be saved to the settings |
|
||||
\*-------------------------------------------------*/
|
||||
for(unsigned int i2c_detector_idx = 0; i2c_detector_idx < i2c_device_detectors.size(); i2c_detector_idx++)
|
||||
{
|
||||
detection_string = i2c_device_detector_strings[i2c_detector_idx].c_str();
|
||||
|
||||
if(!(detector_settings.contains("detectors") && detector_settings["detectors"].contains(detection_string)))
|
||||
{
|
||||
detector_settings["detectors"][detection_string] = true;
|
||||
save_settings = true;
|
||||
}
|
||||
}
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Loop through all HID detectors and see if any |
|
||||
| need to be saved to the settings |
|
||||
\*-------------------------------------------------*/
|
||||
for(unsigned int hid_detector_idx = 0; hid_detector_idx < hid_device_detectors.size(); hid_detector_idx++)
|
||||
{
|
||||
detection_string = hid_device_detectors[hid_detector_idx].name.c_str();
|
||||
|
||||
if(!(detector_settings.contains("detectors") && detector_settings["detectors"].contains(detection_string)))
|
||||
{
|
||||
detector_settings["detectors"][detection_string] = true;
|
||||
save_settings = true;
|
||||
}
|
||||
}
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Loop through remaining detectors and see if any |
|
||||
| need to be saved to the settings |
|
||||
\*-------------------------------------------------*/
|
||||
for(unsigned int detector_idx = 0; detector_idx < device_detectors.size(); detector_idx++)
|
||||
{
|
||||
detection_string = device_detector_strings[detector_idx].c_str();
|
||||
|
||||
if(!(detector_settings.contains("detectors") && detector_settings["detectors"].contains(detection_string)))
|
||||
{
|
||||
detector_settings["detectors"][detection_string] = true;
|
||||
save_settings = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(save_settings)
|
||||
{
|
||||
LOG_NOTICE("Saving detector settings");
|
||||
|
||||
settings_manager->SetSettings("Detectors", detector_settings);
|
||||
|
||||
settings_manager->SaveSettings();
|
||||
}
|
||||
}
|
||||
|
||||
void ResourceManager::WaitForDeviceDetection()
|
||||
{
|
||||
DetectDeviceMutex.lock();
|
||||
|
|
|
|||
|
|
@ -139,6 +139,7 @@ public:
|
|||
|
||||
private:
|
||||
void DetectDevicesThreadFunction();
|
||||
void UpdateDetectorSettings();
|
||||
|
||||
/*-------------------------------------------------------------------------------------*\
|
||||
| Static pointer to shared instance of ResourceManager |
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue