diff options
author | Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com> | 2012-02-10 21:27:19 +0100 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2012-02-10 21:27:19 +0100 |
commit | a00c8219dcdc0c9d298484c3723ed581e7ef5d23 (patch) | |
tree | aea43d8d8a6092a24b29e85a878f71ebad178681 | |
parent | 25b8a740614c7521e219ee402211f6d53100d5d4 (diff) | |
download | neard-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.c | 31 | ||||
-rw-r--r-- | plugins/nfctype2.c | 22 | ||||
-rw-r--r-- | plugins/nfctype3.c | 32 | ||||
-rw-r--r-- | plugins/nfctype4.c | 25 | ||||
-rw-r--r-- | src/adapter.c | 27 | ||||
-rw-r--r-- | src/tag.c | 4 |
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; } @@ -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); |