Developing with ZBOSS for Zigbee

Types and macros shared fill Fill ZCL packet. More...

Macros

#define ZB_ZCL_START_PACKET(zbbuf)
 Initializes zb_buf_t buffer and returns pointer to the beginning of array.
 
#define ZB_ZCL_GET_BYTES_WRITTEN(zbbuf, ptr)
 Return number of bytes written to the buffer.
 
#define ZB_ZCL_GET_BYTES_AVAILABLE_WITH_FRAGMENTATION(zbbuf, ptr)   (ZB_ASDU_MAX_FRAG_LEN - ZB_ZCL_GET_BYTES_WRITTEN(zbbuf, ptr))
 
#define ZB_ZCL_GET_BYTES_AVAILABLE_WO_FRAGMENTATION(zbbuf, ptr)   (ZB_ZCL_HI_WO_IEEE_MAX_PAYLOAD_SIZE - ZB_ZCL_GET_BYTES_WRITTEN(zbbuf, ptr))
 
#define ZB_ZCL_GET_BYTES_AVAILABLE(zbbuf, ptr, profile_id, cluster_id)
 Return number of bytes available in a packet.
 
#define ZB_ZCL_PACKET_PUT_DATA8(ptr, val)
 Put 8-bit value to packet.
 
#define ZB_ZCL_PACKET_PUT_DATA16(ptr, val)
 
#define ZB_ZCL_PACKET_PUT_DATA16_VAL(ptr, val)   (ptr) = zb_put_next_htole16((ptr), val)
 
#define ZB_ZCL_PACKET_PUT_2DATA16_VAL(ptr, val1, val2)   (ptr) = zb_put_next_2_htole16((ptr),(val1),(val2))
 
#define ZB_ZCL_PACKET_PUT_2DATA32_VAL(ptr, val1, val2)   (ptr) = zb_put_next_2_htole32((ptr),(val1),(val2))
 
#define ZB_ZCL_PACKET_PUT_DATA32_VAL(ptr, val)
 Put 32-bit value to packet. More...
 
#define ZB_ZCL_PACKET_PUT_DATA32(ptr, val)
 Put 32-bit value to packet. More...
 
#define ZB_ZCL_PACKET_PUT_DATA48_VAL(ptr, val)
 Put 48-bit value to packet. More...
 
#define ZB_ZCL_PACKET_PUT_DATA48(ptr, val)
 Put 48-bit value to packet. More...
 
#define ZB_ZCL_PACKET_PUT_DATA24_VAL(ptr, val)
 Put 24-bit value to packet. More...
 
#define ZB_ZCL_PACKET_PUT_DATA24(ptr, val)
 Put 24-bit value to packet. More...
 
#define ZB_ZCL_PACKET_PUT_DATA64(ptr, val)
 Put 64-bit value to packet. More...
 
#define ZB_ZCL_PACKET_GET_DATA8(dst_ptr, src_ptr)
 Get 8-bit value from packet. More...
 
#define ZB_ZCL_PACKET_PUT_DATA_N(ptr, val, n)
 Put N byte data to packet. More...
 
#define ZB_ZCL_PACKET_GET_DATA16(dst_ptr, src_ptr)
 Get 16-bit value from packet. More...
 
#define ZB_ZCL_PACKET_GET_DATA24(dst_ptr, src_ptr)
 Get 24-bit value from packet. More...
 
#define ZB_ZCL_PACKET_GET_DATA48(dst_ptr, src_ptr)
 Get 48-bit value from packet. More...
 
#define ZB_ZCL_PACKET_GET_DATA32(dst_ptr, src_ptr)
 Get 32-bit value from packet. More...
 
#define ZB_ZCL_PACKET_GET_DATA64(dst_ptr, src_ptr)
 Get 64-bit value from packet. More...
 
#define ZB_ZCL_PACKET_GET_DATA_IEEE(dst_ptr, src_ptr)
 Get IEEE address from packet. More...
 
#define ZB_ZCL_PACKET_PUT_DATA_IEEE(dst_ptr, src_ptr)
 Put IEEE address into packet. More...
 
#define ZB_ZCL_PACKET_PUT_STRING(_ptr, _val)
 
#define ZB_ZCL_PACKET_GET_STRING(_zcl_str, data, _zcl_str_max_size)
 
#define ZB_ZCL_PACKET_GET_STATIC_STRING(_zcl_str, data)   ZB_ZCL_PACKET_GET_STRING(_zcl_str, data, sizeof(_zcl_str))
 
#define ZB_ZCL_PACKET_GET_DATA_N(dst_ptr, src_ptr, n)
 Get N-byte value from packet. More...
 
