Adjust dbus parameter with ZDO dev control
authorJiwan Kim <ji-wan.kim@samsung.com>
Mon, 6 Feb 2017 06:17:03 +0000 (15:17 +0900)
committersaerome.kim <saerome.kim@samsung.com>
Thu, 11 May 2017 09:07:20 +0000 (18:07 +0900)
Change-Id: Ic8ace2ecaaf987c03a6174c9ccb0022259e170a3
Signed-off-by: Jiwan Kim <ji-wan.kim@samsung.com>
lib/zbl-dbus.c
test/zdo-device.c

index 87976ff8af6b9cecc0816576aa88131920d3fd3b..232537a55166555faed45168aee751d9cb79f848 100644 (file)
@@ -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;
index ab25d5323519a6e2c2c38928b911ad60627e8ab5..3696a7058e781d170ed695cb18df5d6e8bd58f82 100644 (file)
@@ -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;