コード例 #1
0
        private static bool CheckOverdriveVersion(DeviceAdapterInfo info, ref string errorMessage)
        {
            errorMessage = (info.OverdriveVersion >= 6)
                ? string.Empty
                : $"Only Overdrive version 6 or greater is supported, current version {info.OverdriveVersion}.";

            return(info.OverdriveVersion >= 6);
        }
コード例 #2
0
        private static decimal GetNormalizedPower(DeviceAdapterInfo info, decimal currentPower)
        {
            lock (_PowerHistory)
            {
                _PowerHistory.RemoveAll(p => p.Item2 < DateTime.Now.AddMinutes(-1));
                _PowerHistory.Add(new Tuple <int, DateTime, decimal>(info.Info.BusNumber, DateTime.Now, currentPower));

                return(_PowerHistory.Where(p => p.Item1 == info.Info.BusNumber).Average(p => p.Item3));
            }
        }
コード例 #3
0
        public static decimal GetAdapterCurrentUtilization(DeviceAdapterInfo info, out string errorMessage)
        {
            errorMessage = string.Empty;

            if (!CheckOverdriveVersion(info, ref errorMessage))
            {
                return(decimal.MinValue);
            }

            var pmActivity = new ADL_PM_Activity();
            var response   = ADL.ADL_Overdrive5_CurrentActivity_Get?.Invoke(info.Info.AdapterIndex, ref pmActivity) ?? -1;

            if (response == SUCCESS)
            {
                return((decimal)pmActivity.iActivityPercent);
            }

            errorMessage = $"ADL_Overdrive5_CurrentActivity_Get() returned error code {response}";
            return(decimal.MinValue);
        }
コード例 #4
0
        public static decimal GetAdapterCurrentVramClock(DeviceAdapterInfo info, out string errorMessage)
        {
            errorMessage = string.Empty;

            if (!CheckOverdriveVersion(info, ref errorMessage))
            {
                return(decimal.MinValue);
            }

            var performanceStatus = new ADL_OverdrivePerformanceStatus();
            var response          = ADL.ADL2_OverdriveN_PerformanceStatus_Get?.Invoke(IntPtr.Zero, info.Info.AdapterIndex, ref performanceStatus) ?? -1;

            if (response == SUCCESS)
            {
                return((decimal)performanceStatus.iMemoryClock / 100);
            }

            errorMessage = $"ADL2_OverdriveN_PerformanceStatus_Get() returned error code {response}";
            return(decimal.MinValue);
        }
コード例 #5
0
        public static decimal GetAdapterFanCurrentSpeed(DeviceAdapterInfo info, out string errorMessage)
        {
            errorMessage = string.Empty;

            if (!CheckOverdriveVersion(info, ref errorMessage))
            {
                return(decimal.MinValue);
            }

            var fanControl = new ADL_OverdriveFanControl();
            var response   = ADL.ADL2_OverdriveN_FanControl_Get?.Invoke(IntPtr.Zero, info.Info.AdapterIndex, ref fanControl) ?? -1;

            if (response != SUCCESS)
            {
                errorMessage = $"ADL2_OverdriveN_FanControl_Get() returned error code {response}";
                return(decimal.MinValue);
            }

            return(fanControl.iCurrentFanSpeed);
        }
コード例 #6
0
        public static decimal GetAdapterTemperature(DeviceAdapterInfo info, out string errorMessage)
        {
            errorMessage = string.Empty;

            if (!CheckOverdriveVersion(info, ref errorMessage))
            {
                return(decimal.MinValue);
            }

            var temperature = 0;
            int response    = ADL.ADL2_OverdriveN_Temperature_Get?.Invoke(IntPtr.Zero, info.Info.AdapterIndex, 1, ref temperature) ?? -1;

            if (response == SUCCESS)
            {
                return((decimal)temperature / 1000);
            }

            errorMessage = $"ADL2_OverdriveN_Temperature_Get() returned error code {response}";
            return(decimal.MinValue);
        }
コード例 #7
0
        public static decimal GetAdapterNormalizedPower(DeviceAdapterInfo info, out string errorMessage)
        {
            errorMessage = string.Empty;

            if (!CheckOverdriveVersion(info, ref errorMessage))
            {
                return(decimal.MinValue);
            }

            var powerBits = 0;
            var response  = ADL.ADL2_Overdrive6_CurrentPower_Get?.Invoke(IntPtr.Zero, info.Info.AdapterIndex, 0, ref powerBits) ?? -1;

            if (response != SUCCESS)
            {
                errorMessage = $"ADL2_Overdrive6_CurrentPower_Get() returned error code {response}";
                return(decimal.MinValue);
            }

            var watt  = (decimal)(powerBits >> 8);
            var mWatt = (decimal)(powerBits & 0xff) / 0xff;

            return(GetNormalizedPower(info, watt + mWatt));
        }