#define ZB_ZCL_FINISH_PACKET(zbbuf, ptr)   (void) zb_zcl_finish_and_send_packet((zbbuf), (ptr),
 
#define ZB_ZCL_SEND_COMMAND_SHORT(buffer, addr, dst_addr_mode, dst_ep, ep, prof_id, cluster_id, cb)   (const zb_addr_u *)(const void *)(&(addr)), (dst_addr_mode), (dst_ep), (ep), (prof_id), (cluster_id), (cb))
 
#define ZB_ZCL_FINISH_N_SEND_PACKET(zbbuf, ptr, addr, dst_addr_mode, dst_ep, ep, prof_id, cluster_id, cb)   (void) zb_zcl_finish_and_send_packet((zbbuf), (ptr),(const zb_addr_u *)(const void *)(&(addr)), dst_addr_mode, dst_ep, ep, prof_id, cluster_id, cb)
 
#define ZB_ZCL_FINISH_N_SEND_PACKET_NEW(zbbuf, ptr, addr, dst_addr_mode, dst_ep, ep, prof_id, cluster_id, cb, aps_secured, disable_aps_ack, delay)   (void) zb_zcl_finish_and_send_packet_new((zbbuf), (ptr),(zb_addr_u *)(void *)(&(addr)), dst_addr_mode, dst_ep, ep, prof_id, cluster_id, cb, aps_secured, disable_aps_ack, delay)
 
#define ZB_ZCL_FINISH_PACKET_O(zbbuf, ptr)   (ptr) = zb_buf_alloc_left((zbbuf), ZB_ZCL_GET_BYTES_WRITTEN((zbbuf), (ptr)));
 

Functions

zb_bool_t zb_zcl_can_cluster_be_fragmented (zb_uint16_t profile_id, zb_uint16_t cluster_id)
 
zb_ret_t zb_zcl_finish_and_send_packet (zb_bufid_t buffer, zb_uint8_t *ptr, const zb_addr_u *dst_addr, zb_uint8_t dst_addr_mode, zb_uint8_t dst_ep, zb_uint8_t ep, zb_uint16_t prof_id, zb_uint16_t cluster_id, zb_callback_t cb)
 ZCL finish and send packet. More...
 
zb_ret_t zb_zcl_finish_and_send_packet_new (zb_bufid_t buffer, zb_uint8_t *ptr, const zb_addr_u *dst_addr, zb_uint8_t dst_addr_mode, zb_uint8_t dst_ep, zb_uint8_t ep, zb_uint16_t prof_id, zb_uint16_t cluster_id, zb_callback_t cb, zb_bool_t aps_secured, zb_bool_t disable_aps_ack, zb_uint16_t delay)
 

Detailed Description

Types and macros shared fill Fill ZCL packet.

Example
zb_uint8_t *cmd_ptr;
TRACE_MSG(TRACE_APP1, "Send read attr TEST_STEP_READ_GLOBAL_CLUSTER_REVISION", (FMT__0));
cmd_ptr = ZB_ZCL_START_PACKET(buffer);
ZB_ZCL_CONSTRUCT_GENERAL_COMMAND_REQ_FRAME_CONTROL_A(cmd_ptr,
cmd_ptr,
DST_ADDR,
ENDPOINT_C,
ENDPOINT_ED,
NULL);

Macro Definition Documentation

◆ ZB_ZCL_FINISH_PACKET

#define ZB_ZCL_FINISH_PACKET (   zbbuf,
  ptr 
)    (void) zb_zcl_finish_and_send_packet((zbbuf), (ptr),

Finish ZCL packet filling. Used bytes number are marked in a buffer.

Parameters
zbbuf- pointer to zb_buf_t buffer.
ptr- pointer to the byte after the last written byte in the buffer.
Attention
After ZB_ZCL_FINISH_PACKET() call, pointer ptr is set to the beginning of the buffer data.
Note
Please note that this macro does not return ret code, so if this macro is used without callback, this may lead to buffer leaks (if function is failed to send the packet). Please use zb_zcl_finish_and_send_packet() function directly to be able to check ret code.

◆ ZB_ZCL_PACKET_GET_DATA16

#define ZB_ZCL_PACKET_GET_DATA16 (   dst_ptr,
  src_ptr 
)
Value:
{ \
ZB_LETOH16((dst_ptr), (src_ptr)); \
(src_ptr) += sizeof(zb_uint16_t); \
}

Get 16-bit value from packet.

Parameters
dst_ptr- pointer to the memory to store value (pointer value preserved).
src_ptr- pointer to the memory to get value from (will be incremented by value size).

