// ===================================================================
// Title:       Device Cooling and Power 2.7
// Filename:    Device27_CoolingAndPower.mof
// Version:     2.7.0
// Release:     Final
// Date:        03/31/03
// ===================================================================
// Copyright 1998-2003 Distributed Management Task Force, Inc. (DMTF).
// All rights reserved.  
// DMTF is a not-for-profit association of industry members dedicated 
// to promoting enterprise and systems management and interoperability. 
// DMTF specifications and documents may be reproduced for uses
// consistent with this purpose by members and non-members, 
// provided that correct attribution is given. 
// As DMTF specifications may be revised from time to time, 
// the particular version and release date should always be noted.
//
// Implementation of certain elements of this standard or proposed 
// standard may be subject to third party patent rights, including 
// provisional patent rights (herein "patent rights"). DMTF makes 
// no representations to users of the standard as to the existence 
// of such rights, and is not responsible to recognize, disclose, or
// identify any or all such third party patent right, owners or 
// claimants, nor for any incomplete or inaccurate identification or 
// disclosure of such rights, owners or claimants. DMTF shall have no 
// liability to any party, in any manner or circumstance, under any 
// legal theory whatsoever, for failure to recognize, disclose, or 
// identify any such third party patent rights, or for such party's
// reliance on the standard or incorporation thereof in its product, 
// protocols or testing procedures. DMTF shall have no liability to 
// any party implementing such standard, whether such implementation 
// is foreseeable or not, nor to any patent owner or claimant, and shall 
// have no liability or responsibility for costs or losses incurred if 
// a standard is withdrawn or modified after publication, and shall be
// indemnified and held harmless by any party implementing the 
// standard from any and all claims of infringement by a patent owner 
// for such implementations.
//
// For information about patents held by third-parties which have 
// notified the DMTF that, in their opinion, such patent may relate to 
// or impact implementations of DMTF standards, visit 
// http://www.dmtf.org/about/policies/disclosures.php.
// ===================================================================
// Description: The Device Model extends the management concepts that
//              are related to LogicalDevices. This file defines 
//              the concepts and classes to manage cooling and
//              supply power to devices.
//
//              The object classes below are listed in an order that
//              avoids forward references. Required objects, defined 
//              by other working groups, are omitted.
// ==================================================================
// Change Log for v2.7
// CR621 - Deprecate PackageCooling
// CR622 - Fix the DMI mapping string to include the attribute number
//         for Battery.BatteryStatus, .EstimatedRunTime, .Chemistry,
//           .DesignCapacity, .FullChargeCapacity, .DesignVoltage,
//           .SmartBatteryVersion, & .TimeToFullCharge, 
//         PowerSupply.Range1InputVoltageLow, .Range1InputVoltageHigh,
//           .Range1InputFrequencyLow, .Range1InputFrequencyHigh,
//           .Range2InputVoltageLow, .Range2InputVoltageHigh,
//           .Range2InputFrequencyLow, .Range2InputFrequencyHigh,
//           .ActiveInputVoltage, .TypeOfRangeSwitching, & 
//           .TotalOutputPower
// ================================================================== 

#pragma locale ("en_US")


// ===================================================================
// CoolingDevice
// ===================================================================
[Version ("2.6.0"), Description (
    "Capabilities and management of CoolingDevices.") ] 
class CIM_CoolingDevice : CIM_LogicalDevice {

    [Description (
        "ActiveCooling is a boolean indicating that the Cooling"
        "Device provides active (as opposed to passive) cooling.") ]
    boolean ActiveCooling;
};


// ===================================================================
// Refrigeration
// ===================================================================
[Version ("2.6.0"), Description (
    "Capabilities and management of a Refrigeration CoolingDevice.") ] 
class CIM_Refrigeration : CIM_CoolingDevice {
};


// ===================================================================
// HeatPipe
// ===================================================================
[Version ("2.6.0"), Description (
    "Capabilities and management of a HeatPipe CoolingDevice.") ] 
class CIM_HeatPipe : CIM_CoolingDevice {
};


// ===================================================================
// Fan
// ===================================================================
[Version ("2.6.0"), Description (
    "Capabilities and management of a Fan CoolingDevice.") ] 
class CIM_Fan : CIM_CoolingDevice {
   
    [Description (
        "Indication of whether the fan supports variable speeds.") ]
    boolean VariableSpeed;

