summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Ortiz <sameo@linux.intel.com>2011-04-28 11:57:21 +0200
committerMarcel Holtmann <marcel@holtmann.org>2011-10-20 23:54:02 -0700
commit8e041f5aebff8ee0586edb35144012b07bf41487 (patch)
tree493f4ba83ee0be207f0f8f8309f3871464a5634a
parent393ca9d0084e8f56037c81755300cae42fde0495 (diff)
downloadneard-8e041f5aebff8ee0586edb35144012b07bf41487.tar.gz
neard-8e041f5aebff8ee0586edb35144012b07bf41487.tar.bz2
neard-8e041f5aebff8ee0586edb35144012b07bf41487.zip
adapter: Add target adding/removing API
-rw-r--r--src/adapter.c31
-rw-r--r--src/near.h5
-rw-r--r--src/netlink.c2
-rw-r--r--src/target.c6
-rwxr-xr-xtest/list-adapters19
5 files changed, 60 insertions, 3 deletions
diff --git a/src/adapter.c b/src/adapter.c
index 92bc0f2..b84377f 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -294,6 +294,37 @@ void __near_adapter_remove(struct near_adapter *adapter)
g_hash_table_remove(adapter_hash, GINT_TO_POINTER(adapter->idx));
}
+int __near_adapter_add_target(guint32 idx, struct near_target *target)
+{
+ struct near_adapter *adapter;
+
+ DBG("idx %d", idx);
+
+ adapter = g_hash_table_lookup(adapter_hash, GINT_TO_POINTER(idx));
+ if (adapter == NULL)
+ return -ENODEV;
+
+ adapter->target = target;
+ adapter->polling = FALSE;
+
+ return 0;
+}
+
+int __near_adapter_remove_target(guint32 idx)
+{
+ struct near_adapter *adapter;
+
+ DBG("idx %d", idx);
+
+ adapter = g_hash_table_lookup(adapter_hash, GINT_TO_POINTER(idx));
+ if (adapter == NULL)
+ return -ENODEV;
+
+ adapter->target = NULL;
+
+ return 0;
+}
+
int __near_adapter_init(void)
{
DBG("");
diff --git a/src/near.h b/src/near.h
index 8921bbd..14fb9a2 100644
--- a/src/near.h
+++ b/src/near.h
@@ -26,6 +26,7 @@
#include <near/types.h>
struct near_adapter;
+struct near_target;
int __near_log_init(const char *debug, gboolean detach);
void __near_log_cleanup(void);
@@ -68,12 +69,12 @@ const char *__near_adapter_get_path(struct near_adapter *adapter);
struct near_adapter *__near_adapter_get(guint32 idx);
int __near_adapter_add(struct near_adapter *adapter);
void __near_adapter_remove(struct near_adapter *adapter);
+int __near_adapter_add_target(guint32 idx, struct near_target *target);
+int __near_adapter_remove_target(guint32 idx);
void __near_adapter_list(DBusMessageIter *iter, void *user_data);
int __near_adapter_init(void);
void __near_adapter_cleanup(void);
-struct near_target;
-
enum near_target_type {
NEAR_TARGET_TYPE_TAG = 0,
NEAR_TARGET_TYPE_DEVICE = 1,
diff --git a/src/netlink.c b/src/netlink.c
index 7c9cde8..4fa0e2d 100644
--- a/src/netlink.c
+++ b/src/netlink.c
@@ -326,6 +326,8 @@ static int nfc_netlink_event_targets(struct genlmsghdr *gnlh)
nla_get_u32(attr_nest[NFC_TARGET_ATTR_SUPPORTED_PROTOCOLS]);
DBG("target idx %d proto 0x%x", target_idx, protocols);
+
+ __near_target_add(adapter_idx, target_idx, protocols, NEAR_TARGET_TYPE_TAG);
}
return 0;
diff --git a/src/target.c b/src/target.c
index 621b690..6bbdf06 100644
--- a/src/target.c
+++ b/src/target.c
@@ -188,7 +188,7 @@ int __near_target_add(guint32 adapter_idx, guint32 target_idx,
target_methods, target_signals,
NULL, target, NULL);
- return 0;
+ return __near_adapter_add_target(adapter_idx, target);
}
void __near_target_remove(guint32 target_idx)
@@ -199,6 +199,8 @@ void __near_target_remove(guint32 target_idx)
if (target == NULL)
return;
+ __near_adapter_add_target(target->adapter_idx, target);
+
g_dbus_unregister_interface(connection, target->path,
NFC_TARGET_INTERFACE);
@@ -209,6 +211,8 @@ int __near_target_init(void)
{
DBG("");
+ connection = near_dbus_get_connection();
+
target_hash = g_hash_table_new_full(g_direct_hash, g_direct_equal,
NULL, free_target);
diff --git a/test/list-adapters b/test/list-adapters
index f7f5b7d..171d568 100755
--- a/test/list-adapters
+++ b/test/list-adapters
@@ -38,3 +38,22 @@ for path in properties["Adapters"]:
val = str(properties[key])
print " %s = %s" % (key, val)
+
+
+ if "CurrentTarget" in properties.keys():
+ path = str(properties["CurrentTarget"]);
+
+ print " Target = [ %s]" % (path)
+
+ target = dbus.Interface(bus.get_object("org.neard", path),
+ "org.neard.Target")
+
+ properties = target.GetProperties()
+
+ for key in properties.keys():
+ if key in ["Protocols"]:
+ val = extract_list(properties[key])
+ else:
+ val = str(properties[key])
+
+ print " %s = %s" % (key, val)