/*
 *
 *    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

#import <Foundation/Foundation.h>

#import "MTRDevice.h"

@interface MTRIdentify ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::IdentifyCluster * cppCluster;
- (chip::Controller::IdentifyCluster **)cppClusterSlot;
@end

@interface MTRGroups ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::GroupsCluster * cppCluster;
- (chip::Controller::GroupsCluster **)cppClusterSlot;
@end

@interface MTRScenes ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::ScenesCluster * cppCluster;
- (chip::Controller::ScenesCluster **)cppClusterSlot;
@end

@interface MTROnOff ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::OnOffCluster * cppCluster;
- (chip::Controller::OnOffCluster **)cppClusterSlot;
@end

@interface MTROnOffSwitchConfiguration ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::OnOffSwitchConfigurationCluster * cppCluster;
- (chip::Controller::OnOffSwitchConfigurationCluster **)cppClusterSlot;
@end

@interface MTRLevelControl ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::LevelControlCluster * cppCluster;
- (chip::Controller::LevelControlCluster **)cppClusterSlot;
@end

@interface MTRBinaryInputBasic ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::BinaryInputBasicCluster * cppCluster;
- (chip::Controller::BinaryInputBasicCluster **)cppClusterSlot;
@end

@interface MTRDescriptor ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::DescriptorCluster * cppCluster;
- (chip::Controller::DescriptorCluster **)cppClusterSlot;
@end

@interface MTRBinding ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::BindingCluster * cppCluster;
- (chip::Controller::BindingCluster **)cppClusterSlot;
@end

@interface MTRAccessControl ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::AccessControlCluster * cppCluster;
- (chip::Controller::AccessControlCluster **)cppClusterSlot;
@end

@interface MTRActions ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::ActionsCluster * cppCluster;
- (chip::Controller::ActionsCluster **)cppClusterSlot;
@end

@interface MTRBasic ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::BasicCluster * cppCluster;
- (chip::Controller::BasicCluster **)cppClusterSlot;
@end

@interface MTROtaSoftwareUpdateProvider ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::OtaSoftwareUpdateProviderCluster * cppCluster;
- (chip::Controller::OtaSoftwareUpdateProviderCluster **)cppClusterSlot;
@end

@interface MTROtaSoftwareUpdateRequestor ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::OtaSoftwareUpdateRequestorCluster * cppCluster;
- (chip::Controller::OtaSoftwareUpdateRequestorCluster **)cppClusterSlot;
@end

@interface MTRLocalizationConfiguration ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::LocalizationConfigurationCluster * cppCluster;
- (chip::Controller::LocalizationConfigurationCluster **)cppClusterSlot;
@end

@interface MTRTimeFormatLocalization ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::TimeFormatLocalizationCluster * cppCluster;
- (chip::Controller::TimeFormatLocalizationCluster **)cppClusterSlot;
@end

@interface MTRUnitLocalization ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::UnitLocalizationCluster * cppCluster;
- (chip::Controller::UnitLocalizationCluster **)cppClusterSlot;
@end

@interface MTRPowerSourceConfiguration ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::PowerSourceConfigurationCluster * cppCluster;
- (chip::Controller::PowerSourceConfigurationCluster **)cppClusterSlot;
@end

@interface MTRPowerSource ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::PowerSourceCluster * cppCluster;
- (chip::Controller::PowerSourceCluster **)cppClusterSlot;
@end

@interface MTRGeneralCommissioning ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::GeneralCommissioningCluster * cppCluster;
- (chip::Controller::GeneralCommissioningCluster **)cppClusterSlot;
@end

@interface MTRNetworkCommissioning ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::NetworkCommissioningCluster * cppCluster;
- (chip::Controller::NetworkCommissioningCluster **)cppClusterSlot;
@end

@interface MTRDiagnosticLogs ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::DiagnosticLogsCluster * cppCluster;
- (chip::Controller::DiagnosticLogsCluster **)cppClusterSlot;
@end

@interface MTRGeneralDiagnostics ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::GeneralDiagnosticsCluster * cppCluster;
- (chip::Controller::GeneralDiagnosticsCluster **)cppClusterSlot;
@end

@interface MTRSoftwareDiagnostics ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::SoftwareDiagnosticsCluster * cppCluster;
- (chip::Controller::SoftwareDiagnosticsCluster **)cppClusterSlot;
@end

@interface MTRThreadNetworkDiagnostics ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::ThreadNetworkDiagnosticsCluster * cppCluster;
- (chip::Controller::ThreadNetworkDiagnosticsCluster **)cppClusterSlot;
@end

@interface MTRWiFiNetworkDiagnostics ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::WiFiNetworkDiagnosticsCluster * cppCluster;
- (chip::Controller::WiFiNetworkDiagnosticsCluster **)cppClusterSlot;
@end

@interface MTREthernetNetworkDiagnostics ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::EthernetNetworkDiagnosticsCluster * cppCluster;
- (chip::Controller::EthernetNetworkDiagnosticsCluster **)cppClusterSlot;
@end

@interface MTRBridgedDeviceBasic ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::BridgedDeviceBasicCluster * cppCluster;
- (chip::Controller::BridgedDeviceBasicCluster **)cppClusterSlot;
@end

@interface MTRSwitch ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::SwitchCluster * cppCluster;
- (chip::Controller::SwitchCluster **)cppClusterSlot;
@end

@interface MTRAdministratorCommissioning ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::AdministratorCommissioningCluster * cppCluster;
- (chip::Controller::AdministratorCommissioningCluster **)cppClusterSlot;
@end

@interface MTROperationalCredentials ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::OperationalCredentialsCluster * cppCluster;
- (chip::Controller::OperationalCredentialsCluster **)cppClusterSlot;
@end

@interface MTRGroupKeyManagement ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::GroupKeyManagementCluster * cppCluster;
- (chip::Controller::GroupKeyManagementCluster **)cppClusterSlot;
@end

@interface MTRFixedLabel ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::FixedLabelCluster * cppCluster;
- (chip::Controller::FixedLabelCluster **)cppClusterSlot;
@end

@interface MTRUserLabel ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::UserLabelCluster * cppCluster;
- (chip::Controller::UserLabelCluster **)cppClusterSlot;
@end

@interface MTRBooleanState ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::BooleanStateCluster * cppCluster;
- (chip::Controller::BooleanStateCluster **)cppClusterSlot;
@end

@interface MTRModeSelect ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::ModeSelectCluster * cppCluster;
- (chip::Controller::ModeSelectCluster **)cppClusterSlot;
@end

@interface MTRDoorLock ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::DoorLockCluster * cppCluster;
- (chip::Controller::DoorLockCluster **)cppClusterSlot;
@end

@interface MTRWindowCovering ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::WindowCoveringCluster * cppCluster;
- (chip::Controller::WindowCoveringCluster **)cppClusterSlot;
@end

@interface MTRBarrierControl ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::BarrierControlCluster * cppCluster;
- (chip::Controller::BarrierControlCluster **)cppClusterSlot;
@end

@interface MTRPumpConfigurationAndControl ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::PumpConfigurationAndControlCluster * cppCluster;
- (chip::Controller::PumpConfigurationAndControlCluster **)cppClusterSlot;
@end

@interface MTRThermostat ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::ThermostatCluster * cppCluster;
- (chip::Controller::ThermostatCluster **)cppClusterSlot;
@end

@interface MTRFanControl ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::FanControlCluster * cppCluster;
- (chip::Controller::FanControlCluster **)cppClusterSlot;
@end

@interface MTRThermostatUserInterfaceConfiguration ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::ThermostatUserInterfaceConfigurationCluster * cppCluster;
- (chip::Controller::ThermostatUserInterfaceConfigurationCluster **)cppClusterSlot;
@end

@interface MTRColorControl ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::ColorControlCluster * cppCluster;
- (chip::Controller::ColorControlCluster **)cppClusterSlot;
@end

@interface MTRIlluminanceMeasurement ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::IlluminanceMeasurementCluster * cppCluster;
- (chip::Controller::IlluminanceMeasurementCluster **)cppClusterSlot;
@end

@interface MTRTemperatureMeasurement ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::TemperatureMeasurementCluster * cppCluster;
- (chip::Controller::TemperatureMeasurementCluster **)cppClusterSlot;
@end

@interface MTRPressureMeasurement ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::PressureMeasurementCluster * cppCluster;
- (chip::Controller::PressureMeasurementCluster **)cppClusterSlot;
@end

@interface MTRFlowMeasurement ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::FlowMeasurementCluster * cppCluster;
- (chip::Controller::FlowMeasurementCluster **)cppClusterSlot;
@end

@interface MTRRelativeHumidityMeasurement ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::RelativeHumidityMeasurementCluster * cppCluster;
- (chip::Controller::RelativeHumidityMeasurementCluster **)cppClusterSlot;
@end

@interface MTROccupancySensing ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::OccupancySensingCluster * cppCluster;
- (chip::Controller::OccupancySensingCluster **)cppClusterSlot;
@end

@interface MTRWakeOnLan ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::WakeOnLanCluster * cppCluster;
- (chip::Controller::WakeOnLanCluster **)cppClusterSlot;
@end

@interface MTRChannel ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::ChannelCluster * cppCluster;
- (chip::Controller::ChannelCluster **)cppClusterSlot;
@end

@interface MTRTargetNavigator ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::TargetNavigatorCluster * cppCluster;
- (chip::Controller::TargetNavigatorCluster **)cppClusterSlot;
@end

@interface MTRMediaPlayback ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::MediaPlaybackCluster * cppCluster;
- (chip::Controller::MediaPlaybackCluster **)cppClusterSlot;
@end

@interface MTRMediaInput ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::MediaInputCluster * cppCluster;
- (chip::Controller::MediaInputCluster **)cppClusterSlot;
@end

@interface MTRLowPower ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::LowPowerCluster * cppCluster;
- (chip::Controller::LowPowerCluster **)cppClusterSlot;
@end

@interface MTRKeypadInput ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::KeypadInputCluster * cppCluster;
- (chip::Controller::KeypadInputCluster **)cppClusterSlot;
@end

@interface MTRContentLauncher ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::ContentLauncherCluster * cppCluster;
- (chip::Controller::ContentLauncherCluster **)cppClusterSlot;
@end

@interface MTRAudioOutput ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::AudioOutputCluster * cppCluster;
- (chip::Controller::AudioOutputCluster **)cppClusterSlot;
@end

@interface MTRApplicationLauncher ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::ApplicationLauncherCluster * cppCluster;
- (chip::Controller::ApplicationLauncherCluster **)cppClusterSlot;
@end

@interface MTRApplicationBasic ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::ApplicationBasicCluster * cppCluster;
- (chip::Controller::ApplicationBasicCluster **)cppClusterSlot;
@end

@interface MTRAccountLogin ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::AccountLoginCluster * cppCluster;
- (chip::Controller::AccountLoginCluster **)cppClusterSlot;
@end

@interface MTRElectricalMeasurement ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::ElectricalMeasurementCluster * cppCluster;
- (chip::Controller::ElectricalMeasurementCluster **)cppClusterSlot;
@end

@interface MTRTestCluster ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::TestClusterCluster * cppCluster;
- (chip::Controller::TestClusterCluster **)cppClusterSlot;
@end
