8 #include "net_nfc_typedef.h"
9 #include "net_nfc_debug_internal.h"
10 #include "net_nfc_util_internal.h"
11 #include "net_nfc_util_ndef_message.h"
12 #include "net_nfc_client_util.h"
16 /* TODO get real data */
17 #define NET_NFC_JEWEL_PICC_MAX_SIZE 116
18 #define NET_NFC_MIFARE_ULTRA_PICC_MAX_SIZE 48
19 #define NET_NFC_FELICA_PICC_MAX_SIZE 256
20 #define NET_NFC_MIFARE_DESFIRE_PICC_MAX_SIZE 2048
22 typedef struct _net_nfc_client_cb
24 net_nfc_client_manager_set_active_completed active_cb;
27 /* callback for power status changed */
28 net_nfc_client_manager_activated activated_cb;
31 net_nfc_client_tag_tag_discovered tag_discovered_cb;
32 void *tag_discovered_ud;
33 net_nfc_client_tag_tag_detached tag_detached_cb;
34 void *tag_detached_ud;
36 net_nfc_client_ndef_read_completed ndef_read_cb;
38 net_nfc_client_ndef_write_completed ndef_write_cb;
41 net_nfc_client_p2p_device_discovered p2p_discovered_cb;
42 void *p2p_discovered_ud;
43 net_nfc_client_p2p_device_detached p2p_detached_cb;
44 void *p2p_detached_ud;
45 net_nfc_client_p2p_send_completed p2p_send_completed_cb;
46 void *p2p_send_completed_ud;
47 net_nfc_client_p2p_data_received p2p_data_received_cb;
48 void *p2p_data_received_ud;
49 net_nfc_p2p_connection_handover_completed_cb p2p_handover_cb;
50 void *p2p_handover_ud;
53 static net_nfc_client_cb client_cb;
55 static char *nfc_adapter_path;
56 static bool nfc_adapter_powered;
57 static bool nfc_adapter_polling;
58 static char *nfc_adapter_mode;
59 static neardal_tag *tag;
60 static neardal_dev *dev;
61 static data_s *rawNDEF;
62 static net_nfc_target_info_s *target_info;
63 static net_nfc_target_handle_s *target_handle;
64 static net_nfc_connection_handover_info_s *handover_info;
65 static bool read_flag;
67 static net_nfc_error_e _convert_error_code(errorCode_t error_code)
72 case NEARDAL_ERROR_GENERAL_ERROR:
73 return NET_NFC_UNKNOWN_ERROR;
74 case NEARDAL_ERROR_INVALID_PARAMETER:
75 return NET_NFC_INVALID_PARAM;
76 case NEARDAL_ERROR_NO_MEMORY:
77 return NET_NFC_ALLOC_FAIL;
78 case NEARDAL_ERROR_DBUS:
79 case NEARDAL_ERROR_DBUS_CANNOT_CREATE_PROXY:
80 case NEARDAL_ERROR_DBUS_CANNOT_INVOKE_METHOD:
81 case NEARDAL_ERROR_DBUS_INVOKE_METHOD_ERROR:
82 return NET_NFC_OPERATION_FAIL;
83 case NEARDAL_ERROR_NO_ADAPTER:
84 return NET_NFC_NOT_SUPPORTED;
85 case NEARDAL_ERROR_POLLING_ALREADY_ACTIVE:
86 return NET_NFC_ALREADY_REGISTERED;
87 case NEARDAL_ERROR_NO_TAG:
88 case NEARDAL_ERROR_INVALID_RECORD:
89 return NET_NFC_TAG_READ_FAILED;
90 case NEARDAL_ERROR_NO_RECORD:
91 return NET_NFC_NO_DATA_FOUND;
92 case NEARDAL_ERROR_NO_DEV:
93 return NET_NFC_TARGET_IS_MOVED_AWAY;
95 return NET_NFC_UNKNOWN_ERROR;
99 static int _convert_target_type(const char *type)
103 /* TODO tag sub types */
106 return NET_NFC_UNKNOWN_TARGET;
108 if (!g_strcmp0(type, "Type 1"))
109 t_type = NET_NFC_JEWEL_PICC;
110 else if (!g_strcmp0(type, "Type 2"))
111 t_type = NET_NFC_MIFARE_ULTRA_PICC;
113 NET_NFC_MIFARE_MINI_PICC
114 NET_NFC_MIFARE_1K_PICC
115 NET_NFC_MIFARE_4K_PICC
116 NET_NFC_MIFARE_ULTRA_PICC
118 else if (!g_strcmp0(type, "Type 3"))
119 t_type = NET_NFC_FELICA_PICC;
120 else if (!g_strcmp0(type, "Type 4"))
121 t_type = NET_NFC_MIFARE_DESFIRE_PICC;
122 else if (!g_strcmp0(type, "Target"))
123 t_type = NET_NFC_NFCIP1_TARGET;
124 else if (!g_strcmp0(type, "Initiator"))
125 t_type = NET_NFC_NFCIP1_INITIATOR;
127 t_type = NET_NFC_UNKNOWN_TARGET;
132 static const char *carrier2string(net_nfc_conn_handover_carrier_type_e type)
135 case NET_NFC_CONN_HANDOVER_CARRIER_BT:
137 case NET_NFC_CONN_HANDOVER_CARRIER_WIFI_BSS:
146 static uint32_t _get_tag_id(const char *name)
151 s = g_strsplit(name, "tag", 2);
158 static uint32_t _get_dev_id(const char *name)
163 s = g_strsplit(name, "device", 2);
170 static bool _check_ndef(uint8_t *ndef_card_state,
174 if (ndef_card_state == NULL ||
175 max_data_size == NULL || real_data_size == NULL) {
180 if (tag == NULL || rawNDEF == NULL)
184 *ndef_card_state = NET_NFC_NDEF_CARD_READ_ONLY;
186 *ndef_card_state = NET_NFC_NDEF_CARD_READ_WRITE;
188 /* TODO get real data */
189 switch (_convert_target_type(tag->type)) {
190 case NET_NFC_JEWEL_PICC:
191 *max_data_size = NET_NFC_JEWEL_PICC_MAX_SIZE;
194 case NET_NFC_MIFARE_ULTRA_PICC:
195 *max_data_size = NET_NFC_MIFARE_ULTRA_PICC_MAX_SIZE;
198 case NET_NFC_FELICA_PICC:
199 *max_data_size = NET_NFC_FELICA_PICC_MAX_SIZE;
202 case NET_NFC_MIFARE_DESFIRE_PICC:
203 *max_data_size = NET_NFC_MIFARE_DESFIRE_PICC_MAX_SIZE;
207 *real_data_size = rawNDEF->length;
212 static void _adapter_added_cb(const char *name, void *user_data)
214 NFC_DBG("adapter added %s", name);
216 if (nfc_adapter_path) {
217 g_free(nfc_adapter_path);
218 nfc_adapter_path = NULL;
222 nfc_adapter_path = g_strdup(name);
225 static void _adapter_removed_cb(const char *name, void *user_data)
227 NFC_DBG("adapter removed %s", name);
229 if (nfc_adapter_path) {
230 g_free(nfc_adapter_path);
231 nfc_adapter_path = NULL;
235 static void _adapter_property_changed_cb(char *name, char *property,
236 void *value, void *user_data)
238 NFC_DBG("adapter name %s, property %s", name, property);
240 if (!g_strcmp0(property, "Polling")) {
241 if ((int *) value == 0)
242 nfc_adapter_polling = false;
244 nfc_adapter_polling = true;
245 } else if (!g_strcmp0(property, "Mode")) {
246 if (nfc_adapter_mode) {
247 g_free(nfc_adapter_mode);
248 nfc_adapter_mode = NULL;
251 nfc_adapter_mode = g_strdup((char *)value);
252 } else if (!g_strcmp0(property, "Powered")) {
253 if ((int *) value == 0)
254 nfc_adapter_powered = false;
256 nfc_adapter_powered = true;
258 if (client_cb.activated_cb != NULL)
259 client_cb.activated_cb(nfc_adapter_powered, client_cb.activated_ud);
263 static void _power_completed_cb(errorCode_t error_code, void *user_data)
266 neardal_adapter *neard_adapter = NULL;
268 net_nfc_error_e result;
270 NFC_DBG("power completed adapter path %s", nfc_adapter_path);
271 if (nfc_adapter_path == NULL)
274 err = neardal_get_adapter_properties(nfc_adapter_path, &neard_adapter);
275 if (err != NEARDAL_SUCCESS)
278 NFC_DBG("power completed %d", neard_adapter->powered);
279 powered = (neard_adapter->powered) ? true : false;
281 if (powered == true) {
282 if (nfc_adapter_polling == false) {
283 err = neardal_start_poll_loop(nfc_adapter_path,
284 NEARD_ADP_MODE_DUAL);
286 if (err == NEARDAL_SUCCESS)
287 nfc_adapter_polling = true;
292 if (client_cb.active_cb != NULL && client_cb.active_ud != NULL) {
293 result = _convert_error_code(error_code);
295 client_cb.active_cb(result, client_cb.active_ud);
297 client_cb.active_cb = NULL;
298 client_cb.active_ud = NULL;
302 static void _tag_found_cb(const char *tagName, void *user_data)
304 NFC_DBG("NFC tag found tagName: %s", tagName);
306 if (neardal_get_tag_properties(tagName, &tag) != NEARDAL_SUCCESS)
311 net_nfc_manager_util_play_sound(NET_NFC_TASK_START);
312 if (neardal_tag_get_rawNDEF(tag->name)
313 != NEARDAL_SUCCESS) {
314 NFC_DBG("Failed to get rawNDEF");
321 static void _tag_lost_cb(const char *tagName, void *user_data)
323 NFC_DBG("NFC tag lost");
326 neardal_free_tag(tag);
330 if (rawNDEF != NULL) {
331 net_nfc_util_free_data(rawNDEF);
335 if (target_handle != NULL) {
336 g_free(target_handle);
337 target_handle = NULL;
340 if (target_info != NULL) {
345 if (nfc_adapter_polling == true)
348 if (neardal_start_poll_loop(nfc_adapter_path, NEARD_ADP_MODE_DUAL)
350 nfc_adapter_polling = true;
352 if (client_cb.tag_detached_cb != NULL)
353 client_cb.tag_detached_cb(client_cb.tag_detached_ud);
356 static void _create_target_info(data_s *data)
358 uint8_t ndefCardstate;
359 int actualDataSize, maxDataSize = 0;
362 if (target_info == NULL)
363 target_info = g_try_malloc0(sizeof(net_nfc_target_info_s));
365 if (target_info == NULL) {
366 NFC_DBG("target_info mem alloc is failed");
369 if (target_handle == NULL)
370 target_handle = g_try_malloc0(sizeof(net_nfc_target_handle_s));
372 if (target_handle == NULL) {
373 NFC_DBG("handle mem alloc is failed");
377 target_handle->connection_id = _get_tag_id(tag->name);
378 target_handle->connection_type = NET_NFC_TAG_CONNECTION;
379 target_handle->target_type = _convert_target_type(tag->type);
381 ndef_support = _check_ndef(&ndefCardstate, &maxDataSize,
384 if (ndef_support == false) {
390 target_info->ndefCardState = ndefCardstate;
391 target_info->actualDataSize = actualDataSize;
392 target_info->maxDataSize = maxDataSize;
393 target_info->devType = _convert_target_type(tag->type);
394 target_info->handle = target_handle;
395 target_info->is_ndef_supported = ndef_support;
396 target_info->number_of_keys = 0;
397 target_info->tag_info_list = NULL;
398 target_info->raw_data = *data;
401 static void _read_completed_cb(GVariant *ret, void *user_data)
405 ndef_message_s *ndef = NULL;
406 net_nfc_error_e result = NET_NFC_TAG_READ_FAILED;
408 NFC_DBG("read completed cb adapter path %s", nfc_adapter_path);
413 value = g_variant_get_data(ret);
414 length = g_variant_get_size(ret);
419 if (rawNDEF != NULL) {
420 net_nfc_util_free_data(rawNDEF);
424 rawNDEF = g_try_malloc0(sizeof(data_s));
428 rawNDEF->length = (int)length;
429 rawNDEF->buffer = g_try_malloc0(rawNDEF->length);
430 if (rawNDEF->length > 0 && rawNDEF->buffer == NULL) {
435 memcpy(rawNDEF->buffer, value, rawNDEF->length);
437 net_nfc_app_util_process_ndef(rawNDEF);
438 _create_target_info(rawNDEF);
440 if (net_nfc_util_create_ndef_message(&ndef) != NET_NFC_OK) {
441 NFC_DBG("ndef memory alloc fail..");
444 result = net_nfc_util_convert_rawdata_to_ndef_message(
447 if (client_cb.tag_discovered_cb != NULL && read_flag == true) {
448 client_cb.tag_discovered_cb(target_info,
449 client_cb.tag_discovered_ud);
454 if (client_cb.ndef_read_cb != NULL) {
455 client_cb.ndef_read_cb(result, ndef, client_cb.ndef_read_ud);
457 net_nfc_util_free_ndef_message(ndef);
458 client_cb.ndef_read_cb = NULL;
459 client_cb.ndef_read_ud = NULL;
463 static void _write_completed_cb(errorCode_t error_code, void *user_data)
465 net_nfc_error_e result;
467 NFC_DBG("write completed cb adapter path %s", nfc_adapter_path);
469 result = _convert_error_code(error_code);
471 if (client_cb.ndef_write_cb != NULL) {
472 client_cb.ndef_write_cb(result, client_cb.ndef_write_ud);
474 client_cb.ndef_write_cb = NULL;
475 client_cb.ndef_write_ud = NULL;
479 static void _device_found_cb(const char *devName, void *user_data)
483 NFC_DBG("p2p device found %s", devName);
484 if (neardal_get_dev_properties(devName, &dev) != NEARDAL_SUCCESS)
487 if (target_handle == NULL)
488 target_handle = g_try_malloc0(sizeof(net_nfc_target_handle_s));
490 if (target_handle == NULL) {
491 NFC_DBG("handle mem alloc is failed");
496 devType = _convert_target_type(nfc_adapter_mode);
497 if (devType == NET_NFC_NFCIP1_INITIATOR)
498 target_handle->connection_type = NET_NFC_P2P_CONNECTION_TARGET;
499 else if (devType == NET_NFC_NFCIP1_TARGET)
500 target_handle->connection_type =
501 NET_NFC_P2P_CONNECTION_INITIATOR;
502 target_handle->connection_id = _get_dev_id(devName);
503 target_handle->target_type = devType;
505 if (client_cb.p2p_discovered_cb != NULL)
506 client_cb.p2p_discovered_cb(target_handle, client_cb.p2p_discovered_ud);
509 static void _device_lost_cb(const char *devName, void *user_data)
513 NFC_DBG("p2p device lost %s", devName);
514 if (target_handle != NULL) {
515 g_free(target_handle);
516 target_handle = NULL;
519 if (nfc_adapter_polling == true)
522 if (nfc_adapter_path == NULL)
525 err = neardal_start_poll_loop(nfc_adapter_path,
526 NEARD_ADP_MODE_DUAL);
527 if (err != NEARDAL_SUCCESS)
530 nfc_adapter_polling = true;
533 if (client_cb.p2p_detached_cb != NULL)
534 client_cb.p2p_detached_cb(client_cb.p2p_detached_ud);
537 static void _p2p_received_cb(GVariant *ret, void *user_data)
542 NFC_DBG("p2p received cb adapter path %s", nfc_adapter_path);
543 if (nfc_adapter_path == NULL)
549 value = g_variant_get_data(ret);
550 length = g_variant_get_size(ret);
555 if (rawNDEF != NULL) {
556 net_nfc_util_free_data(rawNDEF);
560 rawNDEF = g_try_malloc0(sizeof(data_s));
564 rawNDEF->length = (int)length;
565 rawNDEF->buffer = g_try_malloc0(rawNDEF->length);
566 if (rawNDEF->buffer == NULL) {
571 memcpy(rawNDEF->buffer, value, rawNDEF->length);
573 net_nfc_app_util_process_ndef(rawNDEF);
575 if (client_cb.p2p_data_received_cb != NULL)
576 client_cb.p2p_data_received_cb(rawNDEF, client_cb.p2p_data_received_ud);
579 net_nfc_error_e net_nfc_neard_p2p_connection_handover(
580 net_nfc_target_handle_s *handle,
581 net_nfc_conn_handover_carrier_type_e arg_type,
582 net_nfc_p2p_connection_handover_completed_cb callback,
585 neardal_record *record;
588 NFC_DBG("neard send p2p handover");
590 if (target_handle == NULL || handle != target_handle)
591 return NET_NFC_TARGET_IS_MOVED_AWAY;
593 carrier = carrier2string(arg_type);
596 return NET_NFC_NOT_SUPPORTED;
598 record = g_try_malloc0(sizeof(neardal_record));
600 return NET_NFC_ALLOC_FAIL;
602 record->name = g_strdup(dev->name);
603 record->type = g_strdup("Handover");
604 record->carrier = g_strdup(carrier);
606 if (neardal_dev_push(record) != NEARDAL_SUCCESS) {
607 neardal_free_record(record);
608 return NET_NFC_P2P_SEND_FAIL;
611 if (handover_info == NULL)
612 handover_info = g_try_malloc0(
613 sizeof(net_nfc_connection_handover_info_s));
615 if (handover_info == NULL) {
616 NFC_DBG("handover_info mem alloc is failed");
617 return NET_NFC_ALLOC_FAIL;
620 handover_info->type = arg_type;
621 handover_info->data.buffer = NULL;
622 handover_info->data.length = 0;
624 neardal_free_record(record);
626 client_cb.p2p_handover_cb = callback;
627 client_cb.p2p_handover_ud = cb_data;
632 static void _p2p_send_completed_cb(errorCode_t error_code, void *user_data)
634 net_nfc_error_e result;
636 NFC_DBG("p2p send completed cb error code %d", error_code);
638 result = _convert_error_code(error_code);
640 if (client_cb.p2p_send_completed_cb != NULL)
641 client_cb.p2p_send_completed_cb(result,
642 client_cb.p2p_send_completed_ud);
644 if (client_cb.p2p_handover_cb != NULL) {
645 if (handover_info != NULL) {
646 client_cb.p2p_handover_cb(result, handover_info->type,
647 &(handover_info->data),
648 client_cb.p2p_handover_ud);
650 g_free(handover_info);
651 handover_info = NULL;
654 client_cb.p2p_handover_cb = NULL;
655 client_cb.p2p_handover_ud = NULL;
659 net_nfc_error_e net_nfc_neard_send_p2p(net_nfc_target_handle_s *handle, data_s *data,
660 net_nfc_client_p2p_send_completed callback, void *user_data)
662 neardal_record *record;
664 NFC_DBG("neard send p2p");
666 if (target_handle == NULL || handle != target_handle)
667 return NET_NFC_TARGET_IS_MOVED_AWAY;
669 if ((data->buffer == NULL && data->length != 0) ||
670 (data->buffer != NULL && data->length == 0))
671 return NET_NFC_NULL_PARAMETER;
673 record = g_try_malloc0(sizeof(neardal_record));
675 return NET_NFC_ALLOC_FAIL;
677 record->name = g_strdup(dev->name);
678 record->type = g_strdup("Raw");
679 record->rawNDEF = g_try_malloc0(data->length);
680 if (record->rawNDEF == NULL) {
681 neardal_free_record(record);
682 return NET_NFC_ALLOC_FAIL;
685 memcpy(record->rawNDEF, data->buffer, data->length);
686 record->rawNDEFSize = data->length;
688 if (neardal_dev_push(record) != NEARDAL_SUCCESS) {
689 neardal_free_record(record);
690 return NET_NFC_TAG_WRITE_FAILED;
693 neardal_free_record(record);
695 NFC_DBG("neard send p2p successfully");
696 client_cb.p2p_send_completed_cb = callback;
697 client_cb.p2p_send_completed_ud = user_data;
701 net_nfc_error_e net_nfc_neard_get_current_tag_info(net_nfc_target_info_s **info)
704 if (target_info == NULL)
705 return NET_NFC_NOT_CONNECTED;
712 net_nfc_error_e net_nfc_neard_get_current_target_handle(
713 net_nfc_target_handle_s **handle)
715 net_nfc_error_e result = NET_NFC_OK;
717 if (target_handle == NULL || target_info == NULL) {
718 result = NET_NFC_NOT_CONNECTED;
719 } else if (NET_NFC_NFCIP1_INITIATOR == target_info->devType ||
720 NET_NFC_NFCIP1_TARGET == target_info->devType) {
722 *handle = target_info->handle;
726 result = NET_NFC_NOT_CONNECTED;
732 net_nfc_error_e net_nfc_neard_read_tag(net_nfc_target_handle_s *handle,
733 net_nfc_client_ndef_read_completed callback, void *user_data)
735 if (handle != target_handle || rawNDEF == NULL)
736 return NET_NFC_TARGET_IS_MOVED_AWAY;
738 if (tag == NULL || tag->records == NULL)
739 return NET_NFC_TARGET_IS_MOVED_AWAY;
741 if (neardal_tag_get_rawNDEF(tag->name)
742 != NEARDAL_SUCCESS) {
743 NFC_DBG("Failed to get rawNDEF");
744 return NET_NFC_TAG_READ_FAILED;
747 client_cb.ndef_read_cb = callback;
748 client_cb.ndef_read_ud = user_data;
753 net_nfc_error_e net_nfc_neard_write_ndef(net_nfc_target_handle_s *handle,
755 net_nfc_client_ndef_write_completed callback,
758 neardal_record *record;
760 NFC_DBG("write ndef message");
761 if (target_handle == NULL || handle != target_handle)
762 return NET_NFC_TARGET_IS_MOVED_AWAY;
764 if ((data->buffer == NULL && data->length != 0) ||
765 (data->buffer != NULL && data->length == 0))
766 return NET_NFC_NULL_PARAMETER;
768 record = g_try_malloc0(sizeof(neardal_record));
770 return NET_NFC_ALLOC_FAIL;
772 if (tag->records != NULL)
773 record->name = g_strdup(tag->records[0]);
775 record->name = g_strdup(tag->name);
776 record->type = g_strdup("Raw");
777 record->rawNDEF = g_try_malloc0(data->length);
778 if (record->rawNDEF == NULL) {
779 neardal_free_record(record);
780 return NET_NFC_ALLOC_FAIL;
783 client_cb.ndef_write_cb = callback;
784 client_cb.ndef_write_ud = user_data;
786 memcpy(record->rawNDEF, data->buffer, data->length);
787 record->rawNDEFSize = data->length;
789 if (neardal_tag_write(record) != NEARDAL_SUCCESS) {
790 neardal_free_record(record);
791 return NET_NFC_TAG_WRITE_FAILED;
794 neardal_free_record(record);
799 bool net_nfc_neard_is_tag_connected(void)
807 net_nfc_error_e net_nfc_neard_set_active(int state,
808 net_nfc_client_manager_set_active_completed callback,
813 NFC_DBG("set active: %d", state);
815 if (state == nfc_adapter_powered)
818 RETV_IF(NULL == nfc_adapter_path, NET_NFC_NOT_INITIALIZED);
820 client_cb.active_cb = callback;
821 client_cb.active_ud = user_data;
823 if (nfc_adapter_polling == true)
824 neardal_stop_poll(nfc_adapter_path);
826 err = neardal_set_adapter_property(nfc_adapter_path,
827 NEARD_ADP_PROP_POWERED, (void *) state);
828 if (err != NEARDAL_SUCCESS)
829 return NET_NFC_OPERATION_FAIL;
834 void net_nfc_neard_set_p2p_discovered(
835 net_nfc_client_p2p_device_discovered callback, void *user_data)
837 client_cb.p2p_discovered_cb = callback;
838 client_cb.p2p_discovered_ud = user_data;
841 void net_nfc_neard_unset_p2p_discovered(void)
843 client_cb.p2p_discovered_cb = NULL;
844 client_cb.p2p_discovered_ud = NULL;
847 void net_nfc_neard_set_p2p_detached(
848 net_nfc_client_p2p_device_detached callback, void *user_data)
850 client_cb.p2p_detached_cb = callback;
851 client_cb.p2p_detached_ud = user_data;
854 void net_nfc_neard_unset_p2p_detached(void)
856 client_cb.p2p_detached_cb = NULL;
857 client_cb.p2p_detached_ud = NULL;
860 void net_nfc_neard_set_p2p_data_received(
861 net_nfc_client_p2p_data_received callback, void *user_data)
863 client_cb.p2p_data_received_cb = callback;
864 client_cb.p2p_data_received_ud = user_data;
867 void net_nfc_neard_unset_p2p_data_received(void)
869 client_cb.p2p_data_received_cb = NULL;
870 client_cb.p2p_data_received_ud = NULL;
873 void net_nfc_neard_set_tag_discovered(
874 net_nfc_client_tag_tag_discovered callback, void *user_data)
876 client_cb.tag_discovered_cb = callback;
877 client_cb.tag_discovered_ud = user_data;
880 void net_nfc_neard_unset_tag_discovered(void)
882 client_cb.tag_discovered_cb = NULL;
883 client_cb.tag_discovered_ud = NULL;
886 void net_nfc_neard_set_tag_detached(
887 net_nfc_client_tag_tag_detached callback, void *user_data)
889 client_cb.tag_detached_cb = callback;
890 client_cb.tag_detached_ud = user_data;
893 void net_nfc_neard_unset_tag_detached(void)
895 client_cb.tag_detached_cb = NULL;
896 client_cb.tag_detached_ud = NULL;
899 void net_nfc_neard_set_activated(net_nfc_client_manager_activated callback,
902 client_cb.activated_cb = callback;
903 client_cb.activated_ud = user_data;
906 void net_nfc_neard_unset_activated(void)
908 client_cb.activated_cb = NULL;
909 client_cb.activated_ud = NULL;
912 net_nfc_error_e net_nfc_neard_cb_init(void)
914 if (neardal_set_cb_adapter_added(
915 _adapter_added_cb, NULL) != NEARDAL_SUCCESS ||
916 neardal_set_cb_adapter_removed(
917 _adapter_removed_cb, NULL) != NEARDAL_SUCCESS ||
918 neardal_set_cb_adapter_property_changed(
919 _adapter_property_changed_cb, NULL) != NEARDAL_SUCCESS ||
920 neardal_set_cb_power_completed(_power_completed_cb, NULL)
921 != NEARDAL_SUCCESS ||
922 neardal_set_cb_tag_found(
923 _tag_found_cb, NULL) != NEARDAL_SUCCESS ||
924 neardal_set_cb_tag_lost(
925 _tag_lost_cb, NULL) != NEARDAL_SUCCESS ||
926 neardal_set_cb_read_completed(_read_completed_cb, NULL)
927 != NEARDAL_SUCCESS ||
928 neardal_set_cb_write_completed(_write_completed_cb, NULL)
929 != NEARDAL_SUCCESS ||
930 neardal_set_cb_dev_found(_device_found_cb, NULL)
931 != NEARDAL_SUCCESS ||
932 neardal_set_cb_dev_lost(_device_lost_cb, NULL)
933 != NEARDAL_SUCCESS ||
934 neardal_set_cb_push_completed(_p2p_send_completed_cb, NULL)
935 != NEARDAL_SUCCESS ||
936 neardal_set_cb_p2p_received(_p2p_received_cb, NULL)
937 != NEARDAL_SUCCESS) {
939 NFC_DBG("failed to register the callback");
941 return NET_NFC_NOT_REGISTERED;
947 net_nfc_error_e net_nfc_neard_initialize(void)
951 neardal_adapter *neard_adapter = NULL;
952 char **adapters = NULL;
954 NFC_DBG("neard init");
956 if (nfc_adapter_path != NULL)
959 net_nfc_neard_cb_init();
961 err = neardal_get_adapters(&adapters, &len);
962 NFC_DBG("failed to get adapter error: %d", err);
963 if (err != NEARDAL_SUCCESS)
966 if (!(len > 0 && adapters != NULL))
969 nfc_adapter_path = g_strdup(adapters[0]);
970 NFC_DBG("adapter_path: %s", nfc_adapter_path);
972 neardal_free_array(&adapters);
975 err = neardal_get_adapter_properties(nfc_adapter_path, &neard_adapter);
976 if (err != NEARDAL_SUCCESS)
979 if (neard_adapter == NULL)
982 nfc_adapter_powered = (neard_adapter->powered) ? true : false;
983 nfc_adapter_polling = (neard_adapter->polling) ? true : false;
984 neardal_free_adapter(neard_adapter);
985 neard_adapter = NULL;
987 NFC_DBG("adapter powered %d, polling %d", nfc_adapter_powered,
988 nfc_adapter_polling);
990 if (vconf_set_bool(VCONFKEY_NFC_STATE, nfc_adapter_powered) != 0)
991 NFC_DBG("vconf NFC state set failed ");
992 if (nfc_adapter_powered == TRUE && nfc_adapter_polling == false)
993 neardal_start_poll_loop(nfc_adapter_path, NEARD_ADP_MODE_DUAL);
999 neardal_free_array(&adapters);
1002 neardal_free_adapter(neard_adapter);
1004 return NET_NFC_OPERATION_FAIL;
1007 void net_nfc_neard_deinitialize(void)
1009 NFC_DBG("neard deinitialize");
1011 if (nfc_adapter_mode) {
1012 g_free(nfc_adapter_mode);
1013 nfc_adapter_mode = NULL;
1017 neardal_free_tag(tag);
1022 neardal_free_device(dev);
1026 if (rawNDEF != NULL) {
1027 net_nfc_util_free_data(rawNDEF);
1031 if (target_handle != NULL) {
1032 g_free(target_handle);
1033 target_handle = NULL;
1036 if (target_info != NULL) {
1037 g_free(target_info);
1041 if (handover_info != NULL) {
1042 g_free(handover_info);
1043 handover_info = NULL;