The API now allows for an NDEF buffer to be passed when creating the tag.
#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,
/* 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;
}
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;
/* 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;
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) {
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;
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;
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);
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 {
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,
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);
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;
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;
}
}
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;
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;