nRF5 SDK for Thread and Zigbee v4.1.0
Data Structures | Macros | Typedefs
Write attributes command sending and parsing.

Data Structures

struct  zb_zcl_write_attr_req_s
 ZCL Write Attribute Command frame. More...
 
struct  zb_zcl_write_attr_res_s
 ZCL Write Attribute Command frame. More...
 

Macros

#define ZB_ZCL_GENERAL_GET_NEXT_WRITE_ATTR_REQ(data_ptr, data_len, write_attr_req)
 Parses Write attribute request and returns next Write attribute record or NULL if there is no more data. More...
 
#define ZB_ZCL_GET_NEXT_WRITE_ATTR_RES(data_buf, write_attr_res)
 Parses Write attribute response and returns next Write attribute status or NULL if there is no more data. More...
 
#define ZB_ZCL_GENERAL_INIT_WRITE_ATTR_REQ_BY_TYPE(buffer, cmd_ptr, def_resp, write_attr_type)
 Initialize Write attribute command. More...
 
#define ZB_ZCL_GENERAL_INIT_WRITE_ATTR_REQ(buffer, cmd_ptr, def_resp)
 Initialize Write attribute command. More...
 
#define ZB_ZCL_GENERAL_INIT_WRITE_ATTR_REQ_NO_RESP(buffer, cmd_ptr, def_resp)
 Initialize Write Attribute No Response command. More...
 
#define ZB_ZCL_GENERAL_INIT_WRITE_ATTR_REQ_UNDIV(buffer, cmd_ptr, def_resp)
 Initialize Write Attribute Undivided command. More...
 
#define ZB_ZCL_GENERAL_INIT_WRITE_ATTR_REQ_A(buffer, cmd_ptr, direction, def_resp)
 Initialize Write attribute command. More...
 
#define ZB_ZCL_GENERAL_ADD_VALUE_WRITE_ATTR_REQ(cmd_ptr, attr_id, attr_type, attr_val)
 Add attribute value to command payload. More...
 
#define ZB_ZCL_GENERAL_SEND_WRITE_ATTR_REQ(buffer, cmd_ptr, addr, dst_addr_mode, dst_ep, ep, profile_id, cluster_id, cb)
 Send Write attribute command. More...
 
#define ZB_ZCL_GENERAL_SEND_WRITE_ATTRS_REQ(buffer, addr, addr_mode, dst_ep, ep, prof_id, cluster_id)
 Send "write attributes" request. depricate. More...
 
#define ZB_ZCL_GENERAL_INIT_WRITE_ATTR_RESP(_buffer, _cmd_ptr, _seq)
 Initialize Write attribute response command. More...
 
#define ZB_ZCL_GENERAL_INIT_WRITE_ATTR_RESP_EXT(_buffer, _cmd_ptr, _direction, _seq, _is_manuf, _manuf_id)
 Initialize Write attribute response command. More...
 
#define ZB_ZCL_GENERAL_SUCCESS_WRITE_ATTR_RESP(_cmd_ptr)
 Add Success status value to Write attribute response command payload. More...
 
#define ZB_ZCL_GENERAL_ADD_STATUS_WRITE_ATTR_RESP(_buf, _cmd_ptr, _attr_id, _status)
 Add Fail status value to Write attribute response command payload. More...
 
#define ZB_ZCL_GENERAL_SEND_WRITE_ATTR_RESP(_buffer, _cmd_ptr, _addr, _dst_addr_mode, _dst_ep, _ep, _profile_id, _cluster_id, _cb)
 Send Write attribute response command. More...
 

Typedefs

typedef struct
zb_zcl_write_attr_req_s 
zb_zcl_write_attr_req_t
 ZCL Write Attribute Command frame. More...
 
typedef struct
zb_zcl_write_attr_res_s 
zb_zcl_write_attr_res_t
 ZCL Write Attribute Command frame. More...
 

Detailed Description

Both write attributes request and response commands have variable-length payload.

Write attributes request can be filled as following:

ZB_ZCL_GENERAL_ADD_VALUE_WRITE_ATTR_REQ(ptr, attr_id, attr_type, attr_val);
data_buf,
ptr,
dst_addr,
dst_ep,
src_ep,
NULL);

