2 * Copyright (c) 2016 Samsung Electronics Co., Ltd. All rights reserved.
4 * Contact: Suresh Kumar N (suresh.n@samsung.com)
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
19 #include "zigbee_service_interface_common.h"
21 #include <zblib_driver_zcl_poll_control.h>
23 static void on_zcl_poll_control_check_in_response_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_zcl_poll_control_check_in_response(ZigbeeZcl_poll_control *zcl_poll_control_object,
37 GDBusMethodInvocation *invocation,
40 gchar start_fast_polling,
41 gshort fast_poll_timeout,
44 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
45 ZigbeeZclPollControlCheckInResponse_t req;
46 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
50 memset(&req, 0x0, sizeof(ZigbeeZclPollControlCheckInResponse_t));
52 /* Update request structure */
53 req.node_id = node_id;
54 req.dest_ep = dest_ep;
55 req.start_fast_polling = start_fast_polling;
56 req.fast_poll_timeout = fast_poll_timeout;
58 /* Allocate response callback data */
60 zigbee_service_dbus_interface_create_resp_cb_data(zcl_poll_control_object,
62 if (NULL == resp_cb_data) {
63 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
65 /* Send failure response */
66 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
71 /* Dispatch request */
72 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
73 ZBLIB_DRIVER_TYPE_ZCL_POLL_CONTROL,
74 ZBLIB_ZCL_POLL_CONTROL_OPS_CHECK_IN_RESPONSE,
76 on_zcl_poll_control_check_in_response_resp, resp_cb_data);
78 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
80 /* Free response callback data */
81 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
83 /* Send failure response */
84 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
92 static void on_zcl_poll_control_fast_poll_stop_resp(ZigBeeServiceInterface *service_interface,
93 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
95 ZigbeeServiceInterfaceRespCbData_t *cb_data =
96 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
99 NOT_USED(service_interface);
100 NOT_USED(request_id);
102 NOT_USED(resp_data_len);
105 static gboolean on_zcl_poll_control_fast_poll_stop(ZigbeeZcl_poll_control *zcl_poll_control_object,
106 GDBusMethodInvocation *invocation,
111 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
112 ZigbeeZclPollControlFastPollStop_t req;
113 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
117 memset(&req, 0x0, sizeof(ZigbeeZclPollControlFastPollStop_t));
119 /* Update request structure */
120 req.node_id = node_id;
121 req.dest_ep = dest_ep;
123 /* Allocate response callback data */
125 zigbee_service_dbus_interface_create_resp_cb_data(zcl_poll_control_object,
126 invocation, NULL, 0);
127 if (NULL == resp_cb_data) {
128 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
130 /* Send failure response */
131 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
136 /* Dispatch request */
137 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
138 ZBLIB_DRIVER_TYPE_ZCL_POLL_CONTROL,
139 ZBLIB_ZCL_POLL_CONTROL_OPS_FAST_POLL_STOP,
141 on_zcl_poll_control_fast_poll_stop_resp, resp_cb_data);
143 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
145 /* Free response callback data */
146 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
148 /* Send failure response */
149 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
157 static void on_zcl_poll_control_set_long_poll_interval_resp(ZigBeeServiceInterface *service_interface,
158 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
160 ZigbeeServiceInterfaceRespCbData_t *cb_data =
161 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
164 NOT_USED(service_interface);
165 NOT_USED(request_id);
167 NOT_USED(resp_data_len);
170 static gboolean on_zcl_poll_control_set_long_poll_interval(ZigbeeZcl_poll_control *zcl_poll_control_object,
171 GDBusMethodInvocation *invocation,
174 guint new_long_poll_interval,
177 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
178 ZigbeeZclPollControlSetLongPollInterval_t req;
179 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
183 memset(&req, 0x0, sizeof(ZigbeeZclPollControlSetLongPollInterval_t));
185 /* Update request structure */
186 req.node_id = node_id;
187 req.dest_ep = dest_ep;
188 req.new_long_poll_interval = new_long_poll_interval;
190 /* Allocate response callback data */
192 zigbee_service_dbus_interface_create_resp_cb_data(zcl_poll_control_object,
193 invocation, NULL, 0);
194 if (NULL == resp_cb_data) {
195 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
197 /* Send failure response */
198 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
203 /* Dispatch request */
204 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
205 ZBLIB_DRIVER_TYPE_ZCL_POLL_CONTROL,
206 ZBLIB_ZCL_POLL_CONTROL_OPS_SET_LONG_POLL_INTERVAL,
208 on_zcl_poll_control_set_long_poll_interval_resp, resp_cb_data);
210 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
212 /* Free response callback data */
213 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
215 /* Send failure response */
216 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
224 static void on_zcl_poll_control_set_short_poll_interval_resp(ZigBeeServiceInterface *service_interface,
225 guint request_id, gpointer resp_data, guint resp_data_len, gpointer resp_cb_data)
227 ZigbeeServiceInterfaceRespCbData_t *cb_data =
228 (ZigbeeServiceInterfaceRespCbData_t *)resp_cb_data;
231 NOT_USED(service_interface);
232 NOT_USED(request_id);
234 NOT_USED(resp_data_len);
237 static gboolean on_zcl_poll_control_set_short_poll_interval(ZigbeeZcl_poll_control *zcl_poll_control_object,
238 GDBusMethodInvocation *invocation,
241 guint new_short_poll_interval,
244 ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
245 ZigbeeZclPollControlSetShortPollInterval_t req;
246 ZigbeeServiceInterfaceRespCbData_t *resp_cb_data = NULL;
250 memset(&req, 0x0, sizeof(ZigbeeZclPollControlSetShortPollInterval_t));
252 /* Update request structure */
253 req.node_id = node_id;
254 req.dest_ep = dest_ep;
255 req.new_short_poll_interval = new_short_poll_interval;
257 /* Allocate response callback data */
259 zigbee_service_dbus_interface_create_resp_cb_data(zcl_poll_control_object,
260 invocation, NULL, 0);
261 if (NULL == resp_cb_data) {
262 Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
264 /* Send failure response */
265 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
270 /* Dispatch request */
271 ret = zigbee_service_dbus_interface_dispatch_request(service_interface,
272 ZBLIB_DRIVER_TYPE_ZCL_POLL_CONTROL,
273 ZBLIB_ZCL_POLL_CONTROL_OPS_SET_SHORT_POLL_INTERVAL,
275 on_zcl_poll_control_set_short_poll_interval_resp, resp_cb_data);
277 Z_LOGE("zigbee_service_dbus_interface_dispatch_request failed!");
279 /* Free response callback data */
280 zigbee_service_dbus_interface_destroy_resp_cb_data(resp_cb_data);
282 /* Send failure response */
283 ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
291 gboolean zigbee_service_dbus_interface_zcl_poll_control_init(ZigBeeServiceInterface *service_interface,
292 ZigbeeObjectSkeleton *zigbee_object)
294 ZigbeeZcl_poll_control *zcl_poll_control_object;
296 if (NULL == service_interface) {
297 Z_LOGE("service_interface is NULL");
301 zcl_poll_control_object = zigbee_zcl_poll_control_skeleton_new();
302 zigbee_object_skeleton_set_zcl_poll_control(zigbee_object, zcl_poll_control_object);
303 g_object_unref(zcl_poll_control_object);
305 Z_LOGI("zcl_poll_control_object: [%p]", zcl_poll_control_object);
308 * Register signal handlers for 'zcl_poll_control' interface
310 g_signal_connect(zcl_poll_control_object,
311 "handle-check-in-response",
312 G_CALLBACK(on_zcl_poll_control_check_in_response), service_interface);
314 g_signal_connect(zcl_poll_control_object,
315 "handle-fast-poll-stop",
316 G_CALLBACK(on_zcl_poll_control_fast_poll_stop), service_interface);
318 g_signal_connect(zcl_poll_control_object,
319 "handle-set-long-poll-interval",
320 G_CALLBACK(on_zcl_poll_control_set_long_poll_interval), service_interface);
322 g_signal_connect(zcl_poll_control_object,
323 "handle-set-short-poll-interval",
324 G_CALLBACK(on_zcl_poll_control_set_short_poll_interval), service_interface);