◆ ZB_ZCL_PACKET_GET_DATA24

#define ZB_ZCL_PACKET_GET_DATA24 (   dst_ptr,
  src_ptr 
)
Value:
{ \
ZB_LETOH24(dst_ptr, src_ptr); \
(src_ptr) += ZB_24BIT_SIZE; \
}

Get 24-bit value from packet.

Parameters
dst_ptr- pointer to the memory to store value (pointer value preserved).
src_ptr- pointer to the memory to get value from (will be incremented by value size).

◆ ZB_ZCL_PACKET_GET_DATA32

#define ZB_ZCL_PACKET_GET_DATA32 (   dst_ptr,
  src_ptr 
)
Value:
{ \
ZB_LETOH32((dst_ptr), (src_ptr)); \
(src_ptr) += sizeof(zb_uint32_t); \
}

Get 32-bit value from packet.

Parameters
dst_ptr- pointer to the memory to store value (pointer value preserved).
src_ptr- pointer to the memory to get value from (will be incremented by value size).

◆ ZB_ZCL_PACKET_GET_DATA48

#define ZB_ZCL_PACKET_GET_DATA48 (   dst_ptr,
  src_ptr 
)
Value:
{ \
ZB_LETOH48(dst_ptr, src_ptr); \
(src_ptr) += ZB_48BIT_SIZE; \
}

Get 48-bit value from packet.

Parameters
dst_ptr- pointer to the memory to store value (pointer value preserved).
src_ptr- pointer to the memory to get value from (will be incremented by value size).

◆ ZB_ZCL_PACKET_GET_DATA64

#define ZB_ZCL_PACKET_GET_DATA64 (   dst_ptr,
  src_ptr 
)
Value:
{ \
ZB_LETOH64((dst_ptr), (src_ptr)); \
(src_ptr) += 8; \
}

Get 64-bit value from packet.

Parameters
dst_ptr- pointer to the memory to store value (pointer value preserved).
src_ptr- pointer to the memory to get value from (will be incremented by value size).

◆ ZB_ZCL_PACKET_GET_DATA8

#define ZB_ZCL_PACKET_GET_DATA8 (   dst_ptr,
  src_ptr 
)
Value:
{ \
*(dst_ptr) = *((src_ptr)++); \
}

Get 8-bit value from packet.

Parameters
dst_ptr- pointer to the memory to store value (pointer value preserved).
src_ptr- pointer to the memory to get value from (will be incremented).

◆ ZB_ZCL_PACKET_GET_DATA_IEEE

#define ZB_ZCL_PACKET_GET_DATA_IEEE (   dst_ptr,
  src_ptr 
)
Value:
{ \
ZB_IEEE_ADDR_COPY((dst_ptr), (src_ptr)); \
(src_ptr) += sizeof(zb_ieee_addr_t); \
}

Get IEEE address from packet.

Parameters
dst_ptr- pointer to the memory to store value (pointer value preserved).
src_ptr- pointer to the memory to get value from (will be incremented by value size).

◆ ZB_ZCL_PACKET_GET_DATA_N

#define ZB_ZCL_PACKET_GET_DATA_N (   dst_ptr,
  src_ptr,
 
)
Value:
{ \
ZB_MEMCPY((dst_ptr), (src_ptr), (n)); \
(src_ptr) += (n); \
}

Get N-byte value from packet.

Parameters
dst_ptr- pointer to the memory to store value (will be incremented by value size).
src_ptr- pointer to the memory to get value from (pointer value preserved).
n- data length.

◆ ZB_ZCL_PACKET_GET_STATIC_STRING

#define ZB_ZCL_PACKET_GET_STATIC_STRING (   _zcl_str,
  data 
)    ZB_ZCL_PACKET_GET_STRING(_zcl_str, data, sizeof(_zcl_str))

Get ZCL String from packet and put it into array with fixed size.

◆ ZB_ZCL_PACKET_GET_STRING

#define ZB_ZCL_PACKET_GET_STRING (   _zcl_str,
  data,
  _zcl_str_max_size 
)
Value:
{ \
ZB_ZCL_PACKET_GET_DATA8(&_zcl_str[0], data); \
if (_zcl_str_max_size > ZB_ZCL_GET_STRING_LENGTH(_zcl_str)) \
{ \
ZB_ZCL_PACKET_GET_DATA_N(ZB_ZCL_GET_STRING_BEGIN(_zcl_str), \
data, \
} \
else \
{ \
data = NULL; \
} \
}

Get ZCL String from packet.

Note
If string is invalid (cannot be stored in buffer) this macro sets data to NULL.
Parameters
_zcl_str- Destination buffer.
data- Pointer to incoming data.
_zcl_str_max_size- Size of destination buffer.

◆ ZB_ZCL_PACKET_PUT_DATA16

#define ZB_ZCL_PACKET_PUT_DATA16 (   ptr,
  val 
)
Value:
do \
{ \
ZB_HTOLE16((ptr), (val)); \
(ptr) += 2; \
} while (ZB_FALSE)

