/*
 *
 *    Copyright (c) 2022 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

/**
 *  @file
 *    This file contains declarations for accessors around clusters attributes.
 */

#pragma once

#include <app-common/zap-generated/cluster-objects.h>
#include <app/data-model/Nullable.h>
#include <app/util/af-types.h>
#include <lib/support/Span.h>

namespace chip {
namespace app {
namespace Clusters {

namespace Identify {
namespace Attributes {

namespace IdentifyTime {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace IdentifyTime

namespace IdentifyType {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // enum8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace IdentifyType

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace Identify

namespace Groups {
namespace Attributes {

namespace NameSupport {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // bitmap8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace NameSupport

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace Groups

namespace Scenes {
namespace Attributes {

namespace SceneCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace SceneCount

namespace CurrentScene {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace CurrentScene

namespace CurrentGroup {
EmberAfStatus Get(chip::EndpointId endpoint, chip::GroupId * value); // group_id
EmberAfStatus Set(chip::EndpointId endpoint, chip::GroupId value);
} // namespace CurrentGroup

namespace SceneValid {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace SceneValid

namespace NameSupport {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // bitmap8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace NameSupport

namespace LastConfiguredBy {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<chip::NodeId> & value); // node_id
EmberAfStatus Set(chip::EndpointId endpoint, chip::NodeId value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<chip::NodeId> & value);
} // namespace LastConfiguredBy

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace Scenes

namespace OnOff {
namespace Attributes {

namespace OnOff {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace OnOff

namespace GlobalSceneControl {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace GlobalSceneControl

namespace OnTime {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace OnTime

namespace OffWaitTime {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace OffWaitTime

namespace StartUpOnOff {
EmberAfStatus Get(chip::EndpointId endpoint,
                  DataModel::Nullable<chip::app::Clusters::OnOff::OnOffStartUpOnOff> & value); // OnOffStartUpOnOff
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::OnOff::OnOffStartUpOnOff value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint,
                  const chip::app::DataModel::Nullable<chip::app::Clusters::OnOff::OnOffStartUpOnOff> & value);
} // namespace StartUpOnOff

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace OnOff

namespace OnOffSwitchConfiguration {
namespace Attributes {

namespace SwitchType {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // enum8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace SwitchType

namespace SwitchActions {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // enum8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace SwitchActions

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace OnOffSwitchConfiguration

namespace LevelControl {
namespace Attributes {

namespace CurrentLevel {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace CurrentLevel

namespace RemainingTime {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RemainingTime

namespace MinLevel {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace MinLevel

namespace MaxLevel {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace MaxLevel

namespace CurrentFrequency {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace CurrentFrequency

namespace MinFrequency {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace MinFrequency

namespace MaxFrequency {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace MaxFrequency

namespace Options {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // bitmap8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace Options

namespace OnOffTransitionTime {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace OnOffTransitionTime

namespace OnLevel {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace OnLevel

namespace OnTransitionTime {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace OnTransitionTime

namespace OffTransitionTime {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace OffTransitionTime

namespace DefaultMoveRate {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace DefaultMoveRate

namespace StartUpCurrentLevel {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace StartUpCurrentLevel

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace LevelControl

namespace BinaryInputBasic {
namespace Attributes {

namespace ActiveText {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace ActiveText

namespace Description {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace Description

namespace InactiveText {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace InactiveText

namespace OutOfService {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace OutOfService

namespace Polarity {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // enum8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace Polarity

namespace PresentValue {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace PresentValue

namespace Reliability {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // enum8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace Reliability

namespace StatusFlags {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // bitmap8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace StatusFlags

namespace ApplicationType {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace ApplicationType

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace BinaryInputBasic

namespace PulseWidthModulation {
namespace Attributes {

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace PulseWidthModulation

namespace Descriptor {
namespace Attributes {

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace Descriptor

namespace Binding {
namespace Attributes {

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace Binding

namespace AccessControl {
namespace Attributes {

namespace SubjectsPerAccessControlEntry {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace SubjectsPerAccessControlEntry

namespace TargetsPerAccessControlEntry {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace TargetsPerAccessControlEntry

namespace AccessControlEntriesPerFabric {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace AccessControlEntriesPerFabric

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace AccessControl

namespace BridgedActions {
namespace Attributes {

namespace SetupUrl {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // long_char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace SetupUrl

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace BridgedActions

namespace Basic {
namespace Attributes {

namespace DataModelRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace DataModelRevision

namespace VendorName {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace VendorName

namespace VendorID {
EmberAfStatus Get(chip::EndpointId endpoint, chip::VendorId * value); // vendor_id
EmberAfStatus Set(chip::EndpointId endpoint, chip::VendorId value);
} // namespace VendorID

namespace ProductName {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace ProductName

namespace ProductID {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ProductID

namespace NodeLabel {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace NodeLabel

namespace Location {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace Location

namespace HardwareVersion {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace HardwareVersion

namespace HardwareVersionString {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace HardwareVersionString

namespace SoftwareVersion {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace SoftwareVersion

namespace SoftwareVersionString {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace SoftwareVersionString

namespace ManufacturingDate {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace ManufacturingDate

namespace PartNumber {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace PartNumber

namespace ProductURL {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // long_char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace ProductURL

namespace ProductLabel {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace ProductLabel

namespace SerialNumber {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace SerialNumber

namespace LocalConfigDisabled {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace LocalConfigDisabled

namespace Reachable {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace Reachable

namespace UniqueID {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace UniqueID

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace Basic

namespace OtaSoftwareUpdateProvider {
namespace Attributes {

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace OtaSoftwareUpdateProvider

namespace OtaSoftwareUpdateRequestor {
namespace Attributes {

namespace UpdatePossible {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace UpdatePossible

namespace UpdateState {
EmberAfStatus Get(chip::EndpointId endpoint,
                  chip::app::Clusters::OtaSoftwareUpdateRequestor::OTAUpdateStateEnum * value); // OTAUpdateStateEnum
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::OtaSoftwareUpdateRequestor::OTAUpdateStateEnum value);
} // namespace UpdateState

namespace UpdateStateProgress {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace UpdateStateProgress

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace OtaSoftwareUpdateRequestor

namespace LocalizationConfiguration {
namespace Attributes {

namespace ActiveLocale {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace ActiveLocale

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace LocalizationConfiguration

namespace TimeFormatLocalization {
namespace Attributes {

namespace HourFormat {
EmberAfStatus Get(chip::EndpointId endpoint, chip::app::Clusters::TimeFormatLocalization::HourFormat * value); // HourFormat
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::TimeFormatLocalization::HourFormat value);
} // namespace HourFormat

namespace ActiveCalendarType {
EmberAfStatus Get(chip::EndpointId endpoint, chip::app::Clusters::TimeFormatLocalization::CalendarType * value); // CalendarType
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::TimeFormatLocalization::CalendarType value);
} // namespace ActiveCalendarType

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace TimeFormatLocalization

namespace UnitLocalization {
namespace Attributes {

namespace TemperatureUnit {
EmberAfStatus Get(chip::EndpointId endpoint, chip::app::Clusters::UnitLocalization::TempUnit * value); // TempUnit
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::UnitLocalization::TempUnit value);
} // namespace TemperatureUnit

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace UnitLocalization

namespace PowerSourceConfiguration {
namespace Attributes {

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace PowerSourceConfiguration

namespace PowerSource {
namespace Attributes {

namespace Status {
EmberAfStatus Get(chip::EndpointId endpoint, chip::app::Clusters::PowerSource::PowerSourceStatus * value); // PowerSourceStatus
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::PowerSource::PowerSourceStatus value);
} // namespace Status

namespace Order {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace Order

namespace Description {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace Description

namespace WiredAssessedInputVoltage {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint32_t> & value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint32_t> & value);
} // namespace WiredAssessedInputVoltage

namespace WiredAssessedInputFrequency {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace WiredAssessedInputFrequency

namespace WiredCurrentType {
EmberAfStatus Get(chip::EndpointId endpoint, chip::app::Clusters::PowerSource::WiredCurrentType * value); // WiredCurrentType
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::PowerSource::WiredCurrentType value);
} // namespace WiredCurrentType

namespace WiredAssessedCurrent {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint32_t> & value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint32_t> & value);
} // namespace WiredAssessedCurrent

namespace WiredNominalVoltage {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace WiredNominalVoltage

namespace WiredMaximumCurrent {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace WiredMaximumCurrent

namespace WiredPresent {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace WiredPresent

namespace BatVoltage {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint32_t> & value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint32_t> & value);
} // namespace BatVoltage

namespace BatPercentRemaining {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace BatPercentRemaining

namespace BatTimeRemaining {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint32_t> & value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint32_t> & value);
} // namespace BatTimeRemaining

namespace BatChargeLevel {
EmberAfStatus Get(chip::EndpointId endpoint, chip::app::Clusters::PowerSource::BatChargeLevel * value); // BatChargeLevel
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::PowerSource::BatChargeLevel value);
} // namespace BatChargeLevel

namespace BatReplacementNeeded {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace BatReplacementNeeded

namespace BatReplaceability {
EmberAfStatus Get(chip::EndpointId endpoint, chip::app::Clusters::PowerSource::BatReplaceability * value); // BatReplaceability
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::PowerSource::BatReplaceability value);
} // namespace BatReplaceability

namespace BatPresent {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace BatPresent

namespace BatReplacementDescription {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace BatReplacementDescription

namespace BatCommonDesignation {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace BatCommonDesignation

namespace BatANSIDesignation {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace BatANSIDesignation

namespace BatIECDesignation {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace BatIECDesignation

namespace BatApprovedChemistry {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace BatApprovedChemistry

namespace BatCapacity {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace BatCapacity

namespace BatQuantity {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace BatQuantity

namespace BatChargeState {
EmberAfStatus Get(chip::EndpointId endpoint, chip::app::Clusters::PowerSource::BatChargeState * value); // BatChargeState
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::PowerSource::BatChargeState value);
} // namespace BatChargeState

namespace BatTimeToFullCharge {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint32_t> & value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint32_t> & value);
} // namespace BatTimeToFullCharge

namespace BatFunctionalWhileCharging {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace BatFunctionalWhileCharging

namespace BatChargingCurrent {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint32_t> & value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint32_t> & value);
} // namespace BatChargingCurrent

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace PowerSource

namespace GeneralCommissioning {
namespace Attributes {

namespace Breadcrumb {
EmberAfStatus Get(chip::EndpointId endpoint, uint64_t * value); // int64u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
} // namespace Breadcrumb

namespace RegulatoryConfig {
EmberAfStatus Get(chip::EndpointId endpoint,
                  chip::app::Clusters::GeneralCommissioning::RegulatoryLocationType * value); // RegulatoryLocationType
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::GeneralCommissioning::RegulatoryLocationType value);
} // namespace RegulatoryConfig

namespace LocationCapability {
EmberAfStatus Get(chip::EndpointId endpoint,
                  chip::app::Clusters::GeneralCommissioning::RegulatoryLocationType * value); // RegulatoryLocationType
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::GeneralCommissioning::RegulatoryLocationType value);
} // namespace LocationCapability

namespace SupportsConcurrentConnection {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace SupportsConcurrentConnection

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace GeneralCommissioning

namespace NetworkCommissioning {
namespace Attributes {

namespace MaxNetworks {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace MaxNetworks

namespace ScanMaxTimeSeconds {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace ScanMaxTimeSeconds

namespace ConnectMaxTimeSeconds {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace ConnectMaxTimeSeconds

namespace InterfaceEnabled {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace InterfaceEnabled

namespace LastNetworkingStatus {
EmberAfStatus Get(chip::EndpointId endpoint,
                  DataModel::Nullable<chip::app::Clusters::NetworkCommissioning::NetworkCommissioningStatus> &
                      value); // NetworkCommissioningStatus
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::NetworkCommissioning::NetworkCommissioningStatus value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus
Set(chip::EndpointId endpoint,
    const chip::app::DataModel::Nullable<chip::app::Clusters::NetworkCommissioning::NetworkCommissioningStatus> & value);
} // namespace LastNetworkingStatus

namespace LastNetworkID {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<chip::MutableByteSpan> & value); // octet_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::ByteSpan value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<chip::ByteSpan> & value);
} // namespace LastNetworkID

namespace LastConnectErrorValue {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int32_t> & value); // int32s
EmberAfStatus Set(chip::EndpointId endpoint, int32_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int32_t> & value);
} // namespace LastConnectErrorValue

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace NetworkCommissioning

namespace DiagnosticLogs {
namespace Attributes {

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace DiagnosticLogs

namespace GeneralDiagnostics {
namespace Attributes {

namespace RebootCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RebootCount

namespace UpTime {
EmberAfStatus Get(chip::EndpointId endpoint, uint64_t * value); // int64u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
} // namespace UpTime

namespace TotalOperationalHours {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace TotalOperationalHours

namespace BootReasons {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // enum8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace BootReasons

namespace TestEventTriggersEnabled {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace TestEventTriggersEnabled

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace GeneralDiagnostics

namespace SoftwareDiagnostics {
namespace Attributes {

namespace CurrentHeapFree {
EmberAfStatus Get(chip::EndpointId endpoint, uint64_t * value); // int64u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
} // namespace CurrentHeapFree

namespace CurrentHeapUsed {
EmberAfStatus Get(chip::EndpointId endpoint, uint64_t * value); // int64u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
} // namespace CurrentHeapUsed

namespace CurrentHeapHighWatermark {
EmberAfStatus Get(chip::EndpointId endpoint, uint64_t * value); // int64u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
} // namespace CurrentHeapHighWatermark

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace SoftwareDiagnostics

namespace ThreadNetworkDiagnostics {
namespace Attributes {

namespace Channel {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace Channel

namespace RoutingRole {
EmberAfStatus Get(chip::EndpointId endpoint,
                  DataModel::Nullable<chip::app::Clusters::ThreadNetworkDiagnostics::RoutingRole> & value); // RoutingRole
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::ThreadNetworkDiagnostics::RoutingRole value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint,
                  const chip::app::DataModel::Nullable<chip::app::Clusters::ThreadNetworkDiagnostics::RoutingRole> & value);
} // namespace RoutingRole

namespace NetworkName {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<chip::MutableCharSpan> & value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<chip::CharSpan> & value);
} // namespace NetworkName

namespace PanId {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace PanId

namespace ExtendedPanId {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint64_t> & value); // int64u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint64_t> & value);
} // namespace ExtendedPanId

namespace MeshLocalPrefix {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<chip::MutableByteSpan> & value); // octet_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::ByteSpan value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<chip::ByteSpan> & value);
} // namespace MeshLocalPrefix

namespace OverrunCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint64_t * value); // int64u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
} // namespace OverrunCount

namespace PartitionId {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint32_t> & value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint32_t> & value);
} // namespace PartitionId

namespace Weighting {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace Weighting

namespace DataVersion {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace DataVersion

namespace StableDataVersion {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace StableDataVersion

namespace LeaderRouterId {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace LeaderRouterId

namespace DetachedRoleCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace DetachedRoleCount

namespace ChildRoleCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ChildRoleCount

namespace RouterRoleCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RouterRoleCount

namespace LeaderRoleCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace LeaderRoleCount

namespace AttachAttemptCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace AttachAttemptCount

namespace PartitionIdChangeCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace PartitionIdChangeCount

namespace BetterPartitionAttachAttemptCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace BetterPartitionAttachAttemptCount

namespace ParentChangeCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ParentChangeCount

namespace TxTotalCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace TxTotalCount

namespace TxUnicastCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace TxUnicastCount

namespace TxBroadcastCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace TxBroadcastCount

namespace TxAckRequestedCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace TxAckRequestedCount

namespace TxAckedCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace TxAckedCount

namespace TxNoAckRequestedCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace TxNoAckRequestedCount

namespace TxDataCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace TxDataCount

namespace TxDataPollCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace TxDataPollCount

namespace TxBeaconCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace TxBeaconCount

namespace TxBeaconRequestCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace TxBeaconRequestCount

namespace TxOtherCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace TxOtherCount

namespace TxRetryCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace TxRetryCount

namespace TxDirectMaxRetryExpiryCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace TxDirectMaxRetryExpiryCount

namespace TxIndirectMaxRetryExpiryCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace TxIndirectMaxRetryExpiryCount

namespace TxErrCcaCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace TxErrCcaCount

namespace TxErrAbortCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace TxErrAbortCount

namespace TxErrBusyChannelCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace TxErrBusyChannelCount

namespace RxTotalCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace RxTotalCount

namespace RxUnicastCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace RxUnicastCount

namespace RxBroadcastCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace RxBroadcastCount

namespace RxDataCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace RxDataCount

namespace RxDataPollCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace RxDataPollCount

namespace RxBeaconCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace RxBeaconCount

namespace RxBeaconRequestCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace RxBeaconRequestCount

namespace RxOtherCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace RxOtherCount

namespace RxAddressFilteredCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace RxAddressFilteredCount

namespace RxDestAddrFilteredCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace RxDestAddrFilteredCount

namespace RxDuplicatedCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace RxDuplicatedCount

namespace RxErrNoFrameCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace RxErrNoFrameCount

namespace RxErrUnknownNeighborCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace RxErrUnknownNeighborCount

namespace RxErrInvalidSrcAddrCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace RxErrInvalidSrcAddrCount

namespace RxErrSecCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace RxErrSecCount

namespace RxErrFcsCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace RxErrFcsCount

namespace RxErrOtherCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace RxErrOtherCount

namespace ActiveTimestamp {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint64_t> & value); // int64u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint64_t> & value);
} // namespace ActiveTimestamp

namespace PendingTimestamp {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint64_t> & value); // int64u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint64_t> & value);
} // namespace PendingTimestamp

namespace Delay {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint32_t> & value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint32_t> & value);
} // namespace Delay

namespace ChannelMask {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<chip::MutableByteSpan> & value); // octet_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::ByteSpan value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<chip::ByteSpan> & value);
} // namespace ChannelMask

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace ThreadNetworkDiagnostics

namespace WiFiNetworkDiagnostics {
namespace Attributes {

namespace Bssid {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<chip::MutableByteSpan> & value); // octet_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::ByteSpan value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<chip::ByteSpan> & value);
} // namespace Bssid

namespace SecurityType {
EmberAfStatus Get(chip::EndpointId endpoint,
                  DataModel::Nullable<chip::app::Clusters::WiFiNetworkDiagnostics::SecurityType> & value); // SecurityType
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::WiFiNetworkDiagnostics::SecurityType value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint,
                  const chip::app::DataModel::Nullable<chip::app::Clusters::WiFiNetworkDiagnostics::SecurityType> & value);
} // namespace SecurityType

namespace WiFiVersion {
EmberAfStatus Get(chip::EndpointId endpoint,
                  DataModel::Nullable<chip::app::Clusters::WiFiNetworkDiagnostics::WiFiVersionType> & value); // WiFiVersionType
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::WiFiNetworkDiagnostics::WiFiVersionType value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint,
                  const chip::app::DataModel::Nullable<chip::app::Clusters::WiFiNetworkDiagnostics::WiFiVersionType> & value);
} // namespace WiFiVersion

namespace ChannelNumber {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace ChannelNumber

namespace Rssi {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int8_t> & value); // int8s
EmberAfStatus Set(chip::EndpointId endpoint, int8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int8_t> & value);
} // namespace Rssi

namespace BeaconLostCount {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint32_t> & value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint32_t> & value);
} // namespace BeaconLostCount

namespace BeaconRxCount {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint32_t> & value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint32_t> & value);
} // namespace BeaconRxCount

namespace PacketMulticastRxCount {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint32_t> & value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint32_t> & value);
} // namespace PacketMulticastRxCount

namespace PacketMulticastTxCount {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint32_t> & value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint32_t> & value);
} // namespace PacketMulticastTxCount

namespace PacketUnicastRxCount {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint32_t> & value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint32_t> & value);
} // namespace PacketUnicastRxCount

namespace PacketUnicastTxCount {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint32_t> & value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint32_t> & value);
} // namespace PacketUnicastTxCount

namespace CurrentMaxRate {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint64_t> & value); // int64u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint64_t> & value);
} // namespace CurrentMaxRate

namespace OverrunCount {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint64_t> & value); // int64u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint64_t> & value);
} // namespace OverrunCount

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace WiFiNetworkDiagnostics

namespace EthernetNetworkDiagnostics {
namespace Attributes {

namespace PHYRate {
EmberAfStatus Get(chip::EndpointId endpoint,
                  DataModel::Nullable<chip::app::Clusters::EthernetNetworkDiagnostics::PHYRateType> & value); // PHYRateType
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::EthernetNetworkDiagnostics::PHYRateType value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint,
                  const chip::app::DataModel::Nullable<chip::app::Clusters::EthernetNetworkDiagnostics::PHYRateType> & value);
} // namespace PHYRate

namespace FullDuplex {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<bool> & value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<bool> & value);
} // namespace FullDuplex

namespace PacketRxCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint64_t * value); // int64u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
} // namespace PacketRxCount

namespace PacketTxCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint64_t * value); // int64u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
} // namespace PacketTxCount

namespace TxErrCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint64_t * value); // int64u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
} // namespace TxErrCount

namespace CollisionCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint64_t * value); // int64u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
} // namespace CollisionCount

namespace OverrunCount {
EmberAfStatus Get(chip::EndpointId endpoint, uint64_t * value); // int64u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
} // namespace OverrunCount

namespace CarrierDetect {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<bool> & value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<bool> & value);
} // namespace CarrierDetect

namespace TimeSinceReset {
EmberAfStatus Get(chip::EndpointId endpoint, uint64_t * value); // int64u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
} // namespace TimeSinceReset

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace EthernetNetworkDiagnostics

namespace TimeSynchronization {
namespace Attributes {

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace TimeSynchronization

namespace BridgedDeviceBasic {
namespace Attributes {

namespace VendorName {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace VendorName

namespace VendorID {
EmberAfStatus Get(chip::EndpointId endpoint, chip::VendorId * value); // vendor_id
EmberAfStatus Set(chip::EndpointId endpoint, chip::VendorId value);
} // namespace VendorID

namespace ProductName {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace ProductName

namespace NodeLabel {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace NodeLabel

namespace HardwareVersion {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace HardwareVersion

namespace HardwareVersionString {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace HardwareVersionString

namespace SoftwareVersion {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace SoftwareVersion

namespace SoftwareVersionString {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace SoftwareVersionString

namespace ManufacturingDate {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace ManufacturingDate

namespace PartNumber {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace PartNumber

namespace ProductURL {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // long_char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace ProductURL

namespace ProductLabel {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace ProductLabel

namespace SerialNumber {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace SerialNumber

namespace Reachable {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace Reachable

namespace UniqueID {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace UniqueID

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace BridgedDeviceBasic

namespace Switch {
namespace Attributes {

namespace NumberOfPositions {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace NumberOfPositions

namespace CurrentPosition {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace CurrentPosition

namespace MultiPressMax {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace MultiPressMax

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace Switch

namespace AdministratorCommissioning {
namespace Attributes {

namespace WindowStatus {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace WindowStatus

namespace AdminFabricIndex {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<chip::FabricIndex> & value); // fabric_idx
EmberAfStatus Set(chip::EndpointId endpoint, chip::FabricIndex value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<chip::FabricIndex> & value);
} // namespace AdminFabricIndex

namespace AdminVendorId {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace AdminVendorId

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace AdministratorCommissioning

namespace OperationalCredentials {
namespace Attributes {

namespace SupportedFabrics {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace SupportedFabrics

namespace CommissionedFabrics {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace CommissionedFabrics

namespace CurrentFabricIndex {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace CurrentFabricIndex

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace OperationalCredentials

namespace GroupKeyManagement {
namespace Attributes {

namespace MaxGroupsPerFabric {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace MaxGroupsPerFabric

namespace MaxGroupKeysPerFabric {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace MaxGroupKeysPerFabric

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace GroupKeyManagement

namespace FixedLabel {
namespace Attributes {

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace FixedLabel

namespace UserLabel {
namespace Attributes {

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace UserLabel

namespace ProxyConfiguration {
namespace Attributes {

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace ProxyConfiguration

namespace ProxyDiscovery {
namespace Attributes {

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace ProxyDiscovery

namespace ProxyValid {
namespace Attributes {

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace ProxyValid

namespace BooleanState {
namespace Attributes {

namespace StateValue {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace StateValue

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace BooleanState

namespace ModeSelect {
namespace Attributes {

namespace Description {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace Description

namespace StandardNamespace {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // enum16
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace StandardNamespace

namespace CurrentMode {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace CurrentMode

namespace StartUpMode {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace StartUpMode

namespace OnMode {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace OnMode

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace ModeSelect

namespace DoorLock {
namespace Attributes {

namespace LockState {
EmberAfStatus Get(chip::EndpointId endpoint,
                  DataModel::Nullable<chip::app::Clusters::DoorLock::DlLockState> & value); // DlLockState
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::DoorLock::DlLockState value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint,
                  const chip::app::DataModel::Nullable<chip::app::Clusters::DoorLock::DlLockState> & value);
} // namespace LockState

namespace LockType {
EmberAfStatus Get(chip::EndpointId endpoint, chip::app::Clusters::DoorLock::DlLockType * value); // DlLockType
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::DoorLock::DlLockType value);
} // namespace LockType

namespace ActuatorEnabled {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace ActuatorEnabled

namespace DoorState {
EmberAfStatus Get(chip::EndpointId endpoint,
                  DataModel::Nullable<chip::app::Clusters::DoorLock::DlDoorState> & value); // DlDoorState
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::DoorLock::DlDoorState value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint,
                  const chip::app::DataModel::Nullable<chip::app::Clusters::DoorLock::DlDoorState> & value);
} // namespace DoorState

namespace DoorOpenEvents {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace DoorOpenEvents

namespace DoorClosedEvents {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace DoorClosedEvents

namespace OpenPeriod {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace OpenPeriod

namespace NumberOfTotalUsersSupported {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace NumberOfTotalUsersSupported

namespace NumberOfPINUsersSupported {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace NumberOfPINUsersSupported

namespace NumberOfRFIDUsersSupported {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace NumberOfRFIDUsersSupported

namespace NumberOfWeekDaySchedulesSupportedPerUser {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace NumberOfWeekDaySchedulesSupportedPerUser

namespace NumberOfYearDaySchedulesSupportedPerUser {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace NumberOfYearDaySchedulesSupportedPerUser

namespace NumberOfHolidaySchedulesSupported {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace NumberOfHolidaySchedulesSupported

namespace MaxPINCodeLength {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace MaxPINCodeLength

namespace MinPINCodeLength {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace MinPINCodeLength

namespace MaxRFIDCodeLength {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace MaxRFIDCodeLength

namespace MinRFIDCodeLength {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace MinRFIDCodeLength

namespace CredentialRulesSupport {
EmberAfStatus Get(chip::EndpointId endpoint,
                  chip::BitMask<chip::app::Clusters::DoorLock::DlCredentialRuleMask> * value); // DlCredentialRuleMask
EmberAfStatus Set(chip::EndpointId endpoint, chip::BitMask<chip::app::Clusters::DoorLock::DlCredentialRuleMask> value);
} // namespace CredentialRulesSupport

namespace NumberOfCredentialsSupportedPerUser {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace NumberOfCredentialsSupportedPerUser

namespace Language {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace Language

namespace LEDSettings {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace LEDSettings

namespace AutoRelockTime {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace AutoRelockTime

namespace SoundVolume {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace SoundVolume

namespace OperatingMode {
EmberAfStatus Get(chip::EndpointId endpoint, chip::app::Clusters::DoorLock::DlOperatingMode * value); // DlOperatingMode
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::DoorLock::DlOperatingMode value);
} // namespace OperatingMode

namespace SupportedOperatingModes {
EmberAfStatus Get(chip::EndpointId endpoint,
                  chip::BitMask<chip::app::Clusters::DoorLock::DlSupportedOperatingModes> * value); // DlSupportedOperatingModes
EmberAfStatus Set(chip::EndpointId endpoint, chip::BitMask<chip::app::Clusters::DoorLock::DlSupportedOperatingModes> value);
} // namespace SupportedOperatingModes

namespace DefaultConfigurationRegister {
EmberAfStatus
Get(chip::EndpointId endpoint,
    chip::BitMask<chip::app::Clusters::DoorLock::DlDefaultConfigurationRegister> * value); // DlDefaultConfigurationRegister
EmberAfStatus Set(chip::EndpointId endpoint, chip::BitMask<chip::app::Clusters::DoorLock::DlDefaultConfigurationRegister> value);
} // namespace DefaultConfigurationRegister

namespace EnableLocalProgramming {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace EnableLocalProgramming

namespace EnableOneTouchLocking {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace EnableOneTouchLocking

namespace EnableInsideStatusLED {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace EnableInsideStatusLED

namespace EnablePrivacyModeButton {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace EnablePrivacyModeButton

namespace LocalProgrammingFeatures {
EmberAfStatus Get(chip::EndpointId endpoint,
                  chip::BitMask<chip::app::Clusters::DoorLock::DlLocalProgrammingFeatures> * value); // DlLocalProgrammingFeatures
EmberAfStatus Set(chip::EndpointId endpoint, chip::BitMask<chip::app::Clusters::DoorLock::DlLocalProgrammingFeatures> value);
} // namespace LocalProgrammingFeatures

namespace WrongCodeEntryLimit {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace WrongCodeEntryLimit

namespace UserCodeTemporaryDisableTime {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace UserCodeTemporaryDisableTime

namespace SendPINOverTheAir {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace SendPINOverTheAir

namespace RequirePINforRemoteOperation {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace RequirePINforRemoteOperation

namespace ExpiringUserTimeout {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ExpiringUserTimeout

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace DoorLock

namespace WindowCovering {
namespace Attributes {

namespace Type {
EmberAfStatus Get(chip::EndpointId endpoint, chip::app::Clusters::WindowCovering::Type * value); // Type
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::WindowCovering::Type value);
} // namespace Type

namespace PhysicalClosedLimitLift {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace PhysicalClosedLimitLift

namespace PhysicalClosedLimitTilt {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace PhysicalClosedLimitTilt

namespace CurrentPositionLift {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace CurrentPositionLift

namespace CurrentPositionTilt {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace CurrentPositionTilt

namespace NumberOfActuationsLift {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace NumberOfActuationsLift

namespace NumberOfActuationsTilt {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace NumberOfActuationsTilt

namespace ConfigStatus {
EmberAfStatus Get(chip::EndpointId endpoint,
                  chip::BitMask<chip::app::Clusters::WindowCovering::ConfigStatus> * value); // ConfigStatus
EmberAfStatus Set(chip::EndpointId endpoint, chip::BitMask<chip::app::Clusters::WindowCovering::ConfigStatus> value);
} // namespace ConfigStatus

namespace CurrentPositionLiftPercentage {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<chip::Percent> & value); // Percent
EmberAfStatus Set(chip::EndpointId endpoint, chip::Percent value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<chip::Percent> & value);
} // namespace CurrentPositionLiftPercentage

namespace CurrentPositionTiltPercentage {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<chip::Percent> & value); // Percent
EmberAfStatus Set(chip::EndpointId endpoint, chip::Percent value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<chip::Percent> & value);
} // namespace CurrentPositionTiltPercentage

namespace OperationalStatus {
EmberAfStatus Get(chip::EndpointId endpoint,
                  chip::BitMask<chip::app::Clusters::WindowCovering::OperationalStatus> * value); // OperationalStatus
EmberAfStatus Set(chip::EndpointId endpoint, chip::BitMask<chip::app::Clusters::WindowCovering::OperationalStatus> value);
} // namespace OperationalStatus

namespace TargetPositionLiftPercent100ths {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<chip::Percent100ths> & value); // Percent100ths
EmberAfStatus Set(chip::EndpointId endpoint, chip::Percent100ths value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<chip::Percent100ths> & value);
} // namespace TargetPositionLiftPercent100ths

namespace TargetPositionTiltPercent100ths {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<chip::Percent100ths> & value); // Percent100ths
EmberAfStatus Set(chip::EndpointId endpoint, chip::Percent100ths value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<chip::Percent100ths> & value);
} // namespace TargetPositionTiltPercent100ths

namespace EndProductType {
EmberAfStatus Get(chip::EndpointId endpoint, chip::app::Clusters::WindowCovering::EndProductType * value); // EndProductType
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::WindowCovering::EndProductType value);
} // namespace EndProductType

namespace CurrentPositionLiftPercent100ths {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<chip::Percent100ths> & value); // Percent100ths
EmberAfStatus Set(chip::EndpointId endpoint, chip::Percent100ths value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<chip::Percent100ths> & value);
} // namespace CurrentPositionLiftPercent100ths

namespace CurrentPositionTiltPercent100ths {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<chip::Percent100ths> & value); // Percent100ths
EmberAfStatus Set(chip::EndpointId endpoint, chip::Percent100ths value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<chip::Percent100ths> & value);
} // namespace CurrentPositionTiltPercent100ths

namespace InstalledOpenLimitLift {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace InstalledOpenLimitLift

namespace InstalledClosedLimitLift {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace InstalledClosedLimitLift

namespace InstalledOpenLimitTilt {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace InstalledOpenLimitTilt

namespace InstalledClosedLimitTilt {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace InstalledClosedLimitTilt

namespace Mode {
EmberAfStatus Get(chip::EndpointId endpoint, chip::BitMask<chip::app::Clusters::WindowCovering::Mode> * value); // Mode
EmberAfStatus Set(chip::EndpointId endpoint, chip::BitMask<chip::app::Clusters::WindowCovering::Mode> value);
} // namespace Mode

namespace SafetyStatus {
EmberAfStatus Get(chip::EndpointId endpoint,
                  chip::BitMask<chip::app::Clusters::WindowCovering::SafetyStatus> * value); // SafetyStatus
EmberAfStatus Set(chip::EndpointId endpoint, chip::BitMask<chip::app::Clusters::WindowCovering::SafetyStatus> value);
} // namespace SafetyStatus

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace WindowCovering

namespace BarrierControl {
namespace Attributes {

namespace BarrierMovingState {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // enum8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace BarrierMovingState

namespace BarrierSafetyStatus {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // bitmap16
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace BarrierSafetyStatus

namespace BarrierCapabilities {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // bitmap8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace BarrierCapabilities

namespace BarrierOpenEvents {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace BarrierOpenEvents

namespace BarrierCloseEvents {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace BarrierCloseEvents

namespace BarrierCommandOpenEvents {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace BarrierCommandOpenEvents

namespace BarrierCommandCloseEvents {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace BarrierCommandCloseEvents

namespace BarrierOpenPeriod {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace BarrierOpenPeriod

namespace BarrierClosePeriod {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace BarrierClosePeriod

namespace BarrierPosition {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace BarrierPosition

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace BarrierControl

namespace PumpConfigurationAndControl {
namespace Attributes {

namespace MaxPressure {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int16_t> & value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int16_t> & value);
} // namespace MaxPressure

namespace MaxSpeed {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace MaxSpeed

namespace MaxFlow {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace MaxFlow

namespace MinConstPressure {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int16_t> & value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int16_t> & value);
} // namespace MinConstPressure

namespace MaxConstPressure {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int16_t> & value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int16_t> & value);
} // namespace MaxConstPressure

namespace MinCompPressure {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int16_t> & value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int16_t> & value);
} // namespace MinCompPressure

namespace MaxCompPressure {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int16_t> & value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int16_t> & value);
} // namespace MaxCompPressure

namespace MinConstSpeed {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace MinConstSpeed

namespace MaxConstSpeed {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace MaxConstSpeed

namespace MinConstFlow {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace MinConstFlow

namespace MaxConstFlow {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace MaxConstFlow

namespace MinConstTemp {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int16_t> & value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int16_t> & value);
} // namespace MinConstTemp

namespace MaxConstTemp {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int16_t> & value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int16_t> & value);
} // namespace MaxConstTemp

namespace PumpStatus {
EmberAfStatus Get(chip::EndpointId endpoint,
                  chip::BitMask<chip::app::Clusters::PumpConfigurationAndControl::PumpStatus> * value); // PumpStatus
EmberAfStatus Set(chip::EndpointId endpoint, chip::BitMask<chip::app::Clusters::PumpConfigurationAndControl::PumpStatus> value);
} // namespace PumpStatus

namespace EffectiveOperationMode {
EmberAfStatus Get(chip::EndpointId endpoint,
                  chip::app::Clusters::PumpConfigurationAndControl::PumpOperationMode * value); // PumpOperationMode
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::PumpConfigurationAndControl::PumpOperationMode value);
} // namespace EffectiveOperationMode

namespace EffectiveControlMode {
EmberAfStatus Get(chip::EndpointId endpoint,
                  chip::app::Clusters::PumpConfigurationAndControl::PumpControlMode * value); // PumpControlMode
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::PumpConfigurationAndControl::PumpControlMode value);
} // namespace EffectiveControlMode

namespace Capacity {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int16_t> & value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int16_t> & value);
} // namespace Capacity

namespace Speed {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace Speed

namespace LifetimeRunningHours {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint32_t> & value); // int24u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint32_t> & value);
} // namespace LifetimeRunningHours

namespace Power {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint32_t> & value); // int24u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint32_t> & value);
} // namespace Power

namespace LifetimeEnergyConsumed {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint32_t> & value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint32_t> & value);
} // namespace LifetimeEnergyConsumed

namespace OperationMode {
EmberAfStatus Get(chip::EndpointId endpoint,
                  chip::app::Clusters::PumpConfigurationAndControl::PumpOperationMode * value); // PumpOperationMode
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::PumpConfigurationAndControl::PumpOperationMode value);
} // namespace OperationMode

namespace ControlMode {
EmberAfStatus Get(chip::EndpointId endpoint,
                  chip::app::Clusters::PumpConfigurationAndControl::PumpControlMode * value); // PumpControlMode
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::PumpConfigurationAndControl::PumpControlMode value);
} // namespace ControlMode

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace PumpConfigurationAndControl

namespace Thermostat {
namespace Attributes {

namespace LocalTemperature {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int16_t> & value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int16_t> & value);
} // namespace LocalTemperature

namespace OutdoorTemperature {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int16_t> & value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int16_t> & value);
} // namespace OutdoorTemperature

namespace Occupancy {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // bitmap8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace Occupancy

namespace AbsMinHeatSetpointLimit {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace AbsMinHeatSetpointLimit

namespace AbsMaxHeatSetpointLimit {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace AbsMaxHeatSetpointLimit

namespace AbsMinCoolSetpointLimit {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace AbsMinCoolSetpointLimit

namespace AbsMaxCoolSetpointLimit {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace AbsMaxCoolSetpointLimit

namespace PICoolingDemand {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace PICoolingDemand

namespace PIHeatingDemand {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace PIHeatingDemand

namespace HVACSystemTypeConfiguration {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // bitmap8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace HVACSystemTypeConfiguration

namespace LocalTemperatureCalibration {
EmberAfStatus Get(chip::EndpointId endpoint, int8_t * value); // int8s
EmberAfStatus Set(chip::EndpointId endpoint, int8_t value);
} // namespace LocalTemperatureCalibration

namespace OccupiedCoolingSetpoint {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace OccupiedCoolingSetpoint

namespace OccupiedHeatingSetpoint {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace OccupiedHeatingSetpoint

namespace UnoccupiedCoolingSetpoint {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace UnoccupiedCoolingSetpoint

namespace UnoccupiedHeatingSetpoint {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace UnoccupiedHeatingSetpoint

namespace MinHeatSetpointLimit {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace MinHeatSetpointLimit

namespace MaxHeatSetpointLimit {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace MaxHeatSetpointLimit

namespace MinCoolSetpointLimit {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace MinCoolSetpointLimit

namespace MaxCoolSetpointLimit {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace MaxCoolSetpointLimit

namespace MinSetpointDeadBand {
EmberAfStatus Get(chip::EndpointId endpoint, int8_t * value); // int8s
EmberAfStatus Set(chip::EndpointId endpoint, int8_t value);
} // namespace MinSetpointDeadBand

namespace RemoteSensing {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // bitmap8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace RemoteSensing

namespace ControlSequenceOfOperation {
EmberAfStatus Get(chip::EndpointId endpoint,
                  chip::app::Clusters::Thermostat::ThermostatControlSequence * value); // ThermostatControlSequence
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::Thermostat::ThermostatControlSequence value);
} // namespace ControlSequenceOfOperation

namespace SystemMode {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // enum8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace SystemMode

namespace ThermostatRunningMode {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // enum8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace ThermostatRunningMode

namespace StartOfWeek {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // enum8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace StartOfWeek

namespace NumberOfWeeklyTransitions {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace NumberOfWeeklyTransitions

namespace NumberOfDailyTransitions {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace NumberOfDailyTransitions

namespace TemperatureSetpointHold {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // enum8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace TemperatureSetpointHold

namespace TemperatureSetpointHoldDuration {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace TemperatureSetpointHoldDuration

namespace ThermostatProgrammingOperationMode {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // bitmap8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace ThermostatProgrammingOperationMode

namespace ThermostatRunningState {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // bitmap16
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ThermostatRunningState

namespace SetpointChangeSource {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // enum8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace SetpointChangeSource

namespace SetpointChangeAmount {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int16_t> & value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int16_t> & value);
} // namespace SetpointChangeAmount

namespace SetpointChangeSourceTimestamp {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // utc
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace SetpointChangeSourceTimestamp

namespace OccupiedSetback {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace OccupiedSetback

namespace OccupiedSetbackMin {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace OccupiedSetbackMin

namespace OccupiedSetbackMax {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace OccupiedSetbackMax

namespace UnoccupiedSetback {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace UnoccupiedSetback

namespace UnoccupiedSetbackMin {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace UnoccupiedSetbackMin

namespace UnoccupiedSetbackMax {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace UnoccupiedSetbackMax

namespace EmergencyHeatDelta {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace EmergencyHeatDelta

namespace ACType {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // enum8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace ACType

namespace ACCapacity {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ACCapacity

namespace ACRefrigerantType {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // enum8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace ACRefrigerantType

namespace ACCompressorType {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // enum8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace ACCompressorType

namespace ACErrorCode {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace ACErrorCode

namespace ACLouverPosition {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // enum8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace ACLouverPosition

namespace ACCoilTemperature {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int16_t> & value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int16_t> & value);
} // namespace ACCoilTemperature

namespace ACCapacityformat {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // enum8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace ACCapacityformat

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace Thermostat

namespace FanControl {
namespace Attributes {

namespace FanMode {
EmberAfStatus Get(chip::EndpointId endpoint, chip::app::Clusters::FanControl::FanModeType * value); // FanModeType
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::FanControl::FanModeType value);
} // namespace FanMode

namespace FanModeSequence {
EmberAfStatus Get(chip::EndpointId endpoint, chip::app::Clusters::FanControl::FanModeSequenceType * value); // FanModeSequenceType
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::FanControl::FanModeSequenceType value);
} // namespace FanModeSequence

namespace PercentSetting {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace PercentSetting

namespace PercentCurrent {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace PercentCurrent

namespace SpeedMax {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace SpeedMax

namespace SpeedSetting {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace SpeedSetting

namespace SpeedCurrent {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace SpeedCurrent

namespace RockSupport {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // bitmap8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace RockSupport

namespace RockSetting {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // bitmap8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace RockSetting

namespace WindSupport {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // bitmap8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace WindSupport

namespace WindSetting {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // bitmap8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace WindSetting

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace FanControl

namespace ThermostatUserInterfaceConfiguration {
namespace Attributes {

namespace TemperatureDisplayMode {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // enum8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace TemperatureDisplayMode

namespace KeypadLockout {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // enum8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace KeypadLockout

namespace ScheduleProgrammingVisibility {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // enum8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace ScheduleProgrammingVisibility

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace ThermostatUserInterfaceConfiguration

namespace ColorControl {
namespace Attributes {

namespace CurrentHue {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace CurrentHue

namespace CurrentSaturation {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace CurrentSaturation

namespace RemainingTime {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RemainingTime

namespace CurrentX {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace CurrentX

namespace CurrentY {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace CurrentY

namespace DriftCompensation {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // enum8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace DriftCompensation

namespace CompensationText {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace CompensationText

namespace ColorTemperature {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ColorTemperature

namespace ColorMode {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // enum8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace ColorMode

namespace Options {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // bitmap8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace Options

namespace NumberOfPrimaries {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace NumberOfPrimaries

namespace Primary1X {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace Primary1X

namespace Primary1Y {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace Primary1Y

namespace Primary1Intensity {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace Primary1Intensity

namespace Primary2X {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace Primary2X

namespace Primary2Y {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace Primary2Y

namespace Primary2Intensity {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace Primary2Intensity

namespace Primary3X {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace Primary3X

namespace Primary3Y {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace Primary3Y

namespace Primary3Intensity {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace Primary3Intensity

namespace Primary4X {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace Primary4X

namespace Primary4Y {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace Primary4Y

namespace Primary4Intensity {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace Primary4Intensity

namespace Primary5X {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace Primary5X

namespace Primary5Y {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace Primary5Y

namespace Primary5Intensity {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace Primary5Intensity

namespace Primary6X {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace Primary6X

namespace Primary6Y {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace Primary6Y

namespace Primary6Intensity {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace Primary6Intensity

namespace WhitePointX {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace WhitePointX

namespace WhitePointY {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace WhitePointY

namespace ColorPointRX {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ColorPointRX

namespace ColorPointRY {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ColorPointRY

namespace ColorPointRIntensity {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace ColorPointRIntensity

namespace ColorPointGX {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ColorPointGX

namespace ColorPointGY {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ColorPointGY

namespace ColorPointGIntensity {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace ColorPointGIntensity

namespace ColorPointBX {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ColorPointBX

namespace ColorPointBY {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ColorPointBY

namespace ColorPointBIntensity {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace ColorPointBIntensity

namespace EnhancedCurrentHue {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace EnhancedCurrentHue

namespace EnhancedColorMode {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // enum8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace EnhancedColorMode

namespace ColorLoopActive {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace ColorLoopActive

namespace ColorLoopDirection {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace ColorLoopDirection

namespace ColorLoopTime {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ColorLoopTime

namespace ColorLoopStartEnhancedHue {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ColorLoopStartEnhancedHue

namespace ColorLoopStoredEnhancedHue {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ColorLoopStoredEnhancedHue

namespace ColorCapabilities {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // bitmap16
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ColorCapabilities

namespace ColorTempPhysicalMinMireds {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ColorTempPhysicalMinMireds

namespace ColorTempPhysicalMaxMireds {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ColorTempPhysicalMaxMireds

namespace CoupleColorTempToLevelMinMireds {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace CoupleColorTempToLevelMinMireds

namespace StartUpColorTemperatureMireds {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace StartUpColorTemperatureMireds

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace ColorControl

namespace BallastConfiguration {
namespace Attributes {

namespace PhysicalMinLevel {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace PhysicalMinLevel

namespace PhysicalMaxLevel {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace PhysicalMaxLevel

namespace BallastStatus {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // bitmap8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace BallastStatus

namespace MinLevel {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace MinLevel

namespace MaxLevel {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace MaxLevel

namespace IntrinsicBalanceFactor {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace IntrinsicBalanceFactor

namespace BallastFactorAdjustment {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace BallastFactorAdjustment

namespace LampQuantity {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace LampQuantity

namespace LampType {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace LampType

namespace LampManufacturer {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace LampManufacturer

namespace LampRatedHours {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint32_t> & value); // int24u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint32_t> & value);
} // namespace LampRatedHours

namespace LampBurnHours {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint32_t> & value); // int24u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint32_t> & value);
} // namespace LampBurnHours

namespace LampAlarmMode {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // bitmap8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace LampAlarmMode

namespace LampBurnHoursTripPoint {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint32_t> & value); // int24u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint32_t> & value);
} // namespace LampBurnHoursTripPoint

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace BallastConfiguration

namespace IlluminanceMeasurement {
namespace Attributes {

namespace MeasuredValue {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace MeasuredValue

namespace MinMeasuredValue {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace MinMeasuredValue

namespace MaxMeasuredValue {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace MaxMeasuredValue

namespace Tolerance {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace Tolerance

namespace LightSensorType {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // enum8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace LightSensorType

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace IlluminanceMeasurement

namespace TemperatureMeasurement {
namespace Attributes {

namespace MeasuredValue {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int16_t> & value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int16_t> & value);
} // namespace MeasuredValue

namespace MinMeasuredValue {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int16_t> & value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int16_t> & value);
} // namespace MinMeasuredValue

namespace MaxMeasuredValue {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int16_t> & value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int16_t> & value);
} // namespace MaxMeasuredValue

namespace Tolerance {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace Tolerance

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace TemperatureMeasurement

namespace PressureMeasurement {
namespace Attributes {

namespace MeasuredValue {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int16_t> & value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int16_t> & value);
} // namespace MeasuredValue

namespace MinMeasuredValue {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int16_t> & value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int16_t> & value);
} // namespace MinMeasuredValue

namespace MaxMeasuredValue {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int16_t> & value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int16_t> & value);
} // namespace MaxMeasuredValue

namespace Tolerance {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace Tolerance

namespace ScaledValue {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int16_t> & value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int16_t> & value);
} // namespace ScaledValue

namespace MinScaledValue {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int16_t> & value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int16_t> & value);
} // namespace MinScaledValue

namespace MaxScaledValue {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int16_t> & value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int16_t> & value);
} // namespace MaxScaledValue

namespace ScaledTolerance {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ScaledTolerance

namespace Scale {
EmberAfStatus Get(chip::EndpointId endpoint, int8_t * value); // int8s
EmberAfStatus Set(chip::EndpointId endpoint, int8_t value);
} // namespace Scale

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace PressureMeasurement

namespace FlowMeasurement {
namespace Attributes {

namespace MeasuredValue {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace MeasuredValue

namespace MinMeasuredValue {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace MinMeasuredValue

namespace MaxMeasuredValue {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace MaxMeasuredValue

namespace Tolerance {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace Tolerance

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace FlowMeasurement

namespace RelativeHumidityMeasurement {
namespace Attributes {

namespace MeasuredValue {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace MeasuredValue

namespace MinMeasuredValue {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace MinMeasuredValue

namespace MaxMeasuredValue {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace MaxMeasuredValue

namespace Tolerance {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace Tolerance

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace RelativeHumidityMeasurement

namespace OccupancySensing {
namespace Attributes {

namespace Occupancy {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // bitmap8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace Occupancy

namespace OccupancySensorType {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // enum8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace OccupancySensorType

namespace OccupancySensorTypeBitmap {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // bitmap8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace OccupancySensorTypeBitmap

namespace PirOccupiedToUnoccupiedDelay {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace PirOccupiedToUnoccupiedDelay

namespace PirUnoccupiedToOccupiedDelay {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace PirUnoccupiedToOccupiedDelay

namespace PirUnoccupiedToOccupiedThreshold {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace PirUnoccupiedToOccupiedThreshold

namespace UltrasonicOccupiedToUnoccupiedDelay {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace UltrasonicOccupiedToUnoccupiedDelay

namespace UltrasonicUnoccupiedToOccupiedDelay {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace UltrasonicUnoccupiedToOccupiedDelay

namespace UltrasonicUnoccupiedToOccupiedThreshold {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace UltrasonicUnoccupiedToOccupiedThreshold

namespace PhysicalContactOccupiedToUnoccupiedDelay {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace PhysicalContactOccupiedToUnoccupiedDelay

namespace PhysicalContactUnoccupiedToOccupiedDelay {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace PhysicalContactUnoccupiedToOccupiedDelay

namespace PhysicalContactUnoccupiedToOccupiedThreshold {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace PhysicalContactUnoccupiedToOccupiedThreshold

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace OccupancySensing

namespace WakeOnLan {
namespace Attributes {

namespace MACAddress {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace MACAddress

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace WakeOnLan

namespace Channel {
namespace Attributes {

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace Channel

namespace TargetNavigator {
namespace Attributes {

namespace CurrentTarget {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace CurrentTarget

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace TargetNavigator

namespace MediaPlayback {
namespace Attributes {

namespace CurrentState {
EmberAfStatus Get(chip::EndpointId endpoint, chip::app::Clusters::MediaPlayback::PlaybackStateEnum * value); // PlaybackStateEnum
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::MediaPlayback::PlaybackStateEnum value);
} // namespace CurrentState

namespace StartTime {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint64_t> & value); // epoch_us
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint64_t> & value);
} // namespace StartTime

namespace Duration {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint64_t> & value); // int64u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint64_t> & value);
} // namespace Duration

namespace PlaybackSpeed {
EmberAfStatus Get(chip::EndpointId endpoint, float * value); // single
EmberAfStatus Set(chip::EndpointId endpoint, float value);
} // namespace PlaybackSpeed

namespace SeekRangeEnd {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint64_t> & value); // int64u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint64_t> & value);
} // namespace SeekRangeEnd

namespace SeekRangeStart {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint64_t> & value); // int64u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint64_t> & value);
} // namespace SeekRangeStart

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace MediaPlayback

namespace MediaInput {
namespace Attributes {

namespace CurrentInput {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace CurrentInput

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace MediaInput

namespace LowPower {
namespace Attributes {

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace LowPower

namespace KeypadInput {
namespace Attributes {

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace KeypadInput

namespace ContentLauncher {
namespace Attributes {

namespace SupportedStreamingProtocols {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace SupportedStreamingProtocols

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace ContentLauncher

namespace AudioOutput {
namespace Attributes {

namespace CurrentOutput {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace CurrentOutput

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace AudioOutput

namespace ApplicationLauncher {
namespace Attributes {

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace ApplicationLauncher

namespace ApplicationBasic {
namespace Attributes {

namespace VendorName {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace VendorName

namespace VendorID {
EmberAfStatus Get(chip::EndpointId endpoint, chip::VendorId * value); // vendor_id
EmberAfStatus Set(chip::EndpointId endpoint, chip::VendorId value);
} // namespace VendorID

namespace ApplicationName {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace ApplicationName

namespace ProductID {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ProductID

namespace Status {
EmberAfStatus Get(chip::EndpointId endpoint,
                  chip::app::Clusters::ApplicationBasic::ApplicationStatusEnum * value); // ApplicationStatusEnum
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::ApplicationBasic::ApplicationStatusEnum value);
} // namespace Status

namespace ApplicationVersion {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace ApplicationVersion

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace ApplicationBasic

namespace AccountLogin {
namespace Attributes {

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace AccountLogin

namespace ElectricalMeasurement {
namespace Attributes {

namespace MeasurementType {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace MeasurementType

namespace DcVoltage {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace DcVoltage

namespace DcVoltageMin {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace DcVoltageMin

namespace DcVoltageMax {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace DcVoltageMax

namespace DcCurrent {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace DcCurrent

namespace DcCurrentMin {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace DcCurrentMin

namespace DcCurrentMax {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace DcCurrentMax

namespace DcPower {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace DcPower

namespace DcPowerMin {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace DcPowerMin

namespace DcPowerMax {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace DcPowerMax

namespace DcVoltageMultiplier {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace DcVoltageMultiplier

namespace DcVoltageDivisor {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace DcVoltageDivisor

namespace DcCurrentMultiplier {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace DcCurrentMultiplier

namespace DcCurrentDivisor {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace DcCurrentDivisor

namespace DcPowerMultiplier {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace DcPowerMultiplier

namespace DcPowerDivisor {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace DcPowerDivisor

namespace AcFrequency {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace AcFrequency

namespace AcFrequencyMin {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace AcFrequencyMin

namespace AcFrequencyMax {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace AcFrequencyMax

namespace NeutralCurrent {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace NeutralCurrent

namespace TotalActivePower {
EmberAfStatus Get(chip::EndpointId endpoint, int32_t * value); // int32s
EmberAfStatus Set(chip::EndpointId endpoint, int32_t value);
} // namespace TotalActivePower

namespace TotalReactivePower {
EmberAfStatus Get(chip::EndpointId endpoint, int32_t * value); // int32s
EmberAfStatus Set(chip::EndpointId endpoint, int32_t value);
} // namespace TotalReactivePower

namespace TotalApparentPower {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace TotalApparentPower

namespace Measured1stHarmonicCurrent {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace Measured1stHarmonicCurrent

namespace Measured3rdHarmonicCurrent {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace Measured3rdHarmonicCurrent

namespace Measured5thHarmonicCurrent {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace Measured5thHarmonicCurrent

namespace Measured7thHarmonicCurrent {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace Measured7thHarmonicCurrent

namespace Measured9thHarmonicCurrent {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace Measured9thHarmonicCurrent

namespace Measured11thHarmonicCurrent {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace Measured11thHarmonicCurrent

namespace MeasuredPhase1stHarmonicCurrent {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace MeasuredPhase1stHarmonicCurrent

namespace MeasuredPhase3rdHarmonicCurrent {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace MeasuredPhase3rdHarmonicCurrent

namespace MeasuredPhase5thHarmonicCurrent {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace MeasuredPhase5thHarmonicCurrent

namespace MeasuredPhase7thHarmonicCurrent {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace MeasuredPhase7thHarmonicCurrent

namespace MeasuredPhase9thHarmonicCurrent {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace MeasuredPhase9thHarmonicCurrent

namespace MeasuredPhase11thHarmonicCurrent {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace MeasuredPhase11thHarmonicCurrent

namespace AcFrequencyMultiplier {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace AcFrequencyMultiplier

namespace AcFrequencyDivisor {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace AcFrequencyDivisor

namespace PowerMultiplier {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace PowerMultiplier

namespace PowerDivisor {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace PowerDivisor

namespace HarmonicCurrentMultiplier {
EmberAfStatus Get(chip::EndpointId endpoint, int8_t * value); // int8s
EmberAfStatus Set(chip::EndpointId endpoint, int8_t value);
} // namespace HarmonicCurrentMultiplier

namespace PhaseHarmonicCurrentMultiplier {
EmberAfStatus Get(chip::EndpointId endpoint, int8_t * value); // int8s
EmberAfStatus Set(chip::EndpointId endpoint, int8_t value);
} // namespace PhaseHarmonicCurrentMultiplier

namespace InstantaneousVoltage {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace InstantaneousVoltage

namespace InstantaneousLineCurrent {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace InstantaneousLineCurrent

namespace InstantaneousActiveCurrent {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace InstantaneousActiveCurrent

namespace InstantaneousReactiveCurrent {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace InstantaneousReactiveCurrent

namespace InstantaneousPower {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace InstantaneousPower

namespace RmsVoltage {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsVoltage

namespace RmsVoltageMin {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsVoltageMin

namespace RmsVoltageMax {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsVoltageMax

namespace RmsCurrent {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsCurrent

namespace RmsCurrentMin {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsCurrentMin

namespace RmsCurrentMax {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsCurrentMax

namespace ActivePower {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace ActivePower

namespace ActivePowerMin {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace ActivePowerMin

namespace ActivePowerMax {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace ActivePowerMax

namespace ReactivePower {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace ReactivePower

namespace ApparentPower {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ApparentPower

namespace PowerFactor {
EmberAfStatus Get(chip::EndpointId endpoint, int8_t * value); // int8s
EmberAfStatus Set(chip::EndpointId endpoint, int8_t value);
} // namespace PowerFactor

namespace AverageRmsVoltageMeasurementPeriod {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace AverageRmsVoltageMeasurementPeriod

namespace AverageRmsUnderVoltageCounter {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace AverageRmsUnderVoltageCounter

namespace RmsExtremeOverVoltagePeriod {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsExtremeOverVoltagePeriod

namespace RmsExtremeUnderVoltagePeriod {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsExtremeUnderVoltagePeriod

namespace RmsVoltageSagPeriod {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsVoltageSagPeriod

namespace RmsVoltageSwellPeriod {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsVoltageSwellPeriod

namespace AcVoltageMultiplier {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace AcVoltageMultiplier

namespace AcVoltageDivisor {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace AcVoltageDivisor

namespace AcCurrentMultiplier {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace AcCurrentMultiplier

namespace AcCurrentDivisor {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace AcCurrentDivisor

namespace AcPowerMultiplier {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace AcPowerMultiplier

namespace AcPowerDivisor {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace AcPowerDivisor

namespace OverloadAlarmsMask {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // bitmap8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace OverloadAlarmsMask

namespace VoltageOverload {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace VoltageOverload

namespace CurrentOverload {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace CurrentOverload

namespace AcOverloadAlarmsMask {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // bitmap16
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace AcOverloadAlarmsMask

namespace AcVoltageOverload {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace AcVoltageOverload

namespace AcCurrentOverload {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace AcCurrentOverload

namespace AcActivePowerOverload {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace AcActivePowerOverload

namespace AcReactivePowerOverload {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace AcReactivePowerOverload

namespace AverageRmsOverVoltage {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace AverageRmsOverVoltage

namespace AverageRmsUnderVoltage {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace AverageRmsUnderVoltage

namespace RmsExtremeOverVoltage {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace RmsExtremeOverVoltage

namespace RmsExtremeUnderVoltage {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace RmsExtremeUnderVoltage

namespace RmsVoltageSag {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace RmsVoltageSag

namespace RmsVoltageSwell {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace RmsVoltageSwell

namespace LineCurrentPhaseB {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace LineCurrentPhaseB

namespace ActiveCurrentPhaseB {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace ActiveCurrentPhaseB

namespace ReactiveCurrentPhaseB {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace ReactiveCurrentPhaseB

namespace RmsVoltagePhaseB {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsVoltagePhaseB

namespace RmsVoltageMinPhaseB {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsVoltageMinPhaseB

namespace RmsVoltageMaxPhaseB {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsVoltageMaxPhaseB

namespace RmsCurrentPhaseB {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsCurrentPhaseB

namespace RmsCurrentMinPhaseB {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsCurrentMinPhaseB

namespace RmsCurrentMaxPhaseB {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsCurrentMaxPhaseB

namespace ActivePowerPhaseB {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace ActivePowerPhaseB

namespace ActivePowerMinPhaseB {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace ActivePowerMinPhaseB

namespace ActivePowerMaxPhaseB {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace ActivePowerMaxPhaseB

namespace ReactivePowerPhaseB {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace ReactivePowerPhaseB

namespace ApparentPowerPhaseB {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ApparentPowerPhaseB

namespace PowerFactorPhaseB {
EmberAfStatus Get(chip::EndpointId endpoint, int8_t * value); // int8s
EmberAfStatus Set(chip::EndpointId endpoint, int8_t value);
} // namespace PowerFactorPhaseB

namespace AverageRmsVoltageMeasurementPeriodPhaseB {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace AverageRmsVoltageMeasurementPeriodPhaseB

namespace AverageRmsOverVoltageCounterPhaseB {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace AverageRmsOverVoltageCounterPhaseB

namespace AverageRmsUnderVoltageCounterPhaseB {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace AverageRmsUnderVoltageCounterPhaseB

namespace RmsExtremeOverVoltagePeriodPhaseB {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsExtremeOverVoltagePeriodPhaseB

namespace RmsExtremeUnderVoltagePeriodPhaseB {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsExtremeUnderVoltagePeriodPhaseB

namespace RmsVoltageSagPeriodPhaseB {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsVoltageSagPeriodPhaseB

namespace RmsVoltageSwellPeriodPhaseB {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsVoltageSwellPeriodPhaseB

namespace LineCurrentPhaseC {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace LineCurrentPhaseC

namespace ActiveCurrentPhaseC {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace ActiveCurrentPhaseC

namespace ReactiveCurrentPhaseC {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace ReactiveCurrentPhaseC

namespace RmsVoltagePhaseC {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsVoltagePhaseC

namespace RmsVoltageMinPhaseC {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsVoltageMinPhaseC

namespace RmsVoltageMaxPhaseC {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsVoltageMaxPhaseC

namespace RmsCurrentPhaseC {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsCurrentPhaseC

namespace RmsCurrentMinPhaseC {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsCurrentMinPhaseC

namespace RmsCurrentMaxPhaseC {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsCurrentMaxPhaseC

namespace ActivePowerPhaseC {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace ActivePowerPhaseC

namespace ActivePowerMinPhaseC {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace ActivePowerMinPhaseC

namespace ActivePowerMaxPhaseC {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace ActivePowerMaxPhaseC

namespace ReactivePowerPhaseC {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace ReactivePowerPhaseC

namespace ApparentPowerPhaseC {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ApparentPowerPhaseC

namespace PowerFactorPhaseC {
EmberAfStatus Get(chip::EndpointId endpoint, int8_t * value); // int8s
EmberAfStatus Set(chip::EndpointId endpoint, int8_t value);
} // namespace PowerFactorPhaseC

namespace AverageRmsVoltageMeasurementPeriodPhaseC {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace AverageRmsVoltageMeasurementPeriodPhaseC

namespace AverageRmsOverVoltageCounterPhaseC {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace AverageRmsOverVoltageCounterPhaseC

namespace AverageRmsUnderVoltageCounterPhaseC {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace AverageRmsUnderVoltageCounterPhaseC

namespace RmsExtremeOverVoltagePeriodPhaseC {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsExtremeOverVoltagePeriodPhaseC

namespace RmsExtremeUnderVoltagePeriodPhaseC {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsExtremeUnderVoltagePeriodPhaseC

namespace RmsVoltageSagPeriodPhaseC {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsVoltageSagPeriodPhaseC

namespace RmsVoltageSwellPeriodPhaseC {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RmsVoltageSwellPeriodPhaseC

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace ElectricalMeasurement

namespace TestCluster {
namespace Attributes {

namespace Boolean {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace Boolean

namespace Bitmap8 {
EmberAfStatus Get(chip::EndpointId endpoint,
                  chip::BitMask<chip::app::Clusters::TestCluster::Bitmap8MaskMap> * value); // Bitmap8MaskMap
EmberAfStatus Set(chip::EndpointId endpoint, chip::BitMask<chip::app::Clusters::TestCluster::Bitmap8MaskMap> value);
} // namespace Bitmap8

namespace Bitmap16 {
EmberAfStatus Get(chip::EndpointId endpoint,
                  chip::BitMask<chip::app::Clusters::TestCluster::Bitmap16MaskMap> * value); // Bitmap16MaskMap
EmberAfStatus Set(chip::EndpointId endpoint, chip::BitMask<chip::app::Clusters::TestCluster::Bitmap16MaskMap> value);
} // namespace Bitmap16

namespace Bitmap32 {
EmberAfStatus Get(chip::EndpointId endpoint,
                  chip::BitMask<chip::app::Clusters::TestCluster::Bitmap32MaskMap> * value); // Bitmap32MaskMap
EmberAfStatus Set(chip::EndpointId endpoint, chip::BitMask<chip::app::Clusters::TestCluster::Bitmap32MaskMap> value);
} // namespace Bitmap32

namespace Bitmap64 {
EmberAfStatus Get(chip::EndpointId endpoint,
                  chip::BitMask<chip::app::Clusters::TestCluster::Bitmap64MaskMap> * value); // Bitmap64MaskMap
EmberAfStatus Set(chip::EndpointId endpoint, chip::BitMask<chip::app::Clusters::TestCluster::Bitmap64MaskMap> value);
} // namespace Bitmap64

namespace Int8u {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace Int8u

namespace Int16u {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace Int16u

namespace Int24u {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int24u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace Int24u

namespace Int32u {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace Int32u

namespace Int40u {
EmberAfStatus Get(chip::EndpointId endpoint, uint64_t * value); // int40u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
} // namespace Int40u

namespace Int48u {
EmberAfStatus Get(chip::EndpointId endpoint, uint64_t * value); // int48u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
} // namespace Int48u

namespace Int56u {
EmberAfStatus Get(chip::EndpointId endpoint, uint64_t * value); // int56u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
} // namespace Int56u

namespace Int64u {
EmberAfStatus Get(chip::EndpointId endpoint, uint64_t * value); // int64u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
} // namespace Int64u

namespace Int8s {
EmberAfStatus Get(chip::EndpointId endpoint, int8_t * value); // int8s
EmberAfStatus Set(chip::EndpointId endpoint, int8_t value);
} // namespace Int8s

namespace Int16s {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace Int16s

namespace Int24s {
EmberAfStatus Get(chip::EndpointId endpoint, int32_t * value); // int24s
EmberAfStatus Set(chip::EndpointId endpoint, int32_t value);
} // namespace Int24s

namespace Int32s {
EmberAfStatus Get(chip::EndpointId endpoint, int32_t * value); // int32s
EmberAfStatus Set(chip::EndpointId endpoint, int32_t value);
} // namespace Int32s

namespace Int40s {
EmberAfStatus Get(chip::EndpointId endpoint, int64_t * value); // int40s
EmberAfStatus Set(chip::EndpointId endpoint, int64_t value);
} // namespace Int40s

namespace Int48s {
EmberAfStatus Get(chip::EndpointId endpoint, int64_t * value); // int48s
EmberAfStatus Set(chip::EndpointId endpoint, int64_t value);
} // namespace Int48s

namespace Int56s {
EmberAfStatus Get(chip::EndpointId endpoint, int64_t * value); // int56s
EmberAfStatus Set(chip::EndpointId endpoint, int64_t value);
} // namespace Int56s

namespace Int64s {
EmberAfStatus Get(chip::EndpointId endpoint, int64_t * value); // int64s
EmberAfStatus Set(chip::EndpointId endpoint, int64_t value);
} // namespace Int64s

namespace Enum8 {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // enum8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace Enum8

namespace Enum16 {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // enum16
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace Enum16

namespace FloatSingle {
EmberAfStatus Get(chip::EndpointId endpoint, float * value); // single
EmberAfStatus Set(chip::EndpointId endpoint, float value);
} // namespace FloatSingle

namespace FloatDouble {
EmberAfStatus Get(chip::EndpointId endpoint, double * value); // double
EmberAfStatus Set(chip::EndpointId endpoint, double value);
} // namespace FloatDouble

namespace OctetString {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableByteSpan value); // octet_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::ByteSpan value);
} // namespace OctetString

namespace LongOctetString {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableByteSpan value); // long_octet_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::ByteSpan value);
} // namespace LongOctetString

namespace CharString {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace CharString

namespace LongCharString {
EmberAfStatus Get(chip::EndpointId endpoint, chip::MutableCharSpan value); // long_char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
} // namespace LongCharString

namespace EpochUs {
EmberAfStatus Get(chip::EndpointId endpoint, uint64_t * value); // epoch_us
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
} // namespace EpochUs

namespace EpochS {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // epoch_s
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace EpochS

namespace VendorId {
EmberAfStatus Get(chip::EndpointId endpoint, chip::VendorId * value); // vendor_id
EmberAfStatus Set(chip::EndpointId endpoint, chip::VendorId value);
} // namespace VendorId

namespace EnumAttr {
EmberAfStatus Get(chip::EndpointId endpoint, chip::app::Clusters::TestCluster::SimpleEnum * value); // SimpleEnum
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::TestCluster::SimpleEnum value);
} // namespace EnumAttr

namespace RangeRestrictedInt8u {
EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
} // namespace RangeRestrictedInt8u

namespace RangeRestrictedInt8s {
EmberAfStatus Get(chip::EndpointId endpoint, int8_t * value); // int8s
EmberAfStatus Set(chip::EndpointId endpoint, int8_t value);
} // namespace RangeRestrictedInt8s

namespace RangeRestrictedInt16u {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace RangeRestrictedInt16u

namespace RangeRestrictedInt16s {
EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
} // namespace RangeRestrictedInt16s

namespace TimedWriteBoolean {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace TimedWriteBoolean

namespace GeneralErrorBoolean {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace GeneralErrorBoolean

namespace ClusterErrorBoolean {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace ClusterErrorBoolean

namespace Unsupported {
EmberAfStatus Get(chip::EndpointId endpoint, bool * value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
} // namespace Unsupported

namespace NullableBoolean {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<bool> & value); // boolean
EmberAfStatus Set(chip::EndpointId endpoint, bool value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<bool> & value);
} // namespace NullableBoolean

namespace NullableBitmap8 {
EmberAfStatus Get(chip::EndpointId endpoint,
                  DataModel::Nullable<chip::BitMask<chip::app::Clusters::TestCluster::Bitmap8MaskMap>> & value); // Bitmap8MaskMap
EmberAfStatus Set(chip::EndpointId endpoint, chip::BitMask<chip::app::Clusters::TestCluster::Bitmap8MaskMap> value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint,
                  const chip::app::DataModel::Nullable<chip::BitMask<chip::app::Clusters::TestCluster::Bitmap8MaskMap>> & value);
} // namespace NullableBitmap8

namespace NullableBitmap16 {
EmberAfStatus Get(chip::EndpointId endpoint,
                  DataModel::Nullable<chip::BitMask<chip::app::Clusters::TestCluster::Bitmap16MaskMap>> & value); // Bitmap16MaskMap
EmberAfStatus Set(chip::EndpointId endpoint, chip::BitMask<chip::app::Clusters::TestCluster::Bitmap16MaskMap> value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint,
                  const chip::app::DataModel::Nullable<chip::BitMask<chip::app::Clusters::TestCluster::Bitmap16MaskMap>> & value);
} // namespace NullableBitmap16

namespace NullableBitmap32 {
EmberAfStatus Get(chip::EndpointId endpoint,
                  DataModel::Nullable<chip::BitMask<chip::app::Clusters::TestCluster::Bitmap32MaskMap>> & value); // Bitmap32MaskMap
EmberAfStatus Set(chip::EndpointId endpoint, chip::BitMask<chip::app::Clusters::TestCluster::Bitmap32MaskMap> value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint,
                  const chip::app::DataModel::Nullable<chip::BitMask<chip::app::Clusters::TestCluster::Bitmap32MaskMap>> & value);
} // namespace NullableBitmap32

namespace NullableBitmap64 {
EmberAfStatus Get(chip::EndpointId endpoint,
                  DataModel::Nullable<chip::BitMask<chip::app::Clusters::TestCluster::Bitmap64MaskMap>> & value); // Bitmap64MaskMap
EmberAfStatus Set(chip::EndpointId endpoint, chip::BitMask<chip::app::Clusters::TestCluster::Bitmap64MaskMap> value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint,
                  const chip::app::DataModel::Nullable<chip::BitMask<chip::app::Clusters::TestCluster::Bitmap64MaskMap>> & value);
} // namespace NullableBitmap64

namespace NullableInt8u {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace NullableInt8u

namespace NullableInt16u {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace NullableInt16u

namespace NullableInt24u {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint32_t> & value); // int24u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint32_t> & value);
} // namespace NullableInt24u

namespace NullableInt32u {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint32_t> & value); // int32u
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint32_t> & value);
} // namespace NullableInt32u

namespace NullableInt40u {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint64_t> & value); // int40u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint64_t> & value);
} // namespace NullableInt40u

namespace NullableInt48u {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint64_t> & value); // int48u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint64_t> & value);
} // namespace NullableInt48u

namespace NullableInt56u {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint64_t> & value); // int56u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint64_t> & value);
} // namespace NullableInt56u

namespace NullableInt64u {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint64_t> & value); // int64u
EmberAfStatus Set(chip::EndpointId endpoint, uint64_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint64_t> & value);
} // namespace NullableInt64u

namespace NullableInt8s {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int8_t> & value); // int8s
EmberAfStatus Set(chip::EndpointId endpoint, int8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int8_t> & value);
} // namespace NullableInt8s

namespace NullableInt16s {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int16_t> & value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int16_t> & value);
} // namespace NullableInt16s

namespace NullableInt24s {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int32_t> & value); // int24s
EmberAfStatus Set(chip::EndpointId endpoint, int32_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int32_t> & value);
} // namespace NullableInt24s

namespace NullableInt32s {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int32_t> & value); // int32s
EmberAfStatus Set(chip::EndpointId endpoint, int32_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int32_t> & value);
} // namespace NullableInt32s

namespace NullableInt40s {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int64_t> & value); // int40s
EmberAfStatus Set(chip::EndpointId endpoint, int64_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int64_t> & value);
} // namespace NullableInt40s

namespace NullableInt48s {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int64_t> & value); // int48s
EmberAfStatus Set(chip::EndpointId endpoint, int64_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int64_t> & value);
} // namespace NullableInt48s

namespace NullableInt56s {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int64_t> & value); // int56s
EmberAfStatus Set(chip::EndpointId endpoint, int64_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int64_t> & value);
} // namespace NullableInt56s

namespace NullableInt64s {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int64_t> & value); // int64s
EmberAfStatus Set(chip::EndpointId endpoint, int64_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int64_t> & value);
} // namespace NullableInt64s

namespace NullableEnum8 {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // enum8
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace NullableEnum8

namespace NullableEnum16 {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // enum16
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace NullableEnum16

namespace NullableFloatSingle {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<float> & value); // single
EmberAfStatus Set(chip::EndpointId endpoint, float value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<float> & value);
} // namespace NullableFloatSingle

namespace NullableFloatDouble {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<double> & value); // double
EmberAfStatus Set(chip::EndpointId endpoint, double value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<double> & value);
} // namespace NullableFloatDouble

namespace NullableOctetString {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<chip::MutableByteSpan> & value); // octet_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::ByteSpan value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<chip::ByteSpan> & value);
} // namespace NullableOctetString

namespace NullableCharString {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<chip::MutableCharSpan> & value); // char_string
EmberAfStatus Set(chip::EndpointId endpoint, chip::CharSpan value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<chip::CharSpan> & value);
} // namespace NullableCharString

namespace NullableEnumAttr {
EmberAfStatus Get(chip::EndpointId endpoint,
                  DataModel::Nullable<chip::app::Clusters::TestCluster::SimpleEnum> & value); // SimpleEnum
EmberAfStatus Set(chip::EndpointId endpoint, chip::app::Clusters::TestCluster::SimpleEnum value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint,
                  const chip::app::DataModel::Nullable<chip::app::Clusters::TestCluster::SimpleEnum> & value);
} // namespace NullableEnumAttr

namespace NullableRangeRestrictedInt8u {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint8_t> & value); // int8u
EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint8_t> & value);
} // namespace NullableRangeRestrictedInt8u

namespace NullableRangeRestrictedInt8s {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int8_t> & value); // int8s
EmberAfStatus Set(chip::EndpointId endpoint, int8_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int8_t> & value);
} // namespace NullableRangeRestrictedInt8s

namespace NullableRangeRestrictedInt16u {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<uint16_t> & value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<uint16_t> & value);
} // namespace NullableRangeRestrictedInt16u

namespace NullableRangeRestrictedInt16s {
EmberAfStatus Get(chip::EndpointId endpoint, DataModel::Nullable<int16_t> & value); // int16s
EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
EmberAfStatus SetNull(chip::EndpointId endpoint);
EmberAfStatus Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable<int16_t> & value);
} // namespace NullableRangeRestrictedInt16s

namespace FeatureMap {
EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
} // namespace FeatureMap

namespace ClusterRevision {
EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace ClusterRevision

} // namespace Attributes
} // namespace TestCluster

} // namespace Clusters
} // namespace app
} // namespace chip
