Mini Kabibi Habibi

Current Path : C:/Windows/System32/DriverStore/FileRepository/nv_dispi.inf_amd64_1c83a5d7cffd7bff/
Upload File :
Current File : C:/Windows/System32/DriverStore/FileRepository/nv_dispi.inf_amd64_1c83a5d7cffd7bff/nvWmi.mof

 /***************************************************************************\
|*                                                                           *|
|*      Copyright 2010-2019 NVIDIA Corporation.  All rights reserved.        *|
|*                                                                           *|
|*   NOTICE TO USER:                                                         *|
|*                                                                           *|
|*   This source code is subject to NVIDIA ownership rights under U.S.       *|
|*   and international Copyright laws.                                       *|
|*                                                                           *|
|*   Users and possessors of this source code may not modify this code or    *|
|*   create derivative works of this code.                                   *|
|*                                                                           *|
|*   NVIDIA MAKES NO REPRESENTATION ABOUT THE SUITABILITY OF THIS SOURCE     *|
|*   CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR         *|
|*   IMPLIED WARRANTY OF ANY KIND. NVIDIA DISCLAIMS ALL WARRANTIES WITH      *|
|*   REGARD TO THIS SOURCE CODE, INCLUDING ALL IMPLIED WARRANTIES OF         *|
|*   MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR          *|
|*   PURPOSE. IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL,            *|
|*   INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES          *|
|*   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN      *|
|*   AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING     *|
|*   OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOURCE      *|
|*   CODE.                                                                   *|
|*                                                                           *|
|*   U.S. Government End Users. This source code is a "commercial item"      *|
|*   as that term is defined at 48 C.F.R. 2.101 (OCT 1995), consisting       *|
|*   of "commercial computer  software" and "commercial computer software    *|
|*   documentation" as such terms are used in 48 C.F.R. 12.212 (SEPT 1995)   *|
|*   and is provided to the U.S. Government only as a commercial end item.   *|
|*   Consistent with 48 C.F.R.12.212 and 48 C.F.R. 227.7202-1 through        *|
|*   227.7202-4 (JUNE 1995), all U.S. Government End Users acquire the       *|
|*   source code with only those rights set forth herein.                    *|
|*                                                                           *|
|*   Any use of this source code in individual and commercial software must  *|
|*   include, in the user documentation and internal comments to the code,   *|
|*   the above Disclaimer and U.S. Government End Users Notice.              *|
|*                                                                           *|
|*                                                                           *|
 \***************************************************************************/
// File: ../nvWmi.mof
// Generated: 04:21:13, Oct 01, 2020






// purge all previous definitions of NV namespace
#pragma namespace("\\\\.\\root\\cimv2")
#pragma deleteinstance("__Namespace.Name='NV'", NOFAIL)

#pragma autorecover
#pragma namespace("\\\\.\\root\\cimv2")

Instance of __Namespace
{
    Name = "NV";
};

#pragma namespace("\\\\.\\root\\cimv2\\NV")

instance of __Win32Provider as $NVPROV
{
    ClientLoadableCLSID    = NULL;
    CLSID                  = "{96CDE098-DB47-4040-97CF-C522384F5554}";  // unchanged from 1.1
    DefaultMachineName     = NULL;
    HostingModel           = "Decoupled:Com";
    InitializeAsAdminFirst = FALSE;
    Name                   = "NVIDIA|NVWMI|2.0";
    UnloadTimeout          = NULL;
    SecurityDescriptor     = "O:BAG:SYD:(A;;0x10000001;;;BA)(A;;0x10000001;;;SY)";
    Version                = 0x02000000;            // 2.0.0 (major in MSB byte, then byte with minor, then 16-bit word with build)
                                                    // Note that Version here is a property inherited from __Win32Provider
};


instance of __InstanceProviderRegistration
{
    Provider            = $NVPROV;
    InteractionType     = 0;                        // 0- Pull, 1 - Push, 2 - PushVerify
    SupportsPut         = TRUE;
    SupportsGet         = TRUE;
    SupportsDelete      = TRUE;
    SupportsEnumeration = TRUE;
    QuerySupportLevels  = {"WQL:UnarySelect", "WQL:References"};
};


instance of __PropertyProviderRegistration
{
    Provider           = $NVPROV;
    SupportsPut        = TRUE;
    SupportsGet        = TRUE;
};


instance of __MethodProviderRegistration
{
    Provider = $NVPROV;
};


[Version("1.0.0"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Description("Internal version of NV objects")]
//! Internal version of NV objects
class Version
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Key, Description("Ordered version value, guaranteed to grow monotonically")]
    //! Ordered version value, guaranteed to grow monotonically
    uint32                  orderedValue;

    [Read: ToInstance ToSubClass,  Description("Raw version value")]
    //! Raw version value
    uint32                  value;

    [Read: ToInstance ToSubClass,  Description("Human-readable string with version value")]
    //! Human-readable string with version value
    string                  strValue;
};


[Version("1.0.0"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Description("Base class for all named NV objects")]
//! Base class for all named NV objects
class NamedObject
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Description("Version of named object")]
    //! Version of named object
    Version                 ver;

    [Read: ToInstance ToSubClass,  Key, Description("Unique id of named object, used as a key")]
    //! Unique id of named object, used as a key
    uint32                  id;

    [Read: ToInstance ToSubClass,  Description("Name of an object")]
    //! Name of an object
    string                  name;

    [Read: ToInstance ToSubClass,  Key, Description("Unique name of an object")]
    //! Unique name of an object
    string                  uname;

    [Read: ToInstance ToSubClass,  Description("Ordinal number of named object among objects with same names")]
    //! Ordinal number of named object among objects with same names
    sint32                  ordinal;

    [Read: ToInstance ToSubClass,  Description("Total number of named objects with same name")]
    //! Total number of named objects with same name
    sint32                  count;
};

[Version("1.0.0"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Description("Represents parameters of PCI Express bus link")]
//! Represents parameters of PCI Express bus link
class PcieLink
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Description("Object version")]
    //! Object version
    Version                 verClass;

    [Read: ToInstance ToSubClass,  Description("Maximum speed attainable on this link in Mbits per second")]
    //! Maximum speed attainable on this link in Mbits per second
    sint32                  maxSpeed;

    [Read: ToInstance ToSubClass,  Description("Maximum supported generation of the PCIe bus protocol")]
    //! Maximum supported generation of the PCIe bus protocol
    sint32                  maxGen;

    [Read: ToInstance ToSubClass,  Description("Maximum width, in # of PCI-Express lanes")]
    //! Maximum width, in # of PCI-Express lanes
    sint32                  maxWidth;

    [Read: ToInstance ToSubClass,  Description("Current speed on this link in Mbits per second")]
    //! Current speed on this link in Mbits per second
    sint32                  curSpeed;

    [Read: ToInstance ToSubClass,  Description("Currently negotiated generation of the PCIe bus protocol")]
    //! Currently negotiated generation of the PCIe bus protocol
    sint32                  curGen;

    [Read: ToInstance ToSubClass,  Description("Current width, in # of PCI-Express lanes")]
    //! Current width, in # of PCI-Express lanes
    sint32                  curWidth;

    [Implemented, Description("Formats basic information about this PCI-Express link into a human-readable string")]
    //! Formats basic information about this PCI-Express link into a human-readable string
    string                  info();
};

[Version("1.1.0"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Description("Represents parameters of Video Engine encoder and decoder")]
//! Represents parameters of Video Engine encoder and decoder
class VideoCodec
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Description("Object version")]
    //! Object version
    Version                 verClass;

    [Read: ToInstance ToSubClass,  Description("The percentage of Video Encoder utilization during sampling period.")]
    //! The percentage of Video Encoder utilization during sampling period.
    sint32                  percentEncoderUsage;

    [Read: ToInstance ToSubClass,  Description("The percentage of Video Decoder utilization during sampling period.")]
    //! The percentage of Video Decoder utilization during sampling period.
    sint32                  percentDecoderUsage;

    [Read: ToInstance ToSubClass,  Description("The period (in milliseconds) between Video Encoder samples. -1 if not supported in current environment")]
    //! The period (in milliseconds) between Video Encoder samples. -1 if not supported in current environment
    sint32                  encoderSamplingPeriod;

    [Read: ToInstance ToSubClass,  Description("The period (in milliseconds) between Video Decoder samples. -1 if not supported in current environment")]
    //! The period (in milliseconds) between Video Decoder samples. -1 if not supported in current environment
    sint32                  decoderSamplingPeriod;

    [Read: ToInstance ToSubClass,  Description("Count of active encoder sessions. 0 if not supported in current environment or when encoder inactive")]
    //! Count of active encoder sessions. 0 if not supported in current environment or when encoder inactive
    sint32                  encoderSessionsCount;

    [Read: ToInstance ToSubClass,  Description("Frames per second encoded, as a trailing average for all active sessions. -1 if not supported in current environment")]
    //! Frames per second encoded, as a trailing average for all active sessions. -1 if not supported in current environment
    sint32                  averageFps;

    [Read: ToInstance ToSubClass,  Description("Encoding latency in milliseconds. -1 if not supported in current environment")]
    //! Encoding latency in milliseconds. -1 if not supported in current environment
    sint32                  averageLatency;

    [Implemented, Description("Formats basic information about this PCI-Express link into a human-readable string")]
    //! Formats basic information about this PCI-Express link into a human-readable string
    string                  info();
};

[Version("2.4.0"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Description("Represents an NVIDIA GPU")]
//! Represents an NVIDIA GPU
class Gpu // contains embedded class NamedObject
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Description("Version of named object")]
    //! Version of named object
    Version                 ver;

    [Read: ToInstance ToSubClass,  Key, Description("Unique id of named object, used as a key")]
    //! Unique id of named object, used as a key
    uint32                  id;

    [Read: ToInstance ToSubClass,  Description("Name of an object")]
    //! Name of an object
    string                  name;

    [Read: ToInstance ToSubClass,  Key, Description("Unique name of an object")]
    //! Unique name of an object
    string                  uname;

    [Read: ToInstance ToSubClass,  Description("Ordinal number of named object among objects with same names")]
    //! Ordinal number of named object among objects with same names
    sint32                  ordinal;

    [Read: ToInstance ToSubClass,  Description("Total number of named objects with same name")]
    //! Total number of named objects with same name
    sint32                  count;
//! \publicsection
    [Read: ToInstance ToSubClass,  Deprecated, Description("same as NVAPI ID of the GPU. Unique ID - deprecated, please use 'id'")]
    //! same as NVAPI ID of the GPU. Unique ID - deprecated, please use 'id'
    uint32                  handle;

    [Read: ToInstance ToSubClass,  Description("NVAPI ID of the GPU")]
    //! NVAPI ID of the GPU
    uint32                  nvapiId;

    [Read: ToInstance ToSubClass,  ValueMap{"0","1","2","3","4"}, Values {"unknown","GeForce", "Quadro", "NVS", "Tesla"}, Description("GPU product type. Possible values are: 0 - unknown, 1 - GeForce, 2 - Quadro, 3 - NVS, 4 - Tesla")]
    //! GPU product type. Possible values are: 0 - unknown, 1 - GeForce, 2 - Quadro, 3 - NVS, 4 - Tesla
    uint32                  productType;

    [Read: ToInstance ToSubClass,  ValueMap{"0","1","2","3","4","5","6","7","8","9","10","11","12","13","14"}, Values {"unknown","SDRAM","DDR1","DDR2","GDDR2","GDDR3","GDDR4","DDR3","GDDR5","LPDDR2","GDDR5X","HBM1","HBM2","SDDR4","GDDR6"}, Description("The type of memory associated with this GPU. Possible values are: 0 - unknown, 1 - SDRAM, 2 - DDR1, 3 - DDR2, 4 - GDDR2, 5 - GDDR3, 6 - GDDR4, 7 - DDR3, 8 - GDDR5, 9 - LPDDR2, 10 - GDDR5X, 11 - HBM1, 12 - HBM2, 13 - SDDR4, 14 - GDDR6")]
    //! The type of memory associated with this GPU. Possible values are: 0 - unknown, 1 - SDRAM, 2 - DDR1, 3 - DDR2, 4 - GDDR2, 5 - GDDR3, 6 - GDDR4, 7 - DDR3, 8 - GDDR5, 9 - LPDDR2, 10 - GDDR5X, 11 - HBM1, 12 - HBM2, 13 - SDDR4, 14 - GDDR6
    uint32                  memoryType;

    [Read: ToInstance ToSubClass,  Description("The virtual memory size in MB (Physical Video Memory + System Video Memory + Shared System Memory)")]
    //! The virtual memory size in MB (Physical Video Memory + System Video Memory + Shared System Memory)
    uint32                  memorySizeVirtual;

    [Read: ToInstance ToSubClass,  Description("The physical video memory size in MB")]
    //! The physical video memory size in MB
    uint32                  memorySizePhysical;

    [Read: ToInstance ToSubClass,  Description("The currently available physical video memory size in MB")]
    //! The currently available physical video memory size in MB
    uint32                  memorySizeAvailable;

    [Read: ToInstance ToSubClass,  Description("The width of the GPU's RAM memory bus in MB")]
    //! The width of the GPU's RAM memory bus in MB
    uint32                  memoryBusWidth;

    [Read: ToInstance ToSubClass,  Description("The total number of Cores defined for a GPU")]
    //! The total number of Cores defined for a GPU
    uint32                  coreCount;

    [Read: ToInstance ToSubClass,  Description("The current memory clock frequency in MHz, 0 if not available, -1 if not supported in current environment")]
    //! The current memory clock frequency in MHz, 0 if not available, -1 if not supported in current environment
    sint32                  memoryClockCurrent;

    [Read: ToInstance ToSubClass,  Description("The current GPU clock frequency in MHz, 0 if not available, -1 if not supported in current environment")]
    //! The current GPU clock frequency in MHz, 0 if not available, -1 if not supported in current environment
    sint32                  gpuCoreClockCurrent;

    [Read: ToInstance ToSubClass,  Description("Parameters of PCI-Express link to this GPU")]
    //! Parameters of PCI-Express link to this GPU
    PcieLink                pcieGpu;

    [Read: ToInstance ToSubClass,  Description("Width of the PCI-Express downstream link, in count of PCI-Express lanes")]
    //! Width of the PCI-Express downstream link, in count of PCI-Express lanes
    sint32                  pcieDownstreamWidth;

    [Read: ToInstance ToSubClass,  Description("Parameters of Video Engine encoder and decoder in this GPU")]
    //! Parameters of Video Engine encoder and decoder in this GPU
    VideoCodec              videoCodec;

    [Read: ToInstance ToSubClass,  Description("The total GPU power drawn over last iteration of sampling in watts. -1 if not supported in current environment")]
    //! The total GPU power drawn over last iteration of sampling in watts. -1 if not supported in current environment
    real32                  power;

    [Read: ToInstance ToSubClass,  Description("The number of power sensor samples per iteration. -1 if not supported in current environment")]
    //! The number of power sensor samples per iteration. -1 if not supported in current environment
    sint32                  powerSampleCount;

    [Read: ToInstance ToSubClass,  Description("The period (in milliseconds) between the power samples. -1 if not supported in current environment")]
    //! The period (in milliseconds) between the power samples. -1 if not supported in current environment
    sint32                  powerSamplingPeriod;

    [Read: ToInstance ToSubClass,  Description("The percentage of GPU utilization. -1 if not supported in current environment")]
    //! The percentage of GPU utilization. -1 if not supported in current environment
    sint32                  percentGpuUsage;

    [Read: ToInstance ToSubClass,  Description("The percentage of GPU memory utilization. -1 if not supported in current environment")]
    //! The percentage of GPU memory utilization. -1 if not supported in current environment
    sint32                  percentGpuMemoryUsage;

    [Read: ToInstance ToSubClass,  ArrayType("Ordered"), Description("Array of thermal probes of this GPU")]
    //! Array of thermal probes of this GPU
    ThermalProbe ref        thermalProbes[];

    [Read: ToInstance ToSubClass,  ArrayType("Ordered"), Description("Array of references to coolers of this GPU")]
    //! Array of references to coolers of this GPU
    Cooler ref              coolers[];

    [Read: ToInstance ToSubClass,  ArrayType("Ordered"), Description("Array of references to Error Correction Code instances on this GPU")]
    //! Array of references to Error Correction Code instances on this GPU
    Ecc ref                 ecc[];

    [Read: ToInstance ToSubClass,  Description("The name of the graphics card to which this GPU belongs")]
    //! The name of the graphics card to which this GPU belongs
    string                  productName;

    [Read: ToInstance ToSubClass,  Description("The video BIOS version associated with this GPU")]
    //! The video BIOS version associated with this GPU
    Version                 verVBIOS;

    [Read: ToInstance ToSubClass,  Description("The display adapter string comprising of Vendor Id, Device Id, Sub-device Id, Revision Id")]
    //! The display adapter string comprising of Vendor Id, Device Id, Sub-device Id, Revision Id
    string                  deviceInfo;

    [Read: ToInstance ToSubClass,  Description("The name of the GPU architecture - 'Curie','Tesla','Fermi','Tegra','Kepler','Maxwell','Volta', 'Turing' etc.")]
    //! The name of the GPU architecture - 'Curie','Tesla','Fermi','Tegra','Kepler','Maxwell','Volta', 'Turing' etc.
    string                  archName;

    [Read: ToInstance ToSubClass,  ValueMap{"-1","0","1","2","3","4","5","6","7","8","9"}, Values{"unknown", "Legacy", "Curie","Tesla","Fermi","Tegra","Kepler","Maxwell", "Pascal", "Volta", "Turing"}, Description("numerical ID of the GPU architecture. Possible values are: -1 - unknown, 0 - Legacy, 1 - Curie, 2 - Tesla, 3 - Fermi, 4 - Tegra, 5 - Kepler, 6 - Maxwell, 7 - Pascal, 8 - Volta, 9 - Turing")]
    //! numerical ID of the GPU architecture. Possible values are: -1 - unknown, 0 - Legacy, 1 - Curie, 2 - Tesla, 3 - Fermi, 4 - Tegra, 5 - Kepler, 6 - Maxwell, 7 - Pascal, 8 - Volta, 9 - Turing
    sint32                  archId;

    [Read: ToInstance ToSubClass,  Description("Licensable features")]
    //! Licensable features
    string                  licensableFeatures[];

    [Read: ToInstance ToSubClass,  Description("Licensed Product Name")]
    //! Licensed Product Name
    string                  licensedProductName[];

    [Read: ToInstance ToSubClass,  ValueMap{"-1","0","1"}, Values{"N/A","Disabled", "Enabled"}, Description("Status of licensable features. Possible values are: -1 - N/A, 0 - Disabled, 1 - Enabled")]
    //! Status of licensable features. Possible values are: -1 - N/A, 0 - Disabled, 1 - Enabled
    sint32                  licensableStatus[];

    [Read: ToInstance ToSubClass,  ArrayType("Ordered"), Description("Array of references to encoder sessions info.")]
    //! Array of references to encoder sessions info.
    EncoderSessions ref     encoderSessionsInfo[];

    [Read: ToInstance ToSubClass,  ArrayType("Ordered"), Description("Array of references to per process utilization info for this GPU.")]
    //! Array of references to per process utilization info for this GPU.
    ProcessUtilization ref  processUtilization[];

    [Implemented, Static, Description("Enable licensed feature with given name")]
    //! Enable licensed feature with given name
    boolean enableLicensedFeature
    (
        [in]string feature  //!< Licensable feature to enable
    );
    
    [Implemented, Static, Description("Disable licensed feature with given name")]
    //! Disable licensed feature with given name
    boolean disableLicensedFeature
    (
        [in]string feature  //!< Licensed feature to disable
    );

    [Implemented, Description("Fake given EDID on all display outputs or on specified display outputs, of the given GPU")]
    //! Fake given EDID on all display outputs or on specified display outputs, of the given GPU
    boolean                 fakeEDID
    (
        [in]string filePath,                        //!< Full path to the file with the custom EDID. In order to remove the forced EDID, specify an empty string
        [in, ValueMap{"-1","0","1","2","3","4","5","6","7","8","9"},
        Values{"unknown","unintialized","VGA","Component","S-Video","HDMI","DVI","LVDS","DP","Composite","All"}]
        uint32     output                           //!< Display output type for faking EDID. In order to force/remove the EDID on all display outputs, specify the output value "All"
    );

    [Implemented, Description("Fake given EDID on specified display output, of the given GPU port")]
    //! Fake given EDID on specified display output, of the given GPU port
    boolean                 fakeEDIDOnPort
    (
        [in]string filePath,                        //!< Full path to the file with the custom EDID. In order to remove the forced EDID, specify an empty string
        [in]uint32 portIndex,                       //!< Physical location of the display port on the GPU.
        [in, ValueMap{"-1","0","1","2","3","4","5","6","7","8"},
        Values{"unknown","unintialized","VGA","Component","S-Video","HDMI","DVI","LVDS", "DP","Composite"}]
        uint32     output                           //!< Display output type for faking EDID.
    );

    [Implemented, Description("Create utilization event with given bounds in given performance domain")]
    //! Create utilization event with given bounds in given performance domain
    boolean                 createUtilizationEvent
    (
        [in]sint32 lower,                           //!< Lower bound. When utilization value drops below this value, event notification will be posted to the OS event log
        [in]sint32 upper,                           //!< Upper bound. When utilization value grows above this value, event notification will be posted to the OS event log
        [in, ValueMap{"-1","0","1","2","3"},Values{"All","GPU","Frame Buffer","Video Engine","PCIe bus"}]
        sint32 domain                               //!< Performance domain of the GPU. "All" means that given bounds will trigger notification events for all domains
    );
    
    [Implemented, Description("Delete all utilization events in given performance domain")]
    //! Delete all utilization events in given performance domain
    boolean                 deleteUtilizationEvents
    (
        [in, ValueMap{"-1","0","1","2","3"},Values{"All","GPU","Frame Buffer","Video Engine","PCIe bus"}]
        sint32 domain                               //!< Performance domain of the GPU. "All" means that all event triggers for all domains will be removed
    );
    
    [Implemented, Description("Get all utilization events in given performance domain")]
    //! Get all utilization events in given performance domain
    string                  getAllUtilizationEvents
    (
        [in, ValueMap{"-1","0","1","2","3"},Values{"All","GPU","Frame Buffer","Video Engine","PCIe bus"}]
        sint32 domain                               //!< Performance domain of the GPU. "All" means that all event triggers for all domains will be listed
    );

    [Implemented, Description("Formats basic information about this GPU into a human-readable string")]
    //! Formats basic information about this GPU into a human-readable string
    string                  info();
};

[Version("1.1.1"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Singleton, Description("Represents root object for NV-related HW and SW in the system")]
//! Represents root object for NV-related HW and SW in the system
class System
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Description("System root class version")]
    //! System root class version
    Version                 verClass;

    [Read: ToInstance ToSubClass,  Description("Version of the NVWMI driver")]
    //! Version of the NVWMI driver
    Version                 verNVWMI;

    [Read: ToInstance ToSubClass,  Description("Version of the NV display driver")]
    //! Version of the NV display driver
    Version                 verDisplayDriver;

    [Read: ToInstance ToSubClass,  Description("Firmware version of the SDI Capture board")]
    //! Firmware version of the SDI Capture board
    Version                 verSDICaptureFirmware;

    [Read: ToInstance ToSubClass,  Description("Firmware version of the SDI output board")]
    //! Firmware version of the SDI output board
    Version                 verSDIOutputFirmware;

    [Read: ToInstance ToSubClass,  BitMap{"0","1","2"}, BitValues{"debugger", "file", "eventLog"}, Description("log types. Default is 5 (e.g. debugger and OS event log). 0 - disabled.")]
    //! log types. Default is 5 (e.g. debugger and OS event log). 0 - disabled.
    uint32                  logTypes;

    [Read: ToInstance ToSubClass,  Description("bitmask for filtering out messages. Recommended values are 0 - quiet, 16 - errors only, 272 - errors and warnings, 16777216 - performance profiling")]
    //! bitmask for filtering out messages. Recommended values are 0 - quiet, 16 - errors only, 272 - errors and warnings, 16777216 - performance profiling
    uint32                  logFilter;

    [Read: ToInstance ToSubClass,  Description("reserved. Default is 0")]
    //! reserved. Default is 0
    uint32                  logOptions;

    [Read: ToInstance ToSubClass,  Description("Network port on a licensing server. Default value is 0. When 0 is specified, default server port value will be used")]
    //! Network port on a licensing server. Default value is 0. When 0 is specified, default server port value will be used
    uint16                  licensingPort;

    [Read: ToInstance ToSubClass,  Description("Network address of licensing server")]
    //! Network address of licensing server
    string                  licensingServer;

    [Implemented, Static, Description("Change address of a licensing server")]
    //! Change address of a licensing server
    boolean                 setLicensingServer
    (
        [in]string address, //!< Network address of licensing server
        [in]uint16 port     //!< Network port on licensing server. This is optional parameter and will be set to default value of 0 when omitted
    );

    [Implemented, Static, Description("Clear licensing server address and forfeit license after reboot")]
    //! Clear licensing server address and forfeit license after reboot
    boolean                 unsetLicensingServer();

    [Read: ToInstance ToSubClass,  Description("The video BIOS version associated with the GPU's")]
    //! The video BIOS version associated with the GPU's
    Version                 verVBIOS;

    [Read: ToInstance ToSubClass,  Description("The version of nView Desktop Manager")]
    //! The version of nView Desktop Manager
    Version                 vernViewDesktopManager;

    [Read: ToInstance ToSubClass,  ValueMap{"0","1"}, Values{"Desktop","Mobile"}, Description("Type of machine whether desktop or mobile. Possible values are: 0 - Desktop, 1 - Mobile")]
    //! Type of machine whether desktop or mobile. Possible values are: 0 - Desktop, 1 - Mobile
    uint32                 machineType;

    [Read: ToInstance ToSubClass,  ValueMap{"0","1","2"}, Values{"Disable", "Enable", "Not Installed"}, Description("nView Desktop Manager current state. Possible values are: 0 - Disable, 1 - Enable, 2 - Not Installed")]
    //! nView Desktop Manager current state. Possible values are: 0 - Disable, 1 - Enable, 2 - Not Installed
    uint32                  nViewState;

    [Implemented, Static, Description("Set nView Desktop Manager State")]
    //! Set nView Desktop Manager State
    boolean                 setnViewState
    (
        [in, ValueMap{"0","1"}, Values{"Disable","Enable"}]
        uint32 state                                //!< nView state to set
    );

    [Implemented, Static, Description("Change logging settings")]
    //! Change logging settings
    boolean                 setLogState
    (
        [in, BitMap{"0","1","2"}, BitValues{"debugger", "file", "eventLog"}]
        uint32 types,                               //!< enabled log types. Default is 5 (e.g. debugger and OS event log)

        [in]uint32 filter,                          //!< bitmask for filtering out messages. Recommended values are 0 - quiet, 16 - errors only, 272 - errors and warnings, 16777216 - performance profiling

        [in]uint32 options                          //!< optional parameter, reserved. Set to 0
    );

    [Implemented, Static, Description("Enable NVIDIA GPU Encoder Sessions performance counter")]
    //! Enable NVIDIA GPU Encoder Sessions performance counter
    string                  enableEncoderSessionsPerfCounter();

    [Implemented, Static, Description("Disable NVIDIA GPU Encoder Sessions performance counter")]
    //! Disable NVIDIA GPU Encoder Sessions performance counter
    string                  disableEncoderSessionsPerfCounter();

    [Implemented, Static, Description("Enable NVIDIA GPU Process Utilization performance counter")]
    //! Enable NVIDIA GPU Process Utilization performance counter
    string                  enableProcessUtilizationPerfCounter();

    [Implemented, Static, Description("Disable NVIDIA GPU Process Utilization performance counter")]
    //! Disable NVIDIA GPU Process Utilization performance counter
    string                  disableProcessUtilizationPerfCounter();

    [Implemented, Static, Description("Formats basic information about System objects into a human-readable string")]
    //! Formats basic information about System objects into a human-readable string
    string                  info();
};

[Version("1.0.0"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Singleton, Description("Management of nView desktops")]
//! Management of nView desktops
class DesktopManager
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Description("Object version")]
    //! Object version
    Version                 verClass;

    [Implemented, Static, Description("Get a string with names of all Virtual Desktops. Desktop names are separated by semicolon. Returns empty string when Desktop Manager is disabled.")]
    //! Get a string with names of all Virtual Desktops. Desktop names are separated by semicolon. Returns empty string when Desktop Manager is disabled.
    string                  getAllDesktops();

    [Implemented, Static, Description("Create Virtual Desktop for nView Desktop Manager")]
    //! Create Virtual Desktop for nView Desktop Manager
    boolean                 createDesktop
    (
        [in]string name,                            //!< nView desktop name
        [in]string backgrounds                      //!< string with per-display array of paths to the file with background image and style, separated by semicolon. Default style is "center" (0).
                                                    //!< for example: "C:\ProgramData\Documents\My Pictures\Sample Pictures\Jellyfish.jpg#1;C:\ProgramData\Documents\My Pictures\Sample Pictures\Koala.jpg#0"
    );

    [Implemented, Static, Description("Edit properties of existing Virtual Desktop for nView Desktop Manager")]
    //! Edit properties of existing Virtual Desktop for nView Desktop Manager
    boolean                 editDesktop
    (
        [in]string name,                            //!< nView desktop name
        [in]string backgrounds                      //!< string with per-display array of paths to the file with background image and style, separated by semicolon. Default style is "center" (0).
                                                    //!< for example: "C:\ProgramData\Documents\My Pictures\Sample Pictures\Jellyfish.jpg#1;C:\ProgramData\Documents\My Pictures\Sample Pictures\Koala.jpg#0"
    );

    [Implemented, Static, Description("Delete Virtual Desktop from nView Desktop Manager")]
    //! Delete Virtual Desktop from nView Desktop Manager
    boolean                 deleteDesktop
    (
        [in]string name                             //!< nView desktop name
    );
};

[Version("1.4.0"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Description("Represents a board with NVIDIA GPU(s)")]
//! Represents a board with NVIDIA GPU(s)
class Board // contains embedded class NamedObject
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Description("Version of named object")]
    //! Version of named object
    Version                 ver;

    [Read: ToInstance ToSubClass,  Key, Description("Unique id of named object, used as a key")]
    //! Unique id of named object, used as a key
    uint32                  id;

    [Read: ToInstance ToSubClass,  Description("Name of an object")]
    //! Name of an object
    string                  name;

    [Read: ToInstance ToSubClass,  Key, Description("Unique name of an object")]
    //! Unique name of an object
    string                  uname;

    [Read: ToInstance ToSubClass,  Description("Ordinal number of named object among objects with same names")]
    //! Ordinal number of named object among objects with same names
    sint32                  ordinal;

    [Read: ToInstance ToSubClass,  Description("Total number of named objects with same name")]
    //! Total number of named objects with same name
    sint32                  count;
//! \publicsection
    [Read: ToInstance ToSubClass,  Description("Board Serial Number stored in the InfoROM")]
    //! Board Serial Number stored in the InfoROM
    string                  serialNumber;

    [Read: ToInstance ToSubClass,  Description("Board ID from NVAPI")]
    //! Board ID from NVAPI
    uint32                  nvapiId;

    [Read: ToInstance ToSubClass,  Description("SKU of the GPU chip")]
    //! SKU of the GPU chip
    string                  chipSKU;

    [Read: ToInstance ToSubClass,  Description("SKU modifier of the GPU chip")]
    //! SKU modifier of the GPU chip
    string                  chipSKUMod;
    
    [Read: ToInstance ToSubClass,  Description("Project(Board) number")]
    //! Project(Board) number
    string                  project;
    
    [Read: ToInstance ToSubClass,  Description("Project(Board) SKU number")]
    //! Project(Board) SKU number
    string                  projectSKU;

    [Read: ToInstance ToSubClass,  ArrayType("Ordered"), Description("Array of references to GPUs installed on this board")]
    //! Array of references to GPUs installed on this board
    Gpu ref                 gpus[];

    [Read: ToInstance ToSubClass,  ArrayType("Ordered"), Description("Array of references to thermal probes of this board")]
    //! Array of references to thermal probes of this board
    ThermalProbe ref        thermalProbes[];

    [Read: ToInstance ToSubClass,  ArrayType("Ordered"), Description("Array of references to coolers of this board")]
    //! Array of references to coolers of this board
    Cooler ref              coolers[];

    [Implemented, Description("Formats basic information about Board instance into a human-readable string")]
    //! Formats basic information about Board instance into a human-readable string
    string                  info();
};