    [Description (
        "DesiredSpeed is the currently requested fan speed, " 
        "defined in Revolutions per Minute, when a variable speed fan "
        "is supported (VariableSpeed boolean = TRUE). The current " 
        "speed is determined via a sensor (CIM_Tachometer) that is "
        "associated with the Fan using the CIM_AssociatedSensor "
        "relationship."), 
        Units ("Revolutions per Minute") ]
    uint64 DesiredSpeed;

    [Description (
        "Requests that the Fan speed be set to the " 
        "value specified in the method's input parameter. The return " 
        "value should be 0 if the request was successfully executed, " 
        "1 if the request is not supported and some other value if an " 
        "error occurred. In a subclass, the set of possible "
        "return codes could be specified, using a ValueMap qualifier "
        "on the method. The strings to which the ValueMap contents "
        "are 'translated' may also be specified in the "
        "subclass as a Values array qualifier.") ]
    uint32 SetSpeed (
        [IN] uint64 DesiredSpeed);
};


// ===================================================================
// AssociatedCooling
// ===================================================================
[Association, Version ("2.6.0"), Description (
    "Many Devices, such as processors or power supplies, require "
    "their own cooling devices.  This association indicates where "
    "fans or other CoolingDevices are specific to a Device, "
    "versus providing enclosure or cabinet cooling.") ] 
class CIM_AssociatedCooling : CIM_Dependency {

    [Override ("Antecedent"),
        Description ("The CoolingDevice.") ]
    CIM_CoolingDevice REF Antecedent;

    [Override ("Dependent"),
        Description ("The LogicalDevice being cooled.") ]
    CIM_LogicalDevice REF Dependent;
};


// ===================================================================
// Battery
// ===================================================================
[Version ("2.7.0"), Description (
    "Capabilities and management of the Battery LogicalDevice. "
    "This class applies to both batteries in Laptop Systems and "
    "other internal/external batteries, such as used in, "
    "or as UPSs.") ] 
class CIM_Battery : CIM_LogicalDevice  {

    [Description (
        "Description of the Battery's charge status. Values such "
        "as \"Fully Charged\" (value=3) or \"Partially Charged\" "
        "(11) can be specified. The value, 10, is "
        "not valid in the CIM Schema since in DMI it represents "
        "that no battery is installed. In this case, this object "
        "should not be instantiated."),
        ValueMap {"1", "2", "3", "4", "5", "6", "7", "8", "9", 
            "10", "11"},
        Values {"Other", "Unknown", "Fully Charged",  
            "Low", "Critical", "Charging", "Charging and High", 
            "Charging and Low", "Charging and Critical", 
            // 10
            "Undefined", "Partially Charged"},
        MappingStrings {"MIF.DMTF|Portable Battery|003.14"} ]
    uint16 BatteryStatus;

    [Description (
        "TimeOnBattery indicates the elapsed time in seconds "
        "since the ComputerSystem, UPS, ... last switched to "
        "battery power, or the time since the System or UPS "
        "was last restarted, whichever is less. Zero shall "
        "be returned if the Battery is 'on line'."), 
        Units ("Seconds") ]
    uint32 TimeOnBattery;

    [Description (
        "EstimatedRunTime is an estimate in minutes of the "
        "time to battery charge depletion under the present "
        "load conditions if the utility power is off, or lost "
        "and remains off, or a Laptop is disconnected from a "
        "power source."),
        Units ("Minutes"),
        MappingStrings {"MIF.DMTF|Portable Battery|003.15"} ]
    uint32 EstimatedRunTime;

    [Gauge, Description (
        "An estimate of the percentage of full charge remaining."),
        Units ("Percent") ] 
    uint16 EstimatedChargeRemaining;

    [Description (
        "An enumeration that describes the Battery's chemistry."),
        ValueMap {"1", "2", "3", "4", "5", "6", "7", "8"},
        Values {"Other", "Unknown", "Lead Acid", "Nickel Cadmium", 
           "Nickel Metal Hydride", "Lithium-ion", "Zinc air", 
           "Lithium Polymer"},
        MappingStrings {"MIF.DMTF|Portable Battery|003.7"} ]
    uint16 Chemistry;

    [Description (
        "The design capacity of the battery in mWatt-hours. "
        "If this property is not supported, enter 0."),
        Units ("MilliWattHours"),
        MappingStrings {"MIF.DMTF|Portable Battery|003.8"} ]  
    uint32 DesignCapacity;

