ADL Overdrive 6 support and integration (#386)

This commit is contained in:
Rem0o
2021-02-11 11:17:36 +01:00
committed by GitHub
parent 270ae30563
commit 411203902b
2 changed files with 64 additions and 10 deletions
+41 -9
View File
@@ -121,14 +121,27 @@ namespace LibreHardwareMonitor.Hardware.Gpu
{
if (control.ControlMode == ControlMode.Software)
{
AtiAdlxx.ADLFanSpeedValue fanSpeedValue = new AtiAdlxx.ADLFanSpeedValue
if (_currentOverdriveApiLevel >= 6)
{
SpeedType = AtiAdlxx.ADL_DL_FANCTRL_SPEED_TYPE_PERCENT,
Flags = AtiAdlxx.ADL_DL_FANCTRL_FLAG_USER_DEFINED_SPEED,
FanSpeed = (int)control.SoftwareValue
};
AtiAdlxx.ADLOD6FanSpeedValue fanSpeedValue = new AtiAdlxx.ADLOD6FanSpeedValue
{
SpeedType = AtiAdlxx.ADL_DL_FANCTRL_SPEED_TYPE_PERCENT,
FanSpeed = (int)control.SoftwareValue
};
AtiAdlxx.ADL_Overdrive5_FanSpeed_Set(_adapterIndex, 0, ref fanSpeedValue);
AtiAdlxx.ADL_Overdrive6_FanSpeed_Set(_adapterIndex, ref fanSpeedValue);
}
else
{
AtiAdlxx.ADLFanSpeedValue fanSpeedValue = new AtiAdlxx.ADLFanSpeedValue
{
SpeedType = AtiAdlxx.ADL_DL_FANCTRL_SPEED_TYPE_PERCENT,
Flags = AtiAdlxx.ADL_DL_FANCTRL_FLAG_USER_DEFINED_SPEED,
FanSpeed = (int)control.SoftwareValue
};
AtiAdlxx.ADL_Overdrive5_FanSpeed_Set(_adapterIndex, 0, ref fanSpeedValue);
}
}
}
@@ -154,7 +167,14 @@ namespace LibreHardwareMonitor.Hardware.Gpu
/// </summary>
private void SetDefaultFanSpeed()
{
AtiAdlxx.ADL_Overdrive5_FanSpeedToDefault_Set(_adapterIndex, 0);
if (_currentOverdriveApiLevel >= 6)
{
AtiAdlxx.ADL_Overdrive6_FanSpeed_Reset(_adapterIndex);
}
else
{
AtiAdlxx.ADL_Overdrive5_FanSpeedToDefault_Set(_adapterIndex, 0);
}
}
public override void Update()
@@ -194,22 +214,34 @@ namespace LibreHardwareMonitor.Hardware.Gpu
}
AtiAdlxx.ADLFanSpeedValue fanSpeedValue = new AtiAdlxx.ADLFanSpeedValue { SpeedType = AtiAdlxx.ADL_DL_FANCTRL_SPEED_TYPE_RPM };
if (AtiAdlxx.ADL_Overdrive5_FanSpeed_Get(_adapterIndex, 0, ref fanSpeedValue) == AtiAdlxx.ADLStatus.ADL_OK)
AtiAdlxx.ADLOD6FanSpeedValue fanSpeed6Value = new AtiAdlxx.ADLOD6FanSpeedValue { SpeedType = AtiAdlxx.ADL_DL_FANCTRL_SPEED_TYPE_RPM };
if (_currentOverdriveApiLevel <= 5 && AtiAdlxx.ADL_Overdrive5_FanSpeed_Get(_adapterIndex, 0, ref fanSpeedValue) == AtiAdlxx.ADLStatus.ADL_OK)
{
_fan.Value = fanSpeedValue.FanSpeed;
ActivateSensor(_fan);
}
else if (_currentOverdriveApiLevel >= 6 && AtiAdlxx.ADL_Overdrive6_FanSpeed_Get(_adapterIndex, ref fanSpeed6Value) == AtiAdlxx.ADLStatus.ADL_OK)
{
_fan.Value = fanSpeed6Value.FanSpeed;
ActivateSensor(_fan);
}
else
{
_fan.Value = null;
}
fanSpeedValue = new AtiAdlxx.ADLFanSpeedValue { SpeedType = AtiAdlxx.ADL_DL_FANCTRL_SPEED_TYPE_PERCENT };
if (AtiAdlxx.ADL_Overdrive5_FanSpeed_Get(_adapterIndex, 0, ref fanSpeedValue) == AtiAdlxx.ADLStatus.ADL_OK)
fanSpeed6Value = new AtiAdlxx.ADLOD6FanSpeedValue { SpeedType = AtiAdlxx.ADL_DL_FANCTRL_SPEED_TYPE_PERCENT };
if (_currentOverdriveApiLevel <= 5 && AtiAdlxx.ADL_Overdrive5_FanSpeed_Get(_adapterIndex, 0, ref fanSpeedValue) == AtiAdlxx.ADLStatus.ADL_OK)
{
_controlSensor.Value = fanSpeedValue.FanSpeed;
ActivateSensor(_controlSensor);
}
else if (_currentOverdriveApiLevel >= 6 && AtiAdlxx.ADL_Overdrive6_FanSpeed_Get(_adapterIndex, ref fanSpeed6Value) == AtiAdlxx.ADLStatus.ADL_OK)
{
_controlSensor.Value = fanSpeed6Value.FanSpeed;
ActivateSensor(_controlSensor);
}
else
{
_controlSensor.Value = null;
+23 -1
View File
@@ -96,6 +96,15 @@ namespace LibreHardwareMonitor.Interop
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
public static extern ADLStatus ADL_Overdrive5_FanSpeed_Set(int adapterIndex, int thermalControllerIndex, ref ADLFanSpeedValue fanSpeedValue);
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
public static extern ADLStatus ADL_Overdrive6_FanSpeed_Get(int adapterIndex, ref ADLOD6FanSpeedValue FanSpeedValue);
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
public static extern ADLStatus ADL_Overdrive6_FanSpeed_Set(int adapterIndex, ref ADLOD6FanSpeedValue FanSpeedValue);
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
public static extern ADLStatus ADL_Overdrive6_FanSpeed_Reset(int adapterIndex);
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
public static extern ADLStatus ADL2_OverdriveN_PerformanceStatus_Get(IntPtr context, int adapterIndex, out ADLODNPerformanceStatus performanceStatus);
@@ -355,7 +364,20 @@ namespace LibreHardwareMonitor.Interop
public int FanSpeed;
public int Flags;
}
[StructLayout(LayoutKind.Sequential)]
internal struct ADLOD6FanSpeedValue
{
/// Indicates the units of the fan speed. Possible values: \ref ADL_OD6_FANSPEED_TYPE_PERCENT, \ref ADL_OD6_FANSPEED_TYPE_RPM
public int SpeedType;
/// Fan speed value (units as indicated above)
public int FanSpeed;
/// Value for future extension
public int ExtValue;
/// Mask for future extension
public int ExtMask;
}
[StructLayout(LayoutKind.Sequential)]
internal struct ADLFanSpeedInfo
{