[Version("3.1.0"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Singleton, Description("Management of display-related task")]
//! Management of display-related task
class DisplayManager
{
//! \publicsection

    [Read: ToInstance ToSubClass,  Description("Object version")]
    //! Object version
    Version                 verClass;

    [Implemented, Static, Description("Change scaling mode of all display targets in a system")]
    //! Change scaling mode of all display targets in a system
    boolean                 setScalingAll
    (
        [in, ValueMap{"0","1","2","3","5","6","7"},
        Values{"Default","Closest","Native","ScanoutToNative","AspectScanoutToNative","AspectScanoutToClosest","ScanoutToClosest"}]
        uint32 scaling                              //!< Scaling mode to be set
    );

    [Implemented, Static, Description("Validate the display grid by specifying display IDs, before creating the grid. Validates only a single grid, for multigrid, please use validateDisplayGrids method")]
    //! Validate the display grid by specifying display IDs, before creating the grid. Validates only a single grid, for multigrid, please use validateDisplayGrids method
    boolean                 validateDisplayGridById
    (
        [in]uint32 cols,                            //!< number of columns in a grid (must be non-zero)
        [in]uint32 rows,                            //!< number of rows in a grid (must be non-zero)
        [in]uint32 displayIds[]                     //!< array of display IDs (Display.id). Order is important. C convention for array - grid element at column=i and row=j must be at index=j*cols+i
    );

    [Implemented, Static, Description("Create a display grid by specifying display IDs. Creates only a single grid, for multigrid, please use createDisplayGrids method. Will disable all previous grids")]
    //! Create a display grid by specifying display IDs. Creates only a single grid, for multigrid, please use createDisplayGrids method. Will disable all previous grids
    boolean                 createDisplayGridById
    (
        [in]uint32 cols,                            //!< number of columns in a grid (must be non-zero)
        [in]uint32 rows,                            //!< number of rows in a grid (must be non-zero)
        [in]uint32 displayIds[]                     //!< array of display IDs (Display.id). Order is important. C convention for array - grid element at column=i and row=j must be at index=j*cols+i
    );

    [Implemented, Static, Description("Create a display grid by specifying unique display names. Creates only a single grid, for multigrid, please use createDisplayGrids method. Will disable all previous grids")]
    //! Create a display grid by specifying unique display names. Creates only a single grid, for multigrid, please use createDisplayGrids method. Will disable all previous grids
    boolean                 createDisplayGridByName
    (
        [in]uint32 cols,                            //!< number of columns in a grid (must be non-zero)
        [in]uint32 rows,                            //!< number of rows in a grid (must be non-zero)
        [in]string displayNames                     //!< string of unique display names (Display.uname), separated by semicolon. Order is important. C convention for array - grid element at column=i and row=j must be at index=j*cols+i
    );

    [Implemented, Static, Description("Create a display grid by specifying references to the Display class instances. Creates only a single grid, for multigrid, please use createDisplayGrids method. Will disable all previous grids")]
    //! Create a display grid by specifying references to the Display class instances. Creates only a single grid, for multigrid, please use createDisplayGrids method. Will disable all previous grids
    boolean                 createDisplayGridByRef
    (
        [in]uint32 cols,                            //!< number of columns in a grid (must be non-zero)
        [in]uint32 rows,                            //!< number of rows in a grid (must be non-zero)
        [in]string displayRefs                      //!< string of references to Display instances, separated by semicolon. Order is important. C convention for array - grid element at column=i and row=j must be at index=j*cols+i
    );

    [Implemented, Static, Description("Validate multiple display grid topologies")]
    //! Validate multiple display grid topologies
    boolean                 validateDisplayGrids
    (
        [in]string grids[]                          //!< array of grid topologies to be validated, each grid specified by a string with key=value pairs
                                                    //!< "rows=2;cols=2;stereo=0;layout=1.1 1.2 1.3 1.4;mode=1920 1200 32 60;rotation=0 0 0 0", 
                                                    //!< "rows=1;cols=4;stereo=0;layout=2.1 2.2 2.3 2.4;mode=1920 1200 32 60;rotation=1 1 1 1", ...
                                                    //!< Only "rows" and "cols" are the mandatory keys in the string with grid specification 
                                                    //!< Other parameters are optional and will be deduced from a default topology
    );

    [Implemented, Static, Description("Create multiple display grid topologies")]
    //! Create multiple display grid topologies
    boolean                 createDisplayGrids
    (
        [in]string grids[]                          //!< array of grid topologies to be created, each grid specified by a string with key=value pairs
                                                    //!< "rows=2;cols=2;stereo=0;layout=1.1 1.2 1.3 1.4;mode=1920 1200 32 60;rotation=0 0 0 0", 
                                                    //!< "rows=1;cols=4;stereo=0;layout=2.1 2.2 2.3 2.4;mode=1920 1200 32 60;rotation=1 1 1 1", ...
                                                    //!< Only "rows" and "cols" are the mandatory keys in a string with grid specification 
                                                    //!< Other parameters are optional and will be deduced from a default topology
    );

    [Implemented, Static, Description("Set desktop positions of all active display grids. All active display grids have to be re-positioned together. Primary grid (with taskbar) must be positioned at (0,0)")]
    //! Set desktop positions of all active display grids. All active display grids have to be re-positioned together. Primary grid (with taskbar) must be positioned at (0,0)
    boolean                 setGridPositions
    (
        [in]uint32 positionCol[],                   //!< array of valid grid column positions in pixels. Order is important. Also, DisplayGrid::colOverlap (if any) should be considered.
        [in]uint32 positionRow[]                    //!< array of valid grid row positions in pixels. Order is important. Also, DisplayGrid::rowOverlap (if any) should be considered.
    );

    [Implemented, Static, Description("Fake given EDID across all GPUs, on all or only specified display outputs")]
    //! Fake given EDID across all GPUs, on all or only specified display outputs
    boolean                 fakeEDIDAll
    (
        [in]string  filePath,                       //!< Full path to the file with the custom EDID. In order to remove the forced EDID, specify an empty string
        [in, ValueMap{"-1","0","1","2","3","4","5","6","7","8","9"},
        Values{"unknown","unintialized","VGA","Component","S-Video","HDMI","DVI","LVDS", "DP","Composite","All"}]
        uint32      output                          //!< Display output type for faking EDID. In order to force/remove the EDID on all display outputs, specify the output value "All"
    );

    [Implemented, Static, Description("Try the new custom timing without applying it")]
    //! Try the new custom timing without applying it
    boolean                 tryCustomTiming
    (
        [in]string  timing                          //!< String of custom timing parameters 
                                                    //!< "displayLocus=1001 1002 2001 2002...; mode=1720 1000 32 60.45; override=6�
                                                    //!< possible override values: CURRENT=0, AUTO=1, EDID=2, DMT=3, DMT_RB=4, CVT=5, CVT_RB=6, GFT=7, EIA861=8, ANALOG_TV=9, CUST=10,
                                                    //!< NV_PSF=11, NV_ASPR=12, SDI=13. Note - not all override values may be supported. Default is CVT_RB
                                                    //!< Other parameters are optional and will be deduced from default
    );

    [Implemented, Static, Description("Create the new Custom timing. This will only save the new timing and not apply. To apply, call setDisplayMode.")]
    //! Create the new Custom timing. This will only save the new timing and not apply. To apply, call setDisplayMode.
    boolean                 createCustomTiming
    (
        [in]string  timing                          //!< String of custom timing parameters 
                                                    //!< "displayLocus=1001 1002 2001 2002...; mode=1720 1000 32 60.45; override=6�
                                                    //!< possible override values: CURRENT=0, AUTO=1, EDID=2, DMT=3, DMT_RB=4, CVT=5, CVT_RB=6, GFT=7, EIA861=8, ANALOG_TV=9, CUST=10,
                                                    //!< NV_PSF=11, NV_ASPR=12, SDI=13. Note - not all override values may be supported. Default is CVT_RB
                                                    //!< Other parameters are optional and will be deduced from default
    );

    [Implemented, Static, Description("Modify the existing Custom timing. This will only save the new timing and not apply. To apply, call setDisplayMode.")]
    //! Modify the existing Custom timing. This will only save the new timing and not apply. To apply, call setDisplayMode.
    boolean                 editCustomTiming
    (
        [in]uint32  modeId,                         //!< Existing custom timing source mode Id
        [in]string  newTiming                       //!< String of new custom timing parameters 
                                                    //!< "displayLocus=1001 1002 2001 2002...; mode=1720 1000 32 60.45; override=6�
                                                    //!< possible override values: CURRENT=0, AUTO=1, EDID=2, DMT=3, DMT_RB=4, CVT=5, CVT_RB=6, GFT=7, EIA861=8, ANALOG_TV=9, CUST=10,
                                                    //!< NV_PSF=11, NV_ASPR=12, SDI=13. Note - not all override values may be supported. Default is CVT_RB
                                                    //!< Other parameters are optional and will be deduced from default
    );

    [Implemented, Static, Description("Delete the existing Custom timing. This will permanently delete the timing of the display")]
    //! Delete the existing Custom timing. This will permanently delete the timing of the display
    boolean                 deleteCustomTiming
    (
        [in]string  timing                          //!< String of custom timing parameters 
                                                    //!< "displayLocus=1001 1002 2001 2002...; mode=1720 1000 32 60.45; override=CVT_RB�
                                                    //!< possible override values: CURRENT=0, AUTO=1, EDID=2, DMT=3, DMT_RB=4, CVT=5, CVT_RB=6, GFT=7, EIA861=8, ANALOG_TV=9, CUST=10,
                                                    //!< NV_PSF=11, NV_ASPR=12, SDI=13. Note - not all override values may be supported. Default is CVT_RB
                                                    //!< Other parameters are optional and will be deduced from default
    );

    [Implemented, Static, Description("Enumerates all existing Custom timing for the given displays.")]
    //! Enumerates all existing Custom timing for the given displays.
    string                  enumCustomTimings
    (
        [in]uint32  displays[]                      //!< Array of display IDs (Display.id)
    );

    [Implemented, Static, Description("Saves all existing Custom Timings for the given displays to given XML file. File format is compatible with Control Panel.")]
    //! Saves all existing Custom Timings for the given displays to given XML file. File format is compatible with Control Panel.
    boolean                 saveCustomTimings
    (
        [in]uint32  displays[],                     //!< Array of display IDs (Display.id)
        [in]string  filePath                        //!< Path to the file with Custom Timings
    );

    [Implemented, Static, Description("Loads all existing Custom Timings into the given displays from given XML file. File format is compatible with Control Panel.")]
    //! Loads all existing Custom Timings into the given displays from given XML file. File format is compatible with Control Panel.
    boolean                 loadCustomTimings
    (
        [in]uint32  displays[],                     //!< Array of display IDs (Display.id)
        [in]string  filePath                        //!< Path to the file with Custom Timings
    );

    [Implemented, Static, Description("Clone displays. Note that all displays must be connected to the same GPU")]
    //! Clone displays. Note that all displays must be connected to the same GPU
    boolean                 createClone
    (
        [in, ValueMap{"0","1"}, Values{"basic","smart"}]
        uint32  type,                               //!< type of clone - basic (same display resolution) or smart (pan and scan target to a source display)
        [in]uint32  source,                         //!< display ID of clone source (Display.id)
        [in]uint32  targets[]                       //!< array of clone target display IDs (Display.id)
    );

    [Implemented, Static, Description("Create display mode filter for given displays.")]
    //! Create display mode filter for given displays.
    boolean                 createModeFilter
    (
        [in]uint32  displays[],                     //!< Array of display IDs (Display.id)
        [in]string  filter                          //!< filter definition in format "<type>;<limits>;". Type could be <, > or =. Limits are given as <width>x<height>x<color depth>@<frequency>. 
                                                    //!< Zero value means no filtering will occur for given limit.
                                                    //!< \n Example 1: ">;999x888x31@0" - all display modes with resolution more than 999x998 and color depth 32 or more, at any refresh rate will pass.
                                                    //!< \n Example 2: "=;1024x768x0@59.95" - only display mode 1024x768 with any color depth at refresh rate 59.95 Hz will pass.
    );

    [Implemented, Static, Description("Create display mode filter for given displays.")]
    //! Create display mode filter for given displays.
    boolean                 deleteModeFilter
    (
        [in]uint32  displays[]                      //!< Array of display IDs (Display.id)
    );
    
    [Implemented, Static, Description("Enumerate display mode filters.")]
    //! Enumerate display mode filters.
    string                  enumModeFilters
    (
        [in]uint32  displays[]                      //!< Array of display IDs (Display.id)
    );

    [Implemented, Static, Description("Formats basic information about DisplayManager objects in a system into a human-readable string")]
    //! Formats basic information about DisplayManager objects in a system into a human-readable string
    string                  info();
};


[Version("1.1.0"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Description("Represents overlap limits of individual display in a display grid")]
//! Represents overlap limits of individual display in a display grid
class OverlapLimits
{
//! \publicsection

    [Read: ToInstance ToSubClass,  Description("Object version")]
    //! Object version
    Version                 verClass;

    [Read: ToInstance ToSubClass,  Key, Description("Unique identification of the overlap limits")]
    //! Unique identification of the overlap limits
    uint32                  id;

    [Read: ToInstance ToSubClass,  Description("The minimum column overlap for each display (in pixels)")]
    //! The minimum column overlap for each display (in pixels)
    sint32                  minOverlapCol;

    [Read: ToInstance ToSubClass,  Description("The maximum column overlap for each display (in pixels)")]
    //! The maximum column overlap for each display (in pixels)
    sint32                  maxOverlapCol;

    [Read: ToInstance ToSubClass,  Description("The minimum row overlap for each display (in pixels)")]
    //! The minimum row overlap for each display (in pixels)
    sint32                  minOverlapRow;

    [Read: ToInstance ToSubClass,  Description("The maximum row overlap for each display (in pixels)")]
    //! The maximum row overlap for each display (in pixels)
    sint32                  maxOverlapRow;

    [Read: ToInstance ToSubClass,  Description("The minimum total column overlap for the entire grid (in pixels)")]
    //! The minimum total column overlap for the entire grid (in pixels)
    sint32                  minTotalCol;

    [Read: ToInstance ToSubClass,  Description("The maximum total column overlap for the entire grid (in pixels)")]
    //! The maximum total column overlap for the entire grid (in pixels)
    sint32                  maxTotalCol;

    [Read: ToInstance ToSubClass,  Description("The minimum total row overlap for the entire grid (in pixels)")]
    //! The minimum total row overlap for the entire grid (in pixels)
    sint32                  minTotalRow;

    [Read: ToInstance ToSubClass,  Description("The maximum total row overlap for the entire grid (in pixels)")]
    //! The maximum total row overlap for the entire grid (in pixels)
    sint32                  maxTotalRow;

    [Implemented, Description("Formats basic information about OverlapLimits instance into a human-readable string")]
    //! Formats basic information about OverlapLimits instance into a human-readable string
    string                  info();
};


[Version("1.2.0"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Description("Represents physical displays, organized into a regular grid (rows by columns)")]
//! Represents physical displays, organized into a regular grid (rows by columns)
class DisplayGrid // contains embedded class NamedObject
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Description("Version of named object")]
    //! Version of named object
    Version                 ver;

    [Read: ToInstance ToSubClass,  Key, Description("Unique id of named object, used as a key")]
    //! Unique id of named object, used as a key
    uint32                  id;

    [Read: ToInstance ToSubClass,  Description("Name of an object")]
    //! Name of an object
    string                  name;

    [Read: ToInstance ToSubClass,  Key, Description("Unique name of an object")]
    //! Unique name of an object
    string                  uname;

    [Read: ToInstance ToSubClass,  Description("Ordinal number of named object among objects with same names")]
    //! Ordinal number of named object among objects with same names
    sint32                  ordinal;

    [Read: ToInstance ToSubClass,  Description("Total number of named objects with same name")]
    //! Total number of named objects with same name
    sint32                  count;
//! \publicsection

    [Read: ToInstance ToSubClass,  Description("Number of rows in the grid")]
    //! Number of rows in the grid
    uint32                  rows;

    [Read: ToInstance ToSubClass,  Description("Number of columns in the grid")]
    //! Number of columns in the grid
    uint32                  cols;

    [Read: ToInstance ToSubClass,  Description("Distance between displays per row. Positive number indicates overlap, negative - gap (in pixels)")]
    //! Distance between displays per row. Positive number indicates overlap, negative - gap (in pixels)
    sint32                  overlapRows[];

    [Read: ToInstance ToSubClass,  Description("Distance between displays per column. Positive number indicates overlap, negative - gap (in pixels)")]
    //! Distance between displays per column. Positive number indicates overlap, negative - gap (in pixels)
    sint32                  overlapCols[];

    [Read: ToInstance ToSubClass,  Description("Overlap limits (in pixels) for this display grid")]
    //! Overlap limits (in pixels) for this display grid
    OverlapLimits           overlapLimits;

    [Read: ToInstance ToSubClass,  Description("Virtual mode of this display grid (including overlaps)")]
    //! Virtual mode of this display grid (including overlaps)
    DisplayMode             displayModeVirtual;

    [Read: ToInstance ToSubClass,  Description("Current mode of this display grid (per-display)")]
    //! Current mode of this display grid (per-display)
    DisplayMode             displayModePhysical;

    [Read: ToInstance ToSubClass,  Description("Column-wise (horizontal) position of the display grid (in pixels)")]
    //! Column-wise (horizontal) position of the display grid (in pixels)
    sint32                  positionCol;

    [Read: ToInstance ToSubClass,  Description("Row-wise (vertical) position of the display grid (in pixels)")]
    //! Row-wise (vertical) position of the display grid (in pixels)
    sint32                  positionRow;

    [Read: ToInstance ToSubClass,  ValueMap{"0","1","2","3"}, Values{"No rotation","rotate 90 degrees","rotate 180 degrees","rotate 270 degrees"}, Description("per-display rotation modes in a grid. Possible values are: 0 - No rotation, 1 - rotate 90 degrees, 2 - rotate 180 degrees, 3 - rotate 270 degrees")]
    //! per-display rotation modes in a grid. Possible values are: 0 - No rotation, 1 - rotate 90 degrees, 2 - rotate 180 degrees, 3 - rotate 270 degrees
    uint32                  rotation[];

    [Read: ToInstance ToSubClass,  ArrayType("Ordered"), Description("Array of references to modes available on this display grid")]
    //! Array of references to modes available on this display grid
    DisplayMode ref         displayModes[];

    [Read: ToInstance ToSubClass,  ArrayType("Ordered"), Description("Array of references to displays bound into this display grid")]
    //! Array of references to displays bound into this display grid
    Display ref             displays[];

    [Read: ToInstance ToSubClass,  ArrayType("Ordered"), Description("Array of references to GPUs, driving displays on this display grid")]
    //! Array of references to GPUs, driving displays on this display grid
    Gpu ref                 gpus[];

    [Implemented, Description("Change per-row overlap of the display grid item with given index")]
    //! Change per-row overlap of the display grid item with given index
    boolean                 setOverlapRow
    (
        [in]sint32  index,                          //!< Index of the column. Value -1 could be used to change overlap for all rows at once
        [in]sint32  overlap                         //!< Overlap. Positive number indicates overlap, negative - gap (in pixels)
    );

    [Implemented, Description("Change per-col overlap of the display grid item with given index")]
    //! Change per-col overlap of the display grid item with given index
    boolean                 setOverlapCol
    (
        [in]sint32  index,                          //!< Index of the column. Value -1 could be used to change overlap for all columns at once
        [in]sint32  overlap                         //!< Overlap. Positive number indicates overlap, negative - gap (in pixels)
    );

    [Implemented, Description("Change overlap of the display grid item with given index")]
    //! Change overlap of the display grid item with given index
    boolean                 setOverlaps
    (
        [in]sint32  index,                          //!< Index of the item. Value -1 could be used to change overlap for all items at once
        [in]sint32  overlapRow,                     //!< Overlap. Positive number indicates overlap, negative - gap (in pixels)
        [in]sint32  overlapCol                      //!< Overlap. Positive number indicates overlap, negative - gap (in pixels)
    );

    [Implemented, Description("Change display mode of this display grid by specifying a display mode properties")]
    //! Change display mode of this display grid by specifying a display mode properties
    boolean                 setDisplayMode
    (
        [in]uint32  width,                          //!< Width of the display grid (in pixels)
        [in]uint32  height,                         //!< Height of the display grid (in pixels)
        [in]real32  refreshRate,                    //!< Refresh rate of the display grid (in Hz)
        [in]uint32  depth                           //!< Color depth of the display grid (in bits per pixel)
    );

    [Implemented, Description("Change mode of this display grid by specifying a display mode ID")]
    //! Change mode of this display grid by specifying a display mode ID
    boolean                 setDisplayModeById
    (
        [in]uint32  id                              //!< DisplayMode ID
    );

    [Implemented, Description("Change mode of this display grid by specifying a reference to a display mode")]
    //! Change mode of this display grid by specifying a reference to a display mode
    boolean                 setDisplayModeByRef
    (
        [in]DisplayMode ref gridMode                //!< A reference to the display mode to be applied
    );

    [Implemented, Description("Change rotation of the displays in this grid by specifying the per-display rotation mode. Currently only common mode for all displays in a grid is supported.")]
    //! Change rotation of the displays in this grid by specifying the per-display rotation mode. Currently only common mode for all displays in a grid is supported.
    boolean                 setRotation
    (
        [in]uint32 rotation[]                       //!< per-display rotation modes to be set in the grid. Currently only identical rotation angle for all displays in a grid is supported.
                                                    //!< \n Example 1: for 1x4 grid, "setRotation 1" will apply "rotate 90 degrees" to all displays in the grid.
                                                    //!< \n Example 2: specifying same angle for all displays is supported: "setRotation rotation=(1,1,1,1)" 
                                                    //!< \n Example 3: attempt to rotate to non-identical angles "setRotation rotation=(1,2,1,1)" will fail
    );

    [Implemented, Description("Save Gamma Ramp data from all displays into specified file (binary format). Using file path with '.grg' extension is recommended.")]
    //! Save Gamma Ramp data from all displays into specified file (binary format). Using file path with '.grg' extension is recommended.
    boolean                 saveGammaRamp
    (
        [in]string filePath                         //!< Path to the file with Gamma Ramp. File will be in binary format, specifying '.grg' extension explicitly is recommended.
    );

    [Implemented, Description("Override Gamma Ramp data for all displays from specified file (binary format). Using file path with '.grg' extension is recommended.")]
    //! Override Gamma Ramp data for all displays from specified file (binary format). Using file path with '.grg' extension is recommended.
    boolean                 setGammaRamp
    (
        [in]string filePath                         //!< Path to the file with Gamma Ramp. Using file path with '.grg' extension is recommended.
    );

    [Implemented, Description("Calculate and set Gamma Ramp from basic color controls")]
    //! Calculate and set Gamma Ramp from basic color controls
    boolean                 setGammaRampBasic
    (
        [in]real32 brightness,                      //!< brightness: -0.2 .. +0.2 default: 0.0
        [in]real32 contrast,                        //!< contrast: -0.2 .. +0.2 default: 0.0
        [in]real32 gamma                            //!< gamma: 0.3 .. 2.8  default: 1.0
    );

    [Implemented, Description("Save Color Space Conversion data into specified file (binary format). Using file path with '.cscg' extension is recommended.")]
    //! Save Color Space Conversion data into specified file (binary format). Using file path with '.cscg' extension is recommended.
    boolean                 saveCSC
    (
        [in]string filePath                         //!< Path to the file with CSC data. File will be in binary format, specifying '.cscg' extension explicitly is recommended.
    );

    [Implemented, Description("Override Color Space Conversion data from specified file (binary format). Using file path with '.cscg' extension is recommended.")]
    //! Override Color Space Conversion data from specified file (binary format). Using file path with '.cscg' extension is recommended.
    boolean                 setCSC
    (
        [in]string filePath                         //!< Path to the file with CSC data. Using file path with '.cscg' extension is recommended.
    );

    [Implemented, Description("Formats basic information about this Display grid into a human-readable string")]
    //! Formats basic information about this Display grid into a human-readable string
    string                  info();
};


[Version("1.3.3"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Description("Represents physical display")]
//! Represents physical display
class Display // contains embedded class NamedObject
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Description("Version of named object")]
    //! Version of named object
    Version                 ver;

    [Read: ToInstance ToSubClass,  Key, Description("Unique id of named object, used as a key")]
    //! Unique id of named object, used as a key
    uint32                  id;

    [Read: ToInstance ToSubClass,  Description("Name of an object")]
    //! Name of an object
    string                  name;

    [Read: ToInstance ToSubClass,  Key, Description("Unique name of an object")]
    //! Unique name of an object
    string                  uname;

    [Read: ToInstance ToSubClass,  Description("Ordinal number of named object among objects with same names")]
    //! Ordinal number of named object among objects with same names
    sint32                  ordinal;

    [Read: ToInstance ToSubClass,  Description("Total number of named objects with same name")]
    //! Total number of named objects with same name
    sint32                  count;
//! \publicsection

    [Read: ToInstance ToSubClass,  Description("locus of the display - <gpu#>.<output#>")]
    //! locus of the display - <gpu#>.<output#>
    string                  locus;

    [Read: ToInstance ToSubClass,  Description("NVAPI Display ID")]
    //! NVAPI Display ID
    uint32                  nvapiId;

    [Read: ToInstance ToSubClass,  Description("Firmware version of this display")]
    //! Firmware version of this display
    Version                 verFirmware;

    [Read: ToInstance ToSubClass,  Description("Manufacturer of this display")]
    //! Manufacturer of this display
    string                  make;

    [Read: ToInstance ToSubClass,  Description("Model of this display")]
    //! Model of this display
    string                  model;

    [Read: ToInstance ToSubClass,  Description("Native display mode")]
    //! Native display mode
    DisplayMode             displayModeNative;

    [Read: ToInstance ToSubClass,  ValueMap{"0","1","2","3","5","6","7"}, Values{"Default","Closest","Native","ScanoutToNative","AspectScanoutToNative","AspectScanoutToClosest","ScanoutToClosest"}, Description("Display scaling mode - Default, Closest, Native, ScanoutToNative, AspectScanoutToNative, AspectScanoutToClosest, ScanoutToClosest. Possible values are: 0 - Default, 1 - Closest, 2 - Native, 3 - ScanoutToNative, 5 - AspectScanoutToNative, 6 - AspectScanoutToClosest, 7 - ScanoutToClosest")]
    //! Display scaling mode - Default, Closest, Native, ScanoutToNative, AspectScanoutToNative, AspectScanoutToClosest, ScanoutToClosest. Possible values are: 0 - Default, 1 - Closest, 2 - Native, 3 - ScanoutToNative, 5 - AspectScanoutToNative, 6 - AspectScanoutToClosest, 7 - ScanoutToClosest
    uint32                  scaling;

    [Read: ToInstance ToSubClass,  ValueMap{"0","1","2","3","4"}, Values{"None","90 degree","180 degree","270 degree","Ignored"}, Description("rotation angle. Possible values are: 0 - None, 1 - 90 degree, 2 - 180 degree, 3 - 270 degree, 4 - Ignored")]
    //! rotation angle. Possible values are: 0 - None, 1 - 90 degree, 2 - 180 degree, 3 - 270 degree, 4 - Ignored
    uint32                  rotation;

    [Read: ToInstance ToSubClass,  ArrayType("Indexed"), Description("Raw EDID of this display")]
    //! Raw EDID of this display
    uint8                   EDID[];

    [Read: ToInstance ToSubClass,  Description("Size of the EDID in bytes")]
    //! Size of the EDID in bytes
    uint32                  EDIDSize;

    [Read: ToInstance ToSubClass,  ValueMap{"-1","0","0x10","0x11","0x13","0x14","0x16","0x17","0x18","0x19","0x1A","0x20","0x21","0x30","0x31","0x32","0x38","0x39","0x40","0x41","0x46","0x47","0x48","0x61","0x63","0x64","0x65","0x70","0x71"}, Values{"Unknown","VGA 15-pin","TV Composite","TV S-Video","TV HDTV Component","TV SCART","TV Composite SCART on EIAJ-4120","TV HDTV EIAJ-4120","PcPod HDTV-YPrPb","PcPod S-video","PcPod Composite","DVI-i TV S-Video","DVI-i TV Composite","DVI-i","DVI-d","ADC","Lfh DVI-i 1","Lfh DVI-i 2","SPWG","OEM","DP external","DP internal","DP mini, external","HDMI type A","HDMI type C mini","LFH DP 1","LFH DP 2","Virtual WFD","USB-C"}, Description("Type of physical connector on a GPU side. Possible values are: -1 - Unknown, 0 - VGA 15-pin, 0x10 - TV Composite, 0x11 - TV S-Video, 0x13 - TV HDTV Component, 0x14 - TV SCART, 0x16 - TV Composite SCART on EIAJ-4120, 0x17 - TV HDTV EIAJ-4120, 0x18 - PcPod HDTV-YPrPb, 0x19 - PcPod S-video, 0x1A - PcPod Composite, 0x20 - DVI-i TV S-Video, 0x21 - DVI-i TV Composite, 0x30 - DVI-i, 0x31 - DVI-d, 0x32 - ADC, 0x38 - Lfh DVI-i 1, 0x39 - Lfh DVI-i 2, 0x40 - SPWG, 0x41 - OEM, 0x46 - DP external, 0x47 - DP internal, 0x48 - DP mini, external, 0x61 - HDMI type A, 0x63 - HDMI type C mini, 0x64 - LFH DP 1, 0x65 - LFH DP 2, 0x70 - Virtual WFD, 0x71 - USB-C")]
    //! Type of physical connector on a GPU side. Possible values are: -1 - Unknown, 0 - VGA 15-pin, 0x10 - TV Composite, 0x11 - TV S-Video, 0x13 - TV HDTV Component, 0x14 - TV SCART, 0x16 - TV Composite SCART on EIAJ-4120, 0x17 - TV HDTV EIAJ-4120, 0x18 - PcPod HDTV-YPrPb, 0x19 - PcPod S-video, 0x1A - PcPod Composite, 0x20 - DVI-i TV S-Video, 0x21 - DVI-i TV Composite, 0x30 - DVI-i, 0x31 - DVI-d, 0x32 - ADC, 0x38 - Lfh DVI-i 1, 0x39 - Lfh DVI-i 2, 0x40 - SPWG, 0x41 - OEM, 0x46 - DP external, 0x47 - DP internal, 0x48 - DP mini, external, 0x61 - HDMI type A, 0x63 - HDMI type C mini, 0x64 - LFH DP 1, 0x65 - LFH DP 2, 0x70 - Virtual WFD, 0x71 - USB-C
    sint32                  gpuConnectorType;

    [Read: ToInstance ToSubClass,  ValueMap{"-1","0","0x10","0x11","0x13","0x14","0x16","0x17","0x18","0x19","0x1A","0x20","0x21","0x30","0x31","0x32","0x38","0x39","0x40","0x41","0x46","0x47","0x48","0x61","0x63","0x64","0x65","0x70","0x71"}, Values{"Unknown","VGA 15-pin","TV Composite","TV S-Video","TV HDTV Component","TV SCART","TV Composite SCART on EIAJ-4120","TV HDTV EIAJ-4120","PcPod HDTV-YPrPb","PcPod S-video","PcPod Composite","DVI-i TV S-Video","DVI-i TV Composite","DVI-i","DVI-d","ADC","Lfh DVI-i 1","Lfh DVI-i 2","SPWG","OEM","DP external","DP internal","DP mini, external","HDMI type A","HDMI type C mini","LFH DP 1","LFH DP 2","Virtual WFD","USB-C"}, Description("Type of physical connector on a display side. Possible values are: -1 - Unknown, 0 - VGA 15-pin, 0x10 - TV Composite, 0x11 - TV S-Video, 0x13 - TV HDTV Component, 0x14 - TV SCART, 0x16 - TV Composite SCART on EIAJ-4120, 0x17 - TV HDTV EIAJ-4120, 0x18 - PcPod HDTV-YPrPb, 0x19 - PcPod S-video, 0x1A - PcPod Composite, 0x20 - DVI-i TV S-Video, 0x21 - DVI-i TV Composite, 0x30 - DVI-i, 0x31 - DVI-d, 0x32 - ADC, 0x38 - Lfh DVI-i 1, 0x39 - Lfh DVI-i 2, 0x40 - SPWG, 0x41 - OEM, 0x46 - DP external, 0x47 - DP internal, 0x48 - DP mini, external, 0x61 - HDMI type A, 0x63 - HDMI type C mini, 0x64 - LFH DP 1, 0x65 - LFH DP 2, 0x70 - Virtual WFD, 0x71 - USB-C")]
    //! Type of physical connector on a display side. Possible values are: -1 - Unknown, 0 - VGA 15-pin, 0x10 - TV Composite, 0x11 - TV S-Video, 0x13 - TV HDTV Component, 0x14 - TV SCART, 0x16 - TV Composite SCART on EIAJ-4120, 0x17 - TV HDTV EIAJ-4120, 0x18 - PcPod HDTV-YPrPb, 0x19 - PcPod S-video, 0x1A - PcPod Composite, 0x20 - DVI-i TV S-Video, 0x21 - DVI-i TV Composite, 0x30 - DVI-i, 0x31 - DVI-d, 0x32 - ADC, 0x38 - Lfh DVI-i 1, 0x39 - Lfh DVI-i 2, 0x40 - SPWG, 0x41 - OEM, 0x46 - DP external, 0x47 - DP internal, 0x48 - DP mini, external, 0x61 - HDMI type A, 0x63 - HDMI type C mini, 0x64 - LFH DP 1, 0x65 - LFH DP 2, 0x70 - Virtual WFD, 0x71 - USB-C
    sint32                  displayConnectorType;

    [Read: ToInstance ToSubClass,  Description("True if display is active")]
    //! True if display is active
    boolean                 isActive;

    [Read: ToInstance ToSubClass,  ValueMap{"-1","0","1","2"}, Values{"N/A","Default","Enable","Disable"}, Description("dithering state. Possible values are: -1 - N/A, 0 - Default, 1 - Enable, 2 - Disable")]
    //! dithering state. Possible values are: -1 - N/A, 0 - Default, 1 - Enable, 2 - Disable
    sint32                  ditherState;

    [Read: ToInstance ToSubClass,  ValueMap{"-1","0","1","2"}, Values{"N/A","6 bit","8 bit","10 bit"}, Description("dithering to specified number of bits per channel. Possible values are: -1 - N/A, 0 - 6 bit, 1 - 8 bit, 2 - 10 bit")]
    //! dithering to specified number of bits per channel. Possible values are: -1 - N/A, 0 - 6 bit, 1 - 8 bit, 2 - 10 bit
    sint32                  ditherBits;

    [Read: ToInstance ToSubClass,  ValueMap{"-1","0","1","2","3","4"}, Values{"N/A","SpatialDynamic","SpatialStatic","SpatialDynamic2x2","SpatialStatic2x2","Temporal"}, Description("dithering mode. Possible values are: -1 - N/A, 0 - SpatialDynamic, 1 - SpatialStatic, 2 - SpatialDynamic2x2, 3 - SpatialStatic2x2, 4 - Temporal")]
    //! dithering mode. Possible values are: -1 - N/A, 0 - SpatialDynamic, 1 - SpatialStatic, 2 - SpatialDynamic2x2, 3 - SpatialStatic2x2, 4 - Temporal
    sint32                  ditherMode;

    [Read: ToInstance ToSubClass,  ArrayType("Ordered"), Description("Array of references to the Display modes")]
    //! Array of references to the Display modes
    DisplayMode ref         displayModes[];

    [Implemented, Description("Restore the display mode to native")]
    //! Restore the display mode to native
    boolean                 restoreNativeDisplayMode();

    [Implemented, Description("save EDID into specified file (in text and binary format). File path with extension '.bin' is recommended.")]
    //! save EDID into specified file (in text and binary format). File path with extension '.bin' is recommended.
    boolean                 saveEDID
    (
        [in]string filePath                         //!< Path to the file with EDID data. File can be a binary or a text file, file path with extension '.bin' is recommended.
    );

    [Implemented, Description("Override EDID with specified data. File can be text or a binary file. File path with extension '.bin' is recommended.")]
    //! Override EDID with specified data. File can be text or a binary file. File path with extension '.bin' is recommended.
    boolean                 setEDID
    (
        [in]string filePath                         //!< Path to the file with EDID data. This parameter must be empty string "" for removing the forced EDID.
    );

    [Implemented, Description("Change scaling mode of this display")]
    //! Change scaling mode of this display
    boolean                 setScaling
    (
        [in, ValueMap{"0","1","2","3","5","6","7"},
        Values{"Default","Closest","Native","ScanoutToNative","AspectScanoutToNative","AspectScanoutToClosest","ScanoutToClosest"}]
        uint32 scaling                              //!< scaling mode to be set
    );

    [Implemented, Description("Rotate display")]
    //! Rotate display
    boolean                 setRotation
    (
        [in, ValueMap{"0","1","2","3"}, Values{"No rotation","rotate 90 degrees","rotate 180 degrees","rotate 270 degrees"}]
        uint32 rotation                             //!< rotation to be set
    );

    [Implemented, Description("Get display's current timing into a human-readable string")]
    //! Get display's current timing into a human-readable string
    string                  getCurrentTiming();

    [Implemented, Description("Save display Gamma Ramp into specified file (binary format). Using file path with '.gr' extension is recommended.")]
    //! Save display Gamma Ramp into specified file (binary format). Using file path with '.gr' extension is recommended.
    boolean                 saveGammaRamp
    (
        [in]string filePath                         //!< Path to the file with Gamma Ramp. File will be in binary format, specifying '.gr' extension explicitly is recommended.
    );

    [Implemented, Description("Override display Gamma Ramp data from specified file (binary format). Using file path with '.gr' extension is recommended.")]
    //! Override display Gamma Ramp data from specified file (binary format). Using file path with '.gr' extension is recommended.
    boolean                 setGammaRamp
    (
        [in]string filePath                         //!< Path to the file with Gamma Ramp. Using file path with '.gr' extension is recommended.
    );

    [Implemented, Description("Calculate and set Gamma Ramp from basic color controls")]
    //! Calculate and set Gamma Ramp from basic color controls
    boolean                 setGammaRampBasic
    (
        [in]real32 brightness,                      //!< brightness: -0.2 .. +0.2 default: 0.0
        [in]real32 contrast,                        //!< contrast: -0.2 .. +0.2 default: 0.0
        [in]real32 gamma                            //!< gamma: 0.3 .. 2.8  default: 1.0
    );

    [Implemented, Description("Save Color Space Conversion data into specified file (binary format). Using file path with '.csc' extension is recommended.")]
    //! Save Color Space Conversion data into specified file (binary format). Using file path with '.csc' extension is recommended.
    boolean                 saveCSC
    (
        [in]string filePath                         //!< Path to the file with CSC data. File will be in binary format, specifying '.csc' extension explicitly is recommended.
    );

    [Implemented, Description("Override Color Space Conversion data from specified file (binary format). Using file path with '.csc' extension is recommended.")]
    //! Override Color Space Conversion data from specified file (binary format). Using file path with '.csc' extension is recommended.
    boolean                 setCSC
    (
        [in]string filePath                         //!< Path to the file with CSC data. Using file path with '.csc' extension is recommended.
    );

    [Implemented, Description("Change display mode of a display grid, which contains this display, by specifying a display mode properties")]
    //! Change display mode of a display grid, which contains this display, by specifying a display mode properties
    boolean                 setDisplayMode
    (
        [in]uint32  width,                          //!< Width of the display grid (in pixels)
        [in]uint32  height,                         //!< Height of the display grid (in pixels)
        [in]real32  refreshRate,                    //!< Refresh rate of the display grid (in Hz)
        [in]uint32  depth                           //!< Color depth of the display grid (in bits per pixel)
    );

    [Implemented, Description("Change display mode of a display grid, which contains this display, by specifying a display mode ID")]
    //! Change display mode of a display grid, which contains this display, by specifying a display mode ID
    boolean                 setDisplayModeById
    (
        [in]uint32  id                              //!< DisplayMode ID
    );

    [Implemented, Description("Change display mode of a display grid, which contains this display, by specifying a reference to a display mode")]
    //! Change display mode of a display grid, which contains this display, by specifying a reference to a display mode
    boolean                 setDisplayModeByRef
    (
        [in]DisplayMode ref mode                    //!< A reference to the display mode to be applied
    );

    [Implemented, Description("Set dithering parameters")]
    //! Set dithering parameters
    boolean                 setDither
    (
        [in, ValueMap{"0","1","2"}, Values{"Default","Enable","Disable"}]
        uint32 state,                               //!< New dithering state. Required
        
        [in, ValueMap{"0","1","2"}, Values{"6 bit","8 bit","10 bit"}]
        uint32 bits,                                //!< Dither to specified number of bits per channel. Optional
        
        [in, ValueMap{"0","1","2","3","4"}, Values{"SpatialDynamic","SpatialStatic","SpatialDynamic2x2","SpatialStatic2x2","Temporal"}]
        uint32 mode                                 //!< Dithering mode. Optional
    );

    [Implemented, Description("Formats basic information about this display into a human-readable string")]
    //! Formats basic information about this display into a human-readable string
    string                  info();
};