On the server side, this packet could be parsed in the following manner:

zb_zcl_write_attr_req_t *write_attr_req;
...
do
{
ZB_ZCL_GENERAL_GET_NEXT_WRITE_ATTR_REQ(data_buf, write_attr_req);
if (write_attr_req)
{
process write attribute request record
}
}
while(write_attr_req);

Response sending and parsing could be done in the same manner.

For more information see any HA sample

Macro Definition Documentation

#define ZB_ZCL_GENERAL_ADD_STATUS_WRITE_ATTR_RESP (   _buf,
  _cmd_ptr,
  _attr_id,
  _status 
)
Value:
{ \
zb_uint8_t bytes_avail = ZB_ZCL_GET_BYTES_AVAILABLE((_buf), (_cmd_ptr)); \
if (bytes_avail >= sizeof(zb_zcl_write_attr_res_t)) \
{ \
ZB_ZCL_PACKET_PUT_DATA8((_cmd_ptr), (_status)); \
ZB_ZCL_PACKET_PUT_DATA16_VAL((_cmd_ptr), (_attr_id)); \
} \
else \
{ \
TRACE_MSG(TRACE_ZCL1, "ERROR, buffer is full", (FMT__0)); \
} \
}
#define ZB_ZCL_PACKET_PUT_DATA8(ptr, val)
Put 8-bit value to packet.
Definition: zb_zcl_common.h:1370
#define ZB_ZCL_PACKET_PUT_DATA16_VAL(ptr, val)
Definition: zb_zcl_common.h:1389
unsigned char zb_uint8_t
Project-local 1-byte unsigned int type.
Definition: zb_types.h:128
#define ZB_ZCL_GET_BYTES_AVAILABLE(zbbuf, ptr)
Return number of bytes available in a packet.
Definition: zb_zcl_common.h:1362
ZCL Write Attribute Command frame.
Definition: zb_zcl_commands.h:935

Add Fail status value to Write attribute response command payload.

Parameters
_buf- buffer to store command data
_cmd_ptr- pointer to a command data memory
_attr_id- attribute ID
_status- status
#define ZB_ZCL_GENERAL_ADD_VALUE_WRITE_ATTR_REQ (   cmd_ptr,
  attr_id,
  attr_type,
  attr_val 
)
Value:
{ \
ZB_ZCL_PACKET_PUT_DATA16_VAL(cmd_ptr, (attr_id)); \
ZB_ZCL_PACKET_PUT_DATA8(cmd_ptr, (attr_type)); \
(cmd_ptr) = zb_zcl_put_value_to_packet(cmd_ptr, attr_type, attr_val); \
}
#define ZB_ZCL_PACKET_PUT_DATA8(ptr, val)
Put 8-bit value to packet.
Definition: zb_zcl_common.h:1370
#define ZB_ZCL_PACKET_PUT_DATA16_VAL(ptr, val)
Definition: zb_zcl_common.h:1389
zb_uint8_t * zb_zcl_put_value_to_packet(zb_uint8_t *cmd_ptr, zb_uint8_t attr_type, zb_uint8_t *attr_value)

Add attribute value to command payload.

Parameters
cmd_ptr- pointer to a command data memory
attr_id- attribute identifier
attr_type- attribute type
attr_val- pointer to attribute data value
#define ZB_ZCL_GENERAL_GET_NEXT_WRITE_ATTR_REQ (   data_ptr,
  data_len,
  write_attr_req 
)
Value:
{ \
zb_uint8_t req_size = 0xff; \
(write_attr_req) = (data_len) >= ZB_ZCL_WRITE_ATTR_REQ_SIZE ? \
(zb_zcl_write_attr_req_t*)(data_ptr) : NULL; \
\
if (write_attr_req) \
{ \
/* substruct sizeof(zb_uint8_t) because its size */ \
/* is already included into ZB_ZCL_WRITE_ATTR_REQ_SIZE */ \
req_size = ZB_ZCL_WRITE_ATTR_REQ_SIZE - sizeof(zb_uint8_t) + \
zb_zcl_get_attribute_size((write_attr_req)->attr_type, (write_attr_req)->attr_value); \
if (req_size <= (data_len)) \
{ \
ZB_ZCL_HTOLE16_INPLACE(&(write_attr_req)->attr_id); \
ZB_ZCL_FIX_ENDIAN((write_attr_req)->attr_value, (write_attr_req)->attr_type); \
} \
} \
\
if (req_size <= (data_len)) \
{ \
(data_ptr) = (data_ptr) + req_size; \
(data_len) = (data_len) - req_size; \
} \
else \
{ \
(write_attr_req) = NULL; \
} \
}
zb_uint8_t zb_zcl_get_attribute_size(zb_uint8_t attr_type, zb_uint8_t *attr_value)
Get size of value of given attribute type.
unsigned char zb_uint8_t
Project-local 1-byte unsigned int type.
Definition: zb_types.h:128
ZCL Write Attribute Command frame.
Definition: zb_zcl_commands.h:876
#define ZB_ZCL_FIX_ENDIAN(data_ptr, data_type)
Fix data endian, if needed, and store it in the same buffer.
Definition: zb_zcl_common.h:1759

