// Copyright (c) 2005 DMTF.  All rights reserved.
// <change cr="ArchCR00066.004" type="add">Add UmlPackagePath
// qualifier values to CIM Schema.</change>
// ==================================================================
//  CIM_LogicalDevice 
// ==================================================================
   [Abstract, Version ( "2.8.0" ), 
    UMLPackagePath ( "CIM::Core::Device" ), 
    Description ( 
       "An abstraction or emulation of a hardware entity, that may or "
       "may not be Realized in physical hardware. Any characteristics "
       "of a LogicalDevice that are used to manage its operation or "
       "configuration are contained in, or associated with, the "
       "LogicalDevice object. Examples of the operational properties "
       "of a Printer would be paper sizes supported, or detected "
       "errors. Examples of the configuration properties of a Sensor "
       "Device would be threshold settings. Various configurations "
       "could exist for a LogicalDevice. These configurations could be "
       "contained in Setting objects and associated with the "
       "LogicalDevice." )]
class CIM_LogicalDevice : CIM_EnabledLogicalElement {

      [Key, Description ( "The scoping System\'s CreationClassName." ), 
       MaxLen ( 256 ), 
       Propagated ( "CIM_System.CreationClassName" )]
   string SystemCreationClassName;

      [Key, Description ( "The scoping System\'s Name." ), 
       MaxLen ( 256 ), 
       Propagated ( "CIM_System.Name" )]
   string SystemName;

      [Key, Description ( 
          "CreationClassName indicates the name of the class or the "
          "subclass used in the creation of an instance. When used "
          "with the other key properties of this class, this "
          "property allows all instances of this class and its "
          "subclasses to be uniquely identified." ), 
       MaxLen ( 256 )]
   string CreationClassName;

      [Key, Description ( 
          "An address or other identifying information to uniquely "
          "name the LogicalDevice." ), 
       MaxLen ( 64 )]
   string DeviceID;

      [Deprecated { "CIM_PowerManagementCapabilities" }, 
       Description ( 
          "Boolean indicating that the Device can be power managed. "
          "The use of this property has been deprecated. Instead, "
          "the existence of an associated "
          "PowerManagementCapabilities class (associated using the "
          "ElementCapabilities relationhip) indicates that power "
          "management is supported." )]
   boolean PowerManagementSupported;

