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_level_control.h>
23 static void on_level_control_move_to_level_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_level_control_move_to_level(ZigbeeZcl_level_control *level_control_object,
37 GDBusMethodInvocation *invocation,
44 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
45 ZigbeeZclLevelControlMoveToLevel_t req;
46 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
50 memset(&req, 0x0, sizeof(ZigbeeZclLevelControlMoveToLevel_t));
52 /* Update request structure */
53 req.node_id = node_id;
54 req.endpoint = endpoint;
56 req.transition = transition;
58 /* Allocate response callback data */
60 zigbee_service_dbus_interface_create_resp_cb_data(level_control_object,
62 if (NULL == resp_cb_data) {
63 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
65 /* Send failure response */
66 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
71 /* Dispatch request */
72 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
73 ZBLIB_DRIVER_TYPE_ZCL_LEVEL_CONTROL,
74 ZBLIB_ZCL_LEVEL_CONTROL_OPS_MOVE_TO_LEVEL,
76 on_level_control_move_to_level_resp, resp_cb_data);
78 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
80 /* Free response callback data */
81 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
83 /* Send failure response */
84 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
92 static void on_level_control_move_resp(ZigBeeServiceInterface *service_interface,
93 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
95 ZigbeeServiceInterfaceRespCbData_t *cb_data =
96 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
99 NOT_USED(service_interface);
100 NOT_USED(request_id);
102 NOT_USED(resp_data_len);
105 static gboolean on_level_control_move(ZigbeeZcl_level_control *level_control_object,
106 GDBusMethodInvocation *invocation,
113 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
114 ZigbeeZclLevelControlMove_t req;
115 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
119 memset(&req, 0x0, sizeof(ZigbeeZclLevelControlMove_t));
121 /* Update request structure */
122 req.node_id = node_id;
123 req.endpoint = endpoint;
124 req.move_mode = move_mode;
127 /* Allocate response callback data */
129 zigbee_service_dbus_interface_create_resp_cb_data(level_control_object,
130 invocation, NULL, 0);
131 if (NULL == resp_cb_data) {
132 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
134 /* Send failure response */
135 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
140 /* Dispatch request */
141 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
142 ZBLIB_DRIVER_TYPE_ZCL_LEVEL_CONTROL,
143 ZBLIB_ZCL_LEVEL_CONTROL_OPS_MOVE,
145 on_level_control_move_resp, resp_cb_data);
147 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
149 /* Free response callback data */
150 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
152 /* Send failure response */
153 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
161 static void on_level_control_step_resp(ZigBeeServiceInterface *service_interface,
162 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
164 ZigbeeServiceInterfaceRespCbData_t *cb_data =
165 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
168 NOT_USED(service_interface);
169 NOT_USED(request_id);
171 NOT_USED(resp_data_len);
174 static gboolean on_level_control_step(ZigbeeZcl_level_control *level_control_object,
175 GDBusMethodInvocation *invocation,
180 gshort transition_time,
183 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
184 ZigbeeZclLevelControlStep_t req;
185 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
189 memset(&req, 0x0, sizeof(ZigbeeZclLevelControlStep_t));
191 /* Update request structure */
192 req.node_id = node_id;
193 req.endpoint = endpoint;
194 req.step_mode = step_mode;
195 req.move_mode = move_mode;
196 req.transition_time = transition_time;
198 /* Allocate response callback data */
200 zigbee_service_dbus_interface_create_resp_cb_data(level_control_object,
201 invocation, NULL, 0);
202 if (NULL == resp_cb_data) {
203 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
205 /* Send failure response */
206 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
211 /* Dispatch request */
212 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
213 ZBLIB_DRIVER_TYPE_ZCL_LEVEL_CONTROL,
214 ZBLIB_ZCL_LEVEL_CONTROL_OPS_STEP,
216 on_level_control_step_resp, resp_cb_data);
218 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
220 /* Free response callback data */
221 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
223 /* Send failure response */
224 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
232 static void on_level_control_move_to_level_with_on_off_resp(ZigBeeServiceInterface *service_interface,
233 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
235 ZigbeeServiceInterfaceRespCbData_t *cb_data =
236 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
239 NOT_USED(service_interface);
240 NOT_USED(request_id);
242 NOT_USED(resp_data_len);
245 static gboolean on_level_control_move_to_level_with_on_off(
246 ZigbeeZcl_level_control *level_control_object,
247 GDBusMethodInvocation *invocation,
254 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
255 ZigbeeZclLevelControlMoveToLevelWithOnOff_t req;
256 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
260 memset(&req, 0x0, sizeof(ZigbeeZclLevelControlMoveToLevelWithOnOff_t));
262 /* Update request structure */
263 req.node_id = node_id;
264 req.endpoint = endpoint;
266 req.transition = transition;
268 /* Allocate response callback data */
270 zigbee_service_dbus_interface_create_resp_cb_data(level_control_object,
271 invocation, NULL, 0);
272 if (NULL == resp_cb_data) {
273 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
275 /* Send failure response */
276 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
281 /* Dispatch request */
282 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
283 ZBLIB_DRIVER_TYPE_ZCL_LEVEL_CONTROL,
284 ZBLIB_ZCL_LEVEL_CONTROL_OPS_MOVE_TO_LEVEL_WITH_ON_OFF,
286 on_level_control_move_to_level_with_on_off_resp, resp_cb_data);
288 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
290 /* Free response callback data */
291 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
293 /* Send failure response */
294 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
302 static void on_level_control_move_with_on_off_resp(ZigBeeServiceInterface *service_interface,
303 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
305 ZigbeeServiceInterfaceRespCbData_t *cb_data =
306 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
309 NOT_USED(service_interface);
310 NOT_USED(request_id);
312 NOT_USED(resp_data_len);
315 static gboolean on_level_control_move_with_on_off(
316 ZigbeeZcl_level_control *level_control_object,
317 GDBusMethodInvocation *invocation,
324 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
325 ZigbeeZclLevelControlMoveWithOnOff_t req;
326 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
330 memset(&req, 0x0, sizeof(ZigbeeZclLevelControlMoveWithOnOff_t));
332 /* Update request structure */
333 req.node_id = node_id;
334 req.endpoint = endpoint;
335 req.move_mode = move_mode;
338 /* Allocate response callback data */
340 zigbee_service_dbus_interface_create_resp_cb_data(level_control_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_LEVEL_CONTROL,
354 ZBLIB_ZCL_LEVEL_CONTROL_OPS_MOVE_WITH_ON_OFF,
356 on_level_control_move_with_on_off_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_level_control_step_with_on_off_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_level_control_step_with_on_off(
386 ZigbeeZcl_level_control *level_control_object,
387 GDBusMethodInvocation *invocation,
392 gshort transition_time,
395 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
396 ZigbeeZclLevelControlStepWithOnOff_t req;
397 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
401 memset(&req, 0x0, sizeof(ZigbeeZclLevelControlStepWithOnOff_t));
403 /* Update request structure */
404 req.node_id = node_id;
405 req.endpoint = endpoint;
406 req.step_mode = step_mode;
407 req.move_mode = move_mode;
408 req.transition_time = transition_time;
410 /* Allocate response callback data */
412 zigbee_service_dbus_interface_create_resp_cb_data(level_control_object,
413 invocation, NULL, 0);
414 if (NULL == resp_cb_data) {
415 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
417 /* Send failure response */
418 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
423 /* Dispatch request */
424 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
425 ZBLIB_DRIVER_TYPE_ZCL_LEVEL_CONTROL,
426 ZBLIB_ZCL_LEVEL_CONTROL_OPS_STEP_WITH_ON_OFF,
428 on_level_control_step_with_on_off_resp, resp_cb_data);
430 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
432 /* Free response callback data */
433 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
435 /* Send failure response */
436 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
444 static void on_level_control_stop_resp(ZigBeeServiceInterface *service_interface,
445 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
447 ZigbeeServiceInterfaceRespCbData_t *cb_data =
448 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
451 NOT_USED(service_interface);
452 NOT_USED(request_id);
454 NOT_USED(resp_data_len);
457 static gboolean on_level_control_stop(ZigbeeZcl_level_control *level_control_object,
458 GDBusMethodInvocation *invocation,
463 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
464 ZigbeeZclLevelControlStop_t req;
465 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
469 memset(&req, 0x0, sizeof(ZigbeeZclLevelControlStop_t));
471 /* Update request structure */
472 req.node_id = node_id;
473 req.endpoint = endpoint;
475 /* Allocate response callback data */
477 zigbee_service_dbus_interface_create_resp_cb_data(level_control_object,
478 invocation, NULL, 0);
479 if (NULL == resp_cb_data) {
480 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
482 /* Send failure response */
483 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
488 /* Dispatch request */
489 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
490 ZBLIB_DRIVER_TYPE_ZCL_LEVEL_CONTROL,
491 ZBLIB_ZCL_LEVEL_CONTROL_OPS_STOP,
493 on_level_control_stop_resp, resp_cb_data);
495 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
497 /* Free response callback data */
498 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
500 /* Send failure response */
501 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
509 void zigbee_service_dbus_interface_zcl_level_control_notification(ZigBeeServiceInterface *service_interface,
510 guint noti_id, gpointer noti_data, guint noti_data_len, gpointer noti_cb_data)
512 if (NULL == service_interface) {
513 Z_LOGE("service_interface is NULL");
519 NOT_USED(noti_data_len);
520 NOT_USED(noti_cb_data);
523 gboolean zigbee_service_dbus_interface_zcl_level_control_init(ZigBeeServiceInterface *service_interface,
524 ZigbeeObjectSkeleton *zigbee_object)
526 ZigbeeZcl_level_control *level_control_object;
528 if (NULL == service_interface) {
529 Z_LOGE("service_interface is NULL");
533 level_control_object = zigbee_zcl_level_control_skeleton_new();
534 zigbee_object_skeleton_set_zcl_level_control(zigbee_object, level_control_object);
535 g_object_unref(level_control_object);
537 Z_LOGI("level_control_object: [%p]", level_control_object);
540 * Register signal handlers for 'level_control' interface
542 g_signal_connect(level_control_object,
543 "handle-move-to-level",
544 G_CALLBACK(on_level_control_move_to_level), service_interface);
546 g_signal_connect(level_control_object,
548 G_CALLBACK(on_level_control_move), service_interface);
550 g_signal_connect(level_control_object,
552 G_CALLBACK(on_level_control_step), service_interface);
554 g_signal_connect(level_control_object,
555 "handle-move-to-level-with-on-off",
556 G_CALLBACK(on_level_control_move_to_level_with_on_off), service_interface);
558 g_signal_connect(level_control_object,
559 "handle-move-with-on-off",
560 G_CALLBACK(on_level_control_move_with_on_off), service_interface);
562 g_signal_connect(level_control_object,
563 "handle-step-with-on-off",
564 G_CALLBACK(on_level_control_step_with_on_off), service_interface);
566 g_signal_connect(level_control_object,
568 G_CALLBACK(on_level_control_stop), service_interface);