Parses Write attribute request and returns next Write attribute record or NULL if there is no more data.

If request contains invlid data, NULL is returned.

Parameters
data_ptr- pointer to the data of a zb_bufid_t buffer containing write attribute request data
data_len- variable containing length of a zb_bufid_t buffer
write_attr_req- out pointer to zb_zcl_write_attr_req_t, containing Write attribute record
Note
buffer data by data_ptr should contain Write attribute request payload, without ZCL header.
#define ZB_ZCL_GENERAL_INIT_WRITE_ATTR_REQ (   buffer,
  cmd_ptr,
  def_resp 
)
Value:
(buffer), (cmd_ptr), (def_resp), ZB_ZCL_CMD_WRITE_ATTRIB);
#define ZB_ZCL_GENERAL_INIT_WRITE_ATTR_REQ_BY_TYPE(buffer, cmd_ptr, def_resp, write_attr_type)
Initialize Write attribute command.
Definition: zb_zcl_commands.h:1000
Definition: zb_zcl_commands.h:80

Initialize Write attribute command.

Parameters
buffer- buffer to store command data
cmd_ptr- pointer to a command data memory
def_resp- enable/disable default response
#define ZB_ZCL_GENERAL_INIT_WRITE_ATTR_REQ_A (   buffer,
  cmd_ptr,
  direction,
  def_resp 
)
Value:
{ \
cmd_ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_GENERAL_COMMAND_REQ_FRAME_CONTROL_A(cmd_ptr, direction, ZB_ZCL_NOT_MANUFACTURER_SPECIFIC, def_resp); \
}
#define ZB_ZCL_GET_SEQ_NUM()
Return next sequence number for ZCL frame.
Definition: zb_zcl_common.h:1262
#define ZB_ZCL_START_PACKET(zbbuf)
Initializes zb_buf_t buffer and returns pointer to the beginning of array.
Definition: zb_zcl_common.h:1344
Standard profile command.
Definition: zb_zcl_common.h:867
#define ZB_ZCL_CONSTRUCT_COMMAND_HEADER(data_ptr, tsn, cmd_id)
Construct ZCL header.
Definition: zb_zcl_common.h:1219
Definition: zb_zcl_commands.h:80

Initialize Write attribute command.

Parameters
buffer- buffer to store command data
cmd_ptr- pointer to a command data memory
direction- direction of command (see zb_zcl_frame_direction_t)
def_resp- enable/disable default response
#define ZB_ZCL_GENERAL_INIT_WRITE_ATTR_REQ_BY_TYPE (   buffer,
  cmd_ptr,
  def_resp,
  write_attr_type 
)
Value:
{ \
cmd_ptr = ZB_ZCL_START_PACKET(buffer); \
ZB_ZCL_CONSTRUCT_GENERAL_COMMAND_REQ_FRAME_CONTROL(cmd_ptr, def_resp); \
}
#define ZB_ZCL_GET_SEQ_NUM()
Return next sequence number for ZCL frame.
Definition: zb_zcl_common.h:1262
#define ZB_ZCL_START_PACKET(zbbuf)
Initializes zb_buf_t buffer and returns pointer to the beginning of array.
Definition: zb_zcl_common.h:1344
#define ZB_ZCL_CONSTRUCT_COMMAND_HEADER(data_ptr, tsn, cmd_id)
Construct ZCL header.
Definition: zb_zcl_common.h:1219

