From: Mikel Astiz <mikel.astiz.oss@gmail.com>
To: linux-bluetooth@vger.kernel.org
Cc: Mikel Astiz <mikel.astiz@bmw-carit.de>
Subject: [RFC v1 08/16] manager: Expose default adapter using property
Date: Thu, 15 Nov 2012 16:09:11 +0100 [thread overview]
Message-ID: <1352992159-11559-9-git-send-email-mikel.astiz.oss@gmail.com> (raw)
In-Reply-To: <1352992159-11559-1-git-send-email-mikel.astiz.oss@gmail.com>
From: Mikel Astiz <mikel.astiz@bmw-carit.de>
Replace previous method in the Manager interface with a property. If no
default adapter exists, the property will not be present.
---
doc/manager-api.txt | 20 +++------------
src/manager.c | 71 +++++++++++++++++++++++------------------------------
2 files changed, 35 insertions(+), 56 deletions(-)
diff --git a/doc/manager-api.txt b/doc/manager-api.txt
index cf3284a..b89ab68 100644
--- a/doc/manager-api.txt
+++ b/doc/manager-api.txt
@@ -14,13 +14,6 @@ Service org.bluez
Interface org.bluez.Manager
Object path /org/bluez
- object DefaultAdapter()
-
- Returns object path for the default adapter.
-
- Possible errors: org.bluez.Error.InvalidArguments
- org.bluez.Error.NoSuchAdapter
-
object FindAdapter(string pattern)
Returns object path for the specified adapter. Valid
@@ -40,15 +33,10 @@ Signals AdapterAdded(object adapter)
Parameter is object path of removed adapter.
- DefaultAdapterChanged(object adapter)
-
- Parameter is object path of the new default adapter.
-
- In case all adapters are removed this signal will not
- be emitted. The AdapterRemoved signal has to be used
- to detect that no default adapter is selected or
- available anymore.
-
Properties array{object} Adapters [readonly]
List of adapter object paths.
+
+ object DefaultAdapter [readonly, optional]
+
+ Object path for the default adapter, if any.
diff --git a/src/manager.c b/src/manager.c
index d6e7b80..08d6625 100644
--- a/src/manager.c
+++ b/src/manager.c
@@ -64,29 +64,6 @@ const char *manager_get_base_path(void)
return base_path;
}
-static DBusMessage *default_adapter(DBusConnection *conn,
- DBusMessage *msg, void *data)
-{
- DBusMessage *reply;
- struct btd_adapter *adapter;
- const gchar *path;
-
- adapter = manager_find_adapter_by_id(default_adapter_id);
- if (!adapter)
- return btd_error_no_such_adapter(msg);
-
- reply = dbus_message_new_method_return(msg);
- if (!reply)
- return NULL;
-
- path = adapter_get_path(adapter);
-
- dbus_message_append_args(reply, DBUS_TYPE_OBJECT_PATH, &path,
- DBUS_TYPE_INVALID);
-
- return reply;
-}
-
static DBusMessage *find_adapter(DBusConnection *conn,
DBusMessage *msg, void *data)
{
@@ -157,10 +134,32 @@ static gboolean manager_property_get_adapters(
return TRUE;
}
+static gboolean manager_property_get_default_adapter(
+ const GDBusPropertyTable *property,
+ DBusMessageIter *iter, void *data)
+{
+ struct btd_adapter *adapter;
+ const char *path;
+
+ adapter = manager_find_adapter_by_id(default_adapter_id);
+ path = adapter_get_path(adapter);
+
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_OBJECT_PATH, &path);
+
+ return TRUE;
+}
+
+static gboolean manager_property_exists_default_adapter(
+ const GDBusPropertyTable *property,
+ void *data)
+{
+ if (manager_find_adapter_by_id(default_adapter_id) == NULL)
+ return FALSE;
+ else
+ return TRUE;
+}
+
static const GDBusMethodTable manager_methods[] = {
- { GDBUS_METHOD("DefaultAdapter",
- NULL, GDBUS_ARGS({ "adapter", "o" }),
- default_adapter) },
{ GDBUS_METHOD("FindAdapter",
GDBUS_ARGS({ "pattern", "s" }),
GDBUS_ARGS({ "adapter", "o" }),
@@ -173,13 +172,13 @@ static const GDBusSignalTable manager_signals[] = {
GDBUS_ARGS({ "adapter", "o" })) },
{ GDBUS_SIGNAL("AdapterRemoved",
GDBUS_ARGS({ "adapter", "o" })) },
- { GDBUS_SIGNAL("DefaultAdapterChanged",
- GDBUS_ARGS({ "adapter", "o" })) },
{ }
};
static const GDBusPropertyTable manager_properties[] = {
{ "Adapters", "ao", manager_property_get_adapters },
+ { "DefaultAdapter", "o", manager_property_get_default_adapter, NULL,
+ manager_property_exists_default_adapter },
{ }
};
@@ -198,21 +197,13 @@ bool manager_init(const char *path)
static void manager_set_default_adapter(int id)
{
- struct btd_adapter *adapter;
- const gchar *path;
-
- default_adapter_id = id;
-
- adapter = manager_find_adapter_by_id(id);
- if (!adapter)
+ if (id == default_adapter_id)
return;
- path = adapter_get_path(adapter);
+ default_adapter_id = id;
- g_dbus_emit_signal(btd_get_dbus_connection(), base_path,
- MANAGER_INTERFACE, "DefaultAdapterChanged",
- DBUS_TYPE_OBJECT_PATH, &path,
- DBUS_TYPE_INVALID);
+ g_dbus_emit_property_changed(btd_get_dbus_connection(), base_path,
+ MANAGER_INTERFACE, "DefaultAdapter");
}
struct btd_adapter *manager_get_default_adapter(void)
--
1.7.11.7
next prev parent reply other threads:[~2012-11-15 15:09 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-15 15:09 [RFC v1 00/16] Manager/Adapter transition to ObjectManager Mikel Astiz
2012-11-15 15:09 ` [RFC v1 01/16] cups: Remove unnecessary code Mikel Astiz
2012-11-15 15:09 ` [RFC v1 02/16] doc: Add missing documentation in FindAdapter Mikel Astiz
2012-11-15 15:09 ` [RFC v1 03/16] manager: Extend FindAdapter with "default" pattern Mikel Astiz
2012-11-16 13:29 ` Luiz Augusto von Dentz
2012-11-15 15:09 ` [RFC v1 04/16] test: Avoid using DefaultAdapter() Mikel Astiz
2012-11-15 15:09 ` [RFC v1 05/16] manager: Move org.bluez.Manager to org/bluez Mikel Astiz
2012-11-15 15:09 ` [RFC v1 06/16] test: Update to new Manager path Mikel Astiz
2012-11-15 15:09 ` [RFC v1 07/16] test: Update monitor script to ObjectManager Mikel Astiz
2012-11-15 15:09 ` Mikel Astiz [this message]
2012-11-15 15:09 ` [RFC v1 09/16] test: Update test-manager " Mikel Astiz
2012-11-15 15:09 ` [RFC v1 10/16] manager: Remove AdapterAdded/AdapterRemoved signals Mikel Astiz
2012-11-15 15:09 ` [RFC v1 11/16] manager: Remove redundant Adapters property Mikel Astiz
2012-11-15 15:09 ` [RFC v1 12/16] test: Use ObjectManager instead of " Mikel Astiz
2012-11-15 15:09 ` [RFC v1 13/16] adapter: Remove DeviceCreated/DeviceRemoved signals Mikel Astiz
2012-11-15 15:09 ` [RFC v1 14/16] adapter: Remove redundant Devices property Mikel Astiz
2012-11-15 15:09 ` [RFC v1 15/16] test: Use ObjectManager instead of " Mikel Astiz
2012-11-15 15:09 ` [RFC v1 16/16] adapter: Remove FindDevice method from D-Bus API Mikel Astiz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1352992159-11559-9-git-send-email-mikel.astiz.oss@gmail.com \
--to=mikel.astiz.oss@gmail.com \
--cc=linux-bluetooth@vger.kernel.org \
--cc=mikel.astiz@bmw-carit.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox