void net_nfc_neard_set_activated(net_nfc_client_manager_activated callback,
void *user_data);
void net_nfc_neard_unset_activated(void);
+void net_nfc_neard_set_p2p_discovered(
+ net_nfc_client_p2p_device_discovered callback, void *user_data);
+void net_nfc_neard_unset_p2p_discovered(void);
+void net_nfc_neard_set_p2p_detached(
+ net_nfc_client_p2p_device_detached callback, void *user_data);
+void net_nfc_neard_unset_p2p_detached(void);
void net_nfc_neard_set_tag_discovered(
net_nfc_client_tag_tag_discovered callback, void *user_data);
void net_nfc_neard_unset_tag_discovered(void);
#include "net_nfc_client.h"
#include "net_nfc_client_manager.h"
#include "net_nfc_client_p2p.h"
+#include "net_nfc_neard.h"
typedef struct _P2p_SignalHandler P2pSignalHandler;
{
RET_IF(NULL == callback);
- p2p_signal_handler.p2p_device_discovered_cb = callback;
- p2p_signal_handler.p2p_device_discovered_data = user_data;
+ net_nfc_neard_set_p2p_discovered(callback, user_data);
}
{
RET_IF(NULL == callback);
- p2p_signal_handler.p2p_device_detached_cb = callback;
- p2p_signal_handler.p2p_device_detached_data = user_data;
+ net_nfc_neard_set_p2p_detached(callback, user_data);
}
API void net_nfc_client_p2p_unset_device_discovered(void)
{
- p2p_signal_handler.p2p_device_discovered_cb = NULL;
- p2p_signal_handler.p2p_device_discovered_data = NULL;
+ net_nfc_neard_unset_p2p_discovered();
}
API void net_nfc_client_p2p_unset_device_detached(void)
{
- p2p_signal_handler.p2p_device_detached_cb = NULL;
- p2p_signal_handler.p2p_device_detached_data = NULL;
+ net_nfc_neard_unset_p2p_detached();
}
void *ndef_read_ud;
net_nfc_client_ndef_write_completed ndef_write_cb;
void *ndef_write_ud;
+
+ net_nfc_client_p2p_device_discovered p2p_discovered_cb;
+ void *p2p_discovered_ud;
+ net_nfc_client_p2p_device_detached p2p_detached_cb;
+ void *p2p_detached_ud;
} net_nfc_client_cb;
static net_nfc_client_cb client_cb;
return id;
}
+static uint32_t _get_dev_id(const char *name)
+{
+ uint32_t id;
+ char **s;
+
+ s = g_strsplit(name, "device", 2);
+ id = atoi(s[1]);
+ g_strfreev(s);
+
+ return id;
+}
+
static bool _check_ndef(uint8_t *ndef_card_state,
int *max_data_size,
int *real_data_size)
}
}
+static void _device_found_cb(const char *devName, void *user_data)
+{
+ int devType = 0;
+
+ NFC_DBG("p2p device found %s", devName);
+ if (neardal_get_dev_properties(devName, &dev) != NEARDAL_SUCCESS)
+ return;
+
+ if (target_handle == NULL)
+ target_handle = g_try_malloc0(sizeof(net_nfc_target_handle_s));
+
+ if (target_handle == NULL) {
+ NFC_DBG("handle mem alloc is failed");
+ return;
+ }
+
+
+ devType = _convert_target_type(nfc_adapter_mode);
+ if (devType == NET_NFC_NFCIP1_INITIATOR)
+ target_handle->connection_type = NET_NFC_P2P_CONNECTION_TARGET;
+ else if (devType == NET_NFC_NFCIP1_TARGET)
+ target_handle->connection_type =
+ NET_NFC_P2P_CONNECTION_INITIATOR;
+ target_handle->connection_id = _get_dev_id(devName);
+ target_handle->target_type = devType;
+
+ if (client_cb.p2p_discovered_cb != NULL)
+ client_cb.p2p_discovered_cb(target_handle, client_cb.p2p_discovered_ud);
+}
+
+static void _device_lost_cb(const char *devName, void *user_data)
+{
+ errorCode_t err;
+
+ NFC_DBG("p2p device lost %s", devName);
+ if (target_handle != NULL) {
+ g_free(target_handle);
+ target_handle = NULL;
+ }
+
+ if (nfc_adapter_polling == true)
+ goto exit;
+
+ if (nfc_adapter_path == NULL)
+ goto exit;
+
+ err = neardal_start_poll_loop(nfc_adapter_path,
+ NEARD_ADP_MODE_DUAL);
+ if (err != NEARDAL_SUCCESS)
+ goto exit;
+
+ nfc_adapter_polling = true;
+
+exit:
+ if (client_cb.p2p_detached_cb != NULL)
+ client_cb.p2p_detached_cb(client_cb.p2p_detached_ud);
+}
+
net_nfc_error_e net_nfc_neard_get_current_tag_info(net_nfc_target_info_s **info)
{
return NET_NFC_OK;
}
+void net_nfc_neard_set_p2p_discovered(
+ net_nfc_client_p2p_device_discovered callback, void *user_data)
+{
+ client_cb.p2p_discovered_cb = callback;
+ client_cb.p2p_discovered_ud = user_data;
+}
+
+void net_nfc_neard_unset_p2p_discovered(void)
+{
+ client_cb.p2p_discovered_cb = NULL;
+ client_cb.p2p_discovered_ud = NULL;
+}
+
+void net_nfc_neard_set_p2p_detached(
+ net_nfc_client_p2p_device_detached callback, void *user_data)
+{
+ client_cb.p2p_detached_cb = callback;
+ client_cb.p2p_detached_ud = user_data;
+}
+
+void net_nfc_neard_unset_p2p_detached(void)
+{
+ client_cb.p2p_detached_cb = NULL;
+ client_cb.p2p_detached_ud = NULL;
+}
+
void net_nfc_neard_set_tag_discovered(
net_nfc_client_tag_tag_discovered callback, void *user_data)
{
neardal_set_cb_read_completed(_read_completed_cb, NULL)
!= NEARDAL_SUCCESS ||
neardal_set_cb_write_completed(_write_completed_cb, NULL)
+ != NEARDAL_SUCCESS ||
+ neardal_set_cb_dev_found(_device_found_cb, NULL)
+ != NEARDAL_SUCCESS ||
+ neardal_set_cb_dev_lost(_device_lost_cb, NULL)
!= NEARDAL_SUCCESS) {
NFC_DBG("failed to register the callback");