Implement ZCL OnOff Cluster
[platform/core/connectivity/zigbee-manager.git] / zigbee-daemon / zigbee-lib / src / drivers / zblib_driver_zcl_on_off.c
index 1cdaf4a..d2098bd 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <zblib.h>
 #include <zblib_driver.h>
+#include <zblib_plugin.h>
 #include <zblib_request.h>
 
 #include "zblib_driver_zcl_on_off.h"
@@ -54,7 +55,7 @@ static gboolean __zblib_driver_zcl_on_off_dispatcher(ZigBeeDriver *driver, guint
        /* Fetch ops ID */
        ops_id = zblib_request_get_ops_id(request_type);
        switch (ops_id) {
-       case ZBLIB_ON_OFF_OPS_SET_ON_OFF: {
+       case ZBLIB_ZCL_ON_OFF_OPS_SET_ON_OFF: {
                zblib_check_null_ret_error("ops->set_on_off",
                        ops->set_on_off, FALSE);
 
@@ -62,7 +63,7 @@ static gboolean __zblib_driver_zcl_on_off_dispatcher(ZigBeeDriver *driver, guint
        }
        break;
 
-       case ZBLIB_ON_OFF_OPS_GET_ON_OFF_STATE: {
+       case ZBLIB_ZCL_ON_OFF_OPS_GET_ON_OFF_STATE: {
                zblib_check_null_ret_error("ops->get_on_off_state",
                        ops->get_on_off_state, FALSE);
 
@@ -97,6 +98,7 @@ ZigBeeDriver *zblib_driver_zcl_on_off_new(ZigBeePlugin *plugin,
        const gchar *driver_name,
        ZblibDriverZclOnOffOps_t *ops)
 {
+       ZigBeeService *service = NULL;
        ZigBeeDriver *driver = NULL;
        ZblibDriverZclOnOffPrivData_t *priv_data = NULL;
        gboolean ret;
@@ -104,7 +106,7 @@ ZigBeeDriver *zblib_driver_zcl_on_off_new(ZigBeePlugin *plugin,
        zblib_check_null_ret_error("plugin", plugin, NULL);
 
        /* Create new driver */
-       driver = zblib_driver_new(plugin, driver_name, ZBLIB_DRIVER_TYPE_ON_OFF);
+       driver = zblib_driver_new(plugin, driver_name, ZBLIB_DRIVER_TYPE_ZCL_ON_OFF);
        zblib_check_null_ret_error("driver", driver, NULL);
 
        /* Allocate memory for private data */
@@ -113,6 +115,19 @@ ZigBeeDriver *zblib_driver_zcl_on_off_new(ZigBeePlugin *plugin,
        /* Update private data */
        priv_data->ops = ops;
 
+       /* Link service to driver */
+       service = zblib_plugin_ref_service(plugin);
+       if (NULL == service) {
+               Z_LOGE("zblib_plugin_ref_service failed!");
+
+               /* Free allocated resources */
+               g_free(priv_data);
+               g_free(driver);
+
+               return NULL;
+       }
+       zblib_driver_link_service(driver, service);
+
        /* Link private data to driver */
        ret = zblib_driver_link_object(driver, priv_data);
        if (FALSE == ret) {