From: Jiwan Kim Date: Mon, 6 Feb 2017 06:17:03 +0000 (+0900) Subject: Adjust dbus parameter with ZDO dev control X-Git-Tag: submit/tizen/20170512.045637~51 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=bc8f328ea20eacd59b8b30ec3aa59189228f965d;p=platform%2Fcore%2Fapi%2Fzigbee.git Adjust dbus parameter with ZDO dev control Change-Id: Ic8ace2ecaaf987c03a6174c9ccb0022259e170a3 Signed-off-by: Jiwan Kim --- diff --git a/lib/zbl-dbus.c b/lib/zbl-dbus.c index 87976ff..232537a 100644 --- a/lib/zbl-dbus.c +++ b/lib/zbl-dbus.c @@ -1447,8 +1447,8 @@ static void _zbl_response_cb(GDBusConnection *connection, unsigned char value; GVariantIter *mac_iter = NULL; - g_variant_get(parameters, "(yayqyy)", &status, &mac_iter, &addr16, &num, &start_idx); - while (g_variant_iter_loop(mac_iter, "y", &value)) { + g_variant_get(parameters, "(ya(y)qyy)", &status, &mac_iter, &addr16, &num, &start_idx); + while (g_variant_iter_loop(mac_iter, "(y)", &value)) { addr64[j] = value; j++; } @@ -1469,14 +1469,18 @@ static void _zbl_response_cb(GDBusConnection *connection, unsigned char start_idx; unsigned char value; GVariantIter *mac_iter = NULL; + GVariantIter *assoc_iter = NULL; - g_variant_get(parameters, "(yayqyy)", &status, &mac_iter, &addr16, &num, &start_idx); - while (g_variant_iter_loop(mac_iter, "y", &value)) { + g_variant_get(parameters, "(ya(y)qyyaq)", &status, &mac_iter, + &addr16, &num, &start_idx, &assoc_iter); + while (g_variant_iter_loop(mac_iter, "(y)", &value)) { addr64[j] = value; j++; } if (NULL != mac_iter) g_variant_iter_free(mac_iter); + if (NULL != assoc_iter) + g_variant_iter_free(assoc_iter); cb(status, addr64, addr16, num, start_idx, NULL, container->userdata); } @@ -1492,11 +1496,11 @@ static void _zbl_response_cb(GDBusConnection *connection, GVariantIter *ep_iter = NULL; unsigned char *ep_list; - g_variant_get(parameters, "(qyayy)", &addr16, &status, &ep_iter, &count); + g_variant_get(parameters, "(yqa(y)y)", &status, &addr16, &ep_iter, &count); ep_list = calloc(count+1, sizeof(unsigned char)); RETM_IF(NULL == ep_list, "calloc() Fail(%d)", errno); - while (g_variant_iter_loop(ep_iter, "y", &value)) { + while (g_variant_iter_loop(ep_iter, "(y)", &value)) { ep_list[j] = value; j++; } @@ -1589,12 +1593,13 @@ static void _zbl_response_cb(GDBusConnection *connection, unsigned char status; GVariantIter *ml_iter = NULL; unsigned char *match_list = NULL; - g_variant_get(parameters, "(yqyay)", &status, &addr16, &match_len, &ml_iter); + g_variant_get(parameters, "(yqya(y))", &status, &addr16, &value, &ml_iter); + match_len = value; if (match_len > 0) { match_list = calloc(match_len+1, sizeof(unsigned char)); RETM_IF(NULL == match_list, "calloc() Fail(%d)", errno); - while (g_variant_iter_loop(ml_iter, "y", &value)) { + while (g_variant_iter_loop(ml_iter, "(y)", &value)) { match_list[j] = value; DBG("match_list[i]=%d", j, match_list[j]); j++; @@ -1603,9 +1608,13 @@ static void _zbl_response_cb(GDBusConnection *connection, g_variant_iter_free(ml_iter); } + DBG("Match count : [%d]", match_len); + DBG("Match list : [%p]", match_list); + cb(status, addr16, match_len, match_list, container->userdata); - free(match_list); + if (match_list) + free(match_list); } break; case ZBL_ZDO_NODE_DESC_REQ: { @@ -1660,7 +1669,7 @@ static void _zbl_response_cb(GDBusConnection *connection, GVariantIter *comp_iter = NULL; unsigned char *complex_desc = NULL; - g_variant_get(parameters, "(yqyay)", &status, &addr16, &length, &comp_iter); + g_variant_get(parameters, "(yqya(y))", &status, &addr16, &length, &comp_iter); if (length > 0) { complex_desc = calloc(length, sizeof(char)); if (NULL == complex_desc) { @@ -1670,7 +1679,7 @@ static void _zbl_response_cb(GDBusConnection *connection, return; } - while (g_variant_iter_loop(comp_iter, "y", &value)) { + while (g_variant_iter_loop(comp_iter, "(y)", &value)) { complex_desc[j] = value; j++; } @@ -1693,7 +1702,7 @@ static void _zbl_response_cb(GDBusConnection *connection, GVariantIter *comp_iter = NULL; unsigned char *complex_desc = NULL; - g_variant_get(parameters, "(yqyay)", &status, &addr16, &length, &comp_iter); + g_variant_get(parameters, "(yqya(y))", &status, &addr16, &length, &comp_iter); if (length > 0) { complex_desc = calloc(length, sizeof(char)); if (NULL == complex_desc) { @@ -1702,7 +1711,7 @@ static void _zbl_response_cb(GDBusConnection *connection, ERR("calloc() Fail(%d)", errno); return; } - while (g_variant_iter_loop(comp_iter, "y", &value)) { + while (g_variant_iter_loop(comp_iter, "(y)", &value)) { complex_desc[j] = value; j++; } @@ -1721,7 +1730,7 @@ static void _zbl_response_cb(GDBusConnection *connection, } break; case ZBL_ZDO_MGMT_BIND_REQ: { - zb_zdo_mgmt_bind_rsp cb = NULL; + zb_zdo_mgmt_bind_rsp cb = container->cb; unsigned char status; unsigned char value; @@ -1731,14 +1740,17 @@ static void _zbl_response_cb(GDBusConnection *connection, unsigned char binding_table_enteries; unsigned char binding_table_list_count; unsigned char start_index; + unsigned short dst_addr16 = 0; + unsigned char dst_ep = 0; GVariantIter *mac_iter = NULL; GVariantIter *rsp_iter = NULL; GVariantIter *destep_iter = NULL; zb_zdo_binding_table_h *records = NULL; - g_variant_get(parameters, "(yyyya(ayyqyay))", &status, &binding_table_enteries, - &start_index, &binding_table_list_count, &rsp_iter); + g_variant_get(parameters, "(yyyya(ayyqyqayy))", &status, + &binding_table_enteries, &start_index, + &binding_table_list_count, &rsp_iter); if (binding_table_list_count > 0) { records = calloc(binding_table_list_count, sizeof(zb_zdo_binding_table_h)); @@ -1758,8 +1770,10 @@ static void _zbl_response_cb(GDBusConnection *connection, } } for (i = 0; i < binding_table_list_count; i++) { - g_variant_iter_loop(rsp_iter, "(ayyqyay)", &mac_iter, &records[i]->src_ep, - &records[i]->cluster_id, &records[i]->dst_addr_mode, &destep_iter); + g_variant_iter_loop(rsp_iter, "(ayyqyqayy)", &mac_iter, + &records[i]->src_ep, &records[i]->cluster_id, + &records[i]->dst_addr_mode, &dst_addr16, + &destep_iter, &dst_ep); for (j = 0; j < 8; j++) { g_variant_iter_loop(mac_iter, "y", &value); records[i]->src_addr64[j] = value; @@ -1772,8 +1786,7 @@ static void _zbl_response_cb(GDBusConnection *connection, g_variant_iter_loop(destep_iter, "y", &value); records[i]->dst_addr64[j] = value; } - g_variant_iter_loop(destep_iter, "y", &value); - records[i]->dst_ep = value; + records[i]->dst_ep = dst_ep; DBG("Destination MAC Addr : %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X", records[i]->dst_addr64[7], records[i]->dst_addr64[6], records[i]->dst_addr64[5], records[i]->dst_addr64[4], @@ -1781,10 +1794,7 @@ static void _zbl_response_cb(GDBusConnection *connection, records[i]->dst_addr64[1], records[i]->dst_addr64[0]); } else if (0x01 == records[i]->dst_addr_mode) { - g_variant_iter_loop(destep_iter, "y", &value); - records[i]->dst_addr16 = value; - g_variant_iter_loop(destep_iter, "y", &value); - records[i]->dst_addr16 += (value << 8); + records[i]->dst_addr16 = dst_addr16; } if (NULL != destep_iter) g_variant_iter_free(destep_iter); @@ -1834,9 +1844,11 @@ MGMT_NWK_BIND_REQ_OUT: } } for (i = 0; i < neighbor_table_list_count; i++) { - g_variant_iter_loop(resp_iter, "(ayayyqyyyyy)", &mac_iter, &mac_iter1, - &records[i]->device_type, &records[i]->addr16, &records[i]->rx_on_when_idle, - &records[i]->relationship, &records[i]->permit_joining, &records[i]->depth, + g_variant_iter_loop(resp_iter, "(ayayyqyyyyy)", + &mac_iter, &mac_iter1, + &records[i]->device_type, &records[i]->addr16, + &records[i]->rx_on_when_idle, &records[i]->relationship, + &records[i]->permit_joining, &records[i]->depth, &records[i]->lqi); for (j = 0; j < 8; j++) { g_variant_iter_loop(mac_iter, "y", &value); @@ -1874,7 +1886,7 @@ MGMT_LQI_REQ_OUT: } break; case ZBL_ZDO_MGMT_RTG_REQ: { - zb_zdo_mgmt_rtg_rsp cb = NULL; + zb_zdo_mgmt_rtg_rsp cb = container->cb; int i; unsigned char status; @@ -1901,8 +1913,9 @@ MGMT_LQI_REQ_OUT: } for (i = 0; i < routing_table_list_count; i++) { - g_variant_iter_loop(rsp_iter, "(qyyyyq)", &records[i]->dst_addr, &records[i]->status, - &records[i]->memory_constrained, &records[i]->route_record_required, + g_variant_iter_loop(rsp_iter, "(qyyyyq)", &records[i]->dst_addr, + &records[i]->status, &records[i]->memory_constrained, + &records[i]->route_record_required, &records[i]->many_to_one, &records[i]->next_hop_addr); } if (NULL != rsp_iter) @@ -1934,7 +1947,7 @@ MGMT_NWK_RTG_REQ_OUT: DBG("_zbl_mgmt_nwk_disc_req_cb()"); - g_variant_get(parameters, "(yyyya(ayayyqyyyyy))", &status, &nwk_count, + g_variant_get(parameters, "(yyyya(ayyyyyyy))", &status, &nwk_count, &start_index, &nwk_list_count, &resp_iter); zb_zdo_network_list_record_h *records = NULL; @@ -1952,7 +1965,7 @@ MGMT_NWK_RTG_REQ_OUT: } } for (i = 0; i < nwk_list_count; i++) { - g_variant_iter_loop(resp_iter, "(ayayyqyyyyy)", &mac_iter, &records[i]->logical_channel, + g_variant_iter_loop(resp_iter, "(ayyyyyyy)", &mac_iter, &records[i]->logical_channel, &records[i]->stack_profile, &records[i]->zigbee_version, &records[i]->beacon_order, &records[i]->superframe_order, &records[i]->permit_joining); for (j = 0; j < 8; j++) { @@ -3586,20 +3599,20 @@ int zbl_nwk_addr_req(zigbee_h handle, ieee_addr addr64, unsigned char request_ty container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container); container->userdata = user_data; - mac_builder = g_variant_builder_new(G_VARIANT_TYPE("ay")); - g_variant_builder_add(mac_builder, "y", addr64[7]); - g_variant_builder_add(mac_builder, "y", addr64[6]); - g_variant_builder_add(mac_builder, "y", addr64[5]); - g_variant_builder_add(mac_builder, "y", addr64[4]); - g_variant_builder_add(mac_builder, "y", addr64[3]); - g_variant_builder_add(mac_builder, "y", addr64[2]); - g_variant_builder_add(mac_builder, "y", addr64[1]); - g_variant_builder_add(mac_builder, "y", addr64[0]); + mac_builder = g_variant_builder_new(G_VARIANT_TYPE("a(y)")); + g_variant_builder_add(mac_builder, "(y)", addr64[7]); + g_variant_builder_add(mac_builder, "(y)", addr64[6]); + g_variant_builder_add(mac_builder, "(y)", addr64[5]); + g_variant_builder_add(mac_builder, "(y)", addr64[4]); + g_variant_builder_add(mac_builder, "(y)", addr64[3]); + g_variant_builder_add(mac_builder, "(y)", addr64[2]); + g_variant_builder_add(mac_builder, "(y)", addr64[1]); + g_variant_builder_add(mac_builder, "(y)", addr64[0]); mac_variant = g_variant_builder_end(mac_builder); g_variant_builder_unref(mac_builder); g_dbus_proxy_call(zdo_dev_proxy, "nwk_addr_req", - g_variant_new("(@ayyy)", mac_variant, request_type, start_idx), + g_variant_new("(@a(y)yy)", mac_variant, request_type, start_idx), G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container); return ZIGBEE_ERROR_NONE; @@ -3969,15 +3982,15 @@ int zbl_user_desc_set(zigbee_h handle, nwk_addr addr16, unsigned char len, container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container); container->userdata = user_data; - user_desc_builder = g_variant_builder_new(G_VARIANT_TYPE("ay")); + user_desc_builder = g_variant_builder_new(G_VARIANT_TYPE("a(y)")); for (j = 0; j < len; j++) - g_variant_builder_add(user_desc_builder, "y", user_desc[j]); + g_variant_builder_add(user_desc_builder, "(y)", user_desc[j]); user_desc_variant = g_variant_builder_end(user_desc_builder); g_variant_builder_unref(user_desc_builder); g_dbus_proxy_call(zdo_dev_proxy, "user_desc_set_req", - g_variant_new("(qy@ay)", addr16, len, user_desc_variant), + g_variant_new("(qy@a(y))", addr16, len, user_desc_variant), G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container); return ZIGBEE_ERROR_NONE; @@ -3996,20 +4009,20 @@ int zbl_device_annce(zigbee_h handle, nwk_addr addr16, ieee_addr addr64, RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR); RETV_IF(NULL == zdo_dev_proxy, ZIGBEE_ERROR_IO_ERROR); - mac_builder = g_variant_builder_new(G_VARIANT_TYPE("ay")); - g_variant_builder_add(mac_builder, "y", addr64[7]); - g_variant_builder_add(mac_builder, "y", addr64[6]); - g_variant_builder_add(mac_builder, "y", addr64[5]); - g_variant_builder_add(mac_builder, "y", addr64[4]); - g_variant_builder_add(mac_builder, "y", addr64[3]); - g_variant_builder_add(mac_builder, "y", addr64[2]); - g_variant_builder_add(mac_builder, "y", addr64[1]); - g_variant_builder_add(mac_builder, "y", addr64[0]); + mac_builder = g_variant_builder_new(G_VARIANT_TYPE("a(y)")); + g_variant_builder_add(mac_builder, "(y)", addr64[7]); + g_variant_builder_add(mac_builder, "(y)", addr64[6]); + g_variant_builder_add(mac_builder, "(y)", addr64[5]); + g_variant_builder_add(mac_builder, "(y)", addr64[4]); + g_variant_builder_add(mac_builder, "(y)", addr64[3]); + g_variant_builder_add(mac_builder, "(y)", addr64[2]); + g_variant_builder_add(mac_builder, "(y)", addr64[1]); + g_variant_builder_add(mac_builder, "(y)", addr64[0]); mac_variant = g_variant_builder_end(mac_builder); g_variant_builder_unref(mac_builder); - variant = g_dbus_proxy_call_sync(zdo_dev_proxy, "device_annce", - g_variant_new("(q@ayy)", addr16, mac_variant, capability), + variant = g_dbus_proxy_call_sync(zdo_dev_proxy, "device_announce", + g_variant_new("(q@a(y)y)", addr16, mac_variant, capability), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err); if (variant) { g_variant_get(variant, "(i)", &result); @@ -4395,20 +4408,20 @@ int zbl_mgmt_leave_device(ieee_addr addr64, unsigned char remove_children, container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container); container->userdata = user_data; - mac_builder = g_variant_builder_new(G_VARIANT_TYPE("ay")); - g_variant_builder_add(mac_builder, "y", addr64[7]); - g_variant_builder_add(mac_builder, "y", addr64[6]); - g_variant_builder_add(mac_builder, "y", addr64[5]); - g_variant_builder_add(mac_builder, "y", addr64[4]); - g_variant_builder_add(mac_builder, "y", addr64[3]); - g_variant_builder_add(mac_builder, "y", addr64[2]); - g_variant_builder_add(mac_builder, "y", addr64[1]); - g_variant_builder_add(mac_builder, "y", addr64[0]); + mac_builder = g_variant_builder_new(G_VARIANT_TYPE("a(y)")); + g_variant_builder_add(mac_builder, "(y)", addr64[7]); + g_variant_builder_add(mac_builder, "(y)", addr64[6]); + g_variant_builder_add(mac_builder, "(y)", addr64[5]); + g_variant_builder_add(mac_builder, "(y)", addr64[4]); + g_variant_builder_add(mac_builder, "(y)", addr64[3]); + g_variant_builder_add(mac_builder, "(y)", addr64[2]); + g_variant_builder_add(mac_builder, "(y)", addr64[1]); + g_variant_builder_add(mac_builder, "(y)", addr64[0]); mac_variant = g_variant_builder_end(mac_builder); g_variant_builder_unref(mac_builder); - g_dbus_proxy_call(service_gproxy, "leave_req", - g_variant_new("(@ayyy)", mac_variant, remove_children, rejoin), + g_dbus_proxy_call(service_gproxy, "leave_request", + g_variant_new("(@a(y)yy)", mac_variant, remove_children, rejoin), G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container); return ZIGBEE_ERROR_NONE; diff --git a/test/zdo-device.c b/test/zdo-device.c index ab25d53..3696a70 100644 --- a/test/zdo-device.c +++ b/test/zdo-device.c @@ -136,7 +136,7 @@ static void zigbee_simple_desc_rsp(nwk_addr addr16, unsigned char len, } static void zigbee_match_desc_rsp(unsigned char status, nwk_addr addr16, - unsigned char match_length, unsigned char **match_list, void *user_data) + unsigned char match_length, unsigned char *match_list, void *user_data) { unsigned char i; msg(""); @@ -178,6 +178,14 @@ static void zigbee_zdo_complex_desc_rsp(unsigned char status, nwk_addr addr16, status, length); } +static void zigbee_zdo_user_desc_rsp(unsigned char status, nwk_addr addr16, + unsigned char length, unsigned char *user_desc, void *user_data) +{ + msg(""); + msgp("zb_zdo_user_desc_rsp() status = 0x%02X length = %d", + status, length); +} + static void zigbee_zdo_user_desc_conf(unsigned char status, void *user_data) { msg(""); @@ -232,28 +240,20 @@ static void zigbee_zdo_node_desc_rsp(unsigned char status, nwk_addr addr16, static int run_nwk_addr_req(MManager *mm, struct menu_data *menu) { - int ret1 = ZIGBEE_ERROR_NONE; - int ret2 = ZIGBEE_ERROR_NONE; + int ret = ZIGBEE_ERROR_NONE; msg("IEEE Address : %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:", st_addr64[0], st_addr64[1], st_addr64[2], st_addr64[3], st_addr64[4], st_addr64[5], st_addr64[6], st_addr64[7]); - msg("IEEE Address : %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:", - sj_addr64[0], sj_addr64[1], sj_addr64[2], sj_addr64[3], - sj_addr64[4], sj_addr64[5], sj_addr64[6], sj_addr64[7]); - ret1 = zb_zdo_nwk_addr_req(handle, st_addr64, 0x00, 0x00, + ret = zb_zdo_nwk_addr_req(handle, dest_addr64, 0x00, 0x00, zigbee_addr_rsp, NULL); - ret2 = zb_zdo_nwk_addr_req(handle, sj_addr64, 0x00, 0x00, - zigbee_addr_rsp, NULL); - if (ret1 != ZIGBEE_ERROR_NONE || ret2 != ZIGBEE_ERROR_NONE) { - msg("zb_zdo_nwk_addr_req(0x%X) - FAILED!!!", ret1); - msg("zb_zdo_nwk_addr_req(0x%X) - FAILED!!!", ret2); + if (ret != ZIGBEE_ERROR_NONE) { + msg("zb_zdo_nwk_addr_req(0x%X) - FAILED!!!", ret); return RET_FAILURE; } - msg(" - zb_zdo_nwk_addr_req() ret: [0x%X]", ret1); - msg(" - zb_zdo_nwk_addr_req() ret: [0x%X]", ret2); + msg(" - zb_zdo_nwk_addr_req() ret: [0x%X]", ret); msg(""); return RET_SUCCESS; @@ -373,7 +373,7 @@ static int run_user_desc_req(MManager *mm, struct menu_data *menu) int ret = ZIGBEE_ERROR_NONE; ret = zb_zdo_user_desc_req(handle, dest_addr16, - zigbee_zdo_complex_desc_rsp, NULL); + zigbee_zdo_user_desc_rsp, NULL); if (ZIGBEE_ERROR_NONE != ret) { msg("zb_zdo_user_desc_req(0x%X) - FAILED!!!", ret); return RET_FAILURE;