Differences between nRF5 SDK for Zigbee and the nRF Connect SDK

I'm comparing some of the ZBOSS API between what's in the nRF5 SDK for Zigbee and what's in the nRF Connect SDK, and I'm curious about the differences in some cluster list declarations, such as ZB_HA_DECLARE_DIMMER_SWITCH_CLUSTER_LIST. The version in the nRF Connect SDK leaves out several cluster groups, including useful ones such as ZB_ZCL_CLUSTER_ID_ON_OFF., and sets their attribute count to zero and desc_list to NULL.

Why is that?

For reference, here is #define ZB_HA_DECLARE_DIMMER_SWITCH_CLUSTER_LIST from the nRF5 SDK for Zigbee and from the nRF Connect SDK.

nRF5 SDK for Zigbee:

#define ZB_HA_DECLARE_DIMMER_SWITCH_CLUSTER_LIST(                     \
    cluster_list_name,                                                \
    basic_server_attr_list,                                           \
    identify_client_attr_list,                                        \
    identify_server_attr_list,                                        \
    scenes_client_attr_list,                                          \
    groups_client_attr_list,                                          \
    on_off_client_attr_list,                                          \
    level_control_client_attr_list)                                   \
zb_zcl_cluster_desc_t cluster_list_name[] =                           \
{                                                                     \
  ZB_ZCL_CLUSTER_DESC(                                                \
    ZB_ZCL_CLUSTER_ID_BASIC,                                          \
    ZB_ZCL_ARRAY_SIZE(basic_server_attr_list, zb_zcl_attr_t),         \
    (basic_server_attr_list),                                         \
    ZB_ZCL_CLUSTER_SERVER_ROLE,                                       \
    ZB_ZCL_MANUF_CODE_INVALID                                         \
  ),                                                                  \
  ZB_ZCL_CLUSTER_DESC(                                                \
    ZB_ZCL_CLUSTER_ID_IDENTIFY,                                       \
    ZB_ZCL_ARRAY_SIZE(identify_server_attr_list, zb_zcl_attr_t),      \
    (identify_server_attr_list),                                      \
    ZB_ZCL_CLUSTER_SERVER_ROLE,                                       \
    ZB_ZCL_MANUF_CODE_INVALID                                         \
  ),                                                                  \
  ZB_ZCL_CLUSTER_DESC(                                                \
    ZB_ZCL_CLUSTER_ID_IDENTIFY,                                       \
    ZB_ZCL_ARRAY_SIZE(identify_client_attr_list, zb_zcl_attr_t),      \
    (identify_client_attr_list),                                      \
    ZB_ZCL_CLUSTER_CLIENT_ROLE,                                       \
    ZB_ZCL_MANUF_CODE_INVALID                                         \
  ),                                                                  \
  ZB_ZCL_CLUSTER_DESC(                                                \
    ZB_ZCL_CLUSTER_ID_SCENES,                                         \
    ZB_ZCL_ARRAY_SIZE(scenes_client_attr_list, zb_zcl_attr_t),        \
    (scenes_client_attr_list),                                        \
    ZB_ZCL_CLUSTER_CLIENT_ROLE,                                       \
    ZB_ZCL_MANUF_CODE_INVALID                                         \
  ),                                                                  \
  ZB_ZCL_CLUSTER_DESC(                                                \
    ZB_ZCL_CLUSTER_ID_GROUPS,                                         \
    ZB_ZCL_ARRAY_SIZE(groups_client_attr_list, zb_zcl_attr_t),        \
    (groups_client_attr_list),                                        \
    ZB_ZCL_CLUSTER_CLIENT_ROLE,                                       \
    ZB_ZCL_MANUF_CODE_INVALID                                         \
  ),                                                                  \
  ZB_ZCL_CLUSTER_DESC(                                                \
    ZB_ZCL_CLUSTER_ID_ON_OFF,                                         \
    ZB_ZCL_ARRAY_SIZE(on_off_client_attr_list, zb_zcl_attr_t),        \
    (on_off_client_attr_list),                                        \
    ZB_ZCL_CLUSTER_CLIENT_ROLE,                                       \
    ZB_ZCL_MANUF_CODE_INVALID                                         \
  ),                                                                  \
  ZB_ZCL_CLUSTER_DESC(                                                \
    ZB_ZCL_CLUSTER_ID_LEVEL_CONTROL,                                  \
    ZB_ZCL_ARRAY_SIZE(level_control_client_attr_list, zb_zcl_attr_t), \
    (level_control_client_attr_list),                                 \
    ZB_ZCL_CLUSTER_CLIENT_ROLE,                                       \
    ZB_ZCL_MANUF_CODE_INVALID                                         \
  )                                                                   \
}

nRF Connect SDK:

#define ZB_HA_DECLARE_DIMMER_SWITCH_CLUSTER_LIST(  \
    cluster_list_name,                                    \
    basic_attr_list,                                      \
    identify_attr_list)                                   \
