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

636 lines
28 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 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: Messaging cluster definitions
*/
#ifndef ZB_ZCL_MESSAGING_H_
#define ZB_ZCL_MESSAGING_H_
#include "zboss_api_core.h" /* ZBOSS core API types */
#include "zboss_api_aps.h"
#define ZB_ZCL_MESSAGING_DISPLAY_MSG_MAX_NON_FRAG_SIZE 48
#define ZB_ZCL_MESSAGING_MSG_CONFIRM_RESP_MSG_MAX_SIZE 21
/** @cond DOXYGEN_ZCL_SECTION */
/** @addtogroup ZB_ZCL_MESSAGING
* @{
* @details
* The Messaging cluster provides an interface for passing text messages
* between Zigbee devices.
*/
/** @defgroup ZB_ZCL_MESSAGING_COMMANDS Messaging cluster commands
* @{
*/
/** Commands generated by Messaging Server
* @see SE spec, subclause D.5.2.3
*/
typedef enum zb_zcl_messaging_srv_cmd_e
{
/** @see SE spec, subclause D.5.2.3.1
* @see zb_zcl_messaging_display_message_payload_s
*/
ZB_ZCL_MESSAGING_SRV_CMD_DISPLAY_MESSAGE = 0x00,
/** @e TheCancelMessage command provides the ability
* to cancel the sending or acceptance of previously sent messages. When this
* message is received the recipient device has the option of clearing any
* display or user interfaces it supports, or has the option of logging the
* message for future reference.
* @see SE spec, subclause D.5.2.3.2
* @see zb_zcl_messaging_cancel_message_payload_s
*/
ZB_ZCL_MESSAGING_SRV_CMD_CANCEL_MESSAGE = 0x01,
/** The Display Protected Message command is for use with messages that are
* protected by a password or PIN.
* @see zb_zcl_messaging_display_message_payload_s
*/
ZB_ZCL_MESSAGING_SRV_CMD_DISPLAY_PROTECTED_MESSAGE = 0x02,
/** @e TheCancelAllMessages command indicates to a client device that it should
* cancel all display messages currently held by it.
* @note @e TheCancelAllMessages command in this revision of this specification
* is provisional and not certifiable. This feature may change before reaching
* certifiable status in a future revision of this specification.
* @see zb_zcl_messaging_cancel_all_message_payload_s
*/
ZB_ZCL_MESSAGING_SRV_CMD_CANCEL_ALL_MESSAGES = 0x03
} zb_zcl_messaging_srv_cmd_t;
/** Commands generated by Messaging Client
* @see SE spec, D.5.3.3
*/
typedef enum zb_zcl_messaging_cli_cmd_e
{
/** On receipt of this command, the device shall send a @e DisplayMessage or
* @e DisplayProtectedMessage command as appropriate. A ZCL Default Response
* with status @e NOT_FOUND shall be returned if no message is available.
* @see SE spec, subclause D.5.3.3.1
* @note This command has no payload.
*/
ZB_ZCL_MESSAGING_CLI_CMD_GET_LAST_MESSAGE = 0x00,
/** @e TheMessageConfirmation command provides an indication that a Utility
* Customer has acknowledged and/or accepted the contents of a message
* previously received from the Messaging cluster server. Enhanced Message
* Confirmation commands shall contain an answer of NO, YES and/or a
* message confirmation string.
* If the optional Message Confirmation Response is required, the Message
* Confirmation Control field shall also be present.
* @see SE spec, subclause D.5.3.3.2
* @see zb_zcl_messaging_message_confirm_payload_s
*/
ZB_ZCL_MESSAGING_CLI_CMD_MESSAGE_CONFIRMATION = 0x01,
/** This command initiates the return of the first (and maybe only) @e
* CancelAllMessages command held on the associated server, and which has an
* implementation time equal to or later than the value indicated in the payload.
* @note The @e GetMessageCancellation command in this revision of this
* specification is provisional and not certifiable. This feature may change
* before reaching certifiable status in a future revision of this specification.
* @see zb_zcl_messaging_get_message_cancellation_payload_s
*/
ZB_ZCL_MESSAGING_CLI_CMD_GET_MESSAGE_CANCELLATION = 0x02
} zb_zcl_messaging_cli_cmd_t;
/* MESSAGING cluster commands list : only for information - do not modify */
#define ZB_ZCL_CLUSTER_ID_MESSAGING_SERVER_ROLE_GENERATED_CMD_LIST \
ZB_ZCL_MESSAGING_SRV_CMD_CANCEL_MESSAGE, \
ZB_ZCL_MESSAGING_SRV_CMD_DISPLAY_MESSAGE
#define ZB_ZCL_CLUSTER_ID_MESSAGING_CLIENT_ROLE_RECEIVED_CMD_LIST ZB_ZCL_CLUSTER_ID_MESSAGING_SERVER_ROLE_GENERATED_CMD_LIST
#define ZB_ZCL_CLUSTER_ID_MESSAGING_CLIENT_ROLE_GENERATED_CMD_LIST \
ZB_ZCL_MESSAGING_CLI_CMD_GET_LAST_MESSAGE, \
ZB_ZCL_MESSAGING_CLI_CMD_MESSAGE_CONFIRMATION
#define ZB_ZCL_CLUSTER_ID_MESSAGING_SERVER_ROLE_RECEIVED_CMD_LIST ZB_ZCL_CLUSTER_ID_MESSAGING_CLIENT_ROLE_GENERATED_CMD_LIST
/* Payload description */
/** Extended Message Control Field values
* @see SE spec, Table D-118
* @see zb_zcl_messaging_display_message_payload_t::extended_message_control
*/
typedef enum zb_zcl_messaging_extended_message_control_e
{
ZB_ZCL_MESSAGING_MESSAGE_HAS_NOT_BEEN_CONFIRMED = 0, /**< Message has not been confirmed */
ZB_ZCL_MESSAGING_MESSAGE_HAS_BEEN_CONFIRMED = 1, /**< Message has been confirmed */
} zb_zcl_messaging_extended_message_control_field_t;
/** Extended Message Control Field Bit Map
* @see SE spec, Table D-118
*/
enum zb_zcl_messaging_extended_message_control_field_bitmap_e
{
ZB_ZCL_MESSAGING_MESSAGE_CONFIRMATION_STATUS = 0, /**< @see zb_zcl_messaging_extended_message_control_field_e*/
};
/** @ref ZB_ZCL_MESSAGING_SRV_CMD_DISPLAY_MESSAGE "DisplayMessage" command payload
* @see SE spec, subclause D.5.2.3.1.1
*/
typedef ZB_PACKED_PRE struct zb_zcl_messaging_display_message_payload_s
{
/** 32-bit number identifier for the message. */
zb_uint32_t message_id; /* (M) */
/** BitMap field indicating control information related to the message */
zb_uint8_t message_control; /* (M) */
/** The time at which the message becomes valid */
zb_uint32_t start_time; /* (M) */
/** The amount of time in minutes after the Start Time during which
* the message is displayed */
zb_uint16_t duration_in_minutes; /* (M) */
/** Message (variable): Character String
* WARNING: Variable length of message supported, but remember to pass strings in global memory only!
*/
zb_uint8_t message_len; /* (M) */
zb_uint8_t *message; /* (M) */
/** BitMap field indicating additional control
* and status information for a given message.
*/
zb_uint8_t extended_message_control; /* (O) */
} ZB_PACKED_STRUCT zb_zcl_messaging_display_message_payload_t;
/** @e MessageControl field's transmission mechanism values
* @see SE spec, Table D-117
* @see ZB_ZCL_MESSAGING_MESSAGE_CONTROL_SET_TRANSMISSION_MECHANISM
* @see ZB_ZCL_MESSAGING_MESSAGE_CONTROL_GET_TRANSMISSION_MECHANISM
* @see ZB_ZCL_MESSAGING_MESSAGE_CONTROL_CLR_TRANSMISSION_MECHANISM
*/
typedef enum zb_zcl_messaging_message_control_transmission_mechanism_e
{
ZB_ZCL_MESSAGING_NORMAL_TRANSMISSION_ONLY = 0, /**< Send message through normal command
* function to client.
*/
ZB_ZCL_MESSAGING_NORMAL_AND_INTERNAL_PAN_TRANSMISSION = 1, /**< Send message through normal command
* function to client and pass message onto the
* Inter-PAN transmission mechanism.
*/
ZB_ZCL_MESSAGING_INTER_PAN_TRANSMISSION_ONLY = 2, /**< Send message through the Inter-PAN
* transmission mechanism.
*/
} zb_zcl_messaging_control_field_transmission_mechanism_t;
/** @brief Default value for Messaging cluster revision global attribute */
#define ZB_ZCL_MESSAGING_CLUSTER_REVISION_DEFAULT ((zb_uint16_t)0x0002u)
/*!
@brief Declare attribute list for Messaging cluster (only cluster revision attribute)
@param attr_list - attribute list name
*/
#define ZB_ZCL_DECLARE_MESSAGING_ATTR_LIST(attr_list) \
ZB_ZCL_START_DECLARE_ATTRIB_LIST_CLUSTER_REVISION(attr_list, ZB_ZCL_MESSAGING) \
ZB_ZCL_FINISH_DECLARE_ATTRIB_LIST
/**
* Set @e MessageControl's transmission mechanism value
* @param x - variable to store transmission mechanism value
* @param val - @ref zb_zcl_messaging_control_field_transmission_mechanism_t value
*/
#define ZB_ZCL_MESSAGING_MESSAGE_CONTROL_SET_TRANSMISSION_MECHANISM(x, val) ((x) &= (0xFC | ((val) & 0x03)))
/**
* Get @e MessageControl's transmission mechanism value
* @param x - variable that stores transmission mechanism value
* @see zb_zcl_messaging_control_field_transmission_mechanism_t
*/
#define ZB_ZCL_MESSAGING_MESSAGE_CONTROL_GET_TRANSMISSION_MECHANISM(x) ((x) & 0x03)
/**
* Clear @e MessageControl's transmission mechanism value
* @param x - variable that stores transmission mechanism value
* @see zb_zcl_messaging_control_field_transmission_mechanism_t
*/
#define ZB_ZCL_MESSAGING_MESSAGE_CONTROL_CLR_TRANSMISSION_MECHANISM(x) ((x) &= 0xFC)
/** @e MessageControl field's control importance values
* @see SE spec, Table D-117
* @see ZB_ZCL_MESSAGING_MESSAGE_CONTROL_SET_IMPORTANCE_LEVEL
* @see ZB_ZCL_MESSAGING_MESSAGE_CONTROL_GET_IMPORTANCE_LEVEL
* @see ZB_ZCL_MESSAGING_MESSAGE_CONTROL_CLR_IMPORTANCE_LEVEL
*/
typedef enum zb_zcl_messaging_message_control_importance_level_e
{
ZB_ZCL_MESSAGING_IMPORTANCE_LEVEL_LOW = 0, /**< Low importance level */
ZB_ZCL_MESSAGING_IMPORTANCE_LEVEL_MEDIUM = 1, /**< Medium importance level */
ZB_ZCL_MESSAGING_IMPORTANCE_LEVEL_HIGH = 2, /**< High importance level */
ZB_ZCL_MESSAGING_IMPORTANCE_LEVEL_CRITICAL = 3, /**< Critical importance level */
} zb_zcl_messaging_message_control_importance_level_t;
/**
* Set @e MessageControl's control importance value
* @param x - variable to store control importance value
* @param val - @ref zb_zcl_messaging_message_control_importance_level_t value
*/
#define ZB_ZCL_MESSAGING_MESSAGE_CONTROL_SET_IMPORTANCE_LEVEL(x, val) ((x) &= (0xF3 | ((val) & 0x03) << 2)
/**
* Get @e MessageControl's control importance value
* @param x - variable that stores control importance value
* @see zb_zcl_messaging_message_control_importance_level_t
*/
#define ZB_ZCL_MESSAGING_MESSAGE_CONTROL_GET_IMPORTANCE_LEVEL(x) (((x) >> 2) & 0x03)
/**
* Clear @e MessageControl's control importance value
* @param x - variable that stores control importance value
* @see zb_zcl_messaging_message_control_importance_level_t
*/
#define ZB_ZCL_MESSAGING_MESSAGE_CONTROL_CLR_IMPORTANCE_LEVEL(x) ((x) &= 0xF3)
/** @e MessageControl field's enhanced confirmation values
* @see SE spec, Table D-117
* @see ZB_ZCL_MESSAGING_MESSAGE_CONTROL_SET_ENHANCED_CONFIRMATION
* @see ZB_ZCL_MESSAGING_MESSAGE_CONTROL_GET_ENHANCED_CONFIRMATION
* @see ZB_ZCL_MESSAGING_MESSAGE_CONTROL_CLR_ENHANCED_CONFIRMATION
*/
typedef enum zb_zcl_messaging_message_control_enhanced_confirmation_e
{
ZB_ZCL_MESSAGING_ENHANCED_CONFIRMATION_NOT_REQUIRED = 0, /**< Enhanced Confirmation not required */
ZB_ZCL_MESSAGING_ENHANCED_CONFIRMATION_REQUIRED = 1, /**< Enhanced Confirmation required */
} zb_zcl_messaging_message_control_enhanced_confirmation_t;
/**
* Set @e MessageControl's enhanced confirmation value
* @param x - variable to store enhanced confirmation value
* @param val - @ref zb_zcl_messaging_message_control_enhanced_confirmation_t value
*/
#define ZB_ZCL_MESSAGING_MESSAGE_CONTROL_SET_ENHANCED_CONFIRMATION(x, val) ((x) &= (0xDF | ((val) & 0x01) << 5)
/**
* Get @e MessageControl's enhanced confirmation value
* @param x - variable that stores enhanced confirmation value
* @see zb_zcl_messaging_message_control_enhanced_confirmation_t
*/
#define ZB_ZCL_MESSAGING_MESSAGE_CONTROL_GET_ENHANCED_CONFIRMATION(x) (((x) >> 5) & 0x01)
/**
* Clear @e MessageControl's enhanced confirmation value
* @param x - variable that stores enhanced confirmation value
* @see zb_zcl_messaging_message_control_enhanced_confirmation_t
*/
#define ZB_ZCL_MESSAGING_MESSAGE_CONTROL_CLR_ENHANCED_CONFIRMATION(x) ((x) &= 0xDF )
/** @e MessageControl field's message confirmation values
* @see SE spec, Table D-117
* @see ZB_ZCL_MESSAGING_MESSAGE_CONTROL_SET_MESSAGE_CONFIRMATION
* @see ZB_ZCL_MESSAGING_MESSAGE_CONTROL_GET_MESSAGE_CONFIRMATION
* @see ZB_ZCL_MESSAGING_MESSAGE_CONTROL_CLR_MESSAGE_CONFIRMATION
*/
typedef enum zb_zcl_messaging_message_control_message_confirmation_e
{
ZB_ZCL_MESSAGING_MESSAGE_CONFIRMATION_NOT_REQUIRED = 0x00, /**< Message Confirmation not required. */
ZB_ZCL_MESSAGING_MESSAGE_CONFIRMATION_REQUIRED = 0x01, /**< Message Confirmation required. */
} zb_zcl_messaging_message_control_message_confirmation_t;
/**
* Set @e MessageControl's message confirmation value
* @param x - variable to store message confirmation value
* @param val - @ref zb_zcl_messaging_message_control_message_confirmation_t value
*/
#define ZB_ZCL_MESSAGING_MESSAGE_CONTROL_SET_MESSAGE_CONFIRMATION(x, val) ((x) &= (0x7F | ((val) & 0x01) << 7)
/**
* Get @e MessageControl's message confirmation value
* @param x - variable that stores message confirmation value
* @see zb_zcl_messaging_message_control_message_confirmation_t
*/
#define ZB_ZCL_MESSAGING_MESSAGE_CONTROL_GET_MESSAGE_CONFIRMATION(x) (((x) >> 7) & 0x01)
/**
* Clear @e MessageControl's message confirmation value
* @param x - variable that stores message confirmation value
* @see zb_zcl_messaging_message_control_message_confirmation_t
*/
#define ZB_ZCL_MESSAGING_MESSAGE_CONTROL_CLR_MESSAGE_CONFIRMATION(x) ((x) &= 0x7F)
/** Check if some size in range of variable size of specified payload.
*/
#define ZB_ZCL_MESSAGING_DISPLAY_MSG_PAYLOAD_SIZE_IS_VALID(size) \
((size) >= ((zb_int16_t)sizeof(zb_zcl_messaging_display_message_payload_t) - \
(zb_int16_t)ZB_SIZEOF_FIELD(zb_zcl_messaging_display_message_payload_t, message) -\
(zb_int16_t)ZB_SIZEOF_FIELD(zb_zcl_messaging_display_message_payload_t, extended_message_control)))
/* 8/16/2017 NK CR:MINOR Do all compilers support such initializing? More common way to initialize
* is to provide pointer as parameter and operate with it inside the macro. */
/* 8/21/2017 IA: It is C99 features. I hope, they are supported by all "our" compilers. */
/** @ref zb_zcl_messaging_display_message_payload_t initializer */
#define ZB_ZCL_MESSAGING_DISPLAY_MSG_PAYLOAD_INIT \
(zb_zcl_messaging_display_message_payload_t)\
{ \
.extended_message_control = 0x00, \
}
/** @ref ZB_ZCL_MESSAGING_SRV_CMD_CANCEL_MESSAGE "CancelMessage" command payload
* @see SE spec, subclause D.5.2.3.2.1
*/
typedef ZB_PACKED_PRE struct zb_zcl_messaging_cancel_message_payload_s
{
/** 32-bit number identifier for the message. */
zb_uint32_t message_id; /* (M) */
/** This field is deprecated and should be set to 0x00 */
zb_uint8_t message_control; /* (M) */
} ZB_PACKED_STRUCT zb_zcl_messaging_cancel_message_payload_t;
/** @ref zb_zcl_messaging_cancel_message_payload_t initializer */
#define ZB_ZCL_MESSAGING_CANCEL_MSG_PAYLOAD_INIT \
(zb_zcl_messaging_cancel_message_payload_t) {0}
/** Check if some size in range of variable size of specified payload. */
#define ZB_ZCL_MESSAGING_MSG_CANCEL_MESSAGE_SIZE_IS_VALID(size) \
((size) >= sizeof(zb_zcl_messaging_cancel_message_payload_t))
/** Message Confirmation Control
* @see SE spec, Table D-120
* @see zb_zcl_messaging_message_confirm_payload_t::message_confirmation_control
*/
typedef enum zb_zcl_messaging_message_confirmation_control_e
{
ZB_ZCL_MESSAGING_NO_RETURNED = 1 << 0, /**< The answer is NO */
ZB_ZCL_MESSAGING_YES_RETURNED = 1 << 1, /**< The answer is YES */
} zb_zcl_messaging_message_confirmation_control_t;
/** @ref ZB_ZCL_MESSAGING_CLI_CMD_MESSAGE_CONFIRMATION "MessageConfirmation" command payload
* @see SE spec, subclause D.5.3.3.2.1
*/
typedef ZB_PACKED_PRE struct zb_zcl_messaging_message_confirm_payload_s
{
/** 32-bit number identifier for the message being confirmed. */
zb_uint32_t message_id; /* (M) */
/** UTCTime of user confirmation of message */
zb_uint32_t confirmation_time; /* (M) */
/** BitMap field indicating the simple confirmation that is
* contained within the response.
*/
zb_uint8_t message_confirmation_control; /* (O) */
/** ZCL Octet String containing the message to be returned.
* The first Octet indicates length (21 is max).
* The string shall be encoded in the UTF-8 format.
* If this optional field is not available, a default value of 0x00 shall be used.
*/
zb_uint8_t message_confirmation_response[ZB_ZCL_MESSAGING_MSG_CONFIRM_RESP_MSG_MAX_SIZE]; /* (O) */
} ZB_PACKED_STRUCT zb_zcl_messaging_message_confirm_payload_t;
/** @ref ZB_ZCL_MESSAGING_SRV_CMD_CANCEL_ALL_MESSAGES "CancelAllMessages" command payload
* @see SE spec, subclause D.5.2.3.4.2
*/
typedef ZB_PACKED_PRE struct zb_zcl_messaging_cancel_all_message_payload_s
{
/** A UTC Time field to indicate the date/time at which all existing display
* messages should be cleared.
*/
zb_uint32_t implementation_date; /* (M) */
} ZB_PACKED_STRUCT zb_zcl_messaging_cancel_all_message_payload_t;
/** @ref ZB_ZCL_MESSAGING_CLI_CMD_GET_MESSAGE_CANCELLATION "GetMessageCancellation" command payload
* @see SE spec, subclause D.5.3.3.3.2
*/
typedef ZB_PACKED_PRE struct zb_zcl_messaging_get_message_cancellation_payload_s
{
/** UTC Timestamp indicating the earliest implementation time of a @e CancelAllMessages
* command to be returned.
*/
zb_uint32_t earliest_implementation_time; /* (M) */
} ZB_PACKED_STRUCT zb_zcl_messaging_get_message_cancellation_payload_t;
/** Check if some size in range of variable size of specified payload. */
#define ZB_ZCL_MESSAGING_MSG_CONFIRM_PAYLOAD_SIZE_IS_VALID(size) \
((size) >= sizeof(zb_zcl_messaging_message_confirm_payload_t) - \
ZB_SIZEOF_FIELD(zb_zcl_messaging_message_confirm_payload_t, message_confirmation_control) -\
ZB_SIZEOF_FIELD(zb_zcl_messaging_message_confirm_payload_t, message_confirmation_response))
typedef enum zb_zcl_messaging_response_type_e {
ZB_ZCL_MESSAGING_RESPONSE_TYPE_NORMAL,
ZB_ZCL_MESSAGING_RESPONSE_TYPE_PROTECTED,
ZB_ZCL_MESSAGING_RESPONSE_TYPE_NOT_FOUND,
} zb_zcl_messaging_response_type_t;
/** According to SE spec, server could send following responses to
* @ref ZB_ZCL_MESSAGING_CLI_CMD_GET_LAST_MESSAGE "GetLastMessage" command:
* <ul>
* <li>
* \b NOT_FOUND as default response
* </li>
* <li>
* \b DisplayMessage command
* </li>
* <li>
* \b DisplayProtectedMessage command
* </li>
* </ul>
*/
typedef struct zb_zcl_messaging_get_last_message_response_s {
zb_zcl_messaging_response_type_t resp_type;
union {
zb_zcl_messaging_display_message_payload_t display_message;
zb_zcl_messaging_display_message_payload_t display_protected_message;
} resp;
} zb_zcl_messaging_get_last_message_response_t;
/** @ref zb_zcl_messaging_get_last_message_response_t initializer */
#define ZB_ZCL_MESSAGING_GET_LAST_MESSAGE_RESPONSE_INIT \
(zb_zcl_messaging_get_last_message_response_t) \
{ \
.resp_type = ZB_ZCL_MESSAGING_RESPONSE_TYPE_NOT_FOUND, \
.resp.display_message = ZB_ZCL_MESSAGING_DISPLAY_MSG_PAYLOAD_INIT, \
}
/** @ref zb_zcl_messaging_message_confirm_payload_t initializer */
#define ZB_ZCL_MESSAGING_MSG_CONFIRM_PAYLOAD_INIT \
(zb_zcl_messaging_message_confirm_payload_t) \
{\
.message_confirmation_response = {0x00} \
}
/** Function for send @ref ZB_ZCL_MESSAGING_CLI_CMD_GET_LAST_MESSAGE "GetLastMessage" command
* @n On receiver's side callback ZCL device callback @ref ZB_ZCL_REGISTER_DEVICE_CB will be called with
* @ref ZB_ZCL_MESSAGING_GET_LAST_MSG_CB_ID callback id.
* @param param - Reference to buffer.
* @param dst_addr - Address of the device to send command to.
* @param dst_addr_mode - Address mode for dst_addr.
* @param dst_ep - Destination endpoint.
* @param src_ep - Current endpoint.
* @param cb - Callback which should be called when the ZCL stack receives APS ack.
* @par Usage
* @n Example of sending ZB_ZCL_MESSAGING_CLI_CMD_GET_LAST_MESSAGE "GetLastMessage" command
*/
void zb_zcl_messaging_send_get_last_msg(zb_uint8_t param,
const zb_addr_u *dst_addr,
zb_aps_addr_mode_t dst_addr_mode,
zb_uint8_t dst_ep,
zb_uint8_t src_ep,
zb_callback_t cb);
/** Function for send @ref ZB_ZCL_MESSAGING_SRV_CMD_DISPLAY_MESSAGE "DisplayMessage" command.
* On sender's side callback ZCL device callback @ref ZB_ZCL_REGISTER_DEVICE_CB will be called with @ref ZB_ZCL_MESSAGING_GET_LAST_MSG_CB_ID
* callback id on reception of @ref ZB_ZCL_MESSAGING_CLI_CMD_GET_LAST_MESSAGE "GetLastMessage" command.
* @n On receiver's side callback ZCL device callback @ref ZB_ZCL_REGISTER_DEVICE_CB will be called with
* @ref ZB_ZCL_MESSAGING_DISPLAY_MSG_CB_ID callback id.
* @param param - Reference to buffer.
* @param dst_addr - Address of the device to send command to.
* @param dst_addr_mode - Address mode for dst_addr.
* @param dst_ep - Destination endpoint.
* @param src_ep - Current endpoint.
* @param payload - Packet payload (@ref zb_zcl_messaging_display_message_payload_t).
* @param cb - Callback which should be called when the ZCL stack receives APS ack.
* @par Usage
* @n Handle @ref ZB_ZCL_MESSAGING_CLI_CMD_GET_LAST_MESSAGE "GetLastMessage" command
*/
void zb_zcl_messaging_send_display_msg(zb_uint8_t param,
const zb_addr_u *dst_addr,
zb_aps_addr_mode_t dst_addr_mode,
zb_uint8_t dst_ep,
zb_uint8_t src_ep,
const zb_zcl_messaging_display_message_payload_t *payload,
zb_callback_t cb);
/** Function for send @ref ZB_ZCL_MESSAGING_CLI_CMD_MESSAGE_CONFIRMATION "MessageConfirmation" command
* On receiver's side callback ZCL device callback @ref ZB_ZCL_REGISTER_DEVICE_CB will be called with
* @ref ZB_ZCL_MESSAGING_MSG_CONFIRMATION_CB_ID callback id.
* @param param - Reference to buffer.
* @param dst_addr - Address of the device to send command to.
* @param dst_addr_mode - Address mode for dst_addr.
* @param dst_ep - Destination endpoint.
* @param src_ep - Current endpoint.
* @param payload - Packet payload (@ref zb_zcl_messaging_message_confirm_payload_t).
* @param cb - Callback which should be called when the ZCL stack receives APS ack.
*/
void zb_zcl_messaging_send_msg_confirmation(zb_uint8_t param,
const zb_addr_u *dst_addr,
zb_aps_addr_mode_t dst_addr_mode,
zb_uint8_t dst_ep,
zb_uint8_t src_ep,
const zb_zcl_messaging_message_confirm_payload_t *payload,
zb_callback_t cb);
/** Function for send @ref ZB_ZCL_MESSAGING_SRV_CMD_CANCEL_MESSAGE "CancelMessage" command
* On receiver's side callback ZCL device callback @ref ZB_ZCL_REGISTER_DEVICE_CB will be called with
* @ref ZB_ZCL_MESSAGING_CANCEL_MSG_CB_ID callback id.
* @param param - Reference to buffer.
* @param dst_addr - Address of the device to send command to.
* @param dst_addr_mode - Address mode for dst_addr.
* @param dst_ep - Destination endpoint.
* @param src_ep - Current endpoint.
* @param payload - Packet payload (@ref zb_zcl_messaging_cancel_message_payload_t).
* @param cb - Callback which should be called when the ZCL stack receives APS ack.
*/
void zb_zcl_messaging_send_cancel_msg(zb_uint8_t param,
const zb_addr_u *dst_addr,
zb_aps_addr_mode_t dst_addr_mode,
zb_uint8_t dst_ep,
zb_uint8_t src_ep,
const zb_zcl_messaging_cancel_message_payload_t *payload,
zb_callback_t cb);
/** Macro for call @ref zb_zcl_messaging_send_get_last_msg function */
#define ZB_ZCL_MESSAGING_SEND_GET_LAST_MSG(_param, _dst_addr, _addr_mode, \
_dst_ep, _src_ep) \
zb_zcl_messaging_send_get_last_msg(_param, _dst_addr, _addr_mode, \
_dst_ep, _src_ep, NULL) \
/** Macro for call @ref zb_zcl_messaging_send_display_msg function */
#define ZB_ZCL_MESSAGING_SEND_DISPLAY_MSG(_param, _dst_addr, _addr_mode, \
_dst_ep, _src_ep, _payload) \
zb_zcl_messaging_send_display_msg(_param, _dst_addr, _addr_mode, \
_dst_ep, _src_ep, _payload, NULL)
/** Macro for call @ref zb_zcl_messaging_send_msg_confirmation function */
#define ZB_ZCL_MESSAGING_SEND_MSG_CONFIRMATION(_param, _dst_addr, _addr_mode, \
_dst_ep, _src_ep, _payload) \
zb_zcl_messaging_send_msg_confirmation(_param, _dst_addr, _addr_mode, \
_dst_ep, _src_ep, _payload, NULL)
/** Macro for call @ref zb_zcl_messaging_send_cancel_msg function */
#define ZB_ZCL_MESSAGING_SEND_CANCEL_MSG(_param, _dst_addr, _addr_mode, \
_dst_ep, _src_ep, _payload) \
zb_zcl_messaging_send_cancel_msg(_param, _dst_addr, _addr_mode, \
_dst_ep, _src_ep, _payload, NULL)
/** @cond internals_doc */
void zb_zcl_messaging_init_server(void);
void zb_zcl_messaging_init_client(void);
#define ZB_ZCL_CLUSTER_ID_MESSAGING_SERVER_ROLE_INIT zb_zcl_messaging_init_server
#define ZB_ZCL_CLUSTER_ID_MESSAGING_CLIENT_ROLE_INIT zb_zcl_messaging_init_client
/** @endcond */ /* internal_doc */
/** @} */ /* ZB_ZCL_MESSAGING_COMMANDS */
/** @} */ /* ZCL Messaging cluster definitions */
/** @endcond */ /* DOXYGEN_ZCL_SECTION */
#endif /* ZB_ZCL_MESSAGING_H_ */