Initialize Write attribute command.

Parameters
buffer- buffer to store command data
cmd_ptr- pointer to a command data memory
def_resp- enable/disable default response
write_attr_type- type of 'Write Attribute' command: default -
See also
ZB_ZCL_CMD_WRITE_ATTRIB; no response -
ZB_ZCL_CMD_WRITE_ATTRIB_NO_RESP; undivided -
ZB_ZCL_CMD_WRITE_ATTRIB_UNDIV;
#define ZB_ZCL_GENERAL_INIT_WRITE_ATTR_REQ_NO_RESP (   buffer,
  cmd_ptr,
  def_resp 
)
Value:
(buffer), (cmd_ptr), (def_resp), ZB_ZCL_CMD_WRITE_ATTRIB_NO_RESP);
#define ZB_ZCL_GENERAL_INIT_WRITE_ATTR_REQ_BY_TYPE(buffer, cmd_ptr, def_resp, write_attr_type)
Initialize Write attribute command.
Definition: zb_zcl_commands.h:1000
Definition: zb_zcl_commands.h:83

Initialize Write Attribute No Response command.

Parameters
buffer- buffer to store command data
cmd_ptr- pointer to a command data memory
def_resp- enable/disable default response
#define ZB_ZCL_GENERAL_INIT_WRITE_ATTR_REQ_UNDIV (   buffer,
  cmd_ptr,
  def_resp 
)
Value:
(buffer), (cmd_ptr), (def_resp), ZB_ZCL_CMD_WRITE_ATTRIB_UNDIV);
Definition: zb_zcl_commands.h:81
#define ZB_ZCL_GENERAL_INIT_WRITE_ATTR_REQ_BY_TYPE(buffer, cmd_ptr, def_resp, write_attr_type)
Initialize Write attribute command.
Definition: zb_zcl_commands.h:1000

Initialize Write Attribute Undivided command.

Parameters
buffer- buffer to store command data
cmd_ptr- pointer to a command data memory
def_resp- enable/disable default response
#define ZB_ZCL_GENERAL_INIT_WRITE_ATTR_RESP (   _buffer,
  _cmd_ptr,
  _seq 
)
Value:
{ \
cmd_ptr = ZB_ZCL_START_PACKET((_buffer)); \
ZB_ZCL_CONSTRUCT_GENERAL_COMMAND_RESP_FRAME_CONTROL((_cmd_ptr)); \
}
#define ZB_ZCL_START_PACKET(zbbuf)
Initializes zb_buf_t buffer and returns pointer to the beginning of array.
Definition: zb_zcl_common.h:1344
#define ZB_ZCL_CONSTRUCT_COMMAND_HEADER(data_ptr, tsn, cmd_id)
Construct ZCL header.
Definition: zb_zcl_common.h:1219
Definition: zb_zcl_commands.h:82

Initialize Write attribute response command.

Parameters
_buffer- buffer to store command data
_cmd_ptr- pointer to a command data memory
_seq- command sequence
#define ZB_ZCL_GENERAL_INIT_WRITE_ATTR_RESP_EXT (   _buffer,
  _cmd_ptr,
  _direction,
  _seq,
  _is_manuf,
  _manuf_id 
)
Value:
{ \
cmd_ptr = ZB_ZCL_START_PACKET((_buffer)); \
ZB_ZCL_CONSTRUCT_GENERAL_COMMAND_RESP_FRAME_CONTROL_A((_cmd_ptr), (_direction), (_is_manuf)); \
ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT((_cmd_ptr), (_seq), (_is_manuf), (_manuf_id), ZB_ZCL_CMD_WRITE_ATTRIB_RESP); \
}
#define ZB_ZCL_START_PACKET(zbbuf)
Initializes zb_buf_t buffer and returns pointer to the beginning of array.
Definition: zb_zcl_common.h:1344
Definition: zb_zcl_commands.h:82
#define ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(_data_ptr, _tsn, _is_manuf_spec, _manuf_specific, _cmd_id)
Construct ZCL header, Manufacturer specific value is conditionally supported.
Definition: zb_zcl_common.h:1223

Initialize Write attribute response command.