      [Deprecated { 
          "CIM_PowerManagementCapabilities.PowerCapabilities" }, 
       Description ( 
          "An enumerated array describing the power management "
          "capabilities of the Device. The use of this property has "
          "been deprecated. Instead, the PowerCapabilites property "
          "in an associated PowerManagementCapabilities class "
          "should be used." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7" }, 
       Values { "Unknown", "Not Supported", "Disabled", "Enabled", 
          "Power Saving Modes Entered Automatically", 
          "Power State Settable", "Power Cycling Supported", 
          "Timed Power On Supported" }]
   uint16 PowerManagementCapabilities[];

      [Description ( 
          "The primary availability and status of the Device. "
          "(Additional status information can be specified using "
          "the Additional Availability array property.) For "
          "example, the Availability property indicates that the "
          "Device is running and has full power (value=3), or is in "
          "a warning (4), test (5), degraded (10) or power save "
          "state (values 13-15 and 17). Regarding the Power Save "
          "states, these are defined as follows: Value 13 (\"Power "
          "Save - Unknown\") indicates that the Device is known to "
          "be in a power save mode, but its exact status in this "
          "mode is unknown; 14 (\"Power Save - Low Power Mode\") "
          "indicates that the Device is in a power save state but "
          "still functioning, and may exhibit degraded performance; "
          "15 (\"Power Save - Standby\") describes that the Device "
          "is not functioning but could be brought to full power "
          "\'quickly\'; and value 17 (\"Power Save - Warning\") "
          "indicates that the Device is in a warning state, though "
          "also in a power save mode." ), 
       ValueMap { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", 
          "11", "12", "13", "14", "15", "16", "17", "18", "19", 
          "20", "21" }, 
       Values { "Other", "Unknown", "Running/Full Power", "Warning", 
          "In Test", "Not Applicable", "Power Off", "Off Line", 
          "Off Duty", "Degraded", "Not Installed", "Install Error", 
          "Power Save - Unknown", "Power Save - Low Power Mode", 
          "Power Save - Standby", "Power Cycle", 
          "Power Save - Warning", "Paused", "Not Ready", 
          "Not Configured", "Quiesced" }, 
       MappingStrings { "MIF.DMTF|Operational State|006.5", 
          "MIB.IETF|HOST-RESOURCES-MIB.hrDeviceStatus", 
          "MIF.DMTF|Host Device|001.5" }, 
       ModelCorrespondence { 
          "CIM_LogicalDevice.AdditionalAvailability" }]
   uint16 Availability;

      [Deprecated { "CIM_EnabledLogicalElement.EnabledState" }, 
       Description ( 
          "The StatusInfo property indicates whether the Logical "
          "Device is in an enabled (value = 3), disabled (value = "
          "4) or some other (1) or unknown (2) state. If this "
          "property does not apply to the LogicalDevice, the value, "
          "5 (\"Not Applicable\"), should be used. StatusInfo has "
          "been deprecated in lieu of a more clearly named property "
          "with additional enumerated values (EnabledState), that "
          "is inherited from ManagedSystemElement. \n"
          "If a Device is (\"Enabled\")(value=3), it has been "
          "powered up, and is configured and operational. The "
          "Device may or may not be functionally active, depending "
          "on whether its Availability (or AdditionalAvailability) "
          "indicate that it is (\"Running/Full Power\")(value=3) or "
          "(\"Off line\") (value=8). In an enabled but offline "
          "mode, a Device may be performing out-of-band requests, "
          "such as running Diagnostics. If (\"Disabled\") "
          "StatusInfo value=4), a Device can only be \"enabled\" or "
          "powered off. In a personal computer environment, "
          "(\"Disabled\") means that the Device\'s driver is not "
          "available in the stack. In other environments, a Device "
          "can be disabled by removing its configuration file. A "
          "disabled device is physically present in a System and "
          "consuming resources, but can not be communicated with "
          "until a load of a driver, a load of a configuration file "
          "or some other \"enabling\" activity has occurred." ), 
       ValueMap { "1", "2", "3", "4", "5" }, 
       Values { "Other", "Unknown", "Enabled", "Disabled", 
          "Not Applicable" }, 
       MappingStrings { "MIF.DMTF|Operational State|006.4" }]
   uint16 StatusInfo;

      [Deprecated { "CIM_DeviceErrorData.LastErrorCode" }, 
       Description ( 
          "LastErrorCode captures the last error code reported by "
          "the LogicalDevice." )]
   uint32 LastErrorCode;

      [Deprecated { "CIM_DeviceErrorData.ErrorDescription" }, 
       Description ( 
          "ErrorDescription is a free-form string supplying more "
          "information about the error recorded in LastErrorCode, "
          "and information on any corrective actions that may be "
          "taken." )]
   string ErrorDescription;

      [Deprecated { "CIM_ManagedSystemElement.OperationalStatus" }, 
       Description ( 
          "ErrorCleared is a boolean property indicating that the "
          "error reported in LastErrorCode is now cleared." )]
   boolean ErrorCleared;

      [Description ( 
          "OtherIdentifyingInfo captures additional data, beyond "
          "DeviceID information, that could be used to identify a "
          "LogicalDevice. One example would be to hold the "
          "Operating System\'s user friendly name for the Device in "
          "this property." ), 
       ArrayType ( "Indexed" ), 
       MaxLen ( 256 ), 
       ModelCorrespondence { 
          "CIM_LogicalDevice.IdentifyingDescriptions" }]
   string OtherIdentifyingInfo[];

      [Description ( 
          "The number of consecutive hours that this Device has "
          "been powered, since its last power cycle." ), 
       Units ( "Hours" ), 
       Counter]
   uint64 PowerOnHours;

      [Description ( 
          "The total number of hours that this Device has been powered."
           ), 
       Units ( "Hours" ), 
       Counter]
   uint64 TotalPowerOnHours;

      [Description ( 
          "An array of free-form strings providing explanations and "
          "details behind the entries in the OtherIdentifyingInfo "
          "array. Note, each entry of this array is related to the "
          "entry in OtherIdentifyingInfo that is located at the "
          "same index." ), 
       ArrayType ( "Indexed" ), 
       ModelCorrespondence { "CIM_LogicalDevice.OtherIdentifyingInfo" }]
   string IdentifyingDescriptions[];

      [Description ( 
          "Additional availability and status of the Device, beyond "
          "that specified in the Availability property. The "
          "Availability property denotes the primary status and "
          "availability of the Device. In some cases, this will not "
          "be sufficient to denote the complete status of the "
          "Device. In those cases, the AdditionalAvailability "
          "property can be used to provide further information. For "
          "example, a Device\'s primary Availability may be \"Off "
          "line\" (value=8), but it may also be in a low power "
          "state (AdditonalAvailability value=14), or the Device "
          "could be running Diagnostics (AdditionalAvailability "
          "value=5, \"In Test\")." ), 
       ValueMap { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", 
          "11", "12", "13", "14", "15", "16", "17", "18", "19", 
          "20", "21" }, 
       Values { "Other", "Unknown", "Running/Full Power", "Warning", 
          "In Test", "Not Applicable", "Power Off", "Off Line", 
          "Off Duty", "Degraded", "Not Installed", "Install Error", 
          "Power Save - Unknown", "Power Save - Low Power Mode", 
          "Power Save - Standby", "Power Cycle", 
          "Power Save - Warning", "Paused", "Not Ready", 
          "Not Configured", "Quiesced" }, 
       ModelCorrespondence { "CIM_LogicalDevice.Availability" }]
   uint16 AdditionalAvailability[];

      [Deprecated { "No value" }, 
       Description ( 
          "The MaxQuiesceTime property has been deprecated. When "
          "evaluating the use of Quiesce, it was determine that "
          "this single property is not adequate for describing when "
          "a device will automatically exit a quiescent state. In "
          "fact, the most likely scenario for a device to exit a "
          "quiescent state was determined to be based on the number "
          "of outstanding requests queued rather than on a maximum "
          "time. This will be re-evaluated and repositioned later. \n"
          "Maximum time in milliseconds, that a Device can run in a "
          "\"Quiesced\" state. A Device\'s state is defined in its "
          "Availability and AdditionalAvailability properties, "
          "where \"Quiesced\" is conveyed by the value 21. What "
          "occurs at the end of the time limit is device-specific. "
          "The Device may unquiesce, may offline or take other "
          "action. A value of 0 indicates that a Device can remain "
          "quiesced indefinitely." ), 
       Units ( "MilliSeconds" )]
   uint64 MaxQuiesceTime;


      [Deprecated { "CIM_PowerManagementService.SetPowerState" }, 
       Description ( 
          "Sets the power state of the Device. The use of this "
          "method has been deprecated. Instead, use the "
          "SetPowerState method in the associated "
          "PowerManagementService class." )]
   uint32 SetPowerState(
         [IN, Description ( "The power state to set." ), 
          ValueMap { "1", "2", "3", "4", "5", "6" }, 
          Values { "Full Power", "Power Save - Low Power Mode", 
             "Power Save - Standby", "Power Save - Other", 
             "Power Cycle", "Power Off" }]
      uint16 PowerState, 
         [IN, Description ( 
             "Time indicates when the power state should be set, "
             "either as a regular date-time value or as an "
             "interval value (where the interval begins when the "
             "method invocation is received." )]
      datetime Time);

      [Description ( 
          "Requests a reset of the LogicalDevice. 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 Reset(
);

      [Deprecated { "CIM_EnabledLogicalElement.RequestStateChange" }, 
       Description ( 
          "The EnableDevice method has been deprecated in lieu of "
          "the more general RequestStateChange method that directly "
          "overlaps with the functionality provided by this method. \n"
          "Requests that the LogicalDevice be enabled (\"Enabled\" "
          "input parameter = TRUE) or disabled (= FALSE). If "
          "successful, the Device\'s StatusInfo/EnabledState "
          "properties should reflect the desired state "
          "(enabled/disabled). Note that this method\'s function "
          "overlaps with the RequestedState property. "
          "RequestedState was added to the model to maintain a "
          "record (i.e., a persisted value) of the last state "
          "request. Invoking the EnableDevice method should set the "
          "RequestedState property appropriately. \n"
          "The return code 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 EnableDevice(
         [IN, Description ( 
             "If TRUE enable the device, if FALSE disable the device."
              )]
      boolean Enabled);

      [Deprecated { "CIM_EnabledLogicalElement.RequestStateChange" }, 
       Description ( 
          "The OnlineDevice method has been deprecated in lieu of "
          "the more general RequestStateChange method that directly "
          "overlaps with the functionality provided by this method. \n"
          "Requests that the LogicalDevice be brought online "
          "(\"Online\" input parameter = TRUE) or taken offline (= "
          "FALSE). \"Online\" indicates that the Device is ready to "
          "accept requests, and is operational and fully "
          "functioning. In this case, the Device\'s Availability "
          "property would be set to a value of 3 (\"Running/Full "
          "Power\"). \"Offline\" indicates that a Device is powered "
          "up and operational, but not processing functional "
          "requests. In an offline state, a Device may be capable "
          "of running diagnostics or generating operational alerts. "
          "For example, when the \"Offline\" button is pushed on a "
          "Printer, the Device is no longer available to process "
          "print jobs, but could be available for diagnostics or "
          "maintenance. \n"
          "If this method is successful, the Device\'s Availability "
          "and AdditionalAvailability properties should reflect the "
          "updated status. If a failure occurs trying to bring the "
          "Device online or offline, it should remain in its "
          "current state. IE, the request, if unsuccessful, should "
          "not leave the Device in an indeterminate state. When "
          "bringing a Device back \"Online\", from an \"Offline\" "
          "mode, the Device should be restored to its last \"Online\" "
          "state, if at all possible. Only a Device that has an "
          "EnabledState/StatusInfo of \"Enabled\" and has been "
          "configured can be brought online or taken offline. \n"
          "OnlineDevice should return 0 if successful, 1 if the "
          "request is not supported at all, 2 if the request is not "
          "supported due to the current state of the Device, and "
          "some other value if any other 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. \n"
          "Note that this method\'s function overlaps with the "
          "RequestedState property. RequestedState was added to the "
          "model to maintain a record (i.e., a persisted value) of "
          "the last state request. Invoking the OnlineDevice method "
          "should set the RequestedState property appropriately." )]
   uint32 OnlineDevice(
         [IN, Description ( 
             "If TRUE, take the device online, if FALSE, take "
             "the device OFFLINE." )]
      boolean Online);

      [Deprecated { "CIM_EnabledLogicalElement.RequestStateChange" }, 
       Description ( 
          "The QuiesceDevice method has been deprecated in lieu of "
          "the more general RequestStateChange method that directly "
          "overlaps with the functionality provided by this method. \n"
          "Requests that the LogicalDevice cleanly cease all "
          "current activity (\"Quiesce\" input parameter = TRUE) or "
          "resume activity (= FALSE). For this method to quiesce a "
          "Device, that Device should have an Availability (or "
          "Additional Availability) of \"Running/Full Power\" "
          "(value=3) and an EnabledStatus/StatusInfo of \"Enabled\". "
          "For example, if quiesced, a Device may then be offlined "
          "for diagnostics, or disabled for power off and hot swap. "
          "For the method to \"unquiesce\" a Device, that Device "
          "should have an Availability (or AdditionalAvailability) "
          "of \"Quiesced\" (value=21) and an "
          "EnabledStatus/StatusInfo of \"Enabled\". In this case, "
          "the Device would be returned to an \"Enabled\" and "
          "\"Running/Full Power\" status. \n"
          "The method\'s return code should indicate the success or "
          "failure of the quiesce. It should return 0 if "
          "successful, 1 if the request is not supported at all, 2 "
          "if the request is not supported due to the current state "
          "of the Device, and some other value if any other 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 QuiesceDevice(
         [IN, Description ( 
             "If set to TRUE then cleanly cease all activity, if "
             "FALSE resume activity." )]
      boolean Quiesce);

      [Description ( 
          "Requests that the Device capture its current "
          "configuration, setup and/or state information in a "
          "backing store. The goal would be to use this information "
          "at a later time (via the RestoreProperties method), to "
          "return a Device to its present \"condition\". This "
          "method may not be supported by all Devices. The method "
          "should return 0 if successful, 1 if the request is not "
          "supported, and some other value if any other 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 SaveProperties(
);

      [Description ( 
          "Requests that the Device re-establish its configuration, "
          "setup and/or state information from a backing store. The "
          "intent is to capture this information at an earlier time "
          "(via the SaveProperties method), and use it to return a "
          "Device to this earlier \"condition\". This method may "
          "not be supported by all Devices. The method should "
          "return 0 if successful, 1 if the request is not "
          "supported, and some other value if any other 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 RestoreProperties(
);

};