    [Description (
        "The full charge capacity of the battery in mWatt-hours. "
        "Comparison of this value to the Battery DesignCapacity "
        "determines when the Battery requires replacement.  A "
        "Battery's end of life is typically when the FullCharge"
        "Capacity falls below 80% of the DesignCapacity. "
        "If this property is not supported, enter 0."),
        Units ("MilliWattHours"),
        MappingStrings {"MIF.DMTF|Portable Battery|003.11"} ]
    uint32 FullChargeCapacity;
 
    [Description (
        "The design voltage of the battery in mVolts. If "
        "this attribute is not supported, enter 0."),
        Units ("MilliVolts"),
        MappingStrings {"MIF.DMTF|Portable Battery|003.9"} ]   
    uint64 DesignVoltage;

    [MaxLen (64), Description (
        "The Smart Battery Data Specification version number "
        "supported by this Battery. If the Battery does not "
        "support this function, the value should be left blank."),
        MappingStrings {"MIF.DMTF|Portable Battery|003.10"} ]
    string SmartBatteryVersion;

    [Description (
        "The remaining time to charge the battery fully in minutes "
        "at the current charging rate and usage."),
        Units ("Minutes"),
        MappingStrings {"MIF.DMTF|Portable Battery|003.16"} ]
    uint32 TimeToFullCharge;
    
    [Description (
        "Indicates the Battery's expected lifetime in minutes, " 
        "assuming that the Battery is fully charged. This property "
        "represents the total expected life of the Battery, not its "
        "current remaining life, which is indicated by the "
        "EstimatedRunTime property. "), 
        Units ("Minutes") ]
    uint32 ExpectedLife;
 
     [Description (
        "MaxRechargeTime indicates the maximum time, in minutes, " 
        "to fully charge the Battery. This property represents the "
        "time to recharge a fully depleted Battery, not the current "
        "remaining charging time, which is indicated in the "
        "TimeToFullCharge property. "), 
        Units ("Minutes") ]
    uint32 MaxRechargeTime;  
};


// ===================================================================
// AssociatedBattery
// ===================================================================
[Association, Version ("2.6.0"), Description (
    "A LogicalDevice may use or require one or more Batteries. This "
    "relationship is described by the AssociatedBattery dependency. "
    "It is also possible to model the individual Batteries that "
    "comprise a UPS, using this association.") ] 
class CIM_AssociatedBattery : CIM_Dependency   {

    [Override ("Antecedent"),
        Description ("The Battery.") ]
    CIM_Battery REF Antecedent;

    [Override ("Dependent"),
    Description (
        "The LogicalDevice needing or associated with the Battery.") ]
    CIM_LogicalDevice REF Dependent;
};


// ===================================================================
// PowerSupply
// ===================================================================
[Version ("2.7.0"), Description (
    "Capabilities and management of the PowerSupply LogicalDevice.") ] 
class CIM_PowerSupply : CIM_LogicalDevice   {

    [Description (
        "Boolean indicating that the PowerSupply is a switching "
        "(vs linear) supply.") ]
    boolean IsSwitchingSupply;

    [Description (
        "The low voltage of Input Voltage Range 1 for this Power"
        "Supply, in millivolts. A value of 0 denotes 'unknown'."),
        Units ("MilliVolts"),
        MappingStrings {"MIF.DMTF|Power Supply|004.7"} ]
    uint32 Range1InputVoltageLow;
 
    [Description (
        "The high voltage of Input Voltage Range 1 for this Power"
        "Supply, in millivolts. A value of 0 denotes 'unknown'."),
        Units ("MilliVolts"),
        MappingStrings {"MIF.DMTF|Power Supply|004.8"} ]
    uint32 Range1InputVoltageHigh;

    [Description (
        "The frequency (in Hertz) at the low end of this Power"
        "Supply's Input Frequency Range 1. A value of zero "
        "implies DC."),
        Units ("Hertz"),
        MappingStrings {"MIF.DMTF|Power Supply|004.17"} ]
    uint32 Range1InputFrequencyLow;

    [Description (
        "The frequency (in Hertz) at the high end of this Power"
        "Supply's Input Frequency Range 1. A value of zero "
        "implies DC."),
        Units ("Hertz"),
        MappingStrings {"MIF.DMTF|Power Supply|004.18"} ]
    uint32 Range1InputFrequencyHigh;

