summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRavi kumar Veeramally <ravikumar.veeramally@linux.intel.com>2012-01-25 15:41:48 +0200
committerSamuel Ortiz <sameo@linux.intel.com>2012-01-27 19:31:58 +0100
commit2b42e25bfad80de03ade5677df14472f7021c87c (patch)
treef91bb30c4f3f1d5bb5f9c439853f2873474502e7
parent260aaf1629a7f27e0e727cabc82f8f5dc6d52d73 (diff)
downloadneard-2b42e25bfad80de03ade5677df14472f7021c87c.tar.gz
neard-2b42e25bfad80de03ade5677df14472f7021c87c.tar.bz2
neard-2b42e25bfad80de03ade5677df14472f7021c87c.zip
tag: Add memory layout enum to tag structure
Added memory(static, dynamic, other ..) layout enum to tag structure. Helpful to check the tag layout when writing data on tag.
-rw-r--r--include/tag.h10
-rw-r--r--plugins/nfctype1.c4
-rw-r--r--plugins/nfctype2.c2
-rw-r--r--src/tag.c18
4 files changed, 33 insertions, 1 deletions
diff --git a/include/tag.h b/include/tag.h
index 7fae9ce..a8e4b77 100644
--- a/include/tag.h
+++ b/include/tag.h
@@ -48,6 +48,13 @@ enum near_target_sub_type {
NEAR_TAG_NFC_SUBTYPE_UNKNOWN = 0xFF
};
+enum near_tag_memory_layout {
+ NEAR_TAG_MEMORY_STATIC = 0,
+ NEAR_TAG_MEMORY_DYNAMIC,
+ NEAR_TAG_MEMORY_OTHER,
+ NEAR_TAG_MEMORY_UNKNOWN = 0xFF
+};
+
typedef void (*near_tag_io_cb) (uint32_t adapter_idx, uint32_t target_idx,
int status);
@@ -74,5 +81,8 @@ uint32_t near_tag_get_target_idx(struct near_tag *tag);
int near_tag_add_ndef(struct near_tag *tag, uint8_t *ndef_data, size_t ndef_length);
int near_tag_driver_register(struct near_tag_driver *driver);
void near_tag_driver_unregister(struct near_tag_driver *driver);
+void near_tag_set_memory_layout(struct near_tag *tag,
+ enum near_tag_memory_layout);
+enum near_tag_memory_layout near_tag_get_memory_layout(struct near_tag *tag);
#endif
diff --git a/plugins/nfctype1.c b/plugins/nfctype1.c
index 83fe498..e166dba 100644
--- a/plugins/nfctype1.c
+++ b/plugins/nfctype1.c
@@ -248,6 +248,7 @@ static int meta_recv(uint8_t *resp, int length, void *data)
/* Check Static or Dynamic memory model */
if (resp[OFFSET_HEADER_ROM] == HR0_TYPE1_STATIC) {
DBG("READ Static complete");
+ near_tag_set_memory_layout(tag, NEAR_TAG_MEMORY_STATIC);
err = near_tlv_parse(t1_tag->tag, t1_tag->cb,
cc + LEN_CC_BYTES, TAG_T1_DATA_LENGTH(cc));
if (err < 0)
@@ -255,7 +256,8 @@ static int meta_recv(uint8_t *resp, int length, void *data)
g_free(t1_tag);
} else if ((resp[OFFSET_HEADER_ROM] & 0xF0) == HR0_TYPE2_HIGH) {
- err = read_dynamic_tag(cc, length, t1_tag);
+ near_tag_set_memory_layout(tag, NEAR_TAG_MEMORY_DYNAMIC);
+ err = read_dynamic_tag(cc, length, t1_tag);
} else {
err = -EOPNOTSUPP ;
}
diff --git a/plugins/nfctype2.c b/plugins/nfctype2.c
index 32ae537..4a78fa3 100644
--- a/plugins/nfctype2.c
+++ b/plugins/nfctype2.c
@@ -201,6 +201,8 @@ static int meta_recv(uint8_t *resp, int length, void *data)
else
near_tag_set_ro(tag, FALSE);
+ near_tag_set_memory_layout(tag, NEAR_TAG_MEMORY_STATIC);
+
err = data_read(t2_tag);
out:
diff --git a/src/tag.c b/src/tag.c
index 755efdc..6ce1cf7 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -42,6 +42,7 @@ struct near_tag {
uint8_t uid[TAG_UID_MAX_LEN];
near_bool_t readonly;
+ enum near_tag_memory_layout layout;
size_t data_length;
uint8_t *data;
@@ -180,6 +181,23 @@ uint32_t near_tag_get_target_idx(struct near_tag *tag)
return tag->target_idx;
}
+enum near_tag_memory_layout near_tag_get_memory_layout(struct near_tag *tag)
+{
+ if (tag == NULL)
+ return NEAR_TAG_MEMORY_UNKNOWN;
+
+ return tag->layout;
+}
+
+void near_tag_set_memory_layout(struct near_tag *tag,
+ enum near_tag_memory_layout layout)
+{
+ if (tag == NULL)
+ return;
+
+ tag->layout = layout;
+}
+
int near_tag_driver_register(struct near_tag_driver *driver)
{
DBG("");