Put 16-bit value to packet

Parameters
ptr- pointer to the place to put value to
val- pointer to the value to put into packet

◆ ZB_ZCL_PACKET_PUT_DATA16_VAL

#define ZB_ZCL_PACKET_PUT_DATA16_VAL (   ptr,
  val 
)    (ptr) = zb_put_next_htole16((ptr), val)

Put 16-bit value to packet

Parameters
ptr- pointer to the place to put value to
val- value to put into packet

◆ ZB_ZCL_PACKET_PUT_DATA24

#define ZB_ZCL_PACKET_PUT_DATA24 (   ptr,
  val 
)

Put 24-bit value to packet.

Parameters
ptr- pointer to the place to put value to
val- pointer to the value to put into packet

◆ ZB_ZCL_PACKET_PUT_DATA24_VAL

#define ZB_ZCL_PACKET_PUT_DATA24_VAL (   ptr,
  val 
)

Put 24-bit value to packet.

Parameters
ptr- pointer to the place to put value to
val- value to put into packet

◆ ZB_ZCL_PACKET_PUT_DATA32

#define ZB_ZCL_PACKET_PUT_DATA32 (   ptr,
  val 
)

Put 32-bit value to packet.

Parameters
ptr- pointer to the place to put value to
val- pointer to the value to put into packet

◆ ZB_ZCL_PACKET_PUT_DATA32_VAL

#define ZB_ZCL_PACKET_PUT_DATA32_VAL (   ptr,
  val 
)

Put 32-bit value to packet.

Parameters
ptr- pointer to the place to put value to
val- pointer to the value to put into packet

◆ ZB_ZCL_PACKET_PUT_DATA48

#define ZB_ZCL_PACKET_PUT_DATA48 (   ptr,
  val 
)

Put 48-bit value to packet.

Parameters
ptr- pointer to the place to put value to
val- pointer to the value to put into packet

◆ ZB_ZCL_PACKET_PUT_DATA48_VAL

#define ZB_ZCL_PACKET_PUT_DATA48_VAL (   ptr,
  val 
)

Put 48-bit value to packet.

Parameters
ptr- pointer to the place to put value to
val- value to put into packet

◆ ZB_ZCL_PACKET_PUT_DATA64

#define ZB_ZCL_PACKET_PUT_DATA64 (   ptr,
  val 
)

Put 64-bit value to packet.

Parameters
ptr- pointer to the place to put value to
val- pointer to the value to put into packet

◆ ZB_ZCL_PACKET_PUT_DATA_IEEE

#define ZB_ZCL_PACKET_PUT_DATA_IEEE (   dst_ptr,
  src_ptr 
)
Value:
{ \
ZB_IEEE_ADDR_COPY((dst_ptr), (src_ptr)); \
(dst_ptr) += sizeof(zb_ieee_addr_t); \
}

Put IEEE address into packet.

Parameters
dst_ptr- pointer to the memory to store value (will be incremented by value size).
src_ptr- pointer to the memory to get value from (pointer value preserved).

◆ ZB_ZCL_PACKET_PUT_DATA_N

#define ZB_ZCL_PACKET_PUT_DATA_N (   ptr,
  val,
 
)

Put N byte data to packet.

Parameters
ptr- pointer to the place to put value to.
val- pointer to the value to put into packet.
n- number of bytes to be copied.

◆ ZB_ZCL_PACKET_PUT_STRING

