target: Improve tag addition API
authorSamuel Ortiz <sameo@linux.intel.com>
Mon, 6 Feb 2012 16:03:36 +0000 (17:03 +0100)
committerSamuel Ortiz <sameo@linux.intel.com>
Mon, 6 Feb 2012 16:03:36 +0000 (17:03 +0100)
The API now allows for an NDEF buffer to be passed when creating the tag.

include/target.h
plugins/nfctype1.c
plugins/nfctype2.c
plugins/nfctype3.c
plugins/nfctype4.c
plugins/npp.c
plugins/snep.c
src/near.h
src/tag.c
src/target.c

index 2228119..77038f7 100644 (file)
@@ -31,7 +31,7 @@
 #define NFC_MAX_NFCID1_LEN 10
 
 struct near_tag *near_target_add_tag(uint32_t adapter_idx, uint32_t target_idx,
-                                       size_t data_length);
+                                       uint8_t *data, size_t data_length);
 struct near_tag *near_target_get_tag(uint32_t adapter_idx, uint32_t target_idx);
 
 enum near_target_sub_type near_target_get_subtype(uint32_t adapter_idx,
index bf2e56a..8b65ae6 100644 (file)
@@ -239,7 +239,7 @@ static int meta_recv(uint8_t *resp, int length, void *data)
 
        /* Associate the DATA length to the tag */
        tag = near_target_add_tag(cookie->adapter_idx, cookie->target_idx,
-                                       TAG_T1_DATA_LENGTH(cc));
+                                       NULL, TAG_T1_DATA_LENGTH(cc));
        if (tag == NULL) {
                err = -ENOMEM;
                goto out_err;
index 1c0ca82..7e97d31 100644 (file)
@@ -194,7 +194,7 @@ static int meta_recv(uint8_t *resp, int length, void *data)
        }
 
        tag = near_target_add_tag(cookie->adapter_idx, cookie->target_idx,
-                                       TAG_DATA_LENGTH(cc));
+                                 NULL, TAG_DATA_LENGTH(cc));
        if (tag == NULL) {
                err = -ENOMEM;
                goto out;
index 6892793..7139077 100644 (file)
@@ -269,7 +269,7 @@ static int nfctype3_recv_block_0(uint8_t *resp, int length, void *data)
 
        /* Associate the DATA length to the tag */
        tag = near_target_add_tag(cookie->adapter_idx, cookie->target_idx,
-                                       ndef_data_length);
+                                       NULL, ndef_data_length);
        if (tag == NULL) {
                err = -ENOMEM;
                goto out;
index 6d6ea4c..1635376 100644 (file)
@@ -305,7 +305,7 @@ static int t4_readbin_NDEF_ID(uint8_t *resp, int length, void *data)
                goto out_err;
        }
 
