2 * Copyright (c) 2016 Samsung Electronics Co., Ltd. All rights reserved.
4 * Contact: Suresh Kumar N (suresh.n@samsung.com)
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
10 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 #include "zigbee_service_interface_common.h"
21 #include <zblib_driver_zcl_alarm.h>
23 static void on_alarm_get_alarm_count_resp(ZigBeeServiceInterface *service_interface,
24 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
26 ZigbeeServiceInterfaceRespCbData_t *cb_data =
27 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
30 NOT_USED(service_interface);
33 NOT_USED(resp_data_len);
36 static gboolean on_alarm_get_alarm_count(ZigbeeZcl_alarm *alarm_object,
37 GDBusMethodInvocation *invocation,
42 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
43 ZigbeeZclAlarmGetAlarmCount_t req;
44 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
46 GVariantIter *iter = NULL;
51 memset(&req, 0x0, sizeof(ZigbeeZclAlarmGetAlarmCount_t));
53 /* Update request structure */
54 g_variant_get(eui64, "ay", &iter);
55 while (g_variant_iter_loop(iter, "y", req.eui64[i])) {
57 if (i >= ZIGBEE_EUI64_SIZE)
60 req.endpoint = endpoint;
62 /* Allocate response callback data */
64 zigbee_service_dbus_interface_create_resp_cb_data(alarm_object,
66 if (NULL == resp_cb_data) {
67 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
69 /* Send failure response */
70 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
75 /* Dispatch request */
76 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
77 ZBLIB_DRIVER_TYPE_ZCL_ALARM,
78 ZBLIB_ZCL_ALARM_OPS_GET_ALARM_COUNT,
80 on_alarm_get_alarm_count_resp, resp_cb_data);
82 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
84 /* Free response callback data */
85 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
87 /* Send failure response */
88 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
96 static void on_alarm_reset_alarm_resp(ZigBeeServiceInterface *service_interface,
97 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
99 ZigbeeServiceInterfaceRespCbData_t *cb_data =
100 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
103 NOT_USED(service_interface);
104 NOT_USED(request_id);
106 NOT_USED(resp_data_len);
109 static gboolean on_alarm_reset_alarm(ZigbeeZcl_alarm *alarm_object,
110 GDBusMethodInvocation *invocation,
117 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
118 ZigbeeZclAlarmResetAlarm_t req;
119 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
123 memset(&req, 0x0, sizeof(ZigbeeZclAlarmResetAlarm_t));
125 /* Update request structure */
126 req.node_id = node_id;
127 req.endpoint = endpoint;
128 req.alarm_code = alarmcode;
129 req.cluster_id = cluster_id;
131 /* Allocate response callback data */
133 zigbee_service_dbus_interface_create_resp_cb_data(alarm_object,
134 invocation, NULL, 0);
135 if (NULL == resp_cb_data) {
136 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
138 /* Send failure response */
139 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
144 /* Dispatch request */
145 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
146 ZBLIB_DRIVER_TYPE_ZCL_ALARM,
147 ZBLIB_ZCL_ALARM_OPS_RESET_ALARM,
149 on_alarm_reset_alarm_resp, resp_cb_data);
151 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
153 /* Free response callback data */
154 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
156 /* Send failure response */
157 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
165 static void on_alarm_reset_all_alarm_resp(ZigBeeServiceInterface *service_interface,
166 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
168 ZigbeeServiceInterfaceRespCbData_t *cb_data =
169 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
172 NOT_USED(service_interface);
173 NOT_USED(request_id);
175 NOT_USED(resp_data_len);
178 static gboolean on_alarm_reset_all_alarm(ZigbeeZcl_alarm *alarm_object,
179 GDBusMethodInvocation *invocation,
184 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
185 ZigbeeZclAlarmResetAllAlarm_t req;
186 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
190 memset(&req, 0x0, sizeof(ZigbeeZclAlarmResetAllAlarm_t));
192 /* Update request structure */
193 req.node_id = node_id;
194 req.endpoint = endpoint;
196 /* Allocate response callback data */
198 zigbee_service_dbus_interface_create_resp_cb_data(alarm_object,
199 invocation, NULL, 0);
200 if (NULL == resp_cb_data) {
201 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
203 /* Send failure response */
204 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
209 /* Dispatch request */
210 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
211 ZBLIB_DRIVER_TYPE_ZCL_ALARM,
212 ZBLIB_ZCL_ALARM_OPS_RESET_ALL_ALARM,
214 on_alarm_reset_all_alarm_resp, resp_cb_data);
216 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
218 /* Free response callback data */
219 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
221 /* Send failure response */
222 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
230 static void on_alarm_alarm_resp(ZigBeeServiceInterface *service_interface,
231 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
233 ZigbeeServiceInterfaceRespCbData_t *cb_data =
234 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
237 NOT_USED(service_interface);
238 NOT_USED(request_id);
240 NOT_USED(resp_data_len);
243 static gboolean on_alarm_alarm(ZigbeeZcl_alarm *alarm_object,
244 GDBusMethodInvocation *invocation,
251 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
252 ZigbeeZclAlarmAlarm_t req;
253 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
255 GVariantIter *iter = NULL;
260 memset(&req, 0x0, sizeof(ZigbeeZclAlarmAlarm_t));
262 /* Update request structure */
263 g_variant_get(eui64, "ay", &iter);
264 while (g_variant_iter_loop(iter, "y", req.eui64[i])) {
266 if (i >= ZIGBEE_EUI64_SIZE)
269 req.endpoint = endpoint;
270 req.alarm_code = alarmcode;
271 req.cluster_id = cluster_id;
273 /* Allocate response callback data */
275 zigbee_service_dbus_interface_create_resp_cb_data(alarm_object,
276 invocation, NULL, 0);
277 if (NULL == resp_cb_data) {
278 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
280 /* Send failure response */
281 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
286 /* Dispatch request */
287 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
288 ZBLIB_DRIVER_TYPE_ZCL_ALARM,
289 ZBLIB_ZCL_ALARM_OPS_ALARM,
291 on_alarm_alarm_resp, resp_cb_data);
293 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
295 /* Free response callback data */
296 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
298 /* Send failure response */
299 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
307 static void on_alarm_reset_alarm_log_resp(ZigBeeServiceInterface *service_interface,
308 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
310 ZigbeeServiceInterfaceRespCbData_t *cb_data =
311 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
314 NOT_USED(service_interface);
315 NOT_USED(request_id);
317 NOT_USED(resp_data_len);
320 static gboolean on_alarm_reset_alarm_log(ZigbeeZcl_alarm *alarm_object,
321 GDBusMethodInvocation *invocation,
326 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
327 ZigbeeZclAlarmResetAlarmLogs_t req;
328 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
332 memset(&req, 0x0, sizeof(ZigbeeZclAlarmResetAlarmLogs_t));
334 /* Update request structure */
335 req.node_id = node_id;
336 req.endpoint = endpoint;
338 /* Allocate response callback data */
340 zigbee_service_dbus_interface_create_resp_cb_data(alarm_object,
341 invocation, NULL, 0);
342 if (NULL == resp_cb_data) {
343 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
345 /* Send failure response */
346 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
351 /* Dispatch request */
352 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
353 ZBLIB_DRIVER_TYPE_ZCL_ALARM,
354 ZBLIB_ZCL_ALARM_OPS_RESET_ALARM_LOG,
356 on_alarm_reset_alarm_log_resp, resp_cb_data);
358 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
360 /* Free response callback data */
361 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
363 /* Send failure response */
364 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
372 static void on_alarm_get_alarm_resp(ZigBeeServiceInterface *service_interface,
373 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
375 ZigbeeServiceInterfaceRespCbData_t *cb_data =
376 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
379 NOT_USED(service_interface);
380 NOT_USED(request_id);
382 NOT_USED(resp_data_len);
385 static gboolean on_alarm_get_alarm(ZigbeeZcl_alarm *alarm_object,
386 GDBusMethodInvocation *invocation,
391 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
392 ZigbeeZclAlarmGetAlarm_t req;
393 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
397 memset(&req, 0x0, sizeof(ZigbeeZclAlarmGetAlarm_t));
399 /* Update request structure */
400 req.node_id = node_id;
401 req.endpoint = endpoint;
403 /* Allocate response callback data */
405 zigbee_service_dbus_interface_create_resp_cb_data(alarm_object,
406 invocation, NULL, 0);
407 if (NULL == resp_cb_data) {
408 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
410 /* Send failure response */
411 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
416 /* Dispatch request */
417 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
418 ZBLIB_DRIVER_TYPE_ZCL_ALARM,
419 ZBLIB_ZCL_ALARM_OPS_GET_ALARM,
421 on_alarm_get_alarm_resp, resp_cb_data);
423 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
425 /* Free response callback data */
426 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
428 /* Send failure response */
429 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
437 void zigbee_service_dbus_interface_zcl_alarm_notification(ZigBeeServiceInterface *service_interface,
438 guint noti_id, gpointer noti_data, guint noti_data_len, gpointer noti_cb_data)
440 if (NULL == service_interface) {
441 Z_LOGE("service_interface is NULL");
447 NOT_USED(noti_data_len);
448 NOT_USED(noti_cb_data);
451 gboolean zigbee_service_dbus_interface_zcl_alarm_init(ZigBeeServiceInterface *service_interface,
452 ZigbeeObjectSkeleton *zigbee_object)
454 ZigbeeZcl_alarm *alarm_object;
456 if (NULL == service_interface) {
457 Z_LOGE("service_interface is NULL");
461 alarm_object = zigbee_zcl_alarm_skeleton_new();
462 zigbee_object_skeleton_set_zcl_alarm(zigbee_object, alarm_object);
463 g_object_unref(alarm_object);
465 Z_LOGI("alarm_object: [%p]", alarm_object);
468 * Register signal handlers for 'alarm' interface
470 g_signal_connect(alarm_object,
471 "handle-get-alarm-count",
472 G_CALLBACK(on_alarm_get_alarm_count), service_interface);
474 g_signal_connect(alarm_object,
475 "handle-reset-alarm",
476 G_CALLBACK(on_alarm_reset_alarm), service_interface);
478 g_signal_connect(alarm_object,
479 "handle-reset-all-alarm",
480 G_CALLBACK(on_alarm_reset_all_alarm), service_interface);
482 g_signal_connect(alarm_object,
484 G_CALLBACK(on_alarm_alarm), service_interface);
486 g_signal_connect(alarm_object,
487 "handle-reset-alarm-log",
488 G_CALLBACK(on_alarm_reset_alarm_log), service_interface);
490 g_signal_connect(alarm_object,
492 G_CALLBACK(on_alarm_get_alarm), service_interface);