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_service.h>
23 static void on_service_enable_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_service_enable(ZigbeeService *service_object,
37 GDBusMethodInvocation *invocation,
40 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
41 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
45 /* Allocate response callback data */
47 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
49 if (NULL == resp_cb_data) {
50 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
52 /* Send failure response */
53 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
58 /* Dispatch request */
59 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
60 ZBLIB_DRIVER_TYPE_SERVICE,
61 ZBLIB_SERVICE_OPS_ENABLE,
63 on_service_enable_resp, resp_cb_data);
65 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
67 /* Free response callback data */
68 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
70 /* Send failure response */
71 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
79 static void on_service_disable_resp(ZigBeeServiceInterface *service_interface,
80 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
82 ZigbeeServiceInterfaceRespCbData_t *cb_data =
83 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
86 NOT_USED(service_interface);
89 NOT_USED(resp_data_len);
92 static gboolean on_service_disable(ZigbeeService *service_object,
93 GDBusMethodInvocation *invocation,
96 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
97 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
101 /* Allocate response callback data */
103 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
104 invocation, NULL, 0);
105 if (NULL == resp_cb_data) {
106 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
108 /* Send failure response */
109 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
114 /* Dispatch request */
115 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
116 ZBLIB_DRIVER_TYPE_SERVICE,
117 ZBLIB_SERVICE_OPS_DISABLE,
119 on_service_disable_resp, resp_cb_data);
121 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
123 /* Free response callback data */
124 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
126 /* Send failure response */
127 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
135 static void on_service_zb_hw_reset_resp(ZigBeeServiceInterface *service_interface,
136 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
138 ZigbeeServiceInterfaceRespCbData_t *cb_data =
139 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
142 NOT_USED(service_interface);
143 NOT_USED(request_id);
145 NOT_USED(resp_data_len);
148 static gboolean on_service_zb_hw_reset(ZigbeeService *service_object,
149 GDBusMethodInvocation *invocation,
152 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
153 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
157 /* Allocate response callback data */
159 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
160 invocation, NULL, 0);
161 if (NULL == resp_cb_data) {
162 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
164 /* Send failure response */
165 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
170 /* Dispatch request */
171 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
172 ZBLIB_DRIVER_TYPE_SERVICE,
173 ZBLIB_SERVICE_OPS_ZB_HW_RESET,
175 on_service_zb_hw_reset_resp, resp_cb_data);
177 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
179 /* Free response callback data */
180 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
182 /* Send failure response */
183 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
191 static void on_service_form_network_resp(ZigBeeServiceInterface *service_interface,
192 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
194 ZigbeeServiceInterfaceRespCbData_t *cb_data =
195 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
198 NOT_USED(service_interface);
199 NOT_USED(request_id);
201 NOT_USED(resp_data_len);
204 static gboolean on_service_form_network(ZigbeeService *service_object,
205 GDBusMethodInvocation *invocation,
208 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
209 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
213 /* Allocate response callback data */
215 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
216 invocation, NULL, 0);
217 if (NULL == resp_cb_data) {
218 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
220 /* Send failure response */
221 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
226 /* Dispatch request */
227 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
228 ZBLIB_DRIVER_TYPE_SERVICE,
229 ZBLIB_SERVICE_OPS_FORM_NETWORK,
231 on_service_form_network_resp, resp_cb_data);
233 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
235 /* Free response callback data */
236 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
238 /* Send failure response */
239 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
247 static void on_service_coex_start_resp(ZigBeeServiceInterface *service_interface,
248 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
250 ZigbeeServiceInterfaceRespCbData_t *cb_data =
251 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
254 NOT_USED(service_interface);
255 NOT_USED(request_id);
257 NOT_USED(resp_data_len);
260 static gboolean on_service_coex_start(ZigbeeService *service_object,
261 GDBusMethodInvocation *invocation,
265 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
266 ZigbeeServiceCoexStart_t req;
267 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
271 memset(&req, 0x0, sizeof(ZigbeeServiceCoexStart_t));
273 /* Update request structure */
274 req.channel = channel;
276 /* Allocate response callback data */
278 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
279 invocation, NULL, 0);
280 if (NULL == resp_cb_data) {
281 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
283 /* Send failure response */
284 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
289 /* Dispatch request */
290 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
291 ZBLIB_DRIVER_TYPE_SERVICE,
292 ZBLIB_SERVICE_OPS_COEX_START,
294 on_service_coex_start_resp, resp_cb_data);
296 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
298 /* Free response callback data */
299 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
301 /* Send failure response */
302 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
310 static void on_service_coex_stop_resp(ZigBeeServiceInterface *service_interface,
311 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
313 ZigbeeServiceInterfaceRespCbData_t *cb_data =
314 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
317 NOT_USED(service_interface);
318 NOT_USED(request_id);
320 NOT_USED(resp_data_len);
323 static gboolean on_service_coex_stop(ZigbeeService *service_object,
324 GDBusMethodInvocation *invocation,
327 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
328 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
332 /* Allocate response callback data */
334 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
335 invocation, NULL, 0);
336 if (NULL == resp_cb_data) {
337 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
339 /* Send failure response */
340 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
345 /* Dispatch request */
346 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
347 ZBLIB_DRIVER_TYPE_SERVICE,
348 ZBLIB_SERVICE_OPS_COEX_STOP,
350 on_service_coex_stop_resp, resp_cb_data);
352 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
354 /* Free response callback data */
355 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
357 /* Send failure response */
358 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
366 static void on_service_leave_network_resp(ZigBeeServiceInterface *service_interface,
367 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
369 ZigbeeServiceInterfaceRespCbData_t *cb_data =
370 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
373 NOT_USED(service_interface);
374 NOT_USED(request_id);
376 NOT_USED(resp_data_len);
379 static gboolean on_service_leave_network(ZigbeeService *service_object,
380 GDBusMethodInvocation *invocation,
383 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
384 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
388 /* Allocate response callback data */
390 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
391 invocation, NULL, 0);
392 if (NULL == resp_cb_data) {
393 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
395 /* Send failure response */
396 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
401 /* Dispatch request */
402 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
403 ZBLIB_DRIVER_TYPE_SERVICE,
404 ZBLIB_SERVICE_OPS_LEAVE_NETWORK,
406 on_service_leave_network_resp, resp_cb_data);
408 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
410 /* Free response callback data */
411 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
413 /* Send failure response */
414 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
422 static void on_service_get_network_info_resp(ZigBeeServiceInterface *service_interface,
423 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
425 ZigbeeServiceInterfaceRespCbData_t *cb_data =
426 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
429 NOT_USED(service_interface);
430 NOT_USED(request_id);
432 NOT_USED(resp_data_len);
435 static gboolean on_service_get_network_info(ZigbeeService *service_object,
436 GDBusMethodInvocation *invocation,
439 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
440 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
444 /* Allocate response callback data */
446 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
447 invocation, NULL, 0);
448 if (NULL == resp_cb_data) {
449 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
451 /* Send failure response */
452 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
457 /* Dispatch request */
458 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
459 ZBLIB_DRIVER_TYPE_SERVICE,
460 ZBLIB_SERVICE_OPS_GET_NETWORK_INFO,
462 on_service_get_network_info_resp, resp_cb_data);
464 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
466 /* Free response callback data */
467 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
469 /* Send failure response */
470 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
478 static void on_service_permit_join_resp(ZigBeeServiceInterface *service_interface,
479 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
481 ZigbeeServiceInterfaceRespCbData_t *cb_data =
482 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
485 NOT_USED(service_interface);
486 NOT_USED(request_id);
488 NOT_USED(resp_data_len);
491 static gboolean on_service_permit_join(ZigbeeService *service_object,
492 GDBusMethodInvocation *invocation,
494 gboolean permit_join,
497 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
498 ZigbeeServicePermitJoin_t req;
499 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
503 memset(&req, 0x0, sizeof(ZigbeeServicePermitJoin_t));
505 /* Update request structure */
506 req.duration = duration;
507 req.permit_join = permit_join;
509 /* Allocate response callback data */
511 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
512 invocation, NULL, 0);
513 if (NULL == resp_cb_data) {
514 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
516 /* Send failure response */
517 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
522 /* Dispatch request */
523 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
524 ZBLIB_DRIVER_TYPE_SERVICE,
525 ZBLIB_SERVICE_OPS_PERMIT_JOIN,
527 on_service_permit_join_resp, resp_cb_data);
529 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
531 /* Free response callback data */
532 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
534 /* Send failure response */
535 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
543 static void on_service_leave_request_resp(ZigBeeServiceInterface *service_interface,
544 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
546 ZigbeeServiceInterfaceRespCbData_t *cb_data =
547 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
550 NOT_USED(service_interface);
551 NOT_USED(request_id);
553 NOT_USED(resp_data_len);
556 static gboolean on_service_leave_request(ZigbeeService *service_object,
557 GDBusMethodInvocation *invocation,
563 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
564 ZigbeeServiceLeaveRequest_t req;
565 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
567 GVariantIter *iter = NULL;
572 memset(&req, 0x0, sizeof(ZigbeeServiceLeaveRequest_t));
574 /* Update request structure */
575 g_variant_get(eui64, "ay", &iter);
576 while (g_variant_iter_loop(iter, "y", req.eui64[i])) {
578 if (i >= ZIGBEE_EUI64_SIZE)
581 req.remove_child = remove_child;
584 /* Allocate response callback data */
586 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
587 invocation, NULL, 0);
588 if (NULL == resp_cb_data) {
589 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
591 /* Send failure response */
592 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
597 /* Dispatch request */
598 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
599 ZBLIB_DRIVER_TYPE_SERVICE,
600 ZBLIB_SERVICE_OPS_LEAVE_REQUEST,
602 on_service_leave_request_resp, resp_cb_data);
604 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
606 /* Free response callback data */
607 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
609 /* Send failure response */
610 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
618 static void on_service_get_device_list_resp(ZigBeeServiceInterface *service_interface,
619 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
621 ZigbeeServiceInterfaceRespCbData_t *cb_data =
622 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
625 NOT_USED(service_interface);
626 NOT_USED(request_id);
628 NOT_USED(resp_data_len);
631 static gboolean on_service_get_device_list(ZigbeeService *service_object,
632 GDBusMethodInvocation *invocation,
635 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
636 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
640 /* Allocate response callback data */
642 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
643 invocation, NULL, 0);
644 if (NULL == resp_cb_data) {
645 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
647 /* Send failure response */
648 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
653 /* Dispatch request */
654 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
655 ZBLIB_DRIVER_TYPE_SERVICE,
656 ZBLIB_SERVICE_OPS_GET_DEVICE_LIST,
658 on_service_get_device_list_resp, resp_cb_data);
660 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
662 /* Free response callback data */
663 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
665 /* Send failure response */
666 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
674 static void on_service_get_mac_resp(ZigBeeServiceInterface *service_interface,
675 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
677 ZigbeeServiceInterfaceRespCbData_t *cb_data =
678 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
681 NOT_USED(service_interface);
682 NOT_USED(request_id);
684 NOT_USED(resp_data_len);
687 static gboolean on_service_get_mac(ZigbeeService *service_object,
688 GDBusMethodInvocation *invocation,
691 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
692 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
696 /* Allocate response callback data */
698 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
699 invocation, NULL, 0);
700 if (NULL == resp_cb_data) {
701 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
703 /* Send failure response */
704 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
709 /* Dispatch request */
710 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
711 ZBLIB_DRIVER_TYPE_SERVICE,
712 ZBLIB_SERVICE_OPS_GET_MAC,
714 on_service_get_mac_resp, resp_cb_data);
716 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
718 /* Free response callback data */
719 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
721 /* Send failure response */
722 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
730 static void on_service_get_device_info_resp(ZigBeeServiceInterface *service_interface,
731 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
733 ZigbeeServiceInterfaceRespCbData_t *cb_data =
734 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
737 NOT_USED(service_interface);
738 NOT_USED(request_id);
740 NOT_USED(resp_data_len);
743 static gboolean on_service_get_device_info(ZigbeeService *service_object,
744 GDBusMethodInvocation *invocation,
747 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
748 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
752 /* Allocate response callback data */
754 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
755 invocation, NULL, 0);
756 if (NULL == resp_cb_data) {
757 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
759 /* Send failure response */
760 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
765 /* Dispatch request */
766 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
767 ZBLIB_DRIVER_TYPE_SERVICE,
768 ZBLIB_SERVICE_OPS_GET_DEVICE_INFO,
770 on_service_get_device_info_resp, resp_cb_data);
772 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
774 /* Free response callback data */
775 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
777 /* Send failure response */
778 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
786 static void on_service_get_endpoint_list_resp(ZigBeeServiceInterface *service_interface,
787 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
789 ZigbeeServiceInterfaceRespCbData_t *cb_data =
790 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
793 NOT_USED(service_interface);
794 NOT_USED(request_id);
796 NOT_USED(resp_data_len);
799 static gboolean on_service_get_endpoint_list(ZigbeeService *service_object,
800 GDBusMethodInvocation *invocation,
804 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
805 ZigbeeServiceGetEndpointList_t req;
806 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
808 GVariantIter *iter = NULL;
813 memset(&req, 0x0, sizeof(ZigbeeServiceGetEndpointList_t));
815 /* Update request structure */
816 g_variant_get(eui64, "ay", &iter);
817 while (g_variant_iter_loop(iter, "y", req.eui64[i])) {
819 if (i >= ZIGBEE_EUI64_SIZE)
823 /* Allocate response callback data */
825 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
826 invocation, NULL, 0);
827 if (NULL == resp_cb_data) {
828 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
830 /* Send failure response */
831 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
836 /* Dispatch request */
837 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
838 ZBLIB_DRIVER_TYPE_SERVICE,
839 ZBLIB_SERVICE_OPS_GET_ENDPOINT_LIST,
841 on_service_get_endpoint_list_resp, resp_cb_data);
843 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
845 /* Free response callback data */
846 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
848 /* Send failure response */
849 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
857 static void on_service_get_cluster_list_resp(ZigBeeServiceInterface *service_interface,
858 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
860 ZigbeeServiceInterfaceRespCbData_t *cb_data =
861 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
864 NOT_USED(service_interface);
865 NOT_USED(request_id);
867 NOT_USED(resp_data_len);
870 static gboolean on_service_get_cluster_list(ZigbeeService *service_object,
871 GDBusMethodInvocation *invocation,
876 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
877 ZigbeeServiceGetClusterList_t req;
878 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
880 GVariantIter *iter = NULL;
885 memset(&req, 0x0, sizeof(ZigbeeServiceGetClusterList_t));
887 /* Update request structure */
888 g_variant_get(eui64, "ay", &iter);
889 while (g_variant_iter_loop(iter, "y", req.eui64[i])) {
891 if (i >= ZIGBEE_EUI64_SIZE)
894 req.endpoint = endpoint;
896 /* Allocate response callback data */
898 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
899 invocation, NULL, 0);
900 if (NULL == resp_cb_data) {
901 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
903 /* Send failure response */
904 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
909 /* Dispatch request */
910 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
911 ZBLIB_DRIVER_TYPE_SERVICE,
912 ZBLIB_SERVICE_OPS_GET_CLUSTER_LIST,
914 on_service_get_cluster_list_resp, resp_cb_data);
916 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
918 /* Free response callback data */
919 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
921 /* Send failure response */
922 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
930 static void on_service_get_node_type_resp(ZigBeeServiceInterface *service_interface,
931 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
933 ZigbeeServiceInterfaceRespCbData_t *cb_data =
934 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
937 NOT_USED(service_interface);
938 NOT_USED(request_id);
940 NOT_USED(resp_data_len);
943 static gboolean on_service_get_node_type(ZigbeeService *service_object,
944 GDBusMethodInvocation *invocation,
948 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
949 ZigbeeServiceGetNodeType_t req;
950 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
952 GVariantIter *iter = NULL;
957 memset(&req, 0x0, sizeof(ZigbeeServiceGetNodeType_t));
959 /* Update request structure */
960 g_variant_get(eui64, "ay", &iter);
961 while (g_variant_iter_loop(iter, "y", req.eui64[i])) {
963 if (i >= ZIGBEE_EUI64_SIZE)
967 /* Allocate response callback data */
969 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
970 invocation, NULL, 0);
971 if (NULL == resp_cb_data) {
972 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
974 /* Send failure response */
975 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
980 /* Dispatch request */
981 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
982 ZBLIB_DRIVER_TYPE_SERVICE,
983 ZBLIB_SERVICE_OPS_GET_NODE_TYPE,
985 on_service_get_node_type_resp, resp_cb_data);
987 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
989 /* Free response callback data */
990 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
992 /* Send failure response */
993 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
1001 gboolean zigbee_service_dbus_interface_service_init(ZigBeeServiceInterface *service_interface,
1002 ZigbeeObjectSkeleton *zigbee_object)
1004 ZigbeeService *service_object;
1006 if (NULL == service_interface) {
1007 Z_LOGE("service_interface is NULL");
1011 service_object = zigbee_service_skeleton_new();
1012 zigbee_object_skeleton_set_service(zigbee_object, service_object);
1013 g_object_unref(service_object);
1015 Z_LOGI("service_object: [%p]", service_object);
1018 * Register signal handlers for 'service' interface
1020 g_signal_connect(service_object,
1022 G_CALLBACK(on_service_enable), service_interface);
1024 g_signal_connect(service_object,
1026 G_CALLBACK(on_service_disable), service_interface);
1028 g_signal_connect(service_object,
1029 "handle-zb-hw-reset",
1030 G_CALLBACK(on_service_zb_hw_reset), service_interface);
1032 g_signal_connect(service_object,
1033 "handle-form-network",
1034 G_CALLBACK(on_service_form_network), service_interface);
1036 g_signal_connect(service_object,
1037 "handle-coex-start",
1038 G_CALLBACK(on_service_coex_start), service_interface);
1040 g_signal_connect(service_object,
1042 G_CALLBACK(on_service_coex_stop), service_interface);
1044 g_signal_connect(service_object,
1045 "handle-leave-network",
1046 G_CALLBACK(on_service_leave_network), service_interface);
1048 g_signal_connect(service_object,
1049 "handle-get-network-info",
1050 G_CALLBACK(on_service_get_network_info), service_interface);
1052 g_signal_connect(service_object,
1053 "handle-permit-join",
1054 G_CALLBACK(on_service_permit_join), service_interface);
1056 g_signal_connect(service_object,
1057 "handle-leave-request",
1058 G_CALLBACK(on_service_leave_request), service_interface);
1060 g_signal_connect(service_object,
1061 "handle-get-device-list",
1062 G_CALLBACK(on_service_get_device_list), service_interface);
1064 g_signal_connect(service_object,
1066 G_CALLBACK(on_service_get_mac), service_interface);
1068 g_signal_connect(service_object,
1069 "handle-get-device-info",
1070 G_CALLBACK(on_service_get_device_info), service_interface);
1072 g_signal_connect(service_object,
1073 "handle-get-endpoint-list",
1074 G_CALLBACK(on_service_get_endpoint_list), service_interface);
1076 g_signal_connect(service_object,
1077 "handle-get-cluster-list",
1078 G_CALLBACK(on_service_get_cluster_list), service_interface);
1080 g_signal_connect(service_object,
1081 "handle-get-node-type",
1082 G_CALLBACK(on_service_get_node_type), service_interface);