// Copyright (c) 2007 DMTF.  All rights reserved.
// <change cr="CIMCoreCR00786.001" type ="change">Add write qualifier
// to LowerThresholdNonCritical, UpperThresholdNonCritical,
// LowerThresholdCritical, UpperThresholdCritical, LowerThresholdFatal,
// UpperThresholdFatal.</
// <change cr="ArchCR00066.004" type="add">Add UmlPackagePath
// qualifier values to CIM Schema.</change>
// <change cr="ArchCR00089.003" type="add">Add PUnit qualifier values
// to Units qualifier values.</change>
// <change cr="CIMCoreCR942" type="add">Added Pascals to BaseUnit </change>
// ==================================================================
//  CIM_NumericSensor
// ==================================================================
   [Version ( "2.16.0" ), 
    UMLPackagePath ( "CIM::Device::Sensors" ), 
    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", "66" }, 
       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", "Pascals" }, 
       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." ), 
       MappingStrings { "MIF.DMTF|Temperature Probe|002.5", 
          "MIF.DMTF|Electrical Current Probe|001.5", 
          "MIF.DMTF|Voltage Probe|001.5" }]
   sint32 CurrentReading;

      [Description ( 
          "NominalReading indicates the \'normal\' or expected "
          "value for the NumericSensor." ), 
       MappingStrings { "MIF.DMTF|Temperature Probe|002.6", 
          "MIF.DMTF|Electrical Current Probe|001.6", 
          "MIF.DMTF|Voltage Probe|001.6" }]
   sint32 NominalReading;

      [Description ( 
          "NormalMax provides guidance for the user as to the "
          "normal maximum range for the NumericSensor." ), 
       MappingStrings { "MIF.DMTF|Temperature Probe|002.7", 
          "MIF.DMTF|Electrical Current Probe|001.7", 
          "MIF.DMTF|Voltage Probe|001.7" }]
   sint32 NormalMax;

      [Description ( 
          "NormalMin provides guidance for the user as to the "
          "normal minimum range for the NumericSensor." ), 
       MappingStrings { "MIF.DMTF|Temperature Probe|002.8", 
          "MIF.DMTF|Electrical Current Probe|001.8", 
          "MIF.DMTF|Voltage Probe|001.8" }]
   sint32 NormalMin;

      [Description ( 
          "MaxReadable indicates the largest value of the measured "
          "property that can be read by the NumericSensor." ), 
       MappingStrings { "MIF.DMTF|Temperature Probe|002.9", 
          "MIF.DMTF|Electrical Current Probe|001.9", 
          "MIF.DMTF|Voltage Probe|001.9" }]
   sint32 MaxReadable;

      [Description ( 
          "MinReadable indicates the smallest value of the measured "
          "property that can be read by the NumericSensor." ), 
       MappingStrings { "MIF.DMTF|Temperature Probe|002.10", 
          "MIF.DMTF|Electrical Current Probe|001.10", 
          "MIF.DMTF|Voltage Probe|001.10" }]
   sint32 MinReadable;

      [Description ( 
          "Resolution indicates the ability of the Sensor to "
          "resolve differences in the measured property. The units "
          "for this measurement are determined by "
          "BaseUnit*UnitModifier/RateUnit." ), 
       MappingStrings { "MIF.DMTF|Temperature Probe|002.17", 
          "MIF.DMTF|Electrical Current Probe|001.17", 
          "MIF.DMTF|Voltage Probe|001.17" }]
   uint32 Resolution;

      [Deprecated { "CIM_NumericSensor.Resolution", 
          "CIM_NumericSensor.Accuracy" }, 
       Description ( 
          "This property is being deprecated in lieu of using the "
          "Resolution and Accuracy properties. \n"
          "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, 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" ), 
       MappingStrings { "MIF.DMTF|Temperature Probe|002.19", 
          "MIF.DMTF|Electrical Current Probe|001.19", 
          "MIF.DMTF|Voltage Probe|001.19" }, 
       PUnit ( "percent * 10^-2" )]
   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. The units for this measurement are determined by "
          "BaseUnit*UnitModifier/RateUnit." )]
   uint32 Hysteresis;

      [Write, 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." ), 
       MappingStrings { "MIF.DMTF|Temperature Probe|002.11", 
          "MIF.DMTF|Electrical Current Probe|001.11", 
          "MIF.DMTF|Voltage Probe|001.11" }]
   sint32 LowerThresholdNonCritical;

      [Write, 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." ), 
       MappingStrings { "MIF.DMTF|Temperature Probe|002.12", 
          "MIF.DMTF|Electrical Current Probe|001.12", 
          "MIF.DMTF|Voltage Probe|001.12" }]
   sint32 UpperThresholdNonCritical;

      [Write, 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." ), 
       MappingStrings { "MIF.DMTF|Temperature Probe|002.13", 
          "MIF.DMTF|Electrical Current Probe|001.13", 
          "MIF.DMTF|Voltage Probe|001.13" }]
   sint32 LowerThresholdCritical;

      [Write, 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." ), 
       MappingStrings { "MIF.DMTF|Temperature Probe|002.14", 
          "MIF.DMTF|Electrical Current Probe|001.14", 
          "MIF.DMTF|Voltage Probe|001.14" }]
   sint32 UpperThresholdCritical;

      [Write, 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." ), 
       MappingStrings { "MIF.DMTF|Temperature Probe|002.15", 
          "MIF.DMTF|Electrical Current Probe|001.15", 
          "MIF.DMTF|Voltage Probe|001.15" }]
   sint32 LowerThresholdFatal;

      [Write, 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." ), 
       MappingStrings { "MIF.DMTF|Temperature Probe|002.16", 
          "MIF.DMTF|Electrical Current Probe|001.16", 
          "MIF.DMTF|Voltage Probe|001.16" }]
   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(
);

      [Deprecated { "No Value" }, 
       Description ( 
          "The use of this method is being deprecated, since "
          "Current senor reading can be retrieved through the "
          "GetInstance operation. \n"
          "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, Description ( 
             "The sensor reading to get information for." )]
      sint32 SensorReading, 
         [IN ( false ), OUT, Description ( 
             "The accuracy of the reading." )]
      sint32 Accuracy, 
         [IN ( false ), OUT, Description ( 
             "The resolution of the reading." )]
      uint32 Resolution, 
         [IN ( false ), OUT, Description ( 
             "The tolerance of the reading." )]
      sint32 Tolerance, 
         [IN ( false ), OUT, Description ( 
             "The Hysteresis of the reading." )]
      uint32 Hysteresis);

};
