RETM_IF(NULL == container->event_handler, "event_handler is null");
DBG("%s signal received", signal_name);
- if (g_strcmp0(signal_name, "service_enabled") == 0) {
+ if (g_strcmp0(signal_name, "zigbee_state") == 0) {
gboolean enabled;
g_variant_get(parameters, "(b)", &enabled);
unsigned int id;
struct zbl_zigbee_s* h = handle;
- /* Section 1. Subscribe ZDO signal */
- id = g_dbus_connection_signal_subscribe(gdbus_conn, NULL, ZIGBEE_SERVICE_INTERFACE,
- "service_enabled", ZIGBEE_CONTROL_OBJECT_PATH, NULL,
+ /* Section 0. Subscribe Manager signal */
+ id = g_dbus_connection_signal_subscribe(gdbus_conn, NULL, ZIGBEE_MANAGER_INTERFACE,
+ "zigbee_state", ZIGBEE_DBUS_OBJPATH, NULL,
G_DBUS_CALL_FLAGS_NONE, _zbl_signal_handler, handle, NULL);
if (0 == id) {
- ERR("g_dbus_connection_signal_subscribe(service_enabled) Fail(%d)", errno);
+ ERR("g_dbus_connection_signal_subscribe(zigbee_state) Fail(%d)", errno);
return ZIGBEE_ERROR_IO_ERROR;
}
h->dbus_sub_ids = g_list_append(h->dbus_sub_ids, GUINT_TO_POINTER(id));
DBG("subscribed for service_enabled signal %d", id);
+ /* Section 1. Subscribe ZDO signal */
id = g_dbus_connection_signal_subscribe(gdbus_conn, NULL, ZIGBEE_SERVICE_INTERFACE,
"child_joined", ZIGBEE_CONTROL_OBJECT_PATH, NULL,
G_DBUS_CALL_FLAGS_NONE, _zbl_signal_handler, h, NULL);
return ZIGBEE_ERROR_NONE;
}
-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;
- gboolean value = TRUE;
-
- container->found = true;
-
- DBG("_zbl_enable_cb");
-
- g_variant_get(parameters, "(b)", &value);
- if (!value)
- ret = ZB_ZDP_UNKNOWN;
-
- 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 zbl_enable(zigbee_h handle)
{
+ int result = ZIGBEE_ERROR_NONE;
GVariant *variant = NULL;
GError *dbus_err = NULL;
- int sub_id, to;
- zbl_req_cb_s *container;
- int result = ZIGBEE_ERROR_NONE;
-
RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
- RETV_IF(NULL == handle, ZIGBEE_ERROR_INVALID_PARAMETER);
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 = ZIGBEE_BROADCAST_TIMEOUT;
- sub_id = g_dbus_connection_signal_subscribe(gdbus_conn, NULL,
- ZIGBEE_MANAGER_INTERFACE, "zigbee_state", ZIGBEE_DBUS_OBJPATH,
- NULL, G_DBUS_SIGNAL_FLAGS_NONE,
- _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;
-
variant = g_dbus_connection_call_sync(gdbus_conn,
ZIGBEE_MANAGER_INTERFACE,
ZIGBEE_DBUS_OBJPATH,
huebulb_ep1.out_clusters[0] = ZB_ZCL_OTA_BOOTLOAD_CLUSTER_ID;
}
-static void zigbee_enable_cb(unsigned char status, void *user_data)
-{
- msgp("\nenable result received = 0x%02X\n", status);
-}
-
static void zigbee_form_network_done_cb(nwk_addr panid, void *user_data)
{
msgp("\nform_network_done received PANID = 0x%04X\n", panid);
case ZB_ZDP_ENABLE_EVENT:
{
status = ev.data.enable->status;
- msg(" service enabled = %d", status);
+ msg(" zigbee state = %d [%s]", status, (status ? "Enabled" : "Disabled"));
break;
}
case ZB_ZDP_FORM_NETWORK_DONE:
msg(" - zb_set_event_cb() ret: [0x%X]", ret);
/* Enable */
- ret = zb_enable(handle, zigbee_enable_cb, NULL);
+ ret = zb_enable(handle);
if (ZIGBEE_ERROR_NONE != ret) {
msg("zb_enable(0x%X) - FAILED!!! [%s]", ret, zigbee_error_to_string(ret));
return RET_FAILURE;
msg(" - zb_set_event_cb() ret: [0x%X] [%s]", ret, zigbee_error_to_string(ret));
/* Enable */
- ret = zb_enable(handle, zigbee_enable_cb, NULL);
+ ret = zb_enable(handle);
if (ZIGBEE_ERROR_PERMISSION_DENIED == ret) {
/* Admin permission is not set, but we can do normal operations */
msg("zb_enable(0x%X) - FAILED!!!", ret);