/**
 * @license
 * Copyright 2022-2026 Matter.js Authors
 * SPDX-License-Identifier: Apache-2.0
 */
import { Resource } from "#models/Resource.js";
Resource.add({
  tag: "cluster",
  name: "ModeBase",
  pics: "MODB",
  xref: "cluster\xA71.10",
  details: "This cluster provides an interface for controlling a characteristic of a device that can be set to one of several predefined values. For example, the light pattern of a disco ball, the mode of a massage chair, or the wash cycle of a laundry machine.\nThe server allows the client to set a mode on the server. A mode is one of a list of options that may be presented by a client for a user choice, or understood by the client, via the mode's tags.\nA mode tag is either a standard tag within a standard category namespace, or a manufacturer specific tag, within the namespace of the vendor ID of the manufacturer.\nAny derived cluster specification based on this cluster shall support the standard mode tag value definitions and command status definitions defined in this cluster and may define additional standard mode tag values and standard command status values that are supported in the respective derived cluster instances.\nEach cluster ID that indicates this specification shall define a distinct purpose for the cluster instance. For example: A LightBlinking cluster ID supports blinking modes for a light (and is described that way).\nAn anonymous mode shall NOT replace the meaning of a standard mode tag, when one exists, for the cluster purpose.",
  children: [
    {
      tag: "attribute",
      name: "FeatureMap",
      xref: "cluster\xA71.10.4",
      children: [{
        tag: "field",
        name: "DEPONOFF",
        xref: "cluster\xA71.10.4.1",
        details: "This feature creates a dependency between an OnOff cluster instance and this cluster instance on the same endpoint. See OnMode for more information."
      }]
    },
    {
      tag: "attribute",
      name: "SupportedModes",
      xref: "cluster\xA71.10.6.1",
      details: "This attribute shall contain the list of supported modes that may be selected for the CurrentMode attribute. Each item in this list represents a unique mode as indicated by the Mode field of the ModeOptionStruct.\nEach entry in this list shall have a unique value for the Mode field.\nEach entry in this list shall have a unique value for the Label field.\nThe set of ModeTags listed in each entry in this list shall be distinct from the sets of ModeTags listed in the other entries. This comparison shall NOT depend on the order of the ModeTags in the lists. Two sets shall be considered distinct if one of them contains an element that the other one does not. Note that the two sets could have a non-empty intersection, or one could be a subset of the other, and still be distinct.\nSimplified examples of allowed ModeTags lists:\nSimplified examples of disallowed ModeTags lists:"
    },
    {
      tag: "attribute",
      name: "CurrentMode",
      xref: "cluster\xA71.10.6.2",
      details: "Indicates the current mode of the server.\nThe value of this field shall match the Mode field of one of the entries in the SupportedModes attribute.\nThe value of this attribute may change at any time via an out-of-band interaction outside of the server, such as interactions with a user interface, via internal mode changes due to autonomously progressing through a sequence of operations, on system time-outs or idle delays, or via interactions coming from a fabric other than the one which last executed a ChangeToMode."
    },
    {
      tag: "attribute",
      name: "StartUpMode",
      xref: "cluster\xA71.10.6.3",
      details: 'Indicates the desired startup mode for the server when it is supplied with power.\nIf this attribute is not null, the CurrentMode attribute shall be set to the StartUpMode value, when the server is powered up, except in the case when the OnMode attribute overrides the StartUpMode attribute (see Section 1.10.6.4.1, "OnMode with Power Up").\nThis behavior does not apply to reboots associated with OTA. After an OTA restart, the CurrentMode attribute shall return to its value prior to the restart.\nThe value of this field shall match the Mode field of one of the entries in the SupportedModes attribute.\nIf this attribute is not implemented, or is set to the null value, it shall have no effect.'
    },
    {
      tag: "attribute",
      name: "OnMode",
      xref: "cluster\xA71.10.6.4",
      details: "Indicates whether the value of CurrentMode depends on the state of the On/Off cluster on the same endpoint. If this attribute is not present or is set to null, there is no dependency, otherwise the CurrentMode attribute shall depend on the OnOff attribute in the On/Off cluster\nThe value of this field shall match the Mode field of one of the entries in the SupportedModes attribute."
    },
    {
      tag: "command",
      name: "ChangeToMode",
      xref: "cluster\xA71.10.7.1",
      details: "This command is used to change device modes.\nOn receipt of this command the device shall respond with a ChangeToModeResponse command.",
      children: [{
        tag: "field",
        name: "NewMode",
        xref: "cluster\xA71.10.7.1.1",
        details: "If the NewMode field doesn't match the Mode field of any entry of the SupportedModes list, the ChangeToModeResponse command's Status field shall indicate UnsupportedMode and the StatusText field shall be included and may be used to indicate the issue, with a human readable string, or include an empty string.\nIf the NewMode field matches the Mode field of one entry of the SupportedModes list, but the device is not able to transition as requested, the ChangeToModeResponse command shall:\n  - Have the Status set to a product-specific Status value representing the error, or GenericFailure if a more specific error cannot be provided. See Status field for details.\n  - Provide a human readable string in the StatusText field.\nIf the NewMode field matches the Mode field of one entry of the SupportedModes list and the device is able to transition as requested, the server shall transition into the mode associated with NewMode, the ChangeToModeResponse command shall have the Status field set to Success, the StatusText field may be supplied with a human readable string or include an empty string and the CurrentMode field shall be set to the value of the NewMode field.\nIf the NewMode field is the same as the value of the CurrentMode attribute the ChangeToModeResponse command shall have the Status field set to Success and the StatusText field may be supplied with a human readable string or include an empty string."
      }]
    },
    {
      tag: "command",
      name: "ChangeToModeResponse",
      xref: "cluster\xA71.10.7.2",
      details: "This command is sent by the device on receipt of the ChangeToMode command.",
      children: [{ tag: "field", name: "Status", xref: "cluster\xA71.10.7.2.1" }]
    },
    {
      tag: "datatype",
      name: "ModeTagStruct",
      xref: "cluster\xA71.10.5.1",
      details: "A Mode Tag is meant to be interpreted by the client for the purpose the cluster serves.",
      children: [
        {
          tag: "field",
          name: "MfgCode",
          xref: "cluster\xA71.10.5.1.1",
          details: `If the MfgCode field exists, the Value field shall be in the manufacturer-specific value range (see Section 1.10.8, "Mode Namespace").
This field shall indicate the manufacturer's VendorID and it shall determine the meaning of the Value field.
The same manufacturer code and mode tag value in separate cluster instances are part of the same namespace and have the same meaning. For example: a manufacturer tag meaning "pinch" can be used both in a cluster whose purpose is to choose the amount of sugar, or in a cluster whose purpose is to choose the amount of salt.`
        },
        {
          tag: "field",
          name: "Value",
          xref: "cluster\xA71.10.5.1.2",
          details: "This field shall indicate the mode tag within a mode tag namespace which is either manufacturer specific or standard."
        }
      ]
    },
    {
      tag: "datatype",
      name: "ModeOptionStruct",
      xref: "cluster\xA71.10.5.2",
      details: "This is a struct representing a possible mode of the server.",
      children: [
        {
          tag: "field",
          name: "Label",
          xref: "cluster\xA71.10.5.2.1",
          details: "This field shall indicate readable text that describes the mode option, so that a client can provide it to the user to indicate what this option means. This field is meant to be readable and understandable by the user."
        },
        {
          tag: "field",
          name: "Mode",
          xref: "cluster\xA71.10.5.2.2",
          details: "This field is used to identify the mode option."
        },
        {
          tag: "field",
          name: "ModeTags",
          xref: "cluster\xA71.10.5.2.3",
          details: `This field shall contain a list of tags that are associated with the mode option. This may be used by clients to determine the full or the partial semantics of a certain mode, depending on which tags they understand, using standard definitions and/or manufacturer specific namespace definitions.
The standard mode tags are defined in this cluster specification. For the derived cluster instances, if the specification of the derived cluster defines a namespace, the set of standard mode tags also includes the mode tag values from that namespace.
Mode tags can help clients look for options that meet certain criteria, render the user interface, use the mode in an automation, or to craft help text their voice-driven interfaces. A mode tag shall be either a standard tag or a manufacturer specific tag, as defined in each ModeTagStruct list entry.
A mode option may have more than one mode tag. A mode option may be associated with a mixture of standard and manufacturer specific mode tags. A mode option shall be associated with at least one standard mode tag.
Each mode tag in this field shall be distinct from other mode tags in this field. For example, a simplified list containing [Auto, Auto] would not be allowed.
A few examples are provided below.
  - A mode named "100%" can have both the High (manufacturer specific) and Max (standard) mode tag. Clients seeking the mode for either High or Max will find the same mode in this case.
  - A mode that includes a LowEnergy tag can be displayed by the client using a widget icon that shows a green leaf.
  - A mode that includes a LowNoise tag may be used by the client when the user wishes for a lower level of audible sound, less likely to disturb the household's activities.
  - A mode that includes a LowEnergy tag (standard, defined in this cluster specification) and also a Delicate tag (standard, defined in the namespace of a Laundry Mode derived cluster).
  - A mode that includes both a generic Quick tag (defined here), and Vacuum and Mop tags, (defined in the RVC Clean cluster that is a derivation of this cluster).`
        }
      ]
    },
    {
      tag: "datatype",
      name: "ModeChangeStatus",
      children: [
        {
          tag: "field",
          name: "Success",
          description: "Switching to the mode indicated by the NewMode field is allowed and possible. The CurrentMode attribute is set to the value of the NewMode field.",
          xref: "cluster\xA71.10.7.2.1.2"
        },
        {
          tag: "field",
          name: "UnsupportedMode",
          description: "The value of the NewMode field doesn't match any entries in the SupportedModes attribute.",
          xref: "cluster\xA71.10.7.2.1.2"
        },
        {
          tag: "field",
          name: "GenericFailure",
          description: "Generic failure code, indicating that switching to the mode indicated by the NewMode field is not allowed or not possible.",
          xref: "cluster\xA71.10.7.2.1.2"
        },
        {
          tag: "field",
          name: "InvalidInMode",
          description: "The received request cannot be handled due to the current mode of the device",
          xref: "cluster\xA71.10.7.2.1.2"
        }
      ]
    },
    {
      tag: "datatype",
      name: "ModeTag",
      children: [
        { tag: "field", name: "Auto", xref: "cluster\xA71.10.8" },
        { tag: "field", name: "Quick", xref: "cluster\xA71.10.8" },
        { tag: "field", name: "Quiet", xref: "cluster\xA71.10.8" },
        { tag: "field", name: "LowNoise", xref: "cluster\xA71.10.8" },
        { tag: "field", name: "LowEnergy", xref: "cluster\xA71.10.8" },
        { tag: "field", name: "Vacation", xref: "cluster\xA71.10.8" },
        { tag: "field", name: "Min", xref: "cluster\xA71.10.8" },
        { tag: "field", name: "Max", xref: "cluster\xA71.10.8" },
        { tag: "field", name: "Night", xref: "cluster\xA71.10.8" },
        { tag: "field", name: "Day", xref: "cluster\xA71.10.8" }
      ]
    }
  ]
});
//# sourceMappingURL=mode-base.resource.js.map