    [Description (
        "The low voltage of Input Voltage Range 2 for this Power"
        "Supply, in millivolts. A value of 0 denotes 'unknown'."),
        Units ("MilliVolts"), 
        MappingStrings {"MIF.DMTF|Power Supply|004.11"} ]
    uint32 Range2InputVoltageLow;

    [Description (
        "The high voltage of Input Voltage Range 2 for this Power"
        "Supply, in millivolts. A value of 0 denotes 'unknown'."),
        Units ("MilliVolts"), 
        MappingStrings {"MIF.DMTF|Power Supply|004.12"} ]
    uint32 Range2InputVoltageHigh;

    [Description (
        "The frequency (in Hertz) at the low end of this Power"
        "Supply's Input Frequency Range 2. A value of zero "
        "implies DC."),
        Units ("Hertz"),
        MappingStrings {"MIF.DMTF|Power Supply|004.19"} ]
    uint32 Range2InputFrequencyLow;

    [Description (
        "The frequency (in Hertz) at the high end of this Power"
        "Supply's Input Frequency Range 2. A value of zero "
        "implies DC."),
        Units ("Hertz"),
        MappingStrings {"MIF.DMTF|Power Supply|004.20"} ]
    uint32 Range2InputFrequencyHigh;

    [Description (
        "ActiveInputVoltage indicates which input voltage range is "
        "currently in use. Range 1, 2 or both can be specified "
        "using the values 3, 4 or 5, respectively. If the Supply "
        "is not currently drawing power, the value 6 (\"Neither\") "
        "can be specified. This information is necessary in the "
        "case of a UPS, a subclass of PowerSupply."),
        ValueMap {"1", "2", "3", "4", "5", "6"},
        Values {"Other", "Unknown", "Range 1", "Range 2", "Both",
            "Neither"},
        MappingStrings {"MIF.DMTF|Power Supply|004.15"} ]
    uint16 ActiveInputVoltage;

    [Description (
        "TypeOfRangeSwitching describes the kind of input voltage "
        "range switching implemented in this PowerSupply. For "
        "example, autoswitching can be specified (value=4)."),
        ValueMap {"1", "2", "3", "4", "5", "6"},
        Values {"Other", "Unknown", "Manual", "Autoswitch",
            "Wide Range", "Not Applicable"},
        MappingStrings {"MIF.DMTF|Power Supply|004.16"} ]
    uint16 TypeOfRangeSwitching;

    [Description (
        "Represents the total output power of the PowerSupply in "
        "milliWatts. 0 denotes 'unknown'."),
        Units ("MilliWatts"),
        MappingStrings {"MIF.DMTF|Power Supply|004.21"} ]
    uint32 TotalOutputPower;
};


// ===================================================================
// SuppliesPower 
// ===================================================================
[Association, Version ("2.6.0"), Description (
    "The SuppliesPower relationship indicates that a Device is in "
    "the power domain of the referenced PowerSupply or UPS. "
    "It indicates which Device(s) are dependent on the PowerSupply, "
    "and hence, which Devices are affected if the Supply is lost.") ]
class CIM_SuppliesPower : CIM_Dependency {

    [Override ("Antecedent"), 
        Description ("The Supply providing power.") ]
    CIM_PowerSupply REF Antecedent;

    [Override ("Dependent"), 
        Description (
            "A LogicalDevice in the power domain of the Supply.") ]
    CIM_LogicalDevice REF Dependent;
};


// ===================================================================
// UninterruptiblePowerSupply
// ===================================================================
[Version ("2.6.0"), Description (
    "Capabilities and management of an UninterruptiblePowerSupply. "
    "The properties of the UPS Device indicate when incoming power "
    "is trimmed or boosted, and the aggregated information of the "
    "batteries, generators, etc. that comprise the Device.  These "
    "individual components (for example, multiple batteries) can "
    "also be independently modeled and associated with the UPS.") ] 
class CIM_UninterruptiblePowerSupply : CIM_PowerSupply {

    [Override ("Range1InputVoltageLow"), Description (
        "If the voltage (in millivolts) drops below the value "
        "specified by Range1InputVoltageLow, the UPS will compensate "
        "by boosting the voltage using its power source(s).  A value "
        "of 0 indicates that the voltage at which boosting occurs "
        "is 'unknown'."), 
        Units ("MilliVolts") ]
    uint32 Range1InputVoltageLow;