Parameters
_buffer- buffer to store command data
_cmd_ptr- pointer to a command data memory
_direction- direction of command (see zb_zcl_frame_direction_t)
_seq- command sequence
_is_manuf- whether command is manufacturer specific
_manuf_id- manufacturer ID (needed if _is_manuf is set)
#define ZB_ZCL_GENERAL_SEND_WRITE_ATTR_REQ (   buffer,
  cmd_ptr,
  addr,
  dst_addr_mode,
  dst_ep,
  ep,
  profile_id,
  cluster_id,
  cb 
)
Value:
{ \
ZB_ZCL_FINISH_PACKET(buffer, cmd_ptr) \
ZB_ZCL_SEND_COMMAND_SHORT(buffer, addr, dst_addr_mode, dst_ep, ep, profile_id, cluster_id, cb); \
}
#define ZB_ZCL_FINISH_PACKET(zbbuf, ptr)
Definition: zb_zcl_common.h:1678

Send Write attribute command.

Parameters
buffer- buffer to store command data
cmd_ptr- pointer to a command data memory
addr- address to send packet to
dst_addr_mode- addressing mode
dst_ep- destination endpoint
ep- sending endpoint
profile_id- profile identifier
cluster_id- cluster identifier
cb- callback for getting command send status
#define ZB_ZCL_GENERAL_SEND_WRITE_ATTR_RESP (   _buffer,
  _cmd_ptr,
  _addr,
  _dst_addr_mode,
  _dst_ep,
  _ep,
  _profile_id,
  _cluster_id,
  _cb 
)
Value:
{ \
ZB_ZCL_FINISH_PACKET((_buffer), (_cmd_ptr)) \
ZB_ZCL_SEND_COMMAND_SHORT((_buffer), (_addr), (_dst_addr_mode), (_dst_ep), (_ep), \
(_profile_id), (_cluster_id), (_cb)); \
}
#define ZB_ZCL_FINISH_PACKET(zbbuf, ptr)
Definition: zb_zcl_common.h:1678

Send Write attribute response command.

Parameters
_buffer- buffer to store command data
_cmd_ptr- pointer to a command data memory
_addr- address to send packet to
_dst_addr_mode- addressing mode
_dst_ep- destination endpoint
_ep- sending endpoint
_profile_id- profile identifier
_cluster_id- cluster identifier
_cb- callback for getting command send status
#define ZB_ZCL_GENERAL_SEND_WRITE_ATTRS_REQ (   buffer,
  addr,
  addr_mode,
  dst_ep,
  ep,
  prof_id,
  cluster_id 
)
Value:
ZB_ZCL_SEND_GENERAL_COMMAND_REQ_SHORT( \
buffer, addr, addr_mode, dst_ep, ep, prof_id, cluster_id, ZB_ZCL_CMD_WRITE_ATTRIB)
Definition: zb_zcl_commands.h:80

Send "write attributes" request. depricate.

#define ZB_ZCL_GENERAL_SUCCESS_WRITE_ATTR_RESP (   _cmd_ptr)
Value:
{ \
}
#define ZB_ZCL_PACKET_PUT_DATA8(ptr, val)
Put 8-bit value to packet.
Definition: zb_zcl_common.h:1370
Definition: zb_zcl_common.h:341

Add Success status value to Write attribute response command payload.

Parameters
_cmd_ptr- pointer to a command data memory
#define ZB_ZCL_GET_NEXT_WRITE_ATTR_RES (   data_buf,
  write_attr_res 
)

Parses Write attribute response and returns next Write attribute status or NULL if there is no more data.

If response contains invlid data, NULL is returned.

Parameters
data_buf- ID zb_bufid_t of a buffer containing write attribute response data
write_attr_res- out pointer to zb_zcl_write_attr_res_t, containing Write attribute status
Note
data_buf buffer should contain Write attribute response payload, without ZCL header. Each parsed Write attribute response is exctracted from intial data_buf buffer

Typedef Documentation

ZCL Write Attribute Command frame.

See also
ZCL spec, 2.4.3 Write Attributes Command

ZCL Write Attribute Command frame.

See also
ZCL spec, 2.4.3 Write Attributes Command

Documentation feedback | Developer Zone | Subscribe | Updated