text: /*
   *
   *    Copyright (c) 2021 Project CHIP Authors
   *
   *    Licensed under the Apache License, Version 2.0 (the "License");
   *    you may not use this file except in compliance with the License.
   *    You may obtain a copy of the License at
   *
   *        http://www.apache.org/licenses/LICENSE-2.0
   *
   *    Unless required by applicable law or agreed to in writing, software
   *    distributed under the License is distributed on an "AS IS" BASIS,
   *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *    See the License for the specific language governing permissions and
   *    limitations under the License.
   */
  
  // THIS FILE IS GENERATED BY ZAP
  
  // Prevent multiple inclusion
  #pragma once
  
  #include <app/common/gen/af-structs.h>
  #include <app/util/af-types.h>
  #include <app/util/basic-types.h>
  
  #include <app/Command.h>
  #include <lib/support/Span.h>
  
  /** @brief Cluster Init
   *
   * This function is called when a specific cluster is initialized. It gives the
   * application an opportunity to take care of cluster initialization procedures.
   * It is called exactly once for each endpoint where cluster is present.
   *
   * @param endpoint   Ver.: always
   * @param clusterId   Ver.: always
   */
  void emberAfClusterInitCallback(chip::EndpointId endpoint, chip::ClusterId clusterId);
  
  // Cluster Init Functions
  
  /** @brief Account Login Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfAccountLoginClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Application Basic Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfApplicationBasicClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Application Launcher Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfApplicationLauncherClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Audio Output Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfAudioOutputClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Barrier Control Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfBarrierControlClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Basic Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfBasicClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Binary Input (Basic) Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfBinaryInputBasicClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Binding Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfBindingClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Bridged Device Basic Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfBridgedDeviceBasicClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Color Control Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfColorControlClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Content Launcher Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfContentLauncherClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Descriptor Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfDescriptorClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Diagnostic Logs Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfDiagnosticLogsClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Door Lock Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfDoorLockClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Electrical Measurement Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfElectricalMeasurementClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Ethernet Network Diagnostics Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfEthernetNetworkDiagnosticsClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Fixed Label Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfFixedLabelClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Flow Measurement Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfFlowMeasurementClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief General Commissioning Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfGeneralCommissioningClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief General Diagnostics Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfGeneralDiagnosticsClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Group Key Management Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfGroupKeyManagementClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Groups Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfGroupsClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Identify Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfIdentifyClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Keypad Input Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfKeypadInputClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Level Control Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfLevelControlClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Low Power Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfLowPowerClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Media Input Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfMediaInputClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Media Playback Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfMediaPlaybackClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Network Commissioning Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfNetworkCommissioningClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief OTA Software Update Provider Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfOtaSoftwareUpdateProviderClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief On/off Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfOnOffClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Operational Credentials Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfOperationalCredentialsClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Pressure Measurement Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfPressureMeasurementClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Pump Configuration and Control Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfPumpConfigurationAndControlClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Relative Humidity Measurement Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfRelativeHumidityMeasurementClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Scenes Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfScenesClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Software Diagnostics Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfSoftwareDiagnosticsClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Switch Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfSwitchClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief TV Channel Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfTvChannelClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Target Navigator Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfTargetNavigatorClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Temperature Measurement Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfTemperatureMeasurementClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Test Cluster Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfTestClusterClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Thermostat Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfThermostatClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Thread Network Diagnostics Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfThreadNetworkDiagnosticsClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Wake on LAN Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfWakeOnLanClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief WiFi Network Diagnostics Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfWiFiNetworkDiagnosticsClusterInitCallback(chip::EndpointId endpoint);
  
  /** @brief Window Covering Cluster Init
   *
   * Cluster Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfWindowCoveringClusterInitCallback(chip::EndpointId endpoint);
  
  // Cluster Server/Client Init Functions
  
  //
  // Account Login Cluster client
  //
  
  /** @brief Account Login Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfAccountLoginClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Account Login Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfAccountLoginClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Account Login Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfAccountLoginClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                    chip::AttributeId attributeId,
                                                                                    uint16_t manufacturerCode);
  
  /** @brief Account Login Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfAccountLoginClusterClientMessageSentCallback(const chip::MessageSendDestination & destination, EmberApsFrame * apsFrame,
                                                           uint16_t msgLen, uint8_t * message, EmberStatus status);
  
  /** @brief Account Login Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfAccountLoginClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
                                                                            EmberAfAttributeType attributeType, uint16_t size,
                                                                            uint8_t * value);
  
  /** @brief Account Login Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfAccountLoginClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Application Basic Cluster client
  //
  
  /** @brief Application Basic Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfApplicationBasicClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Application Basic Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfApplicationBasicClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Application Basic Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfApplicationBasicClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                        chip::AttributeId attributeId,
                                                                                        uint16_t manufacturerCode);
  
  /** @brief Application Basic Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfApplicationBasicClusterClientMessageSentCallback(const chip::MessageSendDestination & destination,
                                                               EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
                                                               EmberStatus status);
  
  /** @brief Application Basic Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfApplicationBasicClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                chip::AttributeId attributeId,
                                                                                EmberAfAttributeType attributeType, uint16_t size,
                                                                                uint8_t * value);
  
  /** @brief Application Basic Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfApplicationBasicClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Application Launcher Cluster client
  //
  
  /** @brief Application Launcher Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfApplicationLauncherClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Application Launcher Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfApplicationLauncherClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Application Launcher Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfApplicationLauncherClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                           chip::AttributeId attributeId,
                                                                                           uint16_t manufacturerCode);
  
  /** @brief Application Launcher Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfApplicationLauncherClusterClientMessageSentCallback(const chip::MessageSendDestination & destination,
                                                                  EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
                                                                  EmberStatus status);
  
  /** @brief Application Launcher Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfApplicationLauncherClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                   chip::AttributeId attributeId,
                                                                                   EmberAfAttributeType attributeType, uint16_t size,
                                                                                   uint8_t * value);
  
  /** @brief Application Launcher Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfApplicationLauncherClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Audio Output Cluster client
  //
  
  /** @brief Audio Output Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfAudioOutputClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Audio Output Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfAudioOutputClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Audio Output Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfAudioOutputClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                   chip::AttributeId attributeId,
                                                                                   uint16_t manufacturerCode);
  
  /** @brief Audio Output Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfAudioOutputClusterClientMessageSentCallback(const chip::MessageSendDestination & destination, EmberApsFrame * apsFrame,
                                                          uint16_t msgLen, uint8_t * message, EmberStatus status);
  
  /** @brief Audio Output Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfAudioOutputClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
                                                                           EmberAfAttributeType attributeType, uint16_t size,
                                                                           uint8_t * value);
  
  /** @brief Audio Output Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfAudioOutputClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Barrier Control Cluster client
  //
  
  /** @brief Barrier Control Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfBarrierControlClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Barrier Control Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfBarrierControlClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Barrier Control Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfBarrierControlClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                      chip::AttributeId attributeId,
                                                                                      uint16_t manufacturerCode);
  
  /** @brief Barrier Control Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfBarrierControlClusterClientMessageSentCallback(const chip::MessageSendDestination & destination,
                                                             EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
                                                             EmberStatus status);
  
  /** @brief Barrier Control Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfBarrierControlClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
                                                                              chip::AttributeId attributeId,
                                                                              EmberAfAttributeType attributeType, uint16_t size,
                                                                              uint8_t * value);
  
  /** @brief Barrier Control Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfBarrierControlClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Basic Cluster client
  //
  
  /** @brief Basic Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfBasicClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Basic Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfBasicClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Basic Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfBasicClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
                                                                             uint16_t manufacturerCode);
  
  /** @brief Basic Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfBasicClusterClientMessageSentCallback(const chip::MessageSendDestination & destination, EmberApsFrame * apsFrame,
                                                    uint16_t msgLen, uint8_t * message, EmberStatus status);
  
  /** @brief Basic Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfBasicClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
                                                                     EmberAfAttributeType attributeType, uint16_t size,
                                                                     uint8_t * value);
  
  /** @brief Basic Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfBasicClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Binary Input (Basic) Cluster client
  //
  
  /** @brief Binary Input (Basic) Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfBinaryInputBasicClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Binary Input (Basic) Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfBinaryInputBasicClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Binary Input (Basic) Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfBinaryInputBasicClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                        chip::AttributeId attributeId,
                                                                                        uint16_t manufacturerCode);
  
  /** @brief Binary Input (Basic) Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfBinaryInputBasicClusterClientMessageSentCallback(const chip::MessageSendDestination & destination,
                                                               EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
                                                               EmberStatus status);
  
  /** @brief Binary Input (Basic) Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfBinaryInputBasicClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                chip::AttributeId attributeId,
                                                                                EmberAfAttributeType attributeType, uint16_t size,
                                                                                uint8_t * value);
  
  /** @brief Binary Input (Basic) Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfBinaryInputBasicClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Binding Cluster client
  //
  
  /** @brief Binding Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfBindingClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Binding Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfBindingClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Binding Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfBindingClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                               chip::AttributeId attributeId,
                                                                               uint16_t manufacturerCode);
  
  /** @brief Binding Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfBindingClusterClientMessageSentCallback(const chip::MessageSendDestination & destination, EmberApsFrame * apsFrame,
                                                      uint16_t msgLen, uint8_t * message, EmberStatus status);
  
  /** @brief Binding Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfBindingClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
                                                                       EmberAfAttributeType attributeType, uint16_t size,
                                                                       uint8_t * value);
  
  /** @brief Binding Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfBindingClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Bridged Device Basic Cluster client
  //
  
  /** @brief Bridged Device Basic Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfBridgedDeviceBasicClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Bridged Device Basic Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfBridgedDeviceBasicClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Bridged Device Basic Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfBridgedDeviceBasicClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                          chip::AttributeId attributeId,
                                                                                          uint16_t manufacturerCode);
  
  /** @brief Bridged Device Basic Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfBridgedDeviceBasicClusterClientMessageSentCallback(const chip::MessageSendDestination & destination,
                                                                 EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
                                                                 EmberStatus status);
  
  /** @brief Bridged Device Basic Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfBridgedDeviceBasicClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                  chip::AttributeId attributeId,
                                                                                  EmberAfAttributeType attributeType, uint16_t size,
                                                                                  uint8_t * value);
  
  /** @brief Bridged Device Basic Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfBridgedDeviceBasicClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Color Control Cluster client
  //
  
  /** @brief Color Control Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfColorControlClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Color Control Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfColorControlClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Color Control Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfColorControlClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                    chip::AttributeId attributeId,
                                                                                    uint16_t manufacturerCode);
  
  /** @brief Color Control Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfColorControlClusterClientMessageSentCallback(const chip::MessageSendDestination & destination, EmberApsFrame * apsFrame,
                                                           uint16_t msgLen, uint8_t * message, EmberStatus status);
  
  /** @brief Color Control Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfColorControlClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
                                                                            EmberAfAttributeType attributeType, uint16_t size,
                                                                            uint8_t * value);
  
  /** @brief Color Control Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfColorControlClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Content Launcher Cluster client
  //
  
  /** @brief Content Launcher Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfContentLauncherClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Content Launcher Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfContentLauncherClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Content Launcher Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfContentLauncherClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                       chip::AttributeId attributeId,
                                                                                       uint16_t manufacturerCode);
  
  /** @brief Content Launcher Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfContentLauncherClusterClientMessageSentCallback(const chip::MessageSendDestination & destination,
                                                              EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
                                                              EmberStatus status);
  
  /** @brief Content Launcher Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfContentLauncherClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
                                                                               chip::AttributeId attributeId,
                                                                               EmberAfAttributeType attributeType, uint16_t size,
                                                                               uint8_t * value);
  
  /** @brief Content Launcher Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfContentLauncherClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Descriptor Cluster client
  //
  
  /** @brief Descriptor Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfDescriptorClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Descriptor Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfDescriptorClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Descriptor Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfDescriptorClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                  chip::AttributeId attributeId,
                                                                                  uint16_t manufacturerCode);
  
  /** @brief Descriptor Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfDescriptorClusterClientMessageSentCallback(const chip::MessageSendDestination & destination, EmberApsFrame * apsFrame,
                                                         uint16_t msgLen, uint8_t * message, EmberStatus status);
  
  /** @brief Descriptor Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfDescriptorClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
                                                                          EmberAfAttributeType attributeType, uint16_t size,
                                                                          uint8_t * value);
  
  /** @brief Descriptor Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfDescriptorClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Diagnostic Logs Cluster client
  //
  
  /** @brief Diagnostic Logs Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfDiagnosticLogsClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Diagnostic Logs Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfDiagnosticLogsClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Diagnostic Logs Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfDiagnosticLogsClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                      chip::AttributeId attributeId,
                                                                                      uint16_t manufacturerCode);
  
  /** @brief Diagnostic Logs Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfDiagnosticLogsClusterClientMessageSentCallback(const chip::MessageSendDestination & destination,
                                                             EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
                                                             EmberStatus status);
  
  /** @brief Diagnostic Logs Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfDiagnosticLogsClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
                                                                              chip::AttributeId attributeId,
                                                                              EmberAfAttributeType attributeType, uint16_t size,
                                                                              uint8_t * value);
  
  /** @brief Diagnostic Logs Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfDiagnosticLogsClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Door Lock Cluster client
  //
  
  /** @brief Door Lock Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfDoorLockClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Door Lock Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfDoorLockClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Door Lock Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfDoorLockClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                chip::AttributeId attributeId,
                                                                                uint16_t manufacturerCode);
  
  /** @brief Door Lock Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfDoorLockClusterClientMessageSentCallback(const chip::MessageSendDestination & destination, EmberApsFrame * apsFrame,
                                                       uint16_t msgLen, uint8_t * message, EmberStatus status);
  
  /** @brief Door Lock Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfDoorLockClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
                                                                        EmberAfAttributeType attributeType, uint16_t size,
                                                                        uint8_t * value);
  
  /** @brief Door Lock Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfDoorLockClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Electrical Measurement Cluster client
  //
  
  /** @brief Electrical Measurement Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfElectricalMeasurementClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Electrical Measurement Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfElectricalMeasurementClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Electrical Measurement Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfElectricalMeasurementClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                             chip::AttributeId attributeId,
                                                                                             uint16_t manufacturerCode);
  
  /** @brief Electrical Measurement Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfElectricalMeasurementClusterClientMessageSentCallback(const chip::MessageSendDestination & destination,
                                                                    EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
                                                                    EmberStatus status);
  
  /** @brief Electrical Measurement Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfElectricalMeasurementClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                     chip::AttributeId attributeId,
                                                                                     EmberAfAttributeType attributeType,
                                                                                     uint16_t size, uint8_t * value);
  
  /** @brief Electrical Measurement Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfElectricalMeasurementClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Ethernet Network Diagnostics Cluster client
  //
  
  /** @brief Ethernet Network Diagnostics Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfEthernetNetworkDiagnosticsClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Ethernet Network Diagnostics Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfEthernetNetworkDiagnosticsClusterClientAttributeChangedCallback(chip::EndpointId endpoint,
                                                                              chip::AttributeId attributeId);
  
  /** @brief Ethernet Network Diagnostics Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfEthernetNetworkDiagnosticsClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                                  chip::AttributeId attributeId,
                                                                                                  uint16_t manufacturerCode);
  
  /** @brief Ethernet Network Diagnostics Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfEthernetNetworkDiagnosticsClusterClientMessageSentCallback(const chip::MessageSendDestination & destination,
                                                                         EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
                                                                         EmberStatus status);
  
  /** @brief Ethernet Network Diagnostics Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfEthernetNetworkDiagnosticsClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                          chip::AttributeId attributeId,
                                                                                          EmberAfAttributeType attributeType,
                                                                                          uint16_t size, uint8_t * value);
  
  /** @brief Ethernet Network Diagnostics Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfEthernetNetworkDiagnosticsClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Fixed Label Cluster client
  //
  
  /** @brief Fixed Label Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfFixedLabelClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Fixed Label Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfFixedLabelClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Fixed Label Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfFixedLabelClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                  chip::AttributeId attributeId,
                                                                                  uint16_t manufacturerCode);
  
  /** @brief Fixed Label Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfFixedLabelClusterClientMessageSentCallback(const chip::MessageSendDestination & destination, EmberApsFrame * apsFrame,
                                                         uint16_t msgLen, uint8_t * message, EmberStatus status);
  
  /** @brief Fixed Label Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfFixedLabelClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
                                                                          EmberAfAttributeType attributeType, uint16_t size,
                                                                          uint8_t * value);
  
  /** @brief Fixed Label Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfFixedLabelClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Flow Measurement Cluster client
  //
  
  /** @brief Flow Measurement Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfFlowMeasurementClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Flow Measurement Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfFlowMeasurementClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Flow Measurement Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfFlowMeasurementClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                       chip::AttributeId attributeId,
                                                                                       uint16_t manufacturerCode);
  
  /** @brief Flow Measurement Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfFlowMeasurementClusterClientMessageSentCallback(const chip::MessageSendDestination & destination,
                                                              EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
                                                              EmberStatus status);
  
  /** @brief Flow Measurement Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfFlowMeasurementClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
                                                                               chip::AttributeId attributeId,
                                                                               EmberAfAttributeType attributeType, uint16_t size,
                                                                               uint8_t * value);
  
  /** @brief Flow Measurement Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfFlowMeasurementClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // General Commissioning Cluster client
  //
  
  /** @brief General Commissioning Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfGeneralCommissioningClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief General Commissioning Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfGeneralCommissioningClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief General Commissioning Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfGeneralCommissioningClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                            chip::AttributeId attributeId,
                                                                                            uint16_t manufacturerCode);
  
  /** @brief General Commissioning Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfGeneralCommissioningClusterClientMessageSentCallback(const chip::MessageSendDestination & destination,
                                                                   EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
                                                                   EmberStatus status);
  
  /** @brief General Commissioning Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfGeneralCommissioningClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                    chip::AttributeId attributeId,
                                                                                    EmberAfAttributeType attributeType, uint16_t size,
                                                                                    uint8_t * value);
  
  /** @brief General Commissioning Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfGeneralCommissioningClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // General Diagnostics Cluster client
  //
  
  /** @brief General Diagnostics Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfGeneralDiagnosticsClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief General Diagnostics Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfGeneralDiagnosticsClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief General Diagnostics Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfGeneralDiagnosticsClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                          chip::AttributeId attributeId,
                                                                                          uint16_t manufacturerCode);
  
  /** @brief General Diagnostics Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfGeneralDiagnosticsClusterClientMessageSentCallback(const chip::MessageSendDestination & destination,
                                                                 EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
                                                                 EmberStatus status);
  
  /** @brief General Diagnostics Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfGeneralDiagnosticsClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                  chip::AttributeId attributeId,
                                                                                  EmberAfAttributeType attributeType, uint16_t size,
                                                                                  uint8_t * value);
  
  /** @brief General Diagnostics Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfGeneralDiagnosticsClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Group Key Management Cluster client
  //
  
  /** @brief Group Key Management Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfGroupKeyManagementClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Group Key Management Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfGroupKeyManagementClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Group Key Management Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfGroupKeyManagementClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                          chip::AttributeId attributeId,
                                                                                          uint16_t manufacturerCode);
  
  /** @brief Group Key Management Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfGroupKeyManagementClusterClientMessageSentCallback(const chip::MessageSendDestination & destination,
                                                                 EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
                                                                 EmberStatus status);
  
  /** @brief Group Key Management Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfGroupKeyManagementClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                  chip::AttributeId attributeId,
                                                                                  EmberAfAttributeType attributeType, uint16_t size,
                                                                                  uint8_t * value);
  
  /** @brief Group Key Management Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfGroupKeyManagementClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Groups Cluster client
  //
  
  /** @brief Groups Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfGroupsClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Groups Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfGroupsClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Groups Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfGroupsClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                              chip::AttributeId attributeId,
                                                                              uint16_t manufacturerCode);
  
  /** @brief Groups Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfGroupsClusterClientMessageSentCallback(const chip::MessageSendDestination & destination, EmberApsFrame * apsFrame,
                                                     uint16_t msgLen, uint8_t * message, EmberStatus status);
  
  /** @brief Groups Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfGroupsClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
                                                                      EmberAfAttributeType attributeType, uint16_t size,
                                                                      uint8_t * value);
  
  /** @brief Groups Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfGroupsClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Identify Cluster client
  //
  
  /** @brief Identify Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfIdentifyClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Identify Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfIdentifyClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Identify Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfIdentifyClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                chip::AttributeId attributeId,
                                                                                uint16_t manufacturerCode);
  
  /** @brief Identify Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfIdentifyClusterClientMessageSentCallback(const chip::MessageSendDestination & destination, EmberApsFrame * apsFrame,
                                                       uint16_t msgLen, uint8_t * message, EmberStatus status);
  
  /** @brief Identify Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfIdentifyClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
                                                                        EmberAfAttributeType attributeType, uint16_t size,
                                                                        uint8_t * value);
  
  /** @brief Identify Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfIdentifyClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Keypad Input Cluster client
  //
  
  /** @brief Keypad Input Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfKeypadInputClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Keypad Input Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfKeypadInputClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Keypad Input Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfKeypadInputClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                   chip::AttributeId attributeId,
                                                                                   uint16_t manufacturerCode);
  
  /** @brief Keypad Input Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfKeypadInputClusterClientMessageSentCallback(const chip::MessageSendDestination & destination, EmberApsFrame * apsFrame,
                                                          uint16_t msgLen, uint8_t * message, EmberStatus status);
  
  /** @brief Keypad Input Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfKeypadInputClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
                                                                           EmberAfAttributeType attributeType, uint16_t size,
                                                                           uint8_t * value);
  
  /** @brief Keypad Input Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfKeypadInputClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Level Control Cluster client
  //
  
  /** @brief Level Control Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfLevelControlClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Level Control Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfLevelControlClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Level Control Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfLevelControlClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                    chip::AttributeId attributeId,
                                                                                    uint16_t manufacturerCode);
  
  /** @brief Level Control Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfLevelControlClusterClientMessageSentCallback(const chip::MessageSendDestination & destination, EmberApsFrame * apsFrame,
                                                           uint16_t msgLen, uint8_t * message, EmberStatus status);
  
  /** @brief Level Control Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfLevelControlClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
                                                                            EmberAfAttributeType attributeType, uint16_t size,
                                                                            uint8_t * value);
  
  /** @brief Level Control Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfLevelControlClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Low Power Cluster client
  //
  
  /** @brief Low Power Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfLowPowerClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Low Power Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfLowPowerClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Low Power Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfLowPowerClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                chip::AttributeId attributeId,
                                                                                uint16_t manufacturerCode);
  
  /** @brief Low Power Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfLowPowerClusterClientMessageSentCallback(const chip::MessageSendDestination & destination, EmberApsFrame * apsFrame,
                                                       uint16_t msgLen, uint8_t * message, EmberStatus status);
  
  /** @brief Low Power Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfLowPowerClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
                                                                        EmberAfAttributeType attributeType, uint16_t size,
                                                                        uint8_t * value);
  
  /** @brief Low Power Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfLowPowerClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Media Input Cluster client
  //
  
  /** @brief Media Input Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfMediaInputClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Media Input Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfMediaInputClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Media Input Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfMediaInputClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                  chip::AttributeId attributeId,
                                                                                  uint16_t manufacturerCode);
  
  /** @brief Media Input Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfMediaInputClusterClientMessageSentCallback(const chip::MessageSendDestination & destination, EmberApsFrame * apsFrame,
                                                         uint16_t msgLen, uint8_t * message, EmberStatus status);
  
  /** @brief Media Input Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfMediaInputClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
                                                                          EmberAfAttributeType attributeType, uint16_t size,
                                                                          uint8_t * value);
  
  /** @brief Media Input Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfMediaInputClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Media Playback Cluster client
  //
  
  /** @brief Media Playback Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfMediaPlaybackClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Media Playback Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfMediaPlaybackClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Media Playback Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfMediaPlaybackClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                     chip::AttributeId attributeId,
                                                                                     uint16_t manufacturerCode);
  
  /** @brief Media Playback Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfMediaPlaybackClusterClientMessageSentCallback(const chip::MessageSendDestination & destination,
                                                            EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
                                                            EmberStatus status);
  
  /** @brief Media Playback Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfMediaPlaybackClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
                                                                             EmberAfAttributeType attributeType, uint16_t size,
                                                                             uint8_t * value);
  
  /** @brief Media Playback Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfMediaPlaybackClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Network Commissioning Cluster client
  //
  
  /** @brief Network Commissioning Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfNetworkCommissioningClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Network Commissioning Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfNetworkCommissioningClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Network Commissioning Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfNetworkCommissioningClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                            chip::AttributeId attributeId,
                                                                                            uint16_t manufacturerCode);
  
  /** @brief Network Commissioning Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfNetworkCommissioningClusterClientMessageSentCallback(const chip::MessageSendDestination & destination,
                                                                   EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
                                                                   EmberStatus status);
  
  /** @brief Network Commissioning Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfNetworkCommissioningClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                    chip::AttributeId attributeId,
                                                                                    EmberAfAttributeType attributeType, uint16_t size,
                                                                                    uint8_t * value);
  
  /** @brief Network Commissioning Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfNetworkCommissioningClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // OTA Software Update Provider Cluster client
  //
  
  /** @brief OTA Software Update Provider Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfOtaSoftwareUpdateProviderClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief OTA Software Update Provider Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfOtaSoftwareUpdateProviderClusterClientAttributeChangedCallback(chip::EndpointId endpoint,
                                                                             chip::AttributeId attributeId);
  
  /** @brief OTA Software Update Provider Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfOtaSoftwareUpdateProviderClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                                 chip::AttributeId attributeId,
                                                                                                 uint16_t manufacturerCode);
  
  /** @brief OTA Software Update Provider Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfOtaSoftwareUpdateProviderClusterClientMessageSentCallback(const chip::MessageSendDestination & destination,
                                                                        EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
                                                                        EmberStatus status);
  
  /** @brief OTA Software Update Provider Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfOtaSoftwareUpdateProviderClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                         chip::AttributeId attributeId,
                                                                                         EmberAfAttributeType attributeType,
                                                                                         uint16_t size, uint8_t * value);
  
  /** @brief OTA Software Update Provider Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfOtaSoftwareUpdateProviderClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // On/off Cluster client
  //
  
  /** @brief On/off Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfOnOffClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief On/off Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfOnOffClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief On/off Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfOnOffClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
                                                                             uint16_t manufacturerCode);
  
  /** @brief On/off Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfOnOffClusterClientMessageSentCallback(const chip::MessageSendDestination & destination, EmberApsFrame * apsFrame,
                                                    uint16_t msgLen, uint8_t * message, EmberStatus status);
  
  /** @brief On/off Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfOnOffClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
                                                                     EmberAfAttributeType attributeType, uint16_t size,
                                                                     uint8_t * value);
  
  /** @brief On/off Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfOnOffClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Operational Credentials Cluster client
  //
  
  /** @brief Operational Credentials Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfOperationalCredentialsClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Operational Credentials Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfOperationalCredentialsClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Operational Credentials Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfOperationalCredentialsClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                              chip::AttributeId attributeId,
                                                                                              uint16_t manufacturerCode);
  
  /** @brief Operational Credentials Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfOperationalCredentialsClusterClientMessageSentCallback(const chip::MessageSendDestination & destination,
                                                                     EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
                                                                     EmberStatus status);
  
  /** @brief Operational Credentials Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfOperationalCredentialsClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                      chip::AttributeId attributeId,
                                                                                      EmberAfAttributeType attributeType,
                                                                                      uint16_t size, uint8_t * value);
  
  /** @brief Operational Credentials Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfOperationalCredentialsClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Pressure Measurement Cluster client
  //
  
  /** @brief Pressure Measurement Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfPressureMeasurementClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Pressure Measurement Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfPressureMeasurementClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Pressure Measurement Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfPressureMeasurementClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                           chip::AttributeId attributeId,
                                                                                           uint16_t manufacturerCode);
  
  /** @brief Pressure Measurement Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfPressureMeasurementClusterClientMessageSentCallback(const chip::MessageSendDestination & destination,
                                                                  EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
                                                                  EmberStatus status);
  
  /** @brief Pressure Measurement Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfPressureMeasurementClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                   chip::AttributeId attributeId,
                                                                                   EmberAfAttributeType attributeType, uint16_t size,
                                                                                   uint8_t * value);
  
  /** @brief Pressure Measurement Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfPressureMeasurementClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Pump Configuration and Control Cluster client
  //
  
  /** @brief Pump Configuration and Control Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfPumpConfigurationAndControlClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Pump Configuration and Control Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfPumpConfigurationAndControlClusterClientAttributeChangedCallback(chip::EndpointId endpoint,
                                                                               chip::AttributeId attributeId);
  
  /** @brief Pump Configuration and Control Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfPumpConfigurationAndControlClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                                   chip::AttributeId attributeId,
                                                                                                   uint16_t manufacturerCode);
  
  /** @brief Pump Configuration and Control Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfPumpConfigurationAndControlClusterClientMessageSentCallback(const chip::MessageSendDestination & destination,
                                                                          EmberApsFrame * apsFrame, uint16_t msgLen,
                                                                          uint8_t * message, EmberStatus status);
  
  /** @brief Pump Configuration and Control Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfPumpConfigurationAndControlClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                           chip::AttributeId attributeId,
                                                                                           EmberAfAttributeType attributeType,
                                                                                           uint16_t size, uint8_t * value);
  
  /** @brief Pump Configuration and Control Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfPumpConfigurationAndControlClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Relative Humidity Measurement Cluster client
  //
  
  /** @brief Relative Humidity Measurement Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfRelativeHumidityMeasurementClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Relative Humidity Measurement Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfRelativeHumidityMeasurementClusterClientAttributeChangedCallback(chip::EndpointId endpoint,
                                                                               chip::AttributeId attributeId);
  
  /** @brief Relative Humidity Measurement Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfRelativeHumidityMeasurementClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                                   chip::AttributeId attributeId,
                                                                                                   uint16_t manufacturerCode);
  
  /** @brief Relative Humidity Measurement Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfRelativeHumidityMeasurementClusterClientMessageSentCallback(const chip::MessageSendDestination & destination,
                                                                          EmberApsFrame * apsFrame, uint16_t msgLen,
                                                                          uint8_t * message, EmberStatus status);
  
  /** @brief Relative Humidity Measurement Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfRelativeHumidityMeasurementClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                           chip::AttributeId attributeId,
                                                                                           EmberAfAttributeType attributeType,
                                                                                           uint16_t size, uint8_t * value);
  
  /** @brief Relative Humidity Measurement Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfRelativeHumidityMeasurementClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Scenes Cluster client
  //
  
  /** @brief Scenes Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfScenesClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Scenes Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfScenesClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Scenes Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfScenesClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                              chip::AttributeId attributeId,
                                                                              uint16_t manufacturerCode);
  
  /** @brief Scenes Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfScenesClusterClientMessageSentCallback(const chip::MessageSendDestination & destination, EmberApsFrame * apsFrame,
                                                     uint16_t msgLen, uint8_t * message, EmberStatus status);
  
  /** @brief Scenes Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfScenesClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
                                                                      EmberAfAttributeType attributeType, uint16_t size,
                                                                      uint8_t * value);
  
  /** @brief Scenes Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfScenesClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Software Diagnostics Cluster client
  //
  
  /** @brief Software Diagnostics Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfSoftwareDiagnosticsClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Software Diagnostics Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfSoftwareDiagnosticsClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Software Diagnostics Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfSoftwareDiagnosticsClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                           chip::AttributeId attributeId,
                                                                                           uint16_t manufacturerCode);
  
  /** @brief Software Diagnostics Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfSoftwareDiagnosticsClusterClientMessageSentCallback(const chip::MessageSendDestination & destination,
                                                                  EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
                                                                  EmberStatus status);
  
  /** @brief Software Diagnostics Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfSoftwareDiagnosticsClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                   chip::AttributeId attributeId,
                                                                                   EmberAfAttributeType attributeType, uint16_t size,
                                                                                   uint8_t * value);
  
  /** @brief Software Diagnostics Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfSoftwareDiagnosticsClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Switch Cluster client
  //
  
  /** @brief Switch Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfSwitchClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Switch Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfSwitchClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Switch Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfSwitchClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                              chip::AttributeId attributeId,
                                                                              uint16_t manufacturerCode);
  
  /** @brief Switch Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfSwitchClusterClientMessageSentCallback(const chip::MessageSendDestination & destination, EmberApsFrame * apsFrame,
                                                     uint16_t msgLen, uint8_t * message, EmberStatus status);
  
  /** @brief Switch Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfSwitchClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
                                                                      EmberAfAttributeType attributeType, uint16_t size,
                                                                      uint8_t * value);
  
  /** @brief Switch Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfSwitchClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // TV Channel Cluster client
  //
  
  /** @brief TV Channel Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfTvChannelClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief TV Channel Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfTvChannelClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief TV Channel Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfTvChannelClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                 chip::AttributeId attributeId,
                                                                                 uint16_t manufacturerCode);
  
  /** @brief TV Channel Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfTvChannelClusterClientMessageSentCallback(const chip::MessageSendDestination & destination, EmberApsFrame * apsFrame,
                                                        uint16_t msgLen, uint8_t * message, EmberStatus status);
  
  /** @brief TV Channel Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfTvChannelClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
                                                                         EmberAfAttributeType attributeType, uint16_t size,
                                                                         uint8_t * value);
  
  /** @brief TV Channel Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfTvChannelClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Target Navigator Cluster client
  //
  
  /** @brief Target Navigator Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfTargetNavigatorClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Target Navigator Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfTargetNavigatorClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Target Navigator Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfTargetNavigatorClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                       chip::AttributeId attributeId,
                                                                                       uint16_t manufacturerCode);
  
  /** @brief Target Navigator Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfTargetNavigatorClusterClientMessageSentCallback(const chip::MessageSendDestination & destination,
                                                              EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
                                                              EmberStatus status);
  
  /** @brief Target Navigator Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfTargetNavigatorClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
                                                                               chip::AttributeId attributeId,
                                                                               EmberAfAttributeType attributeType, uint16_t size,
                                                                               uint8_t * value);
  
  /** @brief Target Navigator Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfTargetNavigatorClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Temperature Measurement Cluster client
  //
  
  /** @brief Temperature Measurement Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfTemperatureMeasurementClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Temperature Measurement Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfTemperatureMeasurementClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Temperature Measurement Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfTemperatureMeasurementClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                              chip::AttributeId attributeId,
                                                                                              uint16_t manufacturerCode);
  
  /** @brief Temperature Measurement Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfTemperatureMeasurementClusterClientMessageSentCallback(const chip::MessageSendDestination & destination,
                                                                     EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
                                                                     EmberStatus status);
  
  /** @brief Temperature Measurement Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfTemperatureMeasurementClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                      chip::AttributeId attributeId,
                                                                                      EmberAfAttributeType attributeType,
                                                                                      uint16_t size, uint8_t * value);
  
  /** @brief Temperature Measurement Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfTemperatureMeasurementClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Test Cluster Cluster client
  //
  
  /** @brief Test Cluster Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfTestClusterClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Test Cluster Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfTestClusterClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Test Cluster Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfTestClusterClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                   chip::AttributeId attributeId,
                                                                                   uint16_t manufacturerCode);
  
  /** @brief Test Cluster Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfTestClusterClusterClientMessageSentCallback(const chip::MessageSendDestination & destination, EmberApsFrame * apsFrame,
                                                          uint16_t msgLen, uint8_t * message, EmberStatus status);
  
  /** @brief Test Cluster Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfTestClusterClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
                                                                           EmberAfAttributeType attributeType, uint16_t size,
                                                                           uint8_t * value);
  
  /** @brief Test Cluster Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfTestClusterClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Thermostat Cluster client
  //
  
  /** @brief Thermostat Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfThermostatClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Thermostat Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfThermostatClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Thermostat Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfThermostatClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                  chip::AttributeId attributeId,
                                                                                  uint16_t manufacturerCode);
  
  /** @brief Thermostat Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfThermostatClusterClientMessageSentCallback(const chip::MessageSendDestination & destination, EmberApsFrame * apsFrame,
                                                         uint16_t msgLen, uint8_t * message, EmberStatus status);
  
  /** @brief Thermostat Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfThermostatClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
                                                                          EmberAfAttributeType attributeType, uint16_t size,
                                                                          uint8_t * value);
  
  /** @brief Thermostat Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfThermostatClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Thread Network Diagnostics Cluster client
  //
  
  /** @brief Thread Network Diagnostics Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfThreadNetworkDiagnosticsClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Thread Network Diagnostics Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfThreadNetworkDiagnosticsClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Thread Network Diagnostics Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfThreadNetworkDiagnosticsClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                                chip::AttributeId attributeId,
                                                                                                uint16_t manufacturerCode);
  
  /** @brief Thread Network Diagnostics Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfThreadNetworkDiagnosticsClusterClientMessageSentCallback(const chip::MessageSendDestination & destination,
                                                                       EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
                                                                       EmberStatus status);
  
  /** @brief Thread Network Diagnostics Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfThreadNetworkDiagnosticsClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                        chip::AttributeId attributeId,
                                                                                        EmberAfAttributeType attributeType,
                                                                                        uint16_t size, uint8_t * value);
  
  /** @brief Thread Network Diagnostics Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfThreadNetworkDiagnosticsClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Wake on LAN Cluster client
  //
  
  /** @brief Wake on LAN Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfWakeOnLanClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Wake on LAN Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfWakeOnLanClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Wake on LAN Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfWakeOnLanClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                 chip::AttributeId attributeId,
                                                                                 uint16_t manufacturerCode);
  
  /** @brief Wake on LAN Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfWakeOnLanClusterClientMessageSentCallback(const chip::MessageSendDestination & destination, EmberApsFrame * apsFrame,
                                                        uint16_t msgLen, uint8_t * message, EmberStatus status);
  
  /** @brief Wake on LAN Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfWakeOnLanClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
                                                                         EmberAfAttributeType attributeType, uint16_t size,
                                                                         uint8_t * value);
  
  /** @brief Wake on LAN Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfWakeOnLanClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // WiFi Network Diagnostics Cluster client
  //
  
  /** @brief WiFi Network Diagnostics Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfWiFiNetworkDiagnosticsClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief WiFi Network Diagnostics Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfWiFiNetworkDiagnosticsClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief WiFi Network Diagnostics Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfWiFiNetworkDiagnosticsClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                              chip::AttributeId attributeId,
                                                                                              uint16_t manufacturerCode);
  
  /** @brief WiFi Network Diagnostics Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfWiFiNetworkDiagnosticsClusterClientMessageSentCallback(const chip::MessageSendDestination & destination,
                                                                     EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
                                                                     EmberStatus status);
  
  /** @brief WiFi Network Diagnostics Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfWiFiNetworkDiagnosticsClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                      chip::AttributeId attributeId,
                                                                                      EmberAfAttributeType attributeType,
                                                                                      uint16_t size, uint8_t * value);
  
  /** @brief WiFi Network Diagnostics Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfWiFiNetworkDiagnosticsClusterClientTickCallback(chip::EndpointId endpoint);
  
  //
  // Window Covering Cluster client
  //
  
  /** @brief Window Covering Cluster Client Init
   *
   * Client Init
   *
   * @param endpoint    Endpoint that is being initialized
   */
  void emberAfWindowCoveringClusterClientInitCallback(chip::EndpointId endpoint);
  
  /** @brief Window Covering Cluster Client Attribute Changed
   *
   * Client Attribute Changed
   *
   * @param endpoint    Endpoint that is being initialized
   * @param attributeId Attribute that changed
   */
  void emberAfWindowCoveringClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
  
  /** @brief Window Covering Cluster Client Manufacturer Specific Attribute Changed
   *
   * Client Manufacturer Specific Attribute Changed
   *
   * @param endpoint          Endpoint that is being initialized
   * @param attributeId       Attribute that changed
   * @param manufacturerCode  Manufacturer Code of the attribute that changed
   */
  void emberAfWindowCoveringClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
                                                                                      chip::AttributeId attributeId,
                                                                                      uint16_t manufacturerCode);
  
  /** @brief Window Covering Cluster Client Message Sent
   *
   * Client Message Sent
   *
   * @param type               The type of message sent
   * @param destination        The destination to which the message was sent
   * @param apsFrame           The APS frame for the message
   * @param msgLen             The length of the message
   * @param message            The message that was sent
   * @param status             The status of the sent message
   */
  void emberAfWindowCoveringClusterClientMessageSentCallback(const chip::MessageSendDestination & destination,
                                                             EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
                                                             EmberStatus status);
  
  /** @brief Window Covering Cluster Client Pre Attribute Changed
   *
   * client Pre Attribute Changed
   *
   * @param endpoint      Endpoint that is being initialized
   * @param attributeId   Attribute to be changed
   * @param attributeType Attribute type
   * @param size          Attribute size
   * @param value         Attribute value
   */
  EmberAfStatus emberAfWindowCoveringClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
                                                                              chip::AttributeId attributeId,
                                                                              EmberAfAttributeType attributeType, uint16_t size,
                                                                              uint8_t * value);
  
  /** @brief Window Covering Cluster Client Tick
   *
   * client Tick
   *
   * @param endpoint  Endpoint that is being served
   */
  void emberAfWindowCoveringClusterClientTickCallback(chip::EndpointId endpoint);
  
  // Cluster Commands Callback
  
  /**
   * @brief Account Login Cluster GetSetupPINResponse Command callback
   */
  
  bool emberAfAccountLoginClusterGetSetupPINResponseCallback(chip::app::Command * commandObj, uint8_t * setupPIN);
  
  /**
   * @brief Application Launcher Cluster LaunchAppResponse Command callback
   */
  
  bool emberAfApplicationLauncherClusterLaunchAppResponseCallback(chip::app::Command * commandObj, uint8_t status, uint8_t * data);
  
  /**
   * @brief Content Launcher Cluster LaunchContentResponse Command callback
   */
  
  bool emberAfContentLauncherClusterLaunchContentResponseCallback(chip::app::Command * commandObj, uint8_t * data,
                                                                  uint8_t contentLaunchStatus);
  
  /**
   * @brief Content Launcher Cluster LaunchURLResponse Command callback
   */
  
  bool emberAfContentLauncherClusterLaunchURLResponseCallback(chip::app::Command * commandObj, uint8_t * data,
                                                              uint8_t contentLaunchStatus);
  
  /**
   * @brief Door Lock Cluster ClearAllPinsResponse Command callback
   */
  
  bool emberAfDoorLockClusterClearAllPinsResponseCallback(chip::app::Command * commandObj, uint8_t status);
  
  /**
   * @brief Door Lock Cluster ClearAllRfidsResponse Command callback
   */
  
  bool emberAfDoorLockClusterClearAllRfidsResponseCallback(chip::app::Command * commandObj, uint8_t status);
  
  /**
   * @brief Door Lock Cluster ClearHolidayScheduleResponse Command callback
   */
  
  bool emberAfDoorLockClusterClearHolidayScheduleResponseCallback(chip::app::Command * commandObj, uint8_t status);
  
  /**
   * @brief Door Lock Cluster ClearPinResponse Command callback
   */
  
  bool emberAfDoorLockClusterClearPinResponseCallback(chip::app::Command * commandObj, uint8_t status);
  
  /**
   * @brief Door Lock Cluster ClearRfidResponse Command callback
   */
  
  bool emberAfDoorLockClusterClearRfidResponseCallback(chip::app::Command * commandObj, uint8_t status);
  
  /**
   * @brief Door Lock Cluster ClearWeekdayScheduleResponse Command callback
   */
  
  bool emberAfDoorLockClusterClearWeekdayScheduleResponseCallback(chip::app::Command * commandObj, uint8_t status);
  
  /**
   * @brief Door Lock Cluster ClearYeardayScheduleResponse Command callback
   */
  
  bool emberAfDoorLockClusterClearYeardayScheduleResponseCallback(chip::app::Command * commandObj, uint8_t status);
  
  /**
   * @brief Door Lock Cluster GetHolidayScheduleResponse Command callback
   */
  
  bool emberAfDoorLockClusterGetHolidayScheduleResponseCallback(chip::app::Command * commandObj, uint8_t scheduleId, uint8_t status,
                                                                uint32_t localStartTime, uint32_t localEndTime,
                                                                uint8_t operatingModeDuringHoliday);
  
  /**
   * @brief Door Lock Cluster GetLogRecordResponse Command callback
   */
  
  bool emberAfDoorLockClusterGetLogRecordResponseCallback(chip::app::Command * commandObj, uint16_t logEntryId, uint32_t timestamp,
                                                          uint8_t eventType, uint8_t source, uint8_t eventIdOrAlarmCode,
                                                          uint16_t userId, uint8_t * pin);
  
  /**
   * @brief Door Lock Cluster GetPinResponse Command callback
   */
  
  bool emberAfDoorLockClusterGetPinResponseCallback(chip::app::Command * commandObj, uint16_t userId, uint8_t userStatus,
                                                    uint8_t userType, uint8_t * pin);
  
  /**
   * @brief Door Lock Cluster GetRfidResponse Command callback
   */
  
  bool emberAfDoorLockClusterGetRfidResponseCallback(chip::app::Command * commandObj, uint16_t userId, uint8_t userStatus,
                                                     uint8_t userType, uint8_t * rfid);
  
  /**
   * @brief Door Lock Cluster GetUserTypeResponse Command callback
   */
  
  bool emberAfDoorLockClusterGetUserTypeResponseCallback(chip::app::Command * commandObj, uint16_t userId, uint8_t userType);
  
  /**
   * @brief Door Lock Cluster GetWeekdayScheduleResponse Command callback
   */
  
  bool emberAfDoorLockClusterGetWeekdayScheduleResponseCallback(chip::app::Command * commandObj, uint8_t scheduleId, uint16_t userId,
                                                                uint8_t status, uint8_t daysMask, uint8_t startHour,
                                                                uint8_t startMinute, uint8_t endHour, uint8_t endMinute);
  
  /**
   * @brief Door Lock Cluster GetYeardayScheduleResponse Command callback
   */
  
  bool emberAfDoorLockClusterGetYeardayScheduleResponseCallback(chip::app::Command * commandObj, uint8_t scheduleId, uint16_t userId,
                                                                uint8_t status, uint32_t localStartTime, uint32_t localEndTime);
  
  /**
   * @brief Door Lock Cluster LockDoorResponse Command callback
   */
  
  bool emberAfDoorLockClusterLockDoorResponseCallback(chip::app::Command * commandObj, uint8_t status);
  
  /**
   * @brief Door Lock Cluster SetHolidayScheduleResponse Command callback
   */
  
  bool emberAfDoorLockClusterSetHolidayScheduleResponseCallback(chip::app::Command * commandObj, uint8_t status);
  
  /**
   * @brief Door Lock Cluster SetPinResponse Command callback
   */
  
  bool emberAfDoorLockClusterSetPinResponseCallback(chip::app::Command * commandObj, uint8_t status);
  
  /**
   * @brief Door Lock Cluster SetRfidResponse Command callback
   */
  
  bool emberAfDoorLockClusterSetRfidResponseCallback(chip::app::Command * commandObj, uint8_t status);
  
  /**
   * @brief Door Lock Cluster SetUserTypeResponse Command callback
   */
  
  bool emberAfDoorLockClusterSetUserTypeResponseCallback(chip::app::Command * commandObj, uint8_t status);
  
  /**
   * @brief Door Lock Cluster SetWeekdayScheduleResponse Command callback
   */
  
  bool emberAfDoorLockClusterSetWeekdayScheduleResponseCallback(chip::app::Command * commandObj, uint8_t status);
  
  /**
   * @brief Door Lock Cluster SetYeardayScheduleResponse Command callback
   */
  
  bool emberAfDoorLockClusterSetYeardayScheduleResponseCallback(chip::app::Command * commandObj, uint8_t status);
  
  /**
   * @brief Door Lock Cluster UnlockDoorResponse Command callback
   */
  
  bool emberAfDoorLockClusterUnlockDoorResponseCallback(chip::app::Command * commandObj, uint8_t status);
  
  /**
   * @brief Door Lock Cluster UnlockWithTimeoutResponse Command callback
   */
  
  bool emberAfDoorLockClusterUnlockWithTimeoutResponseCallback(chip::app::Command * commandObj, uint8_t status);
  
  /**
   * @brief General Commissioning Cluster ArmFailSafeResponse Command callback
   */
  
  bool emberAfGeneralCommissioningClusterArmFailSafeResponseCallback(chip::app::Command * commandObj, uint8_t errorCode,
                                                                     uint8_t * debugText);
  
  /**
   * @brief General Commissioning Cluster CommissioningCompleteResponse Command callback
   */
  
  bool emberAfGeneralCommissioningClusterCommissioningCompleteResponseCallback(chip::app::Command * commandObj, uint8_t errorCode,
                                                                               uint8_t * debugText);
  
  /**
   * @brief General Commissioning Cluster SetRegulatoryConfigResponse Command callback
   */
  
  bool emberAfGeneralCommissioningClusterSetRegulatoryConfigResponseCallback(chip::app::Command * commandObj, uint8_t errorCode,
                                                                             uint8_t * debugText);
  
  /**
   * @brief Groups Cluster AddGroupResponse Command callback
   */
  
  bool emberAfGroupsClusterAddGroupResponseCallback(chip::app::Command * commandObj, uint8_t status, uint16_t groupId);
  
  /**
   * @brief Groups Cluster GetGroupMembershipResponse Command callback
   */
  
  bool emberAfGroupsClusterGetGroupMembershipResponseCallback(chip::app::Command * commandObj, uint8_t capacity, uint8_t groupCount,
                                                              /* TYPE WARNING: array array defaults to */ uint8_t * groupList);
  
  /**
   * @brief Groups Cluster RemoveGroupResponse Command callback
   */
  
  bool emberAfGroupsClusterRemoveGroupResponseCallback(chip::app::Command * commandObj, uint8_t status, uint16_t groupId);
  
  /**
   * @brief Groups Cluster ViewGroupResponse Command callback
   */
  
  bool emberAfGroupsClusterViewGroupResponseCallback(chip::app::Command * commandObj, uint8_t status, uint16_t groupId,
                                                     uint8_t * groupName);
  
  /**
   * @brief Identify Cluster IdentifyQueryResponse Command callback
   */
  
  bool emberAfIdentifyClusterIdentifyQueryResponseCallback(chip::app::Command * commandObj, uint16_t timeout);
  
  /**
   * @brief Keypad Input Cluster SendKeyResponse Command callback
   */
  
  bool emberAfKeypadInputClusterSendKeyResponseCallback(chip::app::Command * commandObj, uint8_t status);
  
  /**
   * @brief Media Playback Cluster MediaFastForwardResponse Command callback
   */
  
  bool emberAfMediaPlaybackClusterMediaFastForwardResponseCallback(chip::app::Command * commandObj, uint8_t mediaPlaybackStatus);
  
  /**
   * @brief Media Playback Cluster MediaNextResponse Command callback
   */
  
  bool emberAfMediaPlaybackClusterMediaNextResponseCallback(chip::app::Command * commandObj, uint8_t mediaPlaybackStatus);
  
  /**
   * @brief Media Playback Cluster MediaPauseResponse Command callback
   */
  
  bool emberAfMediaPlaybackClusterMediaPauseResponseCallback(chip::app::Command * commandObj, uint8_t mediaPlaybackStatus);
  
  /**
   * @brief Media Playback Cluster MediaPlayResponse Command callback
   */
  
  bool emberAfMediaPlaybackClusterMediaPlayResponseCallback(chip::app::Command * commandObj, uint8_t mediaPlaybackStatus);
  
  /**
   * @brief Media Playback Cluster MediaPreviousResponse Command callback
   */
  
  bool emberAfMediaPlaybackClusterMediaPreviousResponseCallback(chip::app::Command * commandObj, uint8_t mediaPlaybackStatus);
  
  /**
   * @brief Media Playback Cluster MediaRewindResponse Command callback
   */
  
  bool emberAfMediaPlaybackClusterMediaRewindResponseCallback(chip::app::Command * commandObj, uint8_t mediaPlaybackStatus);
  
  /**
   * @brief Media Playback Cluster MediaSkipBackwardResponse Command callback
   */
  
  bool emberAfMediaPlaybackClusterMediaSkipBackwardResponseCallback(chip::app::Command * commandObj, uint8_t mediaPlaybackStatus);
  
  /**
   * @brief Media Playback Cluster MediaSkipForwardResponse Command callback
   */
  
  bool emberAfMediaPlaybackClusterMediaSkipForwardResponseCallback(chip::app::Command * commandObj, uint8_t mediaPlaybackStatus);
  
  /**
   * @brief Media Playback Cluster MediaSkipSeekResponse Command callback
   */
  
  bool emberAfMediaPlaybackClusterMediaSkipSeekResponseCallback(chip::app::Command * commandObj, uint8_t mediaPlaybackStatus);
  
  /**
   * @brief Media Playback Cluster MediaStartOverResponse Command callback
   */
  
  bool emberAfMediaPlaybackClusterMediaStartOverResponseCallback(chip::app::Command * commandObj, uint8_t mediaPlaybackStatus);
  
  /**
   * @brief Media Playback Cluster MediaStopResponse Command callback
   */
  
  bool emberAfMediaPlaybackClusterMediaStopResponseCallback(chip::app::Command * commandObj, uint8_t mediaPlaybackStatus);
  
  /**
   * @brief Network Commissioning Cluster AddThreadNetworkResponse Command callback
   */
  
  bool emberAfNetworkCommissioningClusterAddThreadNetworkResponseCallback(chip::app::Command * commandObj, uint8_t errorCode,
                                                                          uint8_t * debugText);
  
  /**
   * @brief Network Commissioning Cluster AddWiFiNetworkResponse Command callback
   */
  
  bool emberAfNetworkCommissioningClusterAddWiFiNetworkResponseCallback(chip::app::Command * commandObj, uint8_t errorCode,
                                                                        uint8_t * debugText);
  
  /**
   * @brief Network Commissioning Cluster DisableNetworkResponse Command callback
   */
  
  bool emberAfNetworkCommissioningClusterDisableNetworkResponseCallback(chip::app::Command * commandObj, uint8_t errorCode,
                                                                        uint8_t * debugText);
  
  /**
   * @brief Network Commissioning Cluster EnableNetworkResponse Command callback
   */
  
  bool emberAfNetworkCommissioningClusterEnableNetworkResponseCallback(chip::app::Command * commandObj, uint8_t errorCode,
                                                                       uint8_t * debugText);
  
  /**
   * @brief Network Commissioning Cluster RemoveNetworkResponse Command callback
   */
  
  bool emberAfNetworkCommissioningClusterRemoveNetworkResponseCallback(chip::app::Command * commandObj, uint8_t errorCode,
                                                                       uint8_t * debugText);
  
  /**
   * @brief Network Commissioning Cluster ScanNetworksResponse Command callback
   */
  
  bool emberAfNetworkCommissioningClusterScanNetworksResponseCallback(
      chip::app::Command * commandObj, uint8_t errorCode, uint8_t * debugText,
      /* TYPE WARNING: array array defaults to */ uint8_t * wifiScanResults,
      /* TYPE WARNING: array array defaults to */ uint8_t * threadScanResults);
  
  /**
   * @brief Network Commissioning Cluster UpdateThreadNetworkResponse Command callback
   */
  
  bool emberAfNetworkCommissioningClusterUpdateThreadNetworkResponseCallback(chip::app::Command * commandObj, uint8_t errorCode,
                                                                             uint8_t * debugText);
  
  /**
   * @brief Network Commissioning Cluster UpdateWiFiNetworkResponse Command callback
   */
  
  bool emberAfNetworkCommissioningClusterUpdateWiFiNetworkResponseCallback(chip::app::Command * commandObj, uint8_t errorCode,
                                                                           uint8_t * debugText);
  
  /**
   * @brief OTA Software Update Provider Cluster ApplyUpdateRequestResponse Command callback
   */
  
  bool emberAfOtaSoftwareUpdateProviderClusterApplyUpdateRequestResponseCallback(chip::app::Command * commandObj, uint8_t action,
                                                                                 uint32_t delayedActionTime);
  
  /**
   * @brief OTA Software Update Provider Cluster QueryImageResponse Command callback
   */
  
  bool emberAfOtaSoftwareUpdateProviderClusterQueryImageResponseCallback(chip::app::Command * commandObj, uint8_t status,
                                                                         uint32_t delayedActionTime, uint8_t * imageURI,
                                                                         uint32_t softwareVersion, chip::ByteSpan updateToken,
                                                                         uint8_t userConsentNeeded,
                                                                         chip::ByteSpan metadataForRequestor);
  
  /**
   * @brief Operational Credentials Cluster OpCSRResponse Command callback
   */
  
  bool emberAfOperationalCredentialsClusterOpCSRResponseCallback(chip::app::Command * commandObj, chip::ByteSpan CSR,
                                                                 chip::ByteSpan CSRNonce, chip::ByteSpan VendorReserved1,
                                                                 chip::ByteSpan VendorReserved2, chip::ByteSpan VendorReserved3,
                                                                 chip::ByteSpan Signature);
  
  /**
   * @brief Operational Credentials Cluster OpCertResponse Command callback
   */
  
  bool emberAfOperationalCredentialsClusterOpCertResponseCallback(chip::app::Command * commandObj, uint8_t StatusCode,
                                                                  uint64_t FabricIndex, uint8_t * DebugText);
  
  /**
   * @brief Operational Credentials Cluster SetFabricResponse Command callback
   */
  
  bool emberAfOperationalCredentialsClusterSetFabricResponseCallback(chip::app::Command * commandObj, chip::FabricId FabricId);
  
  /**
   * @brief Scenes Cluster AddSceneResponse Command callback
   */
  
  bool emberAfScenesClusterAddSceneResponseCallback(chip::app::Command * commandObj, uint8_t status, uint16_t groupId,
                                                    uint8_t sceneId);
  
  /**
   * @brief Scenes Cluster GetSceneMembershipResponse Command callback
   */
  
  bool emberAfScenesClusterGetSceneMembershipResponseCallback(chip::app::Command * commandObj, uint8_t status, uint8_t capacity,
                                                              uint16_t groupId, uint8_t sceneCount,
                                                              /* TYPE WARNING: array array defaults to */ uint8_t * sceneList);
  
  /**
   * @brief Scenes Cluster RemoveAllScenesResponse Command callback
   */
  
  bool emberAfScenesClusterRemoveAllScenesResponseCallback(chip::app::Command * commandObj, uint8_t status, uint16_t groupId);
  
  /**
   * @brief Scenes Cluster RemoveSceneResponse Command callback
   */
  
  bool emberAfScenesClusterRemoveSceneResponseCallback(chip::app::Command * commandObj, uint8_t status, uint16_t groupId,
                                                       uint8_t sceneId);
  
  /**
   * @brief Scenes Cluster StoreSceneResponse Command callback
   */
  
  bool emberAfScenesClusterStoreSceneResponseCallback(chip::app::Command * commandObj, uint8_t status, uint16_t groupId,
                                                      uint8_t sceneId);
  
  /**
   * @brief Scenes Cluster ViewSceneResponse Command callback
   */
  
  bool emberAfScenesClusterViewSceneResponseCallback(chip::app::Command * commandObj, uint8_t status, uint16_t groupId,
                                                     uint8_t sceneId, uint16_t transitionTime, uint8_t * sceneName,
                                                     /* TYPE WARNING: array array defaults to */ uint8_t * extensionFieldSets);
  
  /**
   * @brief TV Channel Cluster ChangeChannelResponse Command callback
   */
  
  bool emberAfTvChannelClusterChangeChannelResponseCallback(chip::app::Command * commandObj,
                                                            /* TYPE WARNING: array array defaults to */ uint8_t * ChannelMatch,
                                                            uint8_t ErrorType);
  
  /**
   * @brief Target Navigator Cluster NavigateTargetResponse Command callback
   */
  
  bool emberAfTargetNavigatorClusterNavigateTargetResponseCallback(chip::app::Command * commandObj, uint8_t status, uint8_t * data);
  
  /**
   * @brief Test Cluster Cluster TestSpecificResponse Command callback
   */
  
  bool emberAfTestClusterClusterTestSpecificResponseCallback(chip::app::Command * commandObj, uint8_t returnValue);
  
  //
  // Non-Cluster Related Callbacks
  //
  
  /** @brief Add To Current App Tasks
   *
   * This function is only useful to sleepy end devices.  This function will note
   * the passed item as part of a set of tasks the application has outstanding
   * (e.g. message sent requiring APS acknwoledgement).  This will affect how the
   * application behaves with regard to sleeping and polling.  Until the
   * outstanding task is completed, the device may poll more frequently and sleep
   * less often.
   *
   * @param tasks   Ver.: always
   */
  void emberAfAddToCurrentAppTasksCallback(EmberAfApplicationTask tasks);
  
  /** @brief Remove From Current App Tasks
   *
   * This function is only useful to sleepy end devices.  This function will
   * remove the passed item from the set of tasks the application has outstanding
   * (e.g. message sent requiring APS acknwoledgement).  This will affect how the
   * application behaves with regard to sleeping and polling.  Removing the item
   * from the list of outstanding tasks may allow the device to sleep longer and
   * poll less frequently.  If there are other outstanding tasks the system may
   * still have to stay away and poll more often.
   *
   * @param tasks   Ver.: always
   */
  void emberAfRemoveFromCurrentAppTasksCallback(EmberAfApplicationTask tasks);
  
  /** @brief Allow Network Write Attribute
   *
   * This function is called by the application framework before it writes an
   * attribute in response to a write attribute request from an external device.
   * The value passed into this callback is the value to which the attribute is to
   * be set by the framework.
          Example:	In mirroring simple metering data
   * on an Energy Services Interface (ESI) (formerly called Energy Service Portal
   * (ESP) in SE 1.0).), a mirrored simple meter needs to write read-only
   * attributes on its mirror. The-meter-mirror sample application, located in
   * app/framework/sample-apps, uses this callback to allow the mirrored device to
   * write simple metering attributes on the mirror regardless of the fact that
   * most simple metering attributes are defined as read-only by the ZigBee
   * specification.
          Note:	The ZCL specification does not (as of this
   * writing) specify any permission-level security for writing writeable
   * attributes. As far as the ZCL specification is concerned, if an attribute is
   * writeable, any device that has a link key for the device should be able to
   * write that attribute. Furthermore if an attribute is read only, it should not
   * be written over the air. Thus, if you implement permissions for writing
   * attributes as a feature, you MAY be operating outside the specification. This
   * is unlikely to be a problem for writing read-only attributes, but it may be a
   * problem for attributes that are writeable according to the specification but
   * restricted by the application implementing this callback.
   *
   * @param endpoint   Ver.: always
   * @param clusterId   Ver.: always
   * @param attributeId   Ver.: always
   * @param mask   Ver.: always
   * @param manufacturerCode   Ver.: always
   * @param value   Ver.: always
   * @param type   Ver.: always
   */
  EmberAfAttributeWritePermission emberAfAllowNetworkWriteAttributeCallback(chip::EndpointId endpoint, chip::ClusterId clusterId,
                                                                            chip::AttributeId attributeId, uint8_t mask,
                                                                            uint16_t manufacturerCode, uint8_t * value, uint8_t type);
  
  /** @brief Attribute Read Access
   *
   * This function is called whenever the Application Framework needs to check
   * access permission for an attribute read.
   *
   * @param endpoint   Ver.: always
   * @param clusterId   Ver.: always
   * @param manufacturerCode   Ver.: always
   * @param attributeId   Ver.: always
   */
  bool emberAfAttributeReadAccessCallback(chip::EndpointId endpoint, chip::ClusterId clusterId, uint16_t manufacturerCode,
                                          chip::AttributeId attributeId);
  
  /** @brief Attribute Write Access
   *
   * This function is called whenever the Application Framework needs to check
   * access permission for an attribute write.
   *
   * @param endpoint   Ver.: always
   * @param clusterId   Ver.: always
   * @param manufacturerCode   Ver.: always
   * @param attributeId   Ver.: always
   */
  bool emberAfAttributeWriteAccessCallback(chip::EndpointId endpoint, chip::ClusterId clusterId, uint16_t manufacturerCode,
                                           chip::AttributeId attributeId);
  
  /** @brief Default Response
   *
   * This function is called by the application framework when a Default Response
   * command is received from an external device.  The application should return
   * true if the message was processed or false if it was not.
   *
   * @param clusterId The cluster identifier of this response.  Ver.: always
   * @param commandId The command identifier to which this is a response.  Ver.:
   * always
   * @param status Specifies either SUCCESS or the nature of the error that was
   * detected in the received command.  Ver.: always
   */
  bool emberAfDefaultResponseCallback(chip::ClusterId clusterId, chip::CommandId commandId, EmberAfStatus status);
  
  /** @brief Configure Reporting Response
   *
   * This function is called by the application framework when a Configure
   * Reporting Response command is received from an external device.  The
   * application should return true if the message was processed or false if it
   * was not.
   *
   * @param clusterId The cluster identifier of this response.  Ver.: always
   * @param buffer Buffer containing the list of attribute status records.  Ver.:
   * always
   * @param bufLen The length in bytes of the list.  Ver.: always
   */
  bool emberAfConfigureReportingResponseCallback(chip::ClusterId clusterId, uint8_t * buffer, uint16_t bufLen);
  
  /** @brief Read Reporting Configuration Response
   *
   * This function is called by the application framework when a Read Reporting
   * Configuration Response command is received from an external device.  The
   * application should return true if the message was processed or false if it
   * was not.
   *
   * @param clusterId The cluster identifier of this response.  Ver.: always
   * @param buffer Buffer containing the list of attribute reporting configuration
   * records.  Ver.: always
   * @param bufLen The length in bytes of the list.  Ver.: always
   */
  bool emberAfReadReportingConfigurationResponseCallback(chip::ClusterId clusterId, uint8_t * buffer, uint16_t bufLen);
  
  /** @brief Discover Attributes Response
   *
   * This function is called by the application framework when a Discover
   * Attributes Response or Discover Attributes Extended Response command is
   * received from an external device.  The Discover Attributes Response command
   * contains a bool indicating if discovery is complete and a list of zero or
   * more attribute identifier/type records. The final argument indicates whether
   * the response is in the extended format or not.  The application should return
   * true if the message was processed or false if it was not.
   *
   * @param clusterId The cluster identifier of this response.  Ver.: always
   * @param discoveryComplete Indicates whether there are more attributes to be
   * discovered.  true if there are no more attributes to be discovered.  Ver.:
   * always
   * @param buffer Buffer containing the list of attribute identifier/type
   * records.  Ver.: always
   * @param bufLen The length in bytes of the list.  Ver.: always
   * @param extended Indicates whether the response is in the extended format or
   * not.  Ver.: always
   */
  bool emberAfDiscoverAttributesResponseCallback(chip::ClusterId clusterId, bool discoveryComplete, uint8_t * buffer, uint16_t bufLen,
                                                 bool extended);
  
  /** @brief Discover Commands Generated Response
   *
   * This function is called by the framework when Discover Commands Generated
   * Response is received.
   *
   * @param clusterId The cluster identifier of this response.  Ver.: always
   * @param manufacturerCode Manufacturer code  Ver.: always
   * @param discoveryComplete Indicates whether there are more commands to be
   * discovered.  Ver.: always
   * @param commandIds Buffer containing the list of command identifiers.  Ver.:
   * always
   * @param commandIdCount The length of bytes of the list, whish is the same as
   * the number of identifiers.  Ver.: always
   */
  bool emberAfDiscoverCommandsGeneratedResponseCallback(chip::ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
                                                        chip::CommandId * commandIds, uint16_t commandIdCount);
  
  /** @brief Discover Commands Received Response
   *
   * This function is called by the framework when Discover Commands Received
   * Response is received.
   *
   * @param clusterId The cluster identifier of this response.  Ver.: always
   * @param manufacturerCode Manufacturer code  Ver.: always
   * @param discoveryComplete Indicates whether there are more commands to be
   * discovered.  Ver.: always
   * @param commandIds Buffer containing the list of command identifiers.  Ver.:
   * always
   * @param commandIdCount The length of bytes of the list, whish is the same as
   * the number of identifiers.  Ver.: always
   */
  bool emberAfDiscoverCommandsReceivedResponseCallback(chip::ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
                                                       chip::CommandId * commandIds, uint16_t commandIdCount);
  
  /** @brief Pre Command Received
   *
   * This callback is the second in the Application Framework's message processing
   * chain. At this point in the processing of incoming over-the-air messages, the
   * application has determined that the incoming message is a ZCL command. It
   * parses enough of the message to populate an EmberAfClusterCommand struct. The
   * Application Framework defines this struct value in a local scope to the
   * command processing but also makes it available through a global pointer
   * called emberAfCurrentCommand, in app/framework/util/util.c. When command
   * processing is complete, this pointer is cleared.
   *
   * @param cmd   Ver.: always
   */
  bool emberAfPreCommandReceivedCallback(EmberAfClusterCommand * cmd);
  
  /** @brief Pre Message Send
   *
   * This function is called by the framework when it is about to pass a message
   * to the stack primitives for sending.   This message may or may not be ZCL,
   * ZDO, or some other protocol.  This is called prior to
          any ZigBee
   * fragmentation that may be done.  If the function returns true it is assumed
   * the callback has consumed and processed the message.  The callback must also
   * set the EmberStatus status code to be passed back to the caller.  The
   * framework will do no further processing on the message.
          If the
   * function returns false then it is assumed that the callback has not processed
   * the mesasge and the framework will continue to process accordingly.
   *
   * @param messageStruct The structure containing the parameters of the APS
   * message to be sent.  Ver.: always
   * @param status A pointer to the status code value that will be returned to the
   * caller.  Ver.: always
   */
  bool emberAfPreMessageSendCallback(EmberAfMessageStruct * messageStruct, EmberStatus * status);
  
  /** @brief Message Sent
   *
   * This function is called by the application framework from the message sent
   * handler, when it is informed by the stack regarding the message sent status.
   * All of the values passed to the emberMessageSentHandler are passed on to this
   * callback. This provides an opportunity for the application to verify that its
   * message has been sent successfully and take the appropriate action. This
   * callback should return a bool value of true or false. A value of true
   * indicates that the message sent notification has been handled and should not
   * be handled by the application framework.
   *
   * @param type   Ver.: always
   * @param destination   Ver.: always
   * @param apsFrame   Ver.: always
   * @param msgLen   Ver.: always
   * @param message   Ver.: always
   * @param status   Ver.: always
   */
  bool emberAfMessageSentCallback(const chip::MessageSendDestination & destination, EmberApsFrame * apsFrame, uint16_t msgLen,
                                  uint8_t * message, EmberStatus status);
  
  /** @brief Pre Attribute Change
   *
   * This function is called by the application framework before it changes an
   * attribute value.  The value passed into this callback is the value to which
   * the attribute is to be set by the framework.  The application should return
   * ::EMBER_ZCL_STATUS_SUCCESS to permit the change or any other ::EmberAfStatus
   * to reject it.
   *
   * @param endpoint   Ver.: always
   * @param clusterId   Ver.: always
   * @param attributeId   Ver.: always
   * @param mask   Ver.: always
   * @param manufacturerCode   Ver.: always
   * @param type   Ver.: always
   * @param size   Ver.: always
   * @param value   Ver.: always
   */
  EmberAfStatus emberAfPreAttributeChangeCallback(chip::EndpointId endpoint, chip::ClusterId clusterId, chip::AttributeId attributeId,
                                                  uint8_t mask, uint16_t manufacturerCode, uint8_t type, uint16_t size,
                                                  uint8_t * value);
  
  /** @brief Post Attribute Change
   *
   * This function is called by the application framework after it changes an
   * attribute value. The value passed into this callback is the value to which
   * the attribute was set by the framework.
   *
   * @param endpoint   Ver.: always
   * @param clusterId   Ver.: always
   * @param attributeId   Ver.: always
   * @param mask   Ver.: always
   * @param manufacturerCode   Ver.: always
   * @param type   Ver.: always
   * @param size   Ver.: always
   * @param value   Ver.: always
   */
  void emberAfPostAttributeChangeCallback(chip::EndpointId endpoint, chip::ClusterId clusterId, chip::AttributeId attributeId,
                                          uint8_t mask, uint16_t manufacturerCode, uint8_t type, uint16_t size, uint8_t * value);
  
  /** @brief External Attribute Read
   *
   * Like emberAfExternalAttributeWriteCallback above, this function is called
   * when the framework needs to read an attribute that is not stored within the
   * Application Framework's data structures.
          All of the important
   * information about the attribute itself is passed as a pointer to an
   * EmberAfAttributeMetadata struct, which is stored within the application and
   * used to manage the attribute. A complete description of the
   * EmberAfAttributeMetadata struct is provided in
   * app/framework/include/af-types.h
          This function assumes that the
   * application is able to read the attribute, write it into the passed buffer,
   * and return immediately. Any attributes that require a state machine for
   * reading and writing are not really candidates for externalization at the
   * present time. The Application Framework does not currently include a state
   * machine for reading or writing attributes that must take place across a
   * series of application ticks. Attributes that cannot be read in a timely
   * manner should be stored within the Application Framework and updated
   * occasionally by the application code from within the
   * emberAfMainTickCallback.
          If the application was successfully able to
   * read the attribute and write it into the passed buffer, it should return a
   * value of EMBER_ZCL_STATUS_SUCCESS. Ensure that the size of the externally
   * managed attribute value is smaller than what the buffer can hold. In the case
   * of a buffer overflow throw an appropriate error such as
   * EMBER_ZCL_STATUS_INSUFFICIENT_SPACE. Any other return value indicates the
   * application was not able to read the attribute.
   *
   * @param endpoint   Ver.: always
   * @param clusterId   Ver.: always
   * @param attributeMetadata   Ver.: always
   * @param manufacturerCode   Ver.: always
   * @param buffer   Ver.: always
   * @param maxReadLength   Ver.: always
   * @param index   Ver.: always
   */
  EmberAfStatus emberAfExternalAttributeReadCallback(chip::EndpointId endpoint, chip::ClusterId clusterId,
                                                     EmberAfAttributeMetadata * attributeMetadata, uint16_t manufacturerCode,
                                                     uint8_t * buffer, uint16_t maxReadLength, int32_t index = -1);
  
  /** @brief Write Attributes Response
   *
   * This function is called by the application framework when a Write Attributes
   * Response command is received from an external device.  The application should
   * return true if the message was processed or false if it was not.
   *
   * @param clusterId The cluster identifier of this response.  Ver.: always
   * @param buffer Buffer containing the list of write attribute status records.
   * Ver.: always
   * @param bufLen The length in bytes of the list.  Ver.: always
   */
  bool emberAfWriteAttributesResponseCallback(chip::ClusterId clusterId, uint8_t * buffer, uint16_t bufLen);
  
  /** @brief External Attribute Write
   *
   * This function is called whenever the Application Framework needs to write an
   * attribute which is not stored within the data structures of the Application
   * Framework itself. One of the new features in Version 2 is the ability to
   * store attributes outside the Framework. This is particularly useful for
   * attributes that do not need to be stored because they can be read off the
   * hardware when they are needed, or are stored in some central location used by
   * many modules within the system. In this case, you can indicate that the
   * attribute is stored externally. When the framework needs to write an external
   * attribute, it makes a call to this callback.
          This callback is very
   * useful for host micros which need to store attributes in persistent memory.
   * Because each host micro (used with an Ember NCP) has its own type of
   * persistent memory storage, the Application Framework does not include the
   * ability to mark attributes as stored in flash the way that it does for Ember
   * SoCs like the EM35x. On a host micro, any attributes that need to be stored
   * in persistent memory should be marked as external and accessed through the
   * external read and write callbacks. Any host code associated with the
   * persistent storage should be implemented within this callback.
          All of
   * the important information about the attribute itself is passed as a pointer
   * to an EmberAfAttributeMetadata struct, which is stored within the application
   * and used to manage the attribute. A complete description of the
   * EmberAfAttributeMetadata struct is provided in
   * app/framework/include/af-types.h.
          This function assumes that the
   * application is able to write the attribute and return immediately. Any
   * attributes that require a state machine for reading and writing are not
   * candidates for externalization at the present time. The Application Framework
   * does not currently include a state machine for reading or writing attributes
   * that must take place across a series of application ticks. Attributes that
   * cannot be written immediately should be stored within the Application
   * Framework and updated occasionally by the application code from within the
   * emberAfMainTickCallback.
          If the application was successfully able to
   * write the attribute, it returns a value of EMBER_ZCL_STATUS_SUCCESS. Any
   * other return value indicates the application was not able to write the
   * attribute.
   *
   * @param endpoint   Ver.: always
   * @param clusterId   Ver.: always
   * @param attributeMetadata   Ver.: always
   * @param manufacturerCode   Ver.: always
   * @param buffer   Ver.: always
   * @param index   Ver.: always
   */
  EmberAfStatus emberAfExternalAttributeWriteCallback(chip::EndpointId endpoint, chip::ClusterId clusterId,
                                                      EmberAfAttributeMetadata * attributeMetadata, uint16_t manufacturerCode,
                                                      uint8_t * buffer, int32_t index = -1);
  
  /** @brief Report Attributes
   *
   * This function is called by the application framework when a Report Attributes
   * command is received from an external device.  The application should return
   * true if the message was processed or false if it was not.
   *
   * @param clusterId The cluster identifier of this command.  Ver.: always
   * @param buffer Buffer containing the list of attribute report records.  Ver.:
   * always
   * @param bufLen The length in bytes of the list.  Ver.: always
   */
  bool emberAfReportAttributesCallback(chip::ClusterId clusterId, uint8_t * buffer, uint16_t bufLen);
  
  /** @brief Get Current Time
   *
   * This callback is called when device attempts to get current time from the
   * hardware. If this device has means to retrieve exact time, then this method
   * should implement it. If the callback can't provide the exact time it should
   * return 0 to indicate failure. Default action is to return 0, which indicates
   * that device does not have access to real time.
   *
   */
  uint32_t emberAfGetCurrentTimeCallback();
  
  /** @brief Get Endpoint Info
   *
   * This function is a callback to an application implemented endpoint that
   * operates outside the normal application framework.  When the framework wishes
   * to perform operations with that endpoint it uses this callback to retrieve
   * the endpoint's information.  If the endpoint exists and the application can
   * provide data then true shall be returned.  Otherwise the callback must return
   * false.
   *
   * @param endpoint The endpoint to retrieve data for.  Ver.: always
   * @param returnNetworkIndex The index corresponding to the ZigBee network the
   * endpoint belongs to.  If not using a multi-network device, 0 must be
   * returned.  Otherwise on a multi-network device the stack will switch to this
   * network before sending the message.  Ver.: always
   * @param returnEndpointInfo A pointer to a data struct that will be written
   * with information about the endpoint.  Ver.: always
   */
  bool emberAfGetEndpointInfoCallback(chip::EndpointId endpoint, uint8_t * returnNetworkIndex,
                                      EmberAfEndpointInfoStruct * returnEndpointInfo);
  
  /** @brief Registration Abort
   *
   * This callback is called when the device should abort the registration
   * process.
   *
   */
  void emberAfRegistrationAbortCallback();
  
  /** @brief Interpan Send Message
   *
   * This function will send a raw MAC message with interpan frame format using
   * the passed parameters.
   *
   * @param header Interpan header info  Ver.: always
   * @param messageLength The length of the message received or to send  Ver.:
   * always
   * @param message The message data received or to send.  Ver.: always
   */
  EmberStatus emberAfInterpanSendMessageCallback(EmberAfInterpanHeader * header, uint16_t messageLength, uint8_t * message);
  
  /** @brief Start Move
   *
   * This function is called to initiate the process for a device to move (rejoin)
   * to a new parent.
   *
   */
  bool emberAfStartMoveCallback();
  