#define ZB_ZCL_PACKET_PUT_STRING (   _ptr,
  _val 
)
Value:
{ \
ZB_ZCL_PACKET_PUT_DATA8 (_ptr, ZB_ZCL_GET_STRING_LENGTH(_val)); \
ZB_ZCL_PACKET_PUT_DATA_N(_ptr, ZB_ZCL_GET_STRING_BEGIN(_val), \
}

Put ZCL Octet String to packet

Function Documentation

◆ zb_zcl_finish_and_send_packet()

zb_ret_t zb_zcl_finish_and_send_packet ( zb_bufid_t  buffer,
zb_uint8_t ptr,
const zb_addr_u dst_addr,
zb_uint8_t  dst_addr_mode,
zb_uint8_t  dst_ep,
zb_uint8_t  ep,
zb_uint16_t  prof_id,
zb_uint16_t  cluster_id,
zb_callback_t  cb 
)

ZCL finish and send packet.

Parameters
bufferpointer to the buffer where ZCL cmd is stored
ptrpointer to the end of ZCL cmd in buffer
dst_addrdestination address (see zb_addr_u)
dst_addr_modedestination address mode (only ZB_APS_ADDR_MODE_16_GROUP_ENDP_NOT_PRESENT and ZB_APS_ADDR_MODE_16_ENDP_PRESENT are supported)
dst_epdestination endpoint
epsource endpoint
prof_idprofile the command belongs to
cluster_idcluster identifier
cbcommand send status callback
ZB_AF_HA_PROFILE_ID
#define ZB_AF_HA_PROFILE_ID
Definition: zboss_api_af.h:287
ZB_ZCL_GENERAL_SEND_READ_ATTR_REQ
#define ZB_ZCL_GENERAL_SEND_READ_ATTR_REQ(buffer, cmd_ptr, addr, dst_addr_mode, dst_ep, ep, profile_id, cluster_id, cb)
Sends Read attribute command.
Definition: zb_zcl_commands.h:708
ZB_ZCL_START_PACKET
#define ZB_ZCL_START_PACKET(zbbuf)
Initializes zb_buf_t buffer and returns pointer to the beginning of array.
Definition: zb_zcl_common.h:1428
zb_uint8_t
unsigned char zb_uint8_t
Project-local 1-byte unsigned int type.
Definition: zb_types.h:149
TRACE_MSG
#define TRACE_MSG(lm, fmts, args)
Put trace output.
Definition: zb_trace.h:348
ZB_ZCL_ENABLE_DEFAULT_RESPONSE
#define ZB_ZCL_ENABLE_DEFAULT_RESPONSE
Definition: zb_zcl_common.h:935
ZB_ZCL_CMD_READ_ATTRIB
#define ZB_ZCL_CMD_READ_ATTRIB
Definition: zb_zcl_commands.h:66
ZB_ZCL_CLUSTER_ID_BASIC
#define ZB_ZCL_CLUSTER_ID_BASIC
Definition: zb_zcl_common.h:205
ZB_ZCL_FRAME_DIRECTION_TO_CLI
#define ZB_ZCL_FRAME_DIRECTION_TO_CLI
Definition: zb_zcl_common.h:958
ZB_ZCL_GET_SEQ_NUM
#define ZB_ZCL_GET_SEQ_NUM()
Return next sequence number for ZCL frame.
Definition: zb_zcl_common.h:1348
zb_uint32_t
unsigned int zb_uint32_t
Project-local 4-byte unsigned int type.
Definition: zb_types.h:197
ZB_ZCL_NOT_MANUFACTURER_SPECIFIC
#define ZB_ZCL_NOT_MANUFACTURER_SPECIFIC
Definition: zb_zcl_common.h:911
ZB_ZCL_CONSTRUCT_COMMAND_HEADER
#define ZB_ZCL_CONSTRUCT_COMMAND_HEADER(data_ptr, tsn, cmd_id)
Construct ZCL header.
Definition: zb_zcl_common.h:1305
ZB_ZCL_GET_STRING_BEGIN
#define ZB_ZCL_GET_STRING_BEGIN(_str)
Definition: zb_zcl_common.h:446
ZB_ZCL_ATTR_GLOBAL_CLUSTER_REVISION_ID
#define ZB_ZCL_ATTR_GLOBAL_CLUSTER_REVISION_ID
Definition: zb_zcl_common.h:667
zb_ieee_addr_t
zb_64bit_addr_t zb_ieee_addr_t
Long (64-bit) device address.
Definition: zb_types.h:550
ZB_APS_ADDR_MODE_16_ENDP_PRESENT
#define ZB_APS_ADDR_MODE_16_ENDP_PRESENT
Definition: zboss_api_aps.h:107
ZB_ZCL_GENERAL_ADD_ID_READ_ATTR_REQ
#define ZB_ZCL_GENERAL_ADD_ID_READ_ATTR_REQ(cmd_ptr, attr_id)
Add attribute id to command payload.
Definition: zb_zcl_commands.h:692
zb_uint16_t
unsigned short zb_uint16_t
Project-local 2-byte unsigned int type.
Definition: zb_types.h:153
ZB_ZCL_GET_STRING_LENGTH
#define ZB_ZCL_GET_STRING_LENGTH(str)
Get ZCL string length.
Definition: zb_zcl_common.h:438
ZB_FALSE
#define ZB_FALSE
Definition: zb_types.h:370