Change GDBus methods from sync to async
authorsaerome kim <saerome.kim@samsung.com>
Sun, 22 Jan 2017 23:59:37 +0000 (08:59 +0900)
committersaerome.kim <saerome.kim@samsung.com>
Thu, 11 May 2017 09:07:19 +0000 (18:07 +0900)
Change-Id: Ibb1f4ef39a5c9447a8166cb4f5aee149d9947405
Signed-off-by: saerome kim <saerome.kim@samsung.com>
common/zb-common.h
include/zigbee.h
lib/zbl-dbus.c
lib/zbl-dbus.h
lib/zbl.c
test/main.c
test/test-zigbee.c

index 846c641..e33ff42 100644 (file)
@@ -31,7 +31,7 @@
 #endif
 
 #define ZIGBEE_SERVER_NAME "org.tizen.zigbee"
-#define ZIGBEE_OBJECT_PATH "/org/tizen/zigbee"
+#define ZIGBEE_CONTROL_OBJECT_PATH "/org/tizen/zigbee/control"
 
 #define ZIGBEE_SERVICE_INTERFACE "org.tizen.zigbee.service"
 #define ZIGBEE_SERVICE_OBJECT_PATH "/org/tizen/zigbee/service"
@@ -52,7 +52,7 @@
 #define ZIGBEE_ZCL_BASIC_OBJECT_PATH "/org/tizen/zigbee/zcl_basic"
 
 #define ZIGBEE_ZCL_COLOR_CONTROL_INTERFACE "org.tizen.zigbee.zcl_color_control"
-#define ZIGBEE_ZCL_COLOR_CONTROL_OBJECT_PATH "/org/tizen/zigbee/zcl_control_control"
+#define ZIGBEE_ZCL_COLOR_CONTROL_OBJECT_PATH "/org/tizen/zigbee/zcl_color_control"
 
 #define ZIGBEE_ZCL_ON_OFF_INTERFACE "org.tizen.zigbee.zcl_on_off"
 #define ZIGBEE_ZCL_ON_OFF_OBJECT_PATH "/org/tizen/zigbee/zcl_on_off"
index bf43dd6..9245ba5 100644 (file)
@@ -80,6 +80,45 @@ int zb_create(zigbee_h *handle);
  */
 void zb_destroy(zigbee_h handle);
 
+
+/**
+ * @brief response of enabling the zigbee service
+ * @details response of enabling the zigbee service
+ *
+ * @since_tizen 3.0
+ *
+ * @param[out] status #ZB_ZDP_SUCCESS \n
+ *                    #ZB_ZDP_NOT_SUPPORTED \n
+ * @param[out] user_data user data
+ *
+ * @see zb_enable()
+ */
+typedef void (*zb_enable_cb)(unsigned char status, void *user_data);
+
+/**
+ * @brief enable the zigbee service.
+ * @details all this function to start zigbee service
+ *
+ * @since_tizen 3.0
+ *
+ * @remarks You must free all resources of the zigbee by calling zb_destroy()
+ * if zigbee service is no longer needed.
+ *
+ * @param[in] handle The handle of zigbee
+ * @param[in] cb zb_enable_cb
+ * @param[in] user_data user data
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #ZIGBEE_ERROR_NONE Successful
+ * @retval #ZIGBEE_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #ZIGBEE_ERROR_IO_ERROR Unexpected d-bus error
+ *
+ * @see zb_create()
+ * @see zb_destroy()
+ *
+ */
+int zb_enable(zigbee_h handle, zb_enable_cb cb, void *user_data);
+
 /**
  * @brief Specifies the type of function passed to zb_set_event_handler()
  * @details This function can receive events from the devices in the network.
@@ -121,8 +160,8 @@ typedef void (*zb_event_cb)(nwk_addr addr16, ieee_addr addr64, zb_event_e event_
                zb_event_data_s lparam);
 
 /**
- * @brief enable the zigbee service.
- * @details all this function to start zigbee service
+ * @brief set event handler for the zigbee service.
+ * @details to set event handler to get events from the zigbee service
  *
  * @since_tizen 3.0
  *
@@ -141,7 +180,7 @@ typedef void (*zb_event_cb)(nwk_addr addr16, ieee_addr addr64, zb_event_e event_
  * @see zb_destroy()
  *
  */
-int zb_enable(zigbee_h handle, zb_event_cb event_handler);
+int zb_set_event_cb(zigbee_h handle, zb_event_cb event_handler);
 
 /**
  * @brief disable the zigbee service.
@@ -219,6 +258,19 @@ int zb_coex_start(zigbee_h handle, unsigned char channel);
 int zb_coex_stop(zigbee_h handle);
 
 /**
+ * @brief response of forming the zigbee networl
+ * @details response of forming the zigbee networl
+ *
+ * @since_tizen 3.0
+ *
+ * @param[out] panid PAN ID
+ * @param[out] user_data user data
+ *
+ * @see zb_form_network()
+ */
+typedef void (*zb_form_network_cb)(nwk_addr panid, void *user_data);
+
+/**
  * @brief Make network to operate as zigbee coordinator
  * @details This function to enable zigbee coordinator.
  *
@@ -228,6 +280,8 @@ int zb_coex_stop(zigbee_h handle);
  * call zb_zdo_set_compatible_startup_parameters() API
  *
  * @param[in] handle The handle of zigbee
+ * @param[in] cb zb_form_network_cb
+ * @param[in] user_data user data
  *
  * @return 0 on success, otherwise a negative error value.
  * @retval #ZIGBEE_ERROR_NONE Successful
@@ -239,9 +293,22 @@ int zb_coex_stop(zigbee_h handle);
  * @see zb_disable_network()
  * @see zb_zdo_set_compatible_startup_parameters()
  */
-int zb_form_network(zigbee_h handle);
+int zb_form_network(zigbee_h handle, zb_form_network_cb cb, void *user_data);
 
 /**
+ * @brief response of disabling the zigbee networl
+ * @details response of disabling the zigbee networl
+ *
+ * @since_tizen 3.0
+ *
+ * @param[out] status #ZB_ZDP_SUCCESS \n
+ *                    #ZB_ZDP_NOT_SUPPORTED \n
+ * @param[out] user_data user data
+ *
+ * @see zb_form_network()
+ */
+typedef void (*zb_disable_network_cb)(unsigned char status, void *user_data);
+/**
  * @brief Disable network and stop zigbee coordinator role
  * @details This function to stop zigbee coordinator
  *
@@ -259,7 +326,7 @@ int zb_form_network(zigbee_h handle);
  *
  * @see zb_form_network()
  */
