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_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(ZigbeeLevel_control *level_control_object,
37 GDBusMethodInvocation *invocation,
44 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
45 ZigbeeLevelControlMoveToLevel_t req;
46 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
50 memset(&req, 0x0, sizeof(ZigbeeLevelControlMoveToLevel_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_LEVEL_CONTROL,
74 ZBLIB_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(ZigbeeLevel_control *level_control_object,
106 GDBusMethodInvocation *invocation,
113 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
114 ZigbeeLevelControlMove_t req;
115 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
119 memset(&req, 0x0, sizeof(ZigbeeLevelControlMove_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_LEVEL_CONTROL,
143 ZBLIB_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(ZigbeeLevel_control *level_control_object,
175 GDBusMethodInvocation *invocation,
180 gshort transition_time,
183 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
184 ZigbeeLevelControlStep_t req;
185 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
189 memset(&req, 0x0, sizeof(ZigbeeLevelControlStep_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_LEVEL_CONTROL,
214 ZBLIB_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(ZigbeeLevel_control *level_control_object,
246 GDBusMethodInvocation *invocation,
253 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
254 ZigbeeLevelControlMoveToLevelWithOnOff_t req;
255 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
259 memset(&req, 0x0, sizeof(ZigbeeLevelControlMoveToLevelWithOnOff_t));
261 /* Update request structure */
262 req.node_id = node_id;
263 req.endpoint = endpoint;
265 req.transition = transition;
267 /* Allocate response callback data */
269 zigbee_service_dbus_interface_create_resp_cb_data(level_control_object,
270 invocation, NULL, 0);
271 if (NULL == resp_cb_data) {
272 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
274 /* Send failure response */
275 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
280 /* Dispatch request */
281 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
282 ZBLIB_DRIVER_TYPE_LEVEL_CONTROL,
283 ZBLIB_LEVEL_CONTROL_OPS_MOVE_TO_LEVEL_WITH_ON_OFF,
285 on_level_control_move_to_level_with_on_off_resp, resp_cb_data);
287 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
289 /* Free response callback data */
290 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
292 /* Send failure response */
293 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
301 static void on_level_control_move_with_on_off_resp(ZigBeeServiceInterface *service_interface,
302 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
304 ZigbeeServiceInterfaceRespCbData_t *cb_data =
305 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
308 NOT_USED(service_interface);
309 NOT_USED(request_id);
311 NOT_USED(resp_data_len);
314 static gboolean on_level_control_move_with_on_off(ZigbeeLevel_control *level_control_object,
315 GDBusMethodInvocation *invocation,
322 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
323 ZigbeeLevelControlMoveWithOnOff_t req;
324 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
328 memset(&req, 0x0, sizeof(ZigbeeLevelControlMoveWithOnOff_t));
330 /* Update request structure */
331 req.node_id = node_id;
332 req.endpoint = endpoint;
333 req.move_mode = move_mode;
336 /* Allocate response callback data */
338 zigbee_service_dbus_interface_create_resp_cb_data(level_control_object,
339 invocation, NULL, 0);
340 if (NULL == resp_cb_data) {
341 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
343 /* Send failure response */
344 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
349 /* Dispatch request */
350 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
351 ZBLIB_DRIVER_TYPE_LEVEL_CONTROL,
352 ZBLIB_LEVEL_CONTROL_OPS_MOVE_WITH_ON_OFF,
354 on_level_control_move_with_on_off_resp, resp_cb_data);
356 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
358 /* Free response callback data */
359 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
361 /* Send failure response */
362 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
370 static void on_level_control_step_with_on_off_resp(ZigBeeServiceInterface *service_interface,
371 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
373 ZigbeeServiceInterfaceRespCbData_t *cb_data =
374 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
377 NOT_USED(service_interface);
378 NOT_USED(request_id);
380 NOT_USED(resp_data_len);
383 static gboolean on_level_control_step_with_on_off(ZigbeeLevel_control *level_control_object,
384 GDBusMethodInvocation *invocation,
389 gshort transition_time,
392 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
393 ZigbeeLevelControlStepWithOnOff_t req;
394 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
398 memset(&req, 0x0, sizeof(ZigbeeLevelControlStepWithOnOff_t));
400 /* Update request structure */
401 req.node_id = node_id;
402 req.endpoint = endpoint;
403 req.step_mode = step_mode;
404 req.move_mode = move_mode;
405 req.transition_time = transition_time;
407 /* Allocate response callback data */
409 zigbee_service_dbus_interface_create_resp_cb_data(level_control_object,
410 invocation, NULL, 0);
411 if (NULL == resp_cb_data) {
412 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
414 /* Send failure response */
415 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
420 /* Dispatch request */
421 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
422 ZBLIB_DRIVER_TYPE_LEVEL_CONTROL,
423 ZBLIB_LEVEL_CONTROL_OPS_STEP_WITH_ON_OFF,
425 on_level_control_step_with_on_off_resp, resp_cb_data);
427 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
429 /* Free response callback data */
430 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
432 /* Send failure response */
433 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
441 static void on_level_control_stop_resp(ZigBeeServiceInterface *service_interface,
442 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
444 ZigbeeServiceInterfaceRespCbData_t *cb_data =
445 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
448 NOT_USED(service_interface);
449 NOT_USED(request_id);
451 NOT_USED(resp_data_len);
454 static gboolean on_level_control_stop(ZigbeeLevel_control *level_control_object,
455 GDBusMethodInvocation *invocation,
460 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
461 ZigbeeLevelControlStop_t req;
462 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
466 memset(&req, 0x0, sizeof(ZigbeeLevelControlStop_t));
468 /* Update request structure */
469 req.node_id = node_id;
470 req.endpoint = endpoint;
472 /* Allocate response callback data */
474 zigbee_service_dbus_interface_create_resp_cb_data(level_control_object,
475 invocation, NULL, 0);
476 if (NULL == resp_cb_data) {
477 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
479 /* Send failure response */
480 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
485 /* Dispatch request */
486 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
487 ZBLIB_DRIVER_TYPE_LEVEL_CONTROL,
488 ZBLIB_LEVEL_CONTROL_OPS_STOP,
490 on_level_control_stop_resp, resp_cb_data);
492 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
494 /* Free response callback data */
495 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
497 /* Send failure response */
498 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
506 gboolean zigbee_service_dbus_interface_level_control_init(ZigBeeServiceInterface *service_interface,
507 ZigbeeObjectSkeleton *zigbee_object)
509 ZigbeeLevel_control *level_control_object;
511 if (NULL == service_interface) {
512 Z_LOGE("service_interface is NULL");
516 level_control_object = zigbee_level_control_skeleton_new();
517 zigbee_object_skeleton_set_level_control(zigbee_object, level_control_object);
518 g_object_unref(level_control_object);
520 Z_LOGI("level_control_object: [%p]", level_control_object);
523 * Register signal handlers for 'level_control' interface
525 g_signal_connect(level_control_object,
526 "handle-move-to-level",
527 G_CALLBACK(on_level_control_move_to_level), service_interface);
529 g_signal_connect(level_control_object,
531 G_CALLBACK(on_level_control_move), service_interface);
533 g_signal_connect(level_control_object,
535 G_CALLBACK(on_level_control_step), service_interface);
537 g_signal_connect(level_control_object,
538 "handle-move-to-level-with-on-off",
539 G_CALLBACK(on_level_control_move_to_level_with_on_off), service_interface);
541 g_signal_connect(level_control_object,
542 "handle-move-with-on-off",
543 G_CALLBACK(on_level_control_move_with_on_off), service_interface);
545 g_signal_connect(level_control_object,
546 "handle-step-with-on-off",
547 G_CALLBACK(on_level_control_step_with_on_off), service_interface);
549 g_signal_connect(level_control_object,
551 G_CALLBACK(on_level_control_stop), service_interface);