// ===================================================================
// Title:       Device Sensors and Alarms 2.7
// Filename:    Device27_Sensors.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 describes
//              the management of sensors (including LEDs, Buzzers, 
//              WatchDog processors, etc.).
//
//              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 - Promote subclassing of PackageTempSensor and PackageAlarm 
//         from Dependency to PackageDependency and deprecate them.
// CR771 - Add the composition qualifer to CollectionOfSensors
// ================================================================== 

#pragma locale ("en_US")


// ===================================================================
// Sensor
// ===================================================================
[Abstract, Version ("2.6.0"), Description (
    "A Sensor is a hardware device capable of measuring the "
    "characteristics of some physical property - for example, the "
    "temperature or voltage characteristics of a UnitaryComputer"
    "System.") ] 
class CIM_Sensor : CIM_LogicalDevice {

    [Description (
        "The Type of the Sensor, e.g. Voltage or Temperature Sensor. "
        "If the type is set to \"Other\", then the OtherSensorType"
        "Description can be used to further identify the type, or if "
        "the Sensor has numeric readings, then the type of the Sensor "
        "can be implicitly determined by the Units. A description of "
        "the different Sensor types is as follows: A Temperature "
        "Sensor measures the environmental temperature. Voltage and "
        "Current Sensors measure electrical voltage and current "
        "readings.  A Tachometer measures speed/revolutions of a "
        "Device. For example, a Fan Device can have an associated "
        "Tachometer which measures its speed. A Counter is a general "
        "purpose Sensor that measures some numerical property of a "
        "Device. A Counter value can be cleared, but it never "
        "decreases. A Switch Sensor has states like Open/Close, "
        "On/Off, or Up/Down. A Lock has states of Locked/Unlocked. "
        "Humidity, Smoke Detection and Air Flow Sensors measure the "
        "equivalent environmental characteristics. A Presence Sensor "
        "detects the presence of a PhysicalElement."), 
        ValueMap {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", 
            "10", "11", "12"},
        Values {"Unknown", "Other", "Temperature", "Voltage", "Current", 
            "Tachometer", "Counter", "Switch", "Lock", "Humidity", 
            "Smoke Detection", "Presence", "Air Flow"},
        ModelCorrespondence {"CIM_Sensor.OtherSensorTypeDescription"} ]
    uint16 SensorType;

    [MaxLen (128), Description (
        "A string describing the Sensor type - used when the "
        "SensorType property is set to \"Other\"."), 
        ModelCorrespondence {"CIM_Sensor.SensorType"} ]
    string OtherSensorTypeDescription;

    [MaxLen (128), Description (
        "PossibleStates enumerates the string outputs of the Sensor. "
        "For example, a \"Switch\" Sensor may output the states \"On\","
        " or \"Off\". Another implementation of the Switch may output "
        "the states \"Open\", and \"Close\". Another example is a "
        "NumericSensor supporting thresholds. This Sensor can report "
        "the states like \"Normal\", \"Upper Fatal\", "
        "\"Lower Non-Critical\", etc. A NumericSensor that does not "
        "publish readings and thresholds, but stores this data "
        "internally, can still report its states.") ]
    string PossibleStates[];

    [MaxLen (128), Description (
        "The current state indicated by the Sensor. This is always "
        "one of the \"PossibleStates\".") ]
    string CurrentState;
    
    [Description (
        "The polling interval that the Sensor hardware or the "
        "instrumentation uses to determine the current state of the "
        "Sensor."), 
        Units ("NanoSeconds") ]
    uint64 PollingInterval;
};


// ===================================================================
// AssociatedSensor
// ===================================================================
[Association, Version ("2.6.0"), Description (
    "Many Devices include Sensors or have Sensors installed "
    "nearby, in order to measure critical input and output "
    "properties. This association indicates that relationship.") ] 
class CIM_AssociatedSensor : CIM_Dependency {

    [Override ("Antecedent"), 
        Description ("The Sensor.") ]
    CIM_Sensor REF Antecedent;

    [Override ("Dependent"), Description (
        "The LogicalDevice for which information is measured by "
        "the Sensor.") ]
    CIM_LogicalDevice REF Dependent;
};


// ===================================================================
// BinarySensor
// ===================================================================
[Version ("2.6.0"), Description (
    "A BinarySensor provides a boolean output. Given the addition "
    "of the CurrentState and PossibleStates properties to Sensor, "
    "the BinarySensor subclass is no longer necessary, but is "
    "retained for backward compatibility. A BinarySensor can be "
    "created by instantiating a Sensor with two PossibleStates.") ]
class CIM_BinarySensor : CIM_Sensor {

    [Description (
        "The current value indicated by the Sensor.") ]
    boolean CurrentReading;

    [Description (
        "ExpectedReading indicates the 'normal' value for the "
        "Sensor.") ]
    boolean ExpectedReading;

    [MaxLen (64), Description (
        "InterpretationOfTrue is a string indicating what a 'True' "
        "value from the BinarySensor means.  This information could "
        "be displayed to a user.") ]
    string InterpretationOfTrue;

