using System.Linq;
using System.Runtime.InteropServices;
using NvAPIWrapper.Native.Attributes;
using NvAPIWrapper.Native.General.Structures;
using NvAPIWrapper.Native.Interfaces;
using NvAPIWrapper.Native.Interfaces.GPU;
namespace NvAPIWrapper.Native.GPU.Structures
{
///
/// Holds a list of thermal sensor information settings (temperature values)
///
[StructLayout(LayoutKind.Sequential, Pack = 8)]
[StructureVersion(2)]
public struct ThermalSettingsV2 : IInitializable, IThermalSettings
{
internal StructureVersion _Version;
internal readonly uint _Count;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = ThermalSettingsV1.MaxThermalSensorsPerGPU)]
internal readonly
ThermalSensor[] _Sensors;
///
public IThermalSensor[] Sensors
{
get => _Sensors.Take((int) _Count).Cast().ToArray();
}
///
/// Holds information about a single thermal sensor
///
[StructLayout(LayoutKind.Sequential)]
public struct ThermalSensor : IThermalSensor
{
internal readonly ThermalController _Controller;
internal readonly int _DefaultMinTemp;
internal readonly int _DefaultMaxTemp;
internal readonly int _CurrentTemp;
internal readonly ThermalSettingsTarget _Target;
///
public ThermalController Controller
{
get => _Controller;
}
///
public int DefaultMinimumTemperature
{
get => _DefaultMinTemp;
}
///
public int DefaultMaximumTemperature
{
get => _DefaultMaxTemp;
}
///
public int CurrentTemperature
{
get => _CurrentTemp;
}
///
public ThermalSettingsTarget Target
{
get => _Target;
}
///
public override string ToString()
{
return
$"[{Target} @ {Controller}] Current: {CurrentTemperature}°C - Default Range: [({DefaultMinimumTemperature}°C) , ({DefaultMaximumTemperature}°C)]";
}
}
}
}