Developing with ZBOSS SDK 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(zbbuf, ptr)
 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_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_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)   (ZB_MEMCPY(ptr, val, n), (ptr) += (n))
 Put N byte data to packet. More...
 
#define ZB_ZCL_PACKET_PUT_DATA_N(ptr, val, n)   (ZB_MEMCPY(ptr, val, n), (ptr) += (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_PUT_STRING(_ptr, _val)
 
#define ZB_ZCL_PACKET_GET_STRING(_zcl_str, data, _zcl_str_max_size)
 
#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_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)   (zb_addr_u *)(&(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),(zb_addr_u *)(&(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 *)(&(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_ret_t zb_zcl_finish_and_send_packet (zb_bufid_t buffer, zb_uint8_t *ptr, 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, 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);

For more information see HA samples

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 [1/2]

#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_STATIC_STRING [2/2]

#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 [1/2]

#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_GET_STRING [2/2]

#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:
{ \
ZB_HTOLE16((ptr), (val)); \
(ptr) += 2; \
}

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 [1/2]

#define ZB_ZCL_PACKET_PUT_DATA_N (   ptr,
  val,
 
)    (ZB_MEMCPY(ptr, val, n), (ptr) += (n))

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.

Put N byte data to packet

◆ ZB_ZCL_PACKET_PUT_DATA_N [2/2]

#define ZB_ZCL_PACKET_PUT_DATA_N (   ptr,
  val,
 
)    (ZB_MEMCPY(ptr, val, n), (ptr) += (n))

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.

Put N byte data to packet

◆ ZB_ZCL_PACKET_PUT_STRING [1/2]

#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

◆ ZB_ZCL_PACKET_PUT_STRING [2/2]

#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,
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_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:694
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:1354
zb_uint8_t
unsigned char zb_uint8_t
Project-local 1-byte unsigned int type.
Definition: zb_types.h:158
ZB_AF_HA_PROFILE_ID
@ ZB_AF_HA_PROFILE_ID
Definition: zboss_api_af.h:315
ZB_ZCL_CLUSTER_ID_BASIC
@ ZB_ZCL_CLUSTER_ID_BASIC
Definition: zb_zcl_common.h:196
ZB_APS_ADDR_MODE_16_ENDP_PRESENT
@ ZB_APS_ADDR_MODE_16_ENDP_PRESENT
Definition: zboss_api_aps.h:101
ZB_ZCL_GET_SEQ_NUM
#define ZB_ZCL_GET_SEQ_NUM()
Return next sequence number for ZCL frame.
Definition: zb_zcl_common.h:1272
zb_uint32_t
unsigned int zb_uint32_t
Project-local 4-byte unsigned int type.
Definition: zb_types.h:206
ZB_ZCL_CMD_READ_ATTRIB
@ ZB_ZCL_CMD_READ_ATTRIB
Definition: zb_zcl_commands.h:61
ZB_ZCL_CONSTRUCT_COMMAND_HEADER
#define ZB_ZCL_CONSTRUCT_COMMAND_HEADER(data_ptr, tsn, cmd_id)
Construct ZCL header.
Definition: zb_zcl_common.h:1229
ZB_ZCL_FRAME_DIRECTION_TO_CLI
@ ZB_ZCL_FRAME_DIRECTION_TO_CLI
Definition: zb_zcl_common.h:897
ZB_ZCL_GET_STRING_BEGIN
#define ZB_ZCL_GET_STRING_BEGIN(_str)
Definition: zb_zcl_common.h:428
zb_ieee_addr_t
zb_64bit_addr_t zb_ieee_addr_t
Long (64-bit) device address.
Definition: zb_types.h:515
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:678
ZB_ZCL_NOT_MANUFACTURER_SPECIFIC
@ ZB_ZCL_NOT_MANUFACTURER_SPECIFIC
Standard profile command.
Definition: zb_zcl_common.h:867
zb_uint16_t
unsigned short zb_uint16_t
Project-local 2-byte unsigned int type.
Definition: zb_types.h:162
ZB_ZCL_GET_STRING_LENGTH
#define ZB_ZCL_GET_STRING_LENGTH(str)
Get ZCL string length.
Definition: zb_zcl_common.h:420
ZB_ZCL_ATTR_GLOBAL_CLUSTER_REVISION_ID
@ ZB_ZCL_ATTR_GLOBAL_CLUSTER_REVISION_ID
Definition: zb_zcl_common.h:626
ZB_ZCL_ENABLE_DEFAULT_RESPONSE
@ ZB_ZCL_ENABLE_DEFAULT_RESPONSE
Enable default response.
Definition: zb_zcl_common.h:883