From: saerome.kim Date: Mon, 6 Feb 2017 23:11:04 +0000 (+0900) Subject: Fix custom cluster to meet zigbee-daemon GDbus interface X-Git-Tag: submit/tizen/20170512.045637~52 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=57237c8b1c1071389f02299a302266d418cdf129;p=platform%2Fcore%2Fapi%2Fzigbee.git Fix custom cluster to meet zigbee-daemon GDbus interface Change-Id: Ic91dfbdb07e72f0638c965b739cbc54eb635cf0d Signed-off-by: saerome.kim --- diff --git a/include/zb-custom.h b/include/zb-custom.h index 3e68b0a..4c55064 100644 --- a/include/zb-custom.h +++ b/include/zb-custom.h @@ -136,6 +136,7 @@ typedef void (*zb_send_to_local_rsp)( * #ZB_ZCL_LEAVE_WELL_ALONE (default) \n * #ZB_ZCL_DISABLE_DEFAULT_RESPONSE * @param[in] mfg_code Manufacturer Code + * @param[in] cmd_id Command ID * @param[in] payload_len Length of payload * @param[in] payload Payload data * @param[in] cb Callback function to get response. @@ -158,6 +159,7 @@ int zb_aps_send( unsigned short profile_id, unsigned char zcl_frame_ctl, unsigned short mfg_code, + unsigned char cmd_id, unsigned short payload_len, unsigned char *payload, zb_aps_send_rsp cb, diff --git a/lib/zbl-custom.c b/lib/zbl-custom.c index 4f9598e..20e130e 100644 --- a/lib/zbl-custom.c +++ b/lib/zbl-custom.c @@ -26,27 +26,24 @@ #include "zbl-dbus.h" #include "zigbee.h" -API int zb_aps_send(zigbee_h handle, nwk_addr addr16, - unsigned char aps_frame_ctl, unsigned char src_ep, unsigned char dst_ep, - unsigned short cluster_id, unsigned short profile_id, - unsigned char zcl_frame_ctl, unsigned short mfg_code, - unsigned short payload_len, unsigned char *payload, +API int zb_aps_send(zigbee_h handle, nwk_addr addr16, unsigned char aps_frame_ctl, + unsigned char src_ep, unsigned char dst_ep, unsigned short cluster_id, + unsigned short profile_id, unsigned char zcl_frame_ctl, unsigned short mfg_code, + unsigned char cmd_id, unsigned short payload_len, unsigned char *payload, zb_aps_send_rsp cb, void *user_data) { int ret = ZIGBEE_ERROR_NONE; RETV_IF(NULL == handle, ZIGBEE_ERROR_INVALID_PARAMETER); - ret = zbl_aps_send(addr16, aps_frame_ctl, src_ep, dst_ep, - cluster_id, profile_id, zcl_frame_ctl, mfg_code, - payload_len, payload, cb, user_data); + ret = zbl_aps_send(addr16, aps_frame_ctl, src_ep, dst_ep, cluster_id, profile_id, + zcl_frame_ctl, mfg_code, cmd_id, payload_len, payload, cb, user_data); DBG("zbl_aps_send()=0x%X", ret); return ret; } -API int zb_zcl_send(zigbee_h handle, nwk_addr addr16, - unsigned char src_ep, unsigned char dst_ep, - unsigned short cluster_id, unsigned char zcl_frame_ctl, unsigned char cmd, - unsigned short payload_len, unsigned char *payload, +API int zb_zcl_send(zigbee_h handle, nwk_addr addr16, unsigned char src_ep, + unsigned char dst_ep, unsigned short cluster_id, unsigned char zcl_frame_ctl, + unsigned char cmd, unsigned short payload_len, unsigned char *payload, zb_zcl_send_rsp cb, void *user_data) { int ret = ZIGBEE_ERROR_NONE; diff --git a/lib/zbl-dbus.c b/lib/zbl-dbus.c index 10b91ac..87976ff 100644 --- a/lib/zbl-dbus.c +++ b/lib/zbl-dbus.c @@ -2012,20 +2012,21 @@ MGMT_NWK_DISC_REQ_OUT: unsigned short addr16; unsigned char src_ep; unsigned char dst_ep; - unsigned char cluster_id; - unsigned char profile_id; - unsigned char *payload = NULL; + unsigned short cluster_id; + unsigned short profile_id; unsigned short payload_len = 0; + unsigned char *payload = NULL; + unsigned char value; GVariantIter *payload_iter = NULL; int i = 0; - g_variant_get(parameters, "(qyyqqayq)", &addr16, &src_ep, &dst_ep, - &cluster_id, &profile_id, &payload_iter, &payload_len); + g_variant_get(parameters, "(qyyqqqa(y))", &addr16, &src_ep, &dst_ep, + &cluster_id, &profile_id, &payload_len, &payload_iter); if (payload_len > 0) { - payload = calloc(payload_len, sizeof(unsigned char)); - while (g_variant_iter_loop(payload_iter, "y", &value)) { + payload = calloc(payload_len+1, sizeof(unsigned char)); + while (g_variant_iter_loop(payload_iter, "(y)", &value)) { payload[i++] = value; } if (NULL != payload_iter) @@ -2044,20 +2045,21 @@ MGMT_NWK_DISC_REQ_OUT: unsigned short addr16; unsigned char src_ep; unsigned char dst_ep; - unsigned char cluster_id; - unsigned char profile_id; - unsigned char *payload = NULL; + unsigned short cluster_id; + unsigned short profile_id; unsigned short payload_len = 0; + unsigned char *payload = NULL; + unsigned char value; GVariantIter *payload_iter = NULL; int i = 0; - g_variant_get(parameters, "(qyyqqayq)", &addr16, &src_ep, &dst_ep, - &cluster_id, &profile_id, &payload_iter, &payload_len); + g_variant_get(parameters, "(qyyqqqa(y))", &addr16, &src_ep, &dst_ep, + &cluster_id, &profile_id, &payload_len, &payload_iter); if (payload_len > 0) { - payload = calloc(payload_len, sizeof(unsigned char)); - while (g_variant_iter_loop(payload_iter, "y", &value)) { + payload = calloc(payload_len + 1, sizeof(unsigned char)); + while (g_variant_iter_loop(payload_iter, "(y)", &value)) { payload[i++] = value; } if (NULL != payload_iter) @@ -2079,11 +2081,11 @@ MGMT_NWK_DISC_REQ_OUT: GVariantIter *payload_iter = NULL; int i = 0; - g_variant_get(parameters, "(ayq)", &payload_iter, &length); + g_variant_get(parameters, "(qa(y))", &length, &payload_iter); if (length > 0) { data = calloc(length, sizeof(unsigned char)); - while (g_variant_iter_loop(payload_iter, "y", &value)) { + while (g_variant_iter_loop(payload_iter, "(y)", &value)) { data[i++] = value; } if (NULL != payload_iter) @@ -4449,16 +4451,18 @@ int zbl_mgmt_permit_joining_req(nwk_addr addr16, unsigned char duration, return ZIGBEE_ERROR_NONE; } -int zbl_aps_send(nwk_addr addr16, unsigned char aps_frame_ctl, - unsigned char src_ep, unsigned char dst_ep, - unsigned short cluster_id, unsigned short profile_id, - unsigned char zcl_frame_ctl, unsigned short mfg_code, - unsigned short payload_len, unsigned char *payload, - zb_aps_send_rsp cb, void *user_data) +int zbl_aps_send(nwk_addr addr16, unsigned char aps_frame_ctl, unsigned char src_ep, + unsigned char dst_ep, unsigned short cluster_id, unsigned short profile_id, + unsigned char zcl_frame_ctl, unsigned short mfg_code, unsigned char cmd_id, + unsigned short payload_len, unsigned char *payload, zb_aps_send_rsp cb, void *user_data) { int sub_id, to, i; zbl_req_cb_s *container; + int result = ZIGBEE_ERROR_NONE; + GVariant *variant = NULL; + GError *dbus_err = NULL; + GVariantBuilder *payload_builder = NULL; GVariant *payload_variant = NULL; @@ -4485,21 +4489,31 @@ int zbl_aps_send(nwk_addr addr16, unsigned char aps_frame_ctl, container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container); container->userdata = user_data; - payload_builder = g_variant_builder_new(G_VARIANT_TYPE("ay")); + payload_builder = g_variant_builder_new(G_VARIANT_TYPE("a(y)")); if (payload_len > 0) { for (i = payload_len - 1; i >= 0 ; i--) { - g_variant_builder_add(payload_builder, "y", payload[i]); + g_variant_builder_add(payload_builder, "(y)", payload[i]); } } payload_variant = g_variant_builder_end(payload_builder); g_variant_builder_unref(payload_builder); - g_dbus_proxy_call(custom_gproxy, "aps_send", - g_variant_new("(qyyyqqyq@ay)", addr16, aps_frame_ctl, src_ep, dst_ep, cluster_id, - profile_id, zcl_frame_ctl, mfg_code, payload_variant), - G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container); + variant = g_dbus_proxy_call_sync(custom_gproxy, "aps_send", + g_variant_new("(qyyyqqyqyq@a(y))", addr16, aps_frame_ctl, src_ep, dst_ep, cluster_id, + profile_id, zcl_frame_ctl, mfg_code, cmd_id, payload_len, payload_variant), + G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err); - return ZIGBEE_ERROR_NONE; + if (variant) { + g_variant_get(variant, "(i)", &result); + DBG("ret = [0x%x]", result); + g_variant_unref(variant); + } else { + ERR("Failed to run 'aps_send' [%s]", dbus_err->message); + g_error_free(dbus_err); + return ZIGBEE_ERROR_IO_ERROR; + } + + return result; } int zbl_zcl_send(nwk_addr addr16, unsigned char src_ep, unsigned char dst_ep, @@ -4510,6 +4524,10 @@ int zbl_zcl_send(nwk_addr addr16, unsigned char src_ep, unsigned char dst_ep, int sub_id, to, i; zbl_req_cb_s *container; + int result = ZIGBEE_ERROR_NONE; + GVariant *variant = NULL; + GError *dbus_err = NULL; + GVariantBuilder *payload_builder = NULL; GVariant *payload_variant = NULL; @@ -4536,20 +4554,30 @@ int zbl_zcl_send(nwk_addr addr16, unsigned char src_ep, unsigned char dst_ep, container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container); container->userdata = user_data; - payload_builder = g_variant_builder_new(G_VARIANT_TYPE("ay")); + payload_builder = g_variant_builder_new(G_VARIANT_TYPE("a(y)")); if (payload_len > 0) { for (i = payload_len - 1; i >= 0 ; i--) { - g_variant_builder_add(payload_builder, "y", payload[i]); + g_variant_builder_add(payload_builder, "(y)", payload[i]); } } payload_variant = g_variant_builder_end(payload_builder); g_variant_builder_unref(payload_builder); - g_dbus_proxy_call(custom_gproxy, "zcl_send", - g_variant_new("(qyyqyy@ay)", addr16, src_ep, dst_ep, cluster_id, zcl_frame_ctl, - cmd, payload_variant), G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container); + variant = g_dbus_proxy_call_sync(custom_gproxy, "zcl_send", + g_variant_new("(qyyqyyq@a(y))", addr16, src_ep, dst_ep, cluster_id, zcl_frame_ctl, + cmd, payload_len, payload_variant), G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err); - return ZIGBEE_ERROR_NONE; + if (variant) { + g_variant_get(variant, "(i)", &result); + DBG("ret = [0x%x]", result); + g_variant_unref(variant); + } else { + ERR("Failed to run 'zcl_send' [%s]", dbus_err->message); + g_error_free(dbus_err); + return ZIGBEE_ERROR_IO_ERROR; + } + + return result; } int zbl_send_to_local(unsigned short length, unsigned char *data, @@ -4558,6 +4586,10 @@ int zbl_send_to_local(unsigned short length, unsigned char *data, int sub_id, to, i; zbl_req_cb_s *container; + int result = ZIGBEE_ERROR_NONE; + GVariant *variant = NULL; + GError *dbus_err = NULL; + GVariantBuilder *payload_builder = NULL; GVariant *payload_variant = NULL; @@ -4584,20 +4616,30 @@ int zbl_send_to_local(unsigned short length, unsigned char *data, container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container); container->userdata = user_data; - payload_builder = g_variant_builder_new(G_VARIANT_TYPE("ay")); + payload_builder = g_variant_builder_new(G_VARIANT_TYPE("a(y)")); if (length > 0) { for (i = length - 1; i >= 0 ; i--) { - g_variant_builder_add(payload_builder, "y", data[i]); + g_variant_builder_add(payload_builder, "(y)", data[i]); } } payload_variant = g_variant_builder_end(payload_builder); g_variant_builder_unref(payload_builder); - g_dbus_proxy_call(custom_gproxy, "send_to_local", - g_variant_new("(@ay)", payload_variant), - G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container); + variant = g_dbus_proxy_call_sync(custom_gproxy, "send_to_local", + g_variant_new("(q@a(y))", length, payload_variant), + G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err); - return ZIGBEE_ERROR_NONE; + if (variant) { + g_variant_get(variant, "(i)", &result); + DBG("ret = [0x%x]", result); + g_variant_unref(variant); + } else { + ERR("Failed to run 'send_to_local' [%s]", dbus_err->message); + g_error_free(dbus_err); + return ZIGBEE_ERROR_IO_ERROR; + } + + return result; } int zbl_read_attr_req(zigbee_h handle, unsigned short addr16, unsigned char dest_ep, diff --git a/lib/zbl-dbus.h b/lib/zbl-dbus.h index 9184420..0b8176c 100644 --- a/lib/zbl-dbus.h +++ b/lib/zbl-dbus.h @@ -82,12 +82,10 @@ int zbl_mgmt_permit_joining_req(nwk_addr addr16, unsigned char duration, unsigned char tc_significance, zb_zdo_mgmt_permit_joining_rsp cb, void *user_data); /* Custom Commands */ -int zbl_aps_send(nwk_addr addr16, unsigned char aps_frame_ctl, - unsigned char src_ep, unsigned char dst_ep, - unsigned short cluster_id, unsigned short profile_id, - unsigned char zcl_frame_ctl, unsigned short mfg_code, - unsigned short payload_len, unsigned char *payload, - zb_aps_send_rsp cb, void *user_data); +int zbl_aps_send(nwk_addr addr16, unsigned char aps_frame_ctl, unsigned char src_ep, + unsigned char dst_ep, unsigned short cluster_id, unsigned short profile_id, + unsigned char zcl_frame_ctl, unsigned short mfg_code, unsigned char cmd_id, + unsigned short payload_len, unsigned char *payload, zb_aps_send_rsp cb, void *user_data); int zbl_zcl_send(nwk_addr addr16, unsigned char src_ep, unsigned char dst_ep, unsigned short cluster_id, unsigned char zcl_frame_ctl, unsigned char cmd, unsigned short payload_len, unsigned char *payload, diff --git a/test/custom.c b/test/custom.c index 541ece5..aa43b2d 100644 --- a/test/custom.c +++ b/test/custom.c @@ -38,7 +38,7 @@ void _zb_aps_send_rsp(nwk_addr addr16, unsigned char src_ep, unsigned char dst_e unsigned short i = 0; msgp("\n_zb_aps_send_rsp()"); msg(" src_ep : 0x%X", src_ep); - msg(" src_ep : 0x%X", dst_ep); + msg(" dst_ep : 0x%X", dst_ep); msg(" cluster_id : 0x%04X", cluster_id); msg(" profile_id : 0x%04X", profile_id); msg(" payload_len : 0x%04X", payload_len); @@ -57,7 +57,7 @@ void _zb_zcl_send_rsp(nwk_addr addr16, unsigned char src_ep, unsigned char dst_e unsigned short i = 0; msgp("\n_zb_zcl_send_rsp()"); msg(" src_ep : 0x%X", src_ep); - msg(" src_ep : 0x%X", dst_ep); + msg(" dst_ep : 0x%X", dst_ep); msg(" cluster_id : 0x%04X", cluster_id); msg(" profile_id : 0x%04X", profile_id); msg(" payload_len : 0x%04X", payload_len); @@ -93,12 +93,13 @@ static int run_aps_send(MManager *mm, struct menu_data *menu) unsigned char zcl_frame_ctl = ZB_ZCL_FC_GLOBALLY_USED | ZB_ZCL_CLIENT_TO_SERVER | ZB_ZCL_FC_NOT_MANUFACTURER | ZB_ZCL_DISABLE_DEFAULT_RESPONSE; unsigned short mfg_code = 0x110A; + unsigned char cmd_id = 0x01; unsigned short payload_len = 4; unsigned char payload[4] = { 0x00, 0x01, 0x02, 0x03 }; ret = zb_aps_send(handle, dest_addr16, aps_frame_ctl, src_ep, dst_ep, cluster_id, profile_id, zcl_frame_ctl, mfg_code, - payload_len, payload, _zb_aps_send_rsp, NULL); + cmd_id, payload_len, payload, _zb_aps_send_rsp, NULL); if (ZIGBEE_ERROR_NONE != ret) { msg("zb_aps_send(0x%X) - FAILED!!!", ret); return RET_FAILURE;