summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRavi kumar Veeramally <ravikumar.veeramally@linux.intel.com>2012-02-10 21:27:19 +0100
committerSamuel Ortiz <sameo@linux.intel.com>2012-02-10 21:27:19 +0100
commita00c8219dcdc0c9d298484c3723ed581e7ef5d23 (patch)
treeaea43d8d8a6092a24b29e85a878f71ebad178681
parent25b8a740614c7521e219ee402211f6d53100d5d4 (diff)
downloadneard-a00c8219dcdc0c9d298484c3723ed581e7ef5d23.tar.gz
neard-a00c8219dcdc0c9d298484c3723ed581e7ef5d23.tar.bz2
neard-a00c8219dcdc0c9d298484c3723ed581e7ef5d23.zip
plugins: Move connect and disconnect calls away from the plugins
Keeping them centralized in the adapter layer is cleaner and easier to maintain.
-rw-r--r--plugins/nfctype1.c31
-rw-r--r--plugins/nfctype2.c22
-rw-r--r--plugins/nfctype3.c32
-rw-r--r--plugins/nfctype4.c25
-rw-r--r--src/adapter.c27
-rw-r--r--src/tag.c4
6 files changed, 32 insertions, 109 deletions
diff --git a/plugins/nfctype1.c b/plugins/nfctype1.c
index 5bc6e3f..c62cc02 100644
--- a/plugins/nfctype1.c
+++ b/plugins/nfctype1.c
@@ -303,8 +303,8 @@ out_err:
* This cmd is common to static and dynamic targets
* This should allow to get the HR0 byte
*/
-static int nfctype1_read_all(uint32_t adapter_idx, uint32_t target_idx,
- near_tag_io_cb cb)
+static int nfctype1_read_tag(uint32_t adapter_idx,
+ uint32_t target_idx, near_tag_io_cb cb)
{
struct type1_cmd t1_cmd;
struct recv_cookie *cookie;
@@ -321,27 +321,7 @@ static int nfctype1_read_all(uint32_t adapter_idx, uint32_t target_idx,
return near_adapter_send(adapter_idx, (uint8_t *)&t1_cmd, sizeof(t1_cmd),
meta_recv, cookie);
-}
-
-static int nfctype1_read_tag(uint32_t adapter_idx,
- uint32_t target_idx, near_tag_io_cb cb)
-{
- int err;
-
- DBG("");
-
- err = near_adapter_connect(adapter_idx, target_idx, NFC_PROTO_JEWEL);
- if (err < 0) {
- near_error("Could not connect %d", err);
- return err;
- }
-
- err = nfctype1_read_all(adapter_idx, target_idx, cb);
- if (err < 0)
- near_adapter_disconnect(adapter_idx);
-
- return err;
}
static int write_nmn_e1_resp(uint8_t *resp, int length, void *data)
@@ -483,7 +463,6 @@ static int nfctype1_write_tag(uint32_t adapter_idx, uint32_t target_idx,
struct near_ndef_message *ndef,
near_tag_io_cb cb)
{
- int err;
struct near_tag *tag;
DBG("");
@@ -510,11 +489,7 @@ static int nfctype1_write_tag(uint32_t adapter_idx, uint32_t target_idx,
}
}
- err = write_nmn_0(adapter_idx, target_idx, ndef, cb);
- if (err < 0)
- near_adapter_disconnect(adapter_idx);
-
- return err;
+ return write_nmn_0(adapter_idx, target_idx, ndef, cb);
}
static struct near_tag_driver type1_driver = {
diff --git a/plugins/nfctype2.c b/plugins/nfctype2.c
index 56e1ede..cb96e62 100644
--- a/plugins/nfctype2.c
+++ b/plugins/nfctype2.c
@@ -267,13 +267,6 @@ static int nfctype2_read_tag(uint32_t adapter_idx,
tgt_subtype = near_target_get_subtype(adapter_idx, target_idx);
- err = near_adapter_connect(adapter_idx, target_idx, NFC_PROTO_MIFARE);
- if (err < 0) {
- near_error("Could not connect %d", err);
-
- return err;
- }
-
if (tgt_subtype == NEAR_TAG_NFC_T2_MIFARE_ULTRALIGHT)
err = nfctype2_read_meta(adapter_idx, target_idx, cb);
else {
@@ -281,9 +274,6 @@ static int nfctype2_read_tag(uint32_t adapter_idx,
err = -1;
}
- if (err < 0)
- near_adapter_disconnect(adapter_idx);
-
return err;
}
@@ -385,7 +375,6 @@ static int nfctype2_write_tag(uint32_t adapter_idx, uint32_t target_idx,
struct near_ndef_message *ndef,
near_tag_io_cb cb)
{
- int err;
struct near_tag *tag;
enum near_target_sub_type tgt_subtype;
@@ -419,16 +408,7 @@ static int nfctype2_write_tag(uint32_t adapter_idx, uint32_t target_idx,
}
}
- err = data_write(adapter_idx, target_idx, ndef, cb);
- if (err < 0)
- goto out;
-
- return 0;
-
-out:
- near_adapter_disconnect(adapter_idx);
-
- return err;
+ return data_write(adapter_idx, target_idx, ndef, cb);
}
static struct near_tag_driver type2_driver = {
diff --git a/plugins/nfctype3.c b/plugins/nfctype3.c
index 16eded8..f11985f 100644
--- a/plugins/nfctype3.c
+++ b/plugins/nfctype3.c
@@ -388,8 +388,8 @@ out:
return err;
}
-static int nfctype3_read_UID(uint32_t adapter_idx, uint32_t target_idx,
- near_tag_io_cb cb)
+static int nfctype3_read_tag(uint32_t adapter_idx,
+ uint32_t target_idx, near_tag_io_cb cb)
{
struct type3_cmd cmd;
struct recv_cookie *cookie;
@@ -415,26 +415,6 @@ static int nfctype3_read_UID(uint32_t adapter_idx, uint32_t target_idx,
cmd.len , nfctype3_recv_UID, cookie);
}
-static int nfctype3_read_tag(uint32_t adapter_idx,
- uint32_t target_idx, near_tag_io_cb cb)
-{
- int err;
-
- DBG("");
-
- err = near_adapter_connect(adapter_idx, target_idx, NFC_PROTO_FELICA);
- if (err < 0) {
- near_error("Could not connect %d", err);
- return err;
- }
-
- err = nfctype3_read_UID(adapter_idx, target_idx, cb);
- if (err < 0)
- near_adapter_disconnect(adapter_idx);
-
- return err;
-}
-
static int update_attr_block_cb(uint8_t *resp, int length, void *data)
{
struct recv_cookie *cookie = data;
@@ -619,7 +599,6 @@ static int nfctype3_write_tag(uint32_t adapter_idx, uint32_t target_idx,
struct near_ndef_message *ndef,
near_tag_io_cb cb)
{
- int err;
struct near_tag *tag;
DBG("");
@@ -636,12 +615,7 @@ static int nfctype3_write_tag(uint32_t adapter_idx, uint32_t target_idx,
return -EPERM;
}
- err = data_write(adapter_idx, target_idx, ndef, tag, cb);
-
- if (err < 0)
- near_adapter_disconnect(adapter_idx);
-
- return err;
+ return data_write(adapter_idx, target_idx, ndef, tag, cb);
}
static struct near_tag_driver type1_driver = {
diff --git a/plugins/nfctype4.c b/plugins/nfctype4.c
index a1a41e5..f03d2ef 100644
--- a/plugins/nfctype4.c
+++ b/plugins/nfctype4.c
@@ -544,8 +544,8 @@ out_err:
return t4_cookie_release(err, cookie);
}
-static int nfctype4_read_meta_v2(uint32_t adapter_idx, uint32_t target_idx,
- near_tag_io_cb cb)
+static int nfctype4_read_tag(uint32_t adapter_idx,
+ uint32_t target_idx, near_tag_io_cb cb)
{
struct recv_cookie *cookie;
int err = 0;
@@ -576,27 +576,6 @@ out_err:
return t4_cookie_release(err, cookie);
}
-static int nfctype4_read_tag(uint32_t adapter_idx,
- uint32_t target_idx, near_tag_io_cb cb)
-{
- int err;
-
- DBG("");
-
- err = near_adapter_connect(adapter_idx, target_idx, NFC_PROTO_ISO14443);
- if (err < 0) {
- near_error("Could not connect %d", err);
-
- return err;
- }
-
- err = nfctype4_read_meta_v2(adapter_idx, target_idx, cb);
- if (err < 0)
- near_adapter_disconnect(adapter_idx);
-
- return err;
-}
-
static int data_write_cb(uint8_t *resp, int length, void *data)
{
struct recv_cookie *cookie = data;
diff --git a/src/adapter.c b/src/adapter.c
index 20ac9e1..df58b32 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -670,6 +670,8 @@ int __near_adapter_add_target(uint32_t idx, uint32_t target_idx,
{
struct near_adapter *adapter;
struct near_target *target;
+ uint16_t tag_type;
+ int err;
DBG("idx %d", idx);
@@ -689,12 +691,27 @@ int __near_adapter_add_target(uint32_t idx, uint32_t target_idx,
g_hash_table_insert(adapter->targets,
GINT_TO_POINTER(target_idx), target);
- __near_tag_read(target, tag_read_cb);
+ tag_type = __near_target_get_tag_type(target);
- if (protocols & NFC_PROTO_NFC_DEP_MASK)
- dep_link_up(idx, target_idx);
+ if (tag_type != NFC_PROTO_NFC_DEP) {
+ err = near_adapter_connect(idx, target_idx, tag_type);
+ if (err < 0) {
+ near_error("Could not connect");
+ return err;
+ }
- return 0;
+ err = __near_tag_read(target, tag_read_cb);
+ } else {
+ err = __near_tag_read(target, tag_read_cb);
+ if (err < 0) {
+ near_error("Could not read tag");
+ return err;
+ }
+
+ err = dep_link_up(idx, target_idx);
+ }
+
+ return err;
}
int __near_adapter_remove_target(uint32_t idx, uint32_t target_idx)
@@ -759,7 +776,6 @@ static gboolean adapter_recv_event(GIOChannel *channel, GIOCondition condition,
near_error("Error while reading NFC bytes");
adapter_flush_rx(adapter, -EIO);
- near_adapter_disconnect(adapter->idx);
return FALSE;
}
@@ -853,7 +869,6 @@ int near_adapter_disconnect(uint32_t idx)
close(adapter->sock);
adapter->sock = -1;
adapter->link = NULL;
- adapter_flush_rx(adapter, -ENOLINK);
return 0;
}
diff --git a/src/tag.c b/src/tag.c
index 865ea85..a221ab2 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -329,7 +329,7 @@ int __near_tag_read(struct near_target *target, near_tag_io_cb cb)
DBG("driver type 0x%x", driver->type);
- if (driver->type & type) {
+ if (driver->type == type) {
uint32_t adapter_idx, target_idx;
target_idx = __near_target_get_idx(target);
@@ -362,7 +362,7 @@ int __near_tag_add_ndef(struct near_target *target,
DBG("driver type 0x%x", driver->type);
- if (driver->type & type) {
+ if (driver->type == type) {
uint32_t adapter_idx, target_idx;
target_idx = __near_target_get_idx(target);