zb_zcl_cluster_desc_t cluster_list_name[] =               \
{                                                         \
  ZB_ZCL_CLUSTER_DESC(                                    \
    ZB_ZCL_CLUSTER_ID_IDENTIFY,                           \
    ZB_ZCL_ARRAY_SIZE(identify_attr_list, zb_zcl_attr_t), \
    (identify_attr_list),                                 \
    ZB_ZCL_CLUSTER_SERVER_ROLE,                           \
    ZB_ZCL_MANUF_CODE_INVALID                             \
  ),                                                      \
  ZB_ZCL_CLUSTER_DESC(                                    \
    ZB_ZCL_CLUSTER_ID_BASIC,                              \
    ZB_ZCL_ARRAY_SIZE(basic_attr_list, zb_zcl_attr_t),    \
    (basic_attr_list),                                    \
    ZB_ZCL_CLUSTER_SERVER_ROLE,                           \
    ZB_ZCL_MANUF_CODE_INVALID                             \
  ),                                                      \
  ZB_ZCL_CLUSTER_DESC(                                    \
    ZB_ZCL_CLUSTER_ID_IDENTIFY,                           \
    0,                                                    \
    NULL,                                                 \
    ZB_ZCL_CLUSTER_CLIENT_ROLE,                           \
    ZB_ZCL_MANUF_CODE_INVALID                             \
  ),                                                      \
  ZB_ZCL_CLUSTER_DESC(                                    \
    ZB_ZCL_CLUSTER_ID_SCENES,                             \
    0,                                                    \
    NULL,                                                 \
    ZB_ZCL_CLUSTER_CLIENT_ROLE,                           \
    ZB_ZCL_MANUF_CODE_INVALID                             \
  ),                                                      \
  ZB_ZCL_CLUSTER_DESC(                                    \
    ZB_ZCL_CLUSTER_ID_GROUPS,                             \
    0,                                                    \
    NULL,                                                 \
    ZB_ZCL_CLUSTER_CLIENT_ROLE,                           \
    ZB_ZCL_MANUF_CODE_INVALID                             \
  ),                                                      \
  ZB_ZCL_CLUSTER_DESC(                                    \
    ZB_ZCL_CLUSTER_ID_ON_OFF,                             \
    0,                                                    \
    NULL,                                                 \
    ZB_ZCL_CLUSTER_CLIENT_ROLE,                           \
    ZB_ZCL_MANUF_CODE_INVALID                             \
  ),                                                      \
  ZB_ZCL_CLUSTER_DESC(                                    \
    ZB_ZCL_CLUSTER_ID_LEVEL_CONTROL,                      \
    0,                                                    \
    NULL,                                                 \
    ZB_ZCL_CLUSTER_CLIENT_ROLE,                           \
    ZB_ZCL_MANUF_CODE_INVALID                             \
  )                                                       \
}

Parents
  • Hi,

    After consulting with a colleague of mine this is the answer we landed on:

    Latest release of NCS - infocenter:

    The ZigBee Cluster Library Specification has changed from version 7 to v.8. With that update there are multiple changes to the specs, and among them are the following: 

    • ZB_DECLARE_DIMMER_SWITCH_CLUSTER_LIST macro was added
    • ZB_HA_DECLARE_DIMMER_SWITCH_CLUSTER_LIST macro  was removed
    • ZigBee Light switch sample has been updated: ZB_DECLARE_DIMMER_SWITCH_CLUSTER_LIST is used instead of ZB_HA_DECLARE_DIMMER_SWITCH_CLUSTER_LIST

    Comparing ZB_HA_DECLARE_DIMMER_SWITCH_CLUSTER_LIST from nRF5SDK For Thread and ZigBee with ZB_DECLARE_DIMMER_SWITCH_CLUSTER_LIST from NCS you will see that there are no differences between these macros besides the name.

    The version in the nRF Connect SDK leaves out several cluster groups, including useful ones such as ZB_ZCL_CLUSTER_ID_ON_OFF., and sets their attribute count to zero and desc_list to NULL.

    Also, to clarify a potential misunderstanding of Cluster roles: According to the ZCL Specification we have 
     

    Which means that ZCL8 macros, On/Off cluster has no client role specific attributes. The on_off_client_attr_list contains only cluster revision.

    Let me know if this answer your questions!

    Kind regards,
    Andreas

Reply
  • Hi,

    After consulting with a colleague of mine this is the answer we landed on:

    Latest release of NCS - infocenter:

    The ZigBee Cluster Library Specification has changed from version 7 to v.8. With that update there are multiple changes to the specs, and among them are the following: 

    • ZB_DECLARE_DIMMER_SWITCH_CLUSTER_LIST macro was added
    • ZB_HA_DECLARE_DIMMER_SWITCH_CLUSTER_LIST macro  was removed
    • ZigBee Light switch sample has been updated: ZB_DECLARE_DIMMER_SWITCH_CLUSTER_LIST is used instead of ZB_HA_DECLARE_DIMMER_SWITCH_CLUSTER_LIST

    Comparing ZB_HA_DECLARE_DIMMER_SWITCH_CLUSTER_LIST from nRF5SDK For Thread and ZigBee with ZB_DECLARE_DIMMER_SWITCH_CLUSTER_LIST from NCS you will see that there are no differences between these macros besides the name.

    The version in the nRF Connect SDK leaves out several cluster groups, including useful ones such as ZB_ZCL_CLUSTER_ID_ON_OFF., and sets their attribute count to zero and desc_list to NULL.

    Also, to clarify a potential misunderstanding of Cluster roles: According to the ZCL Specification we have 
     

    Which means that ZCL8 macros, On/Off cluster has no client role specific attributes. The on_off_client_attr_list contains only cluster revision.

    Let me know if this answer your questions!

    Kind regards,
    Andreas

Children
No Data
Related