    [MaxLen (64), Description (
        "InterpretationOfFalse is a string indicating what a 'False' "
        "value from the BinarySensor means.  This information could "
        "be displayed to a user.") ]
    string InterpretationOfFalse;
};


// ===================================================================
// MultiStateSensor
// ===================================================================
[Version ("2.6.0"), Description (
    "A Multi-StateSensor is a multi-member set of Sensors.") ] 
class CIM_MultiStateSensor : CIM_Sensor {
};


// ===================================================================
// CollectionOfSensors
// ===================================================================
[Association, Aggregation, Composition, Version ("2.7.0"), 
    Description (
        "The CollectionOfSensors association indicates the "
        "Sensors that make up a MultiStateSensor.") ] 
class CIM_CollectionOfSensors : CIM_Component {

    [Override ("GroupComponent"), Aggregate, Max (1),
        Description ("The MultiStateSensor.") ]
    CIM_MultiStateSensor REF GroupComponent;

    [Override ("PartComponent"), Min (2),
        Description (
        "A Sensor that is part of the MultiStateSensor.") ]
    CIM_Sensor REF PartComponent;
};


// ===================================================================
// NumericSensor
// ===================================================================
[Version ("2.6.0"), Description (
    "A Numeric Sensor is capable of returning numeric readings "
    "and optionally supports thresholds settings.") ] 
class CIM_NumericSensor : CIM_Sensor {

    [Description (
        "The base unit of the values returned by this Sensor. All "
        "the values returned by this Sensor are represented in the "
        "units obtained by (BaseUnits * 10 raised to the power of the "
        "UnitModifier). For example, if BaseUnits is Volts and the "
        "UnitModifier is -6, then the units of the values returned are "
        "MicroVolts. However, if the RateUnits property is set to a "
        "value other than \"None\", then the units are further "
        "qualified as rate units. In the above example, if RateUnits "
        "is set to \"Per Second\", then the values returned by the "
        "Sensor are in MicroVolts/Second. The units apply to all "
        "numeric properties of the Sensor, unless explicitly "
        "overridden by the Units qualifier."), 
        ValueMap {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", 
            "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", 
            "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", 
            "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", 
            "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", 
            "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", 
            "60", "61", "62", "63", "64", "65"}, 
        Values {"Unknown", "Other", "Degrees C", "Degrees F", 
            "Degrees K", "Volts", "Amps", "Watts", "Joules", "Coulombs", 
            //10
            "VA", "Nits", "Lumens", "Lux", "Candelas", "kPa", "PSI", 
            "Newtons", "CFM", "RPM", 
            //20
            "Hertz",  "Seconds", "Minutes", "Hours", "Days", "Weeks",
            "Mils", "Inches", "Feet", "Cubic Inches", 
            //30
            "Cubic Feet", "Meters", "Cubic Centimeters", "Cubic Meters",
            "Liters", "Fluid Ounces", "Radians", "Steradians", 
            "Revolutions", "Cycles", 
            //40
            "Gravities", "Ounces", "Pounds", "Foot-Pounds", 
            "Ounce-Inches", "Gauss", "Gilberts", "Henries", "Farads", 
            "Ohms", 
            //50
            "Siemens", "Moles", "Becquerels", "PPM (parts/million)",  
            "Decibels", "DbA", "DbC", "Grays", "Sieverts", 
            "Color Temperature Degrees K", 
            //60
            "Bits", "Bytes", "Words (data)", "DoubleWords", 
            "QuadWords", 
            "Percentage"},
        ModelCorrespondence {"CIM_NumericSensor.UnitModifier", 
            "CIM_NumericSensor.RateUnits"} ]
    uint16 BaseUnits;

    [Description (
        "The unit multiplier for the values returned by this Sensor. "
        "All the values returned by this Sensor are represented in the "
        "units obtained by (BaseUnits * 10 raised to the power of the "
        "UnitModifier). For example, if BaseUnits is Volts and the Unit"
        "Modifier is -6, then the units of the values returned are "
        "MicroVolts. However, if the RateUnits property is set to a "
        "value other than \"None\", then the units are further "
        "qualified as rate units. In the above example, if RateUnits "
        "is set to \"Per Second\", then the values returned by the "
        "Sensor are in MicroVolts/Second. The units apply to all "
        "numeric properties of the Sensor, unless explicitly "
        "overridden by the Units qualifier."),
        ModelCorrespondence {"CIM_NumericSensor.BaseUnits", 
            "CIM_NumericSensor.RateUnits"} ]
    sint32 UnitModifier;

