4456ce39857e80d1a12a3c5652eb75113354c87b
[platform/core/connectivity/zigbee-manager.git] / zigbee-daemon / zigbee-lib / src / drivers / zblib_driver_zclias_control.c
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd. All rights reserved.
3  *
4  * Contact: Suresh Kumar N (suresh.n@samsung.com)
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18 #include <zblib.h>
19 #include <zblib_driver.h>
20
21 #include "zblib_driver_zclias_control.h"
22
23 /**< Private data */
24 typedef struct {
25         ZblibDriverZcliasControlOps_t *ops; /**< Operations */
26 } ZblibDriverZcliasControlPrivData_t;
27
28 static gboolean __zblib_driver_zclias_control_dispatcher(ZigBeeDriver *driver)
29 {
30         if (NULL == driver) {
31                 Z_LOGE("driver is NULL");
32                 return FALSE;
33         }
34
35         return TRUE;
36 }
37
38 static void __zblib_driver_zclias_control_free_hook(ZigBeeDriver *driver)
39 {
40         ZblibDriverZcliasControlPrivData_t *priv_data = NULL;
41
42         if (NULL == driver) {
43                 Z_LOGE("driver is NULL");
44                 return;
45         }
46
47         /* Fetch private data */
48         priv_data = zblib_driver_ref_object(driver);
49         if (NULL == priv_data) {
50                 Z_LOGE("priv_data is NULL");
51                 return;
52         }
53
54         /* Free resources */
55         g_free(priv_data);
56 }
57
58 ZigBeeDriver *zblib_driver_zclias_control_new(ZigBeePlugin *plugin,
59         const gchar *driver_name,
60         ZblibDriverZcliasControlOps_t *ops)
61 {
62         ZigBeeDriver *driver = NULL;
63         ZblibDriverZcliasControlPrivData_t *priv_data = NULL;
64         gboolean ret;
65
66         if (NULL == plugin) {
67                 Z_LOGE("plugin is NULL");
68                 return NULL;
69         }
70
71         /* Create new driver */
72         driver = zblib_driver_new(plugin, driver_name, ZBLIB_DRIVER_TYPE_ZCLIAS_CONTROL);
73         if (NULL == driver) {
74                 Z_LOGE("driver is NULL");
75                 return NULL;
76         }
77
78         /* Allocate memory for private data */
79         priv_data = g_malloc0(sizeof(ZblibDriverZcliasControlPrivData_t));
80
81         /* Update private data */
82         priv_data->ops = ops;
83
84         /* Link private data to driver */
85         ret = zblib_driver_link_object(driver, priv_data);
86         if (FALSE == ret) {
87                 Z_LOGE("zblib_driver_link_object failed!");
88
89                 /* Free allocated resources */
90                 g_free(priv_data);
91                 g_free(driver);
92
93                 return NULL;
94         }
95
96         /* Set operations dispatcher function */
97         ret = zblib_driver_set_dispatcher(driver, __zblib_driver_zclias_control_dispatcher);
98         if (FALSE == ret) {
99                 Z_LOGE("zblib_driver_set_dispatcher failed!");
100
101                 /* Free allocated resources */
102                 g_free(priv_data);
103                 g_free(driver);
104
105                 return NULL;
106         }
107
108         /* Set free hook function */
109         ret = zblib_driver_set_free_hook(driver, __zblib_driver_zclias_control_free_hook);
110         if (FALSE == ret) {
111                 Z_LOGE("zblib_driver_set_free_hook failed!");
112
113                 /* Free allocated resources */
114                 g_free(priv_data);
115                 g_free(driver);
116
117                 return NULL;
118         }
119
120         return driver;
121 }
122
123 void zblib_driver_zclias_control_free(ZigBeeDriver *driver)
124 {
125         if (NULL == driver) {
126                 Z_LOGE("driver is NULL");
127                 return;
128         }
129
130         /* Free driver */
131         zblib_driver_free(driver);
132 }