-int zb_disable_network(zigbee_h handle);
+int zb_disable_network(zigbee_h handle, zb_disable_network_cb cb, void *user_data);
 
 /**
  * @brief Forces a node to leave one network and to rejoin the other
index b22b9ca..cbcf3b2 100644 (file)
@@ -81,7 +81,7 @@ static GDBusProxy *_zbl_get_service_proxy(void)
 
        if (NULL == service_gproxy) {
                proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
-                       ZIGBEE_SERVER_NAME, ZIGBEE_SERVICE_OBJECT_PATH, ZIGBEE_SERVICE_INTERFACE,
+                       ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH, ZIGBEE_SERVICE_INTERFACE,
                        NULL, NULL);
        } else
                proxy = service_gproxy;
@@ -96,7 +96,7 @@ static GDBusProxy *_zbl_get_on_off_proxy(void)
 
        if (NULL == on_off_gproxy) {
                proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
-                       ZIGBEE_SERVER_NAME, ZIGBEE_ZCL_ON_OFF_OBJECT_PATH,
+                       ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH,
                        ZIGBEE_ZCL_ON_OFF_INTERFACE, NULL, NULL);
        } else
                proxy = on_off_gproxy;
@@ -111,7 +111,7 @@ static GDBusProxy *_zbl_get_door_lock_proxy(void)
 
        if (NULL == door_lock_gproxy) {
                proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
-                       ZIGBEE_SERVER_NAME, ZIGBEE_ZCL_DOOR_LOCK_OBJECT_PATH,
+                       ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH,
                        ZIGBEE_ZCL_DOOR_LOCK_INTERFACE, NULL, NULL);
        } else
                proxy = door_lock_gproxy;
@@ -126,7 +126,7 @@ static GDBusProxy *_zbl_get_level_control_proxy(void)
 
        if (NULL == level_control_gproxy) {
                proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
-                       ZIGBEE_SERVER_NAME, ZIGBEE_ZCL_LEVEL_CONTROL_OBJECT_PATH,
+                       ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH,
                        ZIGBEE_ZCL_LEVEL_CONTROL_INTERFACE, NULL, NULL);
        } else
                proxy = level_control_gproxy;
@@ -141,7 +141,7 @@ static GDBusProxy *_zbl_get_thermostat_proxy(void)
 
        if (NULL == thermostat_gproxy) {
                proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
-                       ZIGBEE_SERVER_NAME, ZIGBEE_ZCL_THERMOSTAT_OBJECT_PATH,
+                       ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH,
                        ZIGBEE_ZCL_THERMOSTAT_INTERFACE, NULL, NULL);
        } else
                proxy = thermostat_gproxy;
@@ -156,7 +156,7 @@ static GDBusProxy *_zbl_get_alarm_proxy(void)
 
        if (NULL == alarm_gproxy) {
                proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
-                       ZIGBEE_SERVER_NAME, ZIGBEE_ZCL_ALARM_OBJECT_PATH, ZIGBEE_ZCL_ALARM_INTERFACE,
+                       ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH, ZIGBEE_ZCL_ALARM_INTERFACE,
                        NULL, NULL);
        } else
                proxy = alarm_gproxy;
@@ -171,9 +171,8 @@ static GDBusProxy *_zbl_get_fan_control_proxy(void)
 
        if (NULL == fan_control_gproxy) {
                proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
-                       ZIGBEE_SERVER_NAME, ZIGBEE_ZCL_FAN_CONTROL_OBJECT_PATH,
-                       ZIGBEE_ZCL_FAN_CONTROL_INTERFACE, NULL,
-                       NULL);
+                       ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH,
+                       ZIGBEE_ZCL_FAN_CONTROL_INTERFACE, NULL, NULL);
        } else
                proxy = fan_control_gproxy;
 
@@ -187,7 +186,7 @@ static GDBusProxy *_zbl_get_mfglib_proxy(void)
 
        if (NULL == mfglib_gproxy) {
                proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
-                       ZIGBEE_SERVER_NAME, ZIGBEE_MFGLIB_CONTROL_OBJECT_PATH,
+                       ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH,
                        ZIGBEE_MFGLIB_CONTROL_INTERFACE, NULL, NULL);
        } else
                proxy = mfglib_gproxy;
@@ -202,7 +201,7 @@ static GDBusProxy *_zbl_get_zcl_global_proxy(void)
 
        if (NULL == zcl_global_proxy) {
                proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
-                       ZIGBEE_SERVER_NAME, ZIGBEE_ZCL_GLOBAL_CONTROL_OBJECT_PATH,
+                       ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH,
                        ZIGBEE_ZCL_GLOBAL_CONTROL_INTERFACE, NULL, NULL);
        } else
                proxy = zcl_global_proxy;
@@ -217,7 +216,7 @@ static GDBusProxy *_zbl_get_zdo_dev_proxy(void)
 
        if (NULL == zdo_dev_proxy) {
                proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
-                       ZIGBEE_SERVER_NAME, ZIGBEE_ZDO_DEV_CONTROL_OBJECT_PATH,
+                       ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH,
                        ZIGBEE_ZDO_DEV_CONTROL_INTERFACE, NULL, NULL);
        } else
                proxy = zdo_dev_proxy;
@@ -232,7 +231,7 @@ static GDBusProxy *_zbl_get_basic_proxy(void)
 
        if (NULL == zcl_basic_proxy) {
                proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
-                       ZIGBEE_SERVER_NAME, ZIGBEE_ZCL_BASIC_OBJECT_PATH, ZIGBEE_ZCL_BASIC_INTERFACE,
+                       ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH, ZIGBEE_ZCL_BASIC_INTERFACE,
                        NULL, NULL);
        } else
                proxy = zcl_basic_proxy;
@@ -247,7 +246,7 @@ static GDBusProxy *_zbl_get_identify_proxy(void)
 
        if (NULL == zcl_identify_proxy) {
                proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
-                       ZIGBEE_SERVER_NAME, ZIGBEE_ZCL_IDENTIFY_OBJECT_PATH,
+                       ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH,
                        ZIGBEE_ZCL_IDENTIFY_INTERFACE, NULL, NULL);
        } else
                proxy = zcl_identify_proxy;
@@ -262,7 +261,7 @@ static GDBusProxy *_zbl_get_ias_zone_proxy(void)
 
        if (NULL == zcl_ias_zone_proxy) {
                proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
-                       ZIGBEE_SERVER_NAME, ZIGBEE_ZCL_IAS_ZONE_OBJECT_PATH,
+                       ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH,
                        ZIGBEE_ZCL_IAS_ZONE_INTERFACE, NULL, NULL);
        } else
                proxy = zcl_ias_zone_proxy;
@@ -277,7 +276,7 @@ static GDBusProxy *_zbl_get_poll_control_proxy(void)
 
        if (NULL == zcl_poll_control_proxy) {
                proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
-                       ZIGBEE_SERVER_NAME, ZIGBEE_ZCL_POLL_CONTROL_OBJECT_PATH,
+                       ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH,
                        ZIGBEE_ZCL_POLL_CONTROL_INTERFACE, NULL, NULL);
        } else
                proxy = zcl_poll_control_proxy;
@@ -292,7 +291,7 @@ static GDBusProxy *_zbl_get_group_proxy(void)
 
        if (NULL == zcl_group_proxy) {
                proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
-                       ZIGBEE_SERVER_NAME, ZIGBEE_ZCL_GROUP_OBJECT_PATH, ZIGBEE_ZCL_GROUP_INTERFACE,
+                       ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH, ZIGBEE_ZCL_GROUP_INTERFACE,
                        NULL, NULL);
        } else
                proxy = zcl_group_proxy;
@@ -307,7 +306,7 @@ static GDBusProxy *_zbl_get_scene_proxy(void)
 
        if (NULL == zcl_scene_proxy) {
                proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
-                       ZIGBEE_SERVER_NAME, ZIGBEE_ZCL_SCENE_OBJECT_PATH, ZIGBEE_ZCL_SCENE_INTERFACE,
+                       ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH, ZIGBEE_ZCL_SCENE_INTERFACE,
                        NULL, NULL);
        } else
                proxy = zcl_scene_proxy;
@@ -322,7 +321,7 @@ static GDBusProxy *_zbl_get_zdo_bind_proxy(void)
 
        if (NULL == zdo_bind_proxy) {
                proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
-                       ZIGBEE_SERVER_NAME, ZIGBEE_ZDO_BIND_OBJECT_PATH, ZIGBEE_ZDO_BIND_INTERFACE,
+                       ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH, ZIGBEE_ZDO_BIND_INTERFACE,
                        NULL, NULL);
        } else
                proxy = zdo_bind_proxy;
@@ -337,7 +336,7 @@ static GDBusProxy *_zbl_get_color_control_proxy(void)
 
        if (NULL == zcl_color_control_proxy) {
                proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
-                       ZIGBEE_SERVER_NAME, ZIGBEE_ZCL_COLOR_CONTROL_OBJECT_PATH,
+                       ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH,
                        ZIGBEE_ZCL_COLOR_CONTROL_INTERFACE, NULL, NULL);
        } else
                proxy = zcl_color_control_proxy;
@@ -352,7 +351,7 @@ static GDBusProxy *_zbl_get_custom_gproxy(void)
 
        if (NULL == custom_gproxy) {
                proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
-                       ZIGBEE_SERVER_NAME, ZIGBEE_CUSTOM_OBJECT_PATH, ZIGBEE_CUSTOM_INTERFACE,
+                       ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH, ZIGBEE_CUSTOM_INTERFACE,
                        NULL, NULL);
        } else
                proxy = custom_gproxy;
@@ -977,21 +976,110 @@ static void _zbl_dbus_name_owner_notify(GObject *object, GParamSpec *pspec,
        zbl_dbus_stop();
 }
 
-int zbl_enable(zigbee_h handle, zb_event_cb event_handler)
+static void _zbl_request_cleanup(gpointer data)
 {
-       GVariant *variant = NULL;
-       unsigned char enabled;
+       zbl_req_cb_s *container = data;
+       RET_IF(NULL == container);
+
+       if (container->tid) {
+               g_source_remove(container->tid);
+               DBG("tid=%d removed");
+               container->tid = 0;
+       }
+
+#ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
+       _zbl_deregister_global_req(container->handle, container);
+#endif
+
+       free(container);
+}
+
+static gboolean _zbl_timeout_enable(gpointer p)
+{
+       zbl_req_cb_s *container = NULL;
+       zb_enable_cb cb = NULL;
+
+       DBG("zb_enable_cb()");
+
+       RETVM_IF(NULL == gdbus_conn, G_SOURCE_REMOVE, "gdbus_conn is NULL");
+       container = p;
+       RETVM_IF(NULL == container, G_SOURCE_REMOVE, "cb_container is NULL");
+       cb = container->cb;
+
+       if (false == container->found && container->cb)
+               cb(ZB_ZDP_NOT_SUPPORTED, container->userdata);
+
+       container->tid = 0;
+
+       g_dbus_connection_signal_unsubscribe(gdbus_conn, container->sid);
+       DBG("container->sid=%d unsubscribed");
+       container->sid = 0;
+
+       return G_SOURCE_REMOVE;
+}
+
+static void _zbl_enable_cb(GDBusConnection *connection,
+               const gchar *sender_name, const gchar *object_path, const gchar *interface_name,
+               const gchar *signal_name, GVariant *parameters, gpointer user_data)
+{
+       zbl_req_cb_s *container = user_data;
+       zb_enable_cb cb = container->cb;
+
+       unsigned char ret = ZB_ZDP_SUCCESS;
+
+       container->found = true;
+
+       DBG("_zbl_enable_cb");
+
+       g_variant_get(parameters, "(b)", &ret);
+
+       if (cb)
+               cb(ret, container->userdata);
+
+       if (container->sid)
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, container->sid);
+}
+
+
+int zbl_enable(zigbee_h handle, zb_enable_cb cb, void *user_data)
+{
+       int sub_id, to;
+       zbl_req_cb_s *container;
 
-       RETV_IF(NULL == handle, ZIGBEE_ERROR_INVALID_PARAMETER);
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == service_gproxy, ZIGBEE_ERROR_IO_ERROR);
-       handle->event_handler = event_handler;
-       variant = g_dbus_proxy_call_sync(service_gproxy, "enable",
-                               NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &enabled);
-               DBG("ZigBee enabled status 0x%x", enabled);
+
+       DBG("zbl_enable()");
+
+       container = calloc(1, sizeof(zbl_req_cb_s));
+       RETVM_IF(NULL == container, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
+
+       to = zbl_dbus_get_timeout(service_gproxy);
+       sub_id = g_dbus_connection_signal_subscribe((GDBusConnection*)gdbus_conn, NULL,
+                       ZIGBEE_SERVICE_INTERFACE,  "enabled", ZIGBEE_CONTROL_OBJECT_PATH, NULL, 0,
+                       _zbl_enable_cb, container, _zbl_request_cleanup);
+
+       if (0 == sub_id) {
+               ERR("g_dbus_connection_signal_subscribe() Fail");
+               free(container);
+               return ZIGBEE_ERROR_IO_ERROR;
        }
+
+       container->cb = cb;
+       container->sid = sub_id;
+       container->tid = g_timeout_add_seconds(to, _zbl_timeout_enable, container);
+       container->userdata = user_data;
+
+       g_dbus_proxy_call(service_gproxy, "enable", NULL, G_DBUS_CALL_FLAGS_NONE, to,
+               NULL, NULL, container);
+
+       return ZIGBEE_ERROR_NONE;
+}
+
+int zbl_set_event_cb(zigbee_h handle, zb_event_cb event_handler)
+{
+       RETV_IF(NULL == handle, ZIGBEE_ERROR_INVALID_PARAMETER);
+       handle->event_handler = event_handler;
        return ZIGBEE_ERROR_NONE;
 }
 
@@ -999,7 +1087,7 @@ int zbl_disable(void)
 {
        DBG("zbl_disable()");
 
-       if (0 <= zbl_ref_count) {
+       if (0 >= zbl_ref_count) {
                WARN("dbus does not initiaized\n");
                return ZIGBEE_ERROR_NO_DATA;
        }
@@ -1012,8 +1100,8 @@ int zbl_disable(void)
        if (gdbus_conn) {
 
                if (service_gproxy) {
-                       g_dbus_proxy_call_sync(service_gproxy, "disable",
-                                       NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
+                       g_dbus_proxy_call(service_gproxy, "disable", NULL, G_DBUS_CALL_FLAGS_NONE,
+                               -1, NULL, NULL, NULL);
 
                        g_object_unref(service_gproxy);
                        service_gproxy = NULL;
@@ -1049,17 +1137,12 @@ int zbl_disable(void)
 
 int zbl_hw_reset(void)
 {
-       GVariant *variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
-
        DBG("zbl_hw_reset()");
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == service_gproxy, ZIGBEE_ERROR_IO_ERROR);
 
-       variant = g_dbus_proxy_call_sync(service_gproxy, "zb_hw_reset",
-                               NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-       if (variant)
-               g_variant_get(variant, "(y)", &status);
+       g_dbus_proxy_call(service_gproxy, "zb_hw_reset", NULL,
+               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
        return ZIGBEE_ERROR_NONE;
 }
 
@@ -1377,86 +1460,146 @@ int zbl_get_all_device_info(zb_end_device_info_h **dev_list, unsigned char* num)
 
 int zbl_coex_start(unsigned char channel)
 {
-       GVariant *variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
-
        DBG("zbl_coex_start()");
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == service_gproxy, ZIGBEE_ERROR_IO_ERROR);
 
-       variant = g_dbus_proxy_call_sync(service_gproxy, "coex_start",
-                               g_variant_new("(y)", channel), G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-
-       if (variant)
-               g_variant_get(variant, "(y)", &status);
+       g_dbus_proxy_call(service_gproxy, "coex_start", g_variant_new("(y)", channel),
+               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
 
        return ZIGBEE_ERROR_NONE;
 }
 
 int zbl_coex_stop(void)
 {
-       GVariant *variant = NULL;
-       int ret = 0;
-
        DBG("zbl_coex_stop()");
-
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == service_gproxy, ZIGBEE_ERROR_IO_ERROR);
 
-       variant = g_dbus_proxy_call_sync(service_gproxy, "coex_stop",
-                               NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-
-       if (variant)
-               g_variant_get(variant, "(q)", &ret);
+       g_dbus_proxy_call(service_gproxy, "coex_stop", NULL, G_DBUS_CALL_FLAGS_NONE,
+               -1, NULL, NULL, NULL);
 
-       return ret;
+       return ZIGBEE_ERROR_NONE;
 }
 
-int zbl_form_network(zigbee_h handle)
+static void _zbl_form_network_cb(GDBusConnection *connection,
+               const gchar *sender_name, const gchar *object_path, const gchar *interface_name,
+               const gchar *signal_name, GVariant *parameters, gpointer user_data)
 {
-       GVariant *variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
+       zbl_req_cb_s *container = user_data;
+       zb_form_network_cb cb = container->cb;
+
+       nwk_addr panid;
+
+       container->found = true;
+
+       DBG("_zbl_form_network_cb()");
+
+       g_variant_get(parameters, "(q)", &panid);
+
+       if (cb)
+               cb(panid, container->userdata);
+
+       if (container->sid)
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, container->sid);
+}
+
 
-       DBG("zbl_form_network()");
+int zbl_form_network(zigbee_h handle, zb_form_network_cb cb, void *user_data)
+{
+       int sub_id, to;
+       zbl_req_cb_s *container;
 
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == service_gproxy, ZIGBEE_ERROR_IO_ERROR);
 
-       /* Send enable command : sync */
-       variant = g_dbus_proxy_call_sync(service_gproxy, "form_network",
-                               NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("Form network Status 0x%x", status);
+       DBG("%s:%s", __func__, __LINE__);
+
+       container = calloc(1, sizeof(zbl_req_cb_s));
+       RETVM_IF(NULL == container, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
+
+       to = zbl_dbus_get_timeout(service_gproxy);
+       sub_id = g_dbus_connection_signal_subscribe((GDBusConnection*)gdbus_conn, NULL,
+                       ZIGBEE_SERVICE_INTERFACE,  "form_network_done", ZIGBEE_SERVICE_OBJECT_PATH, NULL, 0,
+                       _zbl_form_network_cb, container, _zbl_request_cleanup);
+
+       if (0 == sub_id) {
+               ERR("g_dbus_connection_signal_subscribe() Fail");
+               free(container);
+               return ZIGBEE_ERROR_IO_ERROR;
        }
 
-       return status;
+       container->cb = cb;
+       container->sid = sub_id;
+       container->tid = g_timeout_add_seconds(to, _zbl_timeout_enable, container);
+       container->userdata = user_data;
+
+       g_dbus_proxy_call(service_gproxy, "form_network", NULL, G_DBUS_CALL_FLAGS_NONE, to,
+               NULL, NULL, container);
+
+       return ZIGBEE_ERROR_NONE;
 }
 
-int zbl_disable_network(void)
+static void _zbl_disable_network_cb(GDBusConnection *connection,
+               const gchar *sender_name, const gchar *object_path, const gchar *interface_name,
+               const gchar *signal_name, GVariant *parameters, gpointer user_data)
 {
-       GVariant *variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
+       zbl_req_cb_s *container = user_data;
+       zb_form_network_cb cb = container->cb;
 
-       DBG("zbl_disable_network()");
+       unsigned char ret = ZB_ZDP_SUCCESS;
+
+       container->found = true;
+
+       DBG("_zbl_disable_network_cb()");
+
+       g_variant_get(parameters, "(y)", &ret);
+
+       if (cb)
+               cb(ret, container->userdata);
+
+       if (container->sid)
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, container->sid);
+}
+
+
+int zbl_disable_network(zigbee_h handle, zb_disable_network_cb cb, void *user_data)
+{
+       int sub_id, to;
+       zbl_req_cb_s *container;
 
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == service_gproxy, ZIGBEE_ERROR_IO_ERROR);
 
