tag: Change the tag read prototype
authorSamuel Ortiz <sameo@linux.intel.com>
Fri, 29 Apr 2011 19:45:09 +0000 (21:45 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Fri, 21 Oct 2011 06:54:02 +0000 (23:54 -0700)
include/tag.h
plugins/nfctype2.c
src/near.h
src/tag.c
src/target.c

index 81dc499..f74d8a0 100644 (file)
@@ -22,6 +22,8 @@
 #ifndef __NEAR_TAG_H
 #define __NEAR_TAG_H
 
+#include <glib.h>
+
 #define        NEAR_TAG_NFC_TYPE1   0x1
 #define        NEAR_TAG_NFC_TYPE2   0x2
 #define        NEAR_TAG_NFC_TYPE3   0x4
 struct near_tag_driver {
        near_uint16_t type;
 
-       int (*read)(struct near_target *target, void *buf, size_t length);
+       int (*read)(guint32 adapter_idx, guint32 target_idx,
+                                       void *buf, size_t length);
 };
 
 int near_tag_driver_register(struct near_tag_driver *driver);
-int near_tag_driver_unregister(struct near_tag_driver *driver);
+void near_tag_driver_unregister(struct near_tag_driver *driver);
 
 #endif
index 2a49a39..10f7f16 100644 (file)
 
 #include <near/plugin.h>
 #include <near/log.h>
+#include <near/types.h>
+#include <near/tag.h>
+
+static int nfctype2_read(guint32 adapter_idx, guint32 target_idx,
+                               void *buf, size_t length)
+{
+       return 0;
+}
+
+static struct near_tag_driver type2_driver = {
+       .type = NEAR_TAG_NFC_TYPE2,
+       .read = nfctype2_read,
+};
 
 static int nfctype2_init(void)
 {
        DBG("");
 
-       return 0;
+       return near_tag_driver_register(&type2_driver);
 }
 
 static void nfctype2_exit(void)
 {
        DBG("");
+
+       near_tag_driver_unregister(&type2_driver);
 }
 
 NEAR_PLUGIN_DEFINE(nfctype2, "NFC Forum Type 2 tags support", VERSION,
index a6feaa6..c4253b0 100644 (file)
@@ -82,6 +82,8 @@ enum near_target_type {
 
 const char *__near_target_get_path(struct near_target *target);
 near_uint16_t __near_target_get_tag_type(struct near_target *target);
+guint32 __near_target_get_idx(struct near_target *target);
+guint32 __near_target_get_adapter_idx(struct near_target *target);
 int __near_target_add(guint32 adapter_idx, guint32 target_idx,
                guint32 protocols, enum near_target_type type,
                near_uint16_t sens_res, near_uint8_t sel_res);
index 25d8bf0..a644b50 100644 (file)
--- a/src/tag.c
+++ b/src/tag.c
@@ -47,13 +47,11 @@ int near_tag_driver_register(struct near_tag_driver *driver)
        return 0;
 }
 
-int near_tag_driver_unregister(struct near_tag_driver *driver)
+void near_tag_driver_unregister(struct near_tag_driver *driver)
 {
        DBG("");
 
        driver_list = g_list_remove(driver_list, driver);
-
-       return 0;
 }
 
 int __near_tag_read(struct near_target *target, void *buf, size_t length)
@@ -70,8 +68,14 @@ int __near_tag_read(struct near_target *target, void *buf, size_t length)
        for (list = driver_list; list; list = list->next) {
                struct near_tag_driver *driver = list->data;
 
-               if (driver->type & type)
-                       return driver->read(target, buf, length);
+               if (driver->type & type) {
+                       guint32 adapter_idx, target_idx;                
+
+                       target_idx = __near_target_get_idx(target);
+                       adapter_idx = __near_target_get_adapter_idx(target);
+
+                       return driver->read(adapter_idx, target_idx, buf, length);
+               }
        }
 
        return -EOPNOTSUPP;
index 89bc17e..fe96920 100644 (file)
@@ -73,6 +73,17 @@ near_uint16_t __near_target_get_tag_type(struct near_target *target)
        return target->tag_type;
 }
 
+guint32 __near_target_get_idx(struct near_target *target)
+{
+       return target->idx;
+}
+
+guint32 __near_target_get_adapter_idx(struct near_target *target)
+{
+       return target->adapter_idx;
+}
+
+
 static void append_protocols(DBusMessageIter *iter, void *user_data)
 {
        struct near_target *target = user_data;