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;
47 /* Allocate response callback data */
49 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
51 if (NULL == resp_cb_data) {
52 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
54 /* Send failure response */
55 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
60 /* Dispatch request */
61 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
62 ZBLIB_DRIVER_TYPE_SERVICE,
63 ZBLIB_SERVICE_OPS_ENABLE,
65 on_service_enable_resp, resp_cb_data);
67 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
69 /* Free response callback data */
70 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
72 /* Send failure response */
73 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
81 static void on_service_disable_resp(ZigBeeServiceInterface *service_interface,
82 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
84 ZigbeeServiceInterfaceRespCbData_t *cb_data =
85 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
88 NOT_USED(service_interface);
91 NOT_USED(resp_data_len);
94 static gboolean on_service_disable(ZigbeeService *service_object,
95 GDBusMethodInvocation *invocation,
98 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
99 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
103 /* Allocate response callback data */
105 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
106 invocation, NULL, 0);
107 if (NULL == resp_cb_data) {
108 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
110 /* Send failure response */
111 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
116 /* Dispatch request */
117 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
118 ZBLIB_DRIVER_TYPE_SERVICE,
119 ZBLIB_SERVICE_OPS_DISABLE,
121 on_service_disable_resp, resp_cb_data);
123 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
125 /* Free response callback data */
126 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
128 /* Send failure response */
129 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
137 static void on_service_zb_hw_reset_resp(ZigBeeServiceInterface *service_interface,
138 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
140 ZigbeeServiceInterfaceRespCbData_t *cb_data =
141 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
144 NOT_USED(service_interface);
145 NOT_USED(request_id);
147 NOT_USED(resp_data_len);
150 static gboolean on_service_zb_hw_reset(ZigbeeService *service_object,
151 GDBusMethodInvocation *invocation,
154 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
155 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
159 /* Allocate response callback data */
161 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
162 invocation, NULL, 0);
163 if (NULL == resp_cb_data) {
164 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
166 /* Send failure response */
167 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
172 /* Dispatch request */
173 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
174 ZBLIB_DRIVER_TYPE_SERVICE,
175 ZBLIB_SERVICE_OPS_ZB_HW_RESET,
177 on_service_zb_hw_reset_resp, resp_cb_data);
179 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
181 /* Free response callback data */
182 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
184 /* Send failure response */
185 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
193 static void on_service_form_network_resp(ZigBeeServiceInterface *service_interface,
194 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
196 ZigbeeServiceInterfaceRespCbData_t *cb_data =
197 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
200 NOT_USED(service_interface);
201 NOT_USED(request_id);
203 NOT_USED(resp_data_len);
206 static gboolean on_service_form_network(ZigbeeService *service_object,
207 GDBusMethodInvocation *invocation,
210 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
211 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
215 /* Allocate response callback data */
217 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
218 invocation, NULL, 0);
219 if (NULL == resp_cb_data) {
220 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
222 /* Send failure response */
223 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
228 /* Dispatch request */
229 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
230 ZBLIB_DRIVER_TYPE_SERVICE,
231 ZBLIB_SERVICE_OPS_FORM_NETWORK,
233 on_service_form_network_resp, resp_cb_data);
235 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
237 /* Free response callback data */
238 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
240 /* Send failure response */
241 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
249 static void on_service_coex_start_resp(ZigBeeServiceInterface *service_interface,
250 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
252 ZigbeeServiceInterfaceRespCbData_t *cb_data =
253 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
256 NOT_USED(service_interface);
257 NOT_USED(request_id);
259 NOT_USED(resp_data_len);
262 static gboolean on_service_coex_start(ZigbeeService *service_object,
263 GDBusMethodInvocation *invocation,
267 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
268 ZigbeeServiceCoexStart_t req;
269 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
273 memset(&req, 0x0, sizeof(ZigbeeServiceCoexStart_t));
275 /* Update request structure */
276 req.channel = channel;
278 /* Allocate response callback data */
280 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
281 invocation, NULL, 0);
282 if (NULL == resp_cb_data) {
283 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
285 /* Send failure response */
286 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
291 /* Dispatch request */
292 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
293 ZBLIB_DRIVER_TYPE_SERVICE,
294 ZBLIB_SERVICE_OPS_COEX_START,
296 on_service_coex_start_resp, resp_cb_data);
298 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
300 /* Free response callback data */
301 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
303 /* Send failure response */
304 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
312 static void on_service_coex_stop_resp(ZigBeeServiceInterface *service_interface,
313 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
315 ZigbeeServiceInterfaceRespCbData_t *cb_data =
316 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
319 NOT_USED(service_interface);
320 NOT_USED(request_id);
322 NOT_USED(resp_data_len);
325 static gboolean on_service_coex_stop(ZigbeeService *service_object,
326 GDBusMethodInvocation *invocation,
329 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
330 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
334 /* Allocate response callback data */
336 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
337 invocation, NULL, 0);
338 if (NULL == resp_cb_data) {
339 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
341 /* Send failure response */
342 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
347 /* Dispatch request */
348 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
349 ZBLIB_DRIVER_TYPE_SERVICE,
350 ZBLIB_SERVICE_OPS_COEX_STOP,
352 on_service_coex_stop_resp, resp_cb_data);
354 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
356 /* Free response callback data */
357 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
359 /* Send failure response */
360 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
368 static void on_service_leave_network_resp(ZigBeeServiceInterface *service_interface,
369 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
371 ZigbeeServiceInterfaceRespCbData_t *cb_data =
372 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
375 NOT_USED(service_interface);
376 NOT_USED(request_id);
378 NOT_USED(resp_data_len);
381 static gboolean on_service_leave_network(ZigbeeService *service_object,
382 GDBusMethodInvocation *invocation,
385 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
386 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
390 /* Allocate response callback data */
392 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
393 invocation, NULL, 0);
394 if (NULL == resp_cb_data) {
395 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
397 /* Send failure response */
398 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
403 /* Dispatch request */
404 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
405 ZBLIB_DRIVER_TYPE_SERVICE,
406 ZBLIB_SERVICE_OPS_LEAVE_NETWORK,
408 on_service_leave_network_resp, resp_cb_data);
410 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
412 /* Free response callback data */
413 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
415 /* Send failure response */
416 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
424 static void on_service_get_network_info_resp(ZigBeeServiceInterface *service_interface,
425 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
427 ZigbeeServiceInterfaceRespCbData_t *cb_data =
428 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
431 NOT_USED(service_interface);
432 NOT_USED(request_id);
434 NOT_USED(resp_data_len);
437 static gboolean on_service_get_network_info(ZigbeeService *service_object,
438 GDBusMethodInvocation *invocation,
441 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
442 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
446 /* Allocate response callback data */
448 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
449 invocation, NULL, 0);
450 if (NULL == resp_cb_data) {
451 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
453 /* Send failure response */
454 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
459 /* Dispatch request */
460 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
461 ZBLIB_DRIVER_TYPE_SERVICE,
462 ZBLIB_SERVICE_OPS_GET_NETWORK_INFO,
464 on_service_get_network_info_resp, resp_cb_data);
466 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
468 /* Free response callback data */
469 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
471 /* Send failure response */
472 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
480 static void on_service_permit_join_resp(ZigBeeServiceInterface *service_interface,
481 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
483 ZigbeeServiceInterfaceRespCbData_t *cb_data =
484 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
487 NOT_USED(service_interface);
488 NOT_USED(request_id);
490 NOT_USED(resp_data_len);
493 static gboolean on_service_permit_join(ZigbeeService *service_object,
494 GDBusMethodInvocation *invocation,
496 gboolean permit_join,
499 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
500 ZigbeeServicePermitJoin_t req;
501 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
505 memset(&req, 0x0, sizeof(ZigbeeServicePermitJoin_t));
507 /* Update request structure */
508 req.duration = duration;
509 req.permit_join = permit_join;
511 /* Allocate response callback data */
513 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
514 invocation, NULL, 0);
515 if (NULL == resp_cb_data) {
516 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
518 /* Send failure response */
519 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
524 /* Dispatch request */
525 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
526 ZBLIB_DRIVER_TYPE_SERVICE,
527 ZBLIB_SERVICE_OPS_PERMIT_JOIN,
529 on_service_permit_join_resp, resp_cb_data);
531 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
533 /* Free response callback data */
534 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
536 /* Send failure response */
537 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
545 static void on_service_leave_request_resp(ZigBeeServiceInterface *service_interface,
546 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
548 ZigbeeServiceInterfaceRespCbData_t *cb_data =
549 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
552 NOT_USED(service_interface);
553 NOT_USED(request_id);
555 NOT_USED(resp_data_len);
558 static gboolean on_service_leave_request(ZigbeeService *service_object,
559 GDBusMethodInvocation *invocation,
565 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
566 ZigbeeServiceLeaveRequest_t req;
567 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
569 GVariantIter *iter = NULL;
574 memset(&req, 0x0, sizeof(ZigbeeServiceLeaveRequest_t));
576 /* Update request structure */
577 g_variant_get(eui64, "ay", &iter);
578 while (g_variant_iter_loop(iter, "y", req.eui64[i])) {
580 if (i >= ZIGBEE_EUI64_SIZE)
583 req.remove_child = remove_child;
586 /* Allocate response callback data */
588 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
589 invocation, NULL, 0);
590 if (NULL == resp_cb_data) {
591 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
593 /* Send failure response */
594 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
599 /* Dispatch request */
600 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
601 ZBLIB_DRIVER_TYPE_SERVICE,
602 ZBLIB_SERVICE_OPS_LEAVE_REQUEST,
604 on_service_leave_request_resp, resp_cb_data);
606 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
608 /* Free response callback data */
609 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
611 /* Send failure response */
612 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
620 static void on_service_get_device_list_resp(ZigBeeServiceInterface *service_interface,
621 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
623 ZigbeeServiceInterfaceRespCbData_t *cb_data =
624 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
627 NOT_USED(service_interface);
628 NOT_USED(request_id);
630 NOT_USED(resp_data_len);
633 static gboolean on_service_get_device_list(ZigbeeService *service_object,
634 GDBusMethodInvocation *invocation,
637 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
638 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
642 /* Allocate response callback data */
644 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
645 invocation, NULL, 0);
646 if (NULL == resp_cb_data) {
647 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
649 /* Send failure response */
650 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
655 /* Dispatch request */
656 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
657 ZBLIB_DRIVER_TYPE_SERVICE,
658 ZBLIB_SERVICE_OPS_GET_DEVICE_LIST,
660 on_service_get_device_list_resp, resp_cb_data);
662 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
664 /* Free response callback data */
665 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
667 /* Send failure response */
668 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
676 static void on_service_get_mac_resp(ZigBeeServiceInterface *service_interface,
677 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
679 ZigbeeServiceInterfaceRespCbData_t *cb_data =
680 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
683 NOT_USED(service_interface);
684 NOT_USED(request_id);
686 NOT_USED(resp_data_len);
689 static gboolean on_service_get_mac(ZigbeeService *service_object,
690 GDBusMethodInvocation *invocation,
693 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
694 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
698 /* Allocate response callback data */
700 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
701 invocation, NULL, 0);
702 if (NULL == resp_cb_data) {
703 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
705 /* Send failure response */
706 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
711 /* Dispatch request */
712 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
713 ZBLIB_DRIVER_TYPE_SERVICE,
714 ZBLIB_SERVICE_OPS_GET_MAC,
716 on_service_get_mac_resp, resp_cb_data);
718 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
720 /* Free response callback data */
721 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
723 /* Send failure response */
724 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
732 static void on_service_get_device_info_resp(ZigBeeServiceInterface *service_interface,
733 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
735 ZigbeeServiceInterfaceRespCbData_t *cb_data =
736 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
739 NOT_USED(service_interface);
740 NOT_USED(request_id);
742 NOT_USED(resp_data_len);
745 static gboolean on_service_get_device_info(ZigbeeService *service_object,
746 GDBusMethodInvocation *invocation,
749 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
750 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
754 /* Allocate response callback data */
756 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
757 invocation, NULL, 0);
758 if (NULL == resp_cb_data) {
759 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
761 /* Send failure response */
762 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
767 /* Dispatch request */
768 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
769 ZBLIB_DRIVER_TYPE_SERVICE,
770 ZBLIB_SERVICE_OPS_GET_DEVICE_INFO,
772 on_service_get_device_info_resp, resp_cb_data);
774 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
776 /* Free response callback data */
777 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
779 /* Send failure response */
780 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
788 static void on_service_get_endpoint_list_resp(ZigBeeServiceInterface *service_interface,
789 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
791 ZigbeeServiceInterfaceRespCbData_t *cb_data =
792 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
795 NOT_USED(service_interface);
796 NOT_USED(request_id);
798 NOT_USED(resp_data_len);
801 static gboolean on_service_get_endpoint_list(ZigbeeService *service_object,
802 GDBusMethodInvocation *invocation,
806 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
807 ZigbeeServiceGetEndpointList_t req;
808 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
810 GVariantIter *iter = NULL;
815 memset(&req, 0x0, sizeof(ZigbeeServiceGetEndpointList_t));
817 /* Update request structure */
818 g_variant_get(eui64, "ay", &iter);
819 while (g_variant_iter_loop(iter, "y", req.eui64[i])) {
821 if (i >= ZIGBEE_EUI64_SIZE)
825 /* Allocate response callback data */
827 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
828 invocation, NULL, 0);
829 if (NULL == resp_cb_data) {
830 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
832 /* Send failure response */
833 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
838 /* Dispatch request */
839 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
840 ZBLIB_DRIVER_TYPE_SERVICE,
841 ZBLIB_SERVICE_OPS_GET_ENDPOINT_LIST,
843 on_service_get_endpoint_list_resp, resp_cb_data);
845 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
847 /* Free response callback data */
848 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
850 /* Send failure response */
851 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
859 static void on_service_get_cluster_list_resp(ZigBeeServiceInterface *service_interface,
860 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
862 ZigbeeServiceInterfaceRespCbData_t *cb_data =
863 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
866 NOT_USED(service_interface);
867 NOT_USED(request_id);
869 NOT_USED(resp_data_len);
872 static gboolean on_service_get_cluster_list(ZigbeeService *service_object,
873 GDBusMethodInvocation *invocation,
878 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
879 ZigbeeServiceGetClusterList_t req;
880 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
882 GVariantIter *iter = NULL;
887 memset(&req, 0x0, sizeof(ZigbeeServiceGetClusterList_t));
889 /* Update request structure */
890 g_variant_get(eui64, "ay", &iter);
891 while (g_variant_iter_loop(iter, "y", req.eui64[i])) {
893 if (i >= ZIGBEE_EUI64_SIZE)
896 req.endpoint = endpoint;
898 /* Allocate response callback data */
900 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
901 invocation, NULL, 0);
902 if (NULL == resp_cb_data) {
903 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
905 /* Send failure response */
906 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
911 /* Dispatch request */
912 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
913 ZBLIB_DRIVER_TYPE_SERVICE,
914 ZBLIB_SERVICE_OPS_GET_CLUSTER_LIST,
916 on_service_get_cluster_list_resp, resp_cb_data);
918 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
920 /* Free response callback data */
921 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
923 /* Send failure response */
924 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
932 static void on_service_get_node_type_resp(ZigBeeServiceInterface *service_interface,
933 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
935 ZigbeeServiceInterfaceRespCbData_t *cb_data =
936 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
939 NOT_USED(service_interface);
940 NOT_USED(request_id);
942 NOT_USED(resp_data_len);
945 static gboolean on_service_get_node_type(ZigbeeService *service_object,
946 GDBusMethodInvocation *invocation,
950 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
951 ZigbeeServiceGetNodeType_t req;
952 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
954 GVariantIter *iter = NULL;
959 memset(&req, 0x0, sizeof(ZigbeeServiceGetNodeType_t));
961 /* Update request structure */
962 g_variant_get(eui64, "ay", &iter);
963 while (g_variant_iter_loop(iter, "y", req.eui64[i])) {
965 if (i >= ZIGBEE_EUI64_SIZE)
969 /* Allocate response callback data */
971 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
972 invocation, NULL, 0);
973 if (NULL == resp_cb_data) {
974 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
976 /* Send failure response */
977 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
982 /* Dispatch request */
983 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
984 ZBLIB_DRIVER_TYPE_SERVICE,
985 ZBLIB_SERVICE_OPS_GET_NODE_TYPE,
987 on_service_get_node_type_resp, resp_cb_data);
989 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
991 /* Free response callback data */
992 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
994 /* Send failure response */
995 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
1003 gboolean zigbee_service_dbus_interface_service_init(ZigBeeServiceInterface *service_interface,
1004 ZigbeeObjectSkeleton *zigbee_object)
1006 ZigbeeService *service_object;
1008 if (NULL == service_interface) {
1009 Z_LOGE("service_interface is NULL");
1013 service_object = zigbee_service_skeleton_new();
1014 zigbee_object_skeleton_set_service(zigbee_object, service_object);
1015 g_object_unref(service_object);
1017 Z_LOGI("service_object: [%p]", service_object);
1020 * Register signal handlers for 'service' interface
1022 g_signal_connect(service_object,
1024 G_CALLBACK(on_service_enable), service_interface);
1026 g_signal_connect(service_object,
1028 G_CALLBACK(on_service_disable), service_interface);
1030 g_signal_connect(service_object,
1031 "handle-zb-hw-reset",
1032 G_CALLBACK(on_service_zb_hw_reset), service_interface);
1034 g_signal_connect(service_object,
1035 "handle-form-network",
1036 G_CALLBACK(on_service_form_network), service_interface);
1038 g_signal_connect(service_object,
1039 "handle-coex-start",
1040 G_CALLBACK(on_service_coex_start), service_interface);
1042 g_signal_connect(service_object,
1044 G_CALLBACK(on_service_coex_stop), service_interface);
1046 g_signal_connect(service_object,
1047 "handle-leave-network",
1048 G_CALLBACK(on_service_leave_network), service_interface);
1050 g_signal_connect(service_object,
1051 "handle-get-network-info",
1052 G_CALLBACK(on_service_get_network_info), service_interface);
1054 g_signal_connect(service_object,
1055 "handle-permit-join",
1056 G_CALLBACK(on_service_permit_join), service_interface);
1058 g_signal_connect(service_object,
1059 "handle-leave-request",
1060 G_CALLBACK(on_service_leave_request), service_interface);
1062 g_signal_connect(service_object,
1063 "handle-get-device-list",
1064 G_CALLBACK(on_service_get_device_list), service_interface);
1066 g_signal_connect(service_object,
1068 G_CALLBACK(on_service_get_mac), service_interface);
1070 g_signal_connect(service_object,
1071 "handle-get-device-info",
1072 G_CALLBACK(on_service_get_device_info), service_interface);
1074 g_signal_connect(service_object,
1075 "handle-get-endpoint-list",
1076 G_CALLBACK(on_service_get_endpoint_list), service_interface);
1078 g_signal_connect(service_object,
1079 "handle-get-cluster-list",
1080 G_CALLBACK(on_service_get_cluster_list), service_interface);
1082 g_signal_connect(service_object,
1083 "handle-get-node-type",
1084 G_CALLBACK(on_service_get_node_type), service_interface);