From 6411ed4330dc37f711a9eec3e1fab106ee16e274 Mon Sep 17 00:00:00 2001 From: Jiwan Kim Date: Wed, 1 Feb 2017 13:46:57 +0900 Subject: [PATCH] Fix GVariant match on service method - Fix unchanged 'ay' into 'a(y)' - Update logic for zb_leave_device on test app Change-Id: I69828faecd8fcdf4833a0b262df5dea01ad67134 Signed-off-by: Jiwan Kim --- lib/zbl-dbus.c | 94 ++++++++++++++++++++++++++------------------------ test/main.c | 19 +++++----- 2 files changed, 59 insertions(+), 54 deletions(-) diff --git a/lib/zbl-dbus.c b/lib/zbl-dbus.c index 9ee7022..b12bd94 100644 --- a/lib/zbl-dbus.c +++ b/lib/zbl-dbus.c @@ -624,8 +624,8 @@ static void _zbl_signal_handler(GDBusConnection *connection, int j = 0; GVariantIter *iter = NULL; - g_variant_get(parameters, "(ay)", &iter); - while (g_variant_iter_loop(iter, "y", &value)) { + g_variant_get(parameters, "(a(y))", &iter); + while (g_variant_iter_loop(iter, "(y)", &value)) { addr64[j] = value; j++; } @@ -641,8 +641,8 @@ static void _zbl_signal_handler(GDBusConnection *connection, GVariantIter *iter = NULL; unsigned char value, status; - g_variant_get(parameters, "(ayy)", &iter, &status); - while (g_variant_iter_loop(iter, "y", &value)) { + g_variant_get(parameters, "(a(y)y)", &iter, &status); + while (g_variant_iter_loop(iter, "(y)", &value)) { addr64[j] = value; j++; } @@ -3127,15 +3127,15 @@ int zbl_get_cluster_list(ieee_addr eui64, unsigned char endpoint, unsigned short RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR); RETV_IF(NULL == service_gproxy, ZIGBEE_ERROR_IO_ERROR); - mac_builder = g_variant_builder_new(G_VARIANT_TYPE("ay")); - g_variant_builder_add(mac_builder, "y", eui64[7]); - g_variant_builder_add(mac_builder, "y", eui64[6]); - g_variant_builder_add(mac_builder, "y", eui64[5]); - g_variant_builder_add(mac_builder, "y", eui64[4]); - g_variant_builder_add(mac_builder, "y", eui64[3]); - g_variant_builder_add(mac_builder, "y", eui64[2]); - g_variant_builder_add(mac_builder, "y", eui64[1]); - g_variant_builder_add(mac_builder, "y", eui64[0]); + mac_builder = g_variant_builder_new(G_VARIANT_TYPE("a(y)")); + g_variant_builder_add(mac_builder, "(y)", eui64[7]); + g_variant_builder_add(mac_builder, "(y)", eui64[6]); + g_variant_builder_add(mac_builder, "(y)", eui64[5]); + g_variant_builder_add(mac_builder, "(y)", eui64[4]); + g_variant_builder_add(mac_builder, "(y)", eui64[3]); + g_variant_builder_add(mac_builder, "(y)", eui64[2]); + g_variant_builder_add(mac_builder, "(y)", eui64[1]); + g_variant_builder_add(mac_builder, "(y)", eui64[0]); mac_variant = g_variant_builder_end(mac_builder); g_variant_builder_unref(mac_builder); @@ -3181,27 +3181,27 @@ int zbl_get_endpoint_list(ieee_addr eui64, unsigned char list[], unsigned char * RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR); RETV_IF(NULL == service_gproxy, ZIGBEE_ERROR_IO_ERROR); - mac_builder = g_variant_builder_new(G_VARIANT_TYPE("ay")); - g_variant_builder_add(mac_builder, "y", eui64[7]); - g_variant_builder_add(mac_builder, "y", eui64[6]); - g_variant_builder_add(mac_builder, "y", eui64[5]); - g_variant_builder_add(mac_builder, "y", eui64[4]); - g_variant_builder_add(mac_builder, "y", eui64[3]); - g_variant_builder_add(mac_builder, "y", eui64[2]); - g_variant_builder_add(mac_builder, "y", eui64[1]); - g_variant_builder_add(mac_builder, "y", eui64[0]); + mac_builder = g_variant_builder_new(G_VARIANT_TYPE("a(y)")); + g_variant_builder_add(mac_builder, "(y)", eui64[7]); + g_variant_builder_add(mac_builder, "(y)", eui64[6]); + g_variant_builder_add(mac_builder, "(y)", eui64[5]); + g_variant_builder_add(mac_builder, "(y)", eui64[4]); + g_variant_builder_add(mac_builder, "(y)", eui64[3]); + g_variant_builder_add(mac_builder, "(y)", eui64[2]); + g_variant_builder_add(mac_builder, "(y)", eui64[1]); + g_variant_builder_add(mac_builder, "(y)", eui64[0]); mac_variant = g_variant_builder_end(mac_builder); g_variant_builder_unref(mac_builder); variant = g_dbus_proxy_call_sync(service_gproxy, "get_endpoint_list", - g_variant_new("(@ay)", mac_variant), + g_variant_new("(@a(y))", mac_variant), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err); if (variant) { - g_variant_get(variant, "(iay)", &result, &iter); + g_variant_get(variant, "(ia(y))", &result, &iter); DBG("ret = [0x%x]", result); - while (g_variant_iter_loop(iter, "y", &endpoint)) { + while (g_variant_iter_loop(iter, "(y)", &endpoint)) { DBG("Endpoint 0x%X", endpoint); list[i++] = endpoint; } @@ -3238,20 +3238,20 @@ int zbl_api_get_node_type(ieee_addr eui64, unsigned char *node_type) RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR); RETV_IF(NULL == service_gproxy, ZIGBEE_ERROR_IO_ERROR); - mac_builder = g_variant_builder_new(G_VARIANT_TYPE("ay")); - g_variant_builder_add(mac_builder, "y", eui64[7]); - g_variant_builder_add(mac_builder, "y", eui64[6]); - g_variant_builder_add(mac_builder, "y", eui64[5]); - g_variant_builder_add(mac_builder, "y", eui64[4]); - g_variant_builder_add(mac_builder, "y", eui64[3]); - g_variant_builder_add(mac_builder, "y", eui64[2]); - g_variant_builder_add(mac_builder, "y", eui64[1]); - g_variant_builder_add(mac_builder, "y", eui64[0]); + mac_builder = g_variant_builder_new(G_VARIANT_TYPE("a(y)")); + g_variant_builder_add(mac_builder, "(y)", eui64[7]); + g_variant_builder_add(mac_builder, "(y)", eui64[6]); + g_variant_builder_add(mac_builder, "(y)", eui64[5]); + g_variant_builder_add(mac_builder, "(y)", eui64[4]); + g_variant_builder_add(mac_builder, "(y)", eui64[3]); + g_variant_builder_add(mac_builder, "(y)", eui64[2]); + g_variant_builder_add(mac_builder, "(y)", eui64[1]); + g_variant_builder_add(mac_builder, "(y)", eui64[0]); mac_variant = g_variant_builder_end(mac_builder); g_variant_builder_unref(mac_builder); variant = g_dbus_proxy_call_sync(service_gproxy, "get_node_type", - g_variant_new("(@ay)", mac_variant), + g_variant_new("(@a(y))", mac_variant), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err); if (variant) { @@ -3498,20 +3498,24 @@ int zbl_leave_device(ieee_addr addr64, bool remove_children, bool rejoin) RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR); RETV_IF(NULL == service_gproxy, 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]); + DBG("IEEE Address = %X:%X:%X:%X:%X:%X:%X:%X", + addr64[0], addr64[1], addr64[2], addr64[3], + addr64[4], addr64[5], addr64[6], addr64[7]); + + 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(service_gproxy, "leave_request", - g_variant_new("(@ayyy)", mac_variant, _remove_children, _rejoin), + g_variant_new("(@a(y)yy)", mac_variant, _remove_children, _rejoin), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err); if (variant) { g_variant_get(variant, "(i)", &result); diff --git a/test/main.c b/test/main.c index 31add93..acfd4c2 100644 --- a/test/main.c +++ b/test/main.c @@ -701,6 +701,7 @@ static int run_select_device(MManager *mm, struct menu_data *menu) int i; int selected = (int)strtol(data_choose_target, NULL, 10); nwk_addr addr16; + ieee_addr addr64; /* Apply manual address first */ if (data_dest_addr16 && strlen(data_dest_addr16) > 0) { @@ -723,8 +724,12 @@ static int run_select_device(MManager *mm, struct menu_data *menu) for (i = 0; i < target_list_count && target_list; i++) { if (selected == (i+1)) { zb_get_network_address(target_list[i], &addr16); + zb_get_ieee_address((target_list)[i], dest_addr64); dest_addr16 = addr16; msg(" network addr [0x%04X] selected.", dest_addr16); + msg(" ieee address = %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X", + dest_addr64[0], dest_addr64[1], dest_addr64[2], dest_addr64[3], + dest_addr64[4], dest_addr64[5], dest_addr64[6], dest_addr64[7]); return RET_SUCCESS; } } @@ -766,8 +771,7 @@ static int run_disable_network(MManager *mm, struct menu_data *menu) static int run_leave_device(MManager *mm, struct menu_data *menu) { - int ret1 = ZIGBEE_ERROR_NONE; - int ret2 = ZIGBEE_ERROR_NONE; + int ret = ZIGBEE_ERROR_NONE; bool remove_children = true; bool rejoin = false; unsigned char var = 0; @@ -781,16 +785,13 @@ static int run_leave_device(MManager *mm, struct menu_data *menu) rejoin = (var == 0) ? false : true; } - ret1 = zb_leave_device(handle, st_addr64, remove_children, rejoin); - ret2 = zb_leave_device(handle, sj_addr64, remove_children, rejoin); - if (ret1 != ZIGBEE_ERROR_NONE || ret2 != ZIGBEE_ERROR_NONE) { - msg("zb_leave_device(0x%X) - FAILED!!!", ret1); - msg("zb_leave_device(0x%X) - FAILED!!!", ret2); + ret = zb_leave_device(handle, dest_addr64, remove_children, rejoin); + if (ret != ZIGBEE_ERROR_NONE) { + msg("zb_leave_device(0x%X) - FAILED!!!", ret); return RET_FAILURE; } - msg(" - zb_leave_device() ret: [0x%X]", ret1); - msg(" - zb_leave_device() ret: [0x%X]", ret2); + msg(" - zb_leave_device() ret: [0x%X]", ret); return RET_SUCCESS; } -- 2.34.1