This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Zigbee window covering current endpoint is always zero

Hi, i am developing Zigbee window covering device on nrf connect sdk 1.9.1v which has 2 endpoints, but i am face issue when zigbee command is received and 

device_interface_cb is called and i get the endpoint as zero for both endpoint 1 and 2
void device_interface_cb(zb_uint8_t param)
{

	zb_zcl_device_callback_param_t *device_cb_param = ZB_BUF_GET_PARAM(param, zb_zcl_device_callback_param_t);
	LOG_INF("Zigbee CB endpoint %d", device_cb_param->endpoint);

	device_cb_param->status = RET_OK;
	switch (device_cb_param->device_cb_id)
	{
	case ZB_ZCL_WINDOW_COVERING_UP_OPEN_CB_ID:
	{
		zb_uint8_t lift_percentage_val = 0x00;
		zb_uint8_t tilt_percentage_val = 0x00;
		LOG_INF("open");
		ZVUNUSED(zb_zcl_set_attr_val( device_cb_param->endpoint,
									 ZB_ZCL_CLUSTER_ID_WINDOW_COVERING,
									 ZB_ZCL_CLUSTER_SERVER_ROLE,
									 ZB_ZCL_ATTR_WINDOW_COVERING_CURRENT_POSITION_LIFT_PERCENTAGE_ID,
									 &lift_percentage_val,
									 ZB_FALSE));

		ZVUNUSED(zb_zcl_set_attr_val( device_cb_param->endpoint,
									 ZB_ZCL_CLUSTER_ID_WINDOW_COVERING,
									 ZB_ZCL_CLUSTER_SERVER_ROLE,
									 ZB_ZCL_ATTR_WINDOW_COVERING_CURRENT_POSITION_TILT_PERCENTAGE_ID,
									 &tilt_percentage_val,
									 ZB_FALSE));
		break;
	}
	case ZB_ZCL_WINDOW_COVERING_DOWN_CLOSE_CB_ID:
	{
		LOG_INF("close");
		zb_uint8_t lift_percentage_val = 0x64;
		zb_uint8_t tilt_percentage_val = 0x64;

		ZVUNUSED(zb_zcl_set_attr_val( device_cb_param->endpoint,
									 ZB_ZCL_CLUSTER_ID_WINDOW_COVERING,
									 ZB_ZCL_CLUSTER_SERVER_ROLE,
									 ZB_ZCL_ATTR_WINDOW_COVERING_CURRENT_POSITION_LIFT_PERCENTAGE_ID,
									 &lift_percentage_val,
									 ZB_FALSE));

		ZVUNUSED(zb_zcl_set_attr_val( device_cb_param->endpoint,
									 ZB_ZCL_CLUSTER_ID_WINDOW_COVERING,
									 ZB_ZCL_CLUSTER_SERVER_ROLE,
									 ZB_ZCL_ATTR_WINDOW_COVERING_CURRENT_POSITION_TILT_PERCENTAGE_ID,
									 &tilt_percentage_val,
									 ZB_FALSE));
		break;
	}
	case ZB_ZCL_WINDOW_COVERING_STOP_CB_ID:
		LOG_INF("stop");
		zb_uint8_t lift_percentage_val = 0x32;
		zb_uint8_t tilt_percentage_val = 0x32;

		ZVUNUSED(zb_zcl_set_attr_val( device_cb_param->endpoint,
									 ZB_ZCL_CLUSTER_ID_WINDOW_COVERING,
									 ZB_ZCL_CLUSTER_SERVER_ROLE,
									 ZB_ZCL_ATTR_WINDOW_COVERING_CURRENT_POSITION_LIFT_PERCENTAGE_ID,
									 &lift_percentage_val,
									 ZB_FALSE));

		ZVUNUSED(zb_zcl_set_attr_val( device_cb_param->endpoint,
									 ZB_ZCL_CLUSTER_ID_WINDOW_COVERING,
									 ZB_ZCL_CLUSTER_SERVER_ROLE,
									 ZB_ZCL_ATTR_WINDOW_COVERING_CURRENT_POSITION_TILT_PERCENTAGE_ID,
									 &tilt_percentage_val,
									 ZB_FALSE));
		break;
	default:
		device_cb_param->status = RET_OK;
		break;
	}

}


Parents
  • Update: This could be a ZCL layer bug,

    Assuming that you use Production version of ZBOSS libraries, this is what should fix the issue:

    Change zb_zcl_window_covering_invoke_user_app() function in nrxlib/zboss/production/src/zcl/zcl_window_covering.c:172 :

    From:

    static zb_ret_t zb_zcl_window_covering_invoke_user_app(zb_uint8_t param,
                                                           const zb_zcl_parsed_hdr_t *cmd_info,
                                                           zb_zcl_device_callback_id_t user_cb_id,
                                                           void *payload)
          {
      zb_ret_t ret = RET_OK;
      TRACE_MSG(TRACE_ZCL1, "> zb_zcl_window_covering_invoke_user_app cb_id %d", (FMT__D, user_cb_id));
      ZB_ZCL_DEVICE_CMD_PARAM_INIT_WITH(param, user_cb_id, RET_OK, cmd_info, payload, NULL);
      if (ZCL_CTX().device_cb != NULL)
      {
        (ZCL_CTX().device_cb)(param);
          }

    To:

    static zb_ret_t zb_zcl_window_covering_invoke_user_app(zb_uint8_t param,
                                                           const zb_zcl_parsed_hdr_t *cmd_info,
                                                           zb_zcl_device_callback_id_t user_cb_id,
                                                           void *payload)
          {
      zb_ret_t ret = RET_OK;
      TRACE_MSG(TRACE_ZCL1, "> zb_zcl_window_covering_invoke_user_app cb_id %d", (FMT__D, user_cb_id));
      ZB_ZCL_DEVICE_CMD_PARAM_INIT_WITH(param, user_cb_id, RET_OK, cmd_info, payload, NULL);
      /* Set endpoint meant to receive this command. */
      ZB_ZCL_DEVICE_CMD_PARAM(param)->endpoint = ZB_ZCL_PARSED_HDR_SHORT_DATA(cmd_info).dst_endpoint;
      if (ZCL_CTX().device_cb != NULL)
      {
        (ZCL_CTX().device_cb)(param);
          }


    Regards,
    Jonathan

  • Thank you, now the problem is solved

Reply Children
No Data
Related