Rudimentary rescanning implemented but button for it not added due to SDK conflicts. Stop detection button.

Commit amended by Adam Honse <calcprogrammer1@gmail.com>
This commit is contained in:
k1-801 2020-08-25 03:45:56 +04:00 committed by Adam Honse
parent be84a60af6
commit ec77c658f2
5 changed files with 112 additions and 28 deletions

View file

@ -23,24 +23,13 @@ ResourceManager::ResourceManager()
{
detection_percent = 100;
detection_string = "";
detection_is_required = false;
DetectDevicesThread = nullptr;
}
ResourceManager::~ResourceManager()
{
ResourceManager::get()->WaitForDeviceDetection();
for(RGBController* rgb_controller : rgb_controllers)
{
delete rgb_controller;
}
for(i2c_smbus_interface* bus : busses)
{
delete bus;
}
DetectDevicesThread->join();
delete DetectDevicesThread;
Cleanup();
}
void ResourceManager::RegisterI2CBus(i2c_smbus_interface *bus)
@ -104,19 +93,59 @@ void ResourceManager::DeviceListChanged()
unsigned int ResourceManager::GetDetectionPercent()
{
return(detection_percent);
return (detection_percent.load());
}
std::string ResourceManager::GetDetectionString()
const char *ResourceManager::GetDetectionString()
{
return(detection_string);
return (detection_string);
}
void ResourceManager::Cleanup()
{
ResourceManager::get()->WaitForDeviceDetection();
for(RGBController* rgb_controller : rgb_controllers)
{
delete rgb_controller;
}
rgb_controllers.clear();
for(i2c_smbus_interface* bus : busses)
{
delete bus;
}
busses.clear();
if(DetectDevicesThread)
{
DetectDevicesThread->join();
delete DetectDevicesThread;
DetectDevicesThread = nullptr;
}
}
void ResourceManager::DetectDevices()
{
/*-------------------------------------------------*\
| Do nothing is it is already detecting devices |
\*-------------------------------------------------*/
if(detection_is_required.load())
{
return;
}
/*-------------------------------------------------*\
| If there's anything left from the last time, |
| we shall remove it first |
\*-------------------------------------------------*/
detection_percent = 0;
Cleanup();
/*-------------------------------------------------*\
| Start the device detection thread |
\*-------------------------------------------------*/
detection_is_required = true;
DetectDevicesThread = new std::thread(&ResourceManager::DetectDevicesThreadFunction, this);
/*-------------------------------------------------*\
@ -161,7 +190,7 @@ void ResourceManager::DetectDevicesThreadFunction()
/*-------------------------------------------------*\
| Detect i2c busses |
\*-------------------------------------------------*/
for(unsigned int i2c_bus_detector_idx = 0; i2c_bus_detector_idx < i2c_bus_detectors.size(); i2c_bus_detector_idx++)
for(unsigned int i2c_bus_detector_idx = 0; i2c_bus_detector_idx < i2c_bus_detectors.size() && detection_is_required.load(); i2c_bus_detector_idx++)
{
i2c_bus_detectors[i2c_bus_detector_idx](busses);
}
@ -169,9 +198,9 @@ void ResourceManager::DetectDevicesThreadFunction()
/*-------------------------------------------------*\
| Detect i2c devices |
\*-------------------------------------------------*/
for(unsigned int i2c_detector_idx = 0; i2c_detector_idx < i2c_device_detectors.size(); i2c_detector_idx++)
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];
detection_string = i2c_device_detector_strings[i2c_detector_idx].c_str();
DeviceListChanged();
bool this_device_disabled = false;
@ -207,9 +236,9 @@ void ResourceManager::DetectDevicesThreadFunction()
/*-------------------------------------------------*\
| Detect other devices |
\*-------------------------------------------------*/
for(unsigned int detector_idx = 0; detector_idx < device_detectors.size(); detector_idx++)
for(unsigned int detector_idx = 0; detector_idx < device_detectors.size() && detection_is_required.load(); detector_idx++)
{
detection_string = device_detector_strings[detector_idx];
detection_string = device_detector_strings[detector_idx].c_str();
DeviceListChanged();
bool this_device_disabled = false;
@ -243,10 +272,26 @@ void ResourceManager::DetectDevicesThreadFunction()
}
profile_manager.LoadSizeFromProfile("sizes.ors");
/*-------------------------------------------------*\
| Make sure that when the detection is done, |
| progress bar is set to 100% |
\*-------------------------------------------------*/
detection_is_required = false;
detection_percent = 100;
detection_string = "";
DetectDeviceMutex.unlock();
}
void ResourceManager::StopDeviceDetection()
{
detection_is_required = false;
detection_percent = 100;
detection_string = "Stopping";
}
void ResourceManager::WaitForDeviceDetection()
{
DetectDeviceMutex.lock();