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.
20 #include "net_nfc_typedef_internal.h"
21 #include "net_nfc_debug_internal.h"
22 #include "net_nfc_util_internal.h"
23 #include "net_nfc_util_ndef_message.h"
24 #include "net_nfc_util_gdbus_internal.h"
25 #include "net_nfc_gdbus.h"
26 #include "net_nfc_client.h"
27 #include "net_nfc_client_manager.h"
28 #include "net_nfc_client_se.h"
30 typedef struct _SeFuncData SeFuncData;
38 typedef struct _SeEventHandler SeEventHandler;
40 struct _SeEventHandler
42 net_nfc_client_se_event se_event_cb;
43 gpointer se_event_data;
46 typedef struct _SeTransEventHandler SeTransEventHandler;
48 struct _SeTransEventHandler
50 net_nfc_se_type_e se_type;
51 net_nfc_client_se_transaction_event eSE_transaction_event_cb;
52 net_nfc_client_se_transaction_event UICC_transaction_event_cb;
53 gpointer eSE_transaction_event_data;
54 gpointer UICC_transaction_event_data;
57 typedef struct _SeESEDetectedHandler SeESEDetectedHandler;
59 struct _SeESEDetectedHandler
61 net_nfc_client_se_ese_detected_event se_ese_detected_cb;
62 gpointer se_ese_detected_data;
66 static NetNfcGDbusSecureElement *se_proxy = NULL;
68 static SeEventHandler se_eventhandler;
69 static SeTransEventHandler se_transeventhandler;
70 static SeESEDetectedHandler se_esedetecthandler;
72 static void se_ese_detected(GObject *source_object, guint arg_handle,
73 gint arg_se_type, GVariant *arg_data)
75 data_s buffer_data = { NULL, 0 };
76 net_nfc_client_se_ese_detected_event callback;
78 NFC_INFO(">>> SIGNAL arrived");
80 RET_IF(NULL == se_esedetecthandler.se_ese_detected_cb);
82 net_nfc_util_gdbus_variant_to_data_s(arg_data, &buffer_data);
84 callback = se_esedetecthandler.se_ese_detected_cb;
85 callback((net_nfc_target_handle_s*)arg_handle, arg_se_type, &buffer_data,
86 se_esedetecthandler.se_ese_detected_data);
88 net_nfc_util_free_data(&buffer_data);
92 static void se_type_changed(GObject *source_object, gint arg_se_type)
94 net_nfc_client_se_event callback;
96 NFC_INFO(">>> SIGNAL arrived");
98 RET_IF(NULL == se_eventhandler.se_event_cb);
100 callback = se_eventhandler.se_event_cb;
101 callback((net_nfc_message_e)NET_NFC_MESSAGE_SE_TYPE_CHANGED,
102 se_eventhandler.se_event_data);
106 static void se_transaction_event(GObject *source_object,
113 data_s aid = { NULL, 0 };
114 data_s param = { NULL, 0 };
116 NFC_INFO(">>> SIGNAL arrived");
118 RET_IF(NULL == se_transeventhandler.eSE_transaction_event_cb);
119 RET_IF(NULL == se_transeventhandler.UICC_transaction_event_cb);
121 if (se_transeventhandler.se_type == arg_se_type)
123 pid_t mypid = getpid();
124 if(fg_dispatch == false ||
125 (fg_dispatch == true && focus_app_pid == (getpgid(mypid))))
127 net_nfc_util_gdbus_variant_to_data_s(arg_aid, &aid);
128 net_nfc_util_gdbus_variant_to_data_s(arg_param, ¶m);
130 net_nfc_util_free_data(¶m);
131 net_nfc_util_free_data(&aid);
136 static void se_card_emulation_mode_changed(GObject *source_object,
139 net_nfc_client_se_event callback;
140 NFC_DBG(">>> SIGNAL arrived");
142 RET_IF(NULL == se_eventhandler.se_event_cb);
144 callback = se_eventhandler.se_event_cb;
145 callback((net_nfc_message_e)NET_NFC_MESSAGE_SE_CARD_EMULATION_CHANGED,
146 se_eventhandler.se_event_data);
149 static void set_secure_element(GObject *source_object,
150 GAsyncResult *res, gpointer user_data)
153 GError *error = NULL;
154 net_nfc_error_e result;
155 net_nfc_se_set_se_cb se_callback;
156 SeFuncData *func_data = user_data;
158 g_assert(user_data != NULL);
160 ret = net_nfc_gdbus_secure_element_call_set_finish(se_proxy, &result, res, &error);
164 NFC_ERR("Could not set secure element: %s", error->message);
167 result = NET_NFC_IPC_FAIL;
170 if (func_data->se_callback != NULL)
172 se_callback = (net_nfc_se_set_se_cb)func_data->se_callback;
174 se_callback(result, func_data->se_data);
180 static void get_secure_element(GObject *source_object,
181 GAsyncResult *res, gpointer user_data)
185 GError *error = NULL;
186 net_nfc_error_e result;
187 net_nfc_se_get_se_cb se_callback;
188 NetNfcCallback *func_data = user_data;
190 g_assert(user_data != NULL);
192 ret = net_nfc_gdbus_secure_element_call_get_finish(se_proxy,
193 &result, &type, res, &error);
197 NFC_ERR("Could not set secure element: %s", error->message);
200 result = NET_NFC_IPC_FAIL;
203 if (func_data->callback != NULL)
205 se_callback = (net_nfc_se_get_se_cb)func_data->callback;
207 se_callback(result, type, func_data->user_data);
213 static void _set_card_emulation_cb(GObject *source_object,
214 GAsyncResult *res, gpointer user_data)
217 GError *error = NULL;
218 net_nfc_error_e result;
219 net_nfc_se_set_se_cb se_callback;
220 NetNfcCallback *func_data = user_data;
222 g_assert(user_data != NULL);
225 ret = net_nfc_gdbus_secure_element_call_set_card_emulation_finish(
226 se_proxy, &result, res, &error);
230 NFC_ERR("Could not set card emulation: %s", error->message);
233 result = NET_NFC_IPC_FAIL;
236 if (func_data->callback != NULL)
238 se_callback = (net_nfc_se_set_se_cb)func_data->callback;
240 se_callback(result, func_data->user_data);
247 static void open_secure_element(GObject *source_object,
248 GAsyncResult *res, gpointer user_data)
251 GError *error = NULL;
252 guint out_handle = 0;
253 net_nfc_error_e result;
254 SeFuncData *func_data = user_data;
255 net_nfc_se_open_se_cb se_callback;
257 g_assert(user_data != NULL);
259 ret = net_nfc_gdbus_secure_element_call_open_secure_element_finish(
260 se_proxy, &result, &out_handle, res, &error);
264 NFC_ERR("Could not open secure element: %s", error->message);
267 result = NET_NFC_IPC_FAIL;
270 if (func_data->se_callback != NULL)
272 se_callback = (net_nfc_se_open_se_cb)func_data->se_callback;
274 se_callback(result, (net_nfc_target_handle_s*)out_handle, func_data->se_data);
281 static void close_secure_element(GObject *source_object,
282 GAsyncResult *res, gpointer user_data)
285 GError *error = NULL;
286 net_nfc_error_e result;
287 SeFuncData *func_data = user_data;
288 net_nfc_se_close_se_cb se_callback;
290 g_assert(user_data != NULL);
292 ret = net_nfc_gdbus_secure_element_call_close_secure_element_finish(
293 se_proxy, &result, res, &error);
297 NFC_ERR("Could not close secure element: %s", error->message);
299 result = NET_NFC_IPC_FAIL;
302 if (func_data->se_callback != NULL)
304 se_callback = (net_nfc_se_close_se_cb)func_data->se_callback;
306 se_callback(result, func_data->se_data);
313 static void send_apdu_secure_element(GObject *source_object,
314 GAsyncResult *res, gpointer user_data)
317 GError *error = NULL;
318 net_nfc_error_e result;
319 GVariant *out_response = NULL;
320 SeFuncData *func_data = user_data;
321 net_nfc_se_send_apdu_cb se_callback;
323 g_assert(user_data != NULL);
325 ret = net_nfc_gdbus_secure_element_call_send_apdu_finish(
326 se_proxy, &result, &out_response, res, &error);
330 NFC_ERR("Could not send apdu: %s", error->message);
332 result = NET_NFC_IPC_FAIL;
335 if (func_data->se_callback != NULL)
337 se_callback = (net_nfc_se_send_apdu_cb)func_data->se_callback;
338 data_s data = { NULL, };
340 net_nfc_util_gdbus_variant_to_data_s(out_response, &data);
342 se_callback(result, &data, func_data->se_data);
344 net_nfc_util_free_data(&data);
351 static void get_atr_secure_element(GObject *source_object,
352 GAsyncResult *res, gpointer user_data)
355 GError *error = NULL;
356 net_nfc_error_e result;
357 GVariant *out_atr = NULL;
358 SeFuncData *func_data = user_data;
359 net_nfc_se_get_atr_cb se_callback;
361 g_assert(user_data != NULL);
363 RET_IF(NULL == func_data->se_callback);
365 ret = net_nfc_gdbus_secure_element_call_get_atr_finish(
366 se_proxy, &result, &out_atr, res, &error);
370 NFC_ERR("Could not get atr: %s", error->message);
372 result = NET_NFC_IPC_FAIL;
375 if (func_data->se_callback != NULL)
377 se_callback = (net_nfc_se_get_atr_cb)func_data->se_callback;
378 data_s data = { NULL, };
380 net_nfc_util_gdbus_variant_to_data_s(out_atr, &data);
382 se_callback(result, &data, func_data->se_data);
384 net_nfc_util_free_data(&data);
391 API net_nfc_error_e net_nfc_client_se_set_secure_element_type(
392 net_nfc_se_type_e se_type, net_nfc_se_set_se_cb callback, void *user_data)
394 SeFuncData *func_data;
396 RETV_IF(NULL == se_proxy, NET_NFC_NOT_INITIALIZED);
398 /* prevent executing daemon when nfc is off */
399 RETV_IF(net_nfc_client_manager_is_activated() == false, NET_NFC_INVALID_STATE);
401 func_data = g_try_new0(SeFuncData, 1);
402 if (NULL == func_data)
403 return NET_NFC_ALLOC_FAIL;
405 func_data->se_callback = (gpointer)callback;
406 func_data->se_data = user_data;
408 net_nfc_gdbus_secure_element_call_set(se_proxy, (gint)se_type,
409 net_nfc_client_gdbus_get_privilege(), NULL, set_secure_element, func_data);
415 API net_nfc_error_e net_nfc_client_se_set_secure_element_type_sync(
416 net_nfc_se_type_e se_type)
419 GError *error = NULL;
420 net_nfc_error_e result = NET_NFC_OK;
422 RETV_IF(NULL == se_proxy, NET_NFC_NOT_INITIALIZED);
424 /* prevent executing daemon when nfc is off */
425 RETV_IF(net_nfc_client_manager_is_activated() == false, NET_NFC_INVALID_STATE);
427 ret = net_nfc_gdbus_secure_element_call_set_sync(se_proxy, (gint)se_type,
428 net_nfc_client_gdbus_get_privilege(), &result, NULL, &error);
432 NFC_ERR("Set secure element failed: %s", error->message);
434 result = NET_NFC_IPC_FAIL;
440 API net_nfc_error_e net_nfc_client_se_get_secure_element_type(
441 net_nfc_se_get_se_cb callback, void *user_data)
443 NetNfcCallback *func_data;
445 RETV_IF(NULL == se_proxy, NET_NFC_NOT_INITIALIZED);
447 /* prevent executing daemon when nfc is off */
448 RETV_IF(net_nfc_client_manager_is_activated() == false, NET_NFC_INVALID_STATE);
450 func_data = g_try_new0(NetNfcCallback, 1);
451 if (NULL == func_data)
452 return NET_NFC_ALLOC_FAIL;
454 func_data->callback = (gpointer)callback;
455 func_data->user_data = user_data;
457 net_nfc_gdbus_secure_element_call_get(se_proxy, net_nfc_client_gdbus_get_privilege(),
458 NULL, get_secure_element, func_data);
463 API net_nfc_error_e net_nfc_client_se_get_secure_element_type_sync(
464 net_nfc_se_type_e *se_type)
467 net_nfc_error_e result = NET_NFC_OK;
471 GError *error = NULL;
473 RETV_IF(NULL == se_proxy, NET_NFC_NOT_INITIALIZED);
475 /* prevent executing daemon when nfc is off */
476 RETV_IF(net_nfc_client_manager_is_activated() == false, NET_NFC_INVALID_STATE);
479 if (vconf_get_int(VCONFKEY_NFC_SE_TYPE, &type) == 0)
482 result = NET_NFC_OPERATION_FAIL;
484 ret = net_nfc_gdbus_secure_element_call_get_sync(se_proxy,
485 net_nfc_client_gdbus_get_privilege(), &result, (gint)&type, NULL, &error);
493 NFC_ERR("Set secure element failed: %s", error->message);
497 result = NET_NFC_IPC_FAIL;
503 API net_nfc_error_e net_nfc_set_card_emulation_mode(
504 net_nfc_card_emulation_mode_t mode,
505 net_nfc_se_set_card_emulation_cb callback,
508 NetNfcCallback *func_data;
510 RETV_IF(NULL == se_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 func_data = g_try_new0(NetNfcCallback, 1);
516 if (NULL == func_data)
517 return NET_NFC_ALLOC_FAIL;
519 func_data->callback = (gpointer)callback;
520 func_data->user_data = user_data;
522 net_nfc_gdbus_secure_element_call_set_card_emulation(se_proxy, (gint)mode,
523 net_nfc_client_gdbus_get_privilege(), NULL, _set_card_emulation_cb, func_data);
528 API net_nfc_error_e net_nfc_get_card_emulation_mode(net_nfc_se_type_e *type)
532 net_nfc_error_e result = NET_NFC_OK;
534 ret = vconf_get_int(VCONFKEY_NFC_SE_TYPE, &se_type);
540 case VCONFKEY_NFC_SE_POLICY_UICC_ON:
541 *type = NET_NFC_SE_TYPE_UICC;
544 case VCONFKEY_NFC_SE_POLICY_ESE_ON:
545 *type = NET_NFC_SE_TYPE_ESE;
549 *type = NET_NFC_SE_TYPE_NONE;
555 result = NET_NFC_UNKNOWN_ERROR;
561 API net_nfc_error_e net_nfc_set_card_emulation_mode_sync(
562 net_nfc_card_emulation_mode_t mode)
565 GError *error = NULL;
566 net_nfc_error_e result = NET_NFC_OK;
568 RETV_IF(NULL == se_proxy, NET_NFC_NOT_INITIALIZED);
570 /* prevent executing daemon when nfc is off */
571 RETV_IF(net_nfc_client_manager_is_activated() == false, NET_NFC_INVALID_STATE);
573 ret = net_nfc_gdbus_secure_element_call_set_card_emulation_sync(se_proxy, (gint)mode,
574 net_nfc_client_gdbus_get_privilege(), &result, NULL, &error);
578 NFC_ERR("Set card emulation failed: %s", error->message);
580 result = NET_NFC_IPC_FAIL;
587 API net_nfc_error_e net_nfc_client_se_open_internal_secure_element(
588 net_nfc_se_type_e se_type, net_nfc_se_open_se_cb callback, void *user_data)
590 SeFuncData *func_data;
592 RETV_IF(NULL == se_proxy, NET_NFC_NOT_INITIALIZED);
594 /* allow this function even nfc is off */
596 func_data = g_try_new0(SeFuncData, 1);
597 if (NULL == func_data)
598 return NET_NFC_ALLOC_FAIL;
600 func_data->se_callback = (gpointer)callback;
601 func_data->se_data = user_data;
603 net_nfc_gdbus_secure_element_call_open_secure_element(se_proxy, (gint)se_type,
604 net_nfc_client_gdbus_get_privilege(), NULL, open_secure_element, func_data);
610 API net_nfc_error_e net_nfc_client_se_open_internal_secure_element_sync(
611 net_nfc_se_type_e se_type, net_nfc_target_handle_s **handle)
614 guint out_handle = 0;
615 GError *error = NULL;
616 net_nfc_error_e result = NET_NFC_OK;
618 RETV_IF(NULL == handle, NET_NFC_NULL_PARAMETER);
619 RETV_IF(NULL == se_proxy, NET_NFC_NOT_INITIALIZED);
621 /* allow this function even nfc is off */
623 ret = net_nfc_gdbus_secure_element_call_open_secure_element_sync(se_proxy, se_type,
624 net_nfc_client_gdbus_get_privilege(), &result, &out_handle, NULL, &error);
628 *handle = GUINT_TO_POINTER(out_handle);
632 NFC_ERR("Open internal secure element failed: %s", error->message);
635 result = NET_NFC_IPC_FAIL;
642 API net_nfc_error_e net_nfc_client_se_close_internal_secure_element(
643 net_nfc_target_handle_s *handle, net_nfc_se_close_se_cb callback, void *user_data)
645 GError *error = NULL;
646 SeFuncData *func_data;
647 NetNfcGDbusSecureElement* auto_proxy;
651 auto_proxy = se_proxy;
655 auto_proxy = net_nfc_gdbus_secure_element_proxy_new_for_bus_sync(
657 G_DBUS_PROXY_FLAGS_NONE,
658 "org.tizen.NetNfcService",
659 "/org/tizen/NetNfcService/SecureElement",
662 if(NULL == auto_proxy)
664 NFC_ERR("Can not create proxy : %s", error->message);
667 return NET_NFC_UNKNOWN_ERROR;
671 /* allow this function even nfc is off */
673 func_data = g_try_new0(SeFuncData, 1);
674 if (NULL == func_data)
676 g_object_unref(auto_proxy);
677 return NET_NFC_ALLOC_FAIL;
680 func_data->se_callback = (gpointer)callback;
681 func_data->se_data = user_data;
683 net_nfc_gdbus_secure_element_call_close_secure_element(
685 GPOINTER_TO_UINT(handle),
686 net_nfc_client_gdbus_get_privilege(),
688 close_secure_element,
691 g_object_unref(auto_proxy);
696 API net_nfc_error_e net_nfc_client_se_close_internal_secure_element_sync(
697 net_nfc_target_handle_s *handle)
700 GError *error = NULL;
701 net_nfc_error_e result = NET_NFC_OK;
702 NetNfcGDbusSecureElement* auto_proxy;
706 auto_proxy = se_proxy;
710 auto_proxy = net_nfc_gdbus_secure_element_proxy_new_for_bus_sync(
712 G_DBUS_PROXY_FLAGS_NONE,
713 "org.tizen.NetNfcService",
714 "/org/tizen/NetNfcService/SecureElement",
717 if (NULL == auto_proxy)
719 NFC_ERR("Can not create proxy : %s", error->message);
722 return NET_NFC_UNKNOWN_ERROR;
726 /* allow this function even nfc is off */
728 ret = net_nfc_gdbus_secure_element_call_close_secure_element_sync(
730 GPOINTER_TO_UINT(handle),
731 net_nfc_client_gdbus_get_privilege(),
738 NFC_ERR("close internal secure element failed: %s", error->message);
740 result = NET_NFC_IPC_FAIL;
743 g_object_unref(auto_proxy);
748 API net_nfc_error_e net_nfc_client_se_get_atr(net_nfc_target_handle_s *handle,
749 net_nfc_se_get_atr_cb callback, void *user_data)
751 GError *error = NULL;
752 SeFuncData *func_data;
753 NetNfcGDbusSecureElement* auto_proxy;
757 auto_proxy = se_proxy;
761 auto_proxy = net_nfc_gdbus_secure_element_proxy_new_for_bus_sync(
763 G_DBUS_PROXY_FLAGS_NONE,
764 "org.tizen.NetNfcService",
765 "/org/tizen/NetNfcService/SecureElement",
768 if (NULL == auto_proxy)
770 NFC_ERR("Can not create proxy : %s", error->message);
773 return NET_NFC_UNKNOWN_ERROR;
777 /* allow this function even nfc is off */
779 func_data = g_try_new0(SeFuncData, 1);
780 if (NULL == func_data)
782 g_object_unref(auto_proxy);
783 return NET_NFC_ALLOC_FAIL;
786 func_data->se_callback = (gpointer)callback;
787 func_data->se_data = user_data;
789 net_nfc_gdbus_secure_element_call_get_atr(
791 GPOINTER_TO_UINT(handle),
792 net_nfc_client_gdbus_get_privilege(),
794 get_atr_secure_element,
797 g_object_unref(auto_proxy);
802 API net_nfc_error_e net_nfc_client_se_get_atr_sync(
803 net_nfc_target_handle_s *handle, data_s **atr)
806 GError *error = NULL;
807 GVariant *out_atr = NULL;
808 net_nfc_error_e result = NET_NFC_OK;
809 NetNfcGDbusSecureElement* auto_proxy;
811 RETV_IF(NULL == atr, NET_NFC_NULL_PARAMETER);
815 auto_proxy = se_proxy;
819 auto_proxy = net_nfc_gdbus_secure_element_proxy_new_for_bus_sync(
821 G_DBUS_PROXY_FLAGS_NONE,
822 "org.tizen.NetNfcService",
823 "/org/tizen/NetNfcService/SecureElement",
826 if (NULL == auto_proxy)
828 NFC_DBG("Can not create proxy : %s", error->message);
831 return NET_NFC_UNKNOWN_ERROR;
837 /* allow this function even nfc is off */
839 ret = net_nfc_gdbus_secure_element_call_get_atr_sync(
841 GPOINTER_TO_UINT(handle),
842 net_nfc_client_gdbus_get_privilege(),
850 *atr = net_nfc_util_gdbus_variant_to_data(out_atr);
854 NFC_ERR("Get attributes failed: %s", error->message);
856 result = NET_NFC_IPC_FAIL;
859 g_object_unref(auto_proxy);
864 API net_nfc_error_e net_nfc_client_se_send_apdu(net_nfc_target_handle_s *handle,
865 data_s *apdu_data, net_nfc_se_send_apdu_cb callback, void *user_data)
868 GError *error = NULL;
869 SeFuncData *func_data;
870 NetNfcGDbusSecureElement* auto_proxy;
874 auto_proxy = se_proxy;
878 auto_proxy = net_nfc_gdbus_secure_element_proxy_new_for_bus_sync(
880 G_DBUS_PROXY_FLAGS_NONE,
881 "org.tizen.NetNfcService",
882 "/org/tizen/NetNfcService/SecureElement",
885 if (NULL == auto_proxy)
887 NFC_ERR("Can not create proxy : %s", error->message);
890 return NET_NFC_UNKNOWN_ERROR;
894 /* allow this function even nfc is off */
896 arg_data = net_nfc_util_gdbus_data_to_variant(apdu_data);
897 if (arg_data == NULL)
899 g_object_unref(auto_proxy);
900 return NET_NFC_INVALID_PARAM;
903 func_data = g_try_new0(SeFuncData, 1);
904 if (NULL == func_data)
906 g_variant_unref(arg_data);
907 g_object_unref(auto_proxy);
908 return NET_NFC_ALLOC_FAIL;
911 func_data->se_callback = (gpointer)callback;
912 func_data->se_data = user_data;
914 net_nfc_gdbus_secure_element_call_send_apdu(
916 GPOINTER_TO_UINT(handle),
918 net_nfc_client_gdbus_get_privilege(),
920 send_apdu_secure_element,
923 g_object_unref(auto_proxy);
928 API net_nfc_error_e net_nfc_client_se_send_apdu_sync(
929 net_nfc_target_handle_s *handle, data_s *apdu_data, data_s **response)
933 GError *error = NULL;
934 GVariant *out_data = NULL;
935 net_nfc_error_e result = NET_NFC_OK;
936 NetNfcGDbusSecureElement* auto_proxy;
938 RETV_IF(NULL == response, NET_NFC_NULL_PARAMETER);
942 auto_proxy = se_proxy;
946 GError *error = NULL;
948 auto_proxy = net_nfc_gdbus_secure_element_proxy_new_for_bus_sync(
950 G_DBUS_PROXY_FLAGS_NONE,
951 "org.tizen.NetNfcService",
952 "/org/tizen/NetNfcService/SecureElement",
955 if (NULL == auto_proxy)
957 NFC_ERR("Can not create proxy : %s", error->message);
960 return NET_NFC_UNKNOWN_ERROR;
966 /* allow this function even nfc is off */
968 arg_data = net_nfc_util_gdbus_data_to_variant(apdu_data);
969 if (NULL == arg_data)
971 g_object_unref(auto_proxy);
972 return NET_NFC_INVALID_PARAM;
975 ret = net_nfc_gdbus_secure_element_call_send_apdu_sync(
977 GPOINTER_TO_UINT(handle),
979 net_nfc_client_gdbus_get_privilege(),
987 *response = net_nfc_util_gdbus_variant_to_data(out_data);
991 NFC_ERR("Send APDU failed: %s", error->message);
993 result = NET_NFC_IPC_FAIL;
996 g_object_unref(auto_proxy);
1001 API void net_nfc_client_se_set_ese_detection_cb(
1002 net_nfc_client_se_ese_detected_event callback, void *user_data)
1004 se_esedetecthandler.se_ese_detected_cb = callback;
1005 se_esedetecthandler.se_ese_detected_data = user_data;
1009 API void net_nfc_client_se_unset_ese_detection_cb(void)
1011 net_nfc_client_se_set_ese_detection_cb(NULL, NULL);
1015 API void net_nfc_client_se_set_transaction_event_cb(
1016 net_nfc_se_type_e se_type,
1017 net_nfc_client_se_transaction_event callback,
1020 se_transeventhandler.se_type = se_type;
1022 if(se_type == NET_NFC_SE_TYPE_ESE)
1024 se_transeventhandler.eSE_transaction_event_cb = callback;
1025 se_transeventhandler.eSE_transaction_event_data = user_data;
1027 else if(se_type == NET_NFC_SE_TYPE_UICC)
1029 se_transeventhandler.UICC_transaction_event_cb = callback;
1030 se_transeventhandler.UICC_transaction_event_data = user_data;
1035 API void net_nfc_client_se_unset_transaction_event_cb(net_nfc_se_type_e type)
1037 net_nfc_client_se_set_transaction_event_cb(type, NULL, NULL);
1038 net_nfc_client_se_set_transaction_event_cb(NET_NFC_SE_TYPE_NONE, NULL, NULL);
1042 API void net_nfc_client_se_set_event_cb(net_nfc_client_se_event callback,
1045 se_eventhandler.se_event_cb = callback;
1046 se_eventhandler.se_event_data = user_data;
1050 API void net_nfc_client_se_unset_event_cb(void)
1052 net_nfc_client_se_set_event_cb(NULL, NULL);
1056 net_nfc_error_e net_nfc_client_se_init(void)
1058 GError *error = NULL;
1062 NFC_WARN("Already initialized");
1066 se_proxy = net_nfc_gdbus_secure_element_proxy_new_for_bus_sync(
1068 G_DBUS_PROXY_FLAGS_NONE,
1069 "org.tizen.NetNfcService",
1070 "/org/tizen/NetNfcService/SecureElement",
1073 if (NULL == se_proxy)
1075 NFC_ERR("Can not create proxy : %s", error->message);
1077 g_error_free(error);
1079 return NET_NFC_UNKNOWN_ERROR;
1082 g_signal_connect(se_proxy, "se-type-changed", G_CALLBACK(se_type_changed), NULL);
1083 g_signal_connect(se_proxy, "ese-detected", G_CALLBACK(se_ese_detected), NULL);
1085 g_signal_connect(se_proxy, "transaction-event",
1086 G_CALLBACK(se_transaction_event), NULL);
1088 g_signal_connect(se_proxy, "card-emulation-mode-changed",
1089 G_CALLBACK(se_card_emulation_mode_changed), NULL);
1095 void net_nfc_client_se_deinit(void)
1099 g_object_unref(se_proxy);