using System.Linq; using System.Runtime.InteropServices; using NvAPIWrapper.Native.Attributes; using NvAPIWrapper.Native.General.Structures; using NvAPIWrapper.Native.Helpers; using NvAPIWrapper.Native.Interfaces; namespace NvAPIWrapper.Native.Display.Structures { /// /// Contains the monitor capabilities read from the Vendor Specific Data Block or the Video Capability Data Block /// [StructureVersion(1)] [StructLayout(LayoutKind.Explicit, Pack = 8)] public struct MonitorCapabilities : IInitializable { [FieldOffset(0)] internal StructureVersion _Version; // ReSharper disable once PrivateFieldCanBeConvertedToLocalVariable [FieldOffset(4)] private readonly ushort _Size; [FieldOffset(8)] private readonly MonitorCapabilitiesType _Type; [FieldOffset(12)] private readonly MonitorCapabilitiesConnectorType _ConnectorType; [FieldOffset(16)] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 50)] private readonly byte[] _Data; /// /// Creates a new instance of . /// /// The type of information to be retrieved. public MonitorCapabilities(MonitorCapabilitiesType type) { this = typeof(MonitorCapabilities).Instantiate(); _Size = (ushort) _Version.StructureSize; _Type = type; } /// /// Gets a boolean value indicating if this instance contains valid information /// public bool IsValid { get => _Data[0].GetBit(0); } /// /// Gets the monitor capability type /// // ReSharper disable once ConvertToAutoPropertyWhenPossible public MonitorCapabilitiesType Type { get => _Type; } /// /// Gets the monitor connector type /// // ReSharper disable once ConvertToAutoProperty public MonitorCapabilitiesConnectorType ConnectorType { get => _ConnectorType; } /// /// Gets the monitor VCDB capabilities information /// public MonitorVCDBCapabilities? VCDBCapabilities { get { if (IsValid && _Type == MonitorCapabilitiesType.VCDB) { return new MonitorVCDBCapabilities(_Data.Skip(1).ToArray()); } return null; } } /// /// Gets the monitor VSDB capabilities information /// public MonitorVSDBCapabilities? VSDBCapabilities { get { if (IsValid && _Type == MonitorCapabilitiesType.VSDB) { return new MonitorVSDBCapabilities(_Data.Skip(1).ToArray()); } return null; } } } }