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_private.h>
23 #include <nfc_private.h>
24 #include <net_nfc_exchanger.h>
27 #include <app_manager.h>
30 * @brief The default factory key.
31 * @details The key is 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
32 * @ingroup CAPI_NETWORK_NFC_TAG_MIFARE_MODULE
34 const unsigned char NFC_TAG_MIFARE_KEY_DEFAULT[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
37 * @brief The well-known key for tags formatted according to the MIFARE Application Directory (MAD) specification.
38 * @details The key is 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5
39 * @ingroup CAPI_NETWORK_NFC_TAG_MIFARE_MODULE
41 const unsigned char NFC_TAG_MIFARE_KEY_APPLICATION_DIRECTORY[6] = {0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5};
44 * @brief The well-known key for tags formatted according to the NDEF on Mifare Classic specification.
45 * @details The key is 0xD3, 0xF7, 0xD3, 0xF7, 0xD3, 0xF7
46 * @ingroup CAPI_NETWORK_NFC_TAG_MIFARE_MODULE
48 const unsigned char NFC_TAG_MIFARE_KEY_NFC_FORUM[6] = {0xD3, 0xF7, 0xD3, 0xF7, 0xD3, 0xF7};
52 * @brief RTD(Record type definition) Type - Smart Poster type.
53 * @ingroup CAPI_NETWORK_NFC_NDEF_RECORD_MODULE
55 const unsigned char NFC_RECORD_SMART_POSTER_TYPE[2] = { 'S', 'p' };
58 * @brief RTD(Record type definition) Type - Text type.
59 * @ingroup CAPI_NETWORK_NFC_NDEF_RECORD_MODULE
61 const unsigned char NFC_RECORD_TEXT_TYPE[1] = { 'T' };
63 * @brief RTD(Record type definition) Type - URI type.
64 * @ingroup CAPI_NETWORK_NFC_NDEF_RECORD_MODULE
66 const unsigned char NFC_RECORD_URI_TYPE[1] = { 'U' };
68 * @brief RTD(Record type definition) Type - Alternative Carrier type.
69 * @ingroup CAPI_NETWORK_NFC_NDEF_RECORD_MODULE
71 const unsigned char NFC_RECORD_ALTERNATIVE_CARRIER_TYPE[2] = { 'a','c' };
73 * @brief RTD(Record type definition) Type - Handover Carrier type.
74 * @ingroup CAPI_NETWORK_NFC_NDEF_RECORD_MODULE
76 const unsigned char NFC_RECORD_HANDOVER_CARRIER_TYPE[2] = { 'H','c' };
78 * @brief RTD(Record type definition) Type - Handover Request type.
79 * @ingroup CAPI_NETWORK_NFC_NDEF_RECORD_MODULE
81 const unsigned char NFC_RECORD_HANDOVER_REQUEST_TYPE[2] = { 'H','r' };
83 * @brief RTD(Record type definition) Type - Handover Select type.
84 * @ingroup CAPI_NETWORK_NFC_NDEF_RECORD_MODULE
86 const unsigned char NFC_RECORD_HANDOVER_SELECT_TYPE[2] = { 'H','s' };
92 #define LOG_TAG "CAPI_NETWORK_NFC"
94 static pid_t _get_focus_app_pid()
101 focus = ecore_x_window_focus_get();
102 if (ecore_x_netwm_pid_get(focus, &pid))
108 static pid_t _get_current_app_pid()
111 app_context_h context = NULL;
115 app_manager_get_app_id(pid, &app_id);
116 app_manager_get_app_context(app_id, &context);
118 app_context_get_pid(context, &pgid);
121 app_context_destroy(context);
126 static bool _check_app_permission()
128 pid_t focus_app_pid, current_app_pid;
130 focus_app_pid = _get_focus_app_pid();
131 current_app_pid = _get_current_app_pid();
133 LOGE( "[check app permission] focus_app_pid [%d], current_app_pid [%d]", focus_app_pid, current_app_pid);
135 return (focus_app_pid == current_app_pid) ? true : false;
138 static int _return_invalid_param(const char *func){
139 LOGE( "INVALID_PARAMETER (0x%08x)", NFC_ERROR_INVALID_PARAMETER);
140 return NFC_ERROR_INVALID_PARAMETER;
143 static int _convert_error_code(const char *func, int native_error_code)
145 int error_code = NFC_ERROR_NONE;
146 char * errorstr = NULL;
147 switch(native_error_code){
149 error_code = NFC_ERROR_NONE;
150 errorstr = "ERROR_NONE";
153 case NET_NFC_ALLOC_FAIL:
154 error_code = NFC_ERROR_OUT_OF_MEMORY;
155 errorstr = "OUT_OF_MEMORY";
158 case NET_NFC_UNKNOWN_ERROR:
159 case NET_NFC_THREAD_CREATE_FAIL:
160 case NET_NFC_INVALID_STATE:
161 case NET_NFC_IPC_FAIL:
162 case NET_NFC_BUFFER_TOO_SMALL:
163 case NET_NFC_COMMUNICATE_WITH_CONTROLLER_FAILED:
164 case NET_NFC_RF_ERROR:
165 case NET_NFC_NOT_SUPPORTED:
166 case NET_NFC_TAG_READ_FAILED:
167 case NET_NFC_TAG_WRITE_FAILED:
168 case NET_NFC_OPERATION_FAIL:
169 case NET_NFC_SECURITY_FAIL:
170 case NET_NFC_INSUFFICIENT_STORAGE:
171 case NET_NFC_NOT_CONNECTED:
172 case NET_NFC_NOT_INITIALIZED:
173 case NET_NFC_NOT_REGISTERED:
174 error_code = NFC_ERROR_OPERATION_FAILED;
175 errorstr = "OPERATION_FAILED";
178 case NET_NFC_OUT_OF_BOUND:
179 case NET_NFC_NULL_PARAMETER:
180 case NET_NFC_NOT_ALLOWED_OPERATION:
181 case NET_NFC_LLCP_INVALID_SOCKET:
182 case NET_NFC_NO_DATA_FOUND:
183 error_code = NFC_ERROR_INVALID_PARAMETER;
184 errorstr = "INVALID_PARAMETER";
186 case NET_NFC_NDEF_RECORD_IS_NOT_EXPECTED_TYPE:
187 error_code = NFC_ERROR_INVALID_RECORD_TYPE;
188 errorstr = "INVALID_RECORD_TYPE";
191 case NET_NFC_ALREADY_INITIALIZED:
192 case NET_NFC_ALREADY_REGISTERED:
193 error_code = NFC_ERROR_NONE;
194 errorstr = "ERROR_NONE";
197 case NET_NFC_RF_TIMEOUT:
198 error_code = NFC_ERROR_TIMED_OUT;
199 errorstr = "TIMED_OUT";
201 case NET_NFC_INVALID_FORMAT:
202 case NET_NFC_NDEF_TYPE_LENGTH_IS_NOT_OK:
203 case NET_NFC_NDEF_ID_LENGTH_IS_NOT_OK:
204 case NET_NFC_NDEF_BUF_END_WITHOUT_ME:
205 error_code = NFC_ERROR_INVALID_NDEF_MESSAGE;
206 errorstr = "INVALID_NDEF_MESSAGE";
208 case NET_NFC_NO_NDEF_MESSAGE:
209 error_code = NFC_ERROR_NO_NDEF_MESSAGE;
210 errorstr = "NO_NDEF_MESSAGE";
213 error_code = NFC_ERROR_DEVICE_BUSY;
214 errorstr = "DEVICE_BUSY";
216 case NET_NFC_NO_NDEF_SUPPORT:
217 error_code = NFC_ERROR_NOT_NDEF_FORMAT;
218 errorstr = "NOT_SUPPORTED";
221 error_code = NFC_ERROR_OPERATION_FAILED;
222 errorstr = "OPERATION_FAILED";
225 LOGE( "NFC %s(0x%08x)", errorstr, error_code);
231 _nfc_context_s g_nfc_context;
234 static void nfc_manager_set_activation_completed_cb(nfc_activation_completed_cb callback , void *user_data)
236 g_nfc_context.on_activation_completed_cb = callback;
237 g_nfc_context.on_activation_completed_user_data = user_data;
238 g_nfc_context.on_activation_doing = true;
241 static void nfc_manager_unset_activation_completed_cb(void)
243 g_nfc_context.on_activation_completed_cb = NULL;
244 g_nfc_context.on_activation_completed_user_data = NULL;
245 g_nfc_context.on_activation_doing = false;
248 static bool nfc_manager_check_activation(void)
250 return g_nfc_context.on_activation_doing;
254 void _nfc_response_handler(net_nfc_message_e message, net_nfc_error_e result, void* data, void* user_param, void * trans_data)
256 LOGI("NFC message %d - start result[%d] ", message, result);
258 int capi_result = _convert_error_code("EVENT", result);
261 case NET_NFC_MESSAGE_TRANSCEIVE:
263 if( trans_data != NULL ){
264 _async_callback_data *user_cb = (_async_callback_data*)trans_data;
266 if( user_cb->callback_type == _NFC_CALLBACK_TYPE_DATA ){
267 unsigned char * buffer = NULL;
269 if( result == 0 && data != NULL){
270 data_s *arg = (data_s*) data;
271 buffer = arg->buffer;
272 buffer_size = arg->length;
274 void (* data_type_callback)(int result , unsigned char * buffer, int buffer_size, void * user_data);
275 data_type_callback = user_cb->callback;
276 data_type_callback(capi_result, buffer, buffer_size, user_cb->user_data);
277 }else if ( user_cb->callback_type == _NFC_CALLBACK_TYPE_RESULT){
278 void (* result_type_callback)(int result , void * user_data);
279 result_type_callback = user_cb->callback;
280 result_type_callback(capi_result, user_cb->user_data);
286 case NET_NFC_MESSAGE_READ_NDEF:
288 if( trans_data != NULL ) {
289 ndef_message_h ndef_message = (ndef_message_h)data;
290 _async_callback_data *user_cb = (_async_callback_data*)trans_data;
291 ((nfc_tag_read_completed_cb)user_cb->callback)(capi_result, ndef_message, user_cb->user_data);
296 case NET_NFC_MESSAGE_WRITE_NDEF:
298 if( trans_data != NULL ){
299 _async_callback_data *user_cb = (_async_callback_data*)trans_data;
300 ((nfc_tag_write_completed_cb)user_cb->callback)(capi_result, user_cb->user_data);
305 case NET_NFC_MESSAGE_TAG_DISCOVERED:
307 net_nfc_target_info_s *target_info = (net_nfc_target_info_s *)data;
309 if (g_nfc_context.current_tag != NULL)
311 net_nfc_release_tag_info((net_nfc_target_info_h)g_nfc_context.current_tag);
312 g_nfc_context.current_tag = NULL;
315 net_nfc_duplicate_target_info((net_nfc_target_info_h)target_info, (net_nfc_target_info_h *)&g_nfc_context.current_tag);
317 if (g_nfc_context.on_tag_discovered_cb)
319 g_nfc_context.on_tag_discovered_cb(NFC_DISCOVERED_TYPE_ATTACHED, (nfc_tag_h)g_nfc_context.current_tag, g_nfc_context.on_tag_discovered_user_data);
323 if (g_nfc_context.on_ndef_discovered_cb && target_info->raw_data.buffer != NULL)
325 ndef_message_h ndef_message;
326 net_nfc_create_ndef_message_from_rawdata(&ndef_message, (data_h)&(target_info->raw_data));
327 g_nfc_context.on_ndef_discovered_cb(ndef_message, g_nfc_context.on_ndef_discovered_user_data);
328 net_nfc_free_ndef_message(ndef_message);
332 case NET_NFC_MESSAGE_NOTIFY:
336 case NET_NFC_MESSAGE_TAG_DETACHED:
338 if( g_nfc_context.on_tag_discovered_cb ){
339 g_nfc_context.on_tag_discovered_cb( NFC_DISCOVERED_TYPE_DETACHED, (nfc_tag_h)g_nfc_context.current_tag , g_nfc_context.on_tag_discovered_user_data );
342 if (g_nfc_context.current_tag != NULL)
344 net_nfc_release_tag_info((net_nfc_target_info_h)g_nfc_context.current_tag);
345 g_nfc_context.current_tag = NULL;
349 case NET_NFC_MESSAGE_P2P_DISCOVERED:
351 g_nfc_context.current_target = (net_nfc_target_handle_h)data;
352 g_nfc_context.on_p2p_recv_cb = NULL;
353 g_nfc_context.on_p2p_recv_user_data = NULL;
354 g_nfc_context.on_p2p_send_completed_cb = NULL;
355 g_nfc_context.on_p2p_send_completed_user_data = NULL;
357 if( g_nfc_context.on_p2p_discovered_cb ){
358 g_nfc_context.on_p2p_discovered_cb(NFC_DISCOVERED_TYPE_ATTACHED , (nfc_p2p_target_h)g_nfc_context.current_target, g_nfc_context.on_p2p_discovered_user_data );
363 case NET_NFC_MESSAGE_P2P_DETACHED:
365 if( g_nfc_context.on_p2p_discovered_cb ){
366 g_nfc_context.on_p2p_discovered_cb( NFC_DISCOVERED_TYPE_DETACHED, (nfc_p2p_target_h)(g_nfc_context.current_target) , g_nfc_context.on_p2p_discovered_user_data );
368 memset(&g_nfc_context.current_target , 0 , sizeof( g_nfc_context.current_target ));
369 g_nfc_context.on_p2p_recv_cb = NULL;
370 g_nfc_context.on_p2p_recv_user_data = NULL;
371 g_nfc_context.on_p2p_send_completed_cb = NULL;
372 g_nfc_context.on_p2p_send_completed_user_data = NULL;
376 case NET_NFC_MESSAGE_P2P_SEND :
378 if( g_nfc_context.on_p2p_send_completed_cb != NULL ){
380 nfc_p2p_send_completed_cb cb = g_nfc_context.on_p2p_send_completed_cb;
381 void * user_data = g_nfc_context.on_p2p_send_completed_user_data;
382 g_nfc_context.on_p2p_send_completed_cb = NULL;
383 g_nfc_context.on_p2p_send_completed_user_data = NULL;
384 cb(capi_result , user_data );
388 case NET_NFC_MESSAGE_P2P_RECEIVE :
390 if( g_nfc_context.on_p2p_recv_cb != NULL ){
391 ndef_message_h ndef_message ;
392 net_nfc_create_ndef_message_from_rawdata (&ndef_message, (data_h)(data) );
393 g_nfc_context.on_p2p_recv_cb( (nfc_p2p_target_h)(g_nfc_context.current_target) , ndef_message ,g_nfc_context.on_p2p_recv_user_data );
394 net_nfc_free_ndef_message(ndef_message);
399 case NET_NFC_MESSAGE_FORMAT_NDEF:
401 if( trans_data != NULL) {
402 _async_callback_data *user_cb = (_async_callback_data*)trans_data;
403 ((nfc_tag_format_completed_cb)user_cb->callback)(capi_result, user_cb->user_data);
409 case NET_NFC_MESSAGE_CONNECTION_HANDOVER :
411 if( g_nfc_context.on_p2p_connection_handover_completed_cb != NULL ){
413 net_nfc_conn_handover_carrier_type_e type = NET_NFC_CONN_HANDOVER_CARRIER_UNKNOWN;
414 nfc_ac_type_e carrior_type = NFC_AC_TYPE_UNKNOWN;
415 char * ac_data = NULL;
416 int ac_data_size = 0;
418 char buffer[50] = {0,};
419 data_h ac_info = NULL;
422 net_nfc_exchanger_get_alternative_carrier_type((net_nfc_connection_handover_info_h)data, &type);
423 if (type == NET_NFC_CONN_HANDOVER_CARRIER_BT)
425 carrior_type = NFC_AC_TYPE_BT;
426 if(net_nfc_exchanger_get_alternative_carrier_data((net_nfc_connection_handover_info_h)data, &ac_info)== 0)
428 temp = (char *)net_nfc_get_data_buffer(ac_info);
432 snprintf(buffer, 50, "%02x:%02x:%02x:%02x:%02x:%02x",temp[0], temp[1], temp[2], temp[3], temp[4], temp[5]);
434 ac_data = (strdup(buffer));
435 ac_data_size = strlen(ac_data ) +1;
437 net_nfc_free_data(ac_info);
441 nfc_p2p_connection_handover_completed_cb cb = g_nfc_context.on_p2p_connection_handover_completed_cb;
442 void * user_data = g_nfc_context.on_p2p_connection_handover_completed_user_data;
443 g_nfc_context.on_p2p_connection_handover_completed_cb = NULL;
444 g_nfc_context.on_p2p_connection_handover_completed_user_data = NULL;
445 cb(capi_result , carrior_type, (void *)ac_data, ac_data_size, user_data );
447 net_nfc_exchanger_free_alternative_carrier_data((net_nfc_connection_handover_info_h)data);
454 case NET_NFC_MESSAGE_IS_TAG_CONNECTED :
456 net_nfc_target_type_e devType = *(net_nfc_target_type_e *)data;
458 if( (devType == NET_NFC_NFCIP1_TARGET )||(devType == NET_NFC_NFCIP1_INITIATOR ))
460 net_nfc_get_current_target_handle(trans_data);
462 else if( (devType > NET_NFC_UNKNOWN_TARGET )&&(devType < NET_NFC_NFCIP1_TARGET ))
464 net_nfc_get_current_tag_info(trans_data);
468 if (result == NET_NFC_NOT_CONNECTED)
470 capi_result = NFC_ERROR_NONE;
473 if( g_nfc_context.on_initialize_completed_cb ){
474 nfc_initialize_completed_cb cb = g_nfc_context.on_initialize_completed_cb;
475 g_nfc_context.on_initialize_completed_cb = NULL;
476 cb( capi_result,trans_data );
482 case NET_NFC_MESSAGE_GET_CURRENT_TAG_INFO :
484 net_nfc_target_info_s *target_info = (net_nfc_target_info_s *)data;
486 if (target_info != NULL)
488 if (g_nfc_context.current_tag != NULL)
490 net_nfc_release_tag_info((net_nfc_target_info_h)g_nfc_context.current_tag);
491 g_nfc_context.current_tag = NULL;
494 net_nfc_duplicate_target_info((net_nfc_target_info_h)target_info, (net_nfc_target_info_h *)&g_nfc_context.current_tag);
497 nfc_initialize_completed_cb cb = g_nfc_context.on_initialize_completed_cb;
498 g_nfc_context.on_initialize_completed_cb = NULL;
501 cb(capi_result, trans_data);
506 case NET_NFC_MESSAGE_GET_CURRENT_TARGET_HANDLE :
508 g_nfc_context.current_target = (net_nfc_target_handle_h)data;
510 nfc_initialize_completed_cb cb = g_nfc_context.on_initialize_completed_cb;
511 g_nfc_context.on_initialize_completed_cb = NULL;
513 cb( capi_result, trans_data );
520 case NET_NFC_MESSAGE_INIT :
522 bool activated = true;
524 LOGE( "_nfc_response_handler NET_NFC_MESSAGE_INIT\n");
526 if (result == NET_NFC_OK){
527 if( g_nfc_context.on_activation_changed_cb != NULL ){
528 g_nfc_context.on_activation_changed_cb(activated , g_nfc_context.on_activation_changed_user_data);
529 LOGE( "_nfc_response_handler changed call back NET_NFC_MESSAGE_INIT NET_NFC_OK\n");
532 if( g_nfc_context.on_activation_completed_cb != NULL ){
533 g_nfc_context.on_activation_completed_cb(result , g_nfc_context.on_activation_completed_user_data);
534 LOGE( "_nfc_response_handler completed call back NET_NFC_MESSAGE_INIT NET_NFC_OK\n");
536 nfc_manager_unset_activation_completed_cb();
540 g_nfc_context.on_activation_doing = false;
541 LOGE( "g_nfc_context.on_activation_doing\n");
550 case NET_NFC_MESSAGE_DEINIT :
552 bool activated = false;
554 if (result == NET_NFC_OK){
555 if( g_nfc_context.on_activation_changed_cb != NULL ){
556 g_nfc_context.on_activation_changed_cb(activated , g_nfc_context.on_activation_changed_user_data);
557 LOGE( "_nfc_response_handler NET_NFC_MESSAGE_DEINIT NET_NFC_OK\n");
560 if( g_nfc_context.on_activation_completed_cb != NULL ){
561 g_nfc_context.on_activation_completed_cb(result , g_nfc_context.on_activation_completed_user_data);
562 LOGE( "_nfc_response_handler completed call back NET_NFC_MESSAGE_INIT NET_NFC_OK\n");
564 nfc_manager_unset_activation_completed_cb();
568 g_nfc_context.on_activation_doing = false;
569 LOGE( "g_nfc_context.on_activation_doing\n");
576 case NET_NFC_MESSAGE_SET_SE :
578 if( trans_data != NULL ){
579 _async_callback_data *user_cb = (_async_callback_data*)trans_data;
580 ((nfc_set_card_emulation_completed_cb)user_cb->callback)(capi_result, user_cb->user_data);
586 case NET_NFC_MESSAGE_SE_START_TRANSACTION :
587 case NET_NFC_MESSAGE_SE_END_TRANSACTION :
588 case NET_NFC_MESSAGE_SE_TYPE_TRANSACTION:
589 case NET_NFC_MESSAGE_SE_CONNECTIVITY :
590 case NET_NFC_MESSAGE_SE_FIELD_ON :
591 case NET_NFC_MESSAGE_SE_FIELD_OFF :
592 case NET_NFC_MESSAGE_SE_TYPE_CHANGED :
594 nfc_se_event_e event = NFC_SE_EVENT_START_TRANSACTION;
596 case NET_NFC_MESSAGE_SE_START_TRANSACTION:
597 event = NFC_SE_EVENT_START_TRANSACTION;
599 case NET_NFC_MESSAGE_SE_END_TRANSACTION:
600 event = NFC_SE_EVENT_END_TRANSACTION;
602 case NET_NFC_MESSAGE_SE_CONNECTIVITY:
603 event = NFC_SE_EVENT_CONNECTIVITY;
605 case NET_NFC_MESSAGE_SE_FIELD_ON :
606 event = NFC_SE_EVENT_FIELD_ON;
608 case NET_NFC_MESSAGE_SE_FIELD_OFF :
609 event = NFC_SE_EVENT_FIELD_OFF;
611 case NET_NFC_MESSAGE_SE_TYPE_TRANSACTION:
612 event = NFC_SE_EVENT_TRANSACTION;
614 case NET_NFC_MESSAGE_SE_TYPE_CHANGED:
615 event = NFC_SE_EVENT_SE_TYPE_CHANGED;
621 if( g_nfc_context.on_se_event_cb ){
622 g_nfc_context.on_se_event_cb(event, g_nfc_context.on_se_event_user_data);
624 if( message == NET_NFC_MESSAGE_SE_TYPE_TRANSACTION){
625 net_nfc_se_event_info_s* transaction_data = (net_nfc_se_event_info_s*)data;
626 if( g_nfc_context.on_se_transaction_event_cb && transaction_data != NULL){
627 g_nfc_context.on_se_transaction_event_cb(transaction_data->aid.buffer,transaction_data->aid.length, transaction_data->param.buffer,transaction_data->param.length , g_nfc_context.on_se_transaction_event_user_data);
639 bool nfc_manager_is_supported(void)
642 int nfc_supported = 0;
644 net_nfc_is_supported(&nfc_supported);
646 return nfc_supported;
651 int nfc_manager_set_activation(bool activation, nfc_activation_completed_cb callback, void *user_data)
654 int nfc_supported = 0;
655 bool nfc_check_activation = 0;
657 nfc_check_activation = nfc_manager_check_activation();
659 if (nfc_check_activation == true)
661 LOGE( "nfc_manager_check_activation BUSY!!!!!\n");
662 return NFC_ERROR_DEVICE_BUSY;
665 net_nfc_is_supported(&nfc_supported);
669 ret = NFC_ERROR_NOT_SUPPORTED;
673 if (nfc_manager_is_activated() == activation)
677 ret = NFC_ERROR_ALREADY_ACTIVATED;
681 ret = NFC_ERROR_ALREADY_DEACTIVATED;
686 nfc_manager_set_activation_completed_cb(callback, user_data);
688 ret = net_nfc_set_state(activation, NULL);
690 if (ret == NET_NFC_OK)
692 ret = NFC_ERROR_NONE;
693 LOGE( "nfc_manager_set_activation net_nfc_set_state success\n");
697 nfc_manager_unset_activation_completed_cb();
698 ret = NFC_ERROR_OPERATION_FAILED;
699 LOGE( "nfc_manager_set_activation net_nfc_set_state fail\n");
707 int nfc_manager_set_activation_changed_cb(nfc_activation_changed_cb callback , void *user_data)
709 if( callback == NULL)
710 return _return_invalid_param(__func__);
711 g_nfc_context.on_activation_changed_cb = callback;
712 g_nfc_context.on_activation_changed_user_data = user_data;
716 void nfc_manager_unset_activation_changed_cb(void)
718 g_nfc_context.on_activation_changed_cb = NULL;
719 g_nfc_context.on_activation_changed_user_data = NULL;
725 bool nfc_manager_is_activated(void)
729 net_nfc_get_state(&activated);
742 static bool _is_initialized()
744 return g_nfc_context.initialized;
747 int nfc_manager_initialize (nfc_initialize_completed_cb callback, void *user_data)
750 int nfc_supported = 0;
752 net_nfc_is_supported(&nfc_supported);
756 LOGE( "nfc_manager_initialize NFC_ERROR_NOT_SUPPORTED \n");
757 return NFC_ERROR_NOT_SUPPORTED;
760 if (!_is_initialized())
762 ret = net_nfc_initialize();
763 if( ret != NET_NFC_OK )
764 return _convert_error_code(__func__, ret);
766 memset( &g_nfc_context , 0 , sizeof( g_nfc_context));
767 net_nfc_set_response_callback( _nfc_response_handler , &g_nfc_context);
768 g_nfc_context.initialized = true;
769 net_nfc_state_activate();
770 g_nfc_context.on_initialize_completed_cb = callback;
771 ret = net_nfc_is_tag_connected(user_data);
772 if( ret != NET_NFC_OK )
773 return _convert_error_code(__func__, ret);
776 return NFC_ERROR_NONE;
779 int nfc_manager_initialize_sync()
782 int nfc_supported = 0;
784 net_nfc_is_supported(&nfc_supported);
787 LOGE("nfc_manager_initialize NFC_ERROR_NOT_SUPPORTED \n");
788 return NFC_ERROR_NOT_SUPPORTED;
791 if (!_is_initialized())
795 ret = net_nfc_initialize();
796 if (ret != NET_NFC_OK)
797 return _convert_error_code(__func__, ret);
799 memset(&g_nfc_context, 0, sizeof(g_nfc_context));
800 net_nfc_set_response_callback(_nfc_response_handler, &g_nfc_context);
801 g_nfc_context.initialized = true;
802 net_nfc_state_activate();
804 ret = net_nfc_is_tag_connected_sync(&devType);
805 if (ret == NET_NFC_OK)
807 if ((devType == NET_NFC_NFCIP1_TARGET) || (devType == NET_NFC_NFCIP1_INITIATOR))
809 net_nfc_get_current_target_handle_sync((net_nfc_target_handle_h *)&g_nfc_context.current_target);
811 else if ((devType > NET_NFC_UNKNOWN_TARGET) && (devType < NET_NFC_NFCIP1_TARGET))
813 if (g_nfc_context.current_tag != NULL)
815 net_nfc_release_tag_info((net_nfc_target_info_h)g_nfc_context.current_tag);
816 g_nfc_context.current_tag = NULL;
819 net_nfc_get_current_tag_info_sync((net_nfc_target_info_h *)&g_nfc_context.current_tag);
824 if (ret == NET_NFC_NOT_CONNECTED)
826 ret = NFC_ERROR_NONE;
830 if (ret != NET_NFC_OK)
831 return _convert_error_code(__func__, ret);
834 return NFC_ERROR_NONE;
837 int nfc_manager_deinitialize (void)
839 int ret = NFC_ERROR_NONE;
841 if (_is_initialized())
843 net_nfc_state_deactivate();
845 ret = net_nfc_deinitialize();
848 net_nfc_unset_response_callback();
850 g_nfc_context.initialized = false;
853 return _convert_error_code(__func__, ret);
856 int nfc_manager_set_tag_discovered_cb( nfc_tag_discovered_cb callback , void * user_data)
858 if( callback == NULL)
859 return _return_invalid_param(__func__);
860 g_nfc_context.on_tag_discovered_cb = callback;
861 g_nfc_context.on_tag_discovered_user_data = user_data;
864 void nfc_manager_unset_tag_discovered_cb( void )
866 g_nfc_context.on_tag_discovered_cb = NULL;
867 g_nfc_context.on_tag_discovered_user_data = NULL;
870 int nfc_manager_set_ndef_discovered_cb( nfc_ndef_discovered_cb callback , void *user_data)
872 if( callback == NULL)
873 return _return_invalid_param(__func__);
874 g_nfc_context.on_ndef_discovered_cb= callback;
875 g_nfc_context.on_ndef_discovered_user_data= user_data;
879 void nfc_manager_unset_ndef_discovered_cb( void )
882 g_nfc_context.on_ndef_discovered_cb = NULL;
883 g_nfc_context.on_ndef_discovered_user_data = NULL;
886 void nfc_manager_set_tag_filter(int filter )
888 net_nfc_set_tag_filter(filter);
891 int nfc_manager_get_tag_filter(void)
894 return net_nfc_get_tag_filter();
897 int nfc_manager_get_connected_tag(nfc_tag_h * tag)
901 return _return_invalid_param(__func__);
903 if(g_nfc_context.current_tag == NULL)
905 return NFC_ERROR_NO_DEVICE;
908 if(g_nfc_context.current_tag->handle == NULL)
910 ret = NFC_ERROR_NO_DEVICE;
914 *tag = (nfc_tag_h)g_nfc_context.current_tag;
915 ret = NFC_ERROR_NONE;
920 int nfc_manager_get_connected_target(nfc_p2p_target_h *target)
924 return _return_invalid_param(__func__);
926 if(g_nfc_context.current_target == NULL)
928 ret = NFC_ERROR_NO_DEVICE;
932 *target = (nfc_p2p_target_h)g_nfc_context.current_target;
933 ret = NFC_ERROR_NONE;
939 int nfc_manager_set_system_handler_enable(bool enable)
941 int ret = NFC_ERROR_NONE;
943 ret = net_nfc_set_launch_popup_state(enable);
945 if( ret != NET_NFC_OK )
946 return _convert_error_code(__func__, ret);
951 bool nfc_manager_is_system_handler_enabled(void)
955 net_nfc_get_launch_popup_state(&state);
960 int nfc_manager_set_card_emulation_se_type(nfc_se_type_e type, nfc_set_card_emulation_completed_cb callback, void* user_data)
962 if ((type < NFC_SE_TYPE_DISABLE) || (type > NFC_SE_TYPE_UICC))
964 return _return_invalid_param(__func__);
967 if(!nfc_manager_is_activated())
969 return NFC_ERROR_NOT_ACTIVATED;
972 _async_callback_data *trans_data = NULL;
974 net_nfc_se_type_e se_type;
976 if( callback != NULL )
978 trans_data = (_async_callback_data*)malloc( sizeof(_async_callback_data));
979 if(trans_data == NULL )
980 return NFC_ERROR_OUT_OF_MEMORY;
981 memset(trans_data , 0 , sizeof(_async_callback_data));
982 trans_data->callback = callback;
983 trans_data->user_data = user_data;
988 case NFC_SE_TYPE_DISABLE:
989 se_type = NET_NFC_SE_TYPE_NONE;
991 case NFC_SE_TYPE_ESE:
992 se_type = NET_NFC_SE_TYPE_ESE;
994 case NFC_SE_TYPE_UICC:
995 se_type = NET_NFC_SE_TYPE_UICC;
1001 ret = net_nfc_set_secure_element_type(se_type, (void *)trans_data);
1003 return _convert_error_code(__func__, ret);
1006 int nfc_manager_get_card_emulation_se_type(nfc_se_type_e* type)
1008 int ret = NFC_ERROR_NONE;
1011 if ((ret = vconf_get_int(VCONFKEY_NFC_SE_TYPE, &se_type)) != 0)
1013 ret = NFC_ERROR_OPERATION_FAILED;
1018 if ((se_type >= NFC_SE_TYPE_DISABLE) && (se_type <= NFC_SE_TYPE_UICC))
1021 ret = NFC_ERROR_OPERATION_FAILED;
1027 int nfc_manager_get_cached_message(nfc_ndef_message_h *ndef_message)
1030 if( ndef_message == NULL )
1031 return _return_invalid_param(__func__);
1032 ret = net_nfc_retrieve_current_ndef_message(ndef_message);
1033 return _convert_error_code(__func__, ret);
1036 int nfc_ndef_record_create(nfc_ndef_record_h* record, nfc_record_tnf_e tnf, const unsigned char* type, int type_size , const unsigned char * id , int id_size, const unsigned char * payload, int payload_size)
1039 return _return_invalid_param(__func__);
1041 data_s type_data = { (unsigned char*)type, type_size };
1042 data_s id_data = { (unsigned char*)id , id_size };
1043 data_s payload_data = {(unsigned char*)payload , payload_size };
1045 ret = net_nfc_create_record((ndef_record_h*)record , tnf , (data_h)&type_data , (data_h)&id_data, (data_h)&payload_data);
1047 return _convert_error_code(__func__, ret);
1050 int nfc_ndef_record_create_text(nfc_ndef_record_h* record, const char * text, const char * lang_code, nfc_encode_type_e encode )
1053 if(record == NULL || text == NULL || lang_code == NULL )
1054 return _return_invalid_param(__func__);
1056 ret = net_nfc_create_text_type_record((ndef_record_h*)record, text, lang_code, encode);
1057 return _convert_error_code(__func__, ret);
1060 int nfc_ndef_record_create_uri(nfc_ndef_record_h* record, const char* uri)
1063 if(record == NULL || uri == NULL)
1064 return _return_invalid_param(__func__);
1066 ret = net_nfc_create_uri_type_record((ndef_record_h*)record , uri , NET_NFC_SCHEMA_FULL_URI);
1067 return _convert_error_code(__func__, ret);
1070 int nfc_ndef_record_create_mime(nfc_ndef_record_h* record, const char * mime_type , const unsigned char * data , int data_size)
1072 if(record == NULL || mime_type == NULL || data == NULL)
1073 return _return_invalid_param(__func__);
1074 return nfc_ndef_record_create(record , NFC_RECORD_TNF_MIME_MEDIA , (unsigned char *) mime_type, strlen(mime_type), NULL, 0, data, data_size );
1077 int nfc_ndef_record_get_mime_type(nfc_ndef_record_h record , char **mime_type){
1080 unsigned char *typename;
1083 if(record == NULL || mime_type == NULL)
1084 return _return_invalid_param(__func__);
1085 nfc_record_tnf_e tnf;
1086 if( nfc_ndef_record_get_tnf(record, &tnf ) != 0 || tnf != NFC_RECORD_TNF_MIME_MEDIA ){
1087 return NFC_ERROR_INVALID_RECORD_TYPE;
1090 ret = nfc_ndef_record_get_type(record,&typename, &length);
1092 return _convert_error_code(__func__, ret);
1094 *mime_type = malloc(length+1);
1095 if( *mime_type == NULL ){
1096 LOGE( "OUT_OF_MEMORY (0x%08x)", NFC_ERROR_OUT_OF_MEMORY);
1097 return NFC_ERROR_OUT_OF_MEMORY;
1100 memset(*mime_type, 0 , length+1);
1101 memcpy(*mime_type, typename , length );
1105 int nfc_ndef_record_destroy(nfc_ndef_record_h record)
1109 return _return_invalid_param(__func__);
1111 ret = net_nfc_free_record(record);
1112 return _convert_error_code(__func__, ret);
1115 int nfc_ndef_record_set_id (nfc_ndef_record_h record, unsigned char *id , int id_size)
1118 if(record == NULL || id == NULL )
1119 return _return_invalid_param(__func__);
1121 data_s id_data = {id, id_size};
1122 ret = net_nfc_set_record_id(record, (data_h)&id_data);
1123 return _convert_error_code(__func__, ret);
1126 int nfc_ndef_record_get_payload (nfc_ndef_record_h record, unsigned char ** payload, int *size)
1129 if(record == NULL || payload == NULL || size == NULL )
1130 return _return_invalid_param(__func__);
1132 data_s *payload_data;
1133 ret = net_nfc_get_record_payload(record, (data_h*)&payload_data);
1135 *payload = payload_data->buffer;
1136 *size = payload_data->length;
1138 return _convert_error_code(__func__, ret);
1141 int nfc_ndef_record_get_type (nfc_ndef_record_h record, unsigned char ** type, int *size)
1146 ret = net_nfc_get_record_type(record, (data_h*)&type_data);
1148 *type = type_data->buffer;
1149 *size = type_data->length;
1151 return _convert_error_code(__func__, ret);
1154 int nfc_ndef_record_get_id (nfc_ndef_record_h record, unsigned char **id , int *size)
1157 if(record == NULL || id == NULL || size == NULL )
1158 return _return_invalid_param(__func__);
1162 ret = net_nfc_get_record_id(record, (data_h*)&id_data);
1164 *id = id_data->buffer;
1165 *size = id_data->length;
1167 return _convert_error_code(__func__, ret);
1170 int nfc_ndef_record_get_tnf(nfc_ndef_record_h record, nfc_record_tnf_e * tnf)
1173 if(record == NULL || tnf == NULL )
1174 return _return_invalid_param(__func__);
1176 ret = net_nfc_get_record_tnf(record, (net_nfc_record_tnf_e*)tnf);
1177 return _convert_error_code(__func__, ret);
1180 int nfc_ndef_record_get_text(nfc_ndef_record_h record, char** buffer)
1183 if(record == NULL || buffer == NULL)
1184 return _return_invalid_param(__func__);
1186 ret = net_nfc_create_text_string_from_text_record(record, buffer);
1187 return _convert_error_code(__func__, ret);
1190 int nfc_ndef_record_get_langcode(nfc_ndef_record_h record, char **lang_code)
1193 if(record == NULL || lang_code == NULL)
1194 return _return_invalid_param(__func__);
1196 ret = net_nfc_get_languange_code_string_from_text_record(record, lang_code);
1197 return _convert_error_code(__func__, ret);
1199 int nfc_ndef_record_get_encode_type(nfc_ndef_record_h record, nfc_encode_type_e *encode)
1202 if(record == NULL || encode == NULL )
1203 return _return_invalid_param(__func__);
1205 ret = net_nfc_get_encoding_type_from_text_record(record, (net_nfc_encode_type_e*)encode);
1206 // if( ret == NFC_NDEF_RECORD_IS_NOT_EXPECTED_TYPE)
1207 // LOGE("%s reord type is not text type");
1208 return _convert_error_code(__func__, ret);
1210 int nfc_ndef_record_get_uri(nfc_ndef_record_h record , char **uri)
1213 if(record == NULL || uri == NULL )
1214 return _return_invalid_param(__func__);
1216 ret = net_nfc_create_uri_string_from_uri_record(record, uri);
1217 return _convert_error_code(__func__, ret);
1220 int nfc_ndef_message_create(nfc_ndef_message_h* ndef_message)
1223 if( ndef_message == NULL )
1224 return _return_invalid_param(__func__);
1226 ret = net_nfc_create_ndef_message(ndef_message);
1227 return _convert_error_code(__func__, ret);
1230 int nfc_ndef_message_create_from_rawdata(nfc_ndef_message_h* ndef_message, const unsigned char* rawdata, int rawdata_size)
1233 if( ndef_message == NULL || rawdata == NULL)
1234 return _return_invalid_param(__func__);
1236 data_s rawdata_data = {(unsigned char *)rawdata, rawdata_size};
1237 ret = net_nfc_create_ndef_message_from_rawdata((ndef_message_h*)ndef_message , (data_h)&rawdata_data);
1238 return _convert_error_code(__func__, ret);
1241 int nfc_ndef_message_destroy(nfc_ndef_message_h ndef_message)
1244 if( ndef_message == NULL )
1245 return _return_invalid_param(__func__);
1247 ret = net_nfc_free_ndef_message(ndef_message);
1248 return _convert_error_code(__func__, ret);
1251 int nfc_ndef_message_get_record_count(nfc_ndef_message_h ndef_message , int *count)
1254 if( ndef_message == NULL || count == NULL)
1255 return _return_invalid_param(__func__);
1257 ret = net_nfc_get_ndef_message_record_count(ndef_message , count);
1258 return _convert_error_code(__func__, ret);
1261 int nfc_ndef_message_get_rawdata(nfc_ndef_message_h ndef_message , unsigned char ** rawdata , int *rawdata_size)
1264 if( ndef_message == NULL || rawdata == NULL || rawdata_size == NULL)
1265 return _return_invalid_param(__func__);
1267 data_s *rawdata_data;
1268 ret = net_nfc_create_rawdata_from_ndef_message(ndef_message , (data_h*)&rawdata_data);
1271 *rawdata = rawdata_data->buffer;
1272 *rawdata_size = rawdata_data->length;
1274 return _convert_error_code(__func__, ret);
1277 int nfc_ndef_message_get_rawdata_size(nfc_ndef_message_h ndef_message , int *byte_size)
1280 if( ndef_message == NULL || byte_size == NULL)
1281 return _return_invalid_param(__func__);
1283 ret = net_nfc_get_ndef_message_byte_length(ndef_message , byte_size);
1284 return _convert_error_code(__func__, ret);
1287 int nfc_ndef_message_append_record(nfc_ndef_message_h ndef_message , nfc_ndef_record_h record)
1290 if( ndef_message == NULL || record == NULL)
1291 return _return_invalid_param(__func__);
1293 ret = net_nfc_append_record_to_ndef_message(ndef_message , record );
1294 return _convert_error_code(__func__, ret);
1297 int nfc_ndef_message_insert_record(nfc_ndef_message_h ndef_message , int index, nfc_ndef_record_h record)
1300 if( ndef_message == NULL || record == NULL )
1301 return _return_invalid_param(__func__);
1303 ret = net_nfc_append_record_by_index(ndef_message , index , record);
1304 return _convert_error_code(__func__, ret);
1307 int nfc_ndef_message_remove_record(nfc_ndef_message_h ndef_message , int index)
1310 if( ndef_message == NULL )
1311 return _return_invalid_param(__func__);
1313 ret = net_nfc_remove_record_by_index(ndef_message , index);
1314 return _convert_error_code(__func__, ret);
1317 int nfc_ndef_message_get_record(nfc_ndef_message_h ndef_message , int index , nfc_ndef_record_h *record)
1320 if( ndef_message == NULL || record == NULL)
1321 return _return_invalid_param(__func__);
1323 ret = net_nfc_get_record_by_index(ndef_message , index , (ndef_record_h*)record);
1324 return _convert_error_code(__func__, ret);
1327 int nfc_tag_get_type( nfc_tag_h tag , nfc_tag_type_e *type)
1330 if( tag == NULL || type == NULL)
1331 return _return_invalid_param(__func__);
1333 ret = net_nfc_get_tag_type( tag, (net_nfc_target_type_e*) type);
1334 return _convert_error_code(__func__, ret);
1337 int nfc_tag_is_support_ndef(nfc_tag_h tag, bool * is_support)
1340 if( tag == NULL || is_support== NULL)
1341 return _return_invalid_param(__func__);
1343 ret = net_nfc_get_tag_ndef_support(tag , is_support);
1344 return _convert_error_code(__func__, ret);
1347 int nfc_tag_get_maximum_ndef_size(nfc_tag_h tag , unsigned int * max_size)
1350 if( tag == NULL || max_size == NULL)
1351 return _return_invalid_param(__func__);
1353 ret = net_nfc_get_tag_max_data_size(tag , max_size);
1354 return _convert_error_code(__func__, ret);
1357 int nfc_tag_get_ndef_size(nfc_tag_h tag, unsigned int * actual_data_size)
1360 if( tag == NULL || actual_data_size == NULL)
1361 return _return_invalid_param(__func__);
1363 ret = net_nfc_get_tag_actual_data_size(tag , actual_data_size);
1364 return _convert_error_code(__func__, ret);
1367 int nfc_tag_foreach_information(nfc_tag_h tag , nfc_tag_information_cb callback , void * user_data )
1371 net_nfc_tag_info_s *taglist = g_nfc_context.current_tag->tag_info_list;
1373 if( tag == NULL || callback == NULL )
1374 return _return_invalid_param(__func__);
1376 for(i=0; i<g_nfc_context.current_tag->number_of_keys; i++){
1378 cont = callback(taglist[i].key, net_nfc_get_data_buffer(taglist[i].value), net_nfc_get_data_length(taglist[i].value), user_data);
1386 int nfc_tag_transceive( nfc_tag_h tag, unsigned char * buffer, int buffer_size, nfc_tag_transceive_completed_cb callback , void * user_data )
1390 return _return_invalid_param(__func__);
1392 if(!nfc_manager_is_activated())
1394 return NFC_ERROR_NOT_ACTIVATED;
1397 if(_check_app_permission() == false)
1399 LOGE("permission check fail");
1400 return NFC_ERROR_SECURITY_RESTRICTED;
1404 data_s rawdata = { buffer, buffer_size };
1405 net_nfc_target_info_s *tag_info = (net_nfc_target_info_s*)tag;
1408 _async_callback_data * trans_data = NULL;
1409 if( callback != NULL ){
1410 trans_data = (_async_callback_data*)malloc( sizeof(_async_callback_data));
1411 if(trans_data == NULL )
1412 return NFC_ERROR_OUT_OF_MEMORY;
1413 memset(trans_data , 0 , sizeof(_async_callback_data));
1414 trans_data->callback = callback;
1415 trans_data->user_data = user_data;
1416 trans_data->callback_type = _NFC_CALLBACK_TYPE_DATA;
1418 ret = net_nfc_transceive((net_nfc_target_handle_h)tag_info->handle , (data_h) &rawdata, trans_data );
1421 return _convert_error_code(__func__, ret);
1424 int nfc_tag_read_ndef( nfc_tag_h tag, nfc_tag_read_completed_cb callback , void * user_data)
1428 return _return_invalid_param(__func__);
1430 if(!nfc_manager_is_activated())
1432 return NFC_ERROR_NOT_ACTIVATED;
1436 _async_callback_data * trans_data = NULL;
1437 net_nfc_target_info_s *tag_info = (net_nfc_target_info_s*)tag;
1440 if( callback != NULL ){
1441 trans_data = (_async_callback_data*)malloc( sizeof(_async_callback_data));
1442 if(trans_data == NULL )
1443 return NFC_ERROR_OUT_OF_MEMORY;
1444 memset(trans_data , 0 , sizeof(_async_callback_data));
1445 trans_data->callback = callback;
1446 trans_data->user_data = user_data;
1448 ret = net_nfc_read_tag((net_nfc_target_handle_h)tag_info->handle , trans_data );
1449 return _convert_error_code(__func__, ret);
1452 int nfc_tag_write_ndef(nfc_tag_h tag, nfc_ndef_message_h msg , nfc_tag_write_completed_cb callback , void *user_data)
1456 return _return_invalid_param(__func__);
1458 if(!nfc_manager_is_activated())
1460 return NFC_ERROR_NOT_ACTIVATED;
1463 if(_check_app_permission() == false)
1465 LOGE("permission check fail");
1466 return NFC_ERROR_SECURITY_RESTRICTED;
1470 _async_callback_data * trans_data = NULL;
1471 net_nfc_target_info_s *tag_info = (net_nfc_target_info_s*)tag;
1473 if (tag_info->ndefCardState == NET_NFC_NDEF_CARD_READ_ONLY )
1475 return NFC_ERROR_READ_ONLY_NDEF;
1480 nfc_ndef_message_get_rawdata_size(msg , &byte_size);
1482 if(tag_info->maxDataSize < byte_size)
1484 return NFC_ERROR_NO_SPACE_ON_NDEF;
1489 if( callback != NULL ){
1490 trans_data = (_async_callback_data*)malloc( sizeof(_async_callback_data));
1491 if(trans_data == NULL )
1492 return NFC_ERROR_OUT_OF_MEMORY;
1493 memset(trans_data , 0 , sizeof(_async_callback_data));
1494 trans_data->callback = callback;
1495 trans_data->user_data = user_data;
1497 ret = net_nfc_write_ndef( (net_nfc_target_handle_h)tag_info->handle , msg , trans_data );
1498 return _convert_error_code(__func__, ret);
1501 int nfc_tag_format_ndef(nfc_tag_h tag , unsigned char * key, int key_size , nfc_tag_format_completed_cb callback, void * user_data )
1505 return _return_invalid_param(__func__);
1507 if(!nfc_manager_is_activated())
1509 return NFC_ERROR_NOT_ACTIVATED;
1512 if(_check_app_permission() == false)
1514 LOGE("permission check fail");
1515 return NFC_ERROR_SECURITY_RESTRICTED;
1518 data_s key_data = { key, key_size };
1520 net_nfc_target_info_s *tag_info = (net_nfc_target_info_s*)tag;
1522 _async_callback_data * trans_data = NULL;
1523 if( callback != NULL ){
1524 trans_data = (_async_callback_data*)malloc( sizeof(_async_callback_data));
1525 if(trans_data == NULL )
1526 return NFC_ERROR_OUT_OF_MEMORY;
1527 memset(trans_data , 0 , sizeof(_async_callback_data));
1528 trans_data->callback = callback;
1529 trans_data->user_data = user_data;
1532 ret = net_nfc_format_ndef( (net_nfc_target_handle_h)tag_info->handle, (data_h)&key_data, trans_data );
1533 return _convert_error_code(__func__, ret);
1536 int nfc_mifare_authenticate_with_keyA(nfc_tag_h tag, int sector_index, unsigned char * auth_key, nfc_mifare_authenticate_with_keyA_completed_cb callback, void *user_data)
1540 return _return_invalid_param(__func__);
1542 if(!nfc_manager_is_activated())
1544 return NFC_ERROR_NOT_ACTIVATED;
1547 data_s auth_key_data = { auth_key , 6};
1549 net_nfc_target_info_s *tag_info = (net_nfc_target_info_s*)tag;
1551 _async_callback_data * trans_data = NULL;
1552 if( callback != NULL ){
1553 trans_data = (_async_callback_data*)malloc( sizeof(_async_callback_data));
1554 if(trans_data == NULL )
1555 return NFC_ERROR_OUT_OF_MEMORY;
1556 memset(trans_data , 0 , sizeof(_async_callback_data));
1557 trans_data->callback = callback;
1558 trans_data->user_data = user_data;
1559 trans_data->callback_type = _NFC_CALLBACK_TYPE_RESULT;
1562 ret = net_nfc_mifare_authenticate_with_keyA( (net_nfc_target_handle_h)tag_info->handle, sector_index, (data_h)&auth_key_data, trans_data);
1563 return _convert_error_code(__func__, ret);
1566 int nfc_mifare_authenticate_with_keyB(nfc_tag_h tag, int sector_index, unsigned char * auth_key, nfc_mifare_authenticate_with_keyB_completed_cb callback, void *user_data)
1570 return _return_invalid_param(__func__);
1572 if(!nfc_manager_is_activated())
1574 return NFC_ERROR_NOT_ACTIVATED;
1577 data_s auth_key_data = { auth_key , 6};
1579 _async_callback_data * trans_data = NULL;
1580 net_nfc_target_info_s *tag_info = (net_nfc_target_info_s*)tag;
1582 if( callback != NULL ){
1583 trans_data = (_async_callback_data*)malloc( sizeof(_async_callback_data));
1584 if(trans_data == NULL )
1585 return NFC_ERROR_OUT_OF_MEMORY;
1586 memset(trans_data , 0 , sizeof(_async_callback_data));
1587 trans_data->callback = callback;
1588 trans_data->user_data = user_data;
1589 trans_data->callback_type = _NFC_CALLBACK_TYPE_RESULT;
1592 ret = net_nfc_mifare_authenticate_with_keyB( (net_nfc_target_handle_h)tag_info->handle, sector_index, (data_h)&auth_key_data, trans_data);
1593 return _convert_error_code(__func__, ret);
1596 int nfc_mifare_read_block(nfc_tag_h tag, int block_index, nfc_mifare_read_block_completed_cb callback, void *user_data)
1600 return _return_invalid_param(__func__);
1602 if(!nfc_manager_is_activated())
1604 return NFC_ERROR_NOT_ACTIVATED;
1608 _async_callback_data * trans_data = NULL;
1609 net_nfc_target_info_s *tag_info = (net_nfc_target_info_s*)tag;
1611 if( callback != NULL ){
1612 trans_data = (_async_callback_data*)malloc( sizeof(_async_callback_data));
1613 if(trans_data == NULL )
1614 return NFC_ERROR_OUT_OF_MEMORY;
1615 memset(trans_data , 0 , sizeof(_async_callback_data));
1616 trans_data->callback = callback;
1617 trans_data->user_data = user_data;
1618 trans_data->callback_type = _NFC_CALLBACK_TYPE_DATA;
1621 ret = net_nfc_mifare_read( (net_nfc_target_handle_h)tag_info->handle, block_index, trans_data);
1622 return _convert_error_code(__func__, ret);
1625 int nfc_mifare_read_page(nfc_tag_h tag, int page_index, nfc_mifare_read_block_completed_cb callback, void *user_data)
1627 if(!nfc_manager_is_activated())
1629 return NFC_ERROR_NOT_ACTIVATED;
1632 return nfc_mifare_read_block(tag, page_index, callback, user_data);
1635 int nfc_mifare_write_block (nfc_tag_h tag, int block_index, unsigned char* buffer, int buffer_size, nfc_mifare_write_block_completed_cb callback, void* user_data)
1639 return _return_invalid_param(__func__);
1641 if(!nfc_manager_is_activated())
1643 return NFC_ERROR_NOT_ACTIVATED;
1647 data_s block_data = { buffer , buffer_size};
1648 _async_callback_data * trans_data = NULL;
1649 net_nfc_target_info_s *tag_info = (net_nfc_target_info_s*)tag;
1651 if( callback != NULL ){
1652 trans_data = (_async_callback_data*)malloc( sizeof(_async_callback_data));
1653 if(trans_data == NULL )
1654 return NFC_ERROR_OUT_OF_MEMORY;
1655 memset(trans_data , 0 , sizeof(_async_callback_data));
1656 trans_data->callback = callback;
1657 trans_data->user_data = user_data;
1658 trans_data->callback_type = _NFC_CALLBACK_TYPE_RESULT;
1661 ret = net_nfc_mifare_write_block( (net_nfc_target_handle_h)tag_info->handle, block_index, (data_h)&block_data, trans_data);
1662 return _convert_error_code(__func__, ret);
1665 int nfc_mifare_write_page(nfc_tag_h tag, int page_index, unsigned char* buffer, int buffer_size, nfc_mifare_write_block_completed_cb callback, void* user_data)
1669 return _return_invalid_param(__func__);
1671 if(!nfc_manager_is_activated())
1673 return NFC_ERROR_NOT_ACTIVATED;
1677 data_s block_data = { buffer , buffer_size};
1678 _async_callback_data * trans_data = NULL;
1680 net_nfc_target_info_s *tag_info = (net_nfc_target_info_s*)tag;
1683 if( callback != NULL ){
1684 trans_data = (_async_callback_data*)malloc( sizeof(_async_callback_data));
1685 if(trans_data == NULL )
1686 return NFC_ERROR_OUT_OF_MEMORY;
1687 memset(trans_data , 0 , sizeof(_async_callback_data));
1688 trans_data->callback = callback;
1689 trans_data->user_data = user_data;
1690 trans_data->callback_type = _NFC_CALLBACK_TYPE_RESULT;
1693 ret = net_nfc_mifare_write_page( (net_nfc_target_handle_h)tag_info->handle, page_index, (data_h)&block_data, trans_data);
1694 return _convert_error_code(__func__, ret);
1697 int nfc_mifare_increment(nfc_tag_h tag, int block_index, int value, nfc_mifare_increment_completed_cb callback, void *user_data)
1701 return _return_invalid_param(__func__);
1703 if(!nfc_manager_is_activated())
1705 return NFC_ERROR_NOT_ACTIVATED;
1709 _async_callback_data * trans_data = NULL;
1710 net_nfc_target_info_s *tag_info = (net_nfc_target_info_s*)tag;
1712 if( callback != NULL ){
1713 trans_data = (_async_callback_data*)malloc( sizeof(_async_callback_data));
1714 if(trans_data == NULL )
1715 return NFC_ERROR_OUT_OF_MEMORY;
1716 memset(trans_data , 0 , sizeof(_async_callback_data));
1717 trans_data->callback = callback;
1718 trans_data->user_data = user_data;
1719 trans_data->callback_type = _NFC_CALLBACK_TYPE_RESULT;
1722 ret = net_nfc_mifare_increment( (net_nfc_target_handle_h)tag_info->handle, block_index,value, trans_data);
1723 return _convert_error_code(__func__, ret);
1727 int nfc_mifare_decrement(nfc_tag_h tag, int block_index, int value, nfc_mifare_decrement_completed_cb callback, void *user_data)
1731 return _return_invalid_param(__func__);
1733 if(!nfc_manager_is_activated())
1735 return NFC_ERROR_NOT_ACTIVATED;
1739 _async_callback_data * trans_data = NULL;
1740 net_nfc_target_info_s *tag_info = (net_nfc_target_info_s*)tag;
1743 if( callback != NULL ){
1744 trans_data = (_async_callback_data*)malloc( sizeof(_async_callback_data));
1745 if(trans_data == NULL )
1746 return NFC_ERROR_OUT_OF_MEMORY;
1747 memset(trans_data , 0 , sizeof(_async_callback_data));
1748 trans_data->callback = callback;
1749 trans_data->user_data = user_data;
1750 trans_data->callback_type = _NFC_CALLBACK_TYPE_RESULT;
1753 ret = net_nfc_mifare_decrement( (net_nfc_target_handle_h)tag_info->handle, block_index,value, trans_data);
1754 return _convert_error_code(__func__, ret);
1757 int nfc_mifare_transfer(nfc_tag_h tag, int block_index, nfc_mifare_transfer_completed_cb callback, void *user_data)
1761 return _return_invalid_param(__func__);
1763 if(!nfc_manager_is_activated())
1765 return NFC_ERROR_NOT_ACTIVATED;
1769 _async_callback_data * trans_data = NULL;
1770 net_nfc_target_info_s *tag_info = (net_nfc_target_info_s*)tag;
1773 if( callback != NULL ){
1774 trans_data = (_async_callback_data*)malloc( sizeof(_async_callback_data));
1775 if(trans_data == NULL )
1776 return NFC_ERROR_OUT_OF_MEMORY;
1777 memset(trans_data , 0 , sizeof(_async_callback_data));
1778 trans_data->callback = callback;
1779 trans_data->user_data = user_data;
1780 trans_data->callback_type = _NFC_CALLBACK_TYPE_RESULT;
1783 ret = net_nfc_mifare_transfer( (net_nfc_target_handle_h)tag_info->handle, block_index, trans_data);
1784 return _convert_error_code(__func__, ret);
1787 int nfc_mifare_restore(nfc_tag_h tag, int block_index, nfc_mifare_restore_completed_cb callback, void *user_data)
1791 return _return_invalid_param(__func__);
1793 if(!nfc_manager_is_activated())
1795 return NFC_ERROR_NOT_ACTIVATED;
1800 _async_callback_data * trans_data = NULL;
1801 net_nfc_target_info_s *tag_info = (net_nfc_target_info_s*)tag;
1803 if( callback != NULL ){
1804 trans_data = (_async_callback_data*)malloc( sizeof(_async_callback_data));
1805 if(trans_data == NULL )
1806 return NFC_ERROR_OUT_OF_MEMORY;
1807 memset(trans_data , 0 , sizeof(_async_callback_data));
1808 trans_data->callback = callback;
1809 trans_data->user_data = user_data;
1810 trans_data->callback_type = _NFC_CALLBACK_TYPE_RESULT;
1813 ret = net_nfc_mifare_restore( (net_nfc_target_handle_h)tag_info->handle, block_index, trans_data);
1814 return _convert_error_code(__func__, ret);
1817 int nfc_p2p_send(nfc_p2p_target_h target , nfc_ndef_message_h message , nfc_p2p_send_completed_cb callback, void *user_data){
1820 if( target == NULL || message == NULL )
1821 return _return_invalid_param(__func__);
1823 if(!nfc_manager_is_activated())
1825 return NFC_ERROR_NOT_ACTIVATED;
1828 if(_check_app_permission() == false)
1830 LOGE("permission check fail");
1831 return NFC_ERROR_SECURITY_RESTRICTED;
1834 net_nfc_exchanger_data_h data_handle;
1836 net_nfc_create_rawdata_from_ndef_message(message, &rawdata);
1837 ret = net_nfc_create_exchanger_data(&data_handle, rawdata);
1838 net_nfc_free_data(rawdata);
1842 return _convert_error_code(__func__, ret);
1844 ret = net_nfc_send_exchanger_data(data_handle ,(net_nfc_target_handle_h)target, NULL);
1847 net_nfc_free_exchanger_data(data_handle);
1848 return _convert_error_code(__func__, ret);
1851 g_nfc_context.on_p2p_send_completed_cb = callback;
1852 g_nfc_context.on_p2p_send_completed_user_data = user_data;
1854 ret = net_nfc_free_exchanger_data(data_handle);
1857 return _convert_error_code(__func__, ret);
1863 int nfc_p2p_connection_handover(nfc_p2p_target_h target , nfc_ac_type_e type, nfc_p2p_connection_handover_completed_cb callback, void *user_data){
1865 net_nfc_conn_handover_carrier_type_e net_ac_type = NET_NFC_CONN_HANDOVER_CARRIER_UNKNOWN;
1866 if( target == NULL )
1867 return _return_invalid_param(__func__);
1869 if( type > NFC_AC_TYPE_UNKNOWN )
1870 return _return_invalid_param(__func__);
1872 if(!nfc_manager_is_activated())
1874 return NFC_ERROR_NOT_ACTIVATED;
1878 case NFC_AC_TYPE_BT:
1879 net_ac_type = NET_NFC_CONN_HANDOVER_CARRIER_BT;
1881 case NFC_AC_TYPE_WIFI:
1882 net_ac_type = NET_NFC_CONN_HANDOVER_CARRIER_WIFI_BSS;
1884 case NFC_AC_TYPE_WIFI_DIRECT:
1885 net_ac_type = NET_NFC_CONN_HANDOVER_CARRIER_WIFI_IBSS;
1887 case NFC_AC_TYPE_UNKNOWN :
1888 net_ac_type = NET_NFC_CONN_HANDOVER_CARRIER_UNKNOWN;
1894 ret = net_nfc_exchanger_request_connection_handover((net_nfc_target_handle_h)target, net_ac_type);
1897 return _convert_error_code(__func__, ret);
1900 g_nfc_context.on_p2p_connection_handover_completed_cb = callback;
1901 g_nfc_context.on_p2p_connection_handover_completed_user_data = user_data;
1906 bool nfc_p2p_is_supported_ac_type( nfc_ac_type_e carrior){
1908 if( carrior > NFC_AC_TYPE_UNKNOWN )
1912 if( carrior == NFC_AC_TYPE_BT){
1920 int nfc_p2p_set_data_received_cb(nfc_p2p_target_h target, nfc_p2p_data_recived_cb callback, void *user_data){
1921 if( target == NULL || callback == NULL )
1922 return _return_invalid_param(__func__);
1924 // if( g_nfc_context.current_target.connection_id != ((net_nfc_target_handle_s*)target)->connection_id )
1925 if(g_nfc_context.current_target != target )
1926 return _return_invalid_param(__func__);
1928 g_nfc_context.on_p2p_recv_cb = callback;
1929 g_nfc_context.on_p2p_recv_user_data = user_data;
1933 int nfc_p2p_unset_data_received_cb(nfc_p2p_target_h target){
1934 if( target == NULL )
1935 return _return_invalid_param(__func__);
1937 // if( g_nfc_context.current_target.connection_id != ((net_nfc_target_handle_s*)target)->connection_id )
1938 if(g_nfc_context.current_target != target )
1939 return _return_invalid_param(__func__);
1941 g_nfc_context.on_p2p_recv_cb = NULL;
1942 g_nfc_context.on_p2p_recv_user_data = NULL;
1946 int nfc_manager_set_p2p_target_discovered_cb( nfc_p2p_target_discovered_cb callback , void *user_data){
1947 if( callback == NULL )
1948 return _return_invalid_param(__func__);
1949 g_nfc_context.on_p2p_discovered_cb = callback;
1950 g_nfc_context.on_p2p_discovered_user_data = user_data;
1954 void nfc_manager_unset_p2p_target_discovered_cb( void ){
1955 g_nfc_context.on_p2p_discovered_cb = NULL;
1956 g_nfc_context.on_p2p_discovered_user_data = NULL;
1959 int nfc_manager_set_se_event_cb(nfc_se_event_cb callback, void *user_data){
1960 if( callback == NULL )
1961 return _return_invalid_param(__func__);
1962 g_nfc_context.on_se_event_cb = callback;
1963 g_nfc_context.on_se_event_user_data = user_data;
1967 void nfc_manager_unset_se_event_cb(void){
1968 g_nfc_context.on_se_event_cb = NULL;
1969 g_nfc_context.on_se_event_user_data = NULL;
1972 int nfc_manager_set_se_transaction_event_cb(nfc_se_transaction_event_cb callback, void *user_data){
1973 if( callback == NULL )
1974 return _return_invalid_param(__func__);
1975 g_nfc_context.on_se_transaction_event_cb = callback;
1976 g_nfc_context.on_se_transaction_event_user_data = user_data;
1980 void nfc_manager_unset_se_transaction_event_cb(void){
1981 g_nfc_context.on_se_transaction_event_cb = NULL;
1982 g_nfc_context.on_se_transaction_event_user_data = NULL;