Radeon Reset Bug fix service
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
RadeonResetBugFix/RadeonResetBugFixService/Tasks/LastResortDevicesRestoreTas...

105 lines
3.9 KiB

namespace RadeonResetBugFixService.Tasks
{
using System;
using Contracts;
using Devices;
class LastResortDevicesRestoreTask : ITask
{
string ITask.TaskName => "Attempting to restore devices state";
private DevicesStatus StartupDevicesStatus { get; }
public LastResortDevicesRestoreTask(DevicesStatus startupDevicesStatus)
{
if (startupDevicesStatus == null)
{
throw new ArgumentNullException(nameof(startupDevicesStatus));
}
this.StartupDevicesStatus = startupDevicesStatus;
}
void ITask.Run(ILogger logger)
{
foreach (var device in this.StartupDevicesStatus.EnabledDevices)
{
logger.Log($"Processing {device.Description}; should be disabled");
try
{
var disabledStatus = DeviceHelper.IsDeviceCurrentlyDisabled(device);
if (!disabledStatus.HasValue)
{
logger.Log("Device not present");
}
else if (!disabledStatus.Value)
{
logger.Log("Device enabled; attempting to disable...");
DeviceHelper.DisableDevice(device);
logger.Log("Disabled device; checking status...");
var newStatus = DeviceHelper.IsDeviceCurrentlyDisabled(device);
if (!newStatus.HasValue)
{
logger.LogError("Device not present");
}
else if (!newStatus.Value)
{
logger.LogError("Device is enabled but should be disabled");
}
else
{
logger.Log("Successfully checked device status");
}
}
else
{
logger.Log("Device is disabled");
}
}
catch (Exception e)
{
logger.LogError(e.ToString());
}
}
foreach (var device in this.StartupDevicesStatus.DisabledDevices)
{
logger.Log($"Processing {device.Description}; should be enabled");
try
{
var disabledStatus = DeviceHelper.IsDeviceCurrentlyDisabled(device);
if (!disabledStatus.HasValue)
{
logger.Log("Device not present");
}
else if (disabledStatus.Value)
{
logger.Log("Device disabled; attempting to enable...");
DeviceHelper.EnableDevice(device);
logger.Log("Enabled device; checking status...");
var newStatus = DeviceHelper.IsDeviceCurrentlyDisabled(device);
if (!newStatus.HasValue)
{
logger.LogError("Device not present");
} else if (newStatus.Value)
{
logger.LogError("Device is disabled but should be enabled");
}
else
{
logger.Log("Successfully checked device status");
}
}
else
{
logger.Log("Device is enabled");
}
}
catch (Exception e)
{
logger.LogError(e.ToString());
}
}
}
}
}