API net_nfc_error_e net_nfc_client_p2p_send(net_nfc_target_handle_s *handle,
data_s *data, net_nfc_client_p2p_send_completed callback, void *user_data)
{
- GVariant *arg_data;
- NetNfcCallback *func_data;
-
- RETV_IF(NULL == p2p_proxy, NET_NFC_NOT_INITIALIZED);
-
/* prevent executing daemon when nfc is off */
RETV_IF(net_nfc_client_manager_is_activated() == false, NET_NFC_INVALID_STATE);
- func_data = g_try_new0(NetNfcCallback, 1);
- if (NULL == func_data)
- return NET_NFC_ALLOC_FAIL;
-
- func_data->callback = (gpointer)callback;
- func_data->user_data = user_data;
-
- arg_data = net_nfc_util_gdbus_data_to_variant(data);
-
- net_nfc_gdbus_p2p_call_send(p2p_proxy,
- 0 /* FIXME */,
- arg_data,
- GPOINTER_TO_UINT(handle),
- net_nfc_client_gdbus_get_privilege(),
- NULL,
- p2p_call_send,
- func_data);
-
- return NET_NFC_OK;
+ return net_nfc_neard_send_p2p(handle, data, callback, user_data);
}
void *p2p_discovered_ud;
net_nfc_client_p2p_device_detached p2p_detached_cb;
void *p2p_detached_ud;
+ net_nfc_client_p2p_send_completed p2p_send_completed_cb;
+ void *p2p_send_completed_ud;
} net_nfc_client_cb;
static net_nfc_client_cb client_cb;
client_cb.p2p_detached_cb(client_cb.p2p_detached_ud);
}
+static void _p2p_send_completed_cb(errorCode_t error_code, void *user_data)
+{
+ net_nfc_error_e result;
+
+ NFC_DBG("p2p send completed cb error code %d", error_code);
+
+ result = _convert_error_code(error_code);
+
+ if (client_cb.p2p_send_completed_cb != NULL)
+ client_cb.p2p_send_completed_cb(result,
+ client_cb.p2p_send_completed_ud);
+}
+
+net_nfc_error_e net_nfc_neard_send_p2p(net_nfc_target_handle_s *handle, data_s *data,
+ net_nfc_client_p2p_send_completed callback, void *user_data)
+{
+ neardal_record *record;
+
+ NFC_DBG("neard send p2p");
+
+ if (target_handle == NULL || handle != target_handle)
+ return NET_NFC_TARGET_IS_MOVED_AWAY;
+
+ if ((data->buffer == NULL && data->length != 0) ||
+ (data->buffer != NULL && data->length == 0))
+ return NET_NFC_NULL_PARAMETER;
+
+ record = g_try_malloc0(sizeof(neardal_record));
+ if (record == NULL)
+ return NET_NFC_ALLOC_FAIL;
+
+ record->name = g_strdup(dev->name);
+ record->type = g_strdup("Raw");
+ record->rawNDEF = g_try_malloc0(data->length);
+ if (record->rawNDEF == NULL) {
+ neardal_free_record(record);
+ return NET_NFC_ALLOC_FAIL;
+ }
+
+ memcpy(record->rawNDEF, data->buffer, data->length);
+ record->rawNDEFSize = data->length;
+
+ if (neardal_dev_push(record) != NEARDAL_SUCCESS) {
+ neardal_free_record(record);
+ return NET_NFC_TAG_WRITE_FAILED;
+ }
+
+ neardal_free_record(record);
+
+ NFC_DBG("neard send p2p successfully");
+ client_cb.p2p_send_completed_cb = callback;
+ client_cb.p2p_send_completed_ud = user_data;
+ return NET_NFC_OK;
+}
+
net_nfc_error_e net_nfc_neard_get_current_tag_info(net_nfc_target_info_s **info)
{
neardal_set_cb_dev_found(_device_found_cb, NULL)
!= NEARDAL_SUCCESS ||
neardal_set_cb_dev_lost(_device_lost_cb, NULL)
+ != NEARDAL_SUCCESS ||
+ neardal_set_cb_push_completed(_p2p_send_completed_cb, NULL)
!= NEARDAL_SUCCESS) {
NFC_DBG("failed to register the callback");