MeshTalos-Client/managed_components/espressif__esp-zboss-lib/include/zcl/zb_zcl_wwah.h
2025-12-03 14:20:11 +08:00

2640 lines
155 KiB
C

/*
* Copyright (c) 2012-2022 DSR Corporation, Denver CO, USA
* Copyright (c) 2021-2022 Espressif Systems (Shanghai) PTE LTD
* All rights reserved.
*
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form, except as embedded into a Espressif Systems
* integrated circuit in a product or a software update for such product,
* must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors
* may be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* 4. Any software provided in binary form under this license must not be reverse
* engineered, decompiled, modified and/or disassembled.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/* PURPOSE: WWAH cluster definitions
*/
#ifndef ZB_ZCL_WWAH_H
#define ZB_ZCL_WWAH_H 1
#include "zcl/zb_zcl_common.h"
#include "zcl/zb_zcl_commands.h"
/** @cond DOXYGEN_ZCL_SECTION */
/* Cluster ZB_ZCL_CLUSTER_ID_WWAH */
/** @addtogroup ZB_ZCL_WWAH
* @{
* @details
* This cluster provides an opportunity to use various features
* of the Work With All Hubs cluster.
*
* The WWAH cluster shall exist on only 1 endpoint of the Zigbee node,
* it should be identified using cluster ID 0xfc57 and manufacturer ID 0x1217.
*
* All configurations/command settings in this cluster shall be persisted across power cycles
* and rejoins. Only a device factory reset can reset this cluster and put it back to default
* settings.
*
* For more information see Zigbee WWAH Cluster definition (document number in Zigbee Alliance
* 17-01067-022).
*
*/
/*! @defgroup ZB_ZCL_WWAH_ATTR WWAH cluster attributes
@{
*/
/* Amazon Lab 126 manufacturer code */
#define WWAH_MANUFACTURER_CODE 0x1217
/*! @brief WWAH cluster attribute identifiers
@see WWAH spec, subclause 6.3.2.2
*/
enum zb_zcl_wwah_attr_e
{
/** If set to TRUE, the device SHALL disallow downgrades of it's firmware. */
ZB_ZCL_ATTR_WWAH_DISABLE_OTA_DOWNGRADES_ID = 0x0002,
/** If set to FALSE, the node SHALL ignore MGMT Leave Without Rejoin commands. */
ZB_ZCL_ATTR_WWAH_MGMT_LEAVE_WITHOUT_REJOIN_ENABLED_ID = 0x0003,
/** This attribute is a fixed value containing the number of Network Level Retries
* the device performs when sending a unicast command, not including APS retries. */
ZB_ZCL_ATTR_WWAH_NWK_RETRY_COUNT_ID = 0x0004,
/** This attribute is a fixed value containing the number of MAC Level Retries the
* device performs when sending a unicast command, not including APS retries. */
ZB_ZCL_ATTR_WWAH_MAC_RETRY_COUNT_ID = 0x0005,
/** This attribute is set to TRUE if the router's check-in algorithm has been enabled
* through the 'Enable Periodic Router Check-Ins' command detailed below. */
ZB_ZCL_ATTR_WWAH_ROUTER_CHECK_IN_ENABLED_ID = 0x0006,
/** This attribute is set to FALSE if support for Touchlink Interpan messages has been
* disabled on the device. */
ZB_ZCL_ATTR_WWAH_TOUCHLINK_INTERPAN_ENABLED_ID = 0x0007,
/** If set to TRUE, the device SHALL enable the WWAH Parent Classification
* Advertisements feature. */
ZB_ZCL_ATTR_WWAH_WWAH_PARENT_CLASSIFICATION_ENABLED_ID = 0x0008,
/** This attribute is TRUE if the WWAH Application Event Retry Algorithm is enabled. */
ZB_ZCL_ATTR_WWAH_WWAH_APP_EVENT_RETRY_ENABLED_ID = 0x0009,
/** This attribute is the queue size for re-delivery attempts in the WWAH Application
* Event Retry Algorithm. */
ZB_ZCL_ATTR_WWAH_WWAH_APP_EVENT_RETRY_QUEUE_SIZE_ID = 0x000A,
/** This attribute is set to TRUE if the WWAH Rejoin Algorithm is enabled. */
ZB_ZCL_ATTR_WWAH_WWAH_REJOIN_ENABLED_ID = 0x000B,
/** This attribute is the time in seconds the device waits before retrying a data poll
* when a MAC level data poll fails for any reason. */
ZB_ZCL_ATTR_WWAH_MAC_POLL_FAILURE_WAIT_TIME_ID = 0x000C,
/** This attribute indicates whether the device is able to be configured using ZDO
* commands that are not encrypted using the Trust Center Link Key. */
ZB_ZCL_ATTR_WWAH_CONFIGURATION_MODE_ENABLED_ID = 0x000D,
/** This attribute contains the ID of the current debug report stored on the node. */
ZB_ZCL_ATTR_WWAH_CURRENT_DEBUG_REPORT_ID_ID = 0x000E,
/** If this attribute is set to TRUE, the node SHALL only process network
* key rotation commands which are sent via unicast and are encrypted by
* the Trust Center Link Key. */
ZB_ZCL_ATTR_WWAH_TC_SECURITY_ON_NWK_KEY_ROTATION_ENABLED_ID = 0x000F,
/** If this attribute is set to TRUE, the endpoint device SHALL enable
* the WWAH Bad Parent Recovery feature. */
ZB_ZCL_ATTR_WWAH_WWAH_BAD_PARENT_RECOVERY_ENABLED_ID = 0x0010,
/** This attribute contains the channel number of the only channel the device
* SHALL accept in a ZDO Mgmt Network Update command. */
ZB_ZCL_ATTR_WWAH_PENDING_NETWORK_UPDATE_CHANNEL_ID = 0x0011,
/** This attribute contains the only short PAN ID the device SHALL accept in
* a NLME Network Update command. */
ZB_ZCL_ATTR_WWAH_PENDING_NETWORK_UPDATE_PANID_ID = 0x0012,
/** This attribute contains the maximum time in seconds the device may be unavailable
* after completing its OTA download (while restarting, etc). */
ZB_ZCL_ATTR_WWAH_OTA_MAX_OFFLINE_DURATION_ID = 0x0013,
};
/** @brief Minimum value for Cluster Revision attribute */
#define ZB_ZCL_WWAH_CLUSTER_REVISION_MIN_VALUE 0x0001
/** @brief Default value for WWAH cluster revision global attribute */
#define ZB_ZCL_WWAH_CLUSTER_REVISION_DEFAULT ZB_ZCL_WWAH_CLUSTER_REVISION_MIN_VALUE
/** @brief Default value for MGMTLeaveWithoutRejoinEnabled attribute */
#define ZB_ZCL_WWAH_MGMT_LEAVE_WITHOUT_REJOIN_ENABLED_DEFAULT_VALUE ZB_TRUE
/** @brief Minimum value for NWKRetryCount attribute */
#define ZB_ZCL_WWAH_NWK_RETRY_COUNT_MIN_VALUE 0x03
/** @brief Maximum value for NWKRetryCount attribute */
#define ZB_ZCL_WWAH_NWK_RETRY_COUNT_MAX_VALUE 0xFF
/** @brief Minimum value for MACRetryCount attribute */
#define ZB_ZCL_WWAH_MAC_RETRY_COUNT_MIN_VALUE 0x03
/** @brief Maximum value for MACRetryCount attribute */
#define ZB_ZCL_WWAH_MAC_RETRY_COUNT_MAX_VALUE 0xFF
/** @brief Default value for RouterCheckInEnabled attribute */
#define ZB_ZCL_WWAH_ROUTER_CHECK_IN_ENABLED_DEFAULT_VALUE ZB_FALSE
/** @brief Default value for WWAHParentClassificationEnabled attribute */
#define ZB_ZCL_WWAH_WWAH_PARENT_CLASSIFICATION_ENABLED_DEFAULT_VALUE ZB_FALSE
/** @brief Default value for WWAHAppEventRetryEnabled attribute */
#define ZB_ZCL_WWAH_WWAH_APP_EVENT_RETRY_ENABLED_DEFAULT_VALUE ZB_TRUE
/** @brief Minimum value for WWAHAppEventRetryQueueSize attribute */
#define ZB_ZCL_WWAH_WWAH_APP_EVENT_RETRY_QUEUE_SIZE_MIN_VALUE 10
/** @brief Maximum value for WWAHAppEventRetryQueueSize attribute */
#define ZB_ZCL_WWAH_WWAH_APP_EVENT_RETRY_QUEUE_SIZE_MAX_VALUE 0xFF
/** @brief Default value for WWAHAppEventRetryQueueSize attribute */
#define ZB_ZCL_WWAH_WWAH_APP_EVENT_RETRY_QUEUE_SIZE_DEFAULT_VALUE 10
/** @brief Default value for WWAHRejoinEnabled attribute */
#define ZB_ZCL_WWAH_WWAH_REJOIN_ENABLED_DEFAULT_VALUE ZB_FALSE
/** @brief Minimum value for MACPollFailureWaitTime attribute */
#define ZB_ZCL_WWAH_MAC_POLL_FAILURE_WAIT_TIME_MIN_VALUE 0x00
/** @brief Maximum value for MACPollFailureWaitTime attribute */
#define ZB_ZCL_WWAH_MAC_POLL_FAILURE_WAIT_TIME_MAX_VALUE 0xFF
/** @brief Default value for MACPollFailureWaitTime attribute */
#define ZB_ZCL_WWAH_MAC_POLL_FAILURE_WAIT_TIME_DEFAULT_VALUE 3
/** @brief Default value for ConfigurationModeEnabled attribute */
#define ZB_ZCL_WWAH_CONFIGURATION_MODE_ENABLED_DEFAULT_VALUE ZB_TRUE
/** @brief Minimum value for CurrentDebugReportID attribute */
#define ZB_ZCL_WWAH_CURRENT_DEBUG_REPORT_ID_MIN_VALUE 0x00
/** @brief Maximum value for CurrentDebugReportID attribute */
#define ZB_ZCL_WWAH_CURRENT_DEBUG_REPORT_ID_MAX_VALUE 0xFF
/** @brief Default value for TCSecurityOnNwkKeyRotationEnabled attribute */
#define ZB_ZCL_WWAH_TC_SECURITY_ON_NWK_KEY_ROTATION_ENABLED_DEFAULT_VALUE ZB_FALSE
/** @brief Default value for WWAHBadParentRecoveryEnabled attribute */
#define ZB_ZCL_WWAH_WWAH_BAD_PARENT_RECOVERY_ENABLED_DEFAULT_VALUE ZB_FALSE
/** @brief Minimum value for PendingNetworkUpdateChannel attribute */
#define ZB_ZCL_WWAH_PENDING_NETWORK_UPDATE_CHANNEL_MIN_VALUE 0x00
/** @brief Maximum value for PendingNetworkUpdateChannel attribute */
#define ZB_ZCL_WWAH_PENDING_NETWORK_UPDATE_CHANNEL_MAX_VALUE 0xFF
/** @brief Default value for PendingNetworkUpdateChannel attribute */
#define ZB_ZCL_WWAH_PENDING_NETWORK_UPDATE_CHANNEL_DEFAULT_VALUE 0xFF
/** @brief Minimum value for PendingNetworkUpdatePANID attribute */
#define ZB_ZCL_WWAH_PENDING_NETWORK_UPDATE_PANID_MIN_VALUE 0x0000
/** @brief Maximum value for PendingNetworkUpdatePANID attribute */
#define ZB_ZCL_WWAH_PENDING_NETWORK_UPDATE_PANID_MAX_VALUE 0xFFFF
/** @brief Default value for PendingNetworkUpdatePANID attribute */
#define ZB_ZCL_WWAH_PENDING_NETWORK_UPDATE_PANID_DEFAULT_VALUE 0xFFFF
/** @brief Minimum value for OTAMaxOfflineDuration attribute */
#define ZB_ZCL_WWAH_OTA_MAX_OFFLINE_DURATION_MIN_VALUE 0x0000
/** @brief Maximum value for OTAMaxOfflineDuration attribute */
#define ZB_ZCL_WWAH_OTA_MAX_OFFLINE_DURATION_MAX_VALUE 0xFFFF
/** @brief Additional MAC Poll retry count */
#define ZB_ZCL_WWAH_MAC_POLL_RETRY_COUNT 2
/*! @} */ /* WWAH cluster attributes */
/*! @defgroup ZB_ZCL_WWAH_COMMANDS WWAH cluster commands
@{
*/
/*! @brief WWAH cluster command identifiers
@see WWAH spec
*/
enum zb_zcl_wwah_cmd_e
{
/** Enable APS Link Key Authorization command */
ZB_ZCL_CMD_WWAH_ENABLE_APS_LINK_KEY_AUTHORIZATION_ID = 0x00,
/** Disable APS Link Key Authorization command */
ZB_ZCL_CMD_WWAH_DISABLE_APS_LINK_KEY_AUTHORIZATION_ID = 0x01,
/** APS Link Key Authorization Query command */
ZB_ZCL_CMD_WWAH_APS_LINK_KEY_AUTHORIZATION_QUERY_ID = 0x02,
/** Request New APS Link Key command */
ZB_ZCL_CMD_WWAH_REQUEST_NEW_APS_LINK_KEY_ID = 0x03,
/** Enable WWAH App Event Retry Algorithm command */
ZB_ZCL_CMD_WWAH_ENABLE_WWAH_APP_EVENT_RETRY_ALGORITHM_ID = 0x04,
/** Disable WWAH App Event Retry Algorithm command */
ZB_ZCL_CMD_WWAH_DISABLE_WWAH_APP_EVENT_RETRY_ALGORITHM_ID = 0x05,
/** Request Time command */
ZB_ZCL_CMD_WWAH_REQUEST_TIME_ID = 0x06,
/** Enable WWAH Rejoin Algorithm command */
ZB_ZCL_CMD_WWAH_ENABLE_WWAH_REJOIN_ALGORITHM_ID = 0x07,
/** Disable WWAH Rejoin Algorithm command */
ZB_ZCL_CMD_WWAH_DISABLE_WWAH_REJOIN_ALGORITHM_ID = 0x08,
/** Set IAS Zone Enrollment Method command */
ZB_ZCL_CMD_WWAH_SET_IAS_ZONE_ENROLLMENT_METHOD_ID = 0x09,
/** Clear Binding Table command */
ZB_ZCL_CMD_WWAH_CLEAR_BINDING_TABLE_ID = 0x0A,
/** Enable Periodic Router Check Ins command */
ZB_ZCL_CMD_WWAH_ENABLE_PERIODIC_ROUTER_CHECK_INS_ID = 0x0B,
/** Disable Periodic Router Check Ins command */
ZB_ZCL_CMD_WWAH_DISABLE_PERIODIC_ROUTER_CHECK_INS_ID = 0x0C,
/** Set MAC Poll CCA Wait Time command */
ZB_ZCL_CMD_WWAH_SET_MAC_POLL_CCA_WAIT_TIME_ID = 0x0D,
/** Set Pending Network Update command */
ZB_ZCL_CMD_WWAH_SET_PENDING_NETWORK_UPDATE_ID = 0x0E,
/** Require APS ACKs on Unicasts command */
ZB_ZCL_CMD_WWAH_REQUIRE_APS_ACKS_ON_UNICASTS_ID = 0x0F,
/** Remove APS ACKs on Unicasts Requirement command */
ZB_ZCL_CMD_WWAH_REMOVE_APS_ACKS_ON_UNICASTS_REQUIREMENT_ID = 0x10,
/** APS ACK Requirement Query command */
ZB_ZCL_CMD_WWAH_APS_ACK_REQUIREMENT_QUERY_ID = 0x11,
/** Debug Report Query command */
ZB_ZCL_CMD_WWAH_DEBUG_REPORT_QUERY_ID = 0x12,
/** Survey Beacons command */
ZB_ZCL_CMD_WWAH_SURVEY_BEACONS_ID = 0x13,
/** Disable OTA Downgrades command */
ZB_ZCL_CMD_WWAH_DISABLE_OTA_DOWNGRADES_ID = 0x14,
/** Disable MGMT Leave Without Rejoin command */
ZB_ZCL_CMD_WWAH_DISABLE_MGMT_LEAVE_WITHOUT_REJOIN_ID = 0x15,
/** Disable Touchlink Interpan Message Support command */
ZB_ZCL_CMD_WWAH_DISABLE_TOUCHLINK_INTERPAN_MESSAGE_SUPPORT_ID = 0x16,
/** Enable WWAH Parent Classification command */
ZB_ZCL_CMD_WWAH_ENABLE_WWAH_PARENT_CLASSIFICATION_ID = 0x17,
/** Disable WWAH Parent Classification command */
ZB_ZCL_CMD_WWAH_DISABLE_WWAH_PARENT_CLASSIFICATION_ID = 0x18,
/** Enable TC Security On Nwk Key Rotation command */
ZB_ZCL_CMD_WWAH_ENABLE_TC_SECURITY_ON_NWK_KEY_ROTATION_ID = 0x19,
/** Enable WWAH Bad Parent Recovery command */
ZB_ZCL_CMD_WWAH_ENABLE_WWAH_BAD_PARENT_RECOVERY_ID = 0x1A,
/** Disable WWAH Bad Parent Recovery command */
ZB_ZCL_CMD_WWAH_DISABLE_WWAH_BAD_PARENT_RECOVERY_ID = 0x1B,
/** Enable Configuration Mode command */
ZB_ZCL_CMD_WWAH_ENABLE_CONFIGURATION_MODE_ID = 0x1C,
/** Disable Configuration Mode command */
ZB_ZCL_CMD_WWAH_DISABLE_CONFIGURATION_MODE_ID = 0x1D,
/** Use Trust Center for Cluster command */
ZB_ZCL_CMD_WWAH_USE_TRUST_CENTER_FOR_CLUSTER_ID = 0x1E,
/** Trust Center for Cluster Server Query command */
ZB_ZCL_CMD_WWAH_TRUST_CENTER_FOR_CLUSTER_SERVER_QUERY_ID = 0x1F,
};
enum zb_zcl_wwah_cmd_resp_e
{
/** APS Link Key Authorization Query Response command */
ZB_ZCL_CMD_WWAH_APS_LINK_KEY_AUTHORIZATION_QUERY_RESPONSE_ID = 0x00,
/** Powering Off Notification command */
ZB_ZCL_CMD_WWAH_POWERING_OFF_NOTIFICATION_ID = 0x01,
/** Powering On Notification command */
ZB_ZCL_CMD_WWAH_POWERING_ON_NOTIFICATION_ID = 0x02,
/** Short Address Change command */
ZB_ZCL_CMD_WWAH_SHORT_ADDRESS_CHANGE_ID = 0x03,
/** APS ACK Requirement Query Response command */
ZB_ZCL_CMD_WWAH_APS_ACK_REQUIREMENT_QUERY_RESPONSE_ID = 0x04,
/** Power Descriptor Change command */
ZB_ZCL_CMD_WWAH_POWER_DESCRIPTOR_CHANGE_ID = 0x05,
/** New Debug Report Notification command */
ZB_ZCL_CMD_WWAH_NEW_DEBUG_REPORT_NOTIFICATION_ID = 0x06,
/** Debug Report Query Response command */
ZB_ZCL_CMD_WWAH_DEBUG_REPORT_QUERY_RESPONSE_ID = 0x07,
/** Trust Center for Cluster Server Query Response command */
ZB_ZCL_CMD_WWAH_TRUST_CENTER_FOR_CLUSTER_SERVER_QUERY_RESPONSE_ID = 0x08,
/** Survey Beacons Response command */
ZB_ZCL_CMD_WWAH_SURVEY_BEACONS_RESPONSE_ID = 0x09,
};
/* WWAH control cluster commands list : only for information - do not modify */
#define ZB_ZCL_CLUSTER_ID_WWAH_SERVER_ROLE_GENERATED_CMD_LIST \
ZB_ZCL_CMD_WWAH_APS_LINK_KEY_AUTHORIZATION_QUERY_RESPONSE_ID, \
ZB_ZCL_CMD_WWAH_POWERING_OFF_NOTIFICATION_ID, \
ZB_ZCL_CMD_WWAH_POWERING_ON_NOTIFICATION_ID, \
ZB_ZCL_CMD_WWAH_SHORT_ADDRESS_CHANGE_ID, \
ZB_ZCL_CMD_WWAH_APS_ACK_REQUIREMENT_QUERY_RESPONSE_ID, \
ZB_ZCL_CMD_WWAH_POWER_DESCRIPTOR_CHANGE_ID, \
ZB_ZCL_CMD_WWAH_NEW_DEBUG_REPORT_NOTIFICATION_ID, \
ZB_ZCL_CMD_WWAH_DEBUG_REPORT_QUERY_RESPONSE_ID, \
ZB_ZCL_CMD_WWAH_TRUST_CENTER_FOR_CLUSTER_SERVER_QUERY_RESPONSE_ID, \
ZB_ZCL_CMD_WWAH_SURVEY_BEACONS_RESPONSE_ID
#define ZB_ZCL_CLUSTER_ID_WWAH_CLIENT_ROLE_RECEIVED_CMD_LIST ZB_ZCL_CLUSTER_ID_WWAH_SERVER_ROLE_GENERATED_CMD_LIST
#define ZB_ZCL_CLUSTER_ID_WWAH_CLIENT_ROLE_GENERATED_CMD_LIST \
ZB_ZCL_CMD_WWAH_ENABLE_APS_LINK_KEY_AUTHORIZATION_ID, \
ZB_ZCL_CMD_WWAH_DISABLE_APS_LINK_KEY_AUTHORIZATION_ID, \
ZB_ZCL_CMD_WWAH_APS_LINK_KEY_AUTHORIZATION_QUERY_ID, \
ZB_ZCL_CMD_WWAH_REQUEST_NEW_APS_LINK_KEY_ID, \
ZB_ZCL_CMD_WWAH_ENABLE_WWAH_APP_EVENT_RETRY_ALGORITHM_ID, \
ZB_ZCL_CMD_WWAH_DISABLE_WWAH_APP_EVENT_RETRY_ALGORITHM_ID, \
ZB_ZCL_CMD_WWAH_REQUEST_TIME_ID, \
ZB_ZCL_CMD_WWAH_ENABLE_WWAH_REJOIN_ALGORITHM_ID, \
ZB_ZCL_CMD_WWAH_DISABLE_WWAH_REJOIN_ALGORITHM_ID, \
ZB_ZCL_CMD_WWAH_SET_IAS_ZONE_ENROLLMENT_METHOD_ID, \
ZB_ZCL_CMD_WWAH_CLEAR_BINDING_TABLE_ID, \
ZB_ZCL_CMD_WWAH_ENABLE_PERIODIC_ROUTER_CHECK_INS_ID, \
ZB_ZCL_CMD_WWAH_DISABLE_PERIODIC_ROUTER_CHECK_INS_ID, \
ZB_ZCL_CMD_WWAH_SET_MAC_POLL_CCA_WAIT_TIME_ID, \
ZB_ZCL_CMD_WWAH_SET_PENDING_NETWORK_UPDATE_ID, \
ZB_ZCL_CMD_WWAH_REQUIRE_APS_ACKS_ON_UNICASTS_ID, \
ZB_ZCL_CMD_WWAH_REMOVE_APS_ACKS_ON_UNICASTS_REQUIREMENT_ID, \
ZB_ZCL_CMD_WWAH_APS_ACK_REQUIREMENT_QUERY_ID, \
ZB_ZCL_CMD_WWAH_DEBUG_REPORT_QUERY_ID, \
ZB_ZCL_CMD_WWAH_SURVEY_BEACONS_ID, \
ZB_ZCL_CMD_WWAH_DISABLE_OTA_DOWNGRADES_ID, \
ZB_ZCL_CMD_WWAH_DISABLE_MGMT_LEAVE_WITHOUT_REJOIN_ID, \
ZB_ZCL_CMD_WWAH_DISABLE_TOUCHLINK_INTERPAN_MESSAGE_SUPPORT_ID, \
ZB_ZCL_CMD_WWAH_ENABLE_WWAH_PARENT_CLASSIFICATION_ID, \
ZB_ZCL_CMD_WWAH_DISABLE_WWAH_PARENT_CLASSIFICATION_ID, \
ZB_ZCL_CMD_WWAH_ENABLE_TC_SECURITY_ON_NWK_KEY_ROTATION_ID, \
ZB_ZCL_CMD_WWAH_ENABLE_WWAH_BAD_PARENT_RECOVERY_ID, \
ZB_ZCL_CMD_WWAH_DISABLE_WWAH_BAD_PARENT_RECOVERY_ID, \
ZB_ZCL_CMD_WWAH_ENABLE_CONFIGURATION_MODE_ID, \
ZB_ZCL_CMD_WWAH_DISABLE_CONFIGURATION_MODE_ID, \
ZB_ZCL_CMD_WWAH_USE_TRUST_CENTER_FOR_CLUSTER_ID, \
ZB_ZCL_CMD_WWAH_TRUST_CENTER_FOR_CLUSTER_SERVER_QUERY_ID
#define ZB_ZCL_CLUSTER_ID_WWAH_SERVER_ROLE_RECEIVED_CMD_LIST ZB_ZCL_CLUSTER_ID_WWAH_CLIENT_ROLE_GENERATED_CMD_LIST
/** @brief Size of APS ACK Exempt Table */
#define ZB_ZCL_WWAH_APS_ACK_EXEMPT_TABLE_SIZE 10
ZB_ASSERT_VALUE_ALIGNED_TO_4(ZB_ZCL_WWAH_APS_ACK_EXEMPT_TABLE_SIZE * sizeof(zb_uint16_t));
/** @brief Size of APS Link Key Authorization Table */
#define ZB_ZCL_WWAH_APS_LINK_KEY_AUTHORIZATION_TABLE_SIZE 10
ZB_ASSERT_VALUE_ALIGNED_TO_4(ZB_ZCL_WWAH_APS_LINK_KEY_AUTHORIZATION_TABLE_SIZE * sizeof(zb_uint16_t));
/** @brief Size of Use Trust Center for Cluster Table */
#define ZB_ZCL_WWAH_USE_TRUST_CENTER_FOR_CLUSTER_TABLE_SIZE 4
ZB_ASSERT_VALUE_ALIGNED_TO_4(ZB_ZCL_WWAH_USE_TRUST_CENTER_FOR_CLUSTER_TABLE_SIZE * sizeof(zb_uint16_t));
#define ZB_ZCL_WWAH_CLUSTER_LIST_MAX_SIZE ZB_ZCL_WWAH_APS_ACK_EXEMPT_TABLE_SIZE
/** @brief WWAH Cluster arrays "record is free" flag */
#define ZB_ZCL_WWAH_CLUSTER_ID_FREE_RECORD 0xFFFF
/** @brief Debug Report ID field reserved value
* The value 0x00 is reserved to indicate that there are no debug reports and SHALL not be used
* as IDs of a debug report.*/
#define ZB_ZCL_WWAH_RESERVED_DEBUG_REPORT_ID 0x00
#define ZB_ZCL_WWAH_DEBUG_REPORT_FREE_RECORD (zb_zcl_wwah_debug_report_t){ZB_ZCL_WWAH_RESERVED_DEBUG_REPORT_ID, 0, NULL}
/** @brief Context WWAH cluster */
typedef ZB_PACKED_PRE struct zb_zcl_wwah_debug_report_s
{
zb_uint8_t report_id; /**< Report ID. 0x00 means lack of report */
zb_uint32_t report_size; /**< Report size */
zb_char_t *report; /**< Pointer to report data*/
}
ZB_PACKED_STRUCT zb_zcl_wwah_debug_report_t;
typedef ZB_PACKED_PRE struct zb_zcl_wwah_classification_mask_s
{
zb_bitfield_t tc_connectivity :1; /**< TC Connectivity value */
zb_bitfield_t long_uptime :1; /**< Long Uptime value */
zb_bitfield_t reserved :6; /**< Reserved */
}
ZB_PACKED_STRUCT
zb_zcl_wwah_classification_mask_t;
#define ZB_ZCL_WWAH_PERIODIC_CHECKINS_CLUSTER_MATCH_DESC_TIME (ZB_TIME_ONE_SECOND * 20)
#define ZB_ZCL_WWAH_PERIODIC_CHECKINS_MAX_FAILURE_CNT 3
#define ZB_ZCL_WWAH_PERIODIC_CHECKINS_READ_KEEPALIVE 0
#define ZB_ZCL_WWAH_PERIODIC_CHECKINS_READ_CLUSTER_REVISION 1
#define ZB_ZCL_WWAH_PERIODIC_CHECKINS_NOT_SUPPORTED 2
typedef ZB_PACKED_PRE struct zb_zcl_wwah_periodic_checkins_data_s
{
zb_uint8_t poll_method;
zb_uint8_t tsn;
zb_uint8_t endpoint;
zb_uint8_t failure_cnt;
zb_uint32_t countdown;
zb_uint16_t keepalive_base; /* Base timeout in seconds*/
zb_uint16_t keepalive_jitter;
} ZB_PACKED_STRUCT zb_zcl_wwah_periodic_checkins_data_t;
typedef enum zb_zcl_wwah_bad_parent_recovery_signal_e
{
ZB_ZCL_WWAH_BAD_PARENT_RECOVERY_RSSI_WITH_PARENT_BAD = 0,
ZB_ZCL_WWAH_BAD_PARENT_RECOVERY_RSSI_WITH_PARENT_OK,
ZB_ZCL_WWAH_BAD_PARENT_RECOVERY_APS_ACK_FAILED,
ZB_ZCL_WWAH_BAD_PARENT_RECOVERY_APS_ACK_OK,
ZB_ZCL_WWAH_BAD_PARENT_RECOVERY_POLL_CONTROL_CHECK_IN_FAILED,
ZB_ZCL_WWAH_BAD_PARENT_RECOVERY_POLL_CONTROL_CHECK_IN_OK,
ZB_ZCL_WWAH_BAD_PARENT_RECOVERY_RESERVED
} zb_zcl_wwah_bad_parent_recovery_signal_t;
typedef ZB_PACKED_PRE struct zb_zcl_wwah_bad_parent_recovery_data_s
{
zb_bitfield_t started:1;
zb_bitfield_t poll_control_checkin_failed_cnt:2;
zb_bitfield_t reserved:5;
} ZB_PACKED_STRUCT zb_zcl_wwah_bad_parent_recovery_data_t;
typedef enum zb_zcl_wwah_behavior_e
{
ZB_ZCL_WWAH_BEHAVIOR_OFF = 0,
ZB_ZCL_WWAH_BEHAVIOR_CLIENT,
ZB_ZCL_WWAH_BEHAVIOR_SERVER,
ZB_ZCL_WWAH_BEHAVIOR_RESERVED
} zb_zcl_wwah_behavior_t;
/*! @} */ /* WWAH cluster commands */
/*!
@cond internals_doc
@internal @name WWAH cluster internals
Internal structures for attribute representation in cluster definitions.
@{
*/
#define ZB_SET_ATTR_DESCR_WITH_ZB_ZCL_ATTR_WWAH_DISABLE_OTA_DOWNGRADES_ID(data_ptr) \
{ \
ZB_ZCL_ATTR_WWAH_DISABLE_OTA_DOWNGRADES_ID, \
ZB_ZCL_ATTR_TYPE_BOOL, \
ZB_ZCL_ATTR_ACCESS_READ_ONLY, \
(ZB_ZCL_NON_MANUFACTURER_SPECIFIC), \
(void*) data_ptr \
}
#define ZB_SET_ATTR_DESCR_WITH_ZB_ZCL_ATTR_WWAH_MGMT_LEAVE_WITHOUT_REJOIN_ENABLED_ID(data_ptr) \
{ \
ZB_ZCL_ATTR_WWAH_MGMT_LEAVE_WITHOUT_REJOIN_ENABLED_ID, \
ZB_ZCL_ATTR_TYPE_BOOL, \
ZB_ZCL_ATTR_ACCESS_READ_ONLY, \
(ZB_ZCL_NON_MANUFACTURER_SPECIFIC), \
(void*) data_ptr \
}
#define ZB_SET_ATTR_DESCR_WITH_ZB_ZCL_ATTR_WWAH_NWK_RETRY_COUNT_ID(data_ptr) \
{ \
ZB_ZCL_ATTR_WWAH_NWK_RETRY_COUNT_ID, \
ZB_ZCL_ATTR_TYPE_U8, \
ZB_ZCL_ATTR_ACCESS_READ_ONLY, \
(ZB_ZCL_NON_MANUFACTURER_SPECIFIC), \
(void*) data_ptr \
}
#define ZB_SET_ATTR_DESCR_WITH_ZB_ZCL_ATTR_WWAH_MAC_RETRY_COUNT_ID(data_ptr) \
{ \
ZB_ZCL_ATTR_WWAH_MAC_RETRY_COUNT_ID, \
ZB_ZCL_ATTR_TYPE_U8, \
ZB_ZCL_ATTR_ACCESS_READ_ONLY, \
(ZB_ZCL_NON_MANUFACTURER_SPECIFIC), \
(void*) data_ptr \
}
#define ZB_SET_ATTR_DESCR_WITH_ZB_ZCL_ATTR_WWAH_ROUTER_CHECK_IN_ENABLED_ID(data_ptr) \
{ \
ZB_ZCL_ATTR_WWAH_ROUTER_CHECK_IN_ENABLED_ID, \
ZB_ZCL_ATTR_TYPE_BOOL, \
ZB_ZCL_ATTR_ACCESS_READ_ONLY, \
(ZB_ZCL_NON_MANUFACTURER_SPECIFIC), \
(void*) data_ptr \
}
#define ZB_SET_ATTR_DESCR_WITH_ZB_ZCL_ATTR_WWAH_TOUCHLINK_INTERPAN_ENABLED_ID(data_ptr) \
{ \
ZB_ZCL_ATTR_WWAH_TOUCHLINK_INTERPAN_ENABLED_ID, \
ZB_ZCL_ATTR_TYPE_BOOL, \
ZB_ZCL_ATTR_ACCESS_READ_ONLY, \
(ZB_ZCL_NON_MANUFACTURER_SPECIFIC), \
(void*) data_ptr \
}
#define ZB_SET_ATTR_DESCR_WITH_ZB_ZCL_ATTR_WWAH_WWAH_PARENT_CLASSIFICATION_ENABLED_ID(data_ptr) \
{ \
ZB_ZCL_ATTR_WWAH_WWAH_PARENT_CLASSIFICATION_ENABLED_ID, \
ZB_ZCL_ATTR_TYPE_BOOL, \
ZB_ZCL_ATTR_ACCESS_READ_ONLY, \
(ZB_ZCL_NON_MANUFACTURER_SPECIFIC), \
(void*) data_ptr \
}
#define ZB_SET_ATTR_DESCR_WITH_ZB_ZCL_ATTR_WWAH_WWAH_APP_EVENT_RETRY_ENABLED_ID(data_ptr) \
{ \
ZB_ZCL_ATTR_WWAH_WWAH_APP_EVENT_RETRY_ENABLED_ID, \
ZB_ZCL_ATTR_TYPE_BOOL, \
ZB_ZCL_ATTR_ACCESS_READ_ONLY, \
(ZB_ZCL_NON_MANUFACTURER_SPECIFIC), \
(void*) data_ptr \
}
#define ZB_SET_ATTR_DESCR_WITH_ZB_ZCL_ATTR_WWAH_WWAH_APP_EVENT_RETRY_QUEUE_SIZE_ID(data_ptr) \
{ \
ZB_ZCL_ATTR_WWAH_WWAH_APP_EVENT_RETRY_QUEUE_SIZE_ID, \
ZB_ZCL_ATTR_TYPE_U8, \
ZB_ZCL_ATTR_ACCESS_READ_ONLY, \
(ZB_ZCL_NON_MANUFACTURER_SPECIFIC), \
(void*) data_ptr \
}
#define ZB_SET_ATTR_DESCR_WITH_ZB_ZCL_ATTR_WWAH_WWAH_REJOIN_ENABLED_ID(data_ptr) \
{ \
ZB_ZCL_ATTR_WWAH_WWAH_REJOIN_ENABLED_ID, \
ZB_ZCL_ATTR_TYPE_BOOL, \
ZB_ZCL_ATTR_ACCESS_READ_ONLY, \
(ZB_ZCL_NON_MANUFACTURER_SPECIFIC), \
(void*) data_ptr \
}
#define ZB_SET_ATTR_DESCR_WITH_ZB_ZCL_ATTR_WWAH_MAC_POLL_FAILURE_WAIT_TIME_ID(data_ptr) \
{ \
ZB_ZCL_ATTR_WWAH_MAC_POLL_FAILURE_WAIT_TIME_ID, \
ZB_ZCL_ATTR_TYPE_U8, \
ZB_ZCL_ATTR_ACCESS_READ_ONLY, \
(ZB_ZCL_NON_MANUFACTURER_SPECIFIC), \
(void*) data_ptr \
}
#define ZB_SET_ATTR_DESCR_WITH_ZB_ZCL_ATTR_WWAH_CONFIGURATION_MODE_ENABLED_ID(data_ptr) \
{ \
ZB_ZCL_ATTR_WWAH_CONFIGURATION_MODE_ENABLED_ID, \
ZB_ZCL_ATTR_TYPE_BOOL, \
ZB_ZCL_ATTR_ACCESS_READ_ONLY, \
(ZB_ZCL_NON_MANUFACTURER_SPECIFIC), \
(void*) data_ptr \
}
#define ZB_SET_ATTR_DESCR_WITH_ZB_ZCL_ATTR_WWAH_CURRENT_DEBUG_REPORT_ID_ID(data_ptr) \
{ \
ZB_ZCL_ATTR_WWAH_CURRENT_DEBUG_REPORT_ID_ID, \
ZB_ZCL_ATTR_TYPE_U8, \
ZB_ZCL_ATTR_ACCESS_READ_ONLY, \
(ZB_ZCL_NON_MANUFACTURER_SPECIFIC), \
(void*) data_ptr \
}
#define ZB_SET_ATTR_DESCR_WITH_ZB_ZCL_ATTR_WWAH_TC_SECURITY_ON_NWK_KEY_ROTATION_ENABLED_ID(data_ptr)\
{ \
ZB_ZCL_ATTR_WWAH_TC_SECURITY_ON_NWK_KEY_ROTATION_ENABLED_ID, \
ZB_ZCL_ATTR_TYPE_BOOL, \
ZB_ZCL_ATTR_ACCESS_READ_ONLY, \
(ZB_ZCL_NON_MANUFACTURER_SPECIFIC), \
(void*) data_ptr \
}
#define ZB_SET_ATTR_DESCR_WITH_ZB_ZCL_ATTR_WWAH_WWAH_BAD_PARENT_RECOVERY_ENABLED_ID(data_ptr) \
{ \
ZB_ZCL_ATTR_WWAH_WWAH_BAD_PARENT_RECOVERY_ENABLED_ID, \
ZB_ZCL_ATTR_TYPE_BOOL, \
ZB_ZCL_ATTR_ACCESS_READ_ONLY, \
(ZB_ZCL_NON_MANUFACTURER_SPECIFIC), \
(void*) data_ptr \
}
#define ZB_SET_ATTR_DESCR_WITH_ZB_ZCL_ATTR_WWAH_PENDING_NETWORK_UPDATE_CHANNEL_ID(data_ptr) \
{ \
ZB_ZCL_ATTR_WWAH_PENDING_NETWORK_UPDATE_CHANNEL_ID, \
ZB_ZCL_ATTR_TYPE_U8, \
ZB_ZCL_ATTR_ACCESS_READ_ONLY, \
(ZB_ZCL_NON_MANUFACTURER_SPECIFIC), \
(void*) data_ptr \
}
#define ZB_SET_ATTR_DESCR_WITH_ZB_ZCL_ATTR_WWAH_PENDING_NETWORK_UPDATE_PANID_ID(data_ptr) \
{ \
ZB_ZCL_ATTR_WWAH_PENDING_NETWORK_UPDATE_PANID_ID, \
ZB_ZCL_ATTR_TYPE_U16, \
ZB_ZCL_ATTR_ACCESS_READ_ONLY, \
(ZB_ZCL_NON_MANUFACTURER_SPECIFIC), \
(void*) data_ptr \
}
#define ZB_SET_ATTR_DESCR_WITH_ZB_ZCL_ATTR_WWAH_OTA_MAX_OFFLINE_DURATION_ID(data_ptr) \
{ \
ZB_ZCL_ATTR_WWAH_OTA_MAX_OFFLINE_DURATION_ID, \
ZB_ZCL_ATTR_TYPE_U16, \
ZB_ZCL_ATTR_ACCESS_READ_ONLY, \
(ZB_ZCL_NON_MANUFACTURER_SPECIFIC), \
(void*) data_ptr \
}
typedef struct zb_zcl_wwah_cluster_list_s
{
zb_uint8_t number_of_clusters; /**< Number of Clusters */
zb_uint8_t alignment[3]; /**< Alignment */
zb_uint16_t cluster_id[ZB_ZCL_WWAH_CLUSTER_LIST_MAX_SIZE]; /**< Cluster list */
}
zb_zcl_wwah_cluster_list_t;
/*!
@brief Parses various commands with cluster list variable length payload and fills data request structure.
@param data_buf - pointer to zb_buf_t buffer containing command request data
@param req - variable to save command request
@param status - success or not read parameters - ZB_TRUE or ZB_FALSE
@note data_buf buffer should contain command request payload without ZCL header.
*/
#define ZB_ZCL_WWAH_GET_CLUSTER_LIST_CMD(data_buf, req, status) \
{ \
zb_uint8_t *src_ptr = (zb_uint8_t*)zb_buf_begin((data_buf)); \
zb_uint8_t number_of_clusters = *src_ptr; \
(status) = ZB_ZCL_PARSE_STATUS_FAILURE; \
if (zb_buf_len((data_buf)) >= sizeof(zb_uint8_t)) \
{ \
(req).number_of_clusters = number_of_clusters; \
if (number_of_clusters > 0) \
{ \
if (zb_buf_len((data_buf)) >= sizeof(zb_uint8_t) + \
number_of_clusters * sizeof(zb_uint16_t)) \
{ \
ZB_MEMCPY( \
(zb_uint8_t*)((req).cluster_id), \
(src_ptr + 1), \
number_of_clusters * sizeof(zb_uint16_t)); \
(status) = ZB_ZCL_PARSE_STATUS_SUCCESS; \
} \
} \
else \
{ \
(status) = ZB_ZCL_PARSE_STATUS_SUCCESS; \
} \
} \
}
#define ZB_ZCL_WWAH_APS_LINK_KEY_AUTHORIZATION_QUERY_PAYLOAD_LEN (sizeof(zb_uint16_t))
/*!
@brief Parses APS Link Key Authorization Query command and fills data request structure.
@param data_buf - pointer to zb_buf_t buffer containing command request data
@param req - variable to save command request
@param status - success or not read parameters - ZB_TRUE or ZB_FALSE
@note data_buf buffer should contain command request payload without ZCL header.
*/
#define ZB_ZCL_WWAH_GET_APS_LINK_KEY_AUTHORIZATION_QUERY(data_buf, req, status) \
{ \
zb_uint16_t *req_ptr = \
zb_buf_len(data_buf) >= ZB_ZCL_WWAH_APS_LINK_KEY_AUTHORIZATION_QUERY_PAYLOAD_LEN ? \
(zb_uint16_t*)zb_buf_begin(data_buf) : NULL; \
if (req_ptr) \
{ \
ZB_MEMCPY(&(req), req_ptr, ZB_ZCL_WWAH_APS_LINK_KEY_AUTHORIZATION_QUERY_PAYLOAD_LEN); \
status = ((req) == ZB_ZCL_WWAH_CLUSTER_ID_FREE_RECORD) ? \
ZB_ZCL_PARSE_STATUS_FAILURE : ZB_ZCL_PARSE_STATUS_SUCCESS; \
\
} \
else \
{ \
status = ZB_ZCL_PARSE_STATUS_FAILURE; \
} \
}
/** @brief Enable WWAH App Event Retry Algorithm command structure */
typedef ZB_PACKED_PRE struct zb_zcl_wwah_enable_wwah_app_event_retry_algorithm_s
{
zb_uint8_t first_backoff_time_in_seconds; /**< First Backoff Time In Seconds */
zb_uint8_t backoff_sequence_common_ratio; /**< Backoff Sequence Common Ratio */
zb_uint32_t max_backoff_time_in_seconds; /**< Max Backoff Time In Seconds */
zb_uint8_t max_re_delivery_attempts; /**< Max Re-Delivery Attempts */
}
ZB_PACKED_STRUCT
zb_zcl_wwah_enable_wwah_app_event_retry_algorithm_t;
#define ZB_ZCL_WWAH_ENABLE_WWAH_APP_EVENT_RETRY_ALGORITHM_PAYLOAD_LEN (sizeof(zb_zcl_wwah_enable_wwah_app_event_retry_algorithm_t))
/*!
@brief Parses Enable WWAH App Event Retry Algorithm command and fills data request structure.
@param data_buf - pointer to zb_buf_t buffer containing command request data
@param req - variable to save command request
@param status - success or not read parameters - ZB_TRUE or ZB_FALSE
@note data_buf buffer should contain command request payload without ZCL header.
*/
#define ZB_ZCL_WWAH_GET_ENABLE_WWAH_APP_EVENT_RETRY_ALGORITHM(data_buf, req, status) \
{ \
zb_zcl_wwah_enable_wwah_app_event_retry_algorithm_t *req_ptr = \
zb_buf_len(data_buf) >= ZB_ZCL_WWAH_ENABLE_WWAH_APP_EVENT_RETRY_ALGORITHM_PAYLOAD_LEN ? \
(zb_zcl_wwah_enable_wwah_app_event_retry_algorithm_t*)zb_buf_begin(data_buf) : NULL; \
if (req_ptr) \
{ \
ZB_MEMCPY(&(req), req_ptr, ZB_ZCL_WWAH_ENABLE_WWAH_APP_EVENT_RETRY_ALGORITHM_PAYLOAD_LEN); \
(status) = ZB_ZCL_PARSE_STATUS_SUCCESS; \
} \
else \
{ \
(status) = ZB_ZCL_PARSE_STATUS_FAILURE; \
} \
}
/** @brief Enable WWAH Rejoin Algorithm command structure */
typedef ZB_PACKED_PRE struct zb_zcl_wwah_enable_wwah_rejoin_algorithm_s
{
zb_uint16_t fast_rejoin_timeout_in_seconds; /**< Fast Rejoin Timeout In Seconds */
zb_uint16_t duration_between_each_rejoin_in_seconds; /**< Duration Between Each Rejoin In Seconds */
zb_uint16_t fast_rejoin_first_backoff_in_seconds; /**< Fast Rejoin First Backoff In Seconds */
zb_uint16_t rejoin_max_backoff_time_in_seconds; /**< Max Backoff Time In Seconds */
zb_uint16_t max_backoff_iterations; /**< Max Backoff Iterations */
}
ZB_PACKED_STRUCT
zb_zcl_wwah_enable_wwah_rejoin_algorithm_t;
#define ZB_ZCL_WWAH_ENABLE_WWAH_REJOIN_ALGORITHM_PAYLOAD_LEN (sizeof(zb_zcl_wwah_enable_wwah_rejoin_algorithm_t))
/*!
@brief Parses Enable WWAH Rejoin Algorithm command and fills data request structure.
@param data_buf - pointer to zb_buf_t buffer containing command request data
@param req - variable to save command request
@param status - success or not read parameters - ZB_TRUE or ZB_FALSE
@note data_buf buffer should contain command request payload without ZCL header.
*/
#define ZB_ZCL_WWAH_GET_ENABLE_WWAH_REJOIN_ALGORITHM(data_buf, req, status) \
{ \
zb_zcl_wwah_enable_wwah_rejoin_algorithm_t *req_ptr = \
zb_buf_len(data_buf) >= ZB_ZCL_WWAH_ENABLE_WWAH_REJOIN_ALGORITHM_PAYLOAD_LEN ? \
(zb_zcl_wwah_enable_wwah_rejoin_algorithm_t*)zb_buf_begin(data_buf) : NULL; \
if (req_ptr) \
{ \
ZB_MEMCPY(&(req), req_ptr, ZB_ZCL_WWAH_ENABLE_WWAH_REJOIN_ALGORITHM_PAYLOAD_LEN); \
(status) = ZB_ZCL_PARSE_STATUS_SUCCESS; \
} \
else \
{ \
(status) = ZB_ZCL_PARSE_STATUS_FAILURE; \
} \
}
#define ZB_ZCL_WWAH_SET_IAS_ZONE_ENROLLMENT_METHOD_PAYLOAD_LEN (sizeof(zb_uint8_t))
/*!
@brief Parses Set IAS Zone Enrollment Method command and fills data request structure.
@param data_buf - pointer to zb_buf_t buffer containing command request data
@param req - variable to save command request
@param status - success or not read parameters - ZB_TRUE or ZB_FALSE
@note data_buf buffer should contain command request payload without ZCL header.
*/
#define ZB_ZCL_WWAH_GET_SET_IAS_ZONE_ENROLLMENT_METHOD(data_buf, req, status) \
{ \
zb_uint8_t *req_ptr = \
zb_buf_len(data_buf) >= ZB_ZCL_WWAH_SET_IAS_ZONE_ENROLLMENT_METHOD_PAYLOAD_LEN ? \
(zb_uint8_t*)zb_buf_begin(data_buf) : NULL; \
if (req_ptr) \
{ \
ZB_MEMCPY(&(req), req_ptr, ZB_ZCL_WWAH_SET_IAS_ZONE_ENROLLMENT_METHOD_PAYLOAD_LEN); \
switch(*(zb_uint8_t*)req_ptr) \
{ \
case ZB_ZCL_WWAH_ENROLLMENT_MODE_TRIP_TO_PAIR: \
case ZB_ZCL_WWAH_ENROLLMENT_MODE_AUTO_ENROLL_RESPONSE: \
case ZB_ZCL_WWAH_ENROLLMENT_MODE_AUTO_ENROLL_REQUEST: \
{ \
status = ZB_ZCL_PARSE_STATUS_SUCCESS; \
break; \
} \
default: \
{ \
status = ZB_ZCL_PARSE_STATUS_FAILURE; \
break; \
} \
} \
} \
else \
{ \
status = ZB_ZCL_PARSE_STATUS_FAILURE; \
} \
}
#define ZB_ZCL_WWAH_ENABLE_PERIODIC_ROUTER_CHECK_INS_PAYLOAD_LEN (sizeof(zb_uint16_t))
/*!
@brief Parses Enable Periodic Router Check-Ins command and fills data request structure.
@param data_buf - pointer to zb_buf_t buffer containing command request data
@param req - variable to save command request
@param status - success or not read parameters - ZB_TRUE or ZB_FALSE
@note data_buf buffer should contain command request payload without ZCL header.
*/
#define ZB_ZCL_WWAH_GET_ENABLE_PERIODIC_ROUTER_CHECK_INS(data_buf, req, status) \
{ \
zb_uint16_t *req_ptr = \
zb_buf_len(data_buf) >= ZB_ZCL_WWAH_ENABLE_PERIODIC_ROUTER_CHECK_INS_PAYLOAD_LEN ? \
(zb_uint16_t*)zb_buf_begin(data_buf) : NULL; \
if (req_ptr) \
{ \
ZB_MEMCPY(&(req), req_ptr, ZB_ZCL_WWAH_ENABLE_PERIODIC_ROUTER_CHECK_INS_PAYLOAD_LEN); \
status = ZB_ZCL_PARSE_STATUS_SUCCESS; \
} \
else \
{ \
status = ZB_ZCL_PARSE_STATUS_FAILURE; \
} \
}
#define ZB_ZCL_WWAH_SET_MAC_POLL_CCA_WAIT_TIME_PAYLOAD_LEN (sizeof(zb_uint8_t))
/*!
@brief Parses Set MAC Poll CCA Wait Time command and fills data request structure.
@param data_buf - pointer to zb_buf_t buffer containing command request data
@param req - variable to save command request
@param status - success or not read parameters - ZB_TRUE or ZB_FALSE
@note data_buf buffer should contain command request payload without ZCL header.
*/
#define ZB_ZCL_WWAH_GET_SET_MAC_POLL_CCA_WAIT_TIME(data_buf, req, status) \
{ \
zb_uint8_t *req_ptr = \
zb_buf_len(data_buf) >= ZB_ZCL_WWAH_SET_MAC_POLL_CCA_WAIT_TIME_PAYLOAD_LEN ? \
(zb_uint8_t*)zb_buf_begin(data_buf) : NULL; \
if (req_ptr) \
{ \
ZB_MEMCPY(&(req), req_ptr, ZB_ZCL_WWAH_SET_MAC_POLL_CCA_WAIT_TIME_PAYLOAD_LEN); \
status = ZB_ZCL_PARSE_STATUS_SUCCESS; \
} \
else \
{ \
status = ZB_ZCL_PARSE_STATUS_FAILURE; \
} \
}
/** @brief Set Pending Network Update command structure */
typedef ZB_PACKED_PRE struct zb_zcl_wwah_set_pending_network_update_s
{
zb_uint8_t channel; /**< Channel */
zb_uint16_t pan_id; /**< PAN ID */
}
ZB_PACKED_STRUCT
zb_zcl_wwah_set_pending_network_update_t;
#define ZB_ZCL_WWAH_SET_PENDING_NETWORK_UPDATE_PAYLOAD_LEN (sizeof(zb_zcl_wwah_set_pending_network_update_t))
/*!
@brief Parses Set Pending Network Update command and fills data request structure.
@param data_buf - pointer to zb_buf_t buffer containing command request data
@param req - variable to save command request
@param status - success or not read parameters - ZB_TRUE or ZB_FALSE
@note data_buf buffer should contain command request payload without ZCL header.
*/
#define ZB_ZCL_WWAH_GET_SET_PENDING_NETWORK_UPDATE(data_buf, req, status) \
{ \
zb_zcl_wwah_set_pending_network_update_t *req_ptr = \
zb_buf_len(data_buf) >= ZB_ZCL_WWAH_SET_PENDING_NETWORK_UPDATE_PAYLOAD_LEN ? \
(zb_zcl_wwah_set_pending_network_update_t*)zb_buf_begin(data_buf) : NULL; \
if (req_ptr) \
{ \
ZB_MEMCPY(&(req), req_ptr, ZB_ZCL_WWAH_SET_PENDING_NETWORK_UPDATE_PAYLOAD_LEN); \
status = ZB_ZCL_PARSE_STATUS_SUCCESS; \
} \
else \
{ \
status = ZB_ZCL_PARSE_STATUS_FAILURE; \
} \
}
#define ZB_ZCL_WWAH_DEBUG_REPORT_QUERY_PAYLOAD_LEN (sizeof(zb_uint8_t))
/*!
@brief Parses Debug Report Query command and fills data request structure.
@param data_buf - pointer to zb_buf_t buffer containing command request data
@param req - variable to save command request
@param status - success or not read parameters - ZB_TRUE or ZB_FALSE
@note data_buf buffer should contain command request payload without ZCL header.
*/
#define ZB_ZCL_WWAH_GET_DEBUG_REPORT_QUERY(data_buf, req, status) \
{ \
zb_uint8_t *req_ptr = \
zb_buf_len(data_buf) >= ZB_ZCL_WWAH_DEBUG_REPORT_QUERY_PAYLOAD_LEN ? \
(zb_uint8_t*)zb_buf_begin(data_buf) : NULL; \
if (req_ptr) \
{ \
ZB_MEMCPY(&(req), req_ptr, ZB_ZCL_WWAH_DEBUG_REPORT_QUERY_PAYLOAD_LEN); \
status = ZB_ZCL_PARSE_STATUS_SUCCESS; \
} \
else \
{ \
status = ZB_ZCL_PARSE_STATUS_FAILURE; \
} \
}
#define ZB_ZCL_WWAH_SURVEY_BEACONS_PAYLOAD_LEN (sizeof(zb_uint8_t))
/*!
@brief Parses Survey Beacons command and fills data request structure.
@param data_buf - pointer to zb_buf_t buffer containing command request data
@param req - variable to save command request
@param status - success or not read parameters - ZB_TRUE or ZB_FALSE
@note data_buf buffer should contain command request payload without ZCL header.
*/
#define ZB_ZCL_WWAH_GET_SURVEY_BEACONS(data_buf, req, status) \
{ \
zb_uint8_t *req_ptr = \
zb_buf_len(data_buf) >= ZB_ZCL_WWAH_SURVEY_BEACONS_PAYLOAD_LEN ? \
(zb_uint8_t*)zb_buf_begin(data_buf) : NULL; \
if (req_ptr) \
{ \
ZB_MEMCPY(&(req), req_ptr, ZB_ZCL_WWAH_SURVEY_BEACONS_PAYLOAD_LEN); \
status = ZB_ZCL_PARSE_STATUS_SUCCESS; \
} \
else \
{ \
status = ZB_ZCL_PARSE_STATUS_FAILURE; \
} \
}
/** @brief APS Link Key Authorization Query Response command structure */
typedef ZB_PACKED_PRE struct zb_zcl_wwah_aps_link_key_authorization_query_response_s
{
zb_uint16_t cluster_id; /**< Cluster ID */
zb_uint8_t aps_link_key_authorization_status; /**< APS Link Key Authorization Status */
}
ZB_PACKED_STRUCT
zb_zcl_wwah_aps_link_key_authorization_query_response_t;
#define ZB_ZCL_WWAH_APS_LINK_KEY_AUTHORIZATION_QUERY_RESPONSE_PAYLOAD_LEN (sizeof(zb_zcl_wwah_aps_link_key_authorization_query_response_t))
/*!
@brief Parses APS Link Key Authorization Query Response command and fills data request structure.
@param data_buf - pointer to zb_buf_t buffer containing command request data
@param req - variable to save command request
@param status - success or not read parameters - ZB_TRUE or ZB_FALSE
@note data_buf buffer should contain command request payload without ZCL header.
*/
#define ZB_ZCL_WWAH_GET_APS_LINK_KEY_AUTHORIZATION_QUERY_RESPONSE(data_buf, req, status) \
{ \
zb_zcl_wwah_aps_link_key_authorization_query_response_t *req_ptr = \
zb_buf_len(data_buf) >= ZB_ZCL_WWAH_APS_LINK_KEY_AUTHORIZATION_QUERY_RESPONSE_PAYLOAD_LEN ? \
(zb_zcl_wwah_aps_link_key_authorization_query_response_t*)zb_buf_begin(data_buf) : NULL; \
if (req_ptr) \
{ \
ZB_MEMCPY(&(req), req_ptr, ZB_ZCL_WWAH_APS_LINK_KEY_AUTHORIZATION_QUERY_RESPONSE_PAYLOAD_LEN); \
status = ZB_ZCL_PARSE_STATUS_SUCCESS; \
} \
else \
{ \
status = ZB_ZCL_PARSE_STATUS_FAILURE; \
} \
}
/** @brief Short Address Change command structure */
typedef ZB_PACKED_PRE struct zb_zcl_wwah_short_address_change_s
{
zb_ieee_addr_t device_eui64; /**< DeviceEUI64 */
zb_uint16_t device_short; /**< DeviceShort */
}
ZB_PACKED_STRUCT
zb_zcl_wwah_short_address_change_t;
#define ZB_ZCL_WWAH_SHORT_ADDRESS_CHANGE_PAYLOAD_LEN (sizeof(zb_zcl_wwah_short_address_change_t))
/*!
@brief Parses Short Address Change command and fills data request structure.
@param data_buf - pointer to zb_buf_t buffer containing command request data
@param req - variable to save command request
@param status - success or not read parameters - ZB_TRUE or ZB_FALSE
@note data_buf buffer should contain command request payload without ZCL header.
*/
#define ZB_ZCL_WWAH_GET_SHORT_ADDRESS_CHANGE(data_buf, req, status) \
{ \
zb_zcl_wwah_short_address_change_t *req_ptr = \
zb_buf_len(data_buf) >= ZB_ZCL_WWAH_SHORT_ADDRESS_CHANGE_PAYLOAD_LEN ? \
(zb_zcl_wwah_short_address_change_t*)zb_buf_begin(data_buf) : NULL; \
if (req_ptr) \
{ \
ZB_MEMCPY(&(req), req_ptr, ZB_ZCL_WWAH_SHORT_ADDRESS_CHANGE_PAYLOAD_LEN); \
status = ZB_ZCL_PARSE_STATUS_SUCCESS; \
} \
else \
{ \
status = ZB_ZCL_PARSE_STATUS_FAILURE; \
} \
}
/** @brief Power Descriptor Change command structure */
typedef ZB_PACKED_PRE struct zb_zcl_wwah_power_descriptor_change_s
{
zb_uint32_t current_power_mode; /**< Current power mode */
zb_uint32_t available_power_sources; /**< Available power sources */
zb_uint32_t current_power_source; /**< Current power source */
zb_uint32_t current_power_source_level; /**< Current power source level */
}
ZB_PACKED_STRUCT
zb_zcl_wwah_power_descriptor_change_t;
/*!
@brief Parses Power Descriptor Change command and fills data request structure.
@param data_buf - pointer to zb_buf_t buffer containing command request data
@param req - variable to save command request
@param status - success or not read parameters - ZB_TRUE or ZB_FALSE
@note data_buf buffer should contain command request payload without ZCL header.
*/
#define ZB_ZCL_WWAH_GET_POWER_DESCRIPTOR_CHANGE(data_buf, req, status) \
{ \
zb_zcl_wwah_power_descriptor_change_t *req_ptr = \
zb_buf_len(data_buf) >= ZB_ZCL_WWAH_POWER_DESCRIPTOR_CHANGE_PAYLOAD_LEN ? \
(zb_zcl_wwah_power_descriptor_change_t*)zb_buf_begin(data_buf) : NULL; \
if (req_ptr) \
{ \
ZB_MEMCPY(&(req), req_ptr, sizeof(zb_zcl_wwah_power_descriptor_change_t)); \
status = ZB_ZCL_PARSE_STATUS_SUCCESS; \
} \
else \
{ \
status = ZB_ZCL_PARSE_STATUS_FAILURE; \
} \
}
/** @brief Powering On/Off Notification command structure */
typedef ZB_PACKED_PRE struct zb_zcl_wwah_powering_on_off_notification_s
{
zb_uint8_t power_notification_reason; /**< PowerNotificationReason */
zb_uint16_t manufacturer_id; /**< Manufacturer ID */
zb_uint8_t manufacturer_power_notification_reason_length; /**< Manufacturer Power Notification Reason Length */
zb_uint8_t *manufacturer_power_notification_reason; /**< Manufacturer Power Notification Reason */
}
ZB_PACKED_STRUCT
zb_zcl_wwah_powering_on_off_notification_t;
#define ZB_ZCL_WWAH_POWERING_ON_OFF_NOTIFICATION_PAYLOAD_LEN (sizeof(zb_uint8_t) + sizeof(zb_uint16_t)+ sizeof(zb_uint8_t))
/*!
@brief Parses Powering On/Off Notification command and fills data request structure.
@param data_buf - pointer to zb_buf_t buffer containing command request data
@param req - variable to save command request
@param status - success or not read parameters - ZB_TRUE or ZB_FALSE
@note data_buf buffer should contain command request payload without ZCL header.
*/
#define ZB_ZCL_WWAH_GET_POWERING_ON_OFF_NOTIFICATION(data_buf, req, status) \
{ \
zb_zcl_wwah_powering_on_off_notification_t *src_ptr = \
(zb_zcl_wwah_powering_on_off_notification_t*)zb_buf_begin((data_buf)); \
(status) = ZB_ZCL_PARSE_STATUS_FAILURE; \
if (zb_buf_len((data_buf)) >= ZB_ZCL_WWAH_POWERING_ON_OFF_NOTIFICATION_PAYLOAD_LEN) \
{ \
ZB_MEMCPY(&(req), req_ptr, ZB_ZCL_WWAH_POWERING_ON_OFF_NOTIFICATION_PAYLOAD_LEN); \
if (src_ptr->manufacturer_power_notification_reason_length) \
{ \
if (zb_buf_len((data_buf)) >= ZB_ZCL_WWAH_POWERING_ON_OFF_NOTIFICATION_PAYLOAD_LEN + \
src_ptr->manufacturer_power_notification_reason_length * sizeof(zb_uint8_t)) \
{ \
(req)->manufacturer_power_notification_reason = \
(zb_uint8_t*)(&(src_ptr->manufacturer_power_notification_reason)); \
(status) = ZB_ZCL_PARSE_STATUS_SUCCESS; \
} \
} \
else \
{ \
(status) = ZB_ZCL_PARSE_STATUS_SUCCESS; \
} \
} \
}
/** @brief New Debug Report Notification command structure */
typedef ZB_PACKED_PRE struct zb_zcl_wwah_new_debug_report_notification_s
{
zb_uint8_t debug_report_id; /**< Debug Report ID */
zb_uint32_t size_of_report; /**< Size of Report */
}
ZB_PACKED_STRUCT
zb_zcl_wwah_new_debug_report_notification_t;
#define ZB_ZCL_WWAH_NEW_DEBUG_REPORT_NOTIFICATION_PAYLOAD_LEN (sizeof(zb_zcl_wwah_new_debug_report_notification_t))
/*!
@brief Parses New Debug Report Notification command and fills data request structure.
@param data_buf - pointer to zb_buf_t buffer containing command request data
@param req - variable to save command request
@param status - success or not read parameters - ZB_TRUE or ZB_FALSE
@note data_buf buffer should contain command request payload without ZCL header.
*/
#define ZB_ZCL_WWAH_GET_NEW_DEBUG_REPORT_NOTIFICATION(data_buf, req, status) \
{ \
zb_zcl_wwah_new_debug_report_notification_t *req_ptr = \
zb_buf_len(data_buf) >= ZB_ZCL_WWAH_NEW_DEBUG_REPORT_NOTIFICATION_PAYLOAD_LEN ? \
(zb_zcl_wwah_new_debug_report_notification_t*)zb_buf_begin(data_buf) : NULL; \
if (req_ptr) \
{ \
ZB_MEMCPY(&(req), req_ptr, ZB_ZCL_WWAH_NEW_DEBUG_REPORT_NOTIFICATION_PAYLOAD_LEN); \
status = ZB_ZCL_PARSE_STATUS_SUCCESS; \
} \
else \
{ \
status = ZB_ZCL_PARSE_STATUS_FAILURE; \
} \
}
/** @brief Debug Report Query Response command structure */
typedef ZB_PACKED_PRE struct zb_zcl_wwah_debug_report_query_response_s
{
zb_uint8_t debug_report_id; /**< Debug Report ID */
zb_uint8_t *report_data; /**< Report data */
}
ZB_PACKED_STRUCT
zb_zcl_wwah_debug_report_query_response_t;
/*!
@brief Parses Debug Report Query Response command and fills data request structure.
@param data_buf - pointer to zb_buf_t buffer containing command request data
@param req - variable to save command request
@param status - success or not read parameters - ZB_TRUE or ZB_FALSE
@note data_buf buffer should contain command request payload without ZCL header.
*/
#define ZB_ZCL_WWAH_GET_DEBUG_REPORT_QUERY_RESPONSE(data_buf, req, status) \
{ \
zb_zcl_wwah_debug_report_query_response_t *src_ptr = \
(zb_zcl_wwah_debug_report_query_response_t*)zb_buf_begin((data_buf)); \
(status) = ZB_ZCL_PARSE_STATUS_FAILURE; \
if (zb_buf_len((data_buf)) > sizeof(zb_uint8_t)) \
{ \
(req)->debug_report_id = src_ptr->debug_report_id; \
(req)->report_data = (zb_uint8_t*)(&(src_ptr->report_data)); \
(status) = ZB_ZCL_PARSE_STATUS_SUCCESS; \
} \
}
/*! @brief Structure saved all WWAH attributes */
typedef struct zb_zcl_wwah_attr_s
{
zb_uint16_t cluster_revision;
zb_bool_t disable_ota_downgrades;
zb_bool_t mgmt_leave_without_rejoin_enabled;
zb_uint8_t nwk_retry_count;
zb_uint8_t mac_retry_count;
zb_bool_t router_check_in_enabled;
zb_bool_t touchlink_interpan_enabled;
zb_bool_t wwah_parent_classification_enabled;
zb_bool_t wwah_app_event_retry_enabled;
zb_uint8_t wwah_app_event_retry_queue_size;
zb_bool_t wwah_rejoin_enabled;
zb_uint8_t mac_poll_failure_wait_time;
zb_bool_t configuration_mode_enabled;
zb_uint8_t current_debug_report_id;
zb_bool_t tc_security_on_nwk_key_rotation_enabled;
zb_bool_t wwah_bad_parent_recovery_enabled;
zb_uint8_t pending_network_update_channel;
zb_uint16_t pending_network_update_panid;
zb_uint16_t ota_max_offline_duration;
} zb_zcl_wwah_attr_t;
extern zb_zcl_wwah_attr_t wwah_attr;
/** @internal @brief Declare attribute list for WWAH cluster
@param attr_list - attribute list name
*/
#define ZB_ZCL_DECLARE_WWAH_ATTRIB_LIST(attr_list) \
zb_zcl_attr_t attr_list [] = { \
{ \
ZB_ZCL_ATTR_GLOBAL_CLUSTER_REVISION_ID, \
ZB_ZCL_ATTR_TYPE_U16, \
ZB_ZCL_ATTR_ACCESS_READ_ONLY, \
(ZB_ZCL_NON_MANUFACTURER_SPECIFIC), \
(void*) &(wwah_attr.cluster_revision) \
}, \
ZB_ZCL_SET_ATTR_DESC(ZB_ZCL_ATTR_WWAH_DISABLE_OTA_DOWNGRADES_ID, &(wwah_attr.disable_ota_downgrades)) \
ZB_ZCL_SET_ATTR_DESC(ZB_ZCL_ATTR_WWAH_MGMT_LEAVE_WITHOUT_REJOIN_ENABLED_ID, &(wwah_attr.mgmt_leave_without_rejoin_enabled)) \
ZB_ZCL_SET_ATTR_DESC(ZB_ZCL_ATTR_WWAH_NWK_RETRY_COUNT_ID, &(wwah_attr.nwk_retry_count)) \
ZB_ZCL_SET_ATTR_DESC(ZB_ZCL_ATTR_WWAH_MAC_RETRY_COUNT_ID, &(wwah_attr.mac_retry_count)) \
ZB_ZCL_SET_ATTR_DESC(ZB_ZCL_ATTR_WWAH_ROUTER_CHECK_IN_ENABLED_ID, &(wwah_attr.router_check_in_enabled)) \
ZB_ZCL_SET_ATTR_DESC(ZB_ZCL_ATTR_WWAH_TOUCHLINK_INTERPAN_ENABLED_ID, &(wwah_attr.touchlink_interpan_enabled)) \
ZB_ZCL_SET_ATTR_DESC(ZB_ZCL_ATTR_WWAH_WWAH_PARENT_CLASSIFICATION_ENABLED_ID, &(wwah_attr.wwah_parent_classification_enabled)) \
ZB_ZCL_SET_ATTR_DESC(ZB_ZCL_ATTR_WWAH_WWAH_APP_EVENT_RETRY_ENABLED_ID, &(wwah_attr.wwah_app_event_retry_enabled)) \
ZB_ZCL_SET_ATTR_DESC(ZB_ZCL_ATTR_WWAH_WWAH_APP_EVENT_RETRY_QUEUE_SIZE_ID, &(wwah_attr.wwah_app_event_retry_queue_size)) \
ZB_ZCL_SET_ATTR_DESC(ZB_ZCL_ATTR_WWAH_WWAH_REJOIN_ENABLED_ID, &(wwah_attr.wwah_rejoin_enabled)) \
ZB_ZCL_SET_ATTR_DESC(ZB_ZCL_ATTR_WWAH_MAC_POLL_FAILURE_WAIT_TIME_ID, &(wwah_attr.mac_poll_failure_wait_time)) \
ZB_ZCL_SET_ATTR_DESC(ZB_ZCL_ATTR_WWAH_CONFIGURATION_MODE_ENABLED_ID, &(wwah_attr.configuration_mode_enabled)) \
ZB_ZCL_SET_ATTR_DESC(ZB_ZCL_ATTR_WWAH_CURRENT_DEBUG_REPORT_ID_ID, &(wwah_attr.current_debug_report_id)) \
ZB_ZCL_SET_ATTR_DESC(ZB_ZCL_ATTR_WWAH_TC_SECURITY_ON_NWK_KEY_ROTATION_ENABLED_ID, &(wwah_attr.tc_security_on_nwk_key_rotation_enabled)) \
ZB_ZCL_SET_ATTR_DESC(ZB_ZCL_ATTR_WWAH_WWAH_BAD_PARENT_RECOVERY_ENABLED_ID, &(wwah_attr.wwah_bad_parent_recovery_enabled)) \
ZB_ZCL_SET_ATTR_DESC(ZB_ZCL_ATTR_WWAH_PENDING_NETWORK_UPDATE_CHANNEL_ID, &(wwah_attr.pending_network_update_channel)) \
ZB_ZCL_SET_ATTR_DESC(ZB_ZCL_ATTR_WWAH_PENDING_NETWORK_UPDATE_PANID_ID, &(wwah_attr.pending_network_update_panid)) \
ZB_ZCL_SET_ATTR_DESC(ZB_ZCL_ATTR_WWAH_OTA_MAX_OFFLINE_DURATION_ID, &(wwah_attr.ota_max_offline_duration)) \
ZB_ZCL_FINISH_DECLARE_ATTRIB_LIST
/* Declare Cluster Revision Attribute */
#define ZB_ZCL_DECLARE_WWAH_CLIENT_ATTRIB_LIST(attr_list) \
ZB_ZCL_START_DECLARE_ATTRIB_LIST_CLUSTER_REVISION(attr_list, ZB_ZCL_WWAH) \
ZB_ZCL_FINISH_DECLARE_ATTRIB_LIST \
/*! @internal Number of attributes mandatory for reporting in WWAH cluster */
#define ZB_ZCL_WWAH_REPORT_ATTR_COUNT 0
/***************************** commands *****************************/
/** @internal Structure for beaconSurvey data type
*/
/**
* @brief Determine a parent choose priority (WWAH-Requirements C-20)
*
* End Devices examine all beacons in the Good Link Quality group
* (if received beacon with an RSSI above @see minRssiForReceivingPackets
* +30 dbm) and choose the parent with highest parent priority, as shown below.
* If no suitable parents exist in the Good Link Quality group, then the End
* Device shall examine all beacons in the Marginal Link Quality group.
*/
typedef enum zb_zcl_wwah_parent_priority_e
{
/*! Invalid value for parent priority */
ZB_ZCL_WWAH_PARENT_PRIORITY_INVALID = 0,
/*! 0b00 - no TC connectivity and Short Uptime or no WWAH parent */
ZB_ZCL_WWAH_PARENT_PRIORITY_VERY_LOW = 1,
/*! 0b01 - no TC connectivity and Long Uptime */
ZB_ZCL_WWAH_PARENT_PRIORITY_LOW = 2,
/*! 0b10 - TC connectivity and Short Uptime */
ZB_ZCL_WWAH_PARENT_PRIORITY_HIGH = 3,
/*! 0b11 - TC connectivity and Long Uptime */
ZB_ZCL_WWAH_PARENT_PRIORITY_VERY_HIGH = 4
}
zb_zcl_wwah_parent_priority_t;
typedef ZB_PACKED_PRE struct zb_zcl_wwah_beacon_survey_s
{
/*! The DeviceShort field contains the 16 bit short address of the beaconing device. */
zb_uint16_t device_short;
/*! This is the RSSI of the beacon, expressed in dBm. */
zb_int8_t rssi;
/*! This is the parent classification mask. */
zb_uint8_t classification_mask;
} ZB_PACKED_STRUCT zb_zcl_wwah_beacon_survey_t;
/*! @brief The PowerNotificationReason field is an enum containing all possible reasons for the power notification.
*/
enum zb_zcl_wwah_power_notification_reason_e
{
/*! Unknown value */
ZB_ZCL_WWAH_POWER_NOTIFICATION_REASON_UNKNOWN = 0x00,
/*! Battery value */
ZB_ZCL_WWAH_POWER_NOTIFICATION_REASON_BATTERY = 0x01,
/*! Brownout value */
ZB_ZCL_WWAH_POWER_NOTIFICATION_REASON_BROWNOUT = 0x02,
/*! Watchdog value */
ZB_ZCL_WWAH_POWER_NOTIFICATION_REASON_WATCHDOG = 0x03,
/*! Reset Pin value */
ZB_ZCL_WWAH_POWER_NOTIFICATION_REASON_RESET_PIN = 0x04,
/*! Memory/HW Fault value */
ZB_ZCL_WWAH_POWER_NOTIFICATION_REASON_MEMORY_OR_HW_FAULT = 0x05,
/*! Software Exception value */
ZB_ZCL_WWAH_POWER_NOTIFICATION_REASON_SOFTWARE_EXCEPTION = 0x06,
/*! OTA / Bootload Success value */
ZB_ZCL_WWAH_POWER_NOTIFICATION_REASON_OTA_OR_BOOTLOAD_SUCCESS = 0x07,
/*! Software Reset value */
ZB_ZCL_WWAH_POWER_NOTIFICATION_REASON_SOFTWARE_RESET = 0x08,
/*! Power Button value */
ZB_ZCL_WWAH_POWER_NOTIFICATION_REASON_POWER_BUTTON = 0x09,
/*! Temperature value */
ZB_ZCL_WWAH_POWER_NOTIFICATION_REASON_TEMPERATURE = 0x0A,
/*! Bootload Failure value */
ZB_ZCL_WWAH_POWER_NOTIFICATION_REASON_BOOTLOAD_FAILURE = 0x0B,
};
/*! @brief The Enrollment Mode field is an enum containing the possible enrollment methods for an IAS Zone server.
*/
enum zb_zcl_wwah_enrollment_mode_e
{
/*! Trip-to-pair value */
ZB_ZCL_WWAH_ENROLLMENT_MODE_TRIP_TO_PAIR = 0x00,
/*! Auto-Enroll-Response value */
ZB_ZCL_WWAH_ENROLLMENT_MODE_AUTO_ENROLL_RESPONSE = 0x01,
/*! Auto-Enroll-Request value */
ZB_ZCL_WWAH_ENROLLMENT_MODE_AUTO_ENROLL_REQUEST = 0x02
};
/*! @}
@endcond */ /* WWAH cluster internals */
/*! @} */ /* ZCL WWAH cluster definitions */
/*! @brief Add cluster_id to Enable APS Link Key Authorization command
@param ptr - [in/out] (zb_uint8_t*) current position
@param cluster_id - Cluster ID value
*/
#define ZB_ZCL_WWAH_SEND_ENABLE_APS_LINK_KEY_AUTHORIZATION_ADD(ptr, cluster_id) \
{ \
ZB_ZCL_PACKET_PUT_DATA16(ptr, (cluster_id)); \
}
/*! @brief Start Enable APS Link Key Authorization command
@param buffer - to put packet to
@param def_resp - enable/disable default response
@param number_of_clusters_to_exempt - Number of Clusters To Exempt value
@param ptr - [out] (zb_uint8_t*) current position for ZB_ZCL_WWAH_SEND_ENABLE_APS_LINK_KEY_AUTHORIZATION_ADD
*/
#define ZB_ZCL_WWAH_SEND_ENABLE_APS_LINK_KEY_AUTHORIZATION_START( \
buffer, def_resp, number_of_clusters_to_exempt, ptr) \
{ \
ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_ENABLE_APS_LINK_KEY_AUTHORIZATION_ID); \
ZB_ZCL_PACKET_PUT_DATA8(ptr, (number_of_clusters_to_exempt)); \
}
/*! @brief End form Enable APS Link Key Authorization command
@param ptr - (zb_uint8_t*) current position
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param cb - callback for getting command send status
*/
#define ZB_ZCL_WWAH_SEND_ENABLE_APS_LINK_KEY_AUTHORIZATION_END( \
ptr, buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, cb) \
{ \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Start Disable APS Link Key Authorization command
@param buffer - to put packet to
@param def_resp - enable/disable default response
@param number_of_clusters_to_exempt - Number of Clusters To Exempt value
@param ptr - [out] (zb_uint8_t*) current position for ZB_ZCL_WWAH_SEND_DISABLE_APS_LINK_KEY_AUTHORIZATION_ADD
*/
#define ZB_ZCL_WWAH_SEND_DISABLE_APS_LINK_KEY_AUTHORIZATION_START( \
buffer, def_resp, number_of_clusters_to_exempt, ptr) \
{ \
ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_DISABLE_APS_LINK_KEY_AUTHORIZATION_ID); \
ZB_ZCL_PACKET_PUT_DATA8(ptr, (number_of_clusters_to_exempt)); \
}
/*! @brief Add cluster_id to Disable APS Link Key Authorization command
@param ptr - [in/out] (zb_uint8_t*) current position
@param cluster_id - Cluster ID value
*/
#define ZB_ZCL_WWAH_SEND_DISABLE_APS_LINK_KEY_AUTHORIZATION_ADD(ptr, cluster_id) \
{ \
ZB_ZCL_PACKET_PUT_DATA16(ptr, (cluster_id)); \
}
/*! @brief End form Disable APS Link Key Authorization command
@param ptr - (zb_uint8_t*) current position
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param cb - callback for getting command send status
*/
#define ZB_ZCL_WWAH_SEND_DISABLE_APS_LINK_KEY_AUTHORIZATION_END( \
ptr, buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, cb) \
{ \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send APS Link Key Authorization Query command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
@param cluster_id - Cluster ID value*/
#define ZB_ZCL_WWAH_SEND_APS_LINK_KEY_AUTHORIZATION_QUERY( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb, cluster_id) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_APS_LINK_KEY_AUTHORIZATION_QUERY_ID); \
ZB_ZCL_PACKET_PUT_DATA16(ptr, (cluster_id)); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Request New APS Link Key command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
*/
#define ZB_ZCL_WWAH_SEND_REQUEST_NEW_APS_LINK_KEY( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_REQUEST_NEW_APS_LINK_KEY_ID); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Enable WWAH App Event Retry Algorithm command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
@param first_backoff_time_in_seconds - First Backoff Time In Seconds value
@param backoff_sequence_common_ratio - Backoff Sequence Common Ratio value
@param max_backoff_time_in_seconds - Max Backoff Time In Seconds value
@param max_re_delivery_attempts - Max Re_Delivery Attempts value*/
#define ZB_ZCL_WWAH_SEND_ENABLE_WWAH_APP_EVENT_RETRY_ALGORITHM( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb, \
first_backoff_time_in_seconds, backoff_sequence_common_ratio, \
max_backoff_time_in_seconds, max_re_delivery_attempts) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_ENABLE_WWAH_APP_EVENT_RETRY_ALGORITHM_ID); \
ZB_ZCL_PACKET_PUT_DATA8(ptr, (first_backoff_time_in_seconds)); \
ZB_ZCL_PACKET_PUT_DATA8(ptr, (backoff_sequence_common_ratio)); \
ZB_ZCL_PACKET_PUT_DATA32(ptr, (max_backoff_time_in_seconds)); \
ZB_ZCL_PACKET_PUT_DATA8(ptr, (max_re_delivery_attempts)); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Disable WWAH App Event Retry Algorithm command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
*/
#define ZB_ZCL_WWAH_SEND_DISABLE_WWAH_APP_EVENT_RETRY_ALGORITHM( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_DISABLE_WWAH_APP_EVENT_RETRY_ALGORITHM_ID); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Request Time command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
*/
#define ZB_ZCL_WWAH_SEND_REQUEST_TIME( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_REQUEST_TIME_ID); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Enable WWAH Rejoin Algorithm command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
@param fast_rejoin_timeout_in_seconds - Fast Rejoin Timeout In Seconds value
@param duration_between_each_rejoin_in_seconds - Duration Between Each Rejoin In Seconds value
@param fast_rejoin_first_backoff_in_seconds - Fast Rejoin First Backoff In Seconds value
@param max_backoff_time_in_seconds - Max Backoff Time In Seconds value
@param max_backoff_iterations - max backoff iterations*/
#define ZB_ZCL_WWAH_SEND_ENABLE_WWAH_REJOIN_ALGORITHM( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb, \
fast_rejoin_timeout_in_seconds, duration_between_each_rejoin_in_seconds, \
fast_rejoin_first_backoff_in_seconds, max_backoff_time_in_seconds, \
max_backoff_iterations) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_ENABLE_WWAH_REJOIN_ALGORITHM_ID); \
ZB_ZCL_PACKET_PUT_DATA16(ptr, (fast_rejoin_timeout_in_seconds)); \
ZB_ZCL_PACKET_PUT_DATA16(ptr, (duration_between_each_rejoin_in_seconds)); \
ZB_ZCL_PACKET_PUT_DATA16(ptr, (fast_rejoin_first_backoff_in_seconds)); \
ZB_ZCL_PACKET_PUT_DATA16(ptr, (max_backoff_time_in_seconds)); \
ZB_ZCL_PACKET_PUT_DATA16(ptr, (max_backoff_iterations)); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Disable WWAH Rejoin Algorithm command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
*/
#define ZB_ZCL_WWAH_SEND_DISABLE_WWAH_REJOIN_ALGORITHM( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_DISABLE_WWAH_REJOIN_ALGORITHM_ID); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Set IAS Zone Enrollment Method command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
@param enrollment_mode - Enrollment Mode value*/
#define ZB_ZCL_WWAH_SEND_SET_IAS_ZONE_ENROLLMENT_METHOD( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb, enrollment_mode) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_SET_IAS_ZONE_ENROLLMENT_METHOD_ID); \
ZB_ZCL_PACKET_PUT_DATA8(ptr, (enrollment_mode)); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Clear Binding Table command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
*/
#define ZB_ZCL_WWAH_SEND_CLEAR_BINDING_TABLE( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_CLEAR_BINDING_TABLE_ID); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Enable Periodic Router Check Ins command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
@param check_in_interval - Check_In Interval value*/
#define ZB_ZCL_WWAH_SEND_ENABLE_PERIODIC_ROUTER_CHECK_INS( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb, check_in_interval) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_ENABLE_PERIODIC_ROUTER_CHECK_INS_ID); \
ZB_ZCL_PACKET_PUT_DATA16(ptr, (check_in_interval)); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Disable Periodic Router Check Ins command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
*/
#define ZB_ZCL_WWAH_SEND_DISABLE_PERIODIC_ROUTER_CHECK_INS( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_DISABLE_PERIODIC_ROUTER_CHECK_INS_ID); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Set MAC Poll CCA Wait Time command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
@param wait_time - Wait Time value*/
#define ZB_ZCL_WWAH_SEND_SET_MAC_POLL_CCA_WAIT_TIME( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb, wait_time) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_SET_MAC_POLL_CCA_WAIT_TIME_ID); \
ZB_ZCL_PACKET_PUT_DATA8(ptr, (wait_time)); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Set Pending Network Update command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
@param channel - Channel value
@param pan_id - PAN ID value*/
#define ZB_ZCL_WWAH_SEND_SET_PENDING_NETWORK_UPDATE( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb, channel, pan_id) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_SET_PENDING_NETWORK_UPDATE_ID); \
ZB_ZCL_PACKET_PUT_DATA8(ptr, (channel)); \
ZB_ZCL_PACKET_PUT_DATA16(ptr, (pan_id)); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Add cluster_id to Require APS ACKs on Unicasts command
@param ptr - [in/out] (zb_uint8_t*) current position
@param cluster_id - Cluster ID value
*/
#define ZB_ZCL_WWAH_SEND_REQUIRE_APS_ACKS_ON_UNICASTS_ADD(ptr, cluster_id) \
{ \
ZB_ZCL_PACKET_PUT_DATA16(ptr, (cluster_id)); \
}
/*! @brief Start Require APS ACKs on Unicasts command
@param buffer - to put packet to
@param def_resp - enable/disable default response
@param number_of_clusters_to_exempt - Number of Clusters to Exempt value
@param ptr - [out] (zb_uint8_t*) current position for ZB_ZCL_WWAH_SEND_REQUIRE_APS_ACKS_ON_UNICASTS_ADD
*/
#define ZB_ZCL_WWAH_SEND_REQUIRE_APS_ACKS_ON_UNICASTS_START( \
buffer, def_resp, number_of_clusters_to_exempt, ptr) \
{ \
ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_REQUIRE_APS_ACKS_ON_UNICASTS_ID); \
ZB_ZCL_PACKET_PUT_DATA8(ptr, (number_of_clusters_to_exempt)); \
}
/*! @brief End form Require APS ACKs on Unicasts command
@param ptr - (zb_uint8_t*) current position
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param cb - callback for getting command send status
*/
#define ZB_ZCL_WWAH_SEND_REQUIRE_APS_ACKS_ON_UNICASTS_END( \
ptr, buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, cb) \
{ \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Remove APS ACKs on Unicasts Requirement command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
*/
#define ZB_ZCL_WWAH_SEND_REMOVE_APS_ACKS_ON_UNICASTS_REQUIREMENT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_REMOVE_APS_ACKS_ON_UNICASTS_REQUIREMENT_ID); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send APS ACK Requirement Query command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
*/
#define ZB_ZCL_WWAH_SEND_APS_ACK_REQUIREMENT_QUERY( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_APS_ACK_REQUIREMENT_QUERY_ID); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Debug Report Query command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
@param debug_report_id - Debug Report ID value*/
#define ZB_ZCL_WWAH_SEND_DEBUG_REPORT_QUERY( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb, debug_report_id) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_DEBUG_REPORT_QUERY_ID); \
ZB_ZCL_PACKET_PUT_DATA8(ptr, (debug_report_id)); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Survey Beacons command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
@param standard_beacons - Standard Beacons value*/
#define ZB_ZCL_WWAH_SEND_SURVEY_BEACONS( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb, standard_beacons) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_SURVEY_BEACONS_ID); \
ZB_ZCL_PACKET_PUT_DATA8(ptr, (standard_beacons)); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Disable OTA Downgrades command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
*/
#define ZB_ZCL_WWAH_SEND_DISABLE_OTA_DOWNGRADES( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_DISABLE_OTA_DOWNGRADES_ID); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Disable MGMT Leave Without Rejoin command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
*/
#define ZB_ZCL_WWAH_SEND_DISABLE_MGMT_LEAVE_WITHOUT_REJOIN( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_DISABLE_MGMT_LEAVE_WITHOUT_REJOIN_ID); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Disable Touchlink Interpan Message Support command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
*/
#define ZB_ZCL_WWAH_SEND_DISABLE_TOUCHLINK_INTERPAN_MESSAGE_SUPPORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_DISABLE_TOUCHLINK_INTERPAN_MESSAGE_SUPPORT_ID); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Enable WWAH Parent Classification command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
*/
#define ZB_ZCL_WWAH_SEND_ENABLE_WWAH_PARENT_CLASSIFICATION( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_ENABLE_WWAH_PARENT_CLASSIFICATION_ID); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Disable WWAH Parent Classification command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
*/
#define ZB_ZCL_WWAH_SEND_DISABLE_WWAH_PARENT_CLASSIFICATION( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_DISABLE_WWAH_PARENT_CLASSIFICATION_ID); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Enable TC Security On NWK Key Rotation command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
*/
#define ZB_ZCL_WWAH_SEND_ENABLE_TC_SECURITY_ON_NWK_KEY_ROTATION( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_ENABLE_TC_SECURITY_ON_NWK_KEY_ROTATION_ID); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Enable WWAH Bad Parent Recovery command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
*/
#define ZB_ZCL_WWAH_SEND_ENABLE_WWAH_BAD_PARENT_RECOVERY( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_ENABLE_WWAH_BAD_PARENT_RECOVERY_ID); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Disable WWAH Bad Parent Recovery command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
*/
#define ZB_ZCL_WWAH_SEND_DISABLE_WWAH_BAD_PARENT_RECOVERY( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_DISABLE_WWAH_BAD_PARENT_RECOVERY_ID); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Enable Configuration Mode command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
*/
#define ZB_ZCL_WWAH_SEND_ENABLE_CONFIGURATION_MODE( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_ENABLE_CONFIGURATION_MODE_ID); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Disable Configuration Mode command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
*/
#define ZB_ZCL_WWAH_SEND_DISABLE_CONFIGURATION_MODE( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_DISABLE_CONFIGURATION_MODE_ID); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Add cluster_id to Use Trust Center for Cluster command
@param ptr - [in/out] (zb_uint8_t*) current position
@param cluster_id - Cluster ID value
*/
#define ZB_ZCL_WWAH_SEND_USE_TRUST_CENTER_FOR_CLUSTER_ADD(ptr, cluster_id) \
{ \
ZB_ZCL_PACKET_PUT_DATA16(ptr, (cluster_id)); \
}
/*! @brief Start Use Trust Center for Cluster command
@param buffer - to put packet to
@param def_resp - enable/disable default response
@param number_of_clusters - Number of Clusters value
@param ptr - [out] (zb_uint8_t*) current position for ZB_ZCL_WWAH_SEND_USE_TRUST_CENTER_FOR_CLUSTER_ADD
*/
#define ZB_ZCL_WWAH_SEND_USE_TRUST_CENTER_FOR_CLUSTER_START( \
buffer, def_resp, number_of_clusters, ptr) \
{ \
ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_USE_TRUST_CENTER_FOR_CLUSTER_ID); \
ZB_ZCL_PACKET_PUT_DATA8(ptr, (number_of_clusters)); \
}
/*! @brief End form Use Trust Center for Cluster command
@param ptr - (zb_uint8_t*) current position
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param cb - callback for getting command send status
*/
#define ZB_ZCL_WWAH_SEND_USE_TRUST_CENTER_FOR_CLUSTER_END( \
ptr, buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, cb) \
{ \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Trust Center for Cluster Server Query command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param def_resp - enable/disable default response
@param cb - callback for getting command send status
*/
#define ZB_ZCL_WWAH_SEND_TRUST_CENTER_FOR_CLUSTER_SERVER_QUERY( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, def_resp, cb) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_REQ_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_SRV, ZB_ZCL_MANUFACTURER_SPECIFIC, def_resp); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_TRUST_CENTER_FOR_CLUSTER_SERVER_QUERY_ID); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send APS Link Key Authorization Query Response command
@param buffer - to put packet to
@param seq - sequence
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param cb - callback for getting command send status
@param cluster_id - Cluster ID value
@param aps_link_key_authorization_status - APS Link Key Authorization Status value*/
#define ZB_ZCL_WWAH_SEND_APS_LINK_KEY_AUTHORIZATION_QUERY_RESPONSE( \
buffer, seq, addr, dst_addr_mode, dst_ep, ep, prfl_id, cb, cluster_id, \
aps_link_key_authorization_status) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_RESP_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_CLI, ZB_ZCL_MANUFACTURER_SPECIFIC); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, (seq), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_APS_LINK_KEY_AUTHORIZATION_QUERY_RESPONSE_ID); \
ZB_ZCL_PACKET_PUT_DATA16(ptr, (cluster_id)); \
ZB_ZCL_PACKET_PUT_DATA8(ptr, (aps_link_key_authorization_status)); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Powering Off Notification command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param cb - callback for getting command send status
@param power_notification_reason - PowerNotificationReason value
@param manufacturer_id - Manufacturer ID value
@param manufacturer_power_notification_reason_length - Manufacturer Power Notification Reason Length value
@param manufacturer_power_notification_reason - Manufacturer Power Notification Reason value*/
#define ZB_ZCL_WWAH_SEND_POWERING_OFF_NOTIFICATION( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, cb, \
power_notification_reason, manufacturer_id, \
manufacturer_power_notification_reason_length, \
manufacturer_power_notification_reason) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_RESP_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_CLI, ZB_ZCL_MANUFACTURER_SPECIFIC); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_POWERING_OFF_NOTIFICATION_ID); \
ZB_ZCL_PACKET_PUT_DATA8(ptr, (power_notification_reason)); \
ZB_ZCL_PACKET_PUT_DATA16(ptr, (manufacturer_id)); \
ZB_ZCL_PACKET_PUT_DATA8(ptr, (manufacturer_power_notification_reason_length)); \
ZB_ZCL_PACKET_PUT_DATA_N(ptr, (manufacturer_power_notification_reason), \
(manufacturer_power_notification_reason_length)); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Powering On Notification command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param cb - callback for getting command send status
@param power_notification_reason - PowerNotificationReason value
@param manufacturer_id - Manufacturer ID value
@param manufacturer_power_notification_reason_length - Manufacturer Power Notification Reason Length value
@param manufacturer_power_notification_reason - Manufacturer Power Notification Reason value*/
#define ZB_ZCL_WWAH_SEND_POWERING_ON_NOTIFICATION( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, cb, \
power_notification_reason, manufacturer_id, \
manufacturer_power_notification_reason_length, \
manufacturer_power_notification_reason) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_RESP_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_CLI, ZB_ZCL_MANUFACTURER_SPECIFIC); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_POWERING_ON_NOTIFICATION_ID); \
ZB_ZCL_PACKET_PUT_DATA8(ptr, (power_notification_reason)); \
ZB_ZCL_PACKET_PUT_DATA16(ptr, (manufacturer_id)); \
ZB_ZCL_PACKET_PUT_DATA8(ptr, (manufacturer_power_notification_reason_length)); \
ZB_ZCL_PACKET_PUT_DATA_N(ptr, (manufacturer_power_notification_reason), \
(manufacturer_power_notification_reason_length)); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Short Address Change command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param cb - callback for getting command send status
@param device_eui64 - DeviceEUI64 value
@param device_short - DeviceShort value*/
#define ZB_ZCL_WWAH_SEND_SHORT_ADDRESS_CHANGE( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, cb, device_eui64, device_short) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_RESP_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_CLI, ZB_ZCL_MANUFACTURER_SPECIFIC); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_SHORT_ADDRESS_CHANGE_ID); \
ZB_ZCL_PACKET_PUT_DATA64(ptr, (device_eui64)); \
ZB_ZCL_PACKET_PUT_DATA16(ptr, (device_short)); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Add cluster_id to APS ACK Requirement Query Response command
@param ptr - [in/out] (zb_uint8_t*) current position
@param cluster_id - Cluster ID value
*/
#define ZB_ZCL_WWAH_SEND_APS_ACK_REQUIREMENT_QUERY_RESPONSE_ADD(ptr, cluster_id) \
{ \
ZB_ZCL_PACKET_PUT_DATA16(ptr, (cluster_id)); \
}
/*! @brief Start APS ACK Requirement Query Response command
@param buffer - to put packet to
@param seq - sequence
@param number_of_clusters_to_exempt - Number of Clusters to Exempt value
@param ptr - [out] (zb_uint8_t*) current position for ZB_ZCL_WWAH_SEND_APS_ACK_REQUIREMENT_QUERY_RESPONSE_ADD
*/
#define ZB_ZCL_WWAH_SEND_APS_ACK_REQUIREMENT_QUERY_RESPONSE_START( \
buffer, seq, number_of_clusters_to_exempt, ptr) \
{ \
(ptr) = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_RESP_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_CLI, ZB_ZCL_MANUFACTURER_SPECIFIC); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, (seq), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_APS_ACK_REQUIREMENT_QUERY_RESPONSE_ID); \
ZB_ZCL_PACKET_PUT_DATA8(ptr, (number_of_clusters_to_exempt)); \
}
/*! @brief End form APS ACK Requirement Query Response command
@param ptr - (zb_uint8_t*) current position
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
*/
#define ZB_ZCL_WWAH_SEND_APS_ACK_REQUIREMENT_QUERY_RESPONSE_END( \
ptr, buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id) \
{ \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, NULL); \
}
/*! @brief Send Power Descriptor Change command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param cb - callback for getting command send status
@param node_power_desc - Node Power Descriptor value */
#define ZB_ZCL_WWAH_SEND_POWER_DESCRIPTOR_CHANGE( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, cb, node_power_desc) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_RESP_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_CLI, ZB_ZCL_MANUFACTURER_SPECIFIC); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_POWER_DESCRIPTOR_CHANGE_ID); \
ZB_ZCL_PACKET_PUT_DATA16(ptr, (node_power_desc)); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send New Debug Report Notification command
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param cb - callback for getting command send status
@param debug_report_id - Debug Report ID value
@param size_of_report - Size of Report value*/
#define ZB_ZCL_WWAH_SEND_NEW_DEBUG_REPORT_NOTIFICATION( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, cb, debug_report_id, \
size_of_report) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_RESP_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_CLI, ZB_ZCL_MANUFACTURER_SPECIFIC); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, ZB_ZCL_GET_SEQ_NUM(), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_NEW_DEBUG_REPORT_NOTIFICATION_ID); \
ZB_ZCL_PACKET_PUT_DATA8(ptr, (debug_report_id)); \
ZB_ZCL_PACKET_PUT_DATA32(ptr, (size_of_report)); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Send Debug Report Query Response command
@param buffer - to put packet to
@param seq - sequence
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
@param cb - callback for getting command send status
@param debug_report_id - Debug Report ID value
@param report_data - Report data value
@param size_of_report - Report data size */
#define ZB_ZCL_WWAH_SEND_DEBUG_REPORT_QUERY_RESPONSE( \
buffer, seq, addr, dst_addr_mode, dst_ep, ep, prfl_id, cb, debug_report_id, report_data, \
size_of_report) \
{ \
zb_uint8_t* ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_RESP_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_CLI, ZB_ZCL_MANUFACTURER_SPECIFIC); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, (seq), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_DEBUG_REPORT_QUERY_RESPONSE_ID); \
ZB_ZCL_PACKET_PUT_DATA8(ptr, (debug_report_id)); \
ZB_ZCL_PACKET_PUT_DATA_N(ptr, (report_data), (size_of_report)); \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, cb); \
}
/*! @brief Add cluster_id to Trust Center for Cluster Server Query Response command
@param ptr - [in/out] (zb_uint8_t*) current position
@param cluster_id - Cluster ID value
*/
#define ZB_ZCL_WWAH_SEND_TRUST_CENTER_FOR_CLUSTER_SERVER_QUERY_RESPONSE_ADD(ptr, cluster_id) \
{ \
ZB_ZCL_PACKET_PUT_DATA16(ptr, (cluster_id)); \
}
/*! @brief Start Trust Center for Cluster Server Query Response command
@param buffer - to put packet to
@param seq - sequence
@param number_of_clusters - Number of Clusters value
@param ptr - [out] (zb_uint8_t*) current position for ZB_ZCL_WWAH_SEND_TRUST_CENTER_FOR_CLUSTER_SERVER_QUERY_RESPONSE_ADD
*/
#define ZB_ZCL_WWAH_SEND_TRUST_CENTER_FOR_CLUSTER_SERVER_QUERY_RESPONSE_START( \
buffer, seq, number_of_clusters, ptr) \
{ \
(ptr) = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_RESP_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_CLI, ZB_ZCL_MANUFACTURER_SPECIFIC); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, (seq), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_TRUST_CENTER_FOR_CLUSTER_SERVER_QUERY_RESPONSE_ID); \
ZB_ZCL_PACKET_PUT_DATA8(ptr, (number_of_clusters)); \
}
/*! @brief End form Trust Center for Cluster Server Query Response command
@param ptr - (zb_uint8_t*) current position
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
*/
#define ZB_ZCL_WWAH_SEND_TRUST_CENTER_FOR_CLUSTER_SERVER_QUERY_RESPONSE_END( \
ptr, buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id) \
{ \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, NULL); \
}
/*! @brief Start Survey Beacons Response command
@param buffer - to put packet to
@param seq - sequence
*/
#define ZB_ZCL_WWAH_SEND_SURVEY_BEACONS_RESPONSE_START( \
buffer, seq) \
{ \
zb_uint8_t *ptr = zb_buf_begin(buffer); \
ZB_ZCL_CONSTRUCT_SPECIFIC_COMMAND_RESP_FRAME_CONTROL_A(ptr, \
ZB_ZCL_FRAME_DIRECTION_TO_CLI, ZB_ZCL_MANUFACTURER_SPECIFIC); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(ptr, (seq), \
ZB_ZCL_MANUFACTURER_SPECIFIC, WWAH_MANUFACTURER_CODE, \
ZB_ZCL_CMD_WWAH_SURVEY_BEACONS_RESPONSE_ID); \
}
/*! @brief Add beacons number and beacon survey info to Survey Beacons Response command
@param ptr - [in/out] (zb_uint8_t*) current position
@param src - source pointer to the first Beacon value
@param num - number of beacons
*/
#define ZB_ZCL_WWAH_SEND_SURVEY_BEACONS_RESPONSE_ADD_ALL(ptr, src, num) \
{ \
ZB_ZCL_PACKET_PUT_DATA8((ptr), (num)); \
ZB_MEMMOVE((ptr), (src), ((num) * sizeof(zb_zcl_wwah_beacon_survey_t))); \
(ptr) += ((num) * sizeof(zb_zcl_wwah_beacon_survey_t)); \
}
/*! @brief End form Survey Beacons Response command
@param ptr - (zb_uint8_t*) current position
@param buffer - to put packet to
@param addr - address to send packet to
@param dst_addr_mode - addressing mode
@param dst_ep - destination endpoint
@param ep - sending endpoint
@param prfl_id - profile identifier
*/
#define ZB_ZCL_WWAH_SEND_SURVEY_BEACONS_RESPONSE_END( \
ptr, buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id) \
{ \
ZB_ZCL_FINISH_PACKET(buffer, ptr) \
ZB_ZCL_SEND_COMMAND_SHORT( \
buffer, addr, dst_addr_mode, dst_ep, ep, prfl_id, ZB_ZCL_CLUSTER_ID_WWAH, NULL); \
}
zb_bool_t zb_is_wwah_server(void);
void wwah_post_commissioning_actions(void);
zb_bool_t zb_zcl_wwah_check_new_channel(zb_uint32_t new_channel_mask);
zb_bool_t zb_zcl_wwah_check_new_panid(zb_uint16_t new_panid);
zb_uint8_t zb_zcl_wwah_mac_poll_cca_retry_count(void);
zb_time_t zb_zcl_wwah_mac_poll_failure_wait_time(void);
zb_bool_t zb_zcl_wwah_check_if_forced_to_use_tc(zb_uint16_t cluster_id);
zb_bool_t zb_zcl_wwah_check_zdo_command(zb_apsde_data_indication_t *di);
zb_bool_t zb_zcl_wwah_check_if_aps_ack_needed(zb_uint16_t cluster_id);
zb_bool_t zb_zcl_wwah_check_if_aps_link_key_authorization_needed(zb_uint16_t cluster_id);
zb_bool_t zb_zcl_wwah_check_cluster_permission(zb_uint16_t nwk_addr, zb_uint16_t cluster_id);
zb_bool_t zb_zcl_wwah_check_if_leave_without_rejoin_allowed(void);
zb_bool_t zb_zcl_wwah_check_if_wwah_rejoin_enabled(void);
void zb_zcl_wwah_schedule_send_power_descriptor_change(void);
zb_bool_t zb_zcl_wwah_check_zdo_command(zb_apsde_data_indication_t *di);
zb_bool_t zb_zcl_wwah_check_if_interpan_supported(void);
zb_bool_t zb_zcl_wwah_check_if_downgrade_disabled(void);
zb_bool_t zb_zcl_wwah_periodic_checkin_read_attr_handle(zb_uint8_t param);
zb_bool_t zb_zcl_wwah_periodic_checkin_block_zcl_cmd(zb_zcl_parsed_hdr_t *cmd_info);
void zb_zcl_wwah_periodic_checkin_tc_poll(zb_uint8_t param);
void zb_zcl_wwah_periodic_checkin_match_desc_req(zb_uint8_t param);
void zb_zcl_wwah_periodic_checkin_match_desc_req_delayed(zb_uint8_t param);
void zb_zcl_wwah_stop_periodic_checkin(void);
void zb_zcl_wwah_start_periodic_checkin(void);
zb_bool_t zb_zcl_wwah_check_src_addr_for_cluster(zb_uint16_t short_addr, zb_uint16_t cluster_id);
void zb_zcl_wwah_set_wwah_behavior(zb_uint8_t behavior);
void zb_zcl_wwah_stop_bad_parent_recovery(void);
void zb_zcl_wwah_start_bad_parent_recovery(void);
#ifdef ZB_JOIN_CLIENT
zb_ret_t zb_zcl_wwah_get_rejoin_tmo(zb_uint16_t attempt, zb_time_t *tmo);
#endif
/** @endcond */ /* DOXYGEN_ZCL_SECTION */
#define ZB_ZCL_WWAH_REPORT_ATTR_COUNT 0
#if (defined ZB_ZCL_SUPPORT_CLUSTER_WWAH && (defined ZB_ZCL_ENABLE_WWAH_SERVER || defined ZB_ZCL_ENABLE_WWAH_CLIENT))
typedef ZB_PACKED_PRE struct zb_zcl_wwah_context_s
{
zb_uint8_t wwah_behavior;
#ifdef ZB_ZCL_ENABLE_WWAH_SERVER
zb_uint8_t wwah_hub_endpoint;
zb_uint16_t wwah_hub_address;
zb_uint16_t time_server_addr;
zb_uint8_t time_server_endpoint;
zb_uint8_t aps_ack_exempt_table_cnt;
/* This is a list of clusters that should be exempt from requiring APS ACKs on unicasts. */
zb_uint16_t aps_ack_exempt_table[ZB_ZCL_WWAH_APS_ACK_EXEMPT_TABLE_SIZE];
/* ZB_TRUE - enforces that all cluster commands for the cluster have APS level security
* except for those in the exemption list*/
/* ZB_FALSE - enforces that all cluster commands for the cluster doesn't have APS level security
* except for those in the exemption list. This is default value*/
zb_bool_t aps_link_key_enabled_by_default;
zb_uint8_t aps_link_key_authorization_table_cnt;
/* This is a exemption list of clusters for requiring APS level security */
zb_uint16_t aps_link_key_authorization_table[ZB_ZCL_WWAH_APS_LINK_KEY_AUTHORIZATION_TABLE_SIZE];
zb_uint8_t use_trust_center_for_cluster_table_cnt;
/* This is a list of clusters that should be forced to use the Trust Center. */
zb_uint16_t use_trust_center_for_cluster_table[ZB_ZCL_WWAH_USE_TRUST_CENTER_FOR_CLUSTER_TABLE_SIZE];
/* ======= Survey Beacon related context ======= */
zb_uint8_t survey_beacons_seq_number;
zb_uint8_t survey_beacons_in_progress;
zb_zcl_wwah_periodic_checkins_data_t periodic_checkins;
zb_zcl_wwah_enable_wwah_rejoin_algorithm_t rejoin_alg;
zb_zcl_wwah_bad_parent_recovery_data_t bad_parent_recovery;
#endif
#if !(defined ZB_ZCL_ENABLE_WWAH_SERVER || defined ZB_ZCL_ENABLE_WWAH_CLIENT)
zb_uint8_t make_iso_compiler_happy;
#endif
} zb_zcl_wwah_context_t;
#endif
#define ZB_ZCL_WWAH_REJOIN_SLEEPY_ED_TIMEOUT (ZB_TIME_ONE_SECOND * 60 * 15)
#define ZB_ZCL_WWAH_REJOIN_NON_SLEEPY_ED_ROUTER_TIMEOUT (ZB_TIME_ONE_SECOND * 60 * 60 * 24)
/* For debug purpose: #define ZB_ZCL_WWAH_REJOIN_NON_SLEEPY_ED_ROUTER_TIMEOUT (ZB_TIME_ONE_SECOND * 60)*/
#define ZB_ZCL_WWAH_BAD_PARENT_RECOVERY_TIMEOUT (ZB_TIME_ONE_SECOND * 60 * 60 * 24)
/* For debug purpose: #define ZB_ZCL_WWAH_BAD_PARENT_RECOVERY_TIMEOUT (ZB_TIME_ONE_SECOND * 30)*/
#define ZB_ZCL_WWAH_BAD_PARENT_RECOVERY_POLL_CONTROL_CHECK_IN_FAILED_CNT 3
/* FIXME: Is it defined somewhere in WWAH spec? */
#define ZB_ZCL_WWAH_BAD_PARENT_RECOVERY_RSSI_IS_GOOD(rssi) (rssi >= -100)
void zb_zcl_wwah_bad_parent_recovery_signal(zb_bufid_t sig);
zb_ret_t zb_zcl_wwah_request_new_aps_link_key_handler(zb_uint8_t param);
zb_ret_t zb_zcl_wwah_enable_wwah_app_event_retry_algorithm_handler(zb_uint8_t param);
zb_ret_t zb_zcl_wwah_disable_wwah_app_event_retry_algorithm_handler(zb_uint8_t param);
zb_ret_t zb_zcl_wwah_request_time_handler(zb_uint8_t param);
zb_ret_t zb_zcl_wwah_enable_wwah_rejoin_algorithm_handler(zb_uint8_t param);
zb_ret_t zb_zcl_wwah_disable_wwah_rejoin_algorithm_handler(zb_uint8_t param);
void zb_zcl_wwah_init_server(void);
void zb_zcl_wwah_init_server_attr(void);
void zb_zcl_wwah_init_client(void);
zb_ret_t zb_zcl_wwah_update_time(zb_uint8_t param);
#define ZB_ZCL_CLUSTER_ID_WWAH_SERVER_ROLE_INIT zb_zcl_wwah_init_server
#define ZB_ZCL_CLUSTER_ID_WWAH_CLIENT_ROLE_INIT zb_zcl_wwah_init_client
#endif /* ZB_ZCL_WWAH_H */