--- /dev/null
+/*
+ * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <iostream>
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+
+#include "zbl.h"
+
+GDbus::GDbus()
+{
+ this->m_pConnection = NULL;
+ this->m_pCancellable = NULL;
+ this->service_gproxy = NULL;
+ this->on_off_gproxy = NULL;
+ this->door_lock_gproxy = NULL;
+ this->level_control_gproxy = NULL;
+ this->thermostat_gproxy = NULL;
+ this->alarm_gproxy = NULL;
+ this->fan_control_gproxy = NULL;
+
+ this->mfglib_gproxy = NULL;
+ this->zcl_global_proxy = NULL;
+ this->zdo_dev_proxy = NULL;
+ this->zcl_basic_proxy = NULL;
+ this->zcl_identify_proxy = NULL;
+ this->zcl_ias_zone_proxy = NULL;
+ this->zcl_poll_control_proxy = NULL;
+ this->zcl_group_proxy = NULL;
+ this->zcl_scene_proxy = NULL;
+ this->zdo_bind_proxy = NULL;
+ this->zcl_color_control_proxy = NULL;
+ this->custom_gproxy = NULL;
+}
+
+GDbus::~GDbus()
+{
+ GDBusConnection *conn = this->m_pConnection;
+ GCancellable *cancel = this->m_pCancellable;
+
+ if (cancel) {
+ g_cancellable_cancel(cancel);
+ g_object_unref(cancel);
+ cancel = NULL;
+ }
+
+ if (conn) {
+ g_object_unref(this->service_gproxy);
+ this->service_gproxy = NULL;
+ g_object_unref(this->on_off_gproxy);
+ this->on_off_gproxy = NULL;
+ g_object_unref(this->door_lock_gproxy);
+ this->door_lock_gproxy = NULL;
+ g_object_unref(this->level_control_gproxy);
+ this->level_control_gproxy = NULL;
+ g_object_unref(this->thermostat_gproxy);
+ this->thermostat_gproxy = NULL;
+ g_object_unref(this->alarm_gproxy);
+ this->alarm_gproxy = NULL;
+ g_object_unref(this->fan_control_gproxy);
+ this->fan_control_gproxy = NULL;
+
+ g_object_unref(this->mfglib_gproxy);
+ this->mfglib_gproxy = NULL;
+ g_object_unref(this->zcl_global_proxy);
+ this->zcl_global_proxy = NULL;
+
+ g_object_unref(this->zdo_dev_proxy);
+ this->zdo_dev_proxy = NULL;
+ g_object_unref(this->zcl_basic_proxy);
+ this->zcl_basic_proxy = NULL;
+ g_object_unref(this->zcl_identify_proxy);
+ this->zcl_identify_proxy = NULL;
+ g_object_unref(this->zcl_ias_zone_proxy);
+ this->zcl_ias_zone_proxy = NULL;
+ g_object_unref(this->zcl_poll_control_proxy);
+ this->zcl_poll_control_proxy = NULL;
+ g_object_unref(this->zcl_group_proxy);
+ this->zcl_group_proxy = NULL;
+ g_object_unref(this->zcl_scene_proxy);
+ this->zcl_scene_proxy = NULL;
+ g_object_unref(this->zdo_bind_proxy);
+ this->zdo_bind_proxy = NULL;
+
+ g_object_unref(this->zcl_color_control_proxy);
+ this->zcl_color_control_proxy = NULL;
+ g_object_unref(this->custom_gproxy);
+ this->custom_gproxy = NULL;
+
+ g_object_unref(conn);
+ conn = NULL;
+ }
+}
+
+zb_error_e GDbus::Create(void)
+{
+ GError *err = NULL;
+ GDBusConnection *gdbus_conn;
+
+#if !GLIB_CHECK_VERSION(2, 36, 0)
+ g_type_init();
+#endif
+
+ this->m_pConnection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &err);
+ if (this->m_pConnection == NULL) {
+ if (err != NULL) {
+ GLOGD("Failed to connect to the D-BUS daemon [%s]", err->message);
+ g_error_free(err);
+ }
+
+ return ZIGBEE_ERROR_OPERATION_FAILED;
+ }
+
+ gdbus_conn = this->m_pConnection;
+
+ this->service_gproxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
+ ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH, ZIGBEE_SERVICE_INTERFACE,
+ NULL, NULL);
+
+ this->on_off_gproxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
+ ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH,
+ ZIGBEE_ZCL_ON_OFF_INTERFACE, NULL, NULL);
+
+ this->door_lock_gproxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
+ ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH,
+ ZIGBEE_ZCL_DOOR_LOCK_INTERFACE, NULL, NULL);
+
+ this->level_control_gproxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
+ ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH,
+ ZIGBEE_ZCL_LEVEL_CONTROL_INTERFACE, NULL, NULL);
+
+ this->thermostat_gproxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
+ ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH,
+ ZIGBEE_ZCL_THERMOSTAT_INTERFACE, NULL, NULL);
+
+ this->alarm_gproxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
+ ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH, ZIGBEE_ZCL_ALARM_INTERFACE,
+ NULL, NULL);
+
+ this->fan_control_gproxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
+ ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH,
+ ZIGBEE_ZCL_FAN_CONTROL_INTERFACE, NULL, NULL);
+
+ this->mfglib_gproxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
+ ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH,
+ ZIGBEE_MFGLIB_CONTROL_INTERFACE, NULL, NULL);
+
+ this->zcl_global_proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
+ ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH,
+ ZIGBEE_ZCL_GLOBAL_CONTROL_INTERFACE, NULL, NULL);
+
+ this->zdo_dev_proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
+ ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH,
+ ZIGBEE_ZDO_DEV_CONTROL_INTERFACE, NULL, NULL);
+
+ this->zcl_basic_proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
+ ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH, ZIGBEE_ZCL_BASIC_INTERFACE,
+ NULL, NULL);
+
+ this->zcl_identify_proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
+ ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH,
+ ZIGBEE_ZCL_IDENTIFY_INTERFACE, NULL, NULL);
+
+ this->zcl_ias_zone_proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
+ ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH,
+ ZIGBEE_ZCL_IAS_ZONE_INTERFACE, NULL, NULL);
+
+ this->zcl_poll_control_proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
+ ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH,
+ ZIGBEE_ZCL_POLL_CONTROL_INTERFACE, NULL, NULL);
+
+ this->zcl_group_proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
+ ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH, ZIGBEE_ZCL_GROUP_INTERFACE,
+ NULL, NULL);
+
+ this->zcl_scene_proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
+ ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH, ZIGBEE_ZCL_SCENE_INTERFACE,
+ NULL, NULL);
+
+ this->zdo_bind_proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
+ ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH, ZIGBEE_ZDO_BIND_INTERFACE,
+ NULL, NULL);
+
+ this->zcl_color_control_proxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
+ ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH,
+ ZIGBEE_ZCL_COLOR_CONTROL_INTERFACE, NULL, NULL);
+
+ this->custom_gproxy = g_dbus_proxy_new_sync(gdbus_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
+ ZIGBEE_SERVER_NAME, ZIGBEE_CONTROL_OBJECT_PATH, ZIGBEE_CUSTOM_INTERFACE,
+ NULL, NULL);
+
+ this->m_pCancellable = g_cancellable_new();
+
+ return ZIGBEE_ERROR_NONE;
+}
+
+zb_error_e GDbus::Destroy(void)
+{
+ g_object_unref(this->service_gproxy);
+ this->service_gproxy = NULL;
+ g_object_unref(this->on_off_gproxy);
+ this->on_off_gproxy = NULL;
+ g_object_unref(this->door_lock_gproxy);
+ this->door_lock_gproxy = NULL;
+ g_object_unref(this->level_control_gproxy);
+ this->level_control_gproxy = NULL;
+ g_object_unref(this->thermostat_gproxy);
+ this->thermostat_gproxy = NULL;
+ g_object_unref(this->alarm_gproxy);
+ this->alarm_gproxy = NULL;
+ g_object_unref(this->fan_control_gproxy);
+ this->fan_control_gproxy = NULL;
+
+ g_object_unref(this->mfglib_gproxy);
+ this->mfglib_gproxy = NULL;
+ g_object_unref(this->zcl_global_proxy);
+ this->zcl_global_proxy = NULL;
+
+ g_object_unref(this->zdo_dev_proxy);
+ this->zdo_dev_proxy = NULL;
+ g_object_unref(this->zcl_basic_proxy);
+ this->zcl_basic_proxy = NULL;
+ g_object_unref(this->zcl_identify_proxy);
+ this->zcl_identify_proxy = NULL;
+ g_object_unref(this->zcl_ias_zone_proxy);
+ this->zcl_ias_zone_proxy = NULL;
+ g_object_unref(this->zcl_poll_control_proxy);
+ this->zcl_poll_control_proxy = NULL;
+ g_object_unref(this->zcl_group_proxy);
+ this->zcl_group_proxy = NULL;
+ g_object_unref(this->zcl_scene_proxy);
+ this->zcl_scene_proxy = NULL;
+ g_object_unref(this->zdo_bind_proxy);
+ this->zdo_bind_proxy = NULL;
+ g_object_unref(this->zcl_color_control_proxy);
+ this->zcl_color_control_proxy = NULL;
+ g_object_unref(this->custom_gproxy);
+ this->custom_gproxy = NULL;
+
+ g_cancellable_cancel(this->m_pCancellable);
+ g_object_unref(this->m_pCancellable);
+ this->m_pCancellable = NULL;
+
+ g_object_unref(this->m_pConnection);
+ this->m_pConnection = NULL;
+
+ return ZIGBEE_ERROR_NONE;
+}
+
+GDBusConnection *GDbus::GetConnection(void)
+{
+ return this->m_pConnection;
+}
+
+GCancellable *GDbus::GetCancellable(void)
+{
+ return this->m_pCancellable;
+}
+
+GDBusProxy *GDbus::get_proxy_type(gproxy_type_e type)
+{
+ GDBusProxy *proxy = NULL;
+
+ switch (type)
+ {
+ case SERVICE_GPROXY:
+ proxy = this->service_gproxy;
+ break;
+ case ON_OFF_GPROXY:
+ proxy = this->on_off_gproxy;
+ break;
+ case DOOR_LOCK_GPROXY:
+ proxy = this->door_lock_gproxy;
+ break;
+ case LEVEL_CONTROL_GPROXY:
+ proxy = this->level_control_gproxy;
+ break;
+ case THERMOSTAT_GPROXY:
+ proxy = this->thermostat_gproxy;
+ break;
+ case ALARM_GPROXY:
+ proxy = this->alarm_gproxy;
+ break;
+ case FAN_CONTROL_GPROXY:
+ proxy = this->fan_control_gproxy;
+ break;
+ case MFGLIB_GPROXY:
+ proxy = this->mfglib_gproxy;
+ break;
+ case ZCL_GLOBAL_PROXY:
+ proxy = this->zcl_global_proxy;
+ break;
+ case ZDO_DEV_PROXY:
+ proxy = this->zdo_dev_proxy;
+ break;
+ case ZCL_BASIC_PROXY:
+ proxy = this->zcl_basic_proxy;
+ break;
+ case ZCL_IDENTIFY_PROXY:
+ proxy = this->zcl_identify_proxy;
+ break;
+ case ZCL_IAS_ZONE_PROXY:
+ proxy = this->zcl_ias_zone_proxy;
+ break;
+ case ZCL_POLL_CONTROL_PROXY:
+ proxy = this->zcl_poll_control_proxy;
+ break;
+ case ZCL_GROUP_PROXY:
+ proxy = this->zcl_group_proxy;
+ break;
+ case ZCL_SCENE_PROXY:
+ proxy = this->zcl_scene_proxy;
+ break;
+ case ZDO_BIND_PROXY:
+ proxy = this->zdo_bind_proxy;
+ break;
+ case ZCL_COLOR_CONTROL_PROXY:
+ proxy = this->zcl_color_control_proxy;
+ break;
+ case CUSTOM_GPROXY:
+ proxy = this->custom_gproxy;
+ break;
+ }
+
+ return proxy;
+}
+
+GVariant *GDbus::invoke_proxy_method(gproxy_type_e type, const char *method, GVariant *params, int *error)
+{
+ GError *dbus_error = NULL;
+ GVariant *reply = NULL;
+ GDBusConnection *connection = NULL;
+ GDBusProxy *proxy = NULL;
+
+ connection = GetConnection();
+ if (connection == NULL) {
+ GLOGD("GDBusconnection is NULL");
+ *error = ZIGBEE_ERROR_IO_ERROR;
+ return reply;
+ }
+
+ proxy = get_proxy_type(type);
+ if (proxy == NULL) {
+ GLOGD("GDBusProxy is NULL");
+ *error = ZIGBEE_ERROR_IO_ERROR;
+ return reply;
+ }
+
+ reply = g_dbus_proxy_call_sync(proxy,
+ method,
+ params,
+ G_DBUS_CALL_FLAGS_NONE,
+ ZIGBEE_BROADCAST_TIMEOUT,
+ GetCancellable(),
+ &dbus_error);
+
+ if (reply == NULL) {
+ if (dbus_error != NULL) {
+ GLOGD("g_dbus_connection_call_sync() failed "
+ "error [%d: %s]", dbus_error->code, dbus_error->message);
+ if (strstr(dbus_error->message, "AccessDenied"))
+ *error = ZIGBEE_ERROR_PERMISSION_DENIED;
+ else
+ *error = ZIGBEE_ERROR_IO_ERROR;
+ g_error_free(dbus_error);
+ } else {
+ GLOGD("g_dbus_connection_call_sync() failed");
+ *error = ZIGBEE_ERROR_OPERATION_FAILED;
+ }
+ return NULL;
+ }
+
+ return reply;
+}
+
+GVariant *GDbus::InvokeMethod(const char *dest, const char *path,
+ const char *iface_name, const char *method, GVariant *params, int *error)
+{
+ GError *dbus_error = NULL;
+ GVariant *reply = NULL;
+ GDBusConnection *connection = NULL;
+
+ connection = GetConnection();
+ if (connection == NULL) {
+ GLOGD("GDBusconnection is NULL");
+ *error = ZIGBEE_ERROR_IO_ERROR;
+ return reply;
+ }
+
+ reply = g_dbus_connection_call_sync(connection,
+ dest,
+ path,
+ iface_name,
+ method,
+ params,
+ NULL,
+ G_DBUS_CALL_FLAGS_NONE,
+ ZIGBEE_BROADCAST_TIMEOUT,
+ GetCancellable(),
+ &dbus_error);
+
+ if (reply == NULL) {
+ if (dbus_error != NULL) {
+ GLOGD("g_dbus_connection_call_sync() failed "
+ "error [%d: %s]", dbus_error->code, dbus_error->message);
+ if (strstr(dbus_error->message, "AccessDenied"))
+ *error = ZIGBEE_ERROR_PERMISSION_DENIED;
+ else
+ *error = ZIGBEE_ERROR_IO_ERROR;
+ g_error_free(dbus_error);
+ } else {
+ GLOGD("g_dbus_connection_call_sync() failed");
+ *error = ZIGBEE_ERROR_OPERATION_FAILED;
+ }
+ return NULL;
+ }
+
+ return reply;
+}
+
+zb_error_e GDbus::InvokeMethodNonblock(const char *dest, const char *path,
+ const char *iface_name, const char *method, GVariant *params, int timeout,
+ GAsyncReadyCallback notify_func, void *user_data)
+{
+ GDBusConnection *connection = NULL;
+
+ connection = GetConnection();
+ if (connection == NULL) {
+ GLOGD("GDBusconnection is NULL");
+ return ZIGBEE_ERROR_IO_ERROR;
+ }
+
+ g_dbus_connection_call(connection,
+ dest,
+ path,
+ iface_name,
+ method,
+ params,
+ NULL,
+ G_DBUS_CALL_FLAGS_NONE,
+ timeout,
+ GetCancellable(),
+ (GAsyncReadyCallback) notify_func,
+ (gpointer)user_data);
+
+ return ZIGBEE_ERROR_NONE;
+}
--- /dev/null
+/*
+ * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __ZIGBEE_GDBUS_H__
+#define __ZIGBEE_GDBUS_H__
+
+#include <glib.h>
+#include "common.h"
+
+#define GMAINTIMEOUT 10000
+#define ZIGBEE_BROADCAST_TIMEOUT (9.5 + 2) * 1000 /**< default timeout for gdbus */
+
+
+#ifndef ZIGBEE_DBUS_INTERFACE
+#define ZIGBEE_DBUS_INTERFACE "org.tizen.zigbee"
+#endif
+
+#ifndef ZIGBEE_DBUS_OBJPATH
+#define ZIGBEE_DBUS_OBJPATH "/org/tizen/zigbee"
+#endif
+
+#define ZIGBEE_SERVER_NAME "org.tizen.zigbee"
+#define ZIGBEE_CONTROL_OBJECT_PATH "/org/tizen/zigbee/control"
+
+#define ZIGBEE_MANAGER_INTERFACE "org.tizen.zigbee.manager"
+#define ZIGBEE_SERVICE_INTERFACE "org.tizen.zigbee.service"
+#define ZIGBEE_SERVICE_OBJECT_PATH "/org/tizen/zigbee/service"
+
+#define ZIGBEE_ZDO_DEV_CONTROL_INTERFACE "org.tizen.zigbee.zdo_dev_control"
+#define ZIGBEE_ZDO_BIND_INTERFACE "org.tizen.zigbee.zdo_bind"
+#define ZIGBEE_ZCL_GLOBAL_CONTROL_INTERFACE "org.tizen.zigbee.zcl_global_control"
+#define ZIGBEE_ZCL_ALARM_INTERFACE "org.tizen.zigbee.zcl_alarm"
+#define ZIGBEE_ZCL_BASIC_INTERFACE "org.tizen.zigbee.zcl_basic"
+#define ZIGBEE_ZCL_COLOR_CONTROL_INTERFACE "org.tizen.zigbee.zcl_color_control"
+#define ZIGBEE_ZCL_ON_OFF_INTERFACE "org.tizen.zigbee.zcl_on_off"
+#define ZIGBEE_ZCL_DOOR_LOCK_INTERFACE "org.tizen.zigbee.zcl_door_lock"
+#define ZIGBEE_ZCL_GROUP_INTERFACE "org.tizen.zigbee.zcl_group"
+#define ZIGBEE_ZCL_FAN_CONTROL_INTERFACE "org.tizen.zigbee.zcl_fan_control"
+#define ZIGBEE_ZCL_IAS_ZONE_INTERFACE "org.tizen.zigbee.zcl_ias_zone"
+#define ZIGBEE_ZCL_IDENTIFY_INTERFACE "org.tizen.zigbee.zcl_identify"
+#define ZIGBEE_ZCL_LEVEL_CONTROL_INTERFACE "org.tizen.zigbee.zcl_level_control"
+#define ZIGBEE_ZCL_POLL_CONTROL_INTERFACE "org.tizen.zigbee.zcl_poll_control"
+#define ZIGBEE_ZCL_SCENE_INTERFACE "org.tizen.zigbee.zcl_scene"
+#define ZIGBEE_ZCL_THERMOSTAT_INTERFACE "org.tizen.zigbee.zcl_thermostat"
+#define ZIGBEE_CUSTOM_INTERFACE "org.tizen.zigbee.custom"
+#define ZIGBEE_MFGLIB_CONTROL_INTERFACE "org.tizen.zigbee.mfglib_control"
+
+typedef enum {
+ SERVICE_GPROXY,
+ ON_OFF_GPROXY,
+ DOOR_LOCK_GPROXY,
+ LEVEL_CONTROL_GPROXY,
+ THERMOSTAT_GPROXY,
+ ALARM_GPROXY,
+ FAN_CONTROL_GPROXY,
+ MFGLIB_GPROXY,
+ ZCL_GLOBAL_PROXY,
+ ZDO_DEV_PROXY,
+ ZCL_BASIC_PROXY,
+ ZCL_IDENTIFY_PROXY,
+ ZCL_IAS_ZONE_PROXY,
+ ZCL_POLL_CONTROL_PROXY,
+ ZCL_GROUP_PROXY,
+ ZCL_SCENE_PROXY,
+ ZDO_BIND_PROXY,
+ ZCL_COLOR_CONTROL_PROXY,
+ CUSTOM_GPROXY,
+} gproxy_type_e;
+
+class GDbus {
+ private:
+ GDBusConnection *m_pConnection;
+ GDBusProxy *service_gproxy;
+ GDBusProxy *on_off_gproxy;
+ GDBusProxy *door_lock_gproxy;
+ GDBusProxy *level_control_gproxy;
+ GDBusProxy *thermostat_gproxy;
+ GDBusProxy *alarm_gproxy;
+ GDBusProxy *fan_control_gproxy;
+ GDBusProxy *mfglib_gproxy;
+ GDBusProxy *zcl_global_proxy;
+ GDBusProxy *zdo_dev_proxy;
+ GDBusProxy *zcl_basic_proxy;
+ GDBusProxy *zcl_identify_proxy;
+ GDBusProxy *zcl_ias_zone_proxy;
+ GDBusProxy *zcl_poll_control_proxy;
+ GDBusProxy *zcl_group_proxy;
+ GDBusProxy *zcl_scene_proxy;
+ GDBusProxy *zdo_bind_proxy;
+ GDBusProxy *zcl_color_control_proxy;
+ GDBusProxy *custom_gproxy;
+ GCancellable *m_pCancellable;
+ GDBusProxy *get_proxy_type(gproxy_type_e type);
+
+ public:
+ GDbus();
+ ~GDbus();
+ zb_error_e Create(void);
+ zb_error_e Destroy(void);
+ GDBusConnection *GetConnection(void);
+ GCancellable *GetCancellable(void);
+
+ GVariant *invoke_proxy_method(gproxy_type_e type, const char *method, GVariant *params, int *error);
+ GVariant *InvokeMethod(const char *dest, const char *path,
+ const char *iface_name, const char *method, GVariant *params, int *error);
+ zb_error_e InvokeMethodNonblock(const char *dest, const char *path,
+ const char *iface_name, const char *method, GVariant *params, int timeout,
+ GAsyncReadyCallback notify_func, void *user_data);
+};
+#endif /* __ZIGBEE_GDBUS_H__ */