nRF5 SDK for Thread and Zigbee v1.0.0
 All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages
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_buf, 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(buffer, cmd_ptr, def_resp)
 Initialize Write attribute 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:

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:1273
#define ZB_ZCL_PACKET_PUT_DATA16_VAL(ptr, val)
Definition: zb_zcl_common.h:1291
unsigned char zb_uint8_t
Project-local 1-byte unsigned int type.
Definition: zb_types.h:115
#define ZB_ZCL_GET_BYTES_AVAILABLE(zbbuf, ptr)
Return number of bytes available in a packet.
Definition: zb_zcl_common.h:1266
#define TRACE_MSG(lm, fmts, args)
Put trace output.
Definition: zb_trace.h:150
ZCL Write Attribute Command frame.
Definition: zb_zcl_commands.h:942

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:1273
#define ZB_ZCL_PACKET_PUT_DATA16_VAL(ptr, val)
Definition: zb_zcl_common.h:1291
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_buf,
  write_attr_req 
)
Value:
{ \
zb_uint8_t req_size = 0xff; \
(write_attr_req) = ZB_BUF_LEN(data_buf) >= ZB_ZCL_WRITE_ATTR_REQ_SIZE ? \
(zb_zcl_write_attr_req_t*)ZB_BUF_BEGIN(data_buf) : 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 <= ZB_BUF_LEN(data_buf)) \
{ \
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 <= ZB_BUF_LEN(data_buf)) \
{ \
ZB_BUF_CUT_LEFT2((data_buf), 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.
#define ZB_BUF_BEGIN(zbbuf)
Definition: zboss_api_core.h:722
#define ZB_BUF_LEN(zbbuf)
Definition: zboss_api_core.h:731
unsigned char zb_uint8_t
Project-local 1-byte unsigned int type.
Definition: zb_types.h:115
ZCL Write Attribute Command frame.
Definition: zb_zcl_commands.h:884

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_buf- pointer to zb_buf_t buffer containing write attribute request data
write_attr_req- out pointer to zb_zcl_write_attr_req_t, containing Write attribute record
Note
data_buf buffer should contain Write attribute request payload, without ZCL header. Each parsed Write attribute record is exctracted from intial data_buf buffer
#define ZB_ZCL_GENERAL_INIT_WRITE_ATTR_REQ (   buffer,
  cmd_ptr,
  def_resp 
)
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:1170
#define ZB_ZCL_START_PACKET(zbbuf)
Initializes zb_buf_t buffer and returns pointer to the beginning of array.
Definition: zb_zcl_common.h:1252
#define ZB_ZCL_CONSTRUCT_COMMAND_HEADER(data_ptr, tsn, cmd_id)
Construct ZCL header.
Definition: zb_zcl_common.h:1127
Definition: zb_zcl_commands.h:83

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:1170
#define ZB_ZCL_START_PACKET(zbbuf)
Initializes zb_buf_t buffer and returns pointer to the beginning of array.
Definition: zb_zcl_common.h:1252
Standard profile command.
Definition: zb_zcl_common.h:756
#define ZB_ZCL_CONSTRUCT_COMMAND_HEADER(data_ptr, tsn, cmd_id)
Construct ZCL header.
Definition: zb_zcl_common.h:1127
Definition: zb_zcl_commands.h:83

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_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:1252
#define ZB_ZCL_CONSTRUCT_COMMAND_HEADER(data_ptr, tsn, cmd_id)
Construct ZCL header.
Definition: zb_zcl_common.h:1127
Definition: zb_zcl_commands.h:85

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:1252
Definition: zb_zcl_commands.h:85
#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:1131

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:1538

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:1538

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:83

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:1273
Definition: zb_zcl_common.h:268

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- pointer to zb_buf_t 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