Add P2P send support
authorArron Wang <arron.wang@intel.com>
Sun, 16 Mar 2014 12:36:03 +0000 (20:36 +0800)
committerArron Wang <arron.wang@intel.com>
Mon, 17 Mar 2014 05:53:56 +0000 (13:53 +0800)
Change-Id: I6d87c2184f828576c28511adf7d11b31e8297ef5

client/include/net_nfc_neard.h
client/net_nfc_client_p2p.c
client/net_nfc_neard.c

index 3af91e8..b215300 100644 (file)
@@ -4,6 +4,8 @@
 #include "net_nfc.h"
 #include "net_nfc_typedef.h"
 
+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);
 net_nfc_error_e net_nfc_neard_get_current_tag_info(net_nfc_target_info_s **info);
 net_nfc_error_e net_nfc_neard_get_current_target_handle(
                        net_nfc_target_handle_s **handle);
index eacbc57..b93ae38 100644 (file)
@@ -127,33 +127,10 @@ static void p2p_call_send(GObject *source_object, GAsyncResult *res,
 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);
 }
 
 
index 0754cde..10dd069 100644 (file)
@@ -42,6 +42,8 @@ typedef struct _net_nfc_client_cb
        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;
@@ -508,6 +510,61 @@ exit:
                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)
 {
 
@@ -724,6 +781,8 @@ net_nfc_error_e net_nfc_neard_cb_init(void)
                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");