summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSamuel Ortiz <sameo@linux.intel.com>2011-04-22 16:32:12 +0200
committerMarcel Holtmann <marcel@holtmann.org>2011-10-20 23:54:01 -0700
commit7bee1faa0f3c3e4af09e011227af2ccf560a32e4 (patch)
tree9715be0f9128751b39777bb73c9535b1ccfc474b /src
parent0e6a1837969a83549dcd1e8405c3ce8487f3c8eb (diff)
downloadneard-7bee1faa0f3c3e4af09e011227af2ccf560a32e4.tar.gz
neard-7bee1faa0f3c3e4af09e011227af2ccf560a32e4.tar.bz2
neard-7bee1faa0f3c3e4af09e011227af2ccf560a32e4.zip
adapter: D-Bus interface skeleton
Diffstat (limited to 'src')
-rw-r--r--src/adapter.c55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/adapter.c b/src/adapter.c
index 3dbcc78..3d5232d 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -29,8 +29,12 @@
#include <glib.h>
+#include <gdbus.h>
+
#include "near.h"
+static DBusConnection *connection = NULL;
+
static GHashTable *adapter_hash;
struct near_adapter {
@@ -70,6 +74,41 @@ void __near_adapter_list(DBusMessageIter *iter, void *user_data)
g_hash_table_foreach(adapter_hash, append_path, iter);
}
+static DBusMessage *get_properties(DBusConnection *conn,
+ DBusMessage *msg, void *data)
+{
+ DBusMessage *reply;
+
+ DBG("conn %p", conn);
+
+ reply = dbus_message_new_method_return(msg);
+ if (reply == NULL)
+ return NULL;
+
+ return reply;
+}
+
+static DBusMessage *set_property(DBusConnection *conn,
+ DBusMessage *msg, void *data)
+{
+ DBG("conn %p", conn);
+
+ return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+}
+
+static GDBusMethodTable adapter_methods[] = {
+ { "GetProperties", "", "a{sv}", get_properties },
+ { "SetProperty", "sv", "", set_property },
+ { },
+};
+
+static GDBusSignalTable adapter_signals[] = {
+ { "PropertyChanged", "sv" },
+ { "TargetFound", "o" },
+ { "TargetLost", "o" },
+ { }
+};
+
int __near_adapter_add(const char *name, guint32 idx, guint32 protocols)
{
struct near_adapter *adapter;
@@ -96,11 +135,25 @@ int __near_adapter_add(const char *name, guint32 idx, guint32 protocols)
g_hash_table_insert(adapter_hash, GINT_TO_POINTER(idx), adapter);
+ g_dbus_register_interface(connection, adapter->path,
+ NFC_ADAPTER_INTERFACE,
+ adapter_methods, adapter_signals,
+ NULL, adapter, NULL);
+
return 0;
}
void __near_adapter_remove(guint32 idx)
{
+ struct near_adapter *adapter;
+
+ adapter = g_hash_table_lookup(adapter_hash, GINT_TO_POINTER(idx));
+ if (adapter == NULL || adapter->path == NULL)
+ return;
+
+ g_dbus_unregister_interface(connection, adapter->path,
+ NFC_ADAPTER_INTERFACE);
+
g_hash_table_remove(adapter_hash, GINT_TO_POINTER(idx));
}
@@ -108,6 +161,8 @@ int __near_adapter_init(void)
{
DBG("");
+ connection = near_dbus_get_connection();
+
adapter_hash = g_hash_table_new_full(g_direct_hash, g_direct_equal,
NULL, free_adapter);