2 * Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include "net_nfc_typedef_internal.h"
18 #include "net_nfc_debug_internal.h"
19 #include "net_nfc_util_internal.h"
20 #include "net_nfc_util_gdbus_internal.h"
21 #include "net_nfc_gdbus.h"
22 #include "net_nfc_client.h"
23 #include "net_nfc_client_manager.h"
24 #include "net_nfc_client_llcp.h"
26 typedef struct _LlcpFuncData LlcpFuncData;
34 static NetNfcGDbusLlcp *llcp_proxy = NULL;
35 static net_nfc_llcp_config_info_s llcp_config = { 128, 0, 0, 1 };
36 static net_nfc_target_handle_s *llcp_handle = NULL;
37 static GList *socket_data_list = NULL;
38 static guint socket_handle = 0;
41 static void llcp_error(NetNfcGDbusLlcp *object, guint arg_handle, guint client_socket,
42 gint error, gpointer user_data)
44 NFC_INFO(">>> SIGNAL arrived");
47 static void llcp_incoming(NetNfcGDbusLlcp *object, guint arg_handle,
48 guint client_socket, guint incoming_socket, gpointer user_data)
50 NFC_INFO(">>> SIGNAL arrived");
53 void llcp_socket_data_append(net_nfc_llcp_internal_socket_s *socket_data)
55 RET_IF(NULL == socket_data_list);
58 socket_data_list = g_list_append(socket_data_list, socket_data);
61 void llcp_socket_data_remove(net_nfc_llcp_internal_socket_s *socket_data)
63 RET_IF(NULL == socket_data_list);
67 socket_data_list = g_list_remove(socket_data_list, socket_data);
69 g_free(socket_data->service_name);
74 net_nfc_llcp_internal_socket_s *llcp_socket_data_find(net_nfc_llcp_socket_t socket)
78 RETV_IF(NULL == socket_data_list, NULL);
80 for (pos = g_list_first(socket_data_list); pos ; pos = pos->data)
82 net_nfc_llcp_internal_socket_s *data;
88 if (data->client_socket == socket)
98 static void llcp_call_listen(GObject *source_object, GAsyncResult *res,
102 GError *error = NULL;
103 net_nfc_error_e result;
104 guint32 out_client_socket = -1;
105 LlcpFuncData *func_data = user_data;
106 net_nfc_llcp_internal_socket_s *socket_data = NULL;
108 g_assert(func_data != NULL);
110 ret = net_nfc_gdbus_llcp_call_listen_finish(NET_NFC_GDBUS_LLCP(source_object),
111 &result, &out_client_socket, res, &error);
114 NFC_ERR("Can not finish listen: %s", error->message);
116 result = NET_NFC_IPC_FAIL;
119 socket_data = llcp_socket_data_find(out_client_socket);
120 if (socket_data == NULL)
122 NFC_ERR("Wrong client socket is returned");
126 if (func_data->callback != NULL)
128 net_nfc_client_llcp_listen_completed callback =
129 (net_nfc_client_llcp_listen_completed)func_data->callback;
131 callback(result, out_client_socket, func_data->user_data);
134 /* TODO : release resource when socket is closed */
135 // g_free(func_data);
138 static void llcp_call_accept(GObject *source_object, GAsyncResult *res,
142 GError *error = NULL;
143 net_nfc_error_e result;
144 LlcpFuncData *func_data = user_data;
146 g_assert(func_data != NULL);
148 ret = net_nfc_gdbus_llcp_call_accept_finish(NET_NFC_GDBUS_LLCP(source_object),
149 &result, res, &error);
152 NFC_ERR("Can not finish accept: %s", error->message);
154 result = NET_NFC_IPC_FAIL;
157 if (func_data->callback != NULL)
159 net_nfc_client_llcp_accept_completed callback =
160 (net_nfc_client_llcp_accept_completed)func_data->callback;
162 callback(result, func_data->user_data);
168 static void llcp_call_reject(GObject *source_object, GAsyncResult *res,
172 GError *error = NULL;
173 net_nfc_error_e result;
174 LlcpFuncData *func_data = user_data;
176 g_assert(func_data != NULL);
178 ret = net_nfc_gdbus_llcp_call_reject_finish(NET_NFC_GDBUS_LLCP(source_object),
179 &result, res, &error);
182 NFC_ERR("Can not finish reject: %s", error->message);
184 result = NET_NFC_IPC_FAIL;
187 if (func_data->callback != NULL)
189 net_nfc_client_llcp_reject_completed callback =
190 (net_nfc_client_llcp_reject_completed)func_data->callback;
192 callback(result, func_data->user_data);
198 static void llcp_call_connect(GObject *source_object, GAsyncResult *res,
202 GError *error = NULL;
203 net_nfc_error_e result;
204 guint32 out_client_socket = -1;
205 LlcpFuncData *func_data = user_data;
206 net_nfc_llcp_internal_socket_s *socket_data = NULL;
208 g_assert(func_data != NULL);
210 ret = net_nfc_gdbus_llcp_call_connect_finish(NET_NFC_GDBUS_LLCP(source_object),
211 &result, &out_client_socket, res, &error);
214 NFC_ERR("Can not finish connect: %s", error->message);
216 result = NET_NFC_IPC_FAIL;
219 socket_data = llcp_socket_data_find(out_client_socket);
220 if (socket_data == NULL)
222 NFC_ERR("Wrong client socket is returned");
226 if (func_data->callback != NULL)
228 net_nfc_client_llcp_connect_completed callback =
229 (net_nfc_client_llcp_connect_completed)func_data->callback;
231 callback(result, out_client_socket, func_data->user_data);
234 /* TODO : release resource when socket is closed */
235 // g_free(func_data);
238 static void llcp_call_connect_sap(GObject *source_object,
243 GError *error = NULL;
244 net_nfc_error_e result;
245 guint32 out_client_socket = -1;
246 LlcpFuncData *func_data = user_data;
247 net_nfc_llcp_internal_socket_s *socket_data = NULL;
249 g_assert(func_data != NULL);
251 ret = net_nfc_gdbus_llcp_call_connect_sap_finish(NET_NFC_GDBUS_LLCP(source_object),
252 &result, &out_client_socket, res, &error);
255 NFC_ERR("Can not finish connect sap: %s", error->message);
257 result = NET_NFC_IPC_FAIL;
260 socket_data = llcp_socket_data_find(out_client_socket);
261 if (socket_data == NULL)
263 NFC_ERR("Wrong client socket is returned");
267 if (func_data->callback != NULL)
269 net_nfc_client_llcp_connect_sap_completed callback =
270 (net_nfc_client_llcp_connect_sap_completed)func_data->callback;
272 callback(result, out_client_socket, func_data->user_data);
275 /* TODO : release resource when socket is closed */
276 // g_free(func_data);
279 static void llcp_call_send(GObject *source_object, GAsyncResult *res,
283 GError *error = NULL;
284 net_nfc_error_e result;
285 guint32 out_client_socket = -1;
286 LlcpFuncData *func_data = user_data;
288 g_assert(func_data != NULL);
290 ret = net_nfc_gdbus_llcp_call_send_finish(NET_NFC_GDBUS_LLCP(source_object),
291 &result, &out_client_socket, res, &error);
294 NFC_ERR("Can not finish send: %s", error->message);
296 result = NET_NFC_IPC_FAIL;
299 if (func_data->callback != NULL)
301 net_nfc_client_llcp_send_completed callback =
302 (net_nfc_client_llcp_send_completed)func_data->callback;
304 callback(result, func_data->user_data);
310 static void llcp_call_send_to(GObject *source_object, GAsyncResult *res,
314 GError *error = NULL;
315 net_nfc_error_e result;
316 guint32 out_client_socket = -1;
317 LlcpFuncData *func_data = user_data;
319 g_assert(func_data != NULL);
321 ret = net_nfc_gdbus_llcp_call_send_to_finish(NET_NFC_GDBUS_LLCP(source_object),
322 &result, &out_client_socket, res, &error);
325 NFC_ERR("Can not finish send to: %s", error->message);
327 result = NET_NFC_IPC_FAIL;
330 if (func_data->callback != NULL)
332 net_nfc_client_llcp_send_to_completed callback =
333 (net_nfc_client_llcp_send_to_completed)func_data->callback;
335 callback(result, func_data->user_data);
341 static void llcp_call_receive(GObject *source_object, GAsyncResult *res,
346 GError *error = NULL;
347 net_nfc_error_e result;
348 LlcpFuncData *func_data = user_data;
350 g_assert(func_data != NULL);
352 ret = net_nfc_gdbus_llcp_call_receive_finish(NET_NFC_GDBUS_LLCP(source_object),
353 &result, &variant, res, &error);
356 NFC_ERR("Can not finish receive: %s", error->message);
358 result = NET_NFC_IPC_FAIL;
361 if (func_data->callback != NULL)
363 data_s data = { NULL, 0 };
364 net_nfc_client_llcp_receive_completed callback =
365 (net_nfc_client_llcp_receive_completed)func_data->callback;
367 net_nfc_util_gdbus_variant_to_data_s(variant, &data);
369 callback(result, &data, func_data->user_data);
371 net_nfc_util_free_data(&data);
377 static void llcp_call_receive_from(GObject *source_object, GAsyncResult *res,
382 GError *error = NULL;
383 net_nfc_error_e result;
384 GVariant *variant = NULL;
385 LlcpFuncData *func_data = user_data;
387 g_assert(func_data != NULL);
389 ret = net_nfc_gdbus_llcp_call_receive_from_finish(NET_NFC_GDBUS_LLCP(source_object),
390 &result, &sap, &variant, res, &error);
393 NFC_ERR("Can not finish receive from: %s", error->message);
395 result = NET_NFC_IPC_FAIL;
398 if (func_data->callback != NULL)
400 data_s data = { NULL, 0 };
401 net_nfc_client_llcp_receive_from_completed callback =
402 (net_nfc_client_llcp_receive_from_completed)func_data->callback;
404 net_nfc_util_gdbus_variant_to_data_s(variant, &data);
406 callback(result, sap, &data, func_data->user_data);
408 net_nfc_util_free_data(&data);
414 static void llcp_call_close(GObject *source_object, GAsyncResult *res,
418 GError *error = NULL;
419 net_nfc_error_e result;
420 guint32 out_client_socket = -1;
421 LlcpFuncData *func_data = user_data;
422 net_nfc_llcp_internal_socket_s *socket_data = NULL;
424 g_assert(func_data != NULL);
426 ret = net_nfc_gdbus_llcp_call_close_finish(NET_NFC_GDBUS_LLCP(source_object),
427 &result, &out_client_socket, res, &error);
430 NFC_ERR("Can not finish close: %s", error->message);
432 result = NET_NFC_IPC_FAIL;
435 socket_data = llcp_socket_data_find(out_client_socket);
436 if (socket_data == NULL)
438 NFC_ERR("Wrong client socket is returned");
442 if (func_data->callback != NULL)
444 net_nfc_client_llcp_close_completed callback =
445 (net_nfc_client_llcp_close_completed)func_data->callback;
447 callback(result, func_data->user_data);
453 static void llcp_call_disconnect(GObject *source_object, GAsyncResult *res,
457 GError *error = NULL;
458 net_nfc_error_e result;
459 guint32 out_client_socket = -1;
460 LlcpFuncData *func_data = user_data;
461 net_nfc_llcp_internal_socket_s *socket_data = NULL;
463 g_assert(func_data != NULL);
465 ret = net_nfc_gdbus_llcp_call_disconnect_finish(NET_NFC_GDBUS_LLCP(source_object),
466 &result, &out_client_socket, res, &error);
469 NFC_ERR("Can not finish disconnect: %s", error->message);
471 result = NET_NFC_IPC_FAIL;
474 socket_data = llcp_socket_data_find(out_client_socket);
475 if (socket_data == NULL)
477 NFC_ERR("Wrong client socket is returned");
481 if (func_data->callback != NULL) {
482 net_nfc_client_llcp_disconnect_completed callback =
483 (net_nfc_client_llcp_disconnect_completed)func_data->callback;
485 callback(result, func_data->user_data);
491 API net_nfc_error_e net_nfc_client_llcp_get_config(
492 net_nfc_llcp_config_info_s **config)
494 RETV_IF(NULL == config, NET_NFC_NULL_PARAMETER);
496 *config = &llcp_config;
501 API net_nfc_error_e net_nfc_client_llcp_listen(net_nfc_llcp_socket_t socket,
502 const char *service_name,
504 net_nfc_client_llcp_listen_completed callback,
507 LlcpFuncData *func_data;
508 net_nfc_llcp_internal_socket_s *socket_data = NULL;
510 RETV_IF(NULL == llcp_proxy, NET_NFC_NOT_INITIALIZED);
512 /* prevent executing daemon when nfc is off */
513 RETV_IF(net_nfc_client_manager_is_activated() == false, NET_NFC_INVALID_STATE);
515 socket_data = llcp_socket_data_find(socket);
516 if (socket_data == NULL)
518 NFC_ERR("can not get socket_data");
519 return NET_NFC_LLCP_INVALID_SOCKET;
522 /* FIXME: temporary typecast to (uint8_t *) */
523 socket_data->service_name = (uint8_t *)g_strdup(service_name);
524 socket_data->sap = sap;
526 func_data = g_new0(LlcpFuncData, 1);
527 if (func_data == NULL) {
528 NFC_ERR("g_new0 failed");
530 return NET_NFC_ALLOC_FAIL;
533 func_data->callback = (gpointer)callback;
534 func_data->user_data = user_data;
536 net_nfc_gdbus_llcp_call_listen(llcp_proxy,
537 GPOINTER_TO_UINT(llcp_handle),
538 socket_data->client_socket,
544 net_nfc_client_gdbus_get_privilege(),
552 API net_nfc_error_e net_nfc_client_llcp_listen_sync(net_nfc_llcp_socket_t socket,
553 const char *service_name, sap_t sap, net_nfc_llcp_socket_t *out_socket)
556 GError *error = NULL;
557 net_nfc_error_e result;
558 guint32 out_client_socket;
559 net_nfc_llcp_internal_socket_s *socket_data = NULL;
560 net_nfc_llcp_internal_socket_s *out_socket_data = NULL;
562 RETV_IF(NULL == llcp_proxy, NET_NFC_NOT_INITIALIZED);
563 RETV_IF(NULL == out_socket, NET_NFC_NULL_PARAMETER);
564 RETV_IF(NULL == service_name, NET_NFC_NULL_PARAMETER);
566 /* prevent executing daemon when nfc is off */
567 RETV_IF(net_nfc_client_manager_is_activated() == false, NET_NFC_INVALID_STATE);
569 socket_data = llcp_socket_data_find(socket);
570 if (socket_data == NULL)
572 NFC_ERR("can not get socket_data");
573 return NET_NFC_LLCP_INVALID_SOCKET;
576 /* FIXME: temporary typecast to (uint8_t *) */
577 socket_data->service_name = (uint8_t *)g_strdup(service_name);
578 socket_data->sap = sap;
580 ret = net_nfc_gdbus_llcp_call_listen_sync(llcp_proxy,
581 GPOINTER_TO_UINT(llcp_handle),
582 socket_data->client_socket,
588 net_nfc_client_gdbus_get_privilege(),
595 out_socket_data = llcp_socket_data_find(out_client_socket);
596 if (out_socket_data == NULL || out_socket_data != socket_data)
598 NFC_ERR("out_socket_data(%p), socket_data(%p)", out_socket_data, socket_data);
599 return NET_NFC_UNKNOWN_ERROR;
603 *out_socket = out_client_socket;
607 NFC_ERR("can not listen: %s", error->message);
609 result = NET_NFC_IPC_FAIL;
615 API net_nfc_error_e net_nfc_client_llcp_accept(net_nfc_llcp_socket_t socket,
616 net_nfc_client_llcp_accept_completed callback, void *user_data)
618 LlcpFuncData *func_data;
620 RETV_IF(NULL == llcp_proxy, NET_NFC_NOT_INITIALIZED);
622 /* prevent executing daemon when nfc is off */
623 RETV_IF(net_nfc_client_manager_is_activated() == false, NET_NFC_INVALID_STATE);
625 func_data = g_new0(LlcpFuncData, 1);
626 if (func_data == NULL)
628 NFC_ERR("g_new0 failed");
629 return NET_NFC_ALLOC_FAIL;
632 func_data->callback = (gpointer)callback;
633 func_data->user_data = user_data;
635 net_nfc_gdbus_llcp_call_accept(llcp_proxy,
636 GPOINTER_TO_UINT(llcp_handle),
638 net_nfc_client_gdbus_get_privilege(),
646 API net_nfc_error_e net_nfc_client_llcp_accept_sync(net_nfc_llcp_socket_t socket)
649 GError *error = NULL;
650 net_nfc_error_e result;
652 RETV_IF(NULL == llcp_proxy, NET_NFC_NOT_INITIALIZED);
654 /* prevent executing daemon when nfc is off */
655 RETV_IF(net_nfc_client_manager_is_activated() == false, NET_NFC_INVALID_STATE);
657 ret = net_nfc_gdbus_llcp_call_accept_sync(llcp_proxy, GPOINTER_TO_UINT(llcp_handle),
658 socket, net_nfc_client_gdbus_get_privilege(), &result, NULL, &error);
661 NFC_ERR("can not connect: %s", error->message);
663 result = NET_NFC_IPC_FAIL;
669 API net_nfc_error_e net_nfc_client_llcp_reject(net_nfc_llcp_socket_t socket,
670 net_nfc_client_llcp_reject_completed callback, void *user_data)
672 LlcpFuncData *func_data;
674 RETV_IF(NULL == llcp_proxy, NET_NFC_NOT_INITIALIZED);
676 /* prevent executing daemon when nfc is off */
677 RETV_IF(net_nfc_client_manager_is_activated() == false, NET_NFC_INVALID_STATE);
679 func_data = g_new0(LlcpFuncData, 1);
680 if (func_data == NULL)
682 NFC_ERR("g_new0 failed");
683 return NET_NFC_ALLOC_FAIL;
686 func_data->callback = (gpointer)callback;
687 func_data->user_data = user_data;
689 net_nfc_gdbus_llcp_call_reject(llcp_proxy,
690 GPOINTER_TO_UINT(llcp_handle),
692 net_nfc_client_gdbus_get_privilege(),
700 API net_nfc_error_e net_nfc_client_llcp_reject_sync(net_nfc_llcp_socket_t socket)
703 GError *error = NULL;
704 net_nfc_error_e result;
706 RETV_IF(NULL == llcp_proxy, NET_NFC_NOT_INITIALIZED);
708 /* prevent executing daemon when nfc is off */
709 RETV_IF(net_nfc_client_manager_is_activated() == false, NET_NFC_INVALID_STATE);
711 ret = net_nfc_gdbus_llcp_call_reject_sync(llcp_proxy, GPOINTER_TO_UINT(llcp_handle),
712 socket, net_nfc_client_gdbus_get_privilege(), &result, NULL, &error);
715 NFC_ERR("can not connect: %s", error->message);
717 result = NET_NFC_IPC_FAIL;
723 API net_nfc_error_e net_nfc_client_llcp_connect(net_nfc_llcp_socket_t socket,
724 const char *service_name,
725 net_nfc_client_llcp_connect_completed callback,
728 LlcpFuncData *func_data;
729 net_nfc_llcp_internal_socket_s *socket_data = NULL;
731 RETV_IF(NULL == llcp_proxy, NET_NFC_NOT_INITIALIZED);
732 RETV_IF(NULL == service_name, NET_NFC_NULL_PARAMETER);
734 /* prevent executing daemon when nfc is off */
735 RETV_IF(net_nfc_client_manager_is_activated() == false, NET_NFC_INVALID_STATE);
737 socket_data = llcp_socket_data_find(socket);
738 if (socket_data == NULL)
740 NFC_ERR("can not get socket_data");
741 return NET_NFC_LLCP_INVALID_SOCKET;
744 func_data = g_new0(LlcpFuncData, 1);
745 if (func_data == NULL)
747 NFC_ERR("g_new0 failed");
749 return NET_NFC_ALLOC_FAIL;
752 func_data->callback = (gpointer)callback;
753 func_data->user_data = user_data;
755 net_nfc_gdbus_llcp_call_connect(llcp_proxy,
756 GPOINTER_TO_UINT(llcp_handle),
757 socket_data->client_socket,
762 net_nfc_client_gdbus_get_privilege(),
770 API net_nfc_error_e net_nfc_client_llcp_connect_sync(net_nfc_llcp_socket_t socket,
771 const char *service_name, net_nfc_llcp_socket_t *out_socket)
774 GError *error = NULL;
775 net_nfc_error_e result;
776 guint32 out_client_socket;
777 net_nfc_llcp_internal_socket_s *socket_data = NULL;
778 net_nfc_llcp_internal_socket_s *out_socket_data = NULL;
780 RETV_IF(NULL == llcp_proxy, NET_NFC_NOT_INITIALIZED);
781 RETV_IF(NULL == service_name, NET_NFC_NULL_PARAMETER);
782 RETV_IF(NULL == out_socket, NET_NFC_NULL_PARAMETER);
784 /* prevent executing daemon when nfc is off */
785 RETV_IF(net_nfc_client_manager_is_activated() == false, NET_NFC_INVALID_STATE);
787 socket_data = llcp_socket_data_find(socket);
788 if (socket_data == NULL)
790 NFC_ERR("can not get socket_data");
791 return NET_NFC_LLCP_INVALID_SOCKET;
794 ret = net_nfc_gdbus_llcp_call_connect_sync(llcp_proxy,
795 GPOINTER_TO_UINT(llcp_handle),
796 socket_data->client_socket,
801 net_nfc_client_gdbus_get_privilege(),
808 out_socket_data = llcp_socket_data_find(out_client_socket);
809 if (out_socket_data == NULL || out_socket_data != socket_data)
811 NFC_ERR("out_socket_data(%p), socket_data(%p)", out_socket_data, socket_data);
812 return NET_NFC_UNKNOWN_ERROR;
816 *out_socket = out_client_socket;
820 NFC_ERR("can not connect: %s", error->message);
822 result = NET_NFC_IPC_FAIL;
828 API net_nfc_error_e net_nfc_client_llcp_connect_sap(net_nfc_llcp_socket_t socket,
829 sap_t sap, net_nfc_client_llcp_connect_sap_completed callback, void *user_data)
831 LlcpFuncData *func_data;
832 net_nfc_llcp_internal_socket_s *socket_data = NULL;
834 RETV_IF(NULL == llcp_proxy, NET_NFC_NOT_INITIALIZED);
835 RETV_IF(0 == sap, NET_NFC_INVALID_PARAM);
837 /* prevent executing daemon when nfc is off */
838 RETV_IF(net_nfc_client_manager_is_activated() == false, NET_NFC_INVALID_STATE);
840 socket_data = llcp_socket_data_find(socket);
841 if (socket_data == NULL)
843 NFC_ERR("can not get socket_data");
844 return NET_NFC_LLCP_INVALID_SOCKET;
847 func_data = g_new0(LlcpFuncData, 1);
848 if (func_data == NULL)
850 NFC_ERR("g_new0 failed");
851 return NET_NFC_ALLOC_FAIL;
854 func_data->callback = (gpointer)callback;
855 func_data->user_data = user_data;
857 net_nfc_gdbus_llcp_call_connect_sap(llcp_proxy,
858 GPOINTER_TO_UINT(llcp_handle),
859 socket_data->client_socket,
864 net_nfc_client_gdbus_get_privilege(),
866 llcp_call_connect_sap,
872 API net_nfc_error_e net_nfc_client_llcp_connect_sap_sync(
873 net_nfc_llcp_socket_t socket, sap_t sap, net_nfc_llcp_socket_t *out_socket)
876 GError *error = NULL;
877 net_nfc_error_e result;
878 guint32 out_client_socket;
879 net_nfc_llcp_internal_socket_s *socket_data = NULL;
880 net_nfc_llcp_internal_socket_s *out_socket_data = NULL;
882 RETV_IF(NULL == llcp_proxy, NET_NFC_NOT_INITIALIZED);
883 RETV_IF(NULL == out_socket, NET_NFC_NULL_PARAMETER);
884 RETV_IF(0 == sap, NET_NFC_INVALID_PARAM);
886 /* prevent executing daemon when nfc is off */
887 RETV_IF(net_nfc_client_manager_is_activated() == false, NET_NFC_INVALID_STATE);
889 socket_data = llcp_socket_data_find(socket);
890 if (socket_data == NULL)
892 NFC_ERR("can not get socket_data");
893 return NET_NFC_LLCP_INVALID_SOCKET;
896 ret = net_nfc_gdbus_llcp_call_connect_sap_sync(llcp_proxy,
897 GPOINTER_TO_UINT(llcp_handle),
898 socket_data->client_socket,
903 net_nfc_client_gdbus_get_privilege(),
910 out_socket_data = llcp_socket_data_find(out_client_socket);
911 if (out_socket_data == NULL || out_socket_data != socket_data)
913 NFC_ERR("out_socket_data(%p), socket_data(%p)", out_socket_data, socket_data);
914 return NET_NFC_UNKNOWN_ERROR;
918 *out_socket = out_client_socket;
922 NFC_ERR("can not connect: %s", error->message);
924 result = NET_NFC_IPC_FAIL;
930 API net_nfc_error_e net_nfc_client_llcp_send(net_nfc_llcp_socket_t socket,
931 data_s *data, net_nfc_client_llcp_send_completed callback, void *user_data)
934 LlcpFuncData *func_data;
935 net_nfc_llcp_internal_socket_s *socket_data = NULL;
937 RETV_IF(NULL == llcp_proxy, NET_NFC_NOT_INITIALIZED);
938 RETV_IF(NULL == data, NET_NFC_NULL_PARAMETER);
939 RETV_IF(socket <= 0, NET_NFC_INVALID_PARAM);
941 /* prevent executing daemon when nfc is off */
942 RETV_IF(net_nfc_client_manager_is_activated() == false, NET_NFC_INVALID_STATE);
944 socket_data = llcp_socket_data_find(socket);
945 if (socket_data == NULL)
947 NFC_ERR("can not get socket_data");
948 return NET_NFC_LLCP_INVALID_SOCKET;
951 func_data = g_new0(LlcpFuncData, 1);
952 if (func_data == NULL)
954 NFC_ERR("g_new0 failed");
955 return NET_NFC_ALLOC_FAIL;
958 func_data->callback = (gpointer)callback;
959 func_data->user_data = user_data;
961 variant = net_nfc_util_gdbus_data_to_variant(data);
963 net_nfc_gdbus_llcp_call_send(llcp_proxy,
964 GPOINTER_TO_UINT(llcp_handle),
965 socket_data->client_socket,
967 net_nfc_client_gdbus_get_privilege(),
975 API net_nfc_error_e net_nfc_client_llcp_send_sync(net_nfc_llcp_socket_t socket,
980 GError *error = NULL;
981 net_nfc_error_e result;
982 guint32 out_client_socket;
983 net_nfc_llcp_internal_socket_s *socket_data;
984 net_nfc_llcp_internal_socket_s *out_socket_data;
986 RETV_IF(NULL == llcp_proxy, NET_NFC_NOT_INITIALIZED);
987 RETV_IF(NULL == data, NET_NFC_NULL_PARAMETER);
988 RETV_IF(socket <= 0, NET_NFC_INVALID_PARAM);
990 /* prevent executing daemon when nfc is off */
991 RETV_IF(net_nfc_client_manager_is_activated() == false, NET_NFC_INVALID_STATE);
993 socket_data = llcp_socket_data_find(socket);
994 if (socket_data == NULL)
996 NFC_ERR("can not get socket_data");
997 return NET_NFC_LLCP_INVALID_SOCKET;
1000 variant = net_nfc_util_gdbus_data_to_variant(data);
1002 ret = net_nfc_gdbus_llcp_call_send_sync(llcp_proxy,
1003 GPOINTER_TO_UINT(llcp_handle),
1004 socket_data->client_socket,
1006 net_nfc_client_gdbus_get_privilege(),
1013 out_socket_data = llcp_socket_data_find(out_client_socket);
1014 if (out_socket_data == NULL)
1016 NFC_ERR("out_socket_data is NULL");
1017 return NET_NFC_UNKNOWN_ERROR;
1022 NFC_ERR("can not call send: %s", error->message);
1023 g_error_free(error);
1024 result = NET_NFC_IPC_FAIL;
1030 API net_nfc_error_e net_nfc_client_llcp_send_to(net_nfc_llcp_socket_t socket,
1033 net_nfc_client_llcp_send_to_completed callback,
1037 LlcpFuncData *func_data;
1038 net_nfc_llcp_internal_socket_s *socket_data = NULL;
1040 RETV_IF(NULL == llcp_proxy, NET_NFC_NOT_INITIALIZED);
1041 RETV_IF(NULL == data, NET_NFC_NULL_PARAMETER);
1042 RETV_IF(0 == sap, NET_NFC_INVALID_PARAM);
1043 RETV_IF(socket <= 0, NET_NFC_INVALID_PARAM);
1045 /* prevent executing daemon when nfc is off */
1046 RETV_IF(net_nfc_client_manager_is_activated() == false, NET_NFC_INVALID_STATE);
1048 socket_data = llcp_socket_data_find(socket);
1049 if (socket_data == NULL)
1051 NFC_ERR("can not get socket_data");
1052 return NET_NFC_LLCP_INVALID_SOCKET;
1055 func_data = g_new0(LlcpFuncData, 1);
1056 if (func_data == NULL)
1058 NFC_ERR("g_new0 failed");
1059 return NET_NFC_ALLOC_FAIL;
1062 func_data->callback = (gpointer)callback;
1063 func_data->user_data = user_data;
1065 variant = net_nfc_util_gdbus_data_to_variant(data);
1067 net_nfc_gdbus_llcp_call_send_to(llcp_proxy,
1068 GPOINTER_TO_UINT(llcp_handle),
1069 socket_data->client_socket,
1072 net_nfc_client_gdbus_get_privilege(),
1080 API net_nfc_error_e net_nfc_client_llcp_send_to_sync(net_nfc_llcp_socket_t socket,
1081 sap_t sap, data_s *data)
1085 GError *error = NULL;
1086 net_nfc_error_e result;
1087 guint32 out_client_socket;
1088 net_nfc_llcp_internal_socket_s *socket_data;
1089 net_nfc_llcp_internal_socket_s *out_socket_data;
1091 RETV_IF(NULL == llcp_proxy, NET_NFC_NOT_INITIALIZED);
1092 RETV_IF(NULL == data, NET_NFC_NULL_PARAMETER);
1093 RETV_IF(0 == sap, NET_NFC_INVALID_PARAM);
1094 RETV_IF(socket <= 0, NET_NFC_INVALID_PARAM);
1096 /* prevent executing daemon when nfc is off */
1097 RETV_IF(net_nfc_client_manager_is_activated() == false, NET_NFC_INVALID_STATE);
1099 socket_data = llcp_socket_data_find(socket);
1100 if (socket_data == NULL)
1102 NFC_ERR("can not get socket_data");
1103 return NET_NFC_LLCP_INVALID_SOCKET;
1106 variant = net_nfc_util_gdbus_data_to_variant(data);
1108 ret = net_nfc_gdbus_llcp_call_send_to_sync(llcp_proxy,
1109 GPOINTER_TO_UINT(llcp_handle),
1110 socket_data->client_socket,
1113 net_nfc_client_gdbus_get_privilege(),
1120 out_socket_data = llcp_socket_data_find(out_client_socket);
1121 if (out_socket_data == NULL)
1123 NFC_ERR("out_socket_data is NULL");
1124 return NET_NFC_UNKNOWN_ERROR;
1129 NFC_ERR("can not call send to: %s", error->message);
1130 g_error_free(error);
1131 result = NET_NFC_IPC_FAIL;
1137 API net_nfc_error_e net_nfc_client_llcp_receive(net_nfc_llcp_socket_t socket,
1138 size_t request_length,
1139 net_nfc_client_llcp_receive_completed callback,
1142 LlcpFuncData *func_data;
1143 net_nfc_llcp_internal_socket_s *socket_data = NULL;
1145 RETV_IF(NULL == llcp_proxy, NET_NFC_NOT_INITIALIZED);
1146 RETV_IF(0 == request_length, NET_NFC_INVALID_PARAM);
1147 RETV_IF(socket <= 0, NET_NFC_INVALID_PARAM);
1149 /* prevent executing daemon when nfc is off */
1150 RETV_IF(net_nfc_client_manager_is_activated() == false, NET_NFC_INVALID_STATE);
1152 socket_data = llcp_socket_data_find(socket);
1153 if (socket_data == NULL)
1155 NFC_ERR("can not get socket_data");
1156 return NET_NFC_LLCP_INVALID_SOCKET;
1159 func_data = g_new0(LlcpFuncData, 1);
1160 if (func_data == NULL)
1162 NFC_ERR("g_new0 failed");
1163 return NET_NFC_ALLOC_FAIL;
1166 func_data->callback = (gpointer)callback;
1167 func_data->user_data = user_data;
1169 net_nfc_gdbus_llcp_call_receive(llcp_proxy,
1170 GPOINTER_TO_UINT(llcp_handle),
1171 socket_data->client_socket,
1173 net_nfc_client_gdbus_get_privilege(),
1181 API net_nfc_error_e net_nfc_client_llcp_receive_sync(net_nfc_llcp_socket_t socket,
1182 size_t request_length, data_s **out_data)
1186 GError *error = NULL;
1187 net_nfc_error_e result;
1188 net_nfc_llcp_internal_socket_s *socket_data;
1190 RETV_IF(NULL == llcp_proxy, NET_NFC_NOT_INITIALIZED);
1191 RETV_IF(NULL == out_data, NET_NFC_NULL_PARAMETER);
1192 RETV_IF(0 == request_length, NET_NFC_INVALID_PARAM);
1193 RETV_IF(socket <= 0, NET_NFC_INVALID_PARAM);
1195 /* prevent executing daemon when nfc is off */
1196 RETV_IF(net_nfc_client_manager_is_activated() == false, NET_NFC_INVALID_STATE);
1200 socket_data = llcp_socket_data_find(socket);
1201 if (socket_data == NULL)
1203 NFC_ERR("can not get socket_data");
1204 return NET_NFC_LLCP_INVALID_SOCKET;
1207 ret = net_nfc_gdbus_llcp_call_receive_sync(llcp_proxy,
1208 GPOINTER_TO_UINT(llcp_handle),
1209 socket_data->client_socket,
1211 net_nfc_client_gdbus_get_privilege(),
1218 *out_data = net_nfc_util_gdbus_variant_to_data(variant);
1222 NFC_ERR("can not call receive: %s", error->message);
1223 g_error_free(error);
1224 result = NET_NFC_IPC_FAIL;
1230 API net_nfc_error_e net_nfc_client_llcp_receive_from(net_nfc_llcp_socket_t socket,
1231 size_t request_length,
1232 net_nfc_client_llcp_receive_from_completed callback,
1235 LlcpFuncData *func_data;
1236 net_nfc_llcp_internal_socket_s *socket_data = NULL;
1238 RETV_IF(NULL == llcp_proxy, NET_NFC_NOT_INITIALIZED);
1239 RETV_IF(0 == request_length, NET_NFC_INVALID_PARAM);
1240 RETV_IF(socket <= 0, NET_NFC_INVALID_PARAM);
1242 socket_data = llcp_socket_data_find(socket);
1243 if (socket_data == NULL)
1245 NFC_ERR("can not get socket_data");
1246 return NET_NFC_LLCP_INVALID_SOCKET;
1249 func_data = g_new0(LlcpFuncData, 1);
1250 if (func_data == NULL)
1252 NFC_ERR("g_new0 failed");
1253 return NET_NFC_ALLOC_FAIL;
1256 func_data->callback = (gpointer)callback;
1257 func_data->user_data = user_data;
1259 net_nfc_gdbus_llcp_call_receive_from(llcp_proxy,
1260 GPOINTER_TO_UINT(llcp_handle),
1261 socket_data->client_socket,
1263 net_nfc_client_gdbus_get_privilege(),
1265 llcp_call_receive_from,
1271 API net_nfc_error_e net_nfc_client_llcp_receive_from_sync(
1272 net_nfc_llcp_socket_t socket,
1273 size_t request_length,
1280 GError *error = NULL;
1281 net_nfc_error_e result;
1282 net_nfc_llcp_internal_socket_s *socket_data;
1284 RETV_IF(NULL == llcp_proxy, NET_NFC_NOT_INITIALIZED);
1285 RETV_IF(NULL == out_sap, NET_NFC_NULL_PARAMETER);
1286 RETV_IF(NULL == out_data, NET_NFC_NULL_PARAMETER);
1287 RETV_IF(0 == request_length, NET_NFC_INVALID_PARAM);
1288 RETV_IF(socket <= 0, NET_NFC_INVALID_PARAM);
1290 /* prevent executing daemon when nfc is off */
1291 RETV_IF(net_nfc_client_manager_is_activated() == false, NET_NFC_INVALID_STATE);
1296 socket_data = llcp_socket_data_find(socket);
1297 if (socket_data == NULL)
1299 NFC_ERR("can not get socket_data");
1300 return NET_NFC_LLCP_INVALID_SOCKET;
1303 ret = net_nfc_gdbus_llcp_call_receive_from_sync(llcp_proxy,
1304 GPOINTER_TO_UINT(llcp_handle),
1305 socket_data->client_socket,
1307 net_nfc_client_gdbus_get_privilege(),
1316 *out_data = net_nfc_util_gdbus_variant_to_data(variant);
1320 NFC_ERR("can not call receive from: %s", error->message);
1321 g_error_free(error);
1322 result = NET_NFC_IPC_FAIL;
1328 API net_nfc_error_e net_nfc_client_llcp_close(net_nfc_llcp_socket_t socket,
1329 net_nfc_client_llcp_close_completed callback, void *user_data)
1331 LlcpFuncData *func_data;
1332 net_nfc_llcp_internal_socket_s *socket_data = NULL;
1334 RETV_IF(NULL == llcp_proxy, NET_NFC_NOT_INITIALIZED);
1335 RETV_IF(socket <= 0, NET_NFC_INVALID_PARAM);
1337 /* prevent executing daemon when nfc is off */
1338 RETV_IF(net_nfc_client_manager_is_activated() == false, NET_NFC_INVALID_STATE);
1340 socket_data = llcp_socket_data_find(socket);
1341 if (socket_data == NULL)
1343 NFC_ERR("can not get socket_data");
1344 return NET_NFC_LLCP_INVALID_SOCKET;
1347 func_data = g_new0(LlcpFuncData, 1);
1348 if (func_data == NULL)
1350 NFC_ERR("g_new0 failed");
1351 return NET_NFC_ALLOC_FAIL;
1354 func_data->callback = (gpointer)callback;
1355 func_data->user_data = user_data;
1357 net_nfc_gdbus_llcp_call_close(llcp_proxy,
1358 GPOINTER_TO_UINT(llcp_handle),
1359 socket_data->client_socket,
1360 net_nfc_client_gdbus_get_privilege(),
1368 API net_nfc_error_e net_nfc_client_llcp_close_sync(net_nfc_llcp_socket_t socket)
1371 GError *error = NULL;
1372 net_nfc_error_e result;
1373 guint32 out_client_socket;
1374 net_nfc_llcp_internal_socket_s *socket_data = NULL;
1375 net_nfc_llcp_internal_socket_s *out_socket_data = NULL;
1377 RETV_IF(NULL == llcp_proxy, NET_NFC_NOT_INITIALIZED);
1378 RETV_IF(socket <= 0, NET_NFC_INVALID_PARAM);
1380 /* prevent executing daemon when nfc is off */
1381 RETV_IF(net_nfc_client_manager_is_activated() == false, NET_NFC_INVALID_STATE);
1383 socket_data = llcp_socket_data_find(socket);
1384 if (socket_data == NULL)
1386 NFC_ERR("can not get socket_data");
1387 return NET_NFC_LLCP_INVALID_SOCKET;
1390 ret = net_nfc_gdbus_llcp_call_close_sync(llcp_proxy,
1391 GPOINTER_TO_UINT(llcp_handle),
1392 socket_data->client_socket,
1393 net_nfc_client_gdbus_get_privilege(),
1400 out_socket_data = llcp_socket_data_find(out_client_socket);
1401 if (out_socket_data == NULL || out_socket_data != socket_data)
1403 NFC_ERR("out_socket_data(%p), socket_data(%p)", out_socket_data, socket_data);
1404 return NET_NFC_UNKNOWN_ERROR;
1409 NFC_ERR("can not close: %s", error->message);
1410 g_error_free(error);
1411 result = NET_NFC_IPC_FAIL;
1417 API net_nfc_error_e net_nfc_client_llcp_disconnect(net_nfc_llcp_socket_t socket,
1418 net_nfc_client_llcp_disconnect_completed callback, void *user_data)
1420 LlcpFuncData *func_data;
1421 net_nfc_llcp_internal_socket_s *socket_data = NULL;
1423 RETV_IF(NULL == llcp_proxy, NET_NFC_NOT_INITIALIZED);
1424 RETV_IF(socket <= 0, NET_NFC_INVALID_PARAM);
1426 /* prevent executing daemon when nfc is off */
1427 RETV_IF(net_nfc_client_manager_is_activated() == false, NET_NFC_INVALID_STATE);
1429 socket_data = llcp_socket_data_find(socket);
1430 if (socket_data == NULL)
1432 NFC_ERR("can not get socket_data");
1433 return NET_NFC_LLCP_INVALID_SOCKET;
1436 func_data = g_new0(LlcpFuncData, 1);
1437 if (func_data == NULL)
1439 NFC_ERR("g_new0 failed");
1440 return NET_NFC_ALLOC_FAIL;
1443 func_data->callback = (gpointer)callback;
1444 func_data->user_data = user_data;
1446 net_nfc_gdbus_llcp_call_disconnect(llcp_proxy,
1447 GPOINTER_TO_UINT(llcp_handle),
1448 socket_data->client_socket,
1449 net_nfc_client_gdbus_get_privilege(),
1451 llcp_call_disconnect,
1457 API net_nfc_error_e net_nfc_client_llcp_disconnect_sync(
1458 net_nfc_llcp_socket_t socket)
1461 GError *error = NULL;
1462 net_nfc_error_e result;
1463 guint32 out_client_socket;
1464 net_nfc_llcp_internal_socket_s *socket_data = NULL;
1465 net_nfc_llcp_internal_socket_s *out_socket_data = NULL;
1467 RETV_IF(NULL == llcp_proxy, NET_NFC_NOT_INITIALIZED);
1468 RETV_IF(socket <= 0, NET_NFC_INVALID_PARAM);
1470 /* prevent executing daemon when nfc is off */
1471 RETV_IF(net_nfc_client_manager_is_activated() == false, NET_NFC_INVALID_STATE);
1473 socket_data = llcp_socket_data_find(socket);
1474 if (socket_data == NULL)
1476 NFC_ERR("can not get socket_data");
1477 return NET_NFC_LLCP_INVALID_SOCKET;
1480 ret = net_nfc_gdbus_llcp_call_disconnect_sync(llcp_proxy,
1481 GPOINTER_TO_UINT(llcp_handle),
1482 socket_data->client_socket,
1483 net_nfc_client_gdbus_get_privilege(),
1490 out_socket_data = llcp_socket_data_find(out_client_socket);
1491 if (out_socket_data == NULL || out_socket_data != socket_data)
1493 NFC_ERR("out_socket_data(%p), socket_data(%p)", out_socket_data, socket_data);
1494 return NET_NFC_UNKNOWN_ERROR;
1499 NFC_ERR("can not disconnect: %s", error->message);
1500 g_error_free(error);
1501 result = NET_NFC_IPC_FAIL;
1507 API void net_nfc_client_llcp_create_socket(net_nfc_llcp_socket_t *socket,
1508 net_nfc_llcp_socket_option_s *option)
1510 net_nfc_llcp_internal_socket_s *socket_data = NULL;
1512 socket_data = g_new0(net_nfc_llcp_internal_socket_s, 1);
1514 socket_data->client_socket = socket_handle++;
1518 socket_data->miu = option->miu;
1519 socket_data->rw = option->rw;
1520 socket_data->type = option->type;
1524 socket_data->miu = 128;
1525 socket_data->rw = 1;
1526 socket_data->type = NET_NFC_LLCP_SOCKET_TYPE_CONNECTIONORIENTED;
1529 socket_data->device_id = llcp_handle;
1530 socket_data->close_requested = false;
1534 *socket = socket_data->client_socket;
1538 API net_nfc_error_e net_nfc_client_llcp_get_local_config(
1539 net_nfc_llcp_config_info_s **config)
1541 RETV_IF(NULL == config, NET_NFC_NULL_PARAMETER);
1543 *config = &llcp_config;
1548 API net_nfc_error_e net_nfc_client_llcp_get_local_socket_option(
1549 net_nfc_llcp_socket_t socket, net_nfc_llcp_socket_option_s **info)
1551 net_nfc_llcp_internal_socket_s *socket_data = NULL;
1553 socket_data = llcp_socket_data_find(socket);
1554 if (socket_data == NULL)
1555 return NET_NFC_LLCP_INVALID_SOCKET;
1557 *info = (net_nfc_llcp_socket_option_s*)socket_data;
1562 API net_nfc_error_e net_nfc_client_llcp_create_socket_option(
1563 net_nfc_llcp_socket_option_s **option,
1566 net_nfc_socket_type_e type)
1568 net_nfc_llcp_socket_option_s *tmp_option = NULL;
1570 RETV_IF(NULL == option, NET_NFC_NULL_PARAMETER);
1571 RETVM_IF(miu < 128 || miu > 1152, NET_NFC_OUT_OF_BOUND, "miu = %d", miu);
1572 RETVM_IF(rw < 1 || rw > 15, NET_NFC_OUT_OF_BOUND, "rw = %d", rw);
1573 RETVM_IF((type < NET_NFC_LLCP_SOCKET_TYPE_CONNECTIONORIENTED
1574 || type > NET_NFC_LLCP_SOCKET_TYPE_CONNECTIONLESS),
1575 NET_NFC_OUT_OF_BOUND,
1578 _net_nfc_util_alloc_mem(tmp_option, sizeof(net_nfc_llcp_socket_option_s));
1579 if (tmp_option != NULL)
1581 tmp_option->miu = miu;
1582 tmp_option->rw = rw;
1583 tmp_option->type = type;
1585 *option = tmp_option;
1591 return NET_NFC_ALLOC_FAIL;
1595 API net_nfc_error_e net_nfc_client_llcp_create_socket_option_default(
1596 net_nfc_llcp_socket_option_s **option)
1598 return net_nfc_client_llcp_create_socket_option(option, 128, 1,
1599 NET_NFC_LLCP_SOCKET_TYPE_CONNECTIONORIENTED);
1602 API net_nfc_error_e net_nfc_client_llcp_get_socket_option_miu(
1603 net_nfc_llcp_socket_option_s *option, uint16_t *miu)
1605 RETV_IF(NULL == option, NET_NFC_NULL_PARAMETER);
1606 RETV_IF(NULL == miu, NET_NFC_NULL_PARAMETER);
1612 API net_nfc_error_e net_nfc_client_llcp_set_socket_option_miu(
1613 net_nfc_llcp_socket_option_s *option, uint16_t miu)
1615 RETV_IF(NULL == option, NET_NFC_NULL_PARAMETER);
1621 API net_nfc_error_e net_nfc_client_llcp_get_socket_option_rw(
1622 net_nfc_llcp_socket_option_s *option, uint8_t *rw)
1624 RETV_IF(NULL == option, NET_NFC_NULL_PARAMETER);
1625 RETV_IF(NULL == rw, NET_NFC_NULL_PARAMETER);
1631 API net_nfc_error_e net_nfc_client_llcp_set_socket_option_rw(
1632 net_nfc_llcp_socket_option_s *option, uint8_t rw)
1634 RETV_IF(NULL == option, NET_NFC_NULL_PARAMETER);
1640 API net_nfc_error_e net_nfc_client_llcp_get_socket_option_type(
1641 net_nfc_llcp_socket_option_s *option, net_nfc_socket_type_e *type)
1643 RETV_IF(NULL == type, NET_NFC_NULL_PARAMETER);
1645 *type = option->type;
1649 API net_nfc_error_e net_nfc_client_llcp_set_socket_option_type(
1650 net_nfc_llcp_socket_option_s *option, net_nfc_socket_type_e type)
1652 RETV_IF(NULL == option, NET_NFC_NULL_PARAMETER);
1654 option->type = type;
1658 API net_nfc_error_e net_nfc_client_llcp_free_socket_option(
1659 net_nfc_llcp_socket_option_s *option)
1661 RETV_IF(NULL == option, NET_NFC_NULL_PARAMETER);
1663 _net_nfc_util_free_mem(option);
1667 API net_nfc_error_e net_nfc_client_llcp_create_config(
1668 net_nfc_llcp_config_info_s **config,
1674 net_nfc_llcp_config_info_s *tmp_config;
1676 RETV_IF(NULL == config, NET_NFC_NULL_PARAMETER);
1678 _net_nfc_util_alloc_mem(tmp_config, sizeof(net_nfc_llcp_config_info_s));
1679 if (tmp_config == NULL)
1680 return NET_NFC_ALLOC_FAIL;
1682 tmp_config->miu = miu;
1683 tmp_config->wks = wks;
1684 tmp_config->lto = lto;
1685 tmp_config->option = option;
1687 *config = tmp_config;
1692 API net_nfc_error_e net_nfc_client_llcp_create_config_default(
1693 net_nfc_llcp_config_info_s **config)
1695 return net_nfc_client_llcp_create_config(config, 128, 1, 10, 0);
1698 API net_nfc_error_e net_nfc_client_llcp_get_config_miu(
1699 net_nfc_llcp_config_info_s *config, uint16_t *miu)
1701 RETV_IF(NULL == config, NET_NFC_NULL_PARAMETER);
1702 RETV_IF(NULL == miu, NET_NFC_NULL_PARAMETER);
1708 API net_nfc_error_e net_nfc_client_llcp_get_config_wks(
1709 net_nfc_llcp_config_info_s *config, uint16_t *wks)
1711 RETV_IF(NULL == config, NET_NFC_NULL_PARAMETER);
1712 RETV_IF(NULL == wks, NET_NFC_NULL_PARAMETER);
1718 API net_nfc_error_e net_nfc_client_llcp_get_config_lto(
1719 net_nfc_llcp_config_info_s *config, uint8_t *lto)
1721 RETV_IF(NULL == config, NET_NFC_NULL_PARAMETER);
1722 RETV_IF(NULL == lto, NET_NFC_NULL_PARAMETER);
1728 API net_nfc_error_e net_nfc_client_llcp_get_config_option(
1729 net_nfc_llcp_config_info_s *config, uint8_t *option)
1731 RETV_IF(NULL == config, NET_NFC_NULL_PARAMETER);
1732 RETV_IF(NULL == option, NET_NFC_NULL_PARAMETER);
1734 *option = config->option;
1738 API net_nfc_error_e net_nfc_client_llcp_set_config_miu(
1739 net_nfc_llcp_config_info_s *config, uint16_t miu)
1741 RETV_IF(NULL == config, NET_NFC_NULL_PARAMETER);
1742 RETVM_IF(miu < 128 || miu > 1152, NET_NFC_OUT_OF_BOUND, "miu = %d", miu);
1748 API net_nfc_error_e net_nfc_client_llcp_set_config_wks(
1749 net_nfc_llcp_config_info_s *config, uint16_t wks)
1751 RETV_IF(NULL == config, NET_NFC_NULL_PARAMETER);
1757 API net_nfc_error_e net_nfc_client_llcp_set_config_lto(
1758 net_nfc_llcp_config_info_s *config, uint8_t lto)
1760 RETV_IF(NULL == config, NET_NFC_NULL_PARAMETER);
1766 API net_nfc_error_e net_nfc_client_llcp_set_config_option(
1767 net_nfc_llcp_config_info_s *config, uint8_t option)
1769 RETV_IF(NULL == config, NET_NFC_NULL_PARAMETER);
1771 config->option = option;
1775 API net_nfc_error_e net_nfc_client_llcp_free_config(
1776 net_nfc_llcp_config_info_s *config)
1778 RETV_IF(NULL == config, NET_NFC_NULL_PARAMETER);
1780 _net_nfc_util_free_mem(config);
1784 net_nfc_error_e net_nfc_client_llcp_init(void)
1786 GError *error = NULL;
1790 NFC_WARN("Already initialized");
1794 llcp_proxy = net_nfc_gdbus_llcp_proxy_new_for_bus_sync(
1796 G_DBUS_PROXY_FLAGS_NONE,
1797 "org.tizen.NetNfcService",
1798 "/org/tizen/NetNfcService/Llcp",
1802 if (llcp_proxy == NULL)
1804 NFC_ERR("Can not create proxy : %s", error->message);
1805 g_error_free(error);
1806 return NET_NFC_UNKNOWN_ERROR;
1809 g_signal_connect(llcp_proxy, "error",
1810 G_CALLBACK(llcp_error), NULL);
1812 g_signal_connect(llcp_proxy, "incoming",
1813 G_CALLBACK(llcp_incoming), NULL);
1818 void net_nfc_client_llcp_deinit(void)
1822 g_object_unref(llcp_proxy);