-       variant = g_dbus_proxy_call_sync(service_gproxy, "leave_network",
-                               NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("disable network Status 0x%x", status);
+       DBG("zbl_disable_network()");
+
+       container = calloc(1, sizeof(zbl_req_cb_s));
+       RETVM_IF(NULL == container, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
+
+       to = zbl_dbus_get_timeout(service_gproxy);
+       sub_id = g_dbus_connection_signal_subscribe((GDBusConnection*)gdbus_conn, NULL,
+                       ZIGBEE_SERVICE_INTERFACE,  "leave_network_done", ZIGBEE_SERVICE_OBJECT_PATH, NULL, 0,
+                       _zbl_disable_network_cb, container, _zbl_request_cleanup);
+
+       if (0 == sub_id) {
+               ERR("g_dbus_connection_signal_subscribe() Fail");
+               free(container);
+               return ZIGBEE_ERROR_IO_ERROR;
        }
 
-       return status;
+       container->cb = cb;
+       container->sid = sub_id;
+       container->tid = g_timeout_add_seconds(to, _zbl_timeout_enable, container);
+       container->userdata = user_data;
+
+       g_dbus_proxy_call(service_gproxy, "leave_network", NULL, G_DBUS_CALL_FLAGS_NONE, to,
+               NULL, NULL, container);
+
+       return ZIGBEE_ERROR_NONE;
 }
 
 int zbl_leave_device(ieee_addr addr64, bool remove_children, bool rejoin)
 {
-       GVariant *variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
        GVariantBuilder *mac_builder = NULL;
        GVariant* mac_variant = NULL;
        unsigned char _remove_children = (remove_children) ? 1 : 0;
@@ -1476,34 +1619,23 @@ int zbl_leave_device(ieee_addr addr64, bool remove_children, bool rejoin)
        g_variant_builder_add(mac_builder, "y", addr64[0]);
        mac_variant = g_variant_builder_end(mac_builder);
 
-       variant = g_dbus_proxy_call_sync(service_gproxy, "leave_req",
-                               g_variant_new("(@ayyy)", mac_variant, _remove_children, _rejoin),
-                               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(b)", &status);
-               DBG("zigbee_remove_device 0x%x", status);
-       }
+       g_dbus_proxy_call(service_gproxy, "leave_req",
+               g_variant_new("(@ayyy)", mac_variant, _remove_children, _rejoin),
+               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
 
-       return status;
+       return ZIGBEE_ERROR_NONE;
 }
 
 int zbl_permit_join(unsigned char duration, bool broadcast)
 {
-       GVariant *variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
-
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == service_gproxy, ZIGBEE_ERROR_IO_ERROR);
 
-       variant = g_dbus_proxy_call_sync(service_gproxy, "permit_join",
-                               g_variant_new("(ib)", duration, broadcast),
-                               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("permit join Status 0x%x", status);
-       }
+       g_dbus_proxy_call(service_gproxy, "permit_join",
+               g_variant_new("(ib)", duration, broadcast),
+               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
 
-       return status;
+       return ZIGBEE_ERROR_NONE;
 }
 
 static gboolean _zbl_timeout_addr_req(gpointer p)
@@ -1530,24 +1662,6 @@ static gboolean _zbl_timeout_addr_req(gpointer p)
        return G_SOURCE_REMOVE;
 }
 
-static void _zbl_request_cleanup(gpointer data)
-{
-       zbl_req_cb_s *container = data;
-       RET_IF(NULL == container);
-
-       if (container->tid) {
-               g_source_remove(container->tid);
-               DBG("tid=%d removed");
-               container->tid = 0;
-       }
-
-#ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
-       _zbl_deregister_global_req(container->handle, container);
-#endif
-
-       free(container);
-}
-
 static void _zbl_addr_req_cb(GDBusConnection *connection,
                const gchar *sender_name, const gchar *object_path, const gchar *interface_name,
                const gchar *signal_name, GVariant *parameters, gpointer user_data)
@@ -2482,8 +2596,8 @@ int zbl_user_desc_set(zigbee_h handle, nwk_addr addr16, unsigned char len,
 
        user_desc_variant = g_variant_builder_end(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_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
+       g_dbus_proxy_call(zdo_dev_proxy, "user_desc_set_req", g_variant_new("(qy@ay)", addr16,
+               len, user_desc_variant), G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
 
        return ZIGBEE_ERROR_NONE;
 }
@@ -2491,8 +2605,6 @@ int zbl_user_desc_set(zigbee_h handle, nwk_addr addr16, unsigned char len,
 int zbl_device_annce(zigbee_h handle, nwk_addr addr16, ieee_addr addr64,
                unsigned char capability)
 {
-       GVariant *variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
        GVariantBuilder *mac_builder = NULL;
        GVariant* mac_variant = NULL;
 
@@ -2510,15 +2622,12 @@ int zbl_device_annce(zigbee_h handle, nwk_addr addr16, ieee_addr addr64,
        g_variant_builder_add(mac_builder, "y", addr64[0]);
        mac_variant = g_variant_builder_end(mac_builder);
 
-       variant = g_dbus_proxy_call_sync(zdo_dev_proxy, "device_annce",
-                               g_variant_new("(q@ayy)", addr16, mac_variant, capability),
-                               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("zbl_device_annce Status 0x%x", status);
-       }
+       g_dbus_proxy_call(zdo_dev_proxy, "device_annce",
+               g_variant_new("(q@ayy)", addr16, mac_variant, capability),
+               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
 
-       return status;
+
+       return ZIGBEE_ERROR_NONE;
 }
 
 static gboolean _zbl_timeout_bind_req_req(gpointer p)
@@ -2636,21 +2745,21 @@ int zbl_bind_req(nwk_addr dst_addr16, ieee_addr src_addr64,
 
 static gboolean _zbl_timeout_unbind_req_req(gpointer p)
 {
-       zbl_req_cb_s *con = NULL;
+       zbl_req_cb_s *container = NULL;
        zb_zdo_unbind_rsp cb = NULL;
 
        RETVM_IF(NULL == gdbus_conn, G_SOURCE_REMOVE, "gdbus_conn is NULL");
-       con = p;
-       RETVM_IF(NULL == con, G_SOURCE_REMOVE, "cb_container is NULL)");
-       cb = con->cb;
+       container = p;
+       RETVM_IF(NULL == container, G_SOURCE_REMOVE, "cb_container is NULL)");
+       cb = container->cb;
 
-       if (false == con->found && con->cb)
-               cb(ZB_ZDP_TIMEOUT, con->userdata);
+       if (false == container->found && container->cb)
+               cb(ZB_ZDP_TIMEOUT, container->userdata);
 
-       con->tid = 0;
+       container->tid = 0;
 
-       g_dbus_connection_signal_unsubscribe(gdbus_conn, con->sid);
-       con->sid = 0;
+       g_dbus_connection_signal_unsubscribe(gdbus_conn, container->sid);
+       container->sid = 0;
 
        return G_SOURCE_REMOVE;
 }
@@ -2749,32 +2858,32 @@ int zbl_unbind_req(nwk_addr dst_addr16,
 
 static gboolean _zbl_timeout_mgmt_nwk_disc_req(gpointer p)
 {
-       zbl_req_cb_s *con = NULL;
+       zbl_req_cb_s *container = NULL;
        zb_zdo_mgmt_nwk_disc_rsp cb = NULL;
        zb_zdo_network_list_record_h *records = NULL;
 
        RETVM_IF(NULL == gdbus_conn, G_SOURCE_REMOVE, "gdbus_conn is NULL");
-       con = p;
-       RETVM_IF(NULL == con, G_SOURCE_REMOVE, "cb_container is NULL)");
-       cb = con->cb;
+       container = p;
+       RETVM_IF(NULL == container, G_SOURCE_REMOVE, "cb_container is NULL)");
+       cb = container->cb;
 
        records = calloc(1, sizeof(zb_zdo_network_list_record_h));
        if (records) {
                records[0] = calloc(1, sizeof(struct zb_zdo_network_list_record_s));
        }
 
-       if (false == con->found && con->cb)
-               cb(0, 0, 0, 0, records, con->userdata);
+       if (false == container->found && container->cb)
+               cb(0, 0, 0, 0, records, container->userdata);
 
        if (records[0])
                free(records[0]);
        if (records)
                free(records);
 
-       con->tid = 0;
+       container->tid = 0;
 
-       g_dbus_connection_signal_unsubscribe(gdbus_conn, con->sid);
-       con->sid = 0;
+       g_dbus_connection_signal_unsubscribe(gdbus_conn, container->sid);
+       container->sid = 0;
 
        return G_SOURCE_REMOVE;
 }
@@ -2874,7 +2983,7 @@ int zbl_mgmt_nwk_disc_req(nwk_addr addr16, unsigned int scan_channels,
 
        g_dbus_proxy_call(zdo_dev_proxy, "nwk_disc_req",
                g_variant_new("(quyqy)", addr16, scan_channels, scan_duration, scan_count, start_idx),
-               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
 
        return ZIGBEE_ERROR_NONE;
 }
@@ -3349,8 +3458,6 @@ int zbl_mgmt_leave_device(ieee_addr addr64, unsigned char remove_children,
        int sub_id, to;
        zbl_req_cb_s *container;
 
-       GVariant *variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
        GVariantBuilder *mac_builder = NULL;
        GVariant* mac_variant = NULL;
 
@@ -3388,15 +3495,11 @@ int zbl_mgmt_leave_device(ieee_addr addr64, unsigned char remove_children,
        g_variant_builder_add(mac_builder, "y", addr64[0]);
        mac_variant = g_variant_builder_end(mac_builder);
 
-       variant = g_dbus_proxy_call_sync(service_gproxy, "leave_req",
-                               g_variant_new("(@ayyy)", mac_variant, remove_children, rejoin),
-                               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(b)", &status);
-               DBG("Status 0x%x", status);
-       }
+       g_dbus_proxy_call(service_gproxy, "leave_req",
+               g_variant_new("(@ayyy)", mac_variant, remove_children, rejoin),
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
 
-       return status;
+       return ZIGBEE_ERROR_NONE;
 }
 
 static gboolean _zbl_timeout_mgmt_permit_joining_req(gpointer p)
@@ -3444,9 +3547,6 @@ int zbl_mgmt_permit_joining_req(nwk_addr addr16, unsigned char duration,
        int sub_id, to;
        zbl_req_cb_s *container;
 
-       GVariant *variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
-
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == service_gproxy, ZIGBEE_ERROR_IO_ERROR);
 
@@ -3470,15 +3570,11 @@ int zbl_mgmt_permit_joining_req(nwk_addr addr16, unsigned char duration,
        container->tid = g_timeout_add_seconds(to, _zbl_timeout_mgmt_permit_joining_req, container);
        container->userdata = user_data;
 
-       variant = g_dbus_proxy_call_sync(zdo_dev_proxy, "mgmt_permit_join_req",
-                               g_variant_new("(qyy)", addr16, duration, tc_significance),
-                               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("Status 0x%x", status);
-       }
+       g_dbus_proxy_call(zdo_dev_proxy, "mgmt_permit_join_req",
+               g_variant_new("(qyy)", addr16, duration, tc_significance),
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
 
-       return status;
+       return ZIGBEE_ERROR_NONE;
 }
 
 static gboolean _zbl_timeout_aps_send(gpointer p)
@@ -3554,10 +3650,8 @@ int zbl_aps_send(nwk_addr addr16, unsigned char aps_frame_ctl,
        int sub_id, to, i;
        zbl_req_cb_s *container;
 
-       GVariant *variant = NULL;
        GVariantBuilder *payload_builder = NULL;
        GVariant *payload_variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
 
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == custom_gproxy, ZIGBEE_ERROR_IO_ERROR);
@@ -3589,18 +3683,12 @@ int zbl_aps_send(nwk_addr addr16, unsigned char aps_frame_ctl,
        }
        payload_variant = g_variant_builder_end(payload_builder);
 
-       variant = g_dbus_proxy_call_sync(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, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("Status 0x%x", status);
-               g_variant_unref(variant);
-       }
+       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);
 
-       return status;
+       return ZIGBEE_ERROR_NONE;
 }
 
 static gboolean _zbl_timeout_zcl_send(gpointer p)
@@ -3674,10 +3762,8 @@ 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;
 
-       GVariant *variant = NULL;
        GVariantBuilder *payload_builder = NULL;
        GVariant *payload_variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
 
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == custom_gproxy, ZIGBEE_ERROR_IO_ERROR);
@@ -3709,17 +3795,11 @@ int zbl_zcl_send(nwk_addr addr16, unsigned char src_ep, unsigned char dst_ep,
        }
        payload_variant = g_variant_builder_end(payload_builder);
 
-       variant = g_dbus_proxy_call_sync(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, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("Status 0x%x", status);
-               g_variant_unref(variant);
-       }
+       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);
 
-       return status;
+       return ZIGBEE_ERROR_NONE;
 }
 
 static gboolean _zbl_timeout_send_to_local(gpointer p)
@@ -3784,10 +3864,8 @@ int zbl_send_to_local(unsigned short length, unsigned char *data,
        int sub_id, to, i;
        zbl_req_cb_s *container;
 
-       GVariant *variant = NULL;
        GVariantBuilder *payload_builder = NULL;
        GVariant *payload_variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
 
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == custom_gproxy, ZIGBEE_ERROR_IO_ERROR);
@@ -3819,16 +3897,11 @@ int zbl_send_to_local(unsigned short length, unsigned char *data,
        }
        payload_variant = g_variant_builder_end(payload_builder);
 
-       variant = g_dbus_proxy_call_sync(custom_gproxy, "send_to_local",
-                               g_variant_new("(@ay)", payload_variant),
-                               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("Status 0x%x", status);
-               g_variant_unref(variant);
-       }
+       g_dbus_proxy_call(custom_gproxy, "send_to_local",
+               g_variant_new("(@ay)", payload_variant),
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
 
-       return status;
+       return ZIGBEE_ERROR_NONE;
 }
 
 static gboolean _zbl_timeout_read_attributes_req(gpointer p)
@@ -4088,7 +4161,6 @@ int zbl_write_attr_req(zigbee_h handle, nwk_addr addr16, unsigned char src_ep, u
 {
        int sub_id, to;
        zbl_req_cb_s *container;
-       unsigned char status = ZIGBEE_ERROR_NONE;
 #ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
        zb_event_global_default_rsp_s *global_req = NULL;
 #endif
@@ -4098,7 +4170,6 @@ int zbl_write_attr_req(zigbee_h handle, nwk_addr addr16, unsigned char src_ep, u
 
        DBG("zbl_write_attr_req()");
 
-       GVariant *variant = NULL;
        GVariantBuilder *rec_builder = NULL;
        GVariant *rec_variant = NULL;
 
@@ -4234,21 +4305,16 @@ int zbl_write_attr_req(zigbee_h handle, nwk_addr addr16, unsigned char src_ep, u
        _zbl_register_global_req(handle, container);
 #endif
 
-       variant = g_dbus_proxy_call_sync(zcl_global_proxy, "write_attributes_req",
+       g_dbus_proxy_call(zcl_global_proxy, "write_attributes_req",
                g_variant_new("(@ayiqqyyy)", rec_variant, writeAttributeIndex, addr16,
                cluster_id, zcl_frame_ctl, src_ep, dst_ep), G_DBUS_CALL_FLAGS_NONE,
-               -1, NULL, NULL);
-
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("read_attr_req Status 0x%02X", status);
-       }
+               to, NULL, NULL, container);
 
        free(isString);
        free(dataSize);
        free(writeAttribute);
 
-       return status;
+       return ZIGBEE_ERROR_NONE;
 }
 
 int zbl_wattr_undivided_req(zigbee_h handle, nwk_addr addr16, unsigned char src_ep,
@@ -4258,7 +4324,6 @@ int zbl_wattr_undivided_req(zigbee_h handle, nwk_addr addr16, unsigned char src_
 {
        int sub_id, to;
        zbl_req_cb_s *container;
-       unsigned char status = ZIGBEE_ERROR_NONE;
 #ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
        zb_event_global_default_rsp_s *global_req = NULL;
 #endif
@@ -4268,7 +4333,6 @@ int zbl_wattr_undivided_req(zigbee_h handle, nwk_addr addr16, unsigned char src_
 
        DBG("zbl_wattr_undivided_req()");
 
-       GVariant *variant = NULL;
        GVariantBuilder *rec_builder = NULL;
        GVariant *rec_variant = NULL;
 
@@ -4404,35 +4468,27 @@ int zbl_wattr_undivided_req(zigbee_h handle, nwk_addr addr16, unsigned char src_
        _zbl_register_global_req(handle, container);
 #endif
 
-       variant = g_dbus_proxy_call_sync(zcl_global_proxy, "write_attributes_undivided_req",
+        g_dbus_proxy_call(zcl_global_proxy, "write_attributes_undivided_req",
                g_variant_new("(@ayiqqyyy)", rec_variant, writeAttributeIndex, addr16,
                cluster_id, zcl_frame_ctl, src_ep, dst_ep), G_DBUS_CALL_FLAGS_NONE,
-               -1, NULL, NULL);
-
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("read_attr_req Status 0x%02X", status);
-       }
+               to, NULL, NULL, container);
 
        free(isString);
        free(dataSize);
        free(writeAttribute);
 
-       return status;
+       return ZIGBEE_ERROR_NONE;
 }
 
 int zbl_wattr_req_no_rsp(zigbee_h handle, nwk_addr addr16, unsigned char src_ep,
                unsigned char dst_ep, unsigned char zcl_frame_ctl, unsigned short cluster_id,
                write_attr_record_h *records, int records_len)
 {
-       unsigned char status = ZIGBEE_ERROR_NONE;
-
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zcl_global_proxy, ZIGBEE_ERROR_IO_ERROR);
 
        DBG("zbl_wattr_req_no_rsp()");
 
-       GVariant *variant = NULL;
        GVariantBuilder *rec_builder = NULL;
        GVariant *rec_variant = NULL;
 
@@ -4516,21 +4572,16 @@ int zbl_wattr_req_no_rsp(zigbee_h handle, nwk_addr addr16, unsigned char src_ep,
 
        rec_variant = g_variant_builder_end(rec_builder);
 
-       g_dbus_proxy_call_sync(zcl_global_proxy, "write_attributes_no_rep",
+       g_dbus_proxy_call(zcl_global_proxy, "write_attributes_no_rep",
                g_variant_new("(@ayiqqyyy)", rec_variant, writeAttributeIndex, addr16,
                cluster_id, zcl_frame_ctl, src_ep, dst_ep), G_DBUS_CALL_FLAGS_NONE,
-               -1, NULL, NULL);
-
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("write_attributes_no_rep Status 0x%02X", status);
-       }
+               -1, NULL, NULL, NULL);
 
        free(isString);
        free(dataSize);
        free(writeAttribute);
 
-       return status;
+       return ZIGBEE_ERROR_NONE;
 }
 
 static gboolean _zbl_timeout_configure_reporting(gpointer p)
@@ -4637,8 +4688,7 @@ int zbl_configure_reporting(zigbee_h handle, nwk_addr addr16, unsigned char src_
        int j = 0;
        int len = 0;
        int count = 0;
-       unsigned char status = ZIGBEE_ERROR_NONE;
-       GVariant *variant = NULL;
+
        GVariantBuilder *rec_builder = NULL;
        GVariant *rec_variant = NULL;
 
@@ -4721,15 +4771,11 @@ int zbl_configure_reporting(zigbee_h handle, nwk_addr addr16, unsigned char src_
        }
        rec_variant = g_variant_builder_end(rec_builder);
 
-       variant = g_dbus_proxy_call_sync(zcl_global_proxy, "configure_reporting_req",
-                               g_variant_new("(@ayqqqyyy)", rec_variant, count, addr16,
-                               cluster_id, zcl_frame_ctl, src_ep, dst_ep), G_DBUS_CALL_FLAGS_NONE,
-                               -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("zbl_configure_reporting Status = 0x%02X", status);
-       }
-       return status;
+       g_dbus_proxy_call(zcl_global_proxy, "configure_reporting_req",
+               g_variant_new("(@ayqqqyyy)", rec_variant, count, addr16, cluster_id,
+               zcl_frame_ctl, src_ep, dst_ep), G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+
+       return ZIGBEE_ERROR_NONE;
 }
 
 static gboolean _zbl_timeout_read_configure_reporting(gpointer p)
@@ -4876,9 +4922,7 @@ int zbl_read_configure_reporting(zigbee_h handle, nwk_addr addr16, unsigned char
        int i = 0;
        int j = 0;
        int size_of_allo = 0;
-       unsigned short idx = ZIGBEE_ERROR_NONE;
-       unsigned char status = 0;
-       GVariant *variant = NULL;
+       unsigned short idx = 0;
        GVariantBuilder *rec_builder = NULL;
        GVariant *rec_variant = NULL;
        unsigned char *read_attributes;
@@ -4968,18 +5012,13 @@ int zbl_read_configure_reporting(zigbee_h handle, nwk_addr addr16, unsigned char
 
        rec_variant = g_variant_builder_end(rec_builder);
 
-       variant = g_dbus_proxy_call_sync(zcl_global_proxy, "read_configure_reporting",
-                               g_variant_new("(@ayqqqyyy)", rec_variant, idx, addr16,
-                               cluster_id, zcl_frame_ctl, src_ep, dst_ep),
-                               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("zbl_read_configure_reporting Status = 0x%0.2X", status);
-       }
+       g_dbus_proxy_call(zcl_global_proxy, "read_configure_reporting",
+               g_variant_new("(@ayqqqyyy)", rec_variant, idx, addr16, cluster_id, zcl_frame_ctl,
+               src_ep, dst_ep), G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
 
        free(read_attributes);
 
-       return status;
+       return ZIGBEE_ERROR_NONE;
 }
 
 static gboolean _zbl_timeout_discover_attributes_req(gpointer p)
@@ -5137,21 +5176,21 @@ int zbl_discover_attr_req(zigbee_h handle, unsigned short addr16, unsigned char
 
 static gboolean _zbl_timeout_discover_cmds(gpointer p)
 {
-       zbl_req_cb_s *con = NULL;
+       zbl_req_cb_s *container = NULL;
        zb_zcl_global_discover_cmds_rsp cb = NULL;
 
        RETVM_IF(NULL == gdbus_conn, G_SOURCE_REMOVE, "gdbus_conn is NULL");
-       con = p;
-       RETVM_IF(NULL == con, G_SOURCE_REMOVE, "cb_container is NULL");
-       cb = con->cb;
+       container = p;
+       RETVM_IF(NULL == container, G_SOURCE_REMOVE, "cb_container is NULL");
+       cb = container->cb;
 
-       if (false == con->found && con->cb)
-               cb(0, 0, 0, 0, NULL, 0, con->userdata);
+       if (false == container->found && container->cb)
+               cb(0, 0, 0, 0, NULL, 0, container->userdata);
 
-       con->tid = 0;
+       container->tid = 0;
 
-       g_dbus_connection_signal_unsubscribe(gdbus_conn, con->sid);
-       con->sid = 0;
+       g_dbus_connection_signal_unsubscribe(gdbus_conn, container->sid);
+       container->sid = 0;
 
        return G_SOURCE_REMOVE;
 }
@@ -5161,10 +5200,10 @@ static void _zbl_discover_cmds_cb(GDBusConnection *connection,
                const gchar *signal_name, GVariant *parameters, gpointer user_data)
 {
        DBG("_zbl_discover_cmds_cb");
-       zbl_req_cb_s *con = user_data;
-       RETM_IF(NULL == con, "cb_container is NULL");
+       zbl_req_cb_s *container = user_data;
+       RETM_IF(NULL == container, "cb_container is NULL");
 
-       zb_zcl_global_discover_cmds_rsp cb = con->cb;
+       zb_zcl_global_discover_cmds_rsp cb = container->cb;
        nwk_addr addr16;
        unsigned char ep;
 
@@ -5188,14 +5227,14 @@ static void _zbl_discover_cmds_cb(GDBusConnection *connection,
                j++;
        }
 
-       con->found = true;
+       container->found = true;
        if (cb)
-               cb(addr16, ep, cluster_id, discoveryComplete, cmd_data, cmd_len, con->userdata);
+               cb(addr16, ep, cluster_id, discoveryComplete, cmd_data, cmd_len, container->userdata);
 
        free(cmd_data);
 
-       if (con->sid)
-               g_dbus_connection_signal_unsubscribe(gdbus_conn, con->sid);
+       if (container->sid)
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, container->sid);
 }
 
 int zbl_discover_cmds_gen(zigbee_h handle, nwk_addr addr16, unsigned char src_ep, unsigned char dst_ep,
@@ -5203,9 +5242,7 @@ int zbl_discover_cmds_gen(zigbee_h handle, nwk_addr addr16, unsigned char src_ep
                unsigned char max_command_ids, zb_zcl_global_discover_cmds_rsp cb, void *user_data)
 {
        int sub_id, to;
-       zbl_req_cb_s *con;
-       unsigned char status = ZIGBEE_ERROR_NONE;
-       GVariant *variant = NULL;
+       zbl_req_cb_s *container;
 #ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
        zb_event_global_default_rsp_s *global_req = NULL;
 #endif
@@ -5215,32 +5252,32 @@ int zbl_discover_cmds_gen(zigbee_h handle, nwk_addr addr16, unsigned char src_ep
 
        DBG("zbl_discover_attr_gen()");
 
-       con = calloc(1, sizeof(zbl_req_cb_s));
-       RETVM_IF(NULL == con, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
+       container = calloc(1, sizeof(zbl_req_cb_s));
+       RETVM_IF(NULL == container, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
 
        to = zbl_dbus_get_timeout(zcl_global_proxy);
        sub_id = g_dbus_connection_signal_subscribe(gdbus_conn, NULL,
                ZIGBEE_ZCL_GLOBAL_CONTROL_INTERFACE, "discover_commands_received_rsp",
-               ZIGBEE_ZCL_GLOBAL_CONTROL_OBJECT_PATH, NULL, 0, _zbl_discover_cmds_cb, con,
+               ZIGBEE_ZCL_GLOBAL_CONTROL_OBJECT_PATH, NULL, 0, _zbl_discover_cmds_cb, container,
                _zbl_request_cleanup);
 
        if (0 == sub_id) {
                ERR("g_dbus_connection_signal_subscribe() Fail");
-               free(con);
+               free(container);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
-       con->cb = cb;
-       con->sid = sub_id;
-       con->tid = g_timeout_add_seconds(to, _zbl_timeout_discover_cmds, con);
-       con->userdata = user_data;
+       container->cb = cb;
+       container->sid = sub_id;
+       container->tid = g_timeout_add_seconds(to, _zbl_timeout_discover_cmds, container);
+       container->userdata = user_data;
 #ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
        global_req = calloc(1, sizeof(zb_event_global_default_rsp_s));
        if (NULL == global_req) {
                g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
-               g_source_remove(con->tid);
-               con->tid = 0;
-               free(con);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
                ERR("calloc() Fail(%d)", errno);
                return ZIGBEE_ERROR_OUT_OF_MEMORY;
        }
@@ -5248,21 +5285,18 @@ int zbl_discover_cmds_gen(zigbee_h handle, nwk_addr addr16, unsigned char src_ep
        global_req->cluster_id = cluster_id;
        global_req->command_id = ZB_ZCL_DISCOVER_COMMANDS_GENERATED_COMMAND_ID;
 
-       con->global_cmd = global_req;
-       con->handle = handle;
+       container->global_cmd = global_req;
+       container->handle = handle;
 
        /* Register global request information into handle */
-       _zbl_register_global_req(handle, con);
+       _zbl_register_global_req(handle, container);
 #endif
 
-       variant = g_dbus_proxy_call_sync(zcl_global_proxy, "discover_commands_received",
+       g_dbus_proxy_call(zcl_global_proxy, "discover_commands_received",
                g_variant_new("(qyyqqy)", addr16, dst_ep, zcl_frame_ctl, cluster_id,
-               start_command_id, max_command_ids), G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("zbl_discover_attr_gen Status = 0x%02X", status);
-       }
-       return status;
+               start_command_id, max_command_ids), G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+
+       return ZIGBEE_ERROR_NONE;
 }
 
 int zbl_discover_cmds_recv(zigbee_h handle, nwk_addr addr16, unsigned char src_ep, unsigned char dst_ep,
@@ -5270,9 +5304,8 @@ int zbl_discover_cmds_recv(zigbee_h handle, nwk_addr addr16, unsigned char src_e
                unsigned char max_command_ids, zb_zcl_global_discover_cmds_rsp cb, void *user_data)
 {
        int sub_id, to;
-       zbl_req_cb_s *con;
-       unsigned char status = ZIGBEE_ERROR_NONE;
-       GVariant *variant = NULL;
+       zbl_req_cb_s *container;
+
 #ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
        zb_event_global_default_rsp_s *global_req = NULL;
 #endif
@@ -5282,32 +5315,32 @@ int zbl_discover_cmds_recv(zigbee_h handle, nwk_addr addr16, unsigned char src_e
 
        DBG("zbl_discover_cmds_recv()");
 
-       con = calloc(1, sizeof(zbl_req_cb_s));
-       RETVM_IF(NULL == con, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
+       container = calloc(1, sizeof(zbl_req_cb_s));
+       RETVM_IF(NULL == container, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
 
        to = zbl_dbus_get_timeout(zcl_global_proxy);
        sub_id = g_dbus_connection_signal_subscribe(gdbus_conn, NULL,
                ZIGBEE_ZCL_GLOBAL_CONTROL_INTERFACE, "discover_commands_received_rsp",
-               ZIGBEE_ZCL_GLOBAL_CONTROL_OBJECT_PATH, NULL, 0, _zbl_discover_cmds_cb, con,
+               ZIGBEE_ZCL_GLOBAL_CONTROL_OBJECT_PATH, NULL, 0, _zbl_discover_cmds_cb, container,
                _zbl_request_cleanup);
 
        if (0 == sub_id) {
                ERR("g_dbus_connection_signal_subscribe() Fail");
-               free(con);
+               free(container);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
-       con->cb = cb;
-       con->sid = sub_id;
-       con->tid = g_timeout_add_seconds(to, _zbl_timeout_discover_cmds, con);
-       con->userdata = user_data;
+       container->cb = cb;
+       container->sid = sub_id;
+       container->tid = g_timeout_add_seconds(to, _zbl_timeout_discover_cmds, container);
+       container->userdata = user_data;
 #ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
        global_req = calloc(1, sizeof(zb_event_global_default_rsp_s));
        if (NULL == global_req) {
                g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
-               g_source_remove(con->tid);
-               con->tid = 0;
-               free(con);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
                ERR("calloc() Fail(%d)", errno);
                return ZIGBEE_ERROR_OUT_OF_MEMORY;
        }
@@ -5315,40 +5348,37 @@ int zbl_discover_cmds_recv(zigbee_h handle, nwk_addr addr16, unsigned char src_e
        global_req->cluster_id = cluster_id;
        global_req->command_id = ZB_ZCL_DISCOVER_COMMANDS_RECEIVED_COMMAND_ID;
 
-       con->global_cmd = global_req;
-       con->handle = handle;
+       container->global_cmd = global_req;
+       container->handle = handle;
 
        /* Register global request information into handle */
-       _zbl_register_global_req(handle, con);
+       _zbl_register_global_req(handle, container);
 #endif
 
-       variant = g_dbus_proxy_call_sync(zcl_global_proxy, "discover_commands_received",
-                               g_variant_new("(qyyqqy)", addr16, dst_ep, zcl_frame_ctl, cluster_id,
-                               start_command_id, max_command_ids), G_DBUS_CALL_FLAGS_NONE,     -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("zbl_discover_attr_gen Status = 0x%02X", status);
-       }
-       return status;
+       g_dbus_proxy_call(zcl_global_proxy, "discover_commands_received",
+               g_variant_new("(qyyqqy)", addr16, dst_ep, zcl_frame_ctl, cluster_id,
+               start_command_id, max_command_ids), G_DBUS_CALL_FLAGS_NONE,     to, NULL, NULL, container);
+
+       return ZIGBEE_ERROR_NONE;
 }
 
 static gboolean _zbl_timeout_discover_attr_ext(gpointer p)
 {
-       zbl_req_cb_s *con = NULL;
+       zbl_req_cb_s *container = NULL;
        zb_zcl_global_discover_attr_extended_rsp cb = NULL;
 
        RETVM_IF(NULL == gdbus_conn, G_SOURCE_REMOVE, "gdbus_conn is NULL");
-       con = p;
-       RETVM_IF(NULL == con, G_SOURCE_REMOVE, "cb_container is NULL");
-       cb = con->cb;
+       container = p;
+       RETVM_IF(NULL == container, G_SOURCE_REMOVE, "cb_container is NULL");
+       cb = container->cb;
 
-       if (false == con->found && con->cb)
-               cb(0, 0, 0, 0, NULL, 0, con->userdata);
+       if (false == container->found && container->cb)
+               cb(0, 0, 0, 0, NULL, 0, container->userdata);
 
-       con->tid = 0;
+       container->tid = 0;
 
-       g_dbus_connection_signal_unsubscribe(gdbus_conn, con->sid);
-       con->sid = 0;
+       g_dbus_connection_signal_unsubscribe(gdbus_conn, container->sid);
+       container->sid = 0;
 
        return G_SOURCE_REMOVE;
 }
@@ -5357,10 +5387,10 @@ static void _zbl_discover_attr_ext_cb(GDBusConnection *connection,
                const gchar *sender_name, const gchar *object_path, const gchar *interface_name,
                const gchar *signal_name, GVariant *parameters, gpointer user_data)
 {
-       zbl_req_cb_s *con = user_data;
-       RETM_IF(NULL == con, "cb_container is NULL");
+       zbl_req_cb_s *container = user_data;
+       RETM_IF(NULL == container, "cb_container is NULL");
 
-       zb_zcl_global_discover_attr_extended_rsp cb = con->cb;
+       zb_zcl_global_discover_attr_extended_rsp cb = container->cb;
        nwk_addr addr16;
        unsigned char ep;
 
@@ -5409,16 +5439,16 @@ static void _zbl_discover_attr_ext_cb(GDBusConnection *connection,
                j++;
        }
 
-       con->found = true;
+       container->found = true;
        if (cb)
-               cb(addr16, ep, cluster_id, discoveryComplete, records, rec_len, con->userdata);
+               cb(addr16, ep, cluster_id, discoveryComplete, records, rec_len, container->userdata);
 
        for (j = 0; j < rec_len; j++)
                free(records[j]);
        free(records);
 
-       if (con->sid)
-               g_dbus_connection_signal_unsubscribe(gdbus_conn, con->sid);
+       if (container->sid)
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, container->sid);
 }
 
 int zbl_discover_attr_ext(zigbee_h handle, nwk_addr addr16, unsigned char src_ep, unsigned char dst_ep,
@@ -5427,9 +5457,8 @@ int zbl_discover_attr_ext(zigbee_h handle, nwk_addr addr16, unsigned char src_ep
                void *user_data)
 {
        int sub_id, to;
-       zbl_req_cb_s *con;
-       unsigned char status = ZIGBEE_ERROR_NONE;
-       GVariant *variant = NULL;
+       zbl_req_cb_s *container;
+
 #ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
        zb_event_global_default_rsp_s *global_req = NULL;
 #endif
@@ -5439,32 +5468,32 @@ int zbl_discover_attr_ext(zigbee_h handle, nwk_addr addr16, unsigned char src_ep
 
        DBG("zbl_discover_attr_ext()");
 
-       con = calloc(1, sizeof(zbl_req_cb_s));
-       RETVM_IF(NULL == con, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
+       container = calloc(1, sizeof(zbl_req_cb_s));
+       RETVM_IF(NULL == container, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
 
        to = zbl_dbus_get_timeout(zcl_global_proxy);
        sub_id = g_dbus_connection_signal_subscribe(gdbus_conn, NULL,
                ZIGBEE_ZCL_GLOBAL_CONTROL_INTERFACE, "discover_attributes_extended_rsp",
-               ZIGBEE_ZCL_GLOBAL_CONTROL_OBJECT_PATH,  NULL, 0, _zbl_discover_attr_ext_cb, con,
+               ZIGBEE_ZCL_GLOBAL_CONTROL_OBJECT_PATH,  NULL, 0, _zbl_discover_attr_ext_cb, container,
                _zbl_request_cleanup);
 
        if (0 == sub_id) {
                ERR("g_dbus_connection_signal_subscribe() Fail");
-               free(con);
+               free(container);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
-       con->cb = cb;
-       con->sid = sub_id;
-       con->tid = g_timeout_add_seconds(to, _zbl_timeout_discover_attr_ext, con);
-       con->userdata = user_data;
+       container->cb = cb;
+       container->sid = sub_id;
+       container->tid = g_timeout_add_seconds(to, _zbl_timeout_discover_attr_ext, container);
+       container->userdata = user_data;
 #ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
        global_req = calloc(1, sizeof(zb_event_global_default_rsp_s));
        if (NULL == global_req) {
                g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
-               g_source_remove(con->tid);
-               con->tid = 0;
-               free(con);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
                ERR("calloc() Fail(%d)", errno);
                return ZIGBEE_ERROR_OUT_OF_MEMORY;
        }
@@ -5472,59 +5501,43 @@ int zbl_discover_attr_ext(zigbee_h handle, nwk_addr addr16, unsigned char src_ep
        global_req->cluster_id = cluster_id;
        global_req->command_id = ZB_ZCL_DISCOVER_ATTRIBUTES_EXTENDED_COMMAND_ID;
 
-       con->global_cmd = global_req;
-       con->handle = handle;
+       container->global_cmd = global_req;
+       container->handle = handle;
 
        /* Register global request information into handle */
-       _zbl_register_global_req(handle, con);
+       _zbl_register_global_req(handle, container);
 #endif
 
-       variant = g_dbus_proxy_call_sync(zcl_global_proxy, "discover_attributes_extended",
-                               g_variant_new("(qyyqqy)", addr16, dst_ep, zcl_frame_ctl,
-                               cluster_id, start_id, max_attribute_ids), G_DBUS_CALL_FLAGS_NONE,
-                               -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("zbl_discover_attr_ext Status = 0x%02X", status);
-       }
-       return status;
+       g_dbus_proxy_call(zcl_global_proxy, "discover_attributes_extended",
+               g_variant_new("(qyyqqy)", addr16, dst_ep, zcl_frame_ctl, cluster_id, start_id,
+               max_attribute_ids), G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+
+       return ZIGBEE_ERROR_NONE;
 }
 
 int zbl_reset_alarm(nwk_addr addr16, unsigned char ep, unsigned char alarm_code,
                unsigned short cluster_id)
 {
-       GVariant *variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
-
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == alarm_gproxy, ZIGBEE_ERROR_IO_ERROR);
 
-       variant = g_dbus_proxy_call_sync(alarm_gproxy, "reset_alarm",
-                               g_variant_new("(qyyq)", addr16, ep, alarm_code, cluster_id),
-                                       G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("zbl_alarm_reset_alarm Status %d", status);
-       }
-       return status;
+       g_dbus_proxy_call(alarm_gproxy, "reset_alarm",
+               g_variant_new("(qyyq)", addr16, ep, alarm_code, cluster_id),
+               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
+
+       return ZIGBEE_ERROR_NONE;
 }
 
 int zbl_reset_all_alarm(nwk_addr addr16, unsigned char ep)
 {
-       GVariant *variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
 
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == alarm_gproxy, ZIGBEE_ERROR_IO_ERROR);
 
-       variant = g_dbus_proxy_call_sync(alarm_gproxy, "reset_all_alarm",
-                               g_variant_new("(qy)", addr16, ep),
-                                       G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("zbl_alarm_reset_all_alarm Status %d", status);
-       }
-       return status;
+       g_dbus_proxy_call(alarm_gproxy, "reset_all_alarm", g_variant_new("(qy)", addr16, ep),
+                       G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
+
+       return ZIGBEE_ERROR_NONE;
 }
 
 static gboolean _zbl_timeout_get_alarm(gpointer p)
@@ -5617,21 +5630,13 @@ int zbl_get_alarm(nwk_addr addr16, unsigned char ep, zb_zcl_alarm_get_alarm_rsp
 
 int zbl_reset_all_alarm_log(nwk_addr addr16, unsigned char ep)
 {
-       GVariant *variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
-
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == alarm_gproxy, ZIGBEE_ERROR_IO_ERROR);
 
-       variant = g_dbus_proxy_call_sync(alarm_gproxy, "reset_all_alarm_log",
-                               g_variant_new("(qy)", addr16, ep),
-                                       G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("zbl_reset_all_alarm_log Status %d", status);
-       }
+       g_dbus_proxy_call(alarm_gproxy, "reset_all_alarm_log",
+               g_variant_new("(qy)", addr16, ep), G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
 
-       return status;
+       return ZIGBEE_ERROR_NONE;
 }
 
 int zbl_ccontrol_move_to_hue(nwk_addr addr16, unsigned char ep,
@@ -5788,38 +5793,25 @@ int zbl_ccontrol_move_to_color_temperature(nwk_addr addr16, unsigned char ep,
 
 int zbl_reset_factory_default(nwk_addr addr16, unsigned char ep)
 {
-       GVariant *variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
-
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zcl_basic_proxy, ZIGBEE_ERROR_IO_ERROR);
 
-       variant = g_dbus_proxy_call_sync(zcl_basic_proxy, "rest_factory_default",
-                               g_variant_new("(qy)", addr16, ep), G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("zbl_reset_factory_default Status %d", status);
-       }
+       g_dbus_proxy_call(zcl_basic_proxy, "rest_factory_default",
+               g_variant_new("(qy)", addr16, ep), G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
 
-       return status;
+       return ZIGBEE_ERROR_NONE;
 }
 
 int zbl_identify(nwk_addr addr16, unsigned char dst_ep, unsigned short identify_time)
 {
-       GVariant *variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
-
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zcl_identify_proxy, ZIGBEE_ERROR_IO_ERROR);
 
-       variant = g_dbus_proxy_call_sync(zcl_identify_proxy, "identify",
-                               g_variant_new("(qyq)", addr16, dst_ep, identify_time),
-                               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("zbl_reset_factory_default Status %d", status);
-       }
-       return status;
+       g_dbus_proxy_call(zcl_identify_proxy, "identify",
+               g_variant_new("(qyq)", addr16, dst_ep, identify_time),
+               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
+
+       return ZIGBEE_ERROR_NONE;
 }
 
 static gboolean _zbl_timeout_identify_query(gpointer p)
@@ -5873,34 +5865,34 @@ int zbl_identify_query(nwk_addr addr16, unsigned char dst_ep,
                zb_zcl_identify_query_cb cb, void *user_data)
 {
        int sub_id, to;
-       zbl_req_cb_s *con;
+       zbl_req_cb_s *container;
 
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zcl_identify_proxy, ZIGBEE_ERROR_IO_ERROR);
 
        DBG("zbl_identify_query()");
 
-       con = calloc(1, sizeof(zbl_req_cb_s));
-       RETVM_IF(NULL == con, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
+       container = calloc(1, sizeof(zbl_req_cb_s));
+       RETVM_IF(NULL == container, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
 
        to = zbl_dbus_get_timeout(zcl_identify_proxy);
        sub_id = g_dbus_connection_signal_subscribe((GDBusConnection*)gdbus_conn, NULL,
                        ZIGBEE_ZCL_IDENTIFY_INTERFACE, "query_rsp", ZIGBEE_ZCL_IDENTIFY_OBJECT_PATH,
-                       NULL, 0, _zbl_identify_query_cb, con, _zbl_request_cleanup);
+                       NULL, 0, _zbl_identify_query_cb, container, _zbl_request_cleanup);
 
        if (0 == sub_id) {
                ERR("g_dbus_connection_signal_subscribe() Fail");
-               free(con);
+               free(container);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
-       con->cb = cb;
-       con->sid = sub_id;
-       con->tid = g_timeout_add_seconds(to, _zbl_timeout_identify_query, con);
-       con->userdata = user_data;
+       container->cb = cb;
+       container->sid = sub_id;
+       container->tid = g_timeout_add_seconds(to, _zbl_timeout_identify_query, container);
+       container->userdata = user_data;
 
        g_dbus_proxy_call(zcl_identify_proxy, "query", g_variant_new("(qy)", addr16, dst_ep),
-               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
 
        return ZIGBEE_ERROR_NONE;
 }
@@ -5958,7 +5950,7 @@ int zbl_add_group(nwk_addr addr16, unsigned char ep, unsigned short group_id,
                const char *group_name, zb_zcl_group_add_group_rsp cb, void *user_data)
 {
        int sub_id, to;
-       zbl_req_cb_s *con;
+       zbl_req_cb_s *container;
 
        int j = 0;
        GVariant *groupname_variant = NULL;
@@ -5969,24 +5961,24 @@ int zbl_add_group(nwk_addr addr16, unsigned char ep, unsigned short group_id,
 
        DBG("zbl_add_group()");
 
-       con = calloc(1, sizeof(zbl_req_cb_s));
-       RETVM_IF(NULL == con, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
+       container = calloc(1, sizeof(zbl_req_cb_s));
+       RETVM_IF(NULL == container, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
 
        to = zbl_dbus_get_timeout(zcl_group_proxy);
        sub_id = g_dbus_connection_signal_subscribe((GDBusConnection*)gdbus_conn, NULL,
                        ZIGBEE_ZCL_GROUP_INTERFACE, "add_group_rsp", ZIGBEE_ZCL_GROUP_OBJECT_PATH,
-                       NULL, 0, _zbl_add_group_cb, con, _zbl_request_cleanup);
+                       NULL, 0, _zbl_add_group_cb, container, _zbl_request_cleanup);
 
        if (0 == sub_id) {
                ERR("g_dbus_connection_signal_subscribe() Fail");
-               free(con);
+               free(container);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
-       con->cb = cb;
-       con->sid = sub_id;
-       con->tid = g_timeout_add_seconds(to, _zbl_timeout_add_group, con);
-       con->userdata = user_data;
+       container->cb = cb;
+       container->sid = sub_id;
+       container->tid = g_timeout_add_seconds(to, _zbl_timeout_add_group, container);
+       container->userdata = user_data;
 
 
        groupname_builder = g_variant_builder_new(G_VARIANT_TYPE("ay"));
@@ -5998,7 +5990,7 @@ int zbl_add_group(nwk_addr addr16, unsigned char ep, unsigned short group_id,
 
        g_dbus_proxy_call(zcl_group_proxy, "add_group",
                g_variant_new("(qyq@ay)", addr16, ep, group_id, groupname_variant),
-               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
 
        return ZIGBEE_ERROR_NONE;
 }
@@ -6092,34 +6084,35 @@ int zbl_view_group(nwk_addr addr16, unsigned char ep, unsigned short group_id,
                zb_zcl_group_view_group_rsp cb, void *user_data)
 {
        int sub_id, to;
-       zbl_req_cb_s *con;
+       zbl_req_cb_s *container;
 
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zcl_group_proxy, ZIGBEE_ERROR_IO_ERROR);
 
        DBG("zbl_view_group()");
 
-       con = calloc(1, sizeof(zbl_req_cb_s));
-       RETVM_IF(NULL == con, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
+       container = calloc(1, sizeof(zbl_req_cb_s));
+       RETVM_IF(NULL == container, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
 
        to = zbl_dbus_get_timeout(zcl_group_proxy);
        sub_id = g_dbus_connection_signal_subscribe((GDBusConnection*)gdbus_conn, NULL,
                        ZIGBEE_ZCL_GROUP_INTERFACE,  "view_group_rsp", ZIGBEE_ZCL_GROUP_OBJECT_PATH,
-                       NULL, 0, _zbl_view_group_cb, con, _zbl_request_cleanup);
+                       NULL, 0, _zbl_view_group_cb, container, _zbl_request_cleanup);
 
        if (0 == sub_id) {
                ERR("g_dbus_connection_signal_subscribe() Fail");
-               free(con);
+               free(container);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
-       con->cb = cb;
-       con->sid = sub_id;
-       con->tid = g_timeout_add_seconds(to, _zbl_timeout_view_group, con);
-       con->userdata = user_data;
+       container->cb = cb;
+       container->sid = sub_id;
+       container->tid = g_timeout_add_seconds(to, _zbl_timeout_view_group, container);
+       container->userdata = user_data;
 
-       g_dbus_proxy_call(zcl_group_proxy, "view_group", g_variant_new("(qyq)",
-               addr16, ep, group_id), G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
+       g_dbus_proxy_call(zcl_group_proxy, "view_group",
+               g_variant_new("(qyq)", addr16, ep, group_id),
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
 
        return ZIGBEE_ERROR_NONE;
 }
@@ -6194,7 +6187,7 @@ int zbl_group_get_group_membership(nwk_addr addr16, unsigned char ep,
                zb_zcl_group_get_group_membership_rsp cb, void *user_data)
 {
        int sub_id, to;
-       zbl_req_cb_s *con;
+       zbl_req_cb_s *container;
 
        int j = 0;
        GVariant *grouplist_variant = NULL;
@@ -6205,25 +6198,25 @@ int zbl_group_get_group_membership(nwk_addr addr16, unsigned char ep,
 
        DBG("zbl_group_get_group_membership()");
 
-       con = calloc(1, sizeof(zbl_req_cb_s));
-       RETVM_IF(NULL == con, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
+       container = calloc(1, sizeof(zbl_req_cb_s));
+       RETVM_IF(NULL == container, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
 
        to = zbl_dbus_get_timeout(zcl_group_proxy);
        sub_id = g_dbus_connection_signal_subscribe((GDBusConnection*)gdbus_conn, NULL,
                        ZIGBEE_ZCL_GROUP_INTERFACE,  "get_group_membership_rsp",
                        ZIGBEE_ZCL_GROUP_OBJECT_PATH, NULL, 0, _zbl_group_get_group_membership_cb,
-                       con, _zbl_request_cleanup);
+                       container, _zbl_request_cleanup);
 
        if (0 == sub_id) {
                ERR("g_dbus_connection_signal_subscribe() Fail");
-               free(con);
+               free(container);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
-       con->cb = cb;
-       con->sid = sub_id;
-       con->tid = g_timeout_add_seconds(to, _zbl_timeout_get_group_membership, con);
-       con->userdata = user_data;
+       container->cb = cb;
+       container->sid = sub_id;
+       container->tid = g_timeout_add_seconds(to, _zbl_timeout_get_group_membership, container);
+       container->userdata = user_data;
 
        grouplist_builder = g_variant_builder_new(G_VARIANT_TYPE("aq"));
        while (j < group_count) {
@@ -6234,7 +6227,7 @@ int zbl_group_get_group_membership(nwk_addr addr16, unsigned char ep,
 
        g_dbus_proxy_call(zcl_group_proxy, "get_group_membership",
                g_variant_new("(qyy@aq)", addr16, ep, group_count,      grouplist_variant),
-               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
 
        return ZIGBEE_ERROR_NONE;
 }
@@ -6292,57 +6285,49 @@ int zbl_remove_group(nwk_addr addr16, unsigned char ep, unsigned short group_id,
                zb_zcl_group_remove_group_rsp cb, void *user_data)
 {
        int sub_id, to;
-       zbl_req_cb_s *con;
+       zbl_req_cb_s *container;
 
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zcl_group_proxy, ZIGBEE_ERROR_IO_ERROR);
 
        DBG("zbl_group_remove_group()");
 
-       con = calloc(1, sizeof(zbl_req_cb_s));
-       RETVM_IF(NULL == con, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
+       container = calloc(1, sizeof(zbl_req_cb_s));
+       RETVM_IF(NULL == container, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
 
        to = zbl_dbus_get_timeout(zcl_group_proxy);
        sub_id = g_dbus_connection_signal_subscribe((GDBusConnection*)gdbus_conn, NULL,
                        ZIGBEE_ZCL_GROUP_INTERFACE,  "remove_group_rsp", ZIGBEE_ZCL_GROUP_OBJECT_PATH,
-                       NULL, 0, _zbl_remove_group_cb, con, _zbl_request_cleanup);
+                       NULL, 0, _zbl_remove_group_cb, container, _zbl_request_cleanup);
 
        if (0 == sub_id) {
                ERR("g_dbus_connection_signal_subscribe() Fail");
-               free(con);
+               free(container);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
-       con->cb = cb;
-       con->sid = sub_id;
-       con->tid = g_timeout_add_seconds(to, _zbl_timeout_remove_group, con);
-       con->userdata = user_data;
+       container->cb = cb;
+       container->sid = sub_id;
+       container->tid = g_timeout_add_seconds(to, _zbl_timeout_remove_group, container);
+       container->userdata = user_data;
 
        g_dbus_proxy_call(zcl_group_proxy, "remove_group", g_variant_new("(qyq)",
-               addr16, ep, group_id), G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
+               addr16, ep, group_id), G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
 
        return ZIGBEE_ERROR_NONE;
 }
 
 int zbl_remove_all_group(nwk_addr addr16, unsigned char ep)
 {
-       GVariant *variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
-
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zcl_group_proxy, ZIGBEE_ERROR_IO_ERROR);
 
        DBG("zbl_group_remove_all_group()");
 
-       variant = g_dbus_proxy_call_sync(zcl_group_proxy, "remove_all_group",
-                               g_variant_new("(qy)", addr16, ep),
-                               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("Status = 0x%02X", status);
-       }
+       g_dbus_proxy_call(zcl_group_proxy, "remove_all_group", g_variant_new("(qy)", addr16, ep),
+               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
 
-       return status;
+       return ZIGBEE_ERROR_NONE;
 }
 
 int zbl_add_group_if_identifying(nwk_addr addr16, unsigned char ep,
@@ -6350,9 +6335,7 @@ int zbl_add_group_if_identifying(nwk_addr addr16, unsigned char ep,
 {
        int j = 0;
        GVariant *groupname_variant = NULL;
-       GVariant *variant = NULL;
        GVariantBuilder *groupname_builder = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
 
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zcl_group_proxy, ZIGBEE_ERROR_IO_ERROR);
@@ -6364,247 +6347,166 @@ int zbl_add_group_if_identifying(nwk_addr addr16, unsigned char ep,
        }
        groupname_variant = g_variant_builder_end(groupname_builder);
 
-       variant = g_dbus_proxy_call_sync(zcl_group_proxy, "add_group_if_identifying",
+       g_dbus_proxy_call(zcl_group_proxy, "add_group_if_identifying",
                g_variant_new("(qyq@ay)", addr16, ep, group_id, groupname_variant),
-               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("Status = 0x%02X", status);
-       }
+               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
 
-       return status;
+       return ZIGBEE_ERROR_NONE;
 }
 
 int zbl_level_control_move_to_level(nwk_addr addr16, unsigned char ep,
                unsigned char level, unsigned short transition_time)
 {
-       GVariant *variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
-
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == level_control_gproxy, ZIGBEE_ERROR_IO_ERROR);
 
        DBG("zbl_level_control_move_to_level()");
 
-       variant = g_dbus_proxy_call_sync(level_control_gproxy, "move_to_level",
-                               g_variant_new("(qyyq)", addr16, ep, level, transition_time),
-                               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("Status = 0x%x", status);
-       }
+       g_dbus_proxy_call(level_control_gproxy, "move_to_level",
+               g_variant_new("(qyyq)", addr16, ep, level, transition_time),
+               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
 
-       return status;
+       return ZIGBEE_ERROR_NONE;
 }
 
 int zbl_level_control_move(nwk_addr addr16, unsigned char ep,
                unsigned char move_mode, unsigned char rate)
 {
-       GVariant *variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
-
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == level_control_gproxy, ZIGBEE_ERROR_IO_ERROR);
 
        DBG("zbl_level_control_move()");
 
-       variant = g_dbus_proxy_call_sync(level_control_gproxy, "move",
-                       g_variant_new("(qyyy)", addr16, ep, move_mode, rate),
-                       G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("Status = 0x%x", status);
-       }
+       g_dbus_proxy_call(level_control_gproxy, "move",
+               g_variant_new("(qyyy)", addr16, ep, move_mode, rate),
+               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
 
-       return status;
+       return ZIGBEE_ERROR_NONE;
 }
 
 int zbl_level_control_step(nwk_addr addr16, unsigned char ep,
                unsigned char step_mode, unsigned char step_size,
                unsigned short transition_time)
 {
-       GVariant *variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
-
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == level_control_gproxy, ZIGBEE_ERROR_IO_ERROR);
 
        DBG("zbl_level_control_step()");
 
-       variant = g_dbus_proxy_call_sync(level_control_gproxy, "step",
-                       g_variant_new("(qyyyq)", addr16, ep, step_mode, step_size, transition_time),
-                       G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("Status = 0x%x", status);
-       }
+       g_dbus_proxy_call(level_control_gproxy, "step",
+               g_variant_new("(qyyyq)", addr16, ep, step_mode, step_size, transition_time),
+               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
 
-       return status;
+       return ZIGBEE_ERROR_NONE;
 }
 
 int zbl_level_control_stop(nwk_addr addr16, unsigned char ep)
 {
-       GVariant *variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
-
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == level_control_gproxy, ZIGBEE_ERROR_IO_ERROR);
 
        DBG("zbl_level_control_stop()");
 
-       variant = g_dbus_proxy_call_sync(level_control_gproxy, "stop",
-                       g_variant_new("(qy)", addr16, ep), G_DBUS_CALL_FLAGS_NONE,
-                       -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("Status = 0x%x", status);
-       }
+       g_dbus_proxy_call(level_control_gproxy, "stop",
+               g_variant_new("(qy)", addr16, ep), G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
 
-       return status;
+       return ZIGBEE_ERROR_NONE;
 }
 
 int zbl_level_control_move_to_level_with_on_off(nwk_addr addr16,
                unsigned char ep, unsigned char level, unsigned short transition_time)
 {
-       GVariant *variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
-
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == level_control_gproxy, ZIGBEE_ERROR_IO_ERROR);
 
        DBG("zbl_level_control_move_to_level_with_on_off()");
 
-       variant = g_dbus_proxy_call_sync(level_control_gproxy, "move_to_level_with_on_off",
-                       g_variant_new("(qyyq)", addr16, ep, level, transition_time),
-                       G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("Status = 0x%x", status);
-       }
+       g_dbus_proxy_call(level_control_gproxy, "move_to_level_with_on_off",
+               g_variant_new("(qyyq)", addr16, ep, level, transition_time),
+               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
 
-       return status;
+       return ZIGBEE_ERROR_NONE;
 }
 
 int zbl_level_control_move_with_on_off(nwk_addr addr16, unsigned char ep,
                unsigned char move_mode, unsigned char rate)
 {
-       GVariant *variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
-
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == level_control_gproxy, ZIGBEE_ERROR_IO_ERROR);
 
        DBG("zbl_level_control_move_with_on_off()");
 
-       variant = g_dbus_proxy_call_sync(level_control_gproxy, "move_with_on_off",
-                       g_variant_new("(qyyy)", addr16, ep, move_mode, rate),
-                       G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("Status = 0x%x", status);
-       }
+       g_dbus_proxy_call(level_control_gproxy, "move_with_on_off",
+               g_variant_new("(qyyy)", addr16, ep, move_mode, rate),
+               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
 
-       return status;
+       return ZIGBEE_ERROR_NONE;
 }
 
 int zbl_level_control_step_with_on_off(nwk_addr addr16, unsigned char ep,
                unsigned char step_mode, unsigned char step_size,
                unsigned short transition_time)
 {
-       GVariant *variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
-
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == level_control_gproxy, ZIGBEE_ERROR_IO_ERROR);
 
        DBG("zbl_level_control_step_with_on_off()");
 
-       variant = g_dbus_proxy_call_sync(level_control_gproxy, "step_with_on_off",
-                       g_variant_new("(qyyyq)", addr16, ep, step_mode, step_size, transition_time),
-                       G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("Status = 0x%x", status);
-       }
+       g_dbus_proxy_call(level_control_gproxy, "step_with_on_off",
+               g_variant_new("(qyyyq)", addr16, ep, step_mode, step_size, transition_time),
+               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
 
-       return status;
+       return ZIGBEE_ERROR_NONE;
 }
 
 int zbl_onoff_set(nwk_addr addr16, unsigned char ep, unsigned char on_off_type)
 {
-       GVariant *variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
-
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == on_off_gproxy, ZIGBEE_ERROR_IO_ERROR);
 
-       variant = g_dbus_proxy_call_sync(on_off_gproxy, "set_on_off",
-                               g_variant_new("(qyy)", addr16, ep, on_off_type), G_DBUS_CALL_FLAGS_NONE,
-                               -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("zigbee_set_on_off Status 0x%x", status);
-       }
+       g_dbus_proxy_call(on_off_gproxy, "set_on_off",
+               g_variant_new("(qyy)", addr16, ep, on_off_type), G_DBUS_CALL_FLAGS_NONE,
+               -1, NULL, NULL, NULL);
 
-       return status;
+       return ZIGBEE_ERROR_NONE;
 }
 
 int zbl_zone_enroll_response(nwk_addr addr16, unsigned char dst_ep,
                unsigned char enroll_response_code, unsigned char zone_id)
 {
-       GVariant *variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
 
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zcl_ias_zone_proxy, ZIGBEE_ERROR_IO_ERROR);
 
-       variant = g_dbus_proxy_call_sync(zcl_ias_zone_proxy, "enroll_response",
-                               g_variant_new("(qyyy)", addr16, dst_ep, enroll_response_code,
-                               zone_id), G_DBUS_CALL_FLAGS_NONE,
-                               -1, NULL, NULL);
+       g_dbus_proxy_call(zcl_ias_zone_proxy, "enroll_response",
+               g_variant_new("(qyyy)", addr16, dst_ep, enroll_response_code, zone_id),
+               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
 
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("Status = 0x%02X", status);
-       }
-       return status;
+       return ZIGBEE_ERROR_NONE;
 }
 
 int zbl_pollcontrol_check_in_response(nwk_addr addr16, unsigned char ep,
                unsigned char start_fast_polling, unsigned short fast_poll_timeout)
 {
-       GVariant *variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
-
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zcl_poll_control_proxy, ZIGBEE_ERROR_IO_ERROR);
 
-       variant = g_dbus_proxy_call_sync(zcl_poll_control_proxy, "check_in_response",
-                               g_variant_new("(qyyq)", addr16, ep, start_fast_polling,
-                               fast_poll_timeout), G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("Status = 0x%02X", status);
-       }
-       return status;
+       g_dbus_proxy_call(zcl_poll_control_proxy, "check_in_response",
+               g_variant_new("(qyyq)", addr16, ep, start_fast_polling, fast_poll_timeout),
+               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
+
+       return ZIGBEE_ERROR_NONE;
 }
 
 int zbl_pollcontrol_fast_poll_stop(nwk_addr addr16, unsigned char ep)
 {
-       GVariant *variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
-
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zcl_poll_control_proxy, ZIGBEE_ERROR_IO_ERROR);
 
-       variant = g_dbus_proxy_call_sync(zcl_poll_control_proxy, "fast_poll_stop",
-                       g_variant_new("(qy)", addr16, ep), G_DBUS_CALL_FLAGS_NONE,
-                       -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("Status = 0x%02X", status);
-       }
-       return status;
+       g_dbus_proxy_call(zcl_poll_control_proxy, "fast_poll_stop",
+               g_variant_new("(qy)", addr16, ep), G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
+
+       return ZIGBEE_ERROR_NONE;
 }
 
 static gboolean _zbl_timeout_set_long_poll_interval(gpointer p)
@@ -6658,36 +6560,36 @@ int zbl_pollcontrol_set_long_poll_interval(nwk_addr addr16, unsigned char ep,
        unsigned int new_long_poll_interval, zb_zcl_pollctrl_check_in cb, void *user_data)
 {
        int sub_id, to;
-       zbl_req_cb_s *con;
+       zbl_req_cb_s *container;
 
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zcl_poll_control_proxy, ZIGBEE_ERROR_IO_ERROR);
 
        DBG("zbl_pollcontrol_set_long_poll_interval()");
 
-       con = calloc(1, sizeof(zbl_req_cb_s));
-       RETVM_IF(NULL == con, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
+       container = calloc(1, sizeof(zbl_req_cb_s));
+       RETVM_IF(NULL == container, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
 
        to = zbl_dbus_get_timeout(zcl_poll_control_proxy);
        sub_id = g_dbus_connection_signal_subscribe((GDBusConnection*)gdbus_conn, NULL,
                        ZIGBEE_ZCL_POLL_CONTROL_INTERFACE,  "checkin_response",
                        ZIGBEE_ZCL_POLL_CONTROL_OBJECT_PATH, NULL, 0,
-                       _zbl_set_long_poll_interval_cb, con, _zbl_request_cleanup);
+                       _zbl_set_long_poll_interval_cb, container, _zbl_request_cleanup);
 
        if (0 == sub_id) {
                ERR("g_dbus_connection_signal_subscribe() Fail");
-               free(con);
+               free(container);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
-       con->cb = cb;
-       con->sid = sub_id;
-       con->tid = g_timeout_add_seconds(to, _zbl_timeout_set_long_poll_interval, con);
-       con->userdata = user_data;
+       container->cb = cb;
+       container->sid = sub_id;
+       container->tid = g_timeout_add_seconds(to, _zbl_timeout_set_long_poll_interval, container);
+       container->userdata = user_data;
 
        g_dbus_proxy_call(zcl_poll_control_proxy, "set_long_poll_interval",
                        g_variant_new("(qyu)", addr16, ep, new_long_poll_interval),
-                       G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
+                       G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
 
        return ZIGBEE_ERROR_NONE;
 }
@@ -6696,36 +6598,36 @@ int zbl_pollcontrol_set_short_poll_interval(nwk_addr addr16, unsigned char ep,
        unsigned int new_short_poll_interval, zb_zcl_pollctrl_check_in cb, void *user_data)
 {
        int sub_id, to;
-       zbl_req_cb_s *con;
+       zbl_req_cb_s *container;
 
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zcl_poll_control_proxy, ZIGBEE_ERROR_IO_ERROR);
 
        DBG("zbl_pollcontrol_set_short_poll_interval()");
 
-       con = calloc(1, sizeof(zbl_req_cb_s));
-       RETVM_IF(NULL == con, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
+       container = calloc(1, sizeof(zbl_req_cb_s));
+       RETVM_IF(NULL == container, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
 
        to = zbl_dbus_get_timeout(zcl_poll_control_proxy);
        sub_id = g_dbus_connection_signal_subscribe((GDBusConnection*)gdbus_conn, NULL,
                        ZIGBEE_ZCL_POLL_CONTROL_INTERFACE,  "checkin_response",
                        ZIGBEE_ZCL_POLL_CONTROL_OBJECT_PATH, NULL, 0,
-                       _zbl_set_long_poll_interval_cb, con, _zbl_request_cleanup);
+                       _zbl_set_long_poll_interval_cb, container, _zbl_request_cleanup);
 
        if (0 == sub_id) {
                ERR("g_dbus_connection_signal_subscribe() Fail");
-               free(con);
+               free(container);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
-       con->cb = cb;
-       con->sid = sub_id;
-       con->tid = g_timeout_add_seconds(to, _zbl_timeout_set_long_poll_interval, con);
-       con->userdata = user_data;
+       container->cb = cb;
+       container->sid = sub_id;
+       container->tid = g_timeout_add_seconds(to, _zbl_timeout_set_long_poll_interval, container);
+       container->userdata = user_data;
 
        g_dbus_proxy_call(zcl_poll_control_proxy, "set_short_poll_interval",
                        g_variant_new("(qyu)", addr16, ep, new_short_poll_interval),
-                       G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
+                       G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
 
        return ZIGBEE_ERROR_NONE;
 }
@@ -6786,7 +6688,7 @@ int zbl_add_scene(nwk_addr addr16, unsigned char ep, unsigned short group_id,
        zb_zcl_scene_add_scene_rsp cb, void *user_data)
 {
        int sub_id, to;
-       zbl_req_cb_s *con;
+       zbl_req_cb_s *container;
 
        int j = 0;
        int index = 0;
@@ -6800,24 +6702,24 @@ int zbl_add_scene(nwk_addr addr16, unsigned char ep, unsigned short group_id,
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zcl_scene_proxy, ZIGBEE_ERROR_IO_ERROR);
 
-       con = calloc(1, sizeof(zbl_req_cb_s));
-       RETVM_IF(NULL == con, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
+       container = calloc(1, sizeof(zbl_req_cb_s));
+       RETVM_IF(NULL == container, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
 
        to = zbl_dbus_get_timeout(zcl_scene_proxy);
        sub_id = g_dbus_connection_signal_subscribe((GDBusConnection*)gdbus_conn, NULL,
                        ZIGBEE_ZCL_SCENE_INTERFACE,  "add_scene_rsp", ZIGBEE_ZCL_SCENE_OBJECT_PATH, NULL, 0,
-                       _zbl_add_scene_cb, con, _zbl_request_cleanup);
+                       _zbl_add_scene_cb, container, _zbl_request_cleanup);
 
        if (0 == sub_id) {
                ERR("g_dbus_connection_signal_subscribe() Fail");
-               free(con);
+               free(container);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
-       con->cb = cb;
-       con->sid = sub_id;
-       con->tid = g_timeout_add_seconds(to, _zbl_timeout_add_scene, con);
-       con->userdata = user_data;
+       container->cb = cb;
+       container->sid = sub_id;
+       container->tid = g_timeout_add_seconds(to, _zbl_timeout_add_scene, container);
+       container->userdata = user_data;
 
        scenename_builder = g_variant_builder_new(G_VARIANT_TYPE("ay"));
        while ('\0' != scene_name[j]) {
@@ -6837,7 +6739,7 @@ int zbl_add_scene(nwk_addr addr16, unsigned char ep, unsigned short group_id,
        g_dbus_proxy_call(zcl_scene_proxy, "add_scene",
                g_variant_new("(qyqyqq@ay@ay)", addr16, ep, group_id, scene_id, transition_time,
                ext_field_len, scenename_variant, extensionfieldSet_variant), G_DBUS_CALL_FLAGS_NONE,
-               -1, NULL, NULL, NULL);
+               to, NULL, NULL, container);
 
        return ZIGBEE_ERROR_NONE;
 }
@@ -6952,35 +6854,35 @@ int zbl_view_scene(nwk_addr addr16, unsigned char ep, unsigned short group_id,
        unsigned char scene_id, zb_zcl_scene_view_scene_rsp cb, void *user_data)
 {
        int sub_id, to;
-       zbl_req_cb_s *con;
+       zbl_req_cb_s *container;
 
        DBG("zbl_scene_view_scene()");
 
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zcl_scene_proxy, ZIGBEE_ERROR_IO_ERROR);
 
-       con = calloc(1, sizeof(zbl_req_cb_s));
-       RETVM_IF(NULL == con, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
+       container = calloc(1, sizeof(zbl_req_cb_s));
+       RETVM_IF(NULL == container, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
 
        to = zbl_dbus_get_timeout(zcl_scene_proxy);
        sub_id = g_dbus_connection_signal_subscribe((GDBusConnection*)gdbus_conn, NULL,
                        ZIGBEE_ZCL_SCENE_INTERFACE,  "view_scene_rsp", ZIGBEE_ZCL_SCENE_OBJECT_PATH, NULL, 0,
-                       _zbl_view_scene_cb, con, _zbl_request_cleanup);
+                       _zbl_view_scene_cb, container, _zbl_request_cleanup);
 
        if (0 == sub_id) {
                ERR("g_dbus_connection_signal_subscribe() Fail");
-               free(con);
+               free(container);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
-       con->cb = cb;
-       con->sid = sub_id;
-       con->tid = g_timeout_add_seconds(to, _zbl_timeout_view_scene, con);
-       con->userdata = user_data;
+       container->cb = cb;
+       container->sid = sub_id;
+       container->tid = g_timeout_add_seconds(to, _zbl_timeout_view_scene, container);
+       container->userdata = user_data;
 
        g_dbus_proxy_call(zcl_scene_proxy, "view_scene",
                g_variant_new("(qyqy)", addr16, ep, group_id, scene_id), G_DBUS_CALL_FLAGS_NONE,
-               -1, NULL, NULL, NULL);
+               to, NULL, NULL, container);
 
        return ZIGBEE_ERROR_NONE;
 }
@@ -7040,37 +6942,35 @@ int zbl_remove_scene(nwk_addr addr16, unsigned char ep,
        void *user_data)
 {
        int sub_id, to;
-       zbl_req_cb_s *con;
+       zbl_req_cb_s *container;
 
        DBG("zbl_scene_remove_scene()");
 
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zcl_scene_proxy, ZIGBEE_ERROR_IO_ERROR);
 
-       con = calloc(1, sizeof(zbl_req_cb_s));
-       RETVM_IF(NULL == con, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
+       container = calloc(1, sizeof(zbl_req_cb_s));
+       RETVM_IF(NULL == container, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
 
        to = zbl_dbus_get_timeout(zcl_scene_proxy);
        sub_id = g_dbus_connection_signal_subscribe((GDBusConnection*)gdbus_conn, NULL,
                        ZIGBEE_ZCL_SCENE_INTERFACE,  "remove_scene_rsp", ZIGBEE_ZCL_SCENE_OBJECT_PATH,
-                       NULL, 0, _zbl_remove_scene_cb, con, _zbl_request_cleanup);
+                       NULL, 0, _zbl_remove_scene_cb, container, _zbl_request_cleanup);
 
        if (0 == sub_id) {
                ERR("g_dbus_connection_signal_subscribe() Fail");
-               free(con);
+               free(container);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
-       con->cb = cb;
-       con->sid = sub_id;
-       con->tid = g_timeout_add_seconds(to, _zbl_timeout_remove_scene, con);
-       con->userdata = user_data;
+       container->cb = cb;
+       container->sid = sub_id;
+       container->tid = g_timeout_add_seconds(to, _zbl_timeout_remove_scene, container);
+       container->userdata = user_data;
 
        g_dbus_proxy_call(zcl_scene_proxy, "remove_scene",
-               g_variant_new("(qyqy)", addr16, ep, group_id, scene_id), G_DBUS_CALL_FLAGS_NONE,
-               -1, NULL, NULL, NULL);
-
-       DBG("zbl_scene_remove_scene() - 1");
+               g_variant_new("(qyqy)", addr16, ep, group_id, scene_id),
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
 
        return ZIGBEE_ERROR_NONE;
 }
@@ -7128,36 +7028,36 @@ int zbl_remove_all_scene(nwk_addr addr16, unsigned char ep,
        unsigned short group_id, zb_zcl_scene_remove_all_scene_rsp cb, void *user_data)
 {
        int sub_id, to;
-       zbl_req_cb_s *con;
+       zbl_req_cb_s *container;
 
        DBG("zbl_scene_remove_all_scene()");
 
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zcl_scene_proxy, ZIGBEE_ERROR_IO_ERROR);
 
-       con = calloc(1, sizeof(zbl_req_cb_s));
-       RETVM_IF(NULL == con, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
+       container = calloc(1, sizeof(zbl_req_cb_s));
+       RETVM_IF(NULL == container, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
 
        to = zbl_dbus_get_timeout(zcl_scene_proxy);
        sub_id = g_dbus_connection_signal_subscribe((GDBusConnection*)gdbus_conn, NULL,
                        ZIGBEE_ZCL_SCENE_INTERFACE,  "remove_all_scene_rsp",
-                       ZIGBEE_ZCL_SCENE_OBJECT_PATH, NULL, 0, _zbl_remove_all_scene_cb, con,
+                       ZIGBEE_ZCL_SCENE_OBJECT_PATH, NULL, 0, _zbl_remove_all_scene_cb, container,
                        _zbl_request_cleanup);
 
        if (0 == sub_id) {
                ERR("g_dbus_connection_signal_subscribe() Fail");
-               free(con);
+               free(container);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
-       con->cb = cb;
-       con->sid = sub_id;
-       con->tid = g_timeout_add_seconds(to, _zbl_timeout_remove_all_scene, con);
-       con->userdata = user_data;
+       container->cb = cb;
+       container->sid = sub_id;
+       container->tid = g_timeout_add_seconds(to, _zbl_timeout_remove_all_scene, container);
+       container->userdata = user_data;
 
        g_dbus_proxy_call(zcl_scene_proxy, "remove_all_scene",
-               g_variant_new("(qyq)", addr16, ep, group_id), G_DBUS_CALL_FLAGS_NONE,
-               -1, NULL, NULL, NULL);
+               g_variant_new("(qyq)", addr16, ep, group_id),
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
 
        return ZIGBEE_ERROR_NONE;
 }
@@ -7216,35 +7116,35 @@ int zbl_store_scene(nwk_addr addr16, unsigned char ep, unsigned short group_id,
        unsigned char scene_id, zb_zcl_scene_store_scene_rsp cb, void *user_data)
 {
        int sub_id, to;
-       zbl_req_cb_s *con;
+       zbl_req_cb_s *container;
 
        DBG("zbl_scene_store_scene()");
 
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zcl_scene_proxy, ZIGBEE_ERROR_IO_ERROR);
 
-       con = calloc(1, sizeof(zbl_req_cb_s));
-       RETVM_IF(NULL == con, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
+       container = calloc(1, sizeof(zbl_req_cb_s));
+       RETVM_IF(NULL == container, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
 
        to = zbl_dbus_get_timeout(zcl_scene_proxy);
        sub_id = g_dbus_connection_signal_subscribe((GDBusConnection*)gdbus_conn, NULL,
                        ZIGBEE_ZCL_SCENE_INTERFACE,  "store_scene_rsp", ZIGBEE_ZCL_SCENE_OBJECT_PATH,
-                       NULL, 0, _zbl_scene_store_scene_cb, con, _zbl_request_cleanup);
+                       NULL, 0, _zbl_scene_store_scene_cb, container, _zbl_request_cleanup);
 
        if (0 == sub_id) {
                ERR("g_dbus_connection_signal_subscribe() Fail");
-               free(con);
+               free(container);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
-       con->cb = cb;
-       con->sid = sub_id;
-       con->tid = g_timeout_add_seconds(to, _zbl_timeout_scene_store_scene, con);
-       con->userdata = user_data;
+       container->cb = cb;
+       container->sid = sub_id;
+       container->tid = g_timeout_add_seconds(to, _zbl_timeout_scene_store_scene, container);
+       container->userdata = user_data;
 
        g_dbus_proxy_call(zcl_scene_proxy, "store_scene",
-               g_variant_new("(qyqy)", addr16, ep, group_id, scene_id), G_DBUS_CALL_FLAGS_NONE,
-               -1, NULL, NULL, NULL);
+               g_variant_new("(qyqy)", addr16, ep, group_id, scene_id),
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
 
        return ZIGBEE_ERROR_NONE;
 }
@@ -7339,36 +7239,36 @@ int zbl_get_scene_membership(nwk_addr addr16, unsigned char ep,
        unsigned short group_id, zb_zcl_scene_get_scene_membership_rsp cb, void *user_data)
 {
        int sub_id, to;
-       zbl_req_cb_s *con;
+       zbl_req_cb_s *container;
 
        DBG("zbl_scene_get_scene_membership()");
 
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zcl_scene_proxy, ZIGBEE_ERROR_IO_ERROR);
 
-       con = calloc(1, sizeof(zbl_req_cb_s));
-       RETVM_IF(NULL == con, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
+       container = calloc(1, sizeof(zbl_req_cb_s));
+       RETVM_IF(NULL == container, ZIGBEE_ERROR_OUT_OF_MEMORY, "calloc() Fail(%d)", errno);
 
        to = zbl_dbus_get_timeout(zcl_scene_proxy);
        sub_id = g_dbus_connection_signal_subscribe((GDBusConnection*)gdbus_conn, NULL,
                        ZIGBEE_ZCL_SCENE_INTERFACE, "get_scene_membership_rsp",
-                       ZIGBEE_ZCL_SCENE_OBJECT_PATH, NULL, 0, _zbl_get_scene_membership_cb, con,
+                       ZIGBEE_ZCL_SCENE_OBJECT_PATH, NULL, 0, _zbl_get_scene_membership_cb, container,
                        _zbl_request_cleanup);
 
        if (0 == sub_id) {
                ERR("g_dbus_connection_signal_subscribe() Fail");
-               free(con);
+               free(container);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
-       con->cb = cb;
-       con->sid = sub_id;
-       con->tid = g_timeout_add_seconds(to, _zbl_timeout_get_scene_membership, con);
-       con->userdata = user_data;
+       container->cb = cb;
+       container->sid = sub_id;
+       container->tid = g_timeout_add_seconds(to, _zbl_timeout_get_scene_membership, container);
+       container->userdata = user_data;
 
        g_dbus_proxy_call(zcl_scene_proxy, "get_scene_membership",
-               g_variant_new("(qyq)", addr16, ep, group_id), G_DBUS_CALL_FLAGS_NONE, -1, NULL,
-               NULL, NULL);
+               g_variant_new("(qyq)", addr16, ep, group_id),
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
 
        return ZIGBEE_ERROR_NONE;
 }
@@ -7376,20 +7276,14 @@ int zbl_get_scene_membership(nwk_addr addr16, unsigned char ep,
 int zbl_thermostat_adjust_setpoint(nwk_addr addr16, unsigned char ep, unsigned char mode,
        unsigned char amount)
 {
-       GVariant *variant = NULL;
-       unsigned char status = ZIGBEE_ERROR_NONE;
-
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == thermostat_gproxy, ZIGBEE_ERROR_IO_ERROR);
 
-       variant = g_dbus_proxy_call_sync(thermostat_gproxy, "setpoint_raise_lower",
-                               g_variant_new("(qyyy)", addr16, ep, mode, amount),
-                               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
-       if (variant) {
-               g_variant_get(variant, "(y)", &status);
-               DBG("Status = 0x%02X", status);
-       }
-       return status;
+       g_dbus_proxy_call(thermostat_gproxy, "setpoint_raise_lower",
+               g_variant_new("(qyyy)", addr16, ep, mode, amount),
+               G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
+
+       return ZIGBEE_ERROR_NONE;
 }
 
 int zbl_dbus_start(zigbee_h handle)
@@ -7497,6 +7391,7 @@ int zbl_dbus_start(zigbee_h handle)
        g_dbus_proxy_set_default_timeout(G_DBUS_PROXY(custom_gproxy), ZIGBEE_BROADCAST_TIMEOUT);
 
        zbl_ref_count++;
+
        return ZIGBEE_ERROR_NONE;
 }
 
index 219d338..7c8b945 100644 (file)
@@ -26,7 +26,8 @@ int zbl_dbus_start(zigbee_h handle);
 void zbl_dbus_stop(void);
 GDBusConnection* zbl_dbus_get_object(void);
 int zbl_dbus_get_timeout(GDBusProxy *proxy);
-int zbl_enable(zigbee_h handle, zb_event_cb event_handler);
+int zbl_enable(zigbee_h handle, zb_enable_cb cb, void *user_data);
+int zbl_set_event_cb(zigbee_h handle, zb_event_cb event_handler);
 int zbl_disable(void);
 int zbl_hw_reset(void);
 int zbl_coex_start(unsigned char channel);
@@ -35,8 +36,8 @@ int zbl_get_network_info(ieee_addr addr64, nwk_addr *nodeid, nwk_addr *panid,
                unsigned char *channel, unsigned char *tx_power);
 int zbl_get_controller_mac_address(ieee_addr addr64);
 int zbl_get_all_device_info(zb_end_device_info_h **dev_list, unsigned char* num);
-int zbl_form_network(zigbee_h handle);
-int zbl_disable_network(void);
+int zbl_form_network(zigbee_h handle, zb_form_network_cb cb, void *user_data);
+int zbl_disable_network(zigbee_h handle, zb_disable_network_cb cb, void *user_data);
 int zbl_leave_device(ieee_addr addr64, bool remove_children, bool rejoin);
 int zbl_permit_join(unsigned char duration, bool broadcast);
 int zbl_nwk_addr_req(zigbee_h handle, ieee_addr addr64, unsigned char request_type,
index 2ebb24e..e056467 100644 (file)
--- a/lib/zbl.c
+++ b/lib/zbl.c
@@ -36,6 +36,9 @@ API int zb_create(zigbee_h *handle)
 #if !GLIB_CHECK_VERSION(2, 35, 0)
        g_type_init();
 #endif
+#if !GLIB_CHECK_VERSION(2, 31, 0)
+       g_thread_init(NULL);
+#endif
        ret = zbl_dbus_start(*handle);
        DBG("zbl_dbus_start()=0x%X", ret);
 
@@ -48,15 +51,24 @@ API void zb_destroy(zigbee_h handle)
        zbl_dbus_stop();
 }
 
-API int zb_enable(zigbee_h handle, zb_event_cb event_handler)
+API int zb_enable(zigbee_h handle, zb_enable_cb cb, void *user_data)
 {
        int ret = ZIGBEE_ERROR_NONE;
        RETV_IF(NULL == handle, ZIGBEE_ERROR_INVALID_PARAMETER);
-       ret = zbl_enable(handle, event_handler);
+       ret = zbl_enable(handle, cb, user_data);
        DBG("zbl_enable()=0x%X", ret);
        return ret;
 }
 
+API int zb_set_event_cb(zigbee_h handle, zb_event_cb event_handler)
+{
+       int ret = ZIGBEE_ERROR_NONE;
+       RETV_IF(NULL == handle, ZIGBEE_ERROR_INVALID_PARAMETER);
+       ret = zbl_set_event_cb(handle, event_handler);
+       DBG("zb_set_event_cb()=0x%X", ret);
+       return ret;
+}
+
 API int zb_disable(zigbee_h handle)
 {
        int ret = ZIGBEE_ERROR_NONE;
@@ -93,20 +105,20 @@ API int zb_coex_stop(zigbee_h handle)
        return ret;
 }
 
-API int zb_form_network(zigbee_h handle)
+API int zb_form_network(zigbee_h handle, zb_form_network_cb cb, void *user_data)
 {
        int ret = ZIGBEE_ERROR_NONE;
        RETV_IF(NULL == handle, ZIGBEE_ERROR_INVALID_PARAMETER);
-       ret = zbl_form_network(handle);
+       ret = zbl_form_network(handle, cb, user_data);
        DBG("zbl_form_network()=0x%X", ret);
        return ret;
 }
 
-API int zb_disable_network(zigbee_h handle)
+API int zb_disable_network(zigbee_h handle, zb_disable_network_cb cb, void *user_data)
 {
        int ret = ZIGBEE_ERROR_NONE;
        RETV_IF(NULL == handle, ZIGBEE_ERROR_INVALID_PARAMETER);
-       ret = zbl_disable_network();
+       ret = zbl_disable_network(handle, cb, user_data);
        DBG("zb_disable_network()=0x%X", ret);
        return ret;
 }
index 1e6c197..efd0b52 100644 (file)
@@ -240,6 +240,21 @@ static void _init_endpoints()
        huebulb_ep1.out_clusters[0] = ZB_ZCL_OTA_BOOTLOAD_CLUSTER_ID;
 }
 
+static void zigbee_enable_cb(unsigned char ret, void *user_data)
+{
+       msgp("enable result received = 0x%02X\n", ret);
+}
+
+static void zigbee_form_network_done_cb(nwk_addr panid, void *user_data)
+{
+       msgp("form_network_done received PANID = 0x%04X\n", panid);
+}
+
+static void zigbee_disable_network_done_cb(unsigned char ret, void *user_data)
+{
+       msgp("disable_network result received = 0x%02X\n", ret);
+}
+
 static void zigbee_event_cb(nwk_addr addr16, ieee_addr addr64, zb_event_e e, zb_event_data_s ev)
 {
        unsigned char status, count, ep, command_id;
@@ -478,12 +493,18 @@ static int run_enable(MManager *mm, struct menu_data *menu)
        /* Register event callback */
        int ret = ZIGBEE_ERROR_NONE;
 
-       ret = zb_enable(handle, zigbee_event_cb);
+       ret = zb_enable(handle, zigbee_enable_cb, NULL);
        if (ZIGBEE_ERROR_NONE != ret) {
                msg("zb_enable(0x%X) - FAILED!!!", ret);
                return RET_FAILURE;
        }
 
+       ret = zb_set_event_cb(handle, zigbee_event_cb);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               msg("zb_set_event_cb(0x%X) - FAILED!!!", ret);
+               return RET_FAILURE;
+       }
+
        msg(" - zb_enable() ret: [0x%X]", ret);
 
        return RET_SUCCESS;
@@ -728,7 +749,7 @@ static int run_form_network(MManager *mm, struct menu_data *menu)
 {
        int ret = ZIGBEE_ERROR_NONE;
 
-       ret = zb_form_network(handle);
+       ret = zb_form_network(handle, zigbee_form_network_done_cb, NULL);
        if (ZIGBEE_ERROR_NONE != ret) {
                msg("zb_form_network(0x%X) - FAILED!!!", ret);
                return RET_FAILURE;
@@ -743,7 +764,7 @@ static int run_disable_network(MManager *mm, struct menu_data *menu)
 {
        int ret = ZIGBEE_ERROR_NONE;
 
-       ret = zb_disable_network(handle);
+       ret = zb_disable_network(handle, zigbee_disable_network_done_cb, NULL);
        if (ZIGBEE_ERROR_NONE != ret) {
                msg("zb_disable_network(0x%X) - FAILED!!!", ret);
                return RET_FAILURE;
@@ -889,13 +910,24 @@ static int __select_handle_register_event(MManager *mm, struct menu_data *menu)
                msg("zb_create(%d) - SUCCESS!!!. handle [%p]", ret, handle);
        }
 
+       ret = zb_enable(&handle, zigbee_event_cb, NULL);
+       if (ZIGBEE_ERROR_NONE != ret) {
+               msg("zb_enable(%d) - FAILED!!!.", ret);
+               return RET_FAILURE;
+       } else {
+               msg("zb_enable(%d) - SUCCESS!!!. handle [%p]", ret, handle);
+       }
+
+       msg("zigbee_disable_network_done_cb = %x", zigbee_disable_network_done_cb);
+
+
        /* Register event callback */
-       ret = zb_enable(handle, zigbee_event_cb);
+       ret = zb_set_event_cb(handle, zigbee_event_cb);
        if (ZIGBEE_ERROR_NONE != ret) {
-               msg("zb_enable(0x%X) - FAILED!!!", ret);
+               msg("zb_set_event_cb(0x%X) - FAILED!!!", ret);
                return RET_FAILURE;
        }
-       msg("zb_enable(%d) - SUCCESS!!!. handle [%p]", ret, handle);
+       msg("zb_set_event_cb(%d) - SUCCESS!!!. handle [%p]", ret, handle);
 
        menu_manager_set_user_data(mm, handle);
 
@@ -923,6 +955,9 @@ int main(int arg, char **argv)
 #if !GLIB_CHECK_VERSION(2, 35, 0)
        g_type_init();
 #endif
+#if !GLIB_CHECK_VERSION(2, 31, 0)
+       g_thread_init(NULL);
+#endif
        mainloop = g_main_loop_new(NULL, FALSE);
 
        msg("");
index 0043a56..a76ca24 100644 (file)
@@ -411,6 +411,21 @@ int is_digit(const char *str)
        return 0;
 }
 
+static void zigbee_enable_cb(unsigned char ret, void *user_data)
+{
+       printf("enable result received = 0x%02X\n", ret);
+}
+
+static void zigbee_form_network_done_cb(nwk_addr panid, void *user_data)
+{
+       printf("form_network_done received PANID = 0x%04X\n", panid);
+}
+
+static void zigbee_disable_network_done_cb(unsigned char ret, void *user_data)
+{
+       printf("disable_network result received = 0x%02X\n", ret);
+}
+
 static void zigbee_event_cb(nwk_addr addr16, ieee_addr addr64, zb_event_e e, zb_event_data_s ev)
 {
        unsigned char status, count, ep, command_id;
@@ -1557,7 +1572,8 @@ void process_input(const char *input, gpointer user_data)
                printf("zb_create ret=[0x%x]\n", (int)handle);
                break;
        case CMD_ENABLE:
-               ret = zb_enable(handle, zigbee_event_cb);
+               ret = zb_enable(handle, zigbee_enable_cb, NULL);
+               ret = zb_set_event_cb(handle, zigbee_event_cb);
                printf("zb_enable ret=[0x%x]\n", ret);
                break;
        case CMD_GET_NETWORK_INFO:
@@ -1643,11 +1659,11 @@ void process_input(const char *input, gpointer user_data)
                printf("zb_coex_stop ret=[0x%x]\n", ret);
                break;
        case CMD_FORM_NETWORK:
-               ret = zb_form_network(handle);
+               ret = zb_form_network(handle, zigbee_form_network_done_cb, NULL);
                printf("zb_form_network ret=[0x%x]\n", ret);
                break;
        case CMD_DISABLE_NETWORK:
-               ret = zb_disable_network(handle);
+               ret = zb_disable_network(handle, zigbee_disable_network_done_cb, NULL);
                printf("zb_disable_network ret=[0x%x]\n", ret);
                break;
        case CMD_LEAVE_NODE:
@@ -2311,9 +2327,12 @@ int main(int argc, char **argv)
        GMainLoop *main_loop;
        struct appdata *ad = NULL;
 
-/*#if !GLIB_CHECK_VERSION(2, 36, 0)*/
+#if !GLIB_CHECK_VERSION(2, 35, 0)
        g_type_init();
-/*#endif*/
+#endif
+#if !GLIB_CHECK_VERSION(2, 31, 0)
+       g_thread_init(NULL);
+#endif
 
        main_loop = g_main_loop_new(NULL, FALSE);
        ad = (struct appdata *)malloc(sizeof(struct appdata));