[Version("1.0.0"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Description("Represents display mode")]
//! Represents display mode
class DisplayMode
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Description("Object version")]
    //! Object version
    Version                 verClass;

    [Read: ToInstance ToSubClass,  Key, Description("Unique identification of the display mode")]
    //! Unique identification of the display mode
    uint32                  id;

    [Read: ToInstance ToSubClass,  Write, Description("Display mode width")]
    //! Display mode width
    sint32                  width;

    [Read: ToInstance ToSubClass,  Write, Description("Display mode height")]
    //! Display mode height
    sint32                  height;

    [Read: ToInstance ToSubClass,  Write, Description("Display mode refresh rate")]
    //! Display mode refresh rate
    real32                  refreshRate;

    [Read: ToInstance ToSubClass,  Write, Description("Display mode color depth in bits per pixel (bpp)")]
    //! Display mode color depth in bits per pixel (bpp)
    sint32                  colorDepth;

    [Implemented, Description("Formats basic information about this display mode into a human-readable string")]
    //! Formats basic information about this display mode into a human-readable string
    string                  info();
};


[Version("1.6.0"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Description("Represents a cooler (fan, liquid system etc.)")]
//! Represents a cooler (fan, liquid system etc.)
class Cooler
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Description("Cooler class version")]
    //! Cooler class version
    Version                 verClass;

    [Read: ToInstance ToSubClass,  Key, Description("Unique ID")]
    //! Unique ID
    uint32                  id;

    [Read: ToInstance ToSubClass,  Deprecated, Description("Unique ID - deprecated, please use 'id'")]
    //! Unique ID - deprecated, please use 'id'
    uint32                  handle;

    [Read: ToInstance ToSubClass,  ValueMap{"0","1","2","3"}, Values{"unknown","fan","water","liquid"}, Description("The type of cooler present on the card (fan, water or liquid). Possible values are: 0 - unknown, 1 - fan, 2 - water, 3 - liquid")]
    //! The type of cooler present on the card (fan, water or liquid). Possible values are: 0 - unknown, 1 - fan, 2 - water, 3 - liquid
    uint32                  coolerType;

    [Read: ToInstance ToSubClass,  Description("Current percentage speed of a cooler fan (or liquid flow rate %)")]
    //! Current percentage speed of a cooler fan (or liquid flow rate %)
    uint32                  percentCoolerRate;

    [Read: ToInstance ToSubClass,  Description("Minimum percentage speed of a cooler fan (or liquid flow rate %)")]
    //! Minimum percentage speed of a cooler fan (or liquid flow rate %)
    uint32                  percentMinCoolerRate;

    [Read: ToInstance ToSubClass,  Description("Maximum percentage speed of a cooler fan (or liquid flow rate %)")]
    //! Maximum percentage speed of a cooler fan (or liquid flow rate %)
    uint32                  percentMaxCoolerRate;

    [Read: ToInstance ToSubClass,  Description("The tachometer reading for fan speed in rpm")]
    //! The tachometer reading for fan speed in rpm
    uint32                  fanSpeed;

    [Read: ToInstance ToSubClass,  Description("Maximal fan speed in rpm")]
    //! Maximal fan speed in rpm
    uint32                  maxSpeed;

    [Read: ToInstance ToSubClass,  Description("Minimal fan speed in rpm")]
    //! Minimal fan speed in rpm
    uint32                  minSpeed;

    [Read: ToInstance ToSubClass,  ValueMap{"0","1","2","3"}, Values{"unknown","normal","warning","critical"}, Description("Cooler fan speed event level. Possible values are: 0 - unknown, 1 - normal, 2 - warning, 3 - critical")]
    //! Cooler fan speed event level. Possible values are: 0 - unknown, 1 - normal, 2 - warning, 3 - critical
    uint32                  coolerLevel;

    [Implemented, Description("Formats basic information about the Cooler object in a system into a human-readable string")]
    //! Formats basic information about the Cooler object in a system into a human-readable string
    string                  info();

};

[Version("1.4.0"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Description("Represents a thermal probe")]
//! Represents a thermal probe
class ThermalProbe
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Description("Thermal probe class version")]
    //! Thermal probe class version
    Version                 verClass;

    [Read: ToInstance ToSubClass,  Key, Description("Unique ID")]
    //! Unique ID
    uint32                  id;

    [Read: ToInstance ToSubClass,  Deprecated, Description("Unique ID - deprecated, please use 'id'")]
    //! Unique ID - deprecated, please use 'id'
    uint32                  handle;

    [Read: ToInstance ToSubClass,  ValueMap{"-1","0","1","2","3","4","5","6","7","8","9","10","11"}, Values{"unknown","none","gpuInternal","adm1032","max6649","max1617","lm99","lm89","lm64","adt7473","sbmax6649","vbiosEvt","os"}, Description("The type of thermal probe controller type. Possible values are: -1 - unknown, 0 - none, 1 - gpuInternal, 2 - adm1032, 3 - max6649, 4 - max1617, 5 - lm99, 6 - lm89, 7 - lm64, 8 - adt7473, 9 - sbmax6649, 10 - vbiosEvt, 11 - os")]
    //! The type of thermal probe controller type. Possible values are: -1 - unknown, 0 - none, 1 - gpuInternal, 2 - adm1032, 3 - max6649, 4 - max1617, 5 - lm99, 6 - lm89, 7 - lm64, 8 - adt7473, 9 - sbmax6649, 10 - vbiosEvt, 11 - os
    uint32                  type;

    [Read: ToInstance ToSubClass,  Description("The current temperature value of the thermal sensor in degrees Celsius")]
    //! The current temperature value of the thermal sensor in degrees Celsius
    sint32                  temperature;

    [Read: ToInstance ToSubClass,  Description("Default minimum temperature value of the thermal sensor in degrees Celsius")]
    //! Default minimum temperature value of the thermal sensor in degrees Celsius
    sint32                  defaultMinTemperature;

    [Read: ToInstance ToSubClass,  Description("Default maximum temperature value of the thermal sensor in degrees Celsius")]
    //! Default maximum temperature value of the thermal sensor in degrees Celsius
    sint32                  defaultMaxTemperature;

    [Read: ToInstance ToSubClass,  ValueMap{"0","1","2","3"}, Values{"unknown","normal","warning","critical"}, Description("current temperature event level. Possible values are: 0 - unknown, 1 - normal, 2 - warning, 3 - critical")]
    //! current temperature event level. Possible values are: 0 - unknown, 1 - normal, 2 - warning, 3 - critical
    uint32                  thermalLevel;

    [Implemented, Description("Formats basic information about the Thermal object in a system into a human-readable string")]
    //! Formats basic information about the Thermal object in a system into a human-readable string
    string                  info();
};

[Version("1.0.0"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Description("Represents the GPU Error Correction Code. This feature is not supported if there are multiple GPU topologies enabled.")]
//! Represents the GPU Error Correction Code. This feature is not supported if there are multiple GPU topologies enabled.
class Ecc
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Description("Ecc class version")]
    //! Ecc class version
    Version                 verClass;

    [Read: ToInstance ToSubClass,  Key, Description("Unique identification of the NVIDIA GPU")]
    //! Unique identification of the NVIDIA GPU
    uint32                  id;

    [Read: ToInstance ToSubClass,  Description("Is ECC memory feature supported?")]
    //! Is ECC memory feature supported?
    boolean                 isSupported;

    [Read: ToInstance ToSubClass,  Description("Is ECC memory setting enabled?")]
    //! Is ECC memory setting enabled?
    boolean                 isEnabled;

    [Read: ToInstance ToSubClass,  Description("Is current ECC configuration stored in non-volatile memory?")]
    //! Is current ECC configuration stored in non-volatile memory?
    boolean                 isWritable;

    [Read: ToInstance ToSubClass,  Description("Is factory default ECC configuration enabled?")]
    //! Is factory default ECC configuration enabled?
    boolean                 isEnabledByDefault;

    [Read: ToInstance ToSubClass,  ValueMap{"0","1","2"}, Values{"notSupported","deferred","immediate"}, Description("Possible ECC memory configuration options. Possible values are: 0 - notSupported, 1 - deferred, 2 - immediate")]
    //! Possible ECC memory configuration options. Possible values are: 0 - notSupported, 1 - deferred, 2 - immediate
    uint32                  option;

    [Read: ToInstance ToSubClass,  Description("Number of single bit ECC errors detected since last boot")]
    //! Number of single bit ECC errors detected since last boot
    uint64                  currentSingleBitErrors;

    [Read: ToInstance ToSubClass,  Description("Number of double bit ECC errors detected since last boot")]
    //! Number of double bit ECC errors detected since last boot
    uint64                  currentDoubleBitErrors;

    [Read: ToInstance ToSubClass,  Description("Number of single bit ECC errors detected since last counter reset")]
    //! Number of single bit ECC errors detected since last counter reset
    uint64                  aggregateSingleBitErrors;

    [Read: ToInstance ToSubClass,  Description("Number of double bit ECC errors detected since last counter reset")]
    //! Number of double bit ECC errors detected since last counter reset
    uint64                  aggregateDoubleBitErrors;

    [Implemented, Description("Resets memory error counters. This method will fail if option=0 (notSupported)")]
    //! Resets memory error counters. This method will fail if option=0 (notSupported)
    boolean                 resetCounters
    (
       [in]boolean     bResetCurrent,              //!< Reset the current ECC error counters
       [in]boolean     bResetAggregate             //!< Reset the aggregate ECC error counters
    );

    [Implemented, Description("Updates the ECC memory configuration settings. This method will fail if option=0 (notSupported)")]
    //! Updates the ECC memory configuration settings. This method will fail if option=0 (notSupported)
    boolean                 setConfiguration
    (
       [in]boolean     bEnable,                     //!< Enable new ECC configuration setting
       [in]boolean     bEnableImmediately           //!< New configuration setting should take effect immediately. This flag is valid only if option=2 (immediate).
    );

    [Implemented, Description("Formats basic information about ECC objects into a human-readable string")]
    //! Formats basic information about ECC objects into a human-readable string
    string                  info();
};

[Version("1.0.0"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Description("Represents per process GPU encoder utilization values")]
//! Represents per process GPU encoder utilization values
class ProcessUtilization
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Description("ProcessUtilization class version.")]
    //! ProcessUtilization class version.
    Version                 verClass;

    [Read: ToInstance ToSubClass,  Key, Description("Unique ID")]
    //! Unique ID
    uint32                  id;

    [Read: ToInstance ToSubClass,  Description("Total no of process.")]
    //! Total no of process.
    uint32                  processCount;

    [Read: ToInstance ToSubClass,  Description("Process Id")]
    //! Process Id
    uint32                  pid[];

    [Read: ToInstance ToSubClass,  Description("CPU Timestamp.")]
    //! CPU Timestamp.
    string                  timeStamp[];

    [Read: ToInstance ToSubClass,  Description("SM Utilization value.")]
    //! SM Utilization value.
    uint32                  smUtilization[];

    [Read: ToInstance ToSubClass,  Description("Mem Utilization value.")]
    //! Mem Utilization value.
    uint32                  memUtilization[];

    [Read: ToInstance ToSubClass,  Description("Enc Utilization value.")]
    //! Enc Utilization value.
    uint32                  encUtilization[];

    [Read: ToInstance ToSubClass,  Description("Dec Utilization value.")]
    //! Dec Utilization value.
    uint32                  decUtilization[];

    [Implemented, Description("Formats basic information about per process utilization into a human-readable string")]
    //! Formats basic information about per process utilization into a human-readable string
    string                  info();
};

[Version("1.0.0"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Description("Represents the Sync Topology")]
//! Represents the Sync Topology
class SyncTopology // contains embedded class NamedObject
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Description("Version of named object")]
    //! Version of named object
    Version                 ver;

    [Read: ToInstance ToSubClass,  Key, Description("Unique id of named object, used as a key")]
    //! Unique id of named object, used as a key
    uint32                  id;

    [Read: ToInstance ToSubClass,  Description("Name of an object")]
    //! Name of an object
    string                  name;

    [Read: ToInstance ToSubClass,  Key, Description("Unique name of an object")]
    //! Unique name of an object
    string                  uname;

    [Read: ToInstance ToSubClass,  Description("Ordinal number of named object among objects with same names")]
    //! Ordinal number of named object among objects with same names
    sint32                  ordinal;

    [Read: ToInstance ToSubClass,  Description("Total number of named objects with same name")]
    //! Total number of named objects with same name
    sint32                  count;
//! \publicsection
    
    [Read: ToInstance ToSubClass,  ValueMap{"0","1","2"}, Values{"UnSynced","Slave","Master"}, Description("Synchronization state of a display in the Sync topology. Possible values are: 0 - UnSynced, 1 - Slave, 2 - Master")]
    //! Synchronization state of a display in the Sync topology. Possible values are: 0 - UnSynced, 1 - Slave, 2 - Master
    uint32                  displaySyncState;

    [Read: ToInstance ToSubClass,  Description("Can the current display be set as a sync master?")]
    //! Can the current display be set as a sync master?
    boolean                 isDisplayMasterable;

    [Implemented, Description("Returns true if GPU is synchronized (in phase) with the Sync device")]
    //! Returns true if GPU is synchronized (in phase) with the Sync device
    boolean                 isGPUSynced();

    [Implemented, Description("Formats basic information about SyncTopology objects into a human-readable string")]
    //! Formats basic information about SyncTopology objects into a human-readable string
    string                  info();
};

[Version("1.0.0"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Description("Represents encoder sessions info")]
//! Represents encoder sessions info
class EncoderSessions
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Description("EncoderSessions class version.")]
    //! EncoderSessions class version.
    Version                 verClass;

    [Read: ToInstance ToSubClass,  Key, Description("Unique ID")]
    //! Unique ID
    uint32                  id;

    [Read: ToInstance ToSubClass,  Description("Total no of sessions.")]
    //! Total no of sessions.
    uint32                  sessionsCount;

    [Read: ToInstance ToSubClass,  Description("Session Id.")]
    //! Session Id.
    uint32                  sessionId[];

    [Read: ToInstance ToSubClass,  Description("Owning process ID.")]
    //! Owning process ID.
    uint32                  processId[];

    [Read: ToInstance ToSubClass,  Description("Owning vGPU instance ID (only valid on vGPU hosts, otherwise zero).")]
    //! Owning vGPU instance ID (only valid on vGPU hosts, otherwise zero).
    uint32                  vgpuInstance[];

    [Read: ToInstance ToSubClass,  ValueMap{"0","1","2"}, Values{"Unknown","H264","HEVC"}, Description("Video encoder type.. Possible values are: 0 - Unknown, 1 - H264, 2 - HEVC")]
    //! Video encoder type.. Possible values are: 0 - Unknown, 1 - H264, 2 - HEVC
    uint32                  codecType[];

    [Read: ToInstance ToSubClass,  Description("Current encode horizontal resolution.")]
    //! Current encode horizontal resolution.
    uint32                  hResolution[];

    [Read: ToInstance ToSubClass,  Description("Current encode vertical resolution.")]
    //! Current encode vertical resolution.
    uint32                  vResolution[];

    [Read: ToInstance ToSubClass,  Description("Moving average encode frames per second.")]
    //! Moving average encode frames per second.
    uint32                  averageEncodeFps[];

    [Read: ToInstance ToSubClass,  Description("Moving average encode latency in milliseconds.")]
    //! Moving average encode latency in milliseconds.
    uint32                  averageEncodeLatency[];

    [Implemented, Description("Formats basic information about per process utilization into a human-readable string")]
    //! Formats basic information about per process utilization into a human-readable string
    string                  info();
};

[Version("1.0.0"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Description("Represents the Sync Delay (Sync Skew or Startup Delay)")]
//! Represents the Sync Delay (Sync Skew or Startup Delay)
class SyncDelay
{
//! \publicsection
    
    [Read: ToInstance ToSubClass,  Description("SyncDelay class version")]
    //! SyncDelay class version
    Version                 verClass;

    [Read: ToInstance ToSubClass,  Key, Description("Unique identification of SyncDelay objects")]
    //! Unique identification of SyncDelay objects
    uint32                  id;

    [Read: ToInstance ToSubClass,  ValueMap{"0","1","2"}, Values{"unknown","SyncSkew","StartupDelay"}, Description("Type of Sync Delay.. Possible values are: 0 - unknown, 1 - SyncSkew, 2 - StartupDelay")]
    //! Type of Sync Delay.. Possible values are: 0 - unknown, 1 - SyncSkew, 2 - StartupDelay
    uint32                  delayType;

    [Read: ToInstance ToSubClass,  Description("Minimum number of pixels required at current display mode to induce sync delay.")]
    //! Minimum number of pixels required at current display mode to induce sync delay.
    uint32                  minPixels;

    [Read: ToInstance ToSubClass,  Description("Maximum number of lines supported at current display mode to induce sync delay.")]
    //! Maximum number of lines supported at current display mode to induce sync delay.
    uint32                  maxLines;

    [Read: ToInstance ToSubClass,  Description("Sync delay to be induced in unit pixels.")]
    //! Sync delay to be induced in unit pixels.
    uint32                  numOfPixels;

    [Read: ToInstance ToSubClass,  Description("Sync delay to be induced in unit horizontal lines.")]
    //! Sync delay to be induced in unit horizontal lines.
    uint32                  numOfLines;

    [Implemented, Description("Formats basic information about SyncTopology objects into a human-readable string")]
    //! Formats basic information about SyncTopology objects into a human-readable string
    string                  info();
};

[Version("1.0.1"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Description("Represents Sync-capable devices")]
//! Represents Sync-capable devices
class Sync // contains embedded class NamedObject
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Description("Version of named object")]
    //! Version of named object
    Version                 ver;

    [Read: ToInstance ToSubClass,  Key, Description("Unique id of named object, used as a key")]
    //! Unique id of named object, used as a key
    uint32                  id;

    [Read: ToInstance ToSubClass,  Description("Name of an object")]
    //! Name of an object
    string                  name;

    [Read: ToInstance ToSubClass,  Key, Description("Unique name of an object")]
    //! Unique name of an object
    string                  uname;

    [Read: ToInstance ToSubClass,  Description("Ordinal number of named object among objects with same names")]
    //! Ordinal number of named object among objects with same names
    sint32                  ordinal;

    [Read: ToInstance ToSubClass,  Description("Total number of named objects with same name")]
    //! Total number of named objects with same name
    sint32                  count;
//! \publicsection
    
    [Read: ToInstance ToSubClass,  Description("Version of the Sync board firmware")]
    //! Version of the Sync board firmware
    Version                 verSyncFirmware;

    [Read: ToInstance ToSubClass,  Description("NVAPI ID of the Sync device")]
    //! NVAPI ID of the Sync device
    uint32                  nvapiId;

    [Read: ToInstance ToSubClass,  ArrayType("Indexed"), Description("Array of references to SyncTopology objects")]
    //! Array of references to SyncTopology objects
    SyncTopology ref        syncDisplays[];

    [Read: ToInstance ToSubClass,  Description("Is sync enabled on this device?")]
    //! Is sync enabled on this device?
    boolean                 isSynced;

    [Read: ToInstance ToSubClass,  Description("Is house sync present?")]
    //! Is house sync present?
    boolean                 isHouseSync;

    [Read: ToInstance ToSubClass,  Description("Is stereo enabled?")]
    //! Is stereo enabled?
    boolean                 isStereoSynced;

    [Read: ToInstance ToSubClass,  ValueMap{"0","1","2"}, Values{"Rising Edge","Falling Edge","Both Edges"}, Description("Polarity of a synchronization signal. Possible values are: 0 - Rising Edge, 1 - Falling Edge, 2 - Both Edges")]
    //! Polarity of a synchronization signal. Possible values are: 0 - Rising Edge, 1 - Falling Edge, 2 - Both Edges
    uint32                  polarity;

    [Read: ToInstance ToSubClass,  ValueMap{"0","1","2","3","4"}, Values{"none","TTL","NTSC-PAL-SECAM","HDTV","composite"}, Description("Video mode. Possible values are: 0 - none, 1 - TTL, 2 - NTSC-PAL-SECAM, 3 - HDTV, 4 - composite")]
    //! Video mode. Possible values are: 0 - none, 1 - TTL, 2 - NTSC-PAL-SECAM, 3 - HDTV, 4 - composite
    uint32                  vmode;

    [Read: ToInstance ToSubClass,  Description("Number of pulses to wait between framelock signal generation.")]
    //! Number of pulses to wait between framelock signal generation.
    uint32                  interval;

    [Read: ToInstance ToSubClass,  ValueMap{"0","1"}, Values{"VSync","HouseSync"}, Description("Source of a synchronization signal. Possible values are: 0 - VSync, 1 - HouseSync")]
    //! Source of a synchronization signal. Possible values are: 0 - VSync, 1 - HouseSync
    uint32                  source;

    [Read: ToInstance ToSubClass,  ValueMap{"0","1"}, Values{"Disabled","Enabled"}, Description("Interlace mode for a Sync device. Possible values are: 0 - Disabled, 1 - Enabled")]
    //! Interlace mode for a Sync device. Possible values are: 0 - Disabled, 1 - Enabled
    uint32                  interlaceMode;

    [Read: ToInstance ToSubClass,  Description("Sync signal refresh rate in Hz. If the house sync is present and selected source is HouseSync, then it will be the house sync signal refresh rate. Otherwise, it will be an internal display signal refresh rate")]
    //! Sync signal refresh rate in Hz. If the house sync is present and selected source is HouseSync, then it will be the house sync signal refresh rate. Otherwise, it will be an internal display signal refresh rate
    real32                  syncSignalRate;

    [Read: ToInstance ToSubClass,  ValueMap{"0","1","2"}, Values{"output","input","unused"}, Description("RJ-45 signal status. Possible values are: 0 - output, 1 - input, 2 - unused")]
    //! RJ-45 signal status. Possible values are: 0 - output, 1 - input, 2 - unused
    uint32                  flStatus[];

    [Read: ToInstance ToSubClass,  Description("syncSkew object (The time delay between the frame sync signal and the GPUs signal). Available only in Client mode or if external Housesync signal is present.")]
    //! syncSkew object (The time delay between the frame sync signal and the GPUs signal). Available only in Client mode or if external Housesync signal is present.
    SyncDelay               syncSkew;

    [Read: ToInstance ToSubClass,  Description("startupDelay object (The amount of time the frame lock card should wait until generating sync pulse). Available only in Server mode.")]
    //! startupDelay object (The amount of time the frame lock card should wait until generating sync pulse). Available only in Server mode.
    SyncDelay               startupDelay;

    [Implemented, Description("Setup the synchronization between displays with given IDs")]
    //! Setup the synchronization between displays with given IDs
    boolean                 setSyncStateById
    (
        [in]uint32    syncDisplayIds[],         //!< Array of display IDs to synchronize(SyncTopology.id), separated by comma. Order is important. 
                                                //!< For Mosaic topologies, user can specify either a master display or all displays in a Mosaic topology. 
                                                //!< If user does not specify any displays, the method will choose the best topology to synchronize. 
                                                //!< To un-synchronize the displays, user will have to pass all the displays with displaySyncState as UnSynced.

        [in]uint32    syncState[]               //!< Possible values are: 0 - UnSynced, 1 - Slave, 2 - Master
    );

    [Implemented, Description("Setup the synchronization between displays with given Names")]
    //! Setup the synchronization between displays with given Names
    boolean                 setSyncStateByName
    (
        [in]string    syncDisplayNames,         //!< Display Names to synchronize. String of unique display names (SyncTopology.uname), separated by semicolon. Order is important.
                                                //!< For Mosaic topologies, user can specify either a master display or all displays in a Mosaic topology. 
                                                //!< If user does not specify any displays, the method will choose the best topology to synchronize. 
                                                //!< To un-synchronize the displays, user will have to pass all the displays with displaySyncState as UnSynced.

        [in]uint32    syncState[]               //!< Possible values are: 0 - UnSynced, 1 - Slave, 2 - Master
    );

    [Implemented, Description("Toggle the sync signal source between internal and external house sync")]
    //! Toggle the sync signal source between internal and external house sync
    boolean                 toggleSource();

    [Implemented, Description("Set synchronization signal polarity")]
    //! Set synchronization signal polarity
    boolean                 setPolarity
    (
        [in, ValueMap{"0","1","2"}, Values{"Rising Edge","Falling Edge","Both Edges"}]
        uint32              polarity            //!< Possible values are: 0 - rising edge, 1 - falling edge, 2 - both
    );

    [Implemented, Description("Set video mode type")]
    //! Set video mode type
    boolean                 setVmode
    (
        [in, ValueMap{"0","1","2","3","4"}, Values{"none","TTL","NTSC-PAL-SECAM","HDTV","composite"}]
        uint32              vmode               //!< Possible values are: 0 - none, 1 - TTL, 2 - NTSC/PAL/SECAM, 3 - HDTV, 4 - composite
    );

    [Implemented, Description("Set number of pulses to wait between framelock signal generation.")]
    //! Set number of pulses to wait between framelock signal generation.
    boolean                 setInterval
    (
        [in]uint32          interval            //!< The number of pulses to skip for signal generation. 0 uses source, 1 gives half the frequency, and so on.
    );

    [Implemented, Description("Set interlace mode for a Sync device")]
    //! Set interlace mode for a Sync device
    boolean                 setInterlaceMode 
    (
        [in, ValueMap{"0","1"}, Values{"Disabled","Enabled"}]
        uint32              interlaceMode       //!< Interlace mode for a Sync device. Possible values are: 0 - Disabled, 1- Enabled.
    );

    [Implemented, Description("Set the amount of delay between the frame sync signal and the GPUs signal. Sync device must be in Client mode or if external Housesync signal present.")]
    //! Set the amount of delay between the frame sync signal and the GPUs signal. Sync device must be in Client mode or if external Housesync signal present.
    boolean                 setSyncSkew 
    (
        [in]uint32          numOfPixels,        //!< Number of pixels to induce sync skew
        [in]uint32          numOfLines          //!< Number of horizontal lines to induce sync skew
    );

    [Implemented, Description("Set the amount of delay the frame lock card should wait, until generating sync pulse. Sync device must be in Server mode.")]
    //! Set the amount of delay the frame lock card should wait, until generating sync pulse. Sync device must be in Server mode.
    boolean                 setStartupDelay 
    (
        [in]uint32          numOfPixels,        //!< Number of pixels to induce startup delay
        [in]uint32          numOfLines          //!< Number of horizontal lines to induce startup delay
    );

    [Implemented, Description("Formats basic information about Sync objects into a human-readable string")]
    //! Formats basic information about Sync objects into a human-readable string
    string                  info();
};