    [Description (
        "Specifies if the units returned by this Sensor are rate "
        "units. All the values returned by this Sensor are represented "
        "in the units obtained by (BaseUnits * 10 raised to the power "
        "of the UnitModifier). This is true unless this property "
        "(RateUnits) has a value different than \"None\". For example, "
        "if BaseUnits is Volts and the UnitModifier is -6, then the "
        "units of the values returned are MicroVolts. But, if the "
        "RateUnits property is set to a value other than \"None\", "
        "then the units are further qualified as rate units. In the "
        "above example, if RateUnits is set to \"Per Second\", then "
        "the values returned by the Sensor are in MicroVolts/Second. "
        "The units apply to all numeric properties of the Sensor, "
        "unless explicitly overridden by the Units qualifier. Any "
        "implementation of CurrentReading should be qualified with "
        "either a Counter or a Gauge qualifier, depending on the "
        "characteristics of the sensor being modeled."), 
        ValueMap {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"},  
        Values {"None", "Per MicroSecond", "Per MilliSecond", 
            "Per Second", "Per Minute", "Per Hour", "Per Day", 
            "Per Week", "Per Month", "Per Year"},
        ModelCorrespondence {"CIM_NumericSensor.UnitModifier", 
            "CIM_NumericSensor.BaseUnits"} ]
    uint16 RateUnits;

    [Description (
        "The current value indicated by the Sensor.") ]
    sint32 CurrentReading;

    [Description (
        "NominalReading indicates the 'normal' or expected value "
        "for the NumericSensor.") ]
    sint32 NominalReading;

    [Description (
        "NormalMax provides guidance for the user as to the "
        "normal maximum range for the NumericSensor.") ]
    sint32 NormalMax;

    [Description (
        "NormalMin provides guidance for the user as to the "
        "normal minimum range for the NumericSensor.") ]
    sint32 NormalMin;

    [Description (
        "MaxReadable indicates the largest value of the measured "
        "property that can be read by the NumericSensor.") ]     
    sint32 MaxReadable;

    [Description (
        "MinReadable indicates the smallest value of the measured "
        "property that can be read by the NumericSensor.") ]     
    sint32 MinReadable;

    [Description (
        "Resolution indicates the ability of the Sensor to resolve "
        "differences in the measured property.  This value may vary "
        "depending on whether the Device is linear over its dynamic "
        "range.") ]
    uint32 Resolution;

    [Description (
        "Indicates the tolerance of the Sensor for the measured "
        "property. Tolerance, along with Resolution and Accuracy, "
        "is used to calculate the actual value of the measured "
        "physical property.  Tolerance may vary depending on "
        "whether the Device is linear over its dynamic range.") ]
    sint32 Tolerance;

    [Description (
        "Indicates the accuracy of the Sensor for the measured "
        "property. Its value is recorded as plus/minus hundredths "
        "of a percent. Accuracy, along with Resolution and Tolerance, "
        "is used to calculate the actual value of the measured "
        "physical property. Accuracy may vary depending on whether "
        "the Device is linear over its dynamic range."), 
        Units ("Hundredths of Percent") ]
    sint32 Accuracy;

    [Description (
        "Indicates that the Sensor is linear over its dynamic range.") ] 
    boolean IsLinear;

    [Description (
        "Indicates the margin built around the thresholds. This margin "
        "prevents unnecessary state changes when the Sensor reading may"
        " fluctuate very close to its thresholds. This could be due to "
        "the Sensor's tolerance/accuracy/resolution or due to "
        "environmental factors. Once a threshold is crossed, the state "
        "of the Sensor should change. However, the state should not "
        "fluctuate between the old and new states unless the Sensor's "
        "change in the reading exceeds the hysteresis value.") ]
    uint32 Hysteresis;

    [Description (
        "The Sensor's threshold values specify the ranges (min and max "
        "values) for determining whether the Sensor is operating under "
        "Normal, NonCritical, Critical or Fatal conditions. If Current"
        "Reading is between LowerThresholdNonCritical and Upper"
        "ThresholdNonCritical, then the Sensor is reporting a normal "
        "value. If CurrentReading is between LowerThresholdNonCritical "
        "and LowerThresholdCritical, then the CurrentState is "
        "NonCritical.") ]
    sint32 LowerThresholdNonCritical;

    [Description (
        "The Sensor's threshold values specify the ranges (min and max "
        "values) for determining whether the Sensor is operating under "
        "Normal, NonCritical, Critical or Fatal conditions. If the "
        "CurrentReading is between LowerThresholdNonCritical and "
        "UpperThresholdNonCritical, then the Sensor is reporting a "
        "normal value. If the CurrentReading is between UpperThreshold"
        "NonCritical and UpperThresholdCritical, then the CurrentState "
        "is NonCritical.") ]
    sint32 UpperThresholdNonCritical;

    [Description (
        "The Sensor's threshold values specify the ranges (min and max "
        "values) for determining whether the Sensor is operating under "
        "Normal, NonCritical, Critical or Fatal conditions. If the "
        "CurrentReading is between LowerThresholdCritical and Lower"
        "ThresholdFatal, then the CurrentState is Critical.") ]
    sint32 LowerThresholdCritical;

    [Description (
        "The Sensor's threshold values specify the ranges (min and max "
        "values) for determining whether the Sensor is operating under "
        "Normal, NonCritical, Critical or Fatal conditions. If the "
        "CurrentReading is between UpperThresholdCritical and Upper"
        "ThresholdFatal, then the CurrentState is Critical.") ]
    sint32 UpperThresholdCritical;
  
    [Description (
       "The Sensor's threshold values specify the ranges (min and max "
        "values) for determining whether the Sensor is operating under "
        "Normal, NonCritical, Critical or Fatal conditions. If the "
        "CurrentReading is below LowerThresholdFatal, then the Current"
        "State is Fatal.") ]
    sint32 LowerThresholdFatal;
  
      [Description (
        "The Sensor's threshold values specify the ranges (min and max "
        "values) for determining whether the Sensor is operating under "
        "Normal, NonCritical, Critical or Fatal conditions. If the "
        "CurrentReading is above UpperThresholdFatal, then the Current"
        "State is Fatal.") ]
    sint32 UpperThresholdFatal;

    [Description (
        "An array representing the thresholds supported by this "
        "Sensor."), 
        ValueMap {"0", "1", "2", "3", "4", "5"},  
        Values {"LowerThresholdNonCritical", 
            "UpperThresholdNonCritical",
            "LowerThresholdCritical", "UpperThresholdCritical", 
            "LowerThresholdFatal", "UpperThresholdFatal"} ]
    uint16 SupportedThresholds[];

    [Description (
        "An array representing the thresholds that are currently "
        "enabled for this Sensor."), 
        ValueMap {"0", "1", "2", "3", "4", "5"},  
        Values {"LowerThresholdNonCritical", 
            "UpperThresholdNonCritical", 
            "LowerThresholdCritical", "UpperThresholdCritical", 
            "LowerThresholdFatal", "UpperThresholdFatal"} ]
    uint16 EnabledThresholds[];

    [Description (
        "An array representing the writable thresholds supported by "
        "Sensor."), 
        ValueMap {"0", "1", "2", "3", "4", "5"},  
        Values {"LowerThresholdNonCritical", 
            "UpperThresholdNonCritical", 
            "LowerThresholdCritical", "UpperThresholdCritical", 
            "LowerThresholdFatal", "UpperThresholdFatal"} ]
    uint16 SettableThresholds[];

    [Description (
        "This method resets the values of the thresholds to hardware "
        "defaults. This method returns 0 if successful, 1 if "
        "unsupported and any 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 RestoreDefaultThresholds();

    [Description (
        "For a non-linear Sensor, the resolution, accuracy, tolerance "
        "and hysteresis vary as the current reading moves. This method "
        "can be used to get these factors for a given reading. It "
        "returns 0 if successful, 1 if unsupported, and any 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 GetNonLinearFactors(
       [IN]
       sint32 SensorReading, 
       [IN (false), OUT]
       sint32 Accuracy, 
       [IN (false), OUT]
       uint32 Resolution, 
       [IN (false), OUT]
       sint32 Tolerance, 
       [IN (false), OUT]
       uint32 Hysteresis);
};


// ===================================================================
// DiscreteSensor
// ===================================================================
[Version ("2.6.0"), Description (
    "A DiscreteSensor has a set of legal string values, "
    "that it can report.  These values are enumerated in the "
    "Sensor's PossibleValues property.  A DiscreteSensor will "
    "always have a 'current reading' that corresponds to one of "
    "the enumerated values. \n"
    "Given the addition of the CurrentState and PossibleStates "
    "properties to Sensor, the DiscreteSensor subclass is no longer "
    "necessary, but is retained for backward compatibility. "
    "Information in the CurrentReading and PossibleValues properties "
    "will typically have the same values and semantics as for the "
    "CurrentState and PossibleStates properties, inherited from "
    "Sensor.") ]
class CIM_DiscreteSensor : CIM_Sensor {

    [MaxLen (64), Description (
        "The current value indicated by the Sensor.") ]
    string CurrentReading;

    [MaxLen (64), Description (
        "PossibleValues enumerates the string outputs that can be "
        "reported by the DiscreteSensor.") ]
    string PossibleValues[];
  
    [MaxLen (64), Description (
        "AcceptableValues details which of the PossibleValues strings "
        "are considered 'acceptable' (ie, 'not an error').") ]
    string AcceptableValues[];
};


// ===================================================================
// TemperatureSensor
// ===================================================================
[Version ("2.6.0"), Description (
    "This class exists for backward compatibility to earlier "
    "CIM Schema definitions. With additions to Sensor and Numeric"
    "Sensor in V2.2, it is no longer necessary. A TempertatureSensor "
    "can be defined by setting the SensorType property, inherited "
    "from Sensor, to 2 (\"Temperature\"). Other properties of this "
    "class are hard-coded to constant values to correspond to "
    "definitions in the Sensor hierarchy.") ] 
class CIM_TemperatureSensor : CIM_NumericSensor   {

    [Override(
        "SensorType") ]
    uint16 SensorType = 2;

    [Override(
        "BaseUnits") ]
    uint16 BaseUnits = 2;

    [Override(
        "UnitModifier") ]
    sint32 UnitModifier = -1;

    [Override(
        "RateUnits") ]
    uint16 RateUnits = 0;

    [Override ("CurrentReading"),
        MappingStrings {"MIF.DMTF|Temperature Probe|002.5"} ]
    sint32 CurrentReading;

    [Override ("NominalReading"),
        MappingStrings {"MIF.DMTF|Temperature Probe|002.6"} ]
    sint32 NominalReading;

    [Override ("NormalMax"),
        MappingStrings {"MIF.DMTF|Temperature Probe|002.7"} ]
    sint32 NormalMax;

    [Override ("NormalMin"),
        MappingStrings {"MIF.DMTF|Temperature Probe|002.8"} ]
    sint32 NormalMin;

    [Override ("MaxReadable"),
        MappingStrings {"MIF.DMTF|Temperature Probe|002.9"} ]     
    sint32 MaxReadable;

    [Override ("MinReadable"),
        MappingStrings {"MIF.DMTF|Temperature Probe|002.10"} ]     
    sint32 MinReadable;

    [Override ("Resolution"),
        Units ("Hundredths of Degrees C"),
        MappingStrings {"MIF.DMTF|Temperature Probe|002.17"} ]
    uint32 Resolution;

    [Override ("Tolerance"),
        MappingStrings {"MIF.DMTF|Temperature Probe|002.18"} ]
    sint32 Tolerance;

    [Override ("Accuracy"),
        MappingStrings {"MIF.DMTF|Temperature Probe|002.19"} ]
    sint32 Accuracy;

    [Override ("LowerThresholdNonCritical"),
        MappingStrings {"MIF.DMTF|Temperature Probe|002.11"} ]
    sint32 LowerThresholdNonCritical;

    [Override ("UpperThresholdNonCritical"),
        MappingStrings {"MIF.DMTF|Temperature Probe|002.12"} ]
    sint32 UpperThresholdNonCritical;

    [Override ("LowerThresholdCritical"),
        MappingStrings {"MIF.DMTF|Temperature Probe|002.13"} ]
    sint32 LowerThresholdCritical;

    [Override ("UpperThresholdCritical"),
        MappingStrings {"MIF.DMTF|Temperature Probe|002.14"} ]
    sint32 UpperThresholdCritical;

    [Override ("LowerThresholdFatal"),
        MappingStrings {"MIF.DMTF|Temperature Probe|002.15"} ]
    sint32 LowerThresholdFatal;

    [Override ("UpperThresholdFatal"),
        MappingStrings {"MIF.DMTF|Temperature Probe|002.16"} ]
    sint32 UpperThresholdFatal;
};


// ===================================================================
// CurrentSensor
// ===================================================================
[Version ("2.6.0"), Description (
    "This class exists for backward compatibility to earlier "
    "CIM Schema definitions. With additions to Sensor and Numeric"
    "Sensor in V2.2, it is no longer necessary. A CurrentSensor can "
    "be defined by setting the SensorType property, inherited from "
    "Sensor, to 4 (\"Current\"). Other properties of this class are "
    "hard-coded to constant values to correspond to definitions in "
    "the Sensor hierarchy.") ] 
class CIM_CurrentSensor : CIM_NumericSensor   {

    [Override(
        "SensorType") ]
    uint16 SensorType = 4;

    [Override(
        "BaseUnits") ]
    uint16 BaseUnits = 6;

    [Override(
        "UnitModifier") ]
    sint32 UnitModifier = -3;

    [Override(
        "RateUnits") ]
    uint16 RateUnits = 0;

    [Override ("CurrentReading"),
        MappingStrings {"MIF.DMTF|Electrical Current Probe|001.5"} ]
    sint32 CurrentReading;

    [Override ("NominalReading"),
        MappingStrings {"MIF.DMTF|Electrical Current Probe|001.6"} ]
    sint32 NominalReading;

    [Override ("NormalMax"),
        MappingStrings {"MIF.DMTF|Electrical Current Probe|001.7"} ]
    sint32 NormalMax;

    [Override ("NormalMin"),
        MappingStrings {"MIF.DMTF|Electrical Current Probe|001.8"} ]
    sint32 NormalMin;

    [Override ("MaxReadable"),
        MappingStrings {"MIF.DMTF|Electrical Current Probe|001.9"} ]     
    sint32 MaxReadable;

    [Override ("MinReadable"),
        MappingStrings {"MIF.DMTF|Electrical Current Probe|001.10"} ]     
    sint32 MinReadable;

    [Override ("Resolution"), 
        Units ("Tenths of MilliAmps"),
        MappingStrings {"MIF.DMTF|Electrical Current Probe|001.17"} ]
    uint32 Resolution;

    [Override ("Tolerance"),
        MappingStrings {"MIF.DMTF|Electrical Current Probe|001.18"} ]
    sint32 Tolerance;

    [Override ("Accuracy"), 
        MappingStrings {"MIF.DMTF|Electrical Current Probe|001.19"} ]
    sint32 Accuracy;

    [Override ("LowerThresholdNonCritical"),
        MappingStrings {"MIF.DMTF|Electrical Current Probe|001.11"} ]
    sint32 LowerThresholdNonCritical;

    [Override ("UpperThresholdNonCritical"),
        MappingStrings {"MIF.DMTF|Electrical Current Probe|001.12"} ]
    sint32 UpperThresholdNonCritical;

    [Override ("LowerThresholdCritical"),
        MappingStrings {"MIF.DMTF|Electrical Current Probe|001.13"} ]
    sint32 LowerThresholdCritical;

    [Override ("UpperThresholdCritical"),
        MappingStrings {"MIF.DMTF|Electrical Current Probe|001.14"} ]
    sint32 UpperThresholdCritical;

    [Override ("LowerThresholdFatal"),
        MappingStrings {"MIF.DMTF|Electrical Current Probe|001.15"} ]
    sint32 LowerThresholdFatal;

    [Override ("UpperThresholdFatal"),
        MappingStrings {"MIF.DMTF|Electrical Current Probe|001.16"} ]
    sint32 UpperThresholdFatal;
};


// ===================================================================
// VoltageSensor
// ===================================================================
[Version ("2.6.0"), Description (
    "This class exists for backward compatibility to earlier "
    "CIM Schema definitions. With additions to Sensor and Numeric"
    "Sensor in V2.2, it is no longer necessary. A VoltageSensor can "
    "be defined by setting the SensorType property, inherited from "
    "Sensor, to 3 (\"Voltage\"). Other properties of this class are "
    "hard-coded to constant values to correspond to definitions in "
    "the Sensor hierarchy.") ] 
class CIM_VoltageSensor : CIM_NumericSensor   {

    [Override(
        "SensorType") ]
    uint16 SensorType = 3;

    [Override(
        "BaseUnits") ]
    uint16 BaseUnits = 5;

    [Override(
        "UnitModifier") ]
    sint32 UnitModifier = -3;

    [Override(
        "RateUnits") ]
    uint16 RateUnits = 0;

    [Override ("CurrentReading"),
        MappingStrings {"MIF.DMTF|Voltage Probe|001.5"} ]
    sint32 CurrentReading;

    [Override ("NominalReading"),
        MappingStrings {"MIF.DMTF|Voltage Probe|001.6"} ]
    sint32 NominalReading;

    [Override ("NormalMax"),
        MappingStrings {"MIF.DMTF|Voltage Probe|001.7"} ]
    sint32 NormalMax;

    [Override ("NormalMin"),
        MappingStrings {"MIF.DMTF|Voltage Probe|001.8"} ]
    sint32 NormalMin;

    [Override ("MaxReadable"),
        MappingStrings {"MIF.DMTF|Voltage Probe|001.9"} ]     
    sint32 MaxReadable;
    
    [Override ("MinReadable"),
        MappingStrings {"MIF.DMTF|Voltage Probe|001.10"} ]     
    sint32 MinReadable;

    [Override ("Resolution"), 
        Units ("Tenths of MilliVolts"),
        MappingStrings {"MIF.DMTF|Voltage Probe|001.17"} ]
    uint32 Resolution;

    [Override ("Tolerance"),
        MappingStrings {"MIF.DMTF|Voltage Probe|001.18"} ]
    sint32 Tolerance;

    [Override ("Accuracy"),
        MappingStrings {"MIF.DMTF|Voltage Probe|001.19"} ]
    sint32 Accuracy;

    [Override ("LowerThresholdNonCritical"),
        MappingStrings {"MIF.DMTF|Voltage Probe|001.11"} ]
    sint32 LowerThresholdNonCritical;

    [Override ("UpperThresholdNonCritical"),
        MappingStrings {"MIF.DMTF|Voltage Probe|001.12"} ]
    sint32 UpperThresholdNonCritical;

    [Override ("LowerThresholdCritical"),
        MappingStrings {"MIF.DMTF|Voltage Probe|001.13"} ]
    sint32 LowerThresholdCritical;

    [Override ("UpperThresholdCritical"),
        MappingStrings {"MIF.DMTF|Voltage Probe|001.14"} ]
    sint32 UpperThresholdCritical;

    [Override ("LowerThresholdFatal"),
        MappingStrings {"MIF.DMTF|Voltage Probe|001.15"} ]
    sint32 LowerThresholdFatal;

    [Override ("UpperThresholdFatal"),
        MappingStrings {"MIF.DMTF|Voltage Probe|001.16"} ]
    sint32 UpperThresholdFatal;
};


// ===================================================================
// Tachometer
// ===================================================================
[Version ("2.6.0"), Description (
    "This class exists for backward compatibility to earlier "
    "CIM Schema definitions. With additions to Sensor and Numeric"
    "Sensor in V2.2, it is no longer necessary. A Tachometer can "
    "be defined by setting the SensorType property. inherited from "
    "Sensor, to 5 (\"Tachometer\"). Other properties of this class "
    "are hard-coded to constant values to correspond to definitions "
    "in the Sensor hierarchy.") ] 
class CIM_Tachometer : CIM_NumericSensor   {

    [Override(
        "SensorType") ]
    uint16 SensorType = 5;

    [Override(
        "BaseUnits") ]
    uint16 BaseUnits = 38;

    [Override(
        "UnitModifier") ]
    sint32 UnitModifier = 1;

    [Override(
        "RateUnits") ]
    uint16 RateUnits = 4;

    [Override ("Resolution"), 
        Units ("Tenths of Revolutions per Minute") ]
    uint32 Resolution;
};


// ===================================================================
// AssociatedSupplyVoltageSensor
// ===================================================================
[Association, Version ("2.6.0"), Description (
    "A PowerSupply may have an associated VoltageSensor, monitoring "
    "its input voltage. This is described by this association.") ]
class CIM_AssociatedSupplyVoltageSensor : CIM_AssociatedSensor {

    [Override ("Antecedent"),
        Description ("The VoltageSensor.") ]
    CIM_VoltageSensor REF Antecedent;

    [Override ("Dependent"),
        Description (
            "The PowerSupply associated with the VoltageSensor.") ]
    CIM_PowerSupply REF Dependent;

    [Description (
        "Indicates the PowerSupply's input voltage range measured "
        "by the associated sensor. Range 1, 2 or both can be specified "
        "using the values 2, 3 or 4, respectively."),
        ValueMap {"0", "1", "2", "3", "4"},  
        Values {"Unknown", "Other", "Range 1", "Range 2", 
            "Both Range 1 and 2"} ]
    uint16 MonitoringRange;
};


// ===================================================================
// AssociatedSupplyCurrentSensor
// ===================================================================
[Association, Version ("2.6.0"), Description (
    "A PowerSupply may have an associated CurrentSensor, monitoring "
    "its input frequency. This is described by this association.") ]
class CIM_AssociatedSupplyCurrentSensor : CIM_AssociatedSensor {

    [Override ("Antecedent"),
        Description ("The CurrentSensor.") ]
    CIM_CurrentSensor REF Antecedent;

    [Override ("Dependent"),
        Description (
            "The PowerSupply associated with the CurrentSensor.") ]
    CIM_PowerSupply REF Dependent;

    [Description (
        "Indicates the PowerSupply's input frequency range measured "
        "by the associated sensor. Range 1, 2 or both can be specified "
        "using the values 2, 3 or 4, respectively."),
        ValueMap {"0", "1", "2", "3", "4"},  
        Values {"Unknown", "Other", "Range 1", "Range 2", 
            "Both Range 1 and 2"} ]
    uint16 MonitoringRange;
};

// ==================================================================
// PackageTempSensor 
// ==================================================================
[Association, Version ("2.7.0"), Deprecated {"CIM_PackageDependency"}, 
    Description (
        "Often, a TemperatureSensor is installed in a Package such as "
        "a Chassis or a Rack, not to measure any particular Device, "
        "but the Package's environment in general.  The use of this "
        "association has been deprecated.  Instead, use "
        "PackageDependency to describe this relationship.") ]
class CIM_PackageTempSensor : CIM_PackageDependency {
      
    [Override ("Antecedent"), 
        Deprecated {"CIM_PackageDependency.Antecedent"}, 
        Description (
            "The TemperatureSensor for the Package.") ]
    CIM_TemperatureSensor REF Antecedent;
    
    [Override ("Dependent"),
        Deprecated {"CIM_PackageDependency.Dependent"}, 
        Description (
            "The PhysicalPackage whose environment is monitored.") ]
    CIM_PhysicalPackage REF Dependent;
};


// ====================================================================
// AlarmDevice 
// ===================================================================
[Version ("2.6.0"), Description (
    "An AlarmDevice is a type of Device that emits audible or " 
    "visible indications related to a problem situation.") ]
class CIM_AlarmDevice : CIM_LogicalDevice {

    [Description (
        "Boolean indicating that the Alarm is audible.") ]
    boolean AudibleAlarm;

    [Description (
        "Boolean indicating that the Alarm is visible.") ]
    boolean VisibleAlarm;

    [Description (
        "Boolean indicating that the Alarm causes motion of the "
        "Device.") ]
    boolean MotionAlarm;

    [Description (
        "Urgency is an enumerated value that indicates the relative " 
        "frequency at which the Alarm flashes, vibrates and/or emits "
        "audible tones."),
        ValueMap {"0", "1", "2", "3", "4", "5", "6"},
        Values {"Unknown", "Other", "Not Supported", "Informational", 
            "Non-Critical", "Critical", "Unrecoverable"} ]
    uint16 Urgency;

    [Description ("The current state of the alarm."),
        ValueMap {"0", "1", "2", "3"},
        Values {"Unknown", "Off", "Steady", "Alternating"} ]
    uint16 AlarmState;

    [Description (
        "True indicates that the audio of an AlarmState indicator "
        "has been disabled (i.e. muted). A disabled state here "
        "does not imply that the AlarmState is off.") ]
    boolean AudioIndicatorIsDisabled;
  
    [Description (
        "True indicates that the visual of an AlarmState indicator "
        "has been disabled (i.e. dimmed). A disabled state here "
        "does not imply that the AlarmState is off.") ]
    boolean VisualIndicatorIsDisabled;

    [Description (
        "True indicates that the motion of an AlarmState indicator "
        "has been disabled (i.e. stopped). A disabled state here "
        "does not imply that the AlarmState is off.") ]
    boolean MotionIndicatorIsDisabled;

    [Description (
        "SetAlarmState is a method for defining the current state "
        "of the Alarm. Its input parameter, RequestedAlarmState, is "
        "specified using the Values list of AlarmDevice's AlarmState "
        "property. SetAlarmState returns 0 if the request is "
        "successfully implemented, 1 if the specified RequestedAlarm"
        "State is not supported, and some other value if any other "
        "error occurred. In a subclass, the set of possible return "
        "codes should be specified using a ValueMap qualifier on the "
        "method. The strings to which the ValueMap contents are "
        "'translated' should be specified as a Values array "
        "qualifier.") ]
    uint32 SetAlarmState (
        [IN, 
            ValueMap {"0", "1", "2", "3"},
            Values {"Unknown", "Off", "Steady", "Alternating"} ] 
        uint16 RequestedAlarmState);

    [Description (
        "SetAlarmIndicator is a method for enabling or disabling the "
        "indicator of the AlarmState function, without changing the "
        "current AlarmState. It has 3 input parameters, Audio"
        "Indicator, VisualIndicator and MotionIndicator. For all of "
        "the input parameters, a value of 0 indicates no change to "
        "the AlarmState indicator, 1 indicates Disable, and 2 "
        "indicates Enable. The method returns 0 if the request is "
        "successfully implemented, 1 if the specified request is not "
        "supported, and some other value if any other error occurred. "
        "In a subclass, the set of possible return codes should be "
        "specified using a ValueMap qualifier on the method. The "
        "strings to which the ValueMap contents are 'translated' "
        "should be specified as a Values array qualifier.") ]
    uint32 SetAlarmIndicator (
        [IN, 
            ValueMap {"0", "1", "2"},
            Values {"No Change", "Disable", "Enable"} ] 
        uint16 AudioIndicator, 
        [IN, 
            ValueMap {"0", "1", "2"},
            Values {"No Change", "Disable", "Enable"} ] 
        uint16 VisualIndicator, 
       [IN, 
           ValueMap {"0", "1", "2"},
           Values {"No Change", "Disable", "Enable"} ] 
       uint16 MotionIndicator);

    [Description (
        "SetUrgency is a method for defining the desired urgency " 
        "level for the Alarm. Its input parameter, RequestedUrgency, "
        "is specified using the Values list of AlarmDevice's Urgency "
        "property. SetUrgency returns 0 if the request is successfully "
        "implemented, 1 if the specified Urgency level is not "
        "supported, and some other value if any other error occurred. "
        "In a subclass, the set of possible return codes should be "
        "specified using a ValueMap qualifier on the method. The "
        "strings to which the ValueMap contents are 'translated' "
        "should be specified as a Values array qualifier.") ]
    uint32 SetUrgency (
        [IN, 
            ValueMap {"1", "3", "4", "5", "6"}, 
            Values {"Other", "Informational", "Non-Critical", 
                "Critical", "Unrecoverable"} ] 
        uint16 RequestedUrgency);
};


// ===================================================================
// AssociatedAlarm 
// ===================================================================
[Association, Version ("2.6.0"), Description (
    "LogicalDevices may have one or more AlarmDevices " 
    "associated with them, in order to indicate problem situations. "
    "This relationship is indicated by the AssociatedAlarm "
    "dependency.") ]
class CIM_AssociatedAlarm : CIM_Dependency {

    [Override ("Antecedent"), 
        Description ("The AlarmDevice.") ] 
    CIM_AlarmDevice REF Antecedent;

    [Override ("Dependent"), 
        Description ("The LogicalDevice that is alarmed.") ]
    CIM_LogicalDevice REF Dependent;
};


// ==================================================================
// PackageAlarm 
// ==================================================================
[Association, Version ("2.7.0"), Deprecated {"CIM_PackageDependency"},
    Description (
        "Often, an AlarmDevice is installed as part of a Package, "
        "not to indicate issues with any particular LogicalDevice "
        "or PhysicalComponent, but with the Package's environment "
        "in general, its security state or its overall health. " 
        "The use of this association has been deprecated.  Instead, "
        "use PackageDependency to describe this relationship.") ]
class CIM_PackageAlarm : CIM_PackageDependency {
    
    [Override ("Antecedent"), 
        Deprecated {"CIM_PackageDependency.Antecedent"}, 
        Description (
            "The AlarmDevice for the Package.") ]
    CIM_AlarmDevice REF Antecedent;
    
    [Override ("Dependent"), 
        Deprecated {"CIM_PackageDependency.Dependent"}, 
        Description (
            "The PhysicalPackage whose health, security, environment, "
            "etc. is alarmed.") ]
    CIM_PhysicalPackage REF Dependent;
};


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