#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
#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,
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);
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)
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;
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;