    [Override ("Range1InputVoltageHigh"), Description (
        "If the voltage (in millivolts) rises above the value "
        "specified by Range1InputVoltageHigh, the UPS will compensate "
        "by trimming the voltage.  A value of 0 indicates that the "
        "voltage at which trimming occurs is 'unknown'."),
        Units ("MilliVolts") ]
    uint32 Range1InputVoltageHigh;

    [Override ("Range2InputVoltageLow"), Description (
        "If the voltage (in millivolts) drops below the value "
        "specified by Range2InputVoltageLow, the UPS will compensate "
        "by boosting the voltage using its power source(s).  A value "
        "of 0 indicates that the voltage at which boosting occurs "
        "is 'unknown'."), 
        Units ("MilliVolts") ]
    uint32 Range2InputVoltageLow;

    [Override ("Range2InputVoltageHigh"), Description (
        "If the voltage (in millivolts) rises above the value "
        "specified by Range2InputVoltageHigh, the UPS will compensate "
        "by trimming the voltage.  A value of 0 indicates that the "
        "voltage at which trimming occurs is 'unknown'."),
        Units ("MilliVolts") ]
    uint32 Range2InputVoltageHigh;

    [Description (
        "The indication of the capacity remaining in the UPS' "
        "batteries, generator, ...  A value of \"Normal\" (2) "
        "indicates that the remaining estimated minutes of run-time "
        "is greater than the UPS' defined 'low power' state "
        "(typically two minutes). A value of \"Low\" (3) indicates "
        "that the remaining estimated minutes of run-time is less "
        "than or equal to the UPS' defined 'low power' state.  A "
        "value of \"Depleted\" (4) indicates that the "
        "UPS will be unable to sustain the present load when and if "
        "the utility power is lost (including the possibility that "
        "the utility power is currently absent)."), 
        ValueMap {"1", "2", "3", "4"}, 
        Values {"Unknown", "Normal", "Low", "Depleted"},
        MappingStrings {"MIF.DMTF|UPS Battery|001.1"} ]
    uint16 RemainingCapacityStatus;

    [Description (
        "TimeOnBackup indicates the elapsed time in seconds "
        "since the UPS last switched to battery power, generator, ...  "
        "Or, the time since the UPS was last restarted, whichever is "
        "less. Zero shall be returned if the UPS is 'on line'."), 
        Units ("Seconds"),
        MappingStrings {"MIF.DMTF|UPS Battery|001.2"} ]
    uint32 TimeOnBackup;

    [Description (
        "EstimatedRunTime is an estimate in minutes of the time to "
        "battery, generator, ... depletion under the present load "
        "conditions if the utility power is off, or lost and remains "
        "off."),
        Units ("Minutes"),
        MappingStrings {"MIF.DMTF|UPS Battery|001.3"} ]
    uint32 EstimatedRunTime;

    [Gauge, Description (
        "An estimate of the percentage of full charge remaining for "
        "a UPS (that uses battery technology)."),
        Units ("Percent"),
        MappingStrings {"MIF.DMTF|UPS Battery|001.4"} ] 
    uint16 EstimatedChargeRemaining;
};

// ==================================================================
// PackageCooling  
// ==================================================================
[Association, Version ("2.7.0"), 
 Deprecated {"CIM_PackageDependency"}, Description (
    "Often, a CoolingDevice is installed in a Package such as "
    "a Chassis or a Rack, not for a specific Device, but to assist "
    "in the cooling of the Package in general.  The use of this "
    "association has been deprecated.  Instead, the more generic "
    "PackageDependency relationship should be used.") ]
class CIM_PackageCooling : CIM_PackageDependency {
    
    [Override ("Antecedent"), 
        Deprecated {"CIM_PackageDependency.Antecedent"}, 
        Description (
            "The CoolingDevice for the Package.") ]
    CIM_CoolingDevice REF Antecedent;
    
    [Override ("Dependent"), 
        Deprecated {"CIM_PackageDependency.Dependent"}, 
        Description (
            "The PhysicalPackage whose environment is cooled.") ]
    CIM_PhysicalPackage REF Dependent;
};


// ===================================================================
// end of file
// ===================================================================
