text: /*
   *
   *    Copyright (c) 2021 Project CHIP Authors
   *
   *    Licensed under the Apache License, Version 2.0 (the "License");
   *    you may not use this file except in compliance with the License.
   *    You may obtain a copy of the License at
   *
   *        http://www.apache.org/licenses/LICENSE-2.0
   *
   *    Unless required by applicable law or agreed to in writing, software
   *    distributed under the License is distributed on an "AS IS" BASIS,
   *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *    See the License for the specific language governing permissions and
   *    limitations under the License.
   */
  
  // THIS FILE IS GENERATED BY ZAP
  
  // Prevent multiple inclusion
  #pragma once
  
  #include <controller/CHIPCluster.h>
  #include <core/CHIPCallback.h>
  #include <lib/support/Span.h>
  
  namespace chip {
  namespace Controller {
  
  constexpr ClusterId kAccountLoginClusterId                = 0x050E;
  constexpr ClusterId kApplicationBasicClusterId            = 0x050D;
  constexpr ClusterId kApplicationLauncherClusterId         = 0x050C;
  constexpr ClusterId kAudioOutputClusterId                 = 0x050B;
  constexpr ClusterId kBarrierControlClusterId              = 0x0103;
  constexpr ClusterId kBasicClusterId                       = 0x0028;
  constexpr ClusterId kBinaryInputBasicClusterId            = 0x000F;
  constexpr ClusterId kBindingClusterId                     = 0xF000;
  constexpr ClusterId kBridgedDeviceBasicClusterId          = 0x0039;
  constexpr ClusterId kColorControlClusterId                = 0x0300;
  constexpr ClusterId kContentLaunchClusterId               = 0x050A;
  constexpr ClusterId kDescriptorClusterId                  = 0x001D;
  constexpr ClusterId kDoorLockClusterId                    = 0x0101;
  constexpr ClusterId kEthernetNetworkDiagnosticsClusterId  = 0x0037;
  constexpr ClusterId kFixedLabelClusterId                  = 0x0040;
  constexpr ClusterId kGeneralCommissioningClusterId        = 0x0030;
  constexpr ClusterId kGeneralDiagnosticsClusterId          = 0x0033;
  constexpr ClusterId kGroupKeyManagementClusterId          = 0xF004;
  constexpr ClusterId kGroupsClusterId                      = 0x0004;
  constexpr ClusterId kIdentifyClusterId                    = 0x0003;
  constexpr ClusterId kKeypadInputClusterId                 = 0x0509;
  constexpr ClusterId kLevelControlClusterId                = 0x0008;
  constexpr ClusterId kLowPowerClusterId                    = 0x0508;
  constexpr ClusterId kMediaInputClusterId                  = 0x0507;
  constexpr ClusterId kMediaPlaybackClusterId               = 0x0506;
  constexpr ClusterId kNetworkCommissioningClusterId        = 0x0031;
  constexpr ClusterId kOtaSoftwareUpdateServerClusterId     = 0x0029;
  constexpr ClusterId kOnOffClusterId                       = 0x0006;
  constexpr ClusterId kOperationalCredentialsClusterId      = 0x003E;
  constexpr ClusterId kPumpConfigurationAndControlClusterId = 0x0200;
  constexpr ClusterId kRelativeHumidityMeasurementClusterId = 0x0405;
  constexpr ClusterId kScenesClusterId                      = 0x0005;
  constexpr ClusterId kSoftwareDiagnosticsClusterId         = 0x0034;
  constexpr ClusterId kSwitchClusterId                      = 0x003B;
  constexpr ClusterId kTvChannelClusterId                   = 0x0504;
  constexpr ClusterId kTargetNavigatorClusterId             = 0x0505;
  constexpr ClusterId kTemperatureMeasurementClusterId      = 0x0402;
  constexpr ClusterId kTestClusterClusterId                 = 0x050F;
  constexpr ClusterId kThermostatClusterId                  = 0x0201;
  constexpr ClusterId kThreadNetworkDiagnosticsClusterId    = 0x0035;
  constexpr ClusterId kWakeOnLanClusterId                   = 0x0503;
  constexpr ClusterId kWindowCoveringClusterId              = 0x0102;
  
  class DLL_EXPORT AccountLoginCluster : public ClusterBase
  {
  public:
      AccountLoginCluster() : ClusterBase(kAccountLoginClusterId) {}
      ~AccountLoginCluster() {}
  
      // Cluster Commands
      CHIP_ERROR GetSetupPIN(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                             chip::ByteSpan tempAccountIdentifier);
      CHIP_ERROR Login(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                       chip::ByteSpan tempAccountIdentifier, chip::ByteSpan setupPIN);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
  private:
      static constexpr CommandId kGetSetupPINCommandId = 0x00;
      static constexpr CommandId kLoginCommandId       = 0x01;
  };
  
  class DLL_EXPORT ApplicationBasicCluster : public ClusterBase
  {
  public:
      ApplicationBasicCluster() : ClusterBase(kApplicationBasicClusterId) {}
      ~ApplicationBasicCluster() {}
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeVendorName(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeVendorId(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeApplicationName(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeProductId(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeApplicationId(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeCatalogVendorId(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeApplicationSatus(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  };
  
  class DLL_EXPORT ApplicationLauncherCluster : public ClusterBase
  {
  public:
      ApplicationLauncherCluster() : ClusterBase(kApplicationLauncherClusterId) {}
      ~ApplicationLauncherCluster() {}
  
      // Cluster Commands
      CHIP_ERROR LaunchApp(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, chip::ByteSpan data,
                           uint16_t catalogVendorId, chip::ByteSpan applicationId);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeApplicationLauncherList(Callback::Cancelable * onSuccessCallback,
                                                      Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
  private:
      static constexpr CommandId kLaunchAppCommandId = 0x00;
  };
  
  class DLL_EXPORT AudioOutputCluster : public ClusterBase
  {
  public:
      AudioOutputCluster() : ClusterBase(kAudioOutputClusterId) {}
      ~AudioOutputCluster() {}
  
      // Cluster Commands
      CHIP_ERROR RenameOutput(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t index,
                              chip::ByteSpan name);
      CHIP_ERROR SelectOutput(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t index);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeAudioOutputList(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
  private:
      static constexpr CommandId kRenameOutputCommandId = 0x01;
      static constexpr CommandId kSelectOutputCommandId = 0x00;
  };
  
  class DLL_EXPORT BarrierControlCluster : public ClusterBase
  {
  public:
      BarrierControlCluster() : ClusterBase(kBarrierControlClusterId) {}
      ~BarrierControlCluster() {}
  
      // Cluster Commands
      CHIP_ERROR BarrierControlGoToPercent(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                           uint8_t percentOpen);
      CHIP_ERROR BarrierControlStop(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeBarrierMovingState(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeBarrierSafetyStatus(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeBarrierCapabilities(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeBarrierPosition(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
  private:
      static constexpr CommandId kBarrierControlGoToPercentCommandId = 0x00;
      static constexpr CommandId kBarrierControlStopCommandId        = 0x01;
  };
  
  class DLL_EXPORT BasicCluster : public ClusterBase
  {
  public:
      BasicCluster() : ClusterBase(kBasicClusterId) {}
      ~BasicCluster() {}
  
      // Cluster Commands
      CHIP_ERROR MfgSpecificPing(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeInteractionModelVersion(Callback::Cancelable * onSuccessCallback,
                                                      Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeVendorName(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeVendorID(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeProductName(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeProductID(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeUserLabel(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeLocation(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeHardwareVersion(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeHardwareVersionString(Callback::Cancelable * onSuccessCallback,
                                                    Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeSoftwareVersion(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeSoftwareVersionString(Callback::Cancelable * onSuccessCallback,
                                                    Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeManufacturingDate(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributePartNumber(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeProductURL(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeProductLabel(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeSerialNumber(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeLocalConfigDisabled(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR WriteAttributeUserLabel(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                         chip::ByteSpan value);
      CHIP_ERROR WriteAttributeLocation(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                        chip::ByteSpan value);
      CHIP_ERROR WriteAttributeLocalConfigDisabled(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                                   uint8_t value);
  
  private:
      static constexpr CommandId kMfgSpecificPingCommandId = 0x00;
  };
  
  class DLL_EXPORT BinaryInputBasicCluster : public ClusterBase
  {
  public:
      BinaryInputBasicCluster() : ClusterBase(kBinaryInputBasicClusterId) {}
      ~BinaryInputBasicCluster() {}
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeOutOfService(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributePresentValue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeStatusFlags(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR WriteAttributeOutOfService(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                            uint8_t value);
      CHIP_ERROR WriteAttributePresentValue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                            uint8_t value);
      CHIP_ERROR ConfigureAttributePresentValue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                                uint16_t minInterval, uint16_t maxInterval);
      CHIP_ERROR ReportAttributePresentValue(Callback::Cancelable * onReportCallback);
      CHIP_ERROR ConfigureAttributeStatusFlags(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                               uint16_t minInterval, uint16_t maxInterval);
      CHIP_ERROR ReportAttributeStatusFlags(Callback::Cancelable * onReportCallback);
  };
  
  class DLL_EXPORT BindingCluster : public ClusterBase
  {
  public:
      BindingCluster() : ClusterBase(kBindingClusterId) {}
      ~BindingCluster() {}
  
      // Cluster Commands
      CHIP_ERROR Bind(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, chip::NodeId nodeId,
                      chip::GroupId groupId, chip::EndpointId endpointId, chip::ClusterId clusterId);
      CHIP_ERROR Unbind(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, chip::NodeId nodeId,
                        chip::GroupId groupId, chip::EndpointId endpointId, chip::ClusterId clusterId);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
  private:
      static constexpr CommandId kBindCommandId   = 0x00;
      static constexpr CommandId kUnbindCommandId = 0x01;
  };
  
  class DLL_EXPORT BridgedDeviceBasicCluster : public ClusterBase
  {
  public:
      BridgedDeviceBasicCluster() : ClusterBase(kBridgedDeviceBasicClusterId) {}
      ~BridgedDeviceBasicCluster() {}
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeVendorName(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeVendorID(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeProductName(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeUserLabel(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeHardwareVersion(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeHardwareVersionString(Callback::Cancelable * onSuccessCallback,
                                                    Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeSoftwareVersion(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeSoftwareVersionString(Callback::Cancelable * onSuccessCallback,
                                                    Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeManufacturingDate(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributePartNumber(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeProductURL(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeProductLabel(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeSerialNumber(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeReachable(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR WriteAttributeUserLabel(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                         chip::ByteSpan value);
  };
  
  class DLL_EXPORT ColorControlCluster : public ClusterBase
  {
  public:
      ColorControlCluster() : ClusterBase(kColorControlClusterId) {}
      ~ColorControlCluster() {}
  
      // Cluster Commands
      CHIP_ERROR MoveColor(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, int16_t rateX,
                           int16_t rateY, uint8_t optionsMask, uint8_t optionsOverride);
      CHIP_ERROR MoveColorTemperature(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                      uint8_t moveMode, uint16_t rate, uint16_t colorTemperatureMinimum,
                                      uint16_t colorTemperatureMaximum, uint8_t optionsMask, uint8_t optionsOverride);
      CHIP_ERROR MoveHue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t moveMode,
                         uint8_t rate, uint8_t optionsMask, uint8_t optionsOverride);
      CHIP_ERROR MoveSaturation(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t moveMode,
                                uint8_t rate, uint8_t optionsMask, uint8_t optionsOverride);
      CHIP_ERROR MoveToColor(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t colorX,
                             uint16_t colorY, uint16_t transitionTime, uint8_t optionsMask, uint8_t optionsOverride);
      CHIP_ERROR MoveToColorTemperature(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                        uint16_t colorTemperature, uint16_t transitionTime, uint8_t optionsMask,
                                        uint8_t optionsOverride);
      CHIP_ERROR MoveToHue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t hue,
                           uint8_t direction, uint16_t transitionTime, uint8_t optionsMask, uint8_t optionsOverride);
      CHIP_ERROR MoveToHueAndSaturation(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                        uint8_t hue, uint8_t saturation, uint16_t transitionTime, uint8_t optionsMask,
                                        uint8_t optionsOverride);
      CHIP_ERROR MoveToSaturation(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                  uint8_t saturation, uint16_t transitionTime, uint8_t optionsMask, uint8_t optionsOverride);
      CHIP_ERROR StepColor(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, int16_t stepX,
                           int16_t stepY, uint16_t transitionTime, uint8_t optionsMask, uint8_t optionsOverride);
      CHIP_ERROR StepColorTemperature(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                      uint8_t stepMode, uint16_t stepSize, uint16_t transitionTime, uint16_t colorTemperatureMinimum,
                                      uint16_t colorTemperatureMaximum, uint8_t optionsMask, uint8_t optionsOverride);
      CHIP_ERROR StepHue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t stepMode,
                         uint8_t stepSize, uint8_t transitionTime, uint8_t optionsMask, uint8_t optionsOverride);
      CHIP_ERROR StepSaturation(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t stepMode,
                                uint8_t stepSize, uint8_t transitionTime, uint8_t optionsMask, uint8_t optionsOverride);
      CHIP_ERROR StopMoveStep(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t optionsMask,
                              uint8_t optionsOverride);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeCurrentHue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeCurrentSaturation(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeRemainingTime(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeCurrentX(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeCurrentY(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeDriftCompensation(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeCompensationText(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeColorTemperature(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeColorMode(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeColorControlOptions(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeNumberOfPrimaries(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributePrimary1X(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributePrimary1Y(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributePrimary1Intensity(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributePrimary2X(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributePrimary2Y(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributePrimary2Intensity(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributePrimary3X(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributePrimary3Y(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributePrimary3Intensity(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributePrimary4X(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributePrimary4Y(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributePrimary4Intensity(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributePrimary5X(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributePrimary5Y(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributePrimary5Intensity(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributePrimary6X(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributePrimary6Y(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributePrimary6Intensity(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeWhitePointX(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeWhitePointY(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeColorPointRX(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeColorPointRY(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeColorPointRIntensity(Callback::Cancelable * onSuccessCallback,
                                                   Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeColorPointGX(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeColorPointGY(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeColorPointGIntensity(Callback::Cancelable * onSuccessCallback,
                                                   Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeColorPointBX(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeColorPointBY(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeColorPointBIntensity(Callback::Cancelable * onSuccessCallback,
                                                   Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeEnhancedCurrentHue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeEnhancedColorMode(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeColorLoopActive(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeColorLoopDirection(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeColorLoopTime(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeColorCapabilities(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeColorTempPhysicalMin(Callback::Cancelable * onSuccessCallback,
                                                   Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeColorTempPhysicalMax(Callback::Cancelable * onSuccessCallback,
                                                   Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeCoupleColorTempToLevelMinMireds(Callback::Cancelable * onSuccessCallback,
                                                              Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeStartUpColorTemperatureMireds(Callback::Cancelable * onSuccessCallback,
                                                            Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR WriteAttributeColorControlOptions(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                                   uint8_t value);
      CHIP_ERROR WriteAttributeWhitePointX(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                           uint16_t value);
      CHIP_ERROR WriteAttributeWhitePointY(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                           uint16_t value);
      CHIP_ERROR WriteAttributeColorPointRX(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                            uint16_t value);
      CHIP_ERROR WriteAttributeColorPointRY(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                            uint16_t value);
      CHIP_ERROR WriteAttributeColorPointRIntensity(Callback::Cancelable * onSuccessCallback,
                                                    Callback::Cancelable * onFailureCallback, uint8_t value);
      CHIP_ERROR WriteAttributeColorPointGX(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                            uint16_t value);
      CHIP_ERROR WriteAttributeColorPointGY(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                            uint16_t value);
      CHIP_ERROR WriteAttributeColorPointGIntensity(Callback::Cancelable * onSuccessCallback,
                                                    Callback::Cancelable * onFailureCallback, uint8_t value);
      CHIP_ERROR WriteAttributeColorPointBX(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                            uint16_t value);
      CHIP_ERROR WriteAttributeColorPointBY(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                            uint16_t value);
      CHIP_ERROR WriteAttributeColorPointBIntensity(Callback::Cancelable * onSuccessCallback,
                                                    Callback::Cancelable * onFailureCallback, uint8_t value);
      CHIP_ERROR WriteAttributeStartUpColorTemperatureMireds(Callback::Cancelable * onSuccessCallback,
                                                             Callback::Cancelable * onFailureCallback, uint16_t value);
      CHIP_ERROR ConfigureAttributeCurrentHue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                              uint16_t minInterval, uint16_t maxInterval, uint8_t change);
      CHIP_ERROR ReportAttributeCurrentHue(Callback::Cancelable * onReportCallback);
      CHIP_ERROR ConfigureAttributeCurrentSaturation(Callback::Cancelable * onSuccessCallback,
                                                     Callback::Cancelable * onFailureCallback, uint16_t minInterval,
                                                     uint16_t maxInterval, uint8_t change);
      CHIP_ERROR ReportAttributeCurrentSaturation(Callback::Cancelable * onReportCallback);
      CHIP_ERROR ConfigureAttributeCurrentX(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                            uint16_t minInterval, uint16_t maxInterval, uint16_t change);
      CHIP_ERROR ReportAttributeCurrentX(Callback::Cancelable * onReportCallback);
      CHIP_ERROR ConfigureAttributeCurrentY(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                            uint16_t minInterval, uint16_t maxInterval, uint16_t change);
      CHIP_ERROR ReportAttributeCurrentY(Callback::Cancelable * onReportCallback);
      CHIP_ERROR ConfigureAttributeColorTemperature(Callback::Cancelable * onSuccessCallback,
                                                    Callback::Cancelable * onFailureCallback, uint16_t minInterval,
                                                    uint16_t maxInterval, uint16_t change);
      CHIP_ERROR ReportAttributeColorTemperature(Callback::Cancelable * onReportCallback);
  
  private:
      static constexpr CommandId kMoveColorCommandId              = 0x08;
      static constexpr CommandId kMoveColorTemperatureCommandId   = 0x4B;
      static constexpr CommandId kMoveHueCommandId                = 0x01;
      static constexpr CommandId kMoveSaturationCommandId         = 0x04;
      static constexpr CommandId kMoveToColorCommandId            = 0x07;
      static constexpr CommandId kMoveToColorTemperatureCommandId = 0x0A;
      static constexpr CommandId kMoveToHueCommandId              = 0x00;
      static constexpr CommandId kMoveToHueAndSaturationCommandId = 0x06;
      static constexpr CommandId kMoveToSaturationCommandId       = 0x03;
      static constexpr CommandId kStepColorCommandId              = 0x09;
      static constexpr CommandId kStepColorTemperatureCommandId   = 0x4C;
      static constexpr CommandId kStepHueCommandId                = 0x02;
      static constexpr CommandId kStepSaturationCommandId         = 0x05;
      static constexpr CommandId kStopMoveStepCommandId           = 0x47;
  };
  
  class DLL_EXPORT ContentLaunchCluster : public ClusterBase
  {
  public:
      ContentLaunchCluster() : ClusterBase(kContentLaunchClusterId) {}
      ~ContentLaunchCluster() {}
  
      // Cluster Commands
      CHIP_ERROR LaunchContent(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t autoPlay,
                               chip::ByteSpan data);
      CHIP_ERROR LaunchURL(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                           chip::ByteSpan contentURL, chip::ByteSpan displayString);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeAcceptsHeaderList(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeSupportedStreamingTypes(Callback::Cancelable * onSuccessCallback,
                                                      Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
  private:
      static constexpr CommandId kLaunchContentCommandId = 0x00;
      static constexpr CommandId kLaunchURLCommandId     = 0x01;
  };
  
  class DLL_EXPORT DescriptorCluster : public ClusterBase
  {
  public:
      DescriptorCluster() : ClusterBase(kDescriptorClusterId) {}
      ~DescriptorCluster() {}
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeDeviceList(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeServerList(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClientList(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributePartsList(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  };
  
  class DLL_EXPORT DoorLockCluster : public ClusterBase
  {
  public:
      DoorLockCluster() : ClusterBase(kDoorLockClusterId) {}
      ~DoorLockCluster() {}
  
      // Cluster Commands
      CHIP_ERROR ClearAllPins(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ClearAllRfids(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ClearHolidaySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                      uint8_t scheduleId);
      CHIP_ERROR ClearPin(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t userId);
      CHIP_ERROR ClearRfid(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t userId);
      CHIP_ERROR ClearWeekdaySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                      uint8_t scheduleId, uint16_t userId);
      CHIP_ERROR ClearYeardaySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                      uint8_t scheduleId, uint16_t userId);
      CHIP_ERROR GetHolidaySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                    uint8_t scheduleId);
      CHIP_ERROR GetLogRecord(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t logIndex);
      CHIP_ERROR GetPin(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t userId);
      CHIP_ERROR GetRfid(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t userId);
      CHIP_ERROR GetUserType(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t userId);
      CHIP_ERROR GetWeekdaySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                    uint8_t scheduleId, uint16_t userId);
      CHIP_ERROR GetYeardaySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                    uint8_t scheduleId, uint16_t userId);
      CHIP_ERROR LockDoor(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, chip::ByteSpan pin);
      CHIP_ERROR SetHolidaySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                    uint8_t scheduleId, uint32_t localStartTime, uint32_t localEndTime,
                                    uint8_t operatingModeDuringHoliday);
      CHIP_ERROR SetPin(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t userId,
                        uint8_t userStatus, uint8_t userType, chip::ByteSpan pin);
      CHIP_ERROR SetRfid(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t userId,
                         uint8_t userStatus, uint8_t userType, chip::ByteSpan id);
      CHIP_ERROR SetUserType(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t userId,
                             uint8_t userType);
      CHIP_ERROR SetWeekdaySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                    uint8_t scheduleId, uint16_t userId, uint8_t daysMask, uint8_t startHour, uint8_t startMinute,
                                    uint8_t endHour, uint8_t endMinute);
      CHIP_ERROR SetYeardaySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                    uint8_t scheduleId, uint16_t userId, uint32_t localStartTime, uint32_t localEndTime);
      CHIP_ERROR UnlockDoor(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, chip::ByteSpan pin);
      CHIP_ERROR UnlockWithTimeout(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                   uint16_t timeoutInSeconds, chip::ByteSpan pin);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeLockState(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeLockType(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeActuatorEnabled(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ConfigureAttributeLockState(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                             uint16_t minInterval, uint16_t maxInterval);
      CHIP_ERROR ReportAttributeLockState(Callback::Cancelable * onReportCallback);
  
  private:
      static constexpr CommandId kClearAllPinsCommandId         = 0x08;
      static constexpr CommandId kClearAllRfidsCommandId        = 0x19;
      static constexpr CommandId kClearHolidayScheduleCommandId = 0x13;
      static constexpr CommandId kClearPinCommandId             = 0x07;
      static constexpr CommandId kClearRfidCommandId            = 0x18;
      static constexpr CommandId kClearWeekdayScheduleCommandId = 0x0D;
      static constexpr CommandId kClearYeardayScheduleCommandId = 0x10;
      static constexpr CommandId kGetHolidayScheduleCommandId   = 0x12;
      static constexpr CommandId kGetLogRecordCommandId         = 0x04;
      static constexpr CommandId kGetPinCommandId               = 0x06;
      static constexpr CommandId kGetRfidCommandId              = 0x17;
      static constexpr CommandId kGetUserTypeCommandId          = 0x15;
      static constexpr CommandId kGetWeekdayScheduleCommandId   = 0x0C;
      static constexpr CommandId kGetYeardayScheduleCommandId   = 0x0F;
      static constexpr CommandId kLockDoorCommandId             = 0x00;
      static constexpr CommandId kSetHolidayScheduleCommandId   = 0x11;
      static constexpr CommandId kSetPinCommandId               = 0x05;
      static constexpr CommandId kSetRfidCommandId              = 0x16;
      static constexpr CommandId kSetUserTypeCommandId          = 0x14;
      static constexpr CommandId kSetWeekdayScheduleCommandId   = 0x0B;
      static constexpr CommandId kSetYeardayScheduleCommandId   = 0x0E;
      static constexpr CommandId kUnlockDoorCommandId           = 0x01;
      static constexpr CommandId kUnlockWithTimeoutCommandId    = 0x03;
  };
  
  class DLL_EXPORT EthernetNetworkDiagnosticsCluster : public ClusterBase
  {
  public:
      EthernetNetworkDiagnosticsCluster() : ClusterBase(kEthernetNetworkDiagnosticsClusterId) {}
      ~EthernetNetworkDiagnosticsCluster() {}
  
      // Cluster Commands
      CHIP_ERROR ResetCounts(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributePacketRxCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributePacketTxCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeTxErrCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeCollisionCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeOverrunCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
  private:
      static constexpr CommandId kResetCountsCommandId = 0x00;
  };
  
  class DLL_EXPORT FixedLabelCluster : public ClusterBase
  {
  public:
      FixedLabelCluster() : ClusterBase(kFixedLabelClusterId) {}
      ~FixedLabelCluster() {}
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeLabelList(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  };
  
  class DLL_EXPORT GeneralCommissioningCluster : public ClusterBase
  {
  public:
      GeneralCommissioningCluster() : ClusterBase(kGeneralCommissioningClusterId) {}
      ~GeneralCommissioningCluster() {}
  
      // Cluster Commands
      CHIP_ERROR ArmFailSafe(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                             uint16_t expiryLengthSeconds, uint64_t breadcrumb, uint32_t timeoutMs);
      CHIP_ERROR CommissioningComplete(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR SetRegulatoryConfig(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                     uint8_t location, chip::ByteSpan countryCode, uint64_t breadcrumb, uint32_t timeoutMs);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeFabricId(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeBreadcrumb(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR WriteAttributeBreadcrumb(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                          uint64_t value);
  
  private:
      static constexpr CommandId kArmFailSafeCommandId           = 0x00;
      static constexpr CommandId kCommissioningCompleteCommandId = 0x04;
      static constexpr CommandId kSetRegulatoryConfigCommandId   = 0x02;
  };
  
  class DLL_EXPORT GeneralDiagnosticsCluster : public ClusterBase
  {
  public:
      GeneralDiagnosticsCluster() : ClusterBase(kGeneralDiagnosticsClusterId) {}
      ~GeneralDiagnosticsCluster() {}
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeNetworkInterfaces(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeRebootCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  };
  
  class DLL_EXPORT GroupKeyManagementCluster : public ClusterBase
  {
  public:
      GroupKeyManagementCluster() : ClusterBase(kGroupKeyManagementClusterId) {}
      ~GroupKeyManagementCluster() {}
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeGroups(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeGroupKeys(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  };
  
  class DLL_EXPORT GroupsCluster : public ClusterBase
  {
  public:
      GroupsCluster() : ClusterBase(kGroupsClusterId) {}
      ~GroupsCluster() {}
  
      // Cluster Commands
      CHIP_ERROR AddGroup(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t groupId,
                          chip::ByteSpan groupName);
      CHIP_ERROR AddGroupIfIdentifying(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                       uint16_t groupId, chip::ByteSpan groupName);
      CHIP_ERROR GetGroupMembership(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                    uint8_t groupCount, uint16_t groupList);
      CHIP_ERROR RemoveAllGroups(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR RemoveGroup(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t groupId);
      CHIP_ERROR ViewGroup(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t groupId);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeNameSupport(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
  private:
      static constexpr CommandId kAddGroupCommandId              = 0x00;
      static constexpr CommandId kAddGroupIfIdentifyingCommandId = 0x05;
      static constexpr CommandId kGetGroupMembershipCommandId    = 0x02;
      static constexpr CommandId kRemoveAllGroupsCommandId       = 0x04;
      static constexpr CommandId kRemoveGroupCommandId           = 0x03;
      static constexpr CommandId kViewGroupCommandId             = 0x01;
  };
  
  class DLL_EXPORT IdentifyCluster : public ClusterBase
  {
  public:
      IdentifyCluster() : ClusterBase(kIdentifyClusterId) {}
      ~IdentifyCluster() {}
  
      // Cluster Commands
      CHIP_ERROR Identify(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t identifyTime);
      CHIP_ERROR IdentifyQuery(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeIdentifyTime(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR WriteAttributeIdentifyTime(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                            uint16_t value);
  
  private:
      static constexpr CommandId kIdentifyCommandId      = 0x00;
      static constexpr CommandId kIdentifyQueryCommandId = 0x01;
  };
  
  class DLL_EXPORT KeypadInputCluster : public ClusterBase
  {
  public:
      KeypadInputCluster() : ClusterBase(kKeypadInputClusterId) {}
      ~KeypadInputCluster() {}
  
      // Cluster Commands
      CHIP_ERROR SendKey(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t keyCode);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
  private:
      static constexpr CommandId kSendKeyCommandId = 0x00;
  };
  
  class DLL_EXPORT LevelControlCluster : public ClusterBase
  {
  public:
      LevelControlCluster() : ClusterBase(kLevelControlClusterId) {}
      ~LevelControlCluster() {}
  
      // Cluster Commands
      CHIP_ERROR Move(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t moveMode,
                      uint8_t rate, uint8_t optionMask, uint8_t optionOverride);
      CHIP_ERROR MoveToLevel(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t level,
                             uint16_t transitionTime, uint8_t optionMask, uint8_t optionOverride);
      CHIP_ERROR MoveToLevelWithOnOff(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                      uint8_t level, uint16_t transitionTime);
      CHIP_ERROR MoveWithOnOff(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t moveMode,
                               uint8_t rate);
      CHIP_ERROR Step(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t stepMode,
                      uint8_t stepSize, uint16_t transitionTime, uint8_t optionMask, uint8_t optionOverride);
      CHIP_ERROR StepWithOnOff(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t stepMode,
                               uint8_t stepSize, uint16_t transitionTime);
      CHIP_ERROR Stop(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t optionMask,
                      uint8_t optionOverride);
      CHIP_ERROR StopWithOnOff(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeCurrentLevel(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ConfigureAttributeCurrentLevel(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                                uint16_t minInterval, uint16_t maxInterval, uint8_t change);
      CHIP_ERROR ReportAttributeCurrentLevel(Callback::Cancelable * onReportCallback);
  
  private:
      static constexpr CommandId kMoveCommandId                 = 0x01;
      static constexpr CommandId kMoveToLevelCommandId          = 0x00;
      static constexpr CommandId kMoveToLevelWithOnOffCommandId = 0x04;
      static constexpr CommandId kMoveWithOnOffCommandId        = 0x05;
      static constexpr CommandId kStepCommandId                 = 0x02;
      static constexpr CommandId kStepWithOnOffCommandId        = 0x06;
      static constexpr CommandId kStopCommandId                 = 0x03;
      static constexpr CommandId kStopWithOnOffCommandId        = 0x07;
  };
  
  class DLL_EXPORT LowPowerCluster : public ClusterBase
  {
  public:
      LowPowerCluster() : ClusterBase(kLowPowerClusterId) {}
      ~LowPowerCluster() {}
  
      // Cluster Commands
      CHIP_ERROR Sleep(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
  private:
      static constexpr CommandId kSleepCommandId = 0x00;
  };
  
  class DLL_EXPORT MediaInputCluster : public ClusterBase
  {
  public:
      MediaInputCluster() : ClusterBase(kMediaInputClusterId) {}
      ~MediaInputCluster() {}
  
      // Cluster Commands
      CHIP_ERROR HideInputStatus(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR RenameInput(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t index,
                             chip::ByteSpan name);
      CHIP_ERROR SelectInput(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t index);
      CHIP_ERROR ShowInputStatus(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeMediaInputList(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
  private:
      static constexpr CommandId kHideInputStatusCommandId = 0x02;
      static constexpr CommandId kRenameInputCommandId     = 0x03;
      static constexpr CommandId kSelectInputCommandId     = 0x00;
      static constexpr CommandId kShowInputStatusCommandId = 0x01;
  };
  
  class DLL_EXPORT MediaPlaybackCluster : public ClusterBase
  {
  public:
      MediaPlaybackCluster() : ClusterBase(kMediaPlaybackClusterId) {}
      ~MediaPlaybackCluster() {}
  
      // Cluster Commands
      CHIP_ERROR MediaFastForward(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR MediaNext(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR MediaPause(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR MediaPlay(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR MediaPrevious(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR MediaRewind(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR MediaSkipBackward(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                   uint64_t deltaPositionMilliseconds);
      CHIP_ERROR MediaSkipForward(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                  uint64_t deltaPositionMilliseconds);
      CHIP_ERROR MediaSkipSeek(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint64_t position);
      CHIP_ERROR MediaStartOver(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR MediaStop(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
  private:
      static constexpr CommandId kMediaFastForwardCommandId  = 0x07;
      static constexpr CommandId kMediaNextCommandId         = 0x05;
      static constexpr CommandId kMediaPauseCommandId        = 0x01;
      static constexpr CommandId kMediaPlayCommandId         = 0x00;
      static constexpr CommandId kMediaPreviousCommandId     = 0x04;
      static constexpr CommandId kMediaRewindCommandId       = 0x06;
      static constexpr CommandId kMediaSkipBackwardCommandId = 0x09;
      static constexpr CommandId kMediaSkipForwardCommandId  = 0x08;
      static constexpr CommandId kMediaSkipSeekCommandId     = 0x0A;
      static constexpr CommandId kMediaStartOverCommandId    = 0x03;
      static constexpr CommandId kMediaStopCommandId         = 0x02;
  };
  
  class DLL_EXPORT NetworkCommissioningCluster : public ClusterBase
  {
  public:
      NetworkCommissioningCluster() : ClusterBase(kNetworkCommissioningClusterId) {}
      ~NetworkCommissioningCluster() {}
  
      // Cluster Commands
      CHIP_ERROR AddThreadNetwork(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                  chip::ByteSpan operationalDataset, uint64_t breadcrumb, uint32_t timeoutMs);
      CHIP_ERROR AddWiFiNetwork(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                chip::ByteSpan ssid, chip::ByteSpan credentials, uint64_t breadcrumb, uint32_t timeoutMs);
      CHIP_ERROR DisableNetwork(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                chip::ByteSpan networkID, uint64_t breadcrumb, uint32_t timeoutMs);
      CHIP_ERROR EnableNetwork(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                               chip::ByteSpan networkID, uint64_t breadcrumb, uint32_t timeoutMs);
      CHIP_ERROR GetLastNetworkCommissioningResult(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                                   uint32_t timeoutMs);
      CHIP_ERROR RemoveNetwork(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                               chip::ByteSpan networkID, uint64_t breadcrumb, uint32_t timeoutMs);
      CHIP_ERROR ScanNetworks(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, chip::ByteSpan ssid,
                              uint64_t breadcrumb, uint32_t timeoutMs);
      CHIP_ERROR UpdateThreadNetwork(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                     chip::ByteSpan operationalDataset, uint64_t breadcrumb, uint32_t timeoutMs);
      CHIP_ERROR UpdateWiFiNetwork(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                   chip::ByteSpan ssid, chip::ByteSpan credentials, uint64_t breadcrumb, uint32_t timeoutMs);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
  private:
      static constexpr CommandId kAddThreadNetworkCommandId                  = 0x06;
      static constexpr CommandId kAddWiFiNetworkCommandId                    = 0x02;
      static constexpr CommandId kDisableNetworkCommandId                    = 0x0E;
      static constexpr CommandId kEnableNetworkCommandId                     = 0x0C;
      static constexpr CommandId kGetLastNetworkCommissioningResultCommandId = 0x10;
      static constexpr CommandId kRemoveNetworkCommandId                     = 0x0A;
      static constexpr CommandId kScanNetworksCommandId                      = 0x00;
      static constexpr CommandId kUpdateThreadNetworkCommandId               = 0x08;
      static constexpr CommandId kUpdateWiFiNetworkCommandId                 = 0x04;
  };
  
  class DLL_EXPORT OtaSoftwareUpdateServerCluster : public ClusterBase
  {
  public:
      OtaSoftwareUpdateServerCluster() : ClusterBase(kOtaSoftwareUpdateServerClusterId) {}
      ~OtaSoftwareUpdateServerCluster() {}
  
      // Cluster Commands
      CHIP_ERROR ApplyUpdateRequest(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                    chip::ByteSpan updateToken, uint32_t newVersion);
      CHIP_ERROR NotifyUpdateApplied(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                     chip::ByteSpan updateToken, uint32_t currentVersion);
      CHIP_ERROR QueryImage(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t vendorId,
                            uint16_t productId, uint16_t imageType, uint16_t hardwareVersion, uint32_t currentVersion,
                            uint8_t protocolsSupported, chip::ByteSpan location, uint8_t clientCanConsent,
                            chip::ByteSpan metadataForServer);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
  private:
      static constexpr CommandId kApplyUpdateRequestCommandId  = 0x01;
      static constexpr CommandId kNotifyUpdateAppliedCommandId = 0x02;
      static constexpr CommandId kQueryImageCommandId          = 0x00;
  };
  
  class DLL_EXPORT OnOffCluster : public ClusterBase
  {
  public:
      OnOffCluster() : ClusterBase(kOnOffClusterId) {}
      ~OnOffCluster() {}
  
      // Cluster Commands
      CHIP_ERROR Off(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR On(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR Toggle(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeOnOff(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeGlobalSceneControl(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeOnTime(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeOffWaitTime(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeStartUpOnOff(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeFeatureMap(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR WriteAttributeOnTime(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                      uint16_t value);
      CHIP_ERROR WriteAttributeOffWaitTime(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                           uint16_t value);
      CHIP_ERROR WriteAttributeStartUpOnOff(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                            uint8_t value);
      CHIP_ERROR ConfigureAttributeOnOff(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                         uint16_t minInterval, uint16_t maxInterval);
      CHIP_ERROR ReportAttributeOnOff(Callback::Cancelable * onReportCallback);
  
  private:
      static constexpr CommandId kOffCommandId    = 0x00;
      static constexpr CommandId kOnCommandId     = 0x01;
      static constexpr CommandId kToggleCommandId = 0x02;
  };
  
  class DLL_EXPORT OperationalCredentialsCluster : public ClusterBase
  {
  public:
      OperationalCredentialsCluster() : ClusterBase(kOperationalCredentialsClusterId) {}
      ~OperationalCredentialsCluster() {}
  
      // Cluster Commands
      CHIP_ERROR AddOpCert(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                           chip::ByteSpan operationalCert, chip::ByteSpan iPKValue, chip::NodeId caseAdminNode,
                           uint16_t adminVendorId);
      CHIP_ERROR AddTrustedRootCertificate(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                           chip::ByteSpan rootCertificate);
      CHIP_ERROR OpCSRRequest(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                              chip::ByteSpan cSRNonce);
      CHIP_ERROR RemoveAllFabrics(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR RemoveFabric(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                              chip::FabricId fabricId, chip::NodeId nodeId, uint16_t vendorId);
      CHIP_ERROR RemoveTrustedRootCertificate(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                              chip::ByteSpan trustedRootIdentifier);
      CHIP_ERROR SetFabric(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t vendorId);
      CHIP_ERROR UpdateFabricLabel(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                   chip::ByteSpan label);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeFabricsList(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
  private:
      static constexpr CommandId kAddOpCertCommandId                    = 0x06;
      static constexpr CommandId kAddTrustedRootCertificateCommandId    = 0xA1;
      static constexpr CommandId kOpCSRRequestCommandId                 = 0x04;
      static constexpr CommandId kRemoveAllFabricsCommandId             = 0x0B;
      static constexpr CommandId kRemoveFabricCommandId                 = 0x0A;
      static constexpr CommandId kRemoveTrustedRootCertificateCommandId = 0xA2;
      static constexpr CommandId kSetFabricCommandId                    = 0x00;
      static constexpr CommandId kUpdateFabricLabelCommandId            = 0x09;
  };
  
  class DLL_EXPORT PumpConfigurationAndControlCluster : public ClusterBase
  {
  public:
      PumpConfigurationAndControlCluster() : ClusterBase(kPumpConfigurationAndControlClusterId) {}
      ~PumpConfigurationAndControlCluster() {}
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeMaxPressure(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeMaxSpeed(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeMaxFlow(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeEffectiveOperationMode(Callback::Cancelable * onSuccessCallback,
                                                     Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeEffectiveControlMode(Callback::Cancelable * onSuccessCallback,
                                                   Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeCapacity(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeOperationMode(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR WriteAttributeOperationMode(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                             uint8_t value);
      CHIP_ERROR ConfigureAttributeCapacity(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                            uint16_t minInterval, uint16_t maxInterval, int16_t change);
      CHIP_ERROR ReportAttributeCapacity(Callback::Cancelable * onReportCallback);
  };
  
  class DLL_EXPORT RelativeHumidityMeasurementCluster : public ClusterBase
  {
  public:
      RelativeHumidityMeasurementCluster() : ClusterBase(kRelativeHumidityMeasurementClusterId) {}
      ~RelativeHumidityMeasurementCluster() {}
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeMeasuredValue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeMinMeasuredValue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeMaxMeasuredValue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ConfigureAttributeMeasuredValue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                                 uint16_t minInterval, uint16_t maxInterval, uint16_t change);
      CHIP_ERROR ReportAttributeMeasuredValue(Callback::Cancelable * onReportCallback);
  };
  
  class DLL_EXPORT ScenesCluster : public ClusterBase
  {
  public:
      ScenesCluster() : ClusterBase(kScenesClusterId) {}
      ~ScenesCluster() {}
  
      // Cluster Commands
      CHIP_ERROR AddScene(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t groupId,
                          uint8_t sceneId, uint16_t transitionTime, chip::ByteSpan sceneName, chip::ClusterId clusterId,
                          uint8_t length, uint8_t value);
      CHIP_ERROR GetSceneMembership(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                    uint16_t groupId);
      CHIP_ERROR RecallScene(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t groupId,
                             uint8_t sceneId, uint16_t transitionTime);
      CHIP_ERROR RemoveAllScenes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                 uint16_t groupId);
      CHIP_ERROR RemoveScene(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t groupId,
                             uint8_t sceneId);
      CHIP_ERROR StoreScene(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t groupId,
                            uint8_t sceneId);
      CHIP_ERROR ViewScene(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t groupId,
                           uint8_t sceneId);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeSceneCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeCurrentScene(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeCurrentGroup(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeSceneValid(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeNameSupport(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
  private:
      static constexpr CommandId kAddSceneCommandId           = 0x00;
      static constexpr CommandId kGetSceneMembershipCommandId = 0x06;
      static constexpr CommandId kRecallSceneCommandId        = 0x05;
      static constexpr CommandId kRemoveAllScenesCommandId    = 0x03;
      static constexpr CommandId kRemoveSceneCommandId        = 0x02;
      static constexpr CommandId kStoreSceneCommandId         = 0x04;
      static constexpr CommandId kViewSceneCommandId          = 0x01;
  };
  
  class DLL_EXPORT SoftwareDiagnosticsCluster : public ClusterBase
  {
  public:
      SoftwareDiagnosticsCluster() : ClusterBase(kSoftwareDiagnosticsClusterId) {}
      ~SoftwareDiagnosticsCluster() {}
  
      // Cluster Commands
      CHIP_ERROR ResetWatermarks(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeCurrentHeapHighWatermark(Callback::Cancelable * onSuccessCallback,
                                                       Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
  private:
      static constexpr CommandId kResetWatermarksCommandId = 0x00;
  };
  
  class DLL_EXPORT SwitchCluster : public ClusterBase
  {
  public:
      SwitchCluster() : ClusterBase(kSwitchClusterId) {}
      ~SwitchCluster() {}
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeNumberOfPositions(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeCurrentPosition(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ConfigureAttributeCurrentPosition(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                                   uint16_t minInterval, uint16_t maxInterval, uint8_t change);
      CHIP_ERROR ReportAttributeCurrentPosition(Callback::Cancelable * onReportCallback);
  };
  
  class DLL_EXPORT TvChannelCluster : public ClusterBase
  {
  public:
      TvChannelCluster() : ClusterBase(kTvChannelClusterId) {}
      ~TvChannelCluster() {}
  
      // Cluster Commands
      CHIP_ERROR ChangeChannel(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                               chip::ByteSpan match);
      CHIP_ERROR ChangeChannelByNumber(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                       uint16_t majorNumber, uint16_t minorNumber);
      CHIP_ERROR SkipChannel(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint16_t count);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeTvChannelList(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeTvChannelLineup(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeCurrentTvChannel(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
  private:
      static constexpr CommandId kChangeChannelCommandId         = 0x00;
      static constexpr CommandId kChangeChannelByNumberCommandId = 0x01;
      static constexpr CommandId kSkipChannelCommandId           = 0x02;
  };
  
  class DLL_EXPORT TargetNavigatorCluster : public ClusterBase
  {
  public:
      TargetNavigatorCluster() : ClusterBase(kTargetNavigatorClusterId) {}
      ~TargetNavigatorCluster() {}
  
      // Cluster Commands
      CHIP_ERROR NavigateTarget(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t target,
                                chip::ByteSpan data);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeTargetNavigatorList(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
  private:
      static constexpr CommandId kNavigateTargetCommandId = 0x00;
  };
  
  class DLL_EXPORT TemperatureMeasurementCluster : public ClusterBase
  {
  public:
      TemperatureMeasurementCluster() : ClusterBase(kTemperatureMeasurementClusterId) {}
      ~TemperatureMeasurementCluster() {}
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeMeasuredValue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeMinMeasuredValue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeMaxMeasuredValue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ConfigureAttributeMeasuredValue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                                 uint16_t minInterval, uint16_t maxInterval, int16_t change);
      CHIP_ERROR ReportAttributeMeasuredValue(Callback::Cancelable * onReportCallback);
  };
  
  class DLL_EXPORT TestClusterCluster : public ClusterBase
  {
  public:
      TestClusterCluster() : ClusterBase(kTestClusterClusterId) {}
      ~TestClusterCluster() {}
  
      // Cluster Commands
      CHIP_ERROR Test(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR TestNotHandled(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR TestSpecific(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR TestUnknownCommand(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeBoolean(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeBitmap8(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeBitmap16(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeBitmap32(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeBitmap64(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeInt8u(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeInt16u(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeInt32u(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeInt64u(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeInt8s(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeInt16s(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeInt32s(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeInt64s(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeEnum8(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeEnum16(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeOctetString(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeListInt8u(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeListOctetString(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeListStructOctetString(Callback::Cancelable * onSuccessCallback,
                                                    Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR WriteAttributeBoolean(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                       uint8_t value);
      CHIP_ERROR WriteAttributeBitmap8(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                       uint8_t value);
      CHIP_ERROR WriteAttributeBitmap16(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                        uint16_t value);
      CHIP_ERROR WriteAttributeBitmap32(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                        uint32_t value);
      CHIP_ERROR WriteAttributeBitmap64(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                        uint64_t value);
      CHIP_ERROR WriteAttributeInt8u(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                     uint8_t value);
      CHIP_ERROR WriteAttributeInt16u(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                      uint16_t value);
      CHIP_ERROR WriteAttributeInt32u(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                      uint32_t value);
      CHIP_ERROR WriteAttributeInt64u(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                      uint64_t value);
      CHIP_ERROR WriteAttributeInt8s(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                     int8_t value);
      CHIP_ERROR WriteAttributeInt16s(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                      int16_t value);
      CHIP_ERROR WriteAttributeInt32s(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                      int32_t value);
      CHIP_ERROR WriteAttributeInt64s(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                      int64_t value);
      CHIP_ERROR WriteAttributeEnum8(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                     uint8_t value);
      CHIP_ERROR WriteAttributeEnum16(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                      uint16_t value);
      CHIP_ERROR WriteAttributeOctetString(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                           chip::ByteSpan value);
  
  private:
      static constexpr CommandId kTestCommandId               = 0x00;
      static constexpr CommandId kTestNotHandledCommandId     = 0x01;
      static constexpr CommandId kTestSpecificCommandId       = 0x02;
      static constexpr CommandId kTestUnknownCommandCommandId = 0x03;
  };
  
  class DLL_EXPORT ThermostatCluster : public ClusterBase
  {
  public:
      ThermostatCluster() : ClusterBase(kThermostatClusterId) {}
      ~ThermostatCluster() {}
  
      // Cluster Commands
      CHIP_ERROR ClearWeeklySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR GetRelayStatusLog(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR GetWeeklySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                   uint8_t daysToReturn, uint8_t modeToReturn);
      CHIP_ERROR SetWeeklySchedule(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                   uint8_t numberOfTransitionsForSequence, uint8_t dayOfWeekForSequence, uint8_t modeForSequence,
                                   uint8_t payload);
      CHIP_ERROR SetpointRaiseLower(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback, uint8_t mode,
                                    int8_t amount);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeLocalTemperature(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeOccupiedCoolingSetpoint(Callback::Cancelable * onSuccessCallback,
                                                      Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeOccupiedHeatingSetpoint(Callback::Cancelable * onSuccessCallback,
                                                      Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeControlSequenceOfOperation(Callback::Cancelable * onSuccessCallback,
                                                         Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeSystemMode(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR WriteAttributeOccupiedCoolingSetpoint(Callback::Cancelable * onSuccessCallback,
                                                       Callback::Cancelable * onFailureCallback, int16_t value);
      CHIP_ERROR WriteAttributeOccupiedHeatingSetpoint(Callback::Cancelable * onSuccessCallback,
                                                       Callback::Cancelable * onFailureCallback, int16_t value);
      CHIP_ERROR WriteAttributeControlSequenceOfOperation(Callback::Cancelable * onSuccessCallback,
                                                          Callback::Cancelable * onFailureCallback, uint8_t value);
      CHIP_ERROR WriteAttributeSystemMode(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                          uint8_t value);
      CHIP_ERROR ConfigureAttributeLocalTemperature(Callback::Cancelable * onSuccessCallback,
                                                    Callback::Cancelable * onFailureCallback, uint16_t minInterval,
                                                    uint16_t maxInterval, int16_t change);
      CHIP_ERROR ReportAttributeLocalTemperature(Callback::Cancelable * onReportCallback);
  
  private:
      static constexpr CommandId kClearWeeklyScheduleCommandId = 0x03;
      static constexpr CommandId kGetRelayStatusLogCommandId   = 0x04;
      static constexpr CommandId kGetWeeklyScheduleCommandId   = 0x02;
      static constexpr CommandId kSetWeeklyScheduleCommandId   = 0x01;
      static constexpr CommandId kSetpointRaiseLowerCommandId  = 0x00;
  };
  
  class DLL_EXPORT ThreadNetworkDiagnosticsCluster : public ClusterBase
  {
  public:
      ThreadNetworkDiagnosticsCluster() : ClusterBase(kThreadNetworkDiagnosticsClusterId) {}
      ~ThreadNetworkDiagnosticsCluster() {}
  
      // Cluster Commands
      CHIP_ERROR ResetCounts(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeChannel(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeRoutingRole(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeNetworkName(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributePanId(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeExtendedPanId(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeMeshLocalPrefix(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeOverrunCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeNeighborTableList(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeRouteTableList(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributePartitionId(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeWeighting(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeDataVersion(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeStableDataVersion(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeLeaderRouterId(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeDetachedRoleCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeChildRoleCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeRouterRoleCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeLeaderRoleCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeAttachAttemptCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributePartitionIdChangeCount(Callback::Cancelable * onSuccessCallback,
                                                     Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeBetterPartitionAttachAttemptCount(Callback::Cancelable * onSuccessCallback,
                                                                Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeParentChangeCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeTxTotalCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeTxUnicastCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeTxBroadcastCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeTxAckRequestedCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeTxAckedCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeTxNoAckRequestedCount(Callback::Cancelable * onSuccessCallback,
                                                    Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeTxDataCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeTxDataPollCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeTxBeaconCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeTxBeaconRequestCount(Callback::Cancelable * onSuccessCallback,
                                                   Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeTxOtherCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeTxRetryCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeTxDirectMaxRetryExpiryCount(Callback::Cancelable * onSuccessCallback,
                                                          Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeTxIndirectMaxRetryExpiryCount(Callback::Cancelable * onSuccessCallback,
                                                            Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeTxErrCcaCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeTxErrAbortCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeTxErrBusyChannelCount(Callback::Cancelable * onSuccessCallback,
                                                    Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeRxTotalCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeRxUnicastCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeRxBroadcastCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeRxDataCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeRxDataPollCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeRxBeaconCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeRxBeaconRequestCount(Callback::Cancelable * onSuccessCallback,
                                                   Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeRxOtherCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeRxAddressFilteredCount(Callback::Cancelable * onSuccessCallback,
                                                     Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeRxDestAddrFilteredCount(Callback::Cancelable * onSuccessCallback,
                                                      Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeRxDuplicatedCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeRxErrNoFrameCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeRxErrUnknownNeighborCount(Callback::Cancelable * onSuccessCallback,
                                                        Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeRxErrInvalidSrcAddrCount(Callback::Cancelable * onSuccessCallback,
                                                       Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeRxErrSecCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeRxErrFcsCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeRxErrOtherCount(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeSecurityPolicy(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeChannelMask(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeOperationalDatasetComponents(Callback::Cancelable * onSuccessCallback,
                                                           Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeActiveNetworkFaultsList(Callback::Cancelable * onSuccessCallback,
                                                      Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
  private:
      static constexpr CommandId kResetCountsCommandId = 0x00;
  };
  
  class DLL_EXPORT WakeOnLanCluster : public ClusterBase
  {
  public:
      WakeOnLanCluster() : ClusterBase(kWakeOnLanClusterId) {}
      ~WakeOnLanCluster() {}
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeWakeOnLanMacAddress(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  };
  
  class DLL_EXPORT WindowCoveringCluster : public ClusterBase
  {
  public:
      WindowCoveringCluster() : ClusterBase(kWindowCoveringClusterId) {}
      ~WindowCoveringCluster() {}
  
      // Cluster Commands
      CHIP_ERROR WindowCoveringDownClose(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR WindowCoveringGoToLiftPercentage(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                                  uint8_t percentageLiftValue);
      CHIP_ERROR WindowCoveringGoToLiftValue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                             uint16_t liftValue);
      CHIP_ERROR WindowCoveringGoToTiltPercentage(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                                  uint8_t percentageTiltValue);
      CHIP_ERROR WindowCoveringGoToTiltValue(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                             uint16_t tiltValue);
      CHIP_ERROR WindowCoveringStop(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR WindowCoveringUpOpen(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
  
      // Cluster Attributes
      CHIP_ERROR DiscoverAttributes(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeWindowCoveringType(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeCurrentPositionLift(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeCurrentPositionTilt(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeConfigStatus(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeInstalledOpenLimitLift(Callback::Cancelable * onSuccessCallback,
                                                     Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeInstalledClosedLimitLift(Callback::Cancelable * onSuccessCallback,
                                                       Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeInstalledOpenLimitTilt(Callback::Cancelable * onSuccessCallback,
                                                     Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeInstalledClosedLimitTilt(Callback::Cancelable * onSuccessCallback,
                                                       Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeMode(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR ReadAttributeClusterRevision(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback);
      CHIP_ERROR WriteAttributeMode(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                    uint8_t value);
      CHIP_ERROR ConfigureAttributeWindowCoveringType(Callback::Cancelable * onSuccessCallback,
                                                      Callback::Cancelable * onFailureCallback, uint16_t minInterval,
                                                      uint16_t maxInterval);
      CHIP_ERROR ReportAttributeWindowCoveringType(Callback::Cancelable * onReportCallback);
      CHIP_ERROR ConfigureAttributeCurrentPositionLift(Callback::Cancelable * onSuccessCallback,
                                                       Callback::Cancelable * onFailureCallback, uint16_t minInterval,
                                                       uint16_t maxInterval, uint16_t change);
      CHIP_ERROR ReportAttributeCurrentPositionLift(Callback::Cancelable * onReportCallback);
      CHIP_ERROR ConfigureAttributeCurrentPositionTilt(Callback::Cancelable * onSuccessCallback,
                                                       Callback::Cancelable * onFailureCallback, uint16_t minInterval,
                                                       uint16_t maxInterval, uint16_t change);
      CHIP_ERROR ReportAttributeCurrentPositionTilt(Callback::Cancelable * onReportCallback);
      CHIP_ERROR ConfigureAttributeConfigStatus(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
                                                uint16_t minInterval, uint16_t maxInterval);
      CHIP_ERROR ReportAttributeConfigStatus(Callback::Cancelable * onReportCallback);
  
  private:
      static constexpr CommandId kWindowCoveringDownCloseCommandId          = 0x01;
      static constexpr CommandId kWindowCoveringGoToLiftPercentageCommandId = 0x05;
      static constexpr CommandId kWindowCoveringGoToLiftValueCommandId      = 0x04;
      static constexpr CommandId kWindowCoveringGoToTiltPercentageCommandId = 0x08;
      static constexpr CommandId kWindowCoveringGoToTiltValueCommandId      = 0x07;
      static constexpr CommandId kWindowCoveringStopCommandId               = 0x02;
      static constexpr CommandId kWindowCoveringUpOpenCommandId             = 0x00;
  };
  
  } // namespace Controller
  } // namespace chip
  