Implement ZCL IAS Zone Cluster
[platform/core/connectivity/zigbee-manager.git] / zigbee-daemon / zigbee-lib / src / drivers / zblib_driver_zcl_ias_zone.c
index 4ece566..90f6cab 100644 (file)
 
 #include <zblib.h>
 #include <zblib_driver.h>
+#include <zblib_plugin.h>
 #include <zblib_request.h>
 
 #include "zblib_driver_zcl_ias_zone.h"
 
 /**< Private data */
 typedef struct {
-       ZblibDriverZcliasZoneOps_t *ops; /**< Operations */
-} ZblibDriverZcliasZonePrivData_t;
+       ZblibDriverZclIasZoneOps_t *ops; /**< Operations */
+} ZblibDriverZclIasZonePrivData_t;
 
 static gboolean __zblib_driver_zcl_ias_zone_dispatcher(ZigBeeDriver *driver, guint request_id)
 {
        ZigBeeService *service = NULL;
-       ZblibDriverZcliasZonePrivData_t *priv_data = NULL;
-       ZblibDriverZcliasZoneOps_t *ops = NULL;
+       ZblibDriverZclIasZonePrivData_t *priv_data = NULL;
+       ZblibDriverZclIasZoneOps_t *ops = NULL;
        guint request_type;
        guint ops_id;
        gboolean ret = FALSE;
@@ -54,7 +55,7 @@ static gboolean __zblib_driver_zcl_ias_zone_dispatcher(ZigBeeDriver *driver, gui
        /* Fetch ops ID */
        ops_id = zblib_request_get_ops_id(request_type);
        switch (ops_id) {
-       case ZBLIB_ZCLIAS_CONTROL_OPS_ENROLL_RESPONSE: {
+       case ZBLIB_ZCL_IAS_ZONE_OPS_ENROLL_RESPONSE: {
                zblib_check_null_ret_error("ops->enroll_response",
                        ops->enroll_response, FALSE);
 
@@ -73,7 +74,7 @@ static gboolean __zblib_driver_zcl_ias_zone_dispatcher(ZigBeeDriver *driver, gui
 
 static void __zblib_driver_zcl_ias_zone_free_hook(ZigBeeDriver *driver)
 {
-       ZblibDriverZcliasZonePrivData_t *priv_data = NULL;
+       ZblibDriverZclIasZonePrivData_t *priv_data = NULL;
 
        zblib_check_null_ret("driver", driver);
 
@@ -87,24 +88,38 @@ static void __zblib_driver_zcl_ias_zone_free_hook(ZigBeeDriver *driver)
 
 ZigBeeDriver *zblib_driver_zcl_ias_zone_new(ZigBeePlugin *plugin,
        const gchar *driver_name,
-       ZblibDriverZcliasZoneOps_t *ops)
+       ZblibDriverZclIasZoneOps_t *ops)
 {
        ZigBeeDriver *driver = NULL;
-       ZblibDriverZcliasZonePrivData_t *priv_data = NULL;
+       ZigBeeService *service = NULL;
+       ZblibDriverZclIasZonePrivData_t *priv_data = NULL;
        gboolean ret;
 
        zblib_check_null_ret_error("plugin", plugin, NULL);
 
        /* Create new driver */
-       driver = zblib_driver_new(plugin, driver_name, ZBLIB_DRIVER_TYPE_ZCLIAS_CONTROL);
+       driver = zblib_driver_new(plugin, driver_name, ZBLIB_DRIVER_TYPE_ZCL_IAS_ZONE);
        zblib_check_null_ret_error("driver", driver, NULL);
 
        /* Allocate memory for private data */
-       priv_data = g_malloc0(sizeof(ZblibDriverZcliasZonePrivData_t));
+       priv_data = g_malloc0(sizeof(ZblibDriverZclIasZonePrivData_t));
 
        /* 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) {