-       tag = near_target_add_tag(cookie->adapter_idx, cookie->target_idx,
+       tag = near_target_add_tag(cookie->adapter_idx, cookie->target_idx, NULL,
                        g_ntohs(*((uint16_t *)(resp + NFC_STATUS_BYTE_LEN))));
 
        if (tag == NULL) {
index eea4ece..ef479be 100644 (file)
@@ -61,8 +61,7 @@ static int npp_read(int client_fd, uint32_t adapter_idx, uint32_t target_idx,
        struct p2p_npp_frame frame;
        struct p2p_npp_ndef_entry entry;
        int bytes_recv, n_ndef, i, ndef_length, total_ndef_length, err;
-       size_t tag_length;
-       uint8_t *ndefs, *nfc_data, *current_ndef;
+       uint8_t *ndefs, *current_ndef;
 
        ndefs = NULL;
        total_ndef_length = 0;
@@ -120,7 +119,7 @@ static int npp_read(int client_fd, uint32_t adapter_idx, uint32_t target_idx,
        DBG("Total NDEF length %d", total_ndef_length);
 
        tag = near_target_add_tag(adapter_idx, target_idx,
-                                       total_ndef_length);
+                                       ndefs, total_ndef_length);
        if (tag == NULL) {
                g_free(ndefs);
                return -ENOMEM;
@@ -129,9 +128,6 @@ static int npp_read(int client_fd, uint32_t adapter_idx, uint32_t target_idx,
        for (i = 0; i < total_ndef_length; i++)
                DBG("NDEF[%d] 0x%x", i, ndefs[i]);
 
-       nfc_data = near_tag_get_data(tag, &tag_length);
-       memcpy(nfc_data, ndefs, total_ndef_length);
-
        near_tlv_parse(tag, cb);
 
        g_free(ndefs);
index 6e3e782..68f2069 100644 (file)
@@ -129,21 +129,17 @@ static void snep_read_ndef(int client_fd,
 
        if (snep_data.nfc_data_length == snep_data.nfc_data_current_length) {
                struct near_tag *tag;
-               size_t tag_length;
-               uint8_t *nfc_data;
 
                snep_data.nfc_data_current_length = 0;
                snep_response_noinfo(client_fd, SNEP_RESP_SUCCESS);
                tag = near_target_add_tag(adapter_idx, target_idx,
+                                       snep_data.nfc_data,
                                        snep_data.nfc_data_length);
                if (tag == NULL) {
                        g_free(snep_data.nfc_data);
                        return;
                }
 
-               nfc_data = near_tag_get_data(tag, &tag_length);
-               memcpy(nfc_data, snep_data.nfc_data, tag_length);
-
                near_tlv_parse(tag, cb);
                g_free(snep_data.nfc_data);
        } else {
index 74e501d..5517e17 100644 (file)
@@ -119,7 +119,7 @@ void __near_tag_append_records(struct near_tag *tag, DBusMessageIter *iter);
 uint32_t __near_tag_n_records(struct near_tag *tag);
 int __near_tag_add_record(struct near_tag *tag, struct near_ndef_record *record);
 struct near_tag *__near_tag_new(uint32_t adapter_idx, uint32_t target_idx,
-                               size_t data_length);
+                               uint8_t *data, size_t data_length);
 void __near_tag_free(struct near_tag *tag);
 int __near_tag_read(struct near_target *target, near_tag_io_cb cb);
 int __near_tag_add_ndef(struct near_target *target,
index 4be9724..2ce483e 100644 (file)
--- a/src/tag.c
+++ b/src/tag.c
@@ -85,7 +85,7 @@ void __near_tag_append_records(struct near_tag *tag, DBusMessageIter *iter)
 
 static int tag_initialize(struct near_tag *tag,
                        uint32_t adapter_idx, uint32_t target_idx,
-                               size_t data_length)
+                       uint8_t * data, size_t data_length)
 {
        DBG("data length %zu", data_length);
 
@@ -99,12 +99,16 @@ static int tag_initialize(struct near_tag *tag,
                tag->data = g_try_malloc0(data_length);
                if (tag->data == NULL)
                        return -ENOMEM;
+
+               if (data != NULL)
+                       memcpy(tag->data, data, data_length);
        }
 
        return 0;
 }
 
-struct near_tag *__near_tag_new(uint32_t adapter_idx, uint32_t target_idx, size_t data_length)
+struct near_tag *__near_tag_new(uint32_t adapter_idx, uint32_t target_idx,
+                               uint8_t *data, size_t data_length)
 {
        struct near_tag *tag;
 
@@ -112,7 +116,8 @@ struct near_tag *__near_tag_new(uint32_t adapter_idx, uint32_t target_idx, size_
        if (tag == NULL)
                return NULL;
 
-       if (tag_initialize(tag, adapter_idx, target_idx, data_length) < 0) {
+       if (tag_initialize(tag, adapter_idx, target_idx,
+                                       data, data_length) < 0) {
                g_free(tag);
                return NULL;
        }
index aeeed92..f4323ba 100644 (file)
@@ -496,7 +496,7 @@ struct near_tag *near_target_get_tag(uint32_t adapter_idx, uint32_t target_idx)
 }
 
 struct near_tag *near_target_add_tag(uint32_t adapter_idx, uint32_t target_idx,
-                                               size_t data_length)
+                                       uint8_t *data, size_t data_length)
 {
        struct near_target *target;
        char *path;
@@ -514,7 +514,8 @@ struct near_tag *near_target_add_tag(uint32_t adapter_idx, uint32_t target_idx,
        if (target->tag != NULL)
                return target->tag;
 
-       target->tag = __near_tag_new(target->adapter_idx, target_idx, data_length);
+       target->tag = __near_tag_new(target->adapter_idx, target_idx,
+                                                       data, data_length);
        if (target->tag == NULL)
                return NULL;