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(1)] public struct ThermalSettingsV1 : IInitializable, IThermalSettings { internal const int MaxThermalSensorsPerGPU = 3; internal StructureVersion _Version; internal readonly uint _Count; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 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 uint _DefaultMinTemp; internal readonly uint _DefaultMaxTemp; internal readonly uint _CurrentTemp; internal readonly ThermalSettingsTarget _Target; /// public ThermalController Controller { get => _Controller; } /// public int DefaultMinimumTemperature { get => (int) _DefaultMinTemp; } /// public int DefaultMaximumTemperature { get => (int) _DefaultMaxTemp; } /// public int CurrentTemperature { get => (int) _CurrentTemp; } /// public ThermalSettingsTarget Target { get => _Target; } /// public override string ToString() { return $"[{Target} @ {Controller}] Current: {CurrentTemperature}°C - Default Range: [({DefaultMinimumTemperature}°C) , ({DefaultMaximumTemperature}°C)]"; } } } }