[Version("1.1.1"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Singleton, Description("Represents root object for performing Profile related task")]
//! Represents root object for performing Profile related task
class ProfileManager
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Description("Profile Manager class version")]
    //! Profile Manager class version
    Version                 verClass;

    [Read: ToInstance ToSubClass,  Description("Current Global 3D profile (D3D, OGL)")]
    //! Current Global 3D profile (D3D, OGL)
    string                  currentProfile3D;

    [Read: ToInstance ToSubClass,  Description("Default Global 3D profile (D3D, OGL)")]
    //! Default Global 3D profile (D3D, OGL)
    string                  defaultProfile3D;

    [Read: ToInstance ToSubClass,  Description("Current Desktop Profile (nView)")]
    //! Current Desktop Profile (nView)
    string                  currentProfileDesktop;

    [Read: ToInstance ToSubClass,  Description("Default Desktop Profile (nView)")]
    //! Default Desktop Profile (nView)
    string                  defaultProfileDesktop;

    [Read: ToInstance ToSubClass,  Description("Current system profile")]
    //! Current system profile
    string                  currentSystemProfile;

    [Read: ToInstance ToSubClass,  Description("Default system profile")]
    //! Default system profile
    string                  defaultSystemProfile;

    [Implemented, Static, Description("Get name and id of all profiles for a given  profile type. The return value is a string in format profile id: profile name e.g.profile1 id: profile 1 name; profile2 id: profile 2 name;")]
    //! Get name and id of all profiles for a given  profile type. The return value is a string in format profile id: profile name e.g.profile1 id: profile 1 name; profile2 id: profile 2 name;
    string                  getAllProfiles
    (
        [in, ValueMap{"0","1","3","4","5"}, Values{"3D Application Profile", "3D Global Profile", "nView Profile", "Display Profile", "System Profile"}]
        uint32 type                          //!< Type of the profile
    );

    [Implemented, Static, Description("Restore all profiles to default")]
    //! Restore all profiles to default
    boolean                 restoreDefaults3D();

    [Implemented, Static, Description("Set current profile")]
    //! Set current profile
    boolean                 setCurrentProfile3D
    (
        [in]string name                             //!< Name of existing profile to set as current
    );

    [Implemented, Static, Description("Set mode of vertical synchronization in the current global profile")]
    //! Set mode of vertical synchronization in the current global profile
    boolean                 setVSync
    (
        [in, ValueMap{"0","1","2","3","4"}, Values{"Passive","Off","On","Adaptive","Adaptive half"}]
        uint32 vsyncMode                            //!< V-Sync mode to be applied to the current global profile
                                                    //!< values might be Application-Controlled (same as Passive) = 0, Off = 1, On = 2,
                                                    //!< Adaptive = 3 and Adaptive (half refresh rate) = 4
    );

    [Implemented, Static, Description("Load a selected profile into nView Desktop Manager")]
    //! Load a selected profile into nView Desktop Manager
    boolean                 loadDesktopProfile
    (
        [in]string name                             //!< Name of existing profile to be loaded into nView Desktop Manager
    );

    [Implemented, Static, Description("Lock a nView Desktop profile, once locked the setting in this profile will not be modified through nView Dekstop Manager")]
    //! Lock a nView Desktop profile, once locked the setting in this profile will not be modified through nView Dekstop Manager
    boolean                 lockDesktopProfile
    (
        [in]string name,                            //!< Name of the existing profile which needs to be locked
        [in]uint32 lock                             //!< Paramer to lock/unlock the profile. Pass 1 to indicate lock and pass 0 to unlock the profile
    );

    [Implemented, Static, Description("Save nView Desktop Manager settings to the profile")]
    //! Save nView Desktop Manager settings to the profile
    boolean                 saveDesktopProfile
    (
        [in]string name                             //!< Name of profile where the nView Desktop Manager settings will be saved
    );

    [Implemented, Static, Description("Delete the nView Desktop profile")]
    //! Delete the nView Desktop profile
    boolean                 deleteDesktopProfile
    (
        [in]string name                             //!< Name of the existing profile which will be deleted
    );

    [Implemented, Static, Description("Save system profile")]
    //! Save system profile
    boolean                 saveSystemProfile
    (
        [in]string name                             //!< Name of system profile to be saved
    );

    [Implemented, Static, Description("Apply system profile")]
    //! Apply system profile
    boolean                 applySystemProfile
    (
        [in]string name                             //!< Name of system profile to be applied
    );

    [Implemented, Static, Description("Save current display state in display profiles with given prefixes. One display profile per DisplayGrid. DisplayGrid might contain more than one physical display")]
    //! Save current display state in display profiles with given prefixes. One display profile per DisplayGrid. DisplayGrid might contain more than one physical display
    boolean                 saveDisplayProfiles
    (
        [in]string prefix                           //!< Common prefix - e.g. "my display". Ordinals will be added per every display profile (e.g. "my display 1 of 4", "my display 2 of 4" etc.)
    );

    [Implemented, Static, Description("Apply saved state in display profiles with given prefixes. One display profile per DisplayGrid")]
    //! Apply saved state in display profiles with given prefixes. One display profile per DisplayGrid
    boolean                 applyDisplayProfiles
    (
        [in]string prefix                           //!< Common prefix - e.g. "my display" Ordinals will be added per every display profile (e.g. "my display 1 of 4", "my display 2 of 4" etc.)
    );

    [Implemented, Static, Description("Create a new Profile")]
    //! Create a new Profile
    boolean                 createProfile
    (
        [in]string name,                            //!< Name of the profile
        [in]uint32 type,                            //!< Type of the profile. 0 - 3D application profile
        [in]string params                           //!< Additional parameters separated by semicolon. For a 3D Application Profile specify a minimal path to the binary which uses Direct3D or OpenGL, e.g. "Application1.exe;Application2.exe". Note that white space at the beginning or end of a path will be trimmed and empty entries discarded.
    );

    [Implemented, Static, Description("Restore/Delete the Profile. Predefined Profile gets restored and non-predefined Profile gets deleted.")]
    //! Restore/Delete the Profile. Predefined Profile gets restored and non-predefined Profile gets deleted.
    boolean                 restoreProfile
    (
        [in]string name                             //!< Profile name
    );

    [Implemented, Static, Description("Formats basic information about Profile Manager into a human-readable string")]
    //! Formats basic information about Profile Manager into a human-readable string
    string                  info();
};

[Version("1.1.1"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Description("Profile setting")]
//! Profile setting
class Setting
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Description("Version of a Setting class")]
    //! Version of a Setting class
    Version                 verClass;

    [Read: ToInstance ToSubClass,  Key, Description("Unique id of a setting, used as a key")]
    //! Unique id of a setting, used as a key
    uint32                  id;

    [Read: ToInstance ToSubClass,  ValueMap{"0","1","2","3","4"}, Values{"invalid","uint32","sint32","string","binary"}, Description("Type of value of the setting. Possible values are: 0 - invalid, 1 - uint32, 2 - sint32, 3 - string, 4 - binary")]
    //! Type of value of the setting. Possible values are: 0 - invalid, 1 - uint32, 2 - sint32, 3 - string, 4 - binary
    uint32                  type;

    [Read: ToInstance ToSubClass,  Description("Value for the Setting")]
    //! Value for the Setting
    uint8                   value[];

    [Implemented, Description("Get the string value for a setting")]
    //! Get the string value for a setting
    string                  getStringValue();

    [Implemented, Description("Formats basic information about the Profile setting object into a human-readable string")]
    //! Formats basic information about the Profile setting object into a human-readable string
    string                  info();
};

[Version("1.1.0"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Description("Application, associated with an application profile")]
//! Application, associated with an application profile
class Application
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Description("Version of Application class")]
    //! Version of Application class
    Version                 verClass;

    [Read: ToInstance ToSubClass,  Key, Description("Unique id of an application, used as a key")]
    //! Unique id of an application, used as a key
    uint32                  id;

    [Read: ToInstance ToSubClass,  Description("User-friendly name of an application")]
    //! User-friendly name of an application
    string                  name;

    [Read: ToInstance ToSubClass,  Description("Unique subpaths to identify an application, separated by ';'")]
    //! Unique subpaths to identify an application, separated by ';'
    string                  subPaths;

    [Read: ToInstance ToSubClass,  Description("When non-empty, subpath to a launcher")]
    //! When non-empty, subpath to a launcher
    string                  launcher;

    [Read: ToInstance ToSubClass,  Description("If true, application is predefined and cannot be removed")]
    //! If true, application is predefined and cannot be removed
    boolean                 isPredefined;

    [Read: ToInstance ToSubClass,  Description("If true, profile is predefined and cannot be removed")]
    //! If true, profile is predefined and cannot be removed
    boolean                 isSupported;

    [Implemented, Description("Formats basic information about this Application into a human-readable string")]
    //! Formats basic information about this Application into a human-readable string
    string                  info();
};

[Version("1.0.2"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Description("Information about a display grid")]
//! Information about a display grid
class DisplayGridInfo
{
//! \publicsection

    [Read: ToInstance ToSubClass,  Description("Version of a display grid information")]
    //! Version of a display grid information
    Version                 verClass;

    [Read: ToInstance ToSubClass,  Key, Description("Unique id of a display grid information, used as a key")]
    //! Unique id of a display grid information, used as a key
    uint32                  id;

    [Read: ToInstance ToSubClass,  Description("Number of rows in the display grid")]
    //! Number of rows in the display grid
    uint32                  rows;

    [Read: ToInstance ToSubClass,  Description("Number of columns in the display grid")]
    //! Number of columns in the display grid
    uint32                  cols;

    [Read: ToInstance ToSubClass,  Description("ID of the primary display")]
    //! ID of the primary display
    uint32                  primaryId;

    [Read: ToInstance ToSubClass,  ArrayType("Indexed"), Description("Array of display IDs (Display.id)")]
    //! Array of display IDs (Display.id)
    uint32                  displayIds[];

    [Read: ToInstance ToSubClass,  Description("string of unique display names (Display.uname), separated by semicolon. Order corresponds to displayIds property")]
    //! string of unique display names (Display.uname), separated by semicolon. Order corresponds to displayIds property
    string                  unames;

    [Read: ToInstance ToSubClass,  Description("string, containing a file path to CSC data")]
    //! string, containing a file path to CSC data
    string                  cscFilePath;

    [Read: ToInstance ToSubClass,  Description("path to the file which contains desktop gamma ramps for every display in the grid")]
    //! path to the file which contains desktop gamma ramps for every display in the grid
    string                  gammaRampFilePath;

    [Implemented, Description("Formats basic information about the display grid information into a human-readable string")]
    //! Formats basic information about the display grid information into a human-readable string
    string                  info();
};


[Version("1.2.2"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Description("Global profile class")]
//! Global profile class
class Profile
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Description("Version of a profile class")]
    //! Version of a profile class
    Version                 verClass;

    [Read: ToInstance ToSubClass,  Key, Description("Unique id of a profile, used as a key")]
    //! Unique id of a profile, used as a key
    uint32                  id;

    [Read: ToInstance ToSubClass,  Description("Name of a profile")]
    //! Name of a profile
    string                  name;

    [Read: ToInstance ToSubClass,  ValueMap{"1","3","5"}, Values{"3D global","nView global","system"}, Description("Type of global profile. Possible values are: 1 - 3D global, 3 - nView global, 5 - system")]
    //! Type of global profile. Possible values are: 1 - 3D global, 3 - nView global, 5 - system
    uint32                  type;

    [Read: ToInstance ToSubClass,  Description("If true, profile is predefined and cannot be removed")]
    //! If true, profile is predefined and cannot be removed
    boolean                 isPredefined;

    [Read: ToInstance ToSubClass,  Description("If true, profile is supported on this system")]
    //! If true, profile is supported on this system
    boolean                 isSupported;

    [Read: ToInstance ToSubClass,  ArrayType("Indexed"), Description("Array of settings for a profile")]
    //! Array of settings for a profile
    Setting                 settings[];

    [Implemented, Description("Set the 32-bit value by a setting ID")]
    //! Set the 32-bit value by a setting ID
    boolean                 setValueById
    (
        [in]uint32          settingId,              //!< Setting ID
        [in]uint32          value                   //!< 32-bit value
    );

    [Implemented, Description("Set the binary value by a setting ID")]
    //! Set the binary value by a setting ID
    boolean                 setBinaryValueById
    (
        [in]uint32          settingId,              //!< Setting ID
        [in]uint8           value[]                 //!< Binary value as an array of bytes
    );

    [Implemented, Description("Set the string value by a setting ID")]
    //! Set the string value by a setting ID
    boolean                 setStringValueById
    (
        [in]uint32          settingId,              //!< Setting ID
        [in]string          value                   //!< String value
    );

    [Implemented, Description("Restore or delete settings, specified by IDs. Predefined settings get restored and non-predefined settings get deleted.")]
    //! Restore or delete settings, specified by IDs. Predefined settings get restored and non-predefined settings get deleted.
    boolean                 restoreSettings
    (
        [in]uint32          settingIds[]            //!< Array of Setting IDs
    );

    [Implemented, Description("formats basic information about a profile into a human-readable string")]
    //! formats basic information about a profile into a human-readable string
    string                  info();
};


