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 *_service_interface_ref_zigbee_service(ZigBeeServiceInterface *service_interface)
25 ZigbeeObjectSkeleton *zigbee_object = NULL;
26 ZigbeeCustomData_t *custom_data = NULL;
27 ZigbeeService *service = NULL;
29 custom_data = (ZigbeeCustomData_t *)zblib_service_interface_ref_user_data(service_interface);
30 if (NULL == custom_data) {
31 Z_LOGE("D-BUS service interface custom_data is NULL!");
35 /* Get zigbee object */
36 zigbee_object = g_hash_table_lookup(custom_data->objects, ZIGBEE_SERVICE_PATH);
37 if (NULL == zigbee_object) {
38 Z_LOGW("Cannot find ZigBee D-BUS interface object!", zigbee_object);
42 service = zigbee_object_get_service(ZIGBEE_OBJECT(zigbee_object));
46 static void on_service_enable_resp(ZigBeeServiceInterface *service_interface,
47 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
49 ZigbeeServiceInterfaceRespCbData_t *cb_data =
50 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
52 ZigbeeService *service_object;
53 GDBusMethodInvocation *invocation;
54 ZigbeeServiceServiceStateResp_t *payload =
55 (ZigbeeServiceServiceStateResp_t*)resp_data;
57 NOT_USED(service_interface);
60 if (NULL == resp_data || 0 == resp_data_len) {
61 Z_LOGE("resp_data is null");
65 service_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
66 zblib_check_null_free_and_ret("service_object", service_object, cb_data);
68 invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
69 zblib_check_null_free_and_ret("invocation", invocation, cb_data);
71 zigbee_service_complete_enable(service_object, invocation,
72 payload->result, payload->enabled);
77 static gboolean on_service_enable(ZigbeeService *service_object,
78 GDBusMethodInvocation *invocation,
81 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
82 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
88 /* Allocate response callback data */
90 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
92 if (NULL == resp_cb_data) {
93 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
95 /* Send failure response */
96 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
101 /* Dispatch request */
102 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
103 ZBLIB_DRIVER_TYPE_SERVICE,
104 ZBLIB_SERVICE_OPS_ENABLE,
106 on_service_enable_resp, resp_cb_data);
108 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
110 /* Free response callback data */
111 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
113 /* Send failure response */
114 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
122 static void on_service_disable_resp(ZigBeeServiceInterface *service_interface,
123 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
125 ZigbeeServiceInterfaceRespCbData_t *cb_data =
126 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
128 ZigbeeService *service_object;
129 GDBusMethodInvocation *invocation;
130 ZigbeeGeneralResp_t *payload = (ZigbeeGeneralResp_t*)resp_data;
132 NOT_USED(service_interface);
133 NOT_USED(request_id);
135 if (NULL == resp_data || 0 == resp_data_len) {
136 Z_LOGE("resp_data is null");
140 service_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
141 zblib_check_null_free_and_ret("service_object", service_object, cb_data);
143 invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
144 zblib_check_null_free_and_ret("invocation", invocation, cb_data);
146 zigbee_service_complete_disable(service_object, invocation, payload->result);
151 static gboolean on_service_disable(ZigbeeService *service_object,
152 GDBusMethodInvocation *invocation,
155 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
156 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
160 /* Allocate response callback data */
162 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
163 invocation, NULL, 0);
164 if (NULL == resp_cb_data) {
165 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
167 /* Send failure response */
168 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
173 /* Dispatch request */
174 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
175 ZBLIB_DRIVER_TYPE_SERVICE,
176 ZBLIB_SERVICE_OPS_DISABLE,
178 on_service_disable_resp, resp_cb_data);
180 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
182 /* Free response callback data */
183 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
185 /* Send failure response */
186 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
194 static void on_service_zb_hw_reset_resp(ZigBeeServiceInterface *service_interface,
195 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
197 ZigbeeServiceInterfaceRespCbData_t *cb_data =
198 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
200 ZigbeeService *service_object;
201 GDBusMethodInvocation *invocation;
202 ZigbeeGeneralResp_t *payload = (ZigbeeGeneralResp_t*)resp_data;
204 NOT_USED(service_interface);
205 NOT_USED(request_id);
207 if (NULL == resp_data || 0 == resp_data_len) {
208 Z_LOGE("resp_data is null");
212 service_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
213 zblib_check_null_free_and_ret("service_object", service_object, cb_data);
215 invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
216 zblib_check_null_free_and_ret("invocation", invocation, cb_data);
218 zigbee_service_complete_zb_hw_reset(service_object, invocation, payload->result);
223 static gboolean on_service_zb_hw_reset(ZigbeeService *service_object,
224 GDBusMethodInvocation *invocation,
227 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
228 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
232 /* Allocate response callback data */
234 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
235 invocation, NULL, 0);
236 if (NULL == resp_cb_data) {
237 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
239 /* Send failure response */
240 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
245 /* Dispatch request */
246 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
247 ZBLIB_DRIVER_TYPE_SERVICE,
248 ZBLIB_SERVICE_OPS_ZB_HW_RESET,
250 on_service_zb_hw_reset_resp, resp_cb_data);
252 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
254 /* Free response callback data */
255 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
257 /* Send failure response */
258 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
266 static void on_service_form_network_resp(ZigBeeServiceInterface *service_interface,
267 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
269 ZigbeeServiceInterfaceRespCbData_t *cb_data =
270 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
272 ZigbeeService *service_object;
273 GDBusMethodInvocation *invocation;
274 ZigbeeGeneralResp_t *payload = (ZigbeeGeneralResp_t*)resp_data;
276 NOT_USED(service_interface);
277 NOT_USED(request_id);
279 if (NULL == resp_data || 0 == resp_data_len) {
280 Z_LOGE("resp_data is null");
284 service_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
285 zblib_check_null_free_and_ret("service_object", service_object, cb_data);
287 invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
288 zblib_check_null_free_and_ret("invocation", invocation, cb_data);
290 zigbee_service_complete_form_network(service_object, invocation, payload->result);
295 static gboolean on_service_form_network(ZigbeeService *service_object,
296 GDBusMethodInvocation *invocation,
299 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
300 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
304 /* Allocate response callback data */
306 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
307 invocation, NULL, 0);
308 if (NULL == resp_cb_data) {
309 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
311 /* Send failure response */
312 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
317 /* Dispatch request */
318 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
319 ZBLIB_DRIVER_TYPE_SERVICE,
320 ZBLIB_SERVICE_OPS_FORM_NETWORK,
322 on_service_form_network_resp, resp_cb_data);
324 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
326 /* Free response callback data */
327 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
329 /* Send failure response */
330 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
338 static void on_service_coex_start_resp(ZigBeeServiceInterface *service_interface,
339 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
341 ZigbeeServiceInterfaceRespCbData_t *cb_data =
342 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
344 ZigbeeService *service_object;
345 GDBusMethodInvocation *invocation;
346 ZigbeeGeneralResp_t *payload = (ZigbeeGeneralResp_t*)resp_data;
348 NOT_USED(service_interface);
349 NOT_USED(request_id);
351 if (NULL == resp_data || 0 == resp_data_len) {
352 Z_LOGE("resp_data is null");
356 service_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
357 zblib_check_null_free_and_ret("service_object", service_object, cb_data);
359 invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
360 zblib_check_null_free_and_ret("invocation", invocation, cb_data);
362 zigbee_service_complete_coex_start(service_object, invocation, payload->result);
367 static gboolean on_service_coex_start(ZigbeeService *service_object,
368 GDBusMethodInvocation *invocation,
372 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
373 ZigbeeServiceCoexStart_t req;
374 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
378 memset(&req, 0x0, sizeof(ZigbeeServiceCoexStart_t));
380 /* Update request structure */
381 req.channel = channel;
383 /* Allocate response callback data */
385 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
386 invocation, NULL, 0);
387 if (NULL == resp_cb_data) {
388 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
390 /* Send failure response */
391 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
396 /* Dispatch request */
397 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
398 ZBLIB_DRIVER_TYPE_SERVICE,
399 ZBLIB_SERVICE_OPS_COEX_START,
401 on_service_coex_start_resp, resp_cb_data);
403 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
405 /* Free response callback data */
406 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
408 /* Send failure response */
409 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
417 static void on_service_coex_stop_resp(ZigBeeServiceInterface *service_interface,
418 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
420 ZigbeeServiceInterfaceRespCbData_t *cb_data =
421 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
423 ZigbeeService *service_object;
424 GDBusMethodInvocation *invocation;
425 ZigbeeGeneralResp_t *payload = (ZigbeeGeneralResp_t*)resp_data;
427 NOT_USED(service_interface);
428 NOT_USED(request_id);
430 if (NULL == resp_data || 0 == resp_data_len) {
431 Z_LOGE("resp_data is null");
435 service_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
436 zblib_check_null_free_and_ret("service_object", service_object, cb_data);
438 invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
439 zblib_check_null_free_and_ret("invocation", invocation, cb_data);
441 zigbee_service_complete_coex_stop(service_object, invocation, payload->result);
446 static gboolean on_service_coex_stop(ZigbeeService *service_object,
447 GDBusMethodInvocation *invocation,
450 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
451 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
455 /* Allocate response callback data */
457 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
458 invocation, NULL, 0);
459 if (NULL == resp_cb_data) {
460 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
462 /* Send failure response */
463 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
468 /* Dispatch request */
469 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
470 ZBLIB_DRIVER_TYPE_SERVICE,
471 ZBLIB_SERVICE_OPS_COEX_STOP,
473 on_service_coex_stop_resp, resp_cb_data);
475 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
477 /* Free response callback data */
478 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
480 /* Send failure response */
481 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
489 static void on_service_leave_network_resp(ZigBeeServiceInterface *service_interface,
490 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
492 ZigbeeServiceInterfaceRespCbData_t *cb_data =
493 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
495 ZigbeeService *service_object;
496 GDBusMethodInvocation *invocation;
497 ZigbeeGeneralResp_t *payload = (ZigbeeGeneralResp_t*)resp_data;
499 NOT_USED(service_interface);
500 NOT_USED(request_id);
502 if (NULL == resp_data || 0 == resp_data_len) {
503 Z_LOGE("resp_data is null");
507 service_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
508 zblib_check_null_free_and_ret("service_object", service_object, cb_data);
510 invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
511 zblib_check_null_free_and_ret("invocation", invocation, cb_data);
513 zigbee_service_complete_leave_network(service_object, invocation, payload->result);
518 static gboolean on_service_leave_network(ZigbeeService *service_object,
519 GDBusMethodInvocation *invocation,
522 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
523 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
527 /* Allocate response callback data */
529 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
530 invocation, NULL, 0);
531 if (NULL == resp_cb_data) {
532 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
534 /* Send failure response */
535 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
540 /* Dispatch request */
541 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
542 ZBLIB_DRIVER_TYPE_SERVICE,
543 ZBLIB_SERVICE_OPS_LEAVE_NETWORK,
545 on_service_leave_network_resp, resp_cb_data);
547 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
549 /* Free response callback data */
550 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
552 /* Send failure response */
553 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
561 static void on_service_get_network_info_resp(ZigBeeServiceInterface *service_interface,
562 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
564 ZigbeeServiceInterfaceRespCbData_t *cb_data =
565 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
567 ZigbeeService *service_object;
568 GDBusMethodInvocation *invocation;
570 ZigbeeServiceGetNetworkInfoResp_t *payload =
571 (ZigbeeServiceGetNetworkInfoResp_t*)resp_data;
573 GVariant *v_eui64 = NULL;
575 NOT_USED(service_interface);
576 NOT_USED(request_id);
578 if (NULL == resp_data || 0 == resp_data_len) {
579 Z_LOGE("resp_data is null");
583 service_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
584 zblib_check_null_free_and_ret("service_object", service_object, cb_data);
586 invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
587 zblib_check_null_free_and_ret("invocation", invocation, cb_data);
589 v_eui64 = g_variant_new_from_data(G_VARIANT_TYPE("a(y)"),
590 payload->eui64, ZIGBEE_EUI64_SIZE, TRUE, NULL, NULL);
592 zigbee_service_complete_get_network_info(service_object, invocation,
593 payload->result, v_eui64, payload->node_id,
594 payload->pan_id, payload->channel, payload->radio_tx_power);
599 static gboolean on_service_get_network_info(ZigbeeService *service_object,
600 GDBusMethodInvocation *invocation,
603 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
604 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
608 /* Allocate response callback data */
610 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
611 invocation, NULL, 0);
612 if (NULL == resp_cb_data) {
613 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
615 /* Send failure response */
616 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
621 /* Dispatch request */
622 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
623 ZBLIB_DRIVER_TYPE_SERVICE,
624 ZBLIB_SERVICE_OPS_GET_NETWORK_INFO,
626 on_service_get_network_info_resp, resp_cb_data);
628 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
630 /* Free response callback data */
631 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
633 /* Send failure response */
634 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
642 static void on_service_permit_join_resp(ZigBeeServiceInterface *service_interface,
643 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
645 ZigbeeServiceInterfaceRespCbData_t *cb_data =
646 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
648 ZigbeeService *service_object;
649 GDBusMethodInvocation *invocation;
650 ZigbeeGeneralResp_t *payload = (ZigbeeGeneralResp_t*)resp_data;
652 NOT_USED(service_interface);
653 NOT_USED(request_id);
655 if (NULL == resp_data || 0 == resp_data_len) {
656 Z_LOGE("resp_data is null");
660 service_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
661 zblib_check_null_free_and_ret("service_object", service_object, cb_data);
663 invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
664 zblib_check_null_free_and_ret("invocation", invocation, cb_data);
666 zigbee_service_complete_permit_join(service_object, invocation, payload->result);
671 static gboolean on_service_permit_join(ZigbeeService *service_object,
672 GDBusMethodInvocation *invocation,
674 gboolean permit_join,
677 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
678 ZigbeeServicePermitJoin_t req;
679 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
683 memset(&req, 0x0, sizeof(ZigbeeServicePermitJoin_t));
685 /* Update request structure */
686 req.duration = duration;
687 req.permit_join = permit_join;
689 /* Allocate response callback data */
691 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
692 invocation, NULL, 0);
693 if (NULL == resp_cb_data) {
694 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
696 /* Send failure response */
697 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
702 /* Dispatch request */
703 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
704 ZBLIB_DRIVER_TYPE_SERVICE,
705 ZBLIB_SERVICE_OPS_PERMIT_JOIN,
707 on_service_permit_join_resp, resp_cb_data);
709 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
711 /* Free response callback data */
712 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
714 /* Send failure response */
715 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
723 static void on_service_leave_request_resp(ZigBeeServiceInterface *service_interface,
724 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
726 ZigbeeServiceInterfaceRespCbData_t *cb_data =
727 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
729 ZigbeeService *service_object;
730 GDBusMethodInvocation *invocation;
731 ZigbeeGeneralResp_t *payload = (ZigbeeGeneralResp_t*)resp_data;
733 NOT_USED(service_interface);
734 NOT_USED(request_id);
736 if (NULL == resp_data || 0 == resp_data_len) {
737 Z_LOGE("resp_data is null");
741 service_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
742 zblib_check_null_free_and_ret("service_object", service_object, cb_data);
744 invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
745 zblib_check_null_free_and_ret("invocation", invocation, cb_data);
747 zigbee_service_complete_leave_request(service_object, invocation, payload->result);
752 static gboolean on_service_leave_request(ZigbeeService *service_object,
753 GDBusMethodInvocation *invocation,
759 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
760 ZigbeeServiceLeaveRequest_t req;
761 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
763 GVariantIter *iter = NULL;
768 memset(&req, 0x0, sizeof(ZigbeeServiceLeaveRequest_t));
770 /* Update request structure */
771 g_variant_get(eui64, "ay", &iter);
772 while (g_variant_iter_loop(iter, "y", req.eui64[i])) {
774 if (i >= ZIGBEE_EUI64_SIZE)
777 req.remove_child = remove_child;
780 /* Allocate response callback data */
782 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
783 invocation, NULL, 0);
784 if (NULL == resp_cb_data) {
785 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
787 /* Send failure response */
788 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
793 /* Dispatch request */
794 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
795 ZBLIB_DRIVER_TYPE_SERVICE,
796 ZBLIB_SERVICE_OPS_LEAVE_REQUEST,
798 on_service_leave_request_resp, resp_cb_data);
800 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
802 /* Free response callback data */
803 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
805 /* Send failure response */
806 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
814 static void on_service_get_device_list_resp(ZigBeeServiceInterface *service_interface,
815 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
817 ZigbeeServiceInterfaceRespCbData_t *cb_data =
818 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
820 ZigbeeService *service_object;
821 GDBusMethodInvocation *invocation;
823 NOT_USED(service_interface);
824 NOT_USED(request_id);
826 if (NULL == resp_data || 0 == resp_data_len) {
827 Z_LOGE("resp_data is null");
832 service_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
833 zblib_check_null_free_and_ret("service_object", service_object, cb_data);
835 invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
836 zblib_check_null_free_and_ret("invocation", invocation, cb_data);
838 /* To-To : zigbee_service_complete_get_device_list */
839 //zigbee_service_complete_get_device_list(service_object, invocation, resp_data);
844 static gboolean on_service_get_device_list(ZigbeeService *service_object,
845 GDBusMethodInvocation *invocation,
848 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
849 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
853 /* Allocate response callback data */
855 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
856 invocation, NULL, 0);
857 if (NULL == resp_cb_data) {
858 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
860 /* Send failure response */
861 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
866 /* Dispatch request */
867 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
868 ZBLIB_DRIVER_TYPE_SERVICE,
869 ZBLIB_SERVICE_OPS_GET_DEVICE_LIST,
871 on_service_get_device_list_resp, resp_cb_data);
873 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
875 /* Free response callback data */
876 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
878 /* Send failure response */
879 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
887 static void on_service_get_mac_resp(ZigBeeServiceInterface *service_interface,
888 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
890 ZigbeeServiceInterfaceRespCbData_t *cb_data =
891 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
893 ZigbeeService *service_object;
894 GDBusMethodInvocation *invocation;
895 ZigbeeServiceGetMacResp_t *payload =
896 (ZigbeeServiceGetMacResp_t*)resp_data;
898 GVariant *v_eui64 = NULL;
900 NOT_USED(service_interface);
901 NOT_USED(request_id);
903 if (NULL == resp_data || 0 == resp_data_len) {
904 Z_LOGE("resp_data is null");
909 service_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
910 zblib_check_null_free_and_ret("service_object", service_object, cb_data);
912 invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
913 zblib_check_null_free_and_ret("invocation", invocation, cb_data);
915 v_eui64 = g_variant_new_from_data(G_VARIANT_TYPE("a(y)"),
916 payload->eui64, ZIGBEE_EUI64_SIZE, TRUE, NULL, NULL);
918 zigbee_service_complete_get_mac(service_object, invocation, payload->result,
924 static gboolean on_service_get_mac(ZigbeeService *service_object,
925 GDBusMethodInvocation *invocation,
928 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
929 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
933 /* Allocate response callback data */
935 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
936 invocation, NULL, 0);
937 if (NULL == resp_cb_data) {
938 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
940 /* Send failure response */
941 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
946 /* Dispatch request */
947 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
948 ZBLIB_DRIVER_TYPE_SERVICE,
949 ZBLIB_SERVICE_OPS_GET_MAC,
951 on_service_get_mac_resp, resp_cb_data);
953 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
955 /* Free response callback data */
956 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
958 /* Send failure response */
959 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
967 static void on_service_get_device_info_resp(ZigBeeServiceInterface *service_interface,
968 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
970 ZigbeeServiceInterfaceRespCbData_t *cb_data =
971 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
973 ZigbeeService *service_object;
974 GDBusMethodInvocation *invocation;
975 ZigbeeServiceGetDeviceInfoResp_t *payload =
976 (ZigbeeServiceGetDeviceInfoResp_t*)resp_data;
978 GVariant *variant = NULL;
979 GVariantBuilder* builder = NULL;
983 NOT_USED(service_interface);
984 NOT_USED(request_id);
986 if (NULL == resp_data || 0 == resp_data_len) {
987 Z_LOGE("resp_data is null");
992 service_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
993 zblib_check_null_free_and_ret("service_object", service_object, cb_data);
995 invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
996 zblib_check_null_free_and_ret("invocation", invocation, cb_data);
998 builder = g_variant_builder_new(G_VARIANT_TYPE ("a(qyayyay)"));
999 for (index = 0; index < payload->count; index++) {
1000 ZigbeeServiceGetDeviceInfoDetailResp_t *device = &(payload->list[index]);
1001 GVariantBuilder* mac_builder = g_variant_builder_new(G_VARIANT_TYPE ("ay"));
1002 GVariantBuilder* endpoint_builder = g_variant_builder_new(G_VARIANT_TYPE ("ay"));
1004 for (i = 0; i < ZIGBEE_EUI64_SIZE; i++) {
1005 g_variant_builder_add (mac_builder, "y", device->eui64[i]);
1007 for (i = 0; i < device->endpoint_count; i++) {
1008 g_variant_builder_add (endpoint_builder, "y", device->endpoints[i]);
1011 g_variant_builder_add (builder, "(qyayyay)",
1012 device->node_id, device->node_type,
1013 mac_builder, device->endpoint_count, endpoint_builder);
1015 g_variant_builder_unref (mac_builder);
1016 g_variant_builder_unref (endpoint_builder);
1019 variant = g_variant_builder_end(builder);
1020 zigbee_service_complete_get_device_info(service_object, invocation,
1021 payload->result, variant);
1026 static gboolean on_service_get_device_info(ZigbeeService *service_object,
1027 GDBusMethodInvocation *invocation,
1030 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
1031 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
1035 /* Allocate response callback data */
1037 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
1038 invocation, NULL, 0);
1039 if (NULL == resp_cb_data) {
1040 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
1042 /* Send failure response */
1043 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
1048 /* Dispatch request */
1049 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
1050 ZBLIB_DRIVER_TYPE_SERVICE,
1051 ZBLIB_SERVICE_OPS_GET_DEVICE_INFO,
1053 on_service_get_device_info_resp, resp_cb_data);
1055 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
1057 /* Free response callback data */
1058 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
1060 /* Send failure response */
1061 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
1069 static void on_service_get_endpoint_list_resp(ZigBeeServiceInterface *service_interface,
1070 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
1072 ZigbeeServiceInterfaceRespCbData_t *cb_data =
1073 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
1075 ZigbeeService *service_object;
1076 GDBusMethodInvocation *invocation;
1077 ZigbeeServiceGetEndpointListResp_t *payload =
1078 (ZigbeeServiceGetEndpointListResp_t*)resp_data;
1079 GVariant *v_endpoints = NULL;
1081 NOT_USED(service_interface);
1082 NOT_USED(request_id);
1084 if (NULL == resp_data || 0 == resp_data_len) {
1085 Z_LOGE("resp_data is null");
1090 service_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
1091 zblib_check_null_free_and_ret("service_object", service_object, cb_data);
1093 invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
1094 zblib_check_null_free_and_ret("invocation", invocation, cb_data);
1096 v_endpoints = g_variant_new_from_data(G_VARIANT_TYPE("a(y)"),
1097 payload->endpoints, payload->endpoint_count, TRUE, NULL, NULL);
1099 zigbee_service_complete_get_endpoint_list(service_object, invocation,
1100 payload->result, v_endpoints);
1105 static gboolean on_service_get_endpoint_list(ZigbeeService *service_object,
1106 GDBusMethodInvocation *invocation,
1110 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
1111 ZigbeeServiceGetEndpointList_t req;
1112 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
1114 GVariantIter *iter = NULL;
1119 memset(&req, 0x0, sizeof(ZigbeeServiceGetEndpointList_t));
1121 /* Update request structure */
1122 g_variant_get(eui64, "ay", &iter);
1123 while (g_variant_iter_loop(iter, "y", req.eui64[i])) {
1125 if (i >= ZIGBEE_EUI64_SIZE)
1129 /* Allocate response callback data */
1131 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
1132 invocation, NULL, 0);
1133 if (NULL == resp_cb_data) {
1134 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
1136 /* Send failure response */
1137 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
1142 /* Dispatch request */
1143 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
1144 ZBLIB_DRIVER_TYPE_SERVICE,
1145 ZBLIB_SERVICE_OPS_GET_ENDPOINT_LIST,
1147 on_service_get_endpoint_list_resp, resp_cb_data);
1149 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
1151 /* Free response callback data */
1152 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
1154 /* Send failure response */
1155 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
1163 static void on_service_get_cluster_list_resp(ZigBeeServiceInterface *service_interface,
1164 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
1166 ZigbeeServiceInterfaceRespCbData_t *cb_data =
1167 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
1169 ZigbeeService *service_object;
1170 GDBusMethodInvocation *invocation;
1171 ZigbeeServiceGetClusterListResp_t *payload =
1172 (ZigbeeServiceGetClusterListResp_t*)resp_data;
1173 GVariant *v_clusters = NULL;
1175 NOT_USED(service_interface);
1176 NOT_USED(request_id);
1178 if (NULL == resp_data || 0 == resp_data_len) {
1179 Z_LOGE("resp_data is null");
1184 service_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
1185 zblib_check_null_free_and_ret("service_object", service_object, cb_data);
1187 invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
1188 zblib_check_null_free_and_ret("invocation", invocation, cb_data);
1190 v_clusters = g_variant_new_from_data(G_VARIANT_TYPE("aq"),
1191 payload->clusters, payload->cluster_count, TRUE, NULL, NULL);
1193 zigbee_service_complete_get_cluster_list(service_object, invocation,
1194 payload->result, v_clusters);
1199 static gboolean on_service_get_cluster_list(ZigbeeService *service_object,
1200 GDBusMethodInvocation *invocation,
1205 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
1206 ZigbeeServiceGetClusterList_t req;
1207 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
1209 GVariantIter *iter = NULL;
1214 memset(&req, 0x0, sizeof(ZigbeeServiceGetClusterList_t));
1216 /* Update request structure */
1217 g_variant_get(eui64, "ay", &iter);
1218 while (g_variant_iter_loop(iter, "y", req.eui64[i])) {
1220 if (i >= ZIGBEE_EUI64_SIZE)
1223 req.endpoint = endpoint;
1225 /* Allocate response callback data */
1227 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
1228 invocation, NULL, 0);
1229 if (NULL == resp_cb_data) {
1230 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
1232 /* Send failure response */
1233 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
1238 /* Dispatch request */
1239 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
1240 ZBLIB_DRIVER_TYPE_SERVICE,
1241 ZBLIB_SERVICE_OPS_GET_CLUSTER_LIST,
1243 on_service_get_cluster_list_resp, resp_cb_data);
1245 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
1247 /* Free response callback data */
1248 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
1250 /* Send failure response */
1251 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
1259 static void on_service_get_node_type_resp(ZigBeeServiceInterface *service_interface,
1260 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
1262 ZigbeeServiceInterfaceRespCbData_t *cb_data =
1263 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
1265 ZigbeeService *service_object;
1266 GDBusMethodInvocation *invocation;
1267 ZigbeeServiceServiceNodeTypeResp_t *payload =
1268 (ZigbeeServiceServiceNodeTypeResp_t *)resp_data;
1270 NOT_USED(service_interface);
1271 NOT_USED(request_id);
1273 if (NULL == resp_data || 0 == resp_data_len) {
1274 Z_LOGE("resp_data is null");
1279 service_object = zigbee_service_dbus_interface_ref_interface_object(cb_data);
1280 zblib_check_null_free_and_ret("service_object", service_object, cb_data);
1282 invocation = zigbee_service_dbus_interface_ref_invocation(cb_data);
1283 zblib_check_null_free_and_ret("invocation", invocation, cb_data);
1285 zigbee_service_complete_get_node_type(service_object, invocation,
1286 payload->result, payload->node_type);
1291 static gboolean on_service_get_node_type(ZigbeeService *service_object,
1292 GDBusMethodInvocation *invocation,
1296 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
1297 ZigbeeServiceGetNodeType_t req;
1298 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
1300 GVariantIter *iter = NULL;
1305 memset(&req, 0x0, sizeof(ZigbeeServiceGetNodeType_t));
1307 /* Update request structure */
1308 g_variant_get(eui64, "ay", &iter);
1309 while (g_variant_iter_loop(iter, "y", req.eui64[i])) {
1311 if (i >= ZIGBEE_EUI64_SIZE)
1315 /* Allocate response callback data */
1317 zigbee_service_dbus_interface_create_resp_cb_data(service_object,
1318 invocation, NULL, 0);
1319 if (NULL == resp_cb_data) {
1320 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
1322 /* Send failure response */
1323 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
1328 /* Dispatch request */
1329 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
1330 ZBLIB_DRIVER_TYPE_SERVICE,
1331 ZBLIB_SERVICE_OPS_GET_NODE_TYPE,
1333 on_service_get_node_type_resp, resp_cb_data);
1335 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
1337 /* Free response callback data */
1338 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
1340 /* Send failure response */
1341 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
1349 void zigbee_service_dbus_interface_service_notification(ZigBeeServiceInterface *service_interface,
1350 guint noti_id, gpointer noti_data, guint noti_data_len, gpointer noti_cb_data)
1352 ZigbeeService *service_object;
1354 zblib_check_null_ret("service_interface", service_interface);
1356 if (NULL == noti_data || 0 == noti_data_len) {
1357 Z_LOGE("noti_data is NULL");
1361 service_object = _service_interface_ref_zigbee_service(service_interface);
1362 zblib_check_null_ret("service_object", service_object);
1364 NOT_USED(noti_cb_data);
1367 case ZBLIB_SERVICE_NOTI_FORM_NETWORK_DONE: {
1368 ZigbeeServiceServiceFormNetworkDone_t *panid_t =
1369 (ZigbeeServiceServiceFormNetworkDone_t*)noti_data;
1371 Z_LOGD("form_network_done : [0x%X]", panid_t->pan_id);
1373 zigbee_service_emit_form_network_done(service_object, panid_t->pan_id);
1376 case ZBLIB_SERVICE_NOTI_CHILD_JOINED: {
1377 ZigbeeServiceServiceChildJoined_t *child_t =
1378 (ZigbeeServiceServiceChildJoined_t*)noti_data;
1380 GVariant *v_eui64 = NULL;
1381 GVariant *v_endpoints = NULL;
1383 v_eui64 = g_variant_new_from_data(G_VARIANT_TYPE("a(y)"),
1384 child_t->eui64, ZIGBEE_EUI64_SIZE, TRUE, NULL, NULL);
1385 v_endpoints = g_variant_new_from_data(G_VARIANT_TYPE("a(y)"),
1386 child_t->endpoints, child_t->endpoint_count, TRUE, NULL, NULL);
1387 if (NULL == v_eui64 || NULL == v_endpoints) {
1388 Z_LOGE("Failed to create variant!");
1390 g_object_unref(v_eui64);
1392 g_object_unref(v_endpoints);
1394 zigbee_service_emit_child_joined(service_object,
1395 v_eui64, child_t->endpoint_count, v_endpoints, child_t->node_id);
1399 case ZBLIB_SERVICE_NOTI_CHILD_REJOINED: {
1400 ZigbeeServiceServiceChildRejoined_t ieee_addr_t;
1401 memcpy(&ieee_addr_t, noti_data, noti_data_len);
1402 zigbee_service_emit_child_rejoined(service_object, ieee_addr_t.eui64);
1405 case ZBLIB_SERVICE_NOTI_CHILD_LEFT: {
1406 ZigbeeServiceServiceChildLeft_t child_left_t;
1407 memcpy(&child_left_t, noti_data, noti_data_len);
1408 zigbee_service_emit_child_left(service_object, child_left_t.eui64, child_left_t.status);
1411 case ZBLIB_SERVICE_NOTI_LEAVE_NETWORK_DONE: {
1412 ZigbeeServiceServiceLeaveNetworkDone_t leave_net_t;
1413 memcpy(&leave_net_t, noti_data, noti_data_len);
1414 zigbee_service_emit_leave_network_done(service_object, leave_net_t.pan_id);
1418 Z_LOGE("Unexpected notification [%x]", noti_id);
1422 /* ZigbeeService should be dereferenced */
1423 g_object_unref(service_object);
1426 gboolean zigbee_service_dbus_interface_service_init(ZigBeeServiceInterface *service_interface,
1427 ZigbeeObjectSkeleton *zigbee_object)
1429 ZigbeeService *service_object;
1431 if (NULL == service_interface) {
1432 Z_LOGE("service_interface is NULL");
1436 service_object = zigbee_service_skeleton_new();
1437 zigbee_object_skeleton_set_service(zigbee_object, service_object);
1438 g_object_unref(service_object);
1440 Z_LOGI("service_object: [%p]", service_object);
1443 * Register signal handlers for 'service' interface
1445 g_signal_connect(service_object,
1447 G_CALLBACK(on_service_enable), service_interface);
1449 g_signal_connect(service_object,
1451 G_CALLBACK(on_service_disable), service_interface);
1453 g_signal_connect(service_object,
1454 "handle-zb-hw-reset",
1455 G_CALLBACK(on_service_zb_hw_reset), service_interface);
1457 g_signal_connect(service_object,
1458 "handle-form-network",
1459 G_CALLBACK(on_service_form_network), service_interface);
1461 g_signal_connect(service_object,
1462 "handle-coex-start",
1463 G_CALLBACK(on_service_coex_start), service_interface);
1465 g_signal_connect(service_object,
1467 G_CALLBACK(on_service_coex_stop), service_interface);
1469 g_signal_connect(service_object,
1470 "handle-leave-network",
1471 G_CALLBACK(on_service_leave_network), service_interface);
1473 g_signal_connect(service_object,
1474 "handle-get-network-info",
1475 G_CALLBACK(on_service_get_network_info), service_interface);
1477 g_signal_connect(service_object,
1478 "handle-permit-join",
1479 G_CALLBACK(on_service_permit_join), service_interface);
1481 g_signal_connect(service_object,
1482 "handle-leave-request",
1483 G_CALLBACK(on_service_leave_request), service_interface);
1485 g_signal_connect(service_object,
1486 "handle-get-device-list",
1487 G_CALLBACK(on_service_get_device_list), service_interface);
1489 g_signal_connect(service_object,
1491 G_CALLBACK(on_service_get_mac), service_interface);
1493 g_signal_connect(service_object,
1494 "handle-get-device-info",
1495 G_CALLBACK(on_service_get_device_info), service_interface);
1497 g_signal_connect(service_object,
1498 "handle-get-endpoint-list",
1499 G_CALLBACK(on_service_get_endpoint_list), service_interface);
1501 g_signal_connect(service_object,
1502 "handle-get-cluster-list",
1503 G_CALLBACK(on_service_get_cluster_list), service_interface);
1505 g_signal_connect(service_object,
1506 "handle-get-node-type",
1507 G_CALLBACK(on_service_get_node_type), service_interface);