diff options
author | Samuel Ortiz <sameo@linux.intel.com> | 2011-04-28 11:57:21 +0200 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2011-10-20 23:54:02 -0700 |
commit | 8e041f5aebff8ee0586edb35144012b07bf41487 (patch) | |
tree | 493f4ba83ee0be207f0f8f8309f3871464a5634a | |
parent | 393ca9d0084e8f56037c81755300cae42fde0495 (diff) | |
download | neard-8e041f5aebff8ee0586edb35144012b07bf41487.tar.gz neard-8e041f5aebff8ee0586edb35144012b07bf41487.tar.bz2 neard-8e041f5aebff8ee0586edb35144012b07bf41487.zip |
adapter: Add target adding/removing API
-rw-r--r-- | src/adapter.c | 31 | ||||
-rw-r--r-- | src/near.h | 5 | ||||
-rw-r--r-- | src/netlink.c | 2 | ||||
-rw-r--r-- | src/target.c | 6 | ||||
-rwxr-xr-x | test/list-adapters | 19 |
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(""); @@ -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) |