[Version("1.2.2"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Description("Application profile")]
//! Application profile
class ApplicationProfile // contains embedded class Profile
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Description("Version of a profile class")]
    //! Version of a profile class
    Version                 verClass;

    [Read: ToInstance ToSubClass,  Key, Description("Unique id of a profile, used as a key")]
    //! Unique id of a profile, used as a key
    uint32                  id;

    [Read: ToInstance ToSubClass,  Description("Name of a profile")]
    //! Name of a profile
    string                  name;


    [Read: ToInstance ToSubClass,  Description("If true, profile is predefined and cannot be removed")]
    //! If true, profile is predefined and cannot be removed
    boolean                 isPredefined;

    [Read: ToInstance ToSubClass,  Description("If true, profile is supported on this system")]
    //! If true, profile is supported on this system
    boolean                 isSupported;

    [Read: ToInstance ToSubClass,  ArrayType("Indexed"), Description("Array of settings for a profile")]
    //! Array of settings for a profile
    Setting                 settings[];

    [Implemented, Description("Set the 32-bit value by a setting ID")]
    //! Set the 32-bit value by a setting ID
    boolean                 setValueById
    (
        [in]uint32          settingId,              //!< Setting ID
        [in]uint32          value                   //!< 32-bit value
    );

    [Implemented, Description("Set the binary value by a setting ID")]
    //! Set the binary value by a setting ID
    boolean                 setBinaryValueById
    (
        [in]uint32          settingId,              //!< Setting ID
        [in]uint8           value[]                 //!< Binary value as an array of bytes
    );

    [Implemented, Description("Set the string value by a setting ID")]
    //! Set the string value by a setting ID
    boolean                 setStringValueById
    (
        [in]uint32          settingId,              //!< Setting ID
        [in]string          value                   //!< String value
    );

    [Implemented, Description("Restore or delete settings, specified by IDs. Predefined settings get restored and non-predefined settings get deleted.")]
    //! Restore or delete settings, specified by IDs. Predefined settings get restored and non-predefined settings get deleted.
    boolean                 restoreSettings
    (
        [in]uint32          settingIds[]            //!< Array of Setting IDs
    );

    [Implemented, Description("formats basic information about a profile into a human-readable string")]
    //! formats basic information about a profile into a human-readable string
    string                  info();
//! \publicsection

    [Read: ToInstance ToSubClass,  ArrayType("Indexed"), Description("Array of applications associated to the Application Profile")]
    //! Array of applications associated to the Application Profile
    Application             applications[];

    [Read: ToInstance ToSubClass,  ValueMap{"0","2"}, Values{"3D Application","nView Application"}, Description("Application Profile type. Possible values are: 0 - 3D Application, 2 - nView Application")]
    //! Application Profile type. Possible values are: 0 - 3D Application, 2 - nView Application
    uint32                  type;

    [Read: ToInstance ToSubClass,  Description("Time when a profile was activated")]
    //! Time when a profile was activated
    DATETIME                startTime;

    [Implemented, Description("Add applications to a Profile")]
    //! Add applications to a Profile
    boolean                 addApplications
    (
         [in]string         appNames[]              //!< Array of Application names. In WMIC array of strings is: ("app1.exe", "app2.exe", "app3.exe")
    );

    [Implemented, Description("Remove applications from a profile. Only non-predefined applications can be removed")]
    //! Remove applications from a profile. Only non-predefined applications can be removed
    boolean                 removeApplications
    (
         [in]string         appNames[]              //!< Array of Application names. In WMIC array of strings is: ("app1.exe", "app2.exe", "app3.exe")
    );
};

[Version("1.1.2"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Description("Display profile")]
//! Display profile
class DisplayProfile // contains embedded class Profile
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Description("Version of a profile class")]
    //! Version of a profile class
    Version                 verClass;

    [Read: ToInstance ToSubClass,  Key, Description("Unique id of a profile, used as a key")]
    //! Unique id of a profile, used as a key
    uint32                  id;

    [Read: ToInstance ToSubClass,  Description("Name of a profile")]
    //! Name of a profile
    string                  name;


    [Read: ToInstance ToSubClass,  Description("If true, profile is predefined and cannot be removed")]
    //! If true, profile is predefined and cannot be removed
    boolean                 isPredefined;

    [Read: ToInstance ToSubClass,  Description("If true, profile is supported on this system")]
    //! If true, profile is supported on this system
    boolean                 isSupported;

    [Read: ToInstance ToSubClass,  ArrayType("Indexed"), Description("Array of settings for a profile")]
    //! Array of settings for a profile
    Setting                 settings[];

    [Implemented, Description("Set the 32-bit value by a setting ID")]
    //! Set the 32-bit value by a setting ID
    boolean                 setValueById
    (
        [in]uint32          settingId,              //!< Setting ID
        [in]uint32          value                   //!< 32-bit value
    );

    [Implemented, Description("Set the binary value by a setting ID")]
    //! Set the binary value by a setting ID
    boolean                 setBinaryValueById
    (
        [in]uint32          settingId,              //!< Setting ID
        [in]uint8           value[]                 //!< Binary value as an array of bytes
    );

    [Implemented, Description("Set the string value by a setting ID")]
    //! Set the string value by a setting ID
    boolean                 setStringValueById
    (
        [in]uint32          settingId,              //!< Setting ID
        [in]string          value                   //!< String value
    );

    [Implemented, Description("Restore or delete settings, specified by IDs. Predefined settings get restored and non-predefined settings get deleted.")]
    //! Restore or delete settings, specified by IDs. Predefined settings get restored and non-predefined settings get deleted.
    boolean                 restoreSettings
    (
        [in]uint32          settingIds[]            //!< Array of Setting IDs
    );

    [Implemented, Description("formats basic information about a profile into a human-readable string")]
    //! formats basic information about a profile into a human-readable string
    string                  info();
//! \publicsection

    [Read: ToInstance ToSubClass,  ValueMap{"4"}, Values{"Display"}, Description("Display Profile type. Possible values are: 4 - Display")]
    //! Display Profile type. Possible values are: 4 - Display
    uint32                  type;

    [Read: ToInstance ToSubClass,  Description("information about a display grid")]
    //! information about a display grid
    DisplayGridInfo         grid;

};

[Version("1.0.0"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Description("Useful information about a profile setting")]
//! Useful information about a profile setting
class SettingInfo
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Description("Version of a SettingInfo class")]
    //! Version of a SettingInfo class
    Version                 verClass;

    [Read: ToInstance ToSubClass,  Key, Description("Unique id of a setting, used as a key")]
    //! Unique id of a setting, used as a key
    uint32                  id;

    [Read: ToInstance ToSubClass,  Description("Setting name")]
    //! Setting name
    string                  name;

    [Read: ToInstance ToSubClass,  Description("Setting description")]
    //! Setting description
    string                  description;

    [Implemented, Description("formats information about a setting into a human-readable string")]
    //! formats information about a setting into a human-readable string
    string                  info();
};

[Version("1.0.0"), Dynamic, Provider("NVIDIA|NVWMI|2.0"), Description("Table which describes profile settings of certain type")]
//! Table which describes profile settings of certain type
class SettingTable
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Description("Version of a SettingTable class")]
    //! Version of a SettingTable class
    Version                 verClass;

    [Read: ToInstance ToSubClass,  Key, Description("Unique id of a setting table, used as a key")]
    //! Unique id of a setting table, used as a key
    uint32                  id;

    [Read: ToInstance ToSubClass,  ValueMap{"0","1","2","3","4","5"}, Values{"3D Application","3D Global","nView Application","nView Global","Display","System"}, Description("Profile type for settings in this table. Possible values are: 0 - 3D Application, 1 - 3D Global, 2 - nView Application, 3 - nView Global, 4 - Display, 5 - System")]
    //! Profile type for settings in this table. Possible values are: 0 - 3D Application, 1 - 3D Global, 2 - nView Application, 3 - nView Global, 4 - Display, 5 - System
    uint32                  type;

    [Read: ToInstance ToSubClass,  ArrayType("Indexed"), Description("Array of all setting IDs, described in this table")]
    //! Array of all setting IDs, described in this table
    uint32                  settingIds[];

    [Read: ToInstance ToSubClass,  ArrayType("Indexed"), Description("Array of all setting names, described in this table")]
    //! Array of all setting names, described in this table
    string                  settingNames[];

    [Read: ToInstance ToSubClass,  ArrayType("Indexed"), Description("Array of settings, described in this table")]
    //! Array of settings, described in this table
    SettingInfo             settings[];

    [Implemented, Description("get setting ID from setting name")]
    //! get setting ID from setting name
    uint32                  getIdFromName
    (
        [in]string          name                    //!< Setting name
    );

    [Implemented, Description("get setting name from setting ID")]
    //! get setting name from setting ID
    string                  getNameFromId
    (
        [in]uint32          id                      //!< Setting ID
    );

    [Implemented, Description("formats information about given setting with given name")]
    //! formats information about given setting with given name
    string                  infoByName
    (
        [in]string          name                    //!< Setting name
    );

    [Implemented, Description("formats information about given setting with given ID")]
    //! formats information about given setting with given ID
    string                  infoById
    (
        [in]uint32          id                      //!< Setting ID
    );

    [Implemented, Description("formats basic information about all settings into a human-readable string")]
    //! formats basic information about all settings into a human-readable string
    string                  info();
};


Instance of __Namespace
{
    Name = "Events";
};


#pragma namespace("\\\\.\\root\\cimv2\\NV\\Events")

instance of __Win32Provider as $EVENTPROVIDER
{
    ClientLoadableCLSID    = NULL;
    CLSID                  = "{0CB84A35-AB4F-4B6B-B4F6-493624B6C132}";
    DefaultMachineName     = NULL;
    HostingModel           = "Decoupled:Com";
    InitializeAsAdminFirst = FALSE;
    Name                   = "NVIDIA|NVWMI|EVENTS|2.0";
    UnloadTimeout          = NULL;
    SecurityDescriptor     = "O:BAG:SYD:(A;;0x10000001;;;BA)(A;;0x10000001;;;SY)";
    Version                = 0x02000000;            // 2.0.0 (major in MSB byte, then byte with minor, then 16-bit word with build)
                                                    // Note that Version here is a property inherited from __Win32Provider
};

[Version("2.1.0"), Dynamic, Provider("NVIDIA|NVWMI|EVENTS|2.0"), Description("Represents GPU thermal events")]
//! Represents GPU thermal events
class ThermalEvent : __ExtrinsicEvent
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Key, Description("Unique identification of the NVIDIA GPU")]
    //! Unique identification of the NVIDIA GPU
    uint32                  handleGpu;

    [Read: ToInstance ToSubClass,  Description("Thermal probe index in array of probes on a given GPU")]
    //! Thermal probe index in array of probes on a given GPU
    uint32                  probeIndex;

    [Read: ToInstance ToSubClass,  ValueMap{"0","1","2","3"},Values{"unknown","normal","warning","critical"}, Description("Thermal level to identify the temperature zone. Possible values are: 0 - unknown, 1 - normal, 2 - warning, 3 - critical")]
    //! Thermal level to identify the temperature zone. Possible values are: 0 - unknown, 1 - normal, 2 - warning, 3 - critical
    uint32                  thermalLevel;
};

[Version("2.1.0"), Dynamic, Provider("NVIDIA|NVWMI|EVENTS|2.0"), Description("Represents GPU cooler events")]
//! Represents GPU cooler events
class CoolerEvent : __ExtrinsicEvent
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Key, Description("Unique identification of the NVIDIA GPU")]
    //! Unique identification of the NVIDIA GPU
    uint32                  handleGpu;

    [Read: ToInstance ToSubClass,  Description("Cooler index in array of coolers on a given GPU")]
    //! Cooler index in array of coolers on a given GPU
    uint32                  coolerIndex;

    [Read: ToInstance ToSubClass,  ValueMap{"0","1","2","3"},Values{"unknown","normal","warning","critical"}, Description("Cooler level to identify the cooler zone. Possible values are: 0 - unknown, 1 - normal, 2 - warning, 3 - critical")]
    //! Cooler level to identify the cooler zone. Possible values are: 0 - unknown, 1 - normal, 2 - warning, 3 - critical
    uint32                  coolerLevel;
};

[Version("1.0.0"), Dynamic, Provider("NVIDIA|NVWMI|EVENTS|2.0"), Description("Represent Sync events")]
//! Represent Sync events
class SyncEvent : __ExtrinsicEvent
{
//! \publicsection
    [Read: ToInstance ToSubClass,  Description("Version of the SyncEvent class")]
    //! Version of the SyncEvent class
    Version                 verClass;

    [Read: ToInstance ToSubClass,  Key, Description("Unique sync device ID")]
    //! Unique sync device ID
    uint32                  syncDeviceId;

    [Read: ToInstance ToSubClass,  ValueMap{"0","1","2","4","8","0x10","0x20","0x40","0x80","0x10000"}, Values{"Unknown","SyncLoss","SyncGain","StereoLoss","StereoGain","HouseSyncGain","HouseSyncLoss","FlGain","FlLoss","SyncStateChange"}, Description("Sync event type. Possible values are: 0 - Unknown, 1 - SyncLoss, 2 - SyncGain, 4 - StereoLoss, 8 - StereoGain, 0x10 - HouseSyncGain, 0x20 - HouseSyncLoss, 0x40 - FlGain, 0x80 - FlLoss, 0x10000 - SyncStateChange")]
    //! Sync event type. Possible values are: 0 - Unknown, 1 - SyncLoss, 2 - SyncGain, 4 - StereoLoss, 8 - StereoGain, 0x10 - HouseSyncGain, 0x20 - HouseSyncLoss, 0x40 - FlGain, 0x80 - FlLoss, 0x10000 - SyncStateChange
    uint32                  eventType;
};

instance of __EventProviderRegistration
{
    Provider            = $EVENTPROVIDER;
    EventQueryList = {"select * from SyncEvent", "select * from CoolerEvent", "select * from ThermalEvent"};
};