* [PATCH BlueZ v2] l2test: Add support to test auto select PSM
From: Syam Sidhardhan @ 2012-12-05 16:21 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Syam Sidhardhan
This patch enable us to test the auto select PSM by passing
PSM value as 0.
Ex: l2test -d -P 0
l2test[2585]: Waiting for connection on psm 4099 ...
---
v2 -> Retain the interoperability issue mentioned by Gustavo.
test/l2test.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/test/l2test.c b/test/l2test.c
index 7f9f007..c88116d 100644
--- a/test/l2test.c
+++ b/test/l2test.c
@@ -454,8 +454,6 @@ static void do_listen(void (*handler)(int sk))
addr.l2_cid = htobs(cid);
else if (psm)
addr.l2_psm = htobs(psm);
- else
- goto error;
if (bind(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
syslog(LOG_ERR, "Can't bind socket: %s (%d)",
--
1.7.9.5
^ permalink raw reply related
* [PATCH v1 6/6] media: Add version suffix to all media interfaces
From: Mikel Astiz @ 2012-12-05 16:15 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354724134-7354-1-git-send-email-mikel.astiz.oss@gmail.com>
From: Mikel Astiz <mikel.astiz@bmw-carit.de>
Append the version number to all D-Bus interface names in the Media API.
---
doc/audio-telephony-design.txt | 4 ++--
doc/media-api.txt | 20 ++++++++++----------
profiles/audio/media.c | 8 ++++----
profiles/audio/player.c | 2 +-
profiles/audio/transport.c | 2 +-
test/mpris-player.c | 14 +++++++-------
6 files changed, 25 insertions(+), 25 deletions(-)
diff --git a/doc/audio-telephony-design.txt b/doc/audio-telephony-design.txt
index ec575f2..308986b 100644
--- a/doc/audio-telephony-design.txt
+++ b/doc/audio-telephony-design.txt
@@ -35,9 +35,9 @@ When a new device is connected, NewConnection method of Profile1 agent
is called with informations related to connecting profile (like RFCOMM
client file descriptor, version, features, media end point path, ...).
-The telephony application is in charge to implement a MediaTransport for
+The telephony application is in charge to implement a MediaTransport1 for
its audio connection with remote device and interact with the
-MediaTransport of the audio component (i.e. PulseAudio).
+MediaTransport1 of the audio component (i.e. PulseAudio).
Flow charts
===========
diff --git a/doc/media-api.txt b/doc/media-api.txt
index 5e052b4..ce7502a 100644
--- a/doc/media-api.txt
+++ b/doc/media-api.txt
@@ -5,7 +5,7 @@ Media hierarchy
===============
Service org.bluez
-Interface org.bluez.Media
+Interface org.bluez.Media1
Object path [variable prefix]/{hci0,hci1,...}
Methods void RegisterEndpoint(object endpoint, dict properties)
@@ -123,12 +123,12 @@ Methods void RegisterEndpoint(object endpoint, dict properties)
Unregister sender media player.
-MediaPlayer hierarchy
-=====================
+MediaPlayer1 hierarchy
+======================
Service unique name (Target role)
org.bluez (Controller role)
-Interface org.bluez.MediaPlayer
+Interface org.bluez.Media1Player1
Object path freely definable (Target role)
[variable prefix]/{hci0,hci1,...}/dev_XX_XX_XX_XX_XX_XX/playerX
(Controller role)
@@ -219,11 +219,11 @@ Properties string Equalizer [readwrite]
possible to signal its end by setting position to the
maximum uint32 value.
-MediaEndpoint hierarchy
-=======================
+MediaEndpoint1 hierarchy
+========================
Service unique name
-Interface org.bluez.MediaEndpoint
+Interface org.bluez.Media1Endpoint1
Object path freely definable
Methods void SetConfiguration(object transport, dict properties)
@@ -254,11 +254,11 @@ Methods void SetConfiguration(object transport, dict properties)
endpoint, because when this method gets called it has
already been unregistered.
-MediaTransport hierarchy
-========================
+MediaTransport1 hierarchy
+=========================
Service org.bluez
-Interface org.bluez.MediaTransport
+Interface org.bluez.MediaTransport1
Object path [variable prefix]/{hci0,hci1,...}/dev_XX_XX_XX_XX_XX_XX/fdX
Methods fd, uint16, uint16 Acquire()
diff --git a/profiles/audio/media.c b/profiles/audio/media.c
index 2041d23..7c0bc0a 100644
--- a/profiles/audio/media.c
+++ b/profiles/audio/media.c
@@ -50,9 +50,9 @@
#include "avrcp.h"
#include "manager.h"
-#define MEDIA_INTERFACE "org.bluez.Media"
-#define MEDIA_ENDPOINT_INTERFACE "org.bluez.MediaEndpoint"
-#define MEDIA_PLAYER_INTERFACE "org.bluez.MediaPlayer"
+#define MEDIA_INTERFACE "org.bluez.Media1"
+#define MEDIA_ENDPOINT_INTERFACE "org.bluez.Media1Endpoint1"
+#define MEDIA_PLAYER_INTERFACE "org.bluez.MediaPlayer1"
#define REQUEST_TIMEOUT (3 * 1000) /* 3 seconds */
@@ -402,7 +402,7 @@ static gboolean set_configuration(struct media_endpoint *endpoint,
path = media_transport_get_path(transport);
dbus_message_iter_append_basic(&iter, DBUS_TYPE_OBJECT_PATH, &path);
- g_dbus_get_properties(conn, path, "org.bluez.MediaTransport", &iter);
+ g_dbus_get_properties(conn, path, "org.bluez.MediaTransport1", &iter);
return media_endpoint_async_call(msg, endpoint, cb, user_data, destroy);
}
diff --git a/profiles/audio/player.c b/profiles/audio/player.c
index 34b1f20..368bfa8 100644
--- a/profiles/audio/player.c
+++ b/profiles/audio/player.c
@@ -42,7 +42,7 @@
#include "dbus-common.h"
#include "error.h"
-#define MEDIA_PLAYER_INTERFACE "org.bluez.MediaPlayer"
+#define MEDIA_PLAYER_INTERFACE "org.bluez.MediaPlayer1"
struct player_callback {
const struct media_player_callback *cbs;
diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c
index 666f68a..165ebd3 100644
--- a/profiles/audio/transport.c
+++ b/profiles/audio/transport.c
@@ -48,7 +48,7 @@
#include "source.h"
#include "avrcp.h"
-#define MEDIA_TRANSPORT_INTERFACE "org.bluez.MediaTransport"
+#define MEDIA_TRANSPORT_INTERFACE "org.bluez.MediaTransport1"
typedef enum {
TRANSPORT_STATE_IDLE, /* Not acquired and suspended */
diff --git a/test/mpris-player.c b/test/mpris-player.c
index 7985cdd..90c87aa 100644
--- a/test/mpris-player.c
+++ b/test/mpris-player.c
@@ -186,7 +186,7 @@ static int parse_property(DBusConnection *conn, const char *path,
DBUS_TYPE_STRING, &value);
else
emit_properties_changed(sys, path,
- "org.bluez.MediaPlayer", "Status",
+ "org.bluez.MediaPlayer1", "Status",
DBUS_TYPE_STRING, &value);
} else if (strcasecmp(key, "Position") == 0) {
int64_t usec, msec;
@@ -203,7 +203,7 @@ static int parse_property(DBusConnection *conn, const char *path,
DBUS_TYPE_UINT32, &msec);
else
emit_properties_changed(sys, path,
- "org.bluez.MediaPlayer", "Position",
+ "org.bluez.MediaPlayer1", "Position",
DBUS_TYPE_UINT32, &msec);
} else if (strcasecmp(key, "Shuffle") == 0) {
dbus_bool_t value;
@@ -221,7 +221,7 @@ static int parse_property(DBusConnection *conn, const char *path,
DBUS_TYPE_STRING, &str);
else
emit_properties_changed(sys, path,
- "org.bluez.MediaPlayer", "Shuffle",
+ "org.bluez.MediaPlayer1", "Shuffle",
DBUS_TYPE_STRING, &str);
}
@@ -446,7 +446,7 @@ static char *sender2path(const char *sender)
static DBusHandlerResult player_message(DBusConnection *conn,
DBusMessage *msg, void *data)
{
- if (dbus_message_is_method_call(msg, "org.bluez.MediaPlayer",
+ if (dbus_message_is_method_call(msg, "org.bluez.MediaPlayer1",
"Release")) {
printf("Release\n");
exit(1);
@@ -472,7 +472,7 @@ static void add_player(DBusConnection *conn, const char *name,
return;
msg = dbus_message_new_method_call("org.bluez", adapter,
- "org.bluez.Media",
+ "org.bluez.Media1",
"RegisterPlayer");
if (!msg) {
fprintf(stderr, "Can't allocate new method call\n");
@@ -539,7 +539,7 @@ static void remove_player(DBusConnection *conn, const char *sender)
char *path;
msg = dbus_message_new_method_call("org.bluez", adapter,
- "org.bluez.Media",
+ "org.bluez.Media1",
"UnregisterPlayer");
if (!msg) {
fprintf(stderr, "Can't allocate new method call\n");
@@ -578,7 +578,7 @@ static DBusHandlerResult properties_changed(DBusConnection *conn,
path = sender2path(dbus_message_get_sender(msg));
parse_properties(conn, path, &iter, NULL);
- signal = dbus_message_new_signal(path, "org.bluez.MediaPlayer",
+ signal = dbus_message_new_signal(path, "org.bluez.MediaPlayer1",
"TrackChanged");
if (!signal) {
fprintf(stderr, "Unable to allocate new PropertyChanged"
--
1.7.11.7
^ permalink raw reply related
* [PATCH v1 5/6] media: Trivial style fix
From: Mikel Astiz @ 2012-12-05 16:15 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354724134-7354-1-git-send-email-mikel.astiz.oss@gmail.com>
From: Mikel Astiz <mikel.astiz@bmw-carit.de>
No whitespace should exist before parenthesis close.
---
profiles/audio/transport.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c
index 0fd2469..666f68a 100644
--- a/profiles/audio/transport.c
+++ b/profiles/audio/transport.c
@@ -663,7 +663,7 @@ static const GDBusMethodTable transport_methods[] = {
{ GDBUS_ASYNC_METHOD("Acquire",
NULL,
GDBUS_ARGS({ "fd", "h" }, { "mtu_r", "q" },
- { "mtu_w", "q" } ),
+ { "mtu_w", "q" }),
acquire) },
{ GDBUS_ASYNC_METHOD("TryAcquire",
NULL,
--
1.7.11.7
^ permalink raw reply related
* [PATCH v1 4/6] media: Add MediaTransport.TryAcquire()
From: Mikel Astiz @ 2012-12-05 16:15 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354724134-7354-1-git-send-email-mikel.astiz.oss@gmail.com>
From: Mikel Astiz <mikel.astiz@bmw-carit.de>
Split the Acquire() method in two parts so that the optional acquires,
formerly represented as a "?" flag in the accesstype parameter of
Acquire(), are now implemented in TryAcquire().
---
doc/media-api.txt | 7 +++++++
profiles/audio/transport.c | 36 ++++++++++++++++++++++++++++++++++++
2 files changed, 43 insertions(+)
diff --git a/doc/media-api.txt b/doc/media-api.txt
index b15ad61..5e052b4 100644
--- a/doc/media-api.txt
+++ b/doc/media-api.txt
@@ -266,6 +266,13 @@ Methods fd, uint16, uint16 Acquire()
Acquire transport file descriptor and the MTU for read
and write respectively.
+ fd, uint16, uint16 TryAcquire()
+
+ Acquire transport file descriptor only if the transport
+ is in "pending" state at the time the message is
+ received by BlueZ. Otherwise no request will be sent
+ to the remote device and the function will just fail.
+
void Release()
Releases file descriptor.
diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c
index 1064098..0fd2469 100644
--- a/profiles/audio/transport.c
+++ b/profiles/audio/transport.c
@@ -463,6 +463,37 @@ static DBusMessage *acquire(DBusConnection *conn, DBusMessage *msg,
return NULL;
}
+static DBusMessage *try_acquire(DBusConnection *conn, DBusMessage *msg,
+ void *data)
+{
+ struct media_transport *transport = data;
+ struct media_owner *owner;
+ struct media_request *req;
+ guint id;
+
+ if (transport->owner != NULL)
+ return btd_error_not_authorized(msg);
+
+ if (transport->state >= TRANSPORT_STATE_REQUESTING)
+ return btd_error_not_authorized(msg);
+
+ if (transport->state != TRANSPORT_STATE_PENDING)
+ return btd_error_failed(msg, "Transport not playing");
+
+ owner = media_owner_create(msg);
+ id = transport->resume(transport, owner);
+ if (id == 0) {
+ media_owner_free(owner);
+ return btd_error_not_authorized(msg);
+ }
+
+ req = media_request_create(msg, id);
+ media_owner_add(owner, req);
+ media_transport_set_owner(transport, owner);
+
+ return NULL;
+}
+
static DBusMessage *release(DBusConnection *conn, DBusMessage *msg,
void *data)
{
@@ -634,6 +665,11 @@ static const GDBusMethodTable transport_methods[] = {
GDBUS_ARGS({ "fd", "h" }, { "mtu_r", "q" },
{ "mtu_w", "q" } ),
acquire) },
+ { GDBUS_ASYNC_METHOD("TryAcquire",
+ NULL,
+ GDBUS_ARGS({ "fd", "h" }, { "mtu_r", "q" },
+ { "mtu_w", "q" }),
+ try_acquire) },
{ GDBUS_ASYNC_METHOD("Release", NULL, NULL, release) },
{ },
};
--
1.7.11.7
^ permalink raw reply related
* [PATCH v1 3/6] media: Remove transport owner list
From: Mikel Astiz @ 2012-12-05 16:15 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354724134-7354-1-git-send-email-mikel.astiz.oss@gmail.com>
From: Mikel Astiz <mikel.astiz@bmw-carit.de>
Transports now have zero or one owners, so there is no need to maintain
a list any more.
---
profiles/audio/transport.c | 79 ++++++++++++----------------------------------
1 file changed, 21 insertions(+), 58 deletions(-)
diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c
index 4bb54f6..1064098 100644
--- a/profiles/audio/transport.c
+++ b/profiles/audio/transport.c
@@ -88,7 +88,7 @@ struct media_transport {
char *path; /* Transport object path */
struct audio_device *device; /* Transport device */
struct media_endpoint *endpoint; /* Transport endpoint */
- GSList *owners; /* Transport owners */
+ struct media_owner *owner; /* Transport owner */
uint8_t *configuration; /* Transport configuration */
int size; /* Transport configuration size */
int fd; /* Transport file descriptor */
@@ -241,24 +241,24 @@ static void media_owner_free(struct media_owner *owner)
g_free(owner);
}
-static void media_transport_remove(struct media_transport *transport,
- struct media_owner *owner)
+static void media_transport_remove_owner(struct media_transport *transport)
{
+ struct media_owner *owner = transport->owner;
+
DBG("Transport %s Owner %s", transport->path, owner->name);
/* Reply if owner has a pending request */
if (owner->pending)
media_request_reply(owner->pending, EIO);
- transport->owners = g_slist_remove(transport->owners, owner);
+ transport->owner = NULL;
if (owner->watch)
g_dbus_remove_watch(btd_get_dbus_connection(), owner->watch);
media_owner_free(owner);
- /* Suspend if there is no longer any owner */
- if (transport->owners == NULL && state_in_use(transport->state))
+ if (state_in_use(transport->state))
transport->suspend(transport, NULL);
}
@@ -319,7 +319,7 @@ static void a2dp_resume_complete(struct avdtp *session,
return;
fail:
- media_transport_remove(transport, owner);
+ media_transport_remove_owner(transport);
}
static guint resume_a2dp(struct media_transport *transport,
@@ -366,7 +366,7 @@ static void a2dp_suspend_complete(struct avdtp *session,
a2dp_sep_unlock(sep, a2dp->session);
transport_set_state(transport, TRANSPORT_STATE_IDLE);
- media_transport_remove(transport, owner);
+ media_transport_remove_owner(transport);
}
static guint suspend_a2dp(struct media_transport *transport,
@@ -399,14 +399,14 @@ static void media_owner_exit(DBusConnection *connection, void *user_data)
media_owner_remove(owner);
- media_transport_remove(owner->transport, owner);
+ media_transport_remove_owner(owner->transport);
}
-static void media_transport_add(struct media_transport *transport,
+static void media_transport_set_owner(struct media_transport *transport,
struct media_owner *owner)
{
DBG("Transport %s Owner %s", transport->path, owner->name);
- transport->owners = g_slist_append(transport->owners, owner);
+ transport->owner = owner;
owner->transport = transport;
owner->watch = g_dbus_add_disconnect_watch(btd_get_dbus_connection(),
owner->name,
@@ -435,35 +435,15 @@ static void media_owner_add(struct media_owner *owner,
owner->pending = req;
}
-static struct media_owner *media_transport_find_owner(
- struct media_transport *transport,
- const char *name)
-{
- GSList *l;
-
- for (l = transport->owners; l; l = l->next) {
- struct media_owner *owner = l->data;
-
- if (g_strcmp0(owner->name, name) == 0)
- return owner;
- }
-
- return NULL;
-}
-
static DBusMessage *acquire(DBusConnection *conn, DBusMessage *msg,
void *data)
{
struct media_transport *transport = data;
struct media_owner *owner;
struct media_request *req;
- const char *sender;
guint id;
- sender = dbus_message_get_sender(msg);
-
- owner = media_transport_find_owner(transport, sender);
- if (owner != NULL)
+ if (transport->owner != NULL)
return btd_error_not_authorized(msg);
if (transport->state >= TRANSPORT_STATE_REQUESTING)
@@ -478,7 +458,7 @@ static DBusMessage *acquire(DBusConnection *conn, DBusMessage *msg,
req = media_request_create(msg, id);
media_owner_add(owner, req);
- media_transport_add(transport, owner);
+ media_transport_set_owner(transport, owner);
return NULL;
}
@@ -487,23 +467,16 @@ static DBusMessage *release(DBusConnection *conn, DBusMessage *msg,
void *data)
{
struct media_transport *transport = data;
- struct media_owner *owner;
+ struct media_owner *owner = transport->owner;
const char *sender;
struct media_request *req;
guint id;
sender = dbus_message_get_sender(msg);
- owner = media_transport_find_owner(transport, sender);
- if (owner == NULL)
+ if (owner == NULL || g_strcmp0(owner->name, sender) != 0)
return btd_error_not_authorized(msg);
- /* Not the last owner, no need to suspend */
- if (g_slist_length(transport->owners) != 1) {
- media_transport_remove(transport, owner);
- return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
- }
-
if (owner->pending) {
const char *member;
@@ -519,7 +492,7 @@ static DBusMessage *release(DBusConnection *conn, DBusMessage *msg,
id = transport->suspend(transport, owner);
if (id == 0) {
- media_transport_remove(transport, owner);
+ media_transport_remove_owner(transport);
return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
}
@@ -689,15 +662,9 @@ static void destroy_a2dp(void *data)
static void media_transport_free(void *data)
{
struct media_transport *transport = data;
- GSList *l = transport->owners;
- while (l) {
- struct media_owner *owner = l->data;
- l = l->next;
- media_transport_remove(transport, owner);
- }
-
- g_slist_free(transport->owners);
+ if (transport->owner)
+ media_transport_remove_owner(transport);
if (transport->destroy != NULL)
transport->destroy(transport->data);
@@ -717,13 +684,9 @@ static void transport_update_playing(struct media_transport *transport,
if (transport->state == TRANSPORT_STATE_PENDING)
transport_set_state(transport, TRANSPORT_STATE_IDLE);
else if (transport->state == TRANSPORT_STATE_ACTIVE) {
- /* Remove all owners */
- while (transport->owners != NULL) {
- struct media_owner *owner;
-
- owner = transport->owners->data;
- media_transport_remove(transport, owner);
- }
+ /* Remove owner */
+ if (transport->owner != NULL)
+ media_transport_remove_owner(transport);
}
} else if (transport->state == TRANSPORT_STATE_IDLE)
transport_set_state(transport, TRANSPORT_STATE_PENDING);
--
1.7.11.7
^ permalink raw reply related
* [PATCH v1 2/6] media: Remove internal transport locks
From: Mikel Astiz @ 2012-12-05 16:15 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354724134-7354-1-git-send-email-mikel.astiz.oss@gmail.com>
From: Mikel Astiz <mikel.astiz@bmw-carit.de>
The internal transport_lock_t is not needed any more since transports
are now always acquired with read and write permissions.
---
profiles/audio/transport.c | 130 ++++++++++-----------------------------------
1 file changed, 28 insertions(+), 102 deletions(-)
diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c
index a76481c..4bb54f6 100644
--- a/profiles/audio/transport.c
+++ b/profiles/audio/transport.c
@@ -51,11 +51,6 @@
#define MEDIA_TRANSPORT_INTERFACE "org.bluez.MediaTransport"
typedef enum {
- TRANSPORT_LOCK_READ = 1,
- TRANSPORT_LOCK_WRITE = 1 << 1,
-} transport_lock_t;
-
-typedef enum {
TRANSPORT_STATE_IDLE, /* Not acquired and suspended */
TRANSPORT_STATE_PENDING, /* Playing but not acquired */
TRANSPORT_STATE_REQUESTING, /* Acquire in progress */
@@ -80,7 +75,6 @@ struct media_owner {
struct media_transport *transport;
struct media_request *pending;
char *name;
- transport_lock_t lock;
guint watch;
};
@@ -100,7 +94,6 @@ struct media_transport {
int fd; /* Transport file descriptor */
uint16_t imtu; /* Transport input mtu */
uint16_t omtu; /* Transport output mtu */
- transport_lock_t lock;
transport_state_t state;
guint hs_watch;
guint source_watch;
@@ -115,18 +108,6 @@ struct media_transport {
void *data;
};
-static const char *lock2str(transport_lock_t lock)
-{
- if (lock == 0)
- return "";
- else if (lock == TRANSPORT_LOCK_READ)
- return "r";
- else if (lock == TRANSPORT_LOCK_WRITE)
- return "w";
- else
- return "rw";
-}
-
static const char *state2str(transport_state_t state)
{
switch (state) {
@@ -229,20 +210,6 @@ static void media_request_reply(struct media_request *req, int err)
g_dbus_send_message(btd_get_dbus_connection(), reply);
}
-static gboolean media_transport_release(struct media_transport *transport,
- transport_lock_t lock)
-{
- transport->lock &= ~lock;
-
- if (lock & TRANSPORT_LOCK_READ)
- DBG("Transport %s: read lock released", transport->path);
-
- if (lock & TRANSPORT_LOCK_WRITE)
- DBG("Transport %s: write lock released", transport->path);
-
- return TRUE;
-}
-
static void media_owner_remove(struct media_owner *owner)
{
struct media_transport *transport = owner->transport;
@@ -279,8 +246,6 @@ static void media_transport_remove(struct media_transport *transport,
{
DBG("Transport %s Owner %s", transport->path, owner->name);
- media_transport_release(transport, owner->lock);
-
/* Reply if owner has a pending request */
if (owner->pending)
media_request_reply(owner->pending, EIO);
@@ -339,12 +304,6 @@ static void a2dp_resume_complete(struct avdtp *session,
media_transport_set_fd(transport, fd, imtu, omtu);
- if ((owner->lock & TRANSPORT_LOCK_READ) == 0)
- imtu = 0;
-
- if ((owner->lock & TRANSPORT_LOCK_WRITE) == 0)
- omtu = 0;
-
ret = g_dbus_send_reply(btd_get_dbus_connection(), req->msg,
DBUS_TYPE_UNIX_FD, &fd,
DBUS_TYPE_UINT16, &imtu,
@@ -443,24 +402,6 @@ static void media_owner_exit(DBusConnection *connection, void *user_data)
media_transport_remove(owner->transport, owner);
}
-static gboolean media_transport_acquire(struct media_transport *transport,
- transport_lock_t lock)
-{
- if (transport->lock & lock)
- return FALSE;
-
- transport->lock |= lock;
-
- if (lock & TRANSPORT_LOCK_READ)
- DBG("Transport %s: read lock acquired", transport->path);
-
- if (lock & TRANSPORT_LOCK_WRITE)
- DBG("Transport %s: write lock acquired", transport->path);
-
-
- return TRUE;
-}
-
static void media_transport_add(struct media_transport *transport,
struct media_owner *owner)
{
@@ -473,17 +414,14 @@ static void media_transport_add(struct media_transport *transport,
owner, NULL);
}
-static struct media_owner *media_owner_create(DBusMessage *msg,
- transport_lock_t lock)
+static struct media_owner *media_owner_create(DBusMessage *msg)
{
struct media_owner *owner;
owner = g_new0(struct media_owner, 1);
owner->name = g_strdup(dbus_message_get_sender(msg));
- owner->lock = lock;
- DBG("Owner created: sender=%s accesstype=%s", owner->name,
- lock2str(lock));
+ DBG("Owner created: sender=%s", owner->name);
return owner;
}
@@ -521,7 +459,6 @@ static DBusMessage *acquire(DBusConnection *conn, DBusMessage *msg,
struct media_request *req;
const char *sender;
guint id;
- transport_lock_t lock = TRANSPORT_LOCK_READ | TRANSPORT_LOCK_WRITE;
sender = dbus_message_get_sender(msg);
@@ -529,13 +466,12 @@ static DBusMessage *acquire(DBusConnection *conn, DBusMessage *msg,
if (owner != NULL)
return btd_error_not_authorized(msg);
- if (media_transport_acquire(transport, lock) == FALSE)
+ if (transport->state >= TRANSPORT_STATE_REQUESTING)
return btd_error_not_authorized(msg);
- owner = media_owner_create(msg, lock);
+ owner = media_owner_create(msg);
id = transport->resume(transport, owner);
if (id == 0) {
- media_transport_release(transport, lock);
media_owner_free(owner);
return btd_error_not_authorized(msg);
}
@@ -554,7 +490,7 @@ static DBusMessage *release(DBusConnection *conn, DBusMessage *msg,
struct media_owner *owner;
const char *sender;
struct media_request *req;
- transport_lock_t lock = TRANSPORT_LOCK_READ | TRANSPORT_LOCK_WRITE;
+ guint id;
sender = dbus_message_get_sender(msg);
@@ -562,45 +498,35 @@ static DBusMessage *release(DBusConnection *conn, DBusMessage *msg,
if (owner == NULL)
return btd_error_not_authorized(msg);
- if (owner->lock == lock) {
- guint id;
-
- /* Not the last owner, no need to suspend */
- if (g_slist_length(transport->owners) != 1) {
- media_transport_remove(transport, owner);
- return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
- }
-
- if (owner->pending) {
- const char *member;
+ /* Not the last owner, no need to suspend */
+ if (g_slist_length(transport->owners) != 1) {
+ media_transport_remove(transport, owner);
+ return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+ }
- member = dbus_message_get_member(owner->pending->msg);
- /* Cancel Acquire request if that exist */
- if (g_str_equal(member, "Acquire"))
- media_owner_remove(owner);
- else
- return btd_error_in_progress(msg);
- }
+ if (owner->pending) {
+ const char *member;
- transport_set_state(transport, TRANSPORT_STATE_SUSPENDING);
+ member = dbus_message_get_member(owner->pending->msg);
+ /* Cancel Acquire request if that exist */
+ if (g_str_equal(member, "Acquire"))
+ media_owner_remove(owner);
+ else
+ return btd_error_in_progress(msg);
+ }
- id = transport->suspend(transport, owner);
- if (id == 0) {
- media_transport_remove(transport, owner);
- return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
- }
+ transport_set_state(transport, TRANSPORT_STATE_SUSPENDING);
- req = media_request_create(msg, id);
- media_owner_add(owner, req);
+ id = transport->suspend(transport, owner);
+ if (id == 0) {
+ media_transport_remove(transport, owner);
+ return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+ }
- return NULL;
- } else if ((owner->lock & lock) == lock) {
- media_transport_release(transport, lock);
- owner->lock &= ~lock;
- } else
- return btd_error_not_authorized(msg);
+ req = media_request_create(msg, id);
+ media_owner_add(owner, req);
- return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+ return NULL;
}
static gboolean get_device(const GDBusPropertyTable *property,
--
1.7.11.7
^ permalink raw reply related
* [PATCH v1 1/6] media: Remove transport access type from D-Bus API
From: Mikel Astiz @ 2012-12-05 16:15 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354724134-7354-1-git-send-email-mikel.astiz.oss@gmail.com>
From: Mikel Astiz <mikel.astiz@bmw-carit.de>
There is no known use-case making use of these access types and
therefore the Media API can be simplified.
>From now on, the transport will always be acquired with read and write
access rights.
---
doc/media-api.txt | 23 ++---------------------
profiles/audio/transport.c | 47 ++++++----------------------------------------
2 files changed, 8 insertions(+), 62 deletions(-)
diff --git a/doc/media-api.txt b/doc/media-api.txt
index cf69efa..b15ad61 100644
--- a/doc/media-api.txt
+++ b/doc/media-api.txt
@@ -261,31 +261,12 @@ Service org.bluez
Interface org.bluez.MediaTransport
Object path [variable prefix]/{hci0,hci1,...}/dev_XX_XX_XX_XX_XX_XX/fdX
-Methods fd, uint16, uint16 Acquire(string accesstype)
+Methods fd, uint16, uint16 Acquire()
Acquire transport file descriptor and the MTU for read
and write respectively.
- possible accesstype:
-
- "r" : Read only access
-
- "w" : Write only access
-
- "rw": Read and write access
-
- The accesstype string can also be combined with a "?"
- suffix, which will make the request optional. This
- typically means the transport will only be acquired if
- it is already available (remote-initiated), but
- otherwise no request will be sent to the remote side.
- In this last case the function will fail. Note that,
- due to compatibility issues with older versions of
- BlueZ, clients are encouraged to use exactly the same
- accesstype for Release(), matching the string provided
- to Acquire().
-
- void Release(string accesstype)
+ void Release()
Releases file descriptor.
diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c
index 610aca3..a76481c 100644
--- a/profiles/audio/transport.c
+++ b/profiles/audio/transport.c
@@ -127,19 +127,6 @@ static const char *lock2str(transport_lock_t lock)
return "rw";
}
-static transport_lock_t str2lock(const char *str)
-{
- transport_lock_t lock = 0;
-
- if (g_strstr_len(str, -1, "r") != NULL)
- lock |= TRANSPORT_LOCK_READ;
-
- if (g_strstr_len(str, -1, "w") != NULL)
- lock |= TRANSPORT_LOCK_WRITE;
-
- return lock;
-}
-
static const char *state2str(transport_state_t state)
{
switch (state) {
@@ -532,14 +519,9 @@ static DBusMessage *acquire(DBusConnection *conn, DBusMessage *msg,
struct media_transport *transport = data;
struct media_owner *owner;
struct media_request *req;
- const char *accesstype, *sender;
- transport_lock_t lock;
+ const char *sender;
guint id;
-
- if (!dbus_message_get_args(msg, NULL,
- DBUS_TYPE_STRING, &accesstype,
- DBUS_TYPE_INVALID))
- return btd_error_invalid_args(msg);
+ transport_lock_t lock = TRANSPORT_LOCK_READ | TRANSPORT_LOCK_WRITE;
sender = dbus_message_get_sender(msg);
@@ -547,14 +529,6 @@ static DBusMessage *acquire(DBusConnection *conn, DBusMessage *msg,
if (owner != NULL)
return btd_error_not_authorized(msg);
- lock = str2lock(accesstype);
- if (lock == 0)
- return btd_error_invalid_args(msg);
-
- if (transport->state != TRANSPORT_STATE_PENDING &&
- g_strstr_len(accesstype, -1, "?") != NULL)
- return btd_error_failed(msg, "Transport not playing");
-
if (media_transport_acquire(transport, lock) == FALSE)
return btd_error_not_authorized(msg);
@@ -578,14 +552,9 @@ static DBusMessage *release(DBusConnection *conn, DBusMessage *msg,
{
struct media_transport *transport = data;
struct media_owner *owner;
- const char *accesstype, *sender;
- transport_lock_t lock;
+ const char *sender;
struct media_request *req;
-
- if (!dbus_message_get_args(msg, NULL,
- DBUS_TYPE_STRING, &accesstype,
- DBUS_TYPE_INVALID))
- return btd_error_invalid_args(msg);
+ transport_lock_t lock = TRANSPORT_LOCK_READ | TRANSPORT_LOCK_WRITE;
sender = dbus_message_get_sender(msg);
@@ -593,8 +562,6 @@ static DBusMessage *release(DBusConnection *conn, DBusMessage *msg,
if (owner == NULL)
return btd_error_not_authorized(msg);
- lock = str2lock(accesstype);
-
if (owner->lock == lock) {
guint id;
@@ -764,13 +731,11 @@ static void set_volume(const GDBusPropertyTable *property,
static const GDBusMethodTable transport_methods[] = {
{ GDBUS_ASYNC_METHOD("Acquire",
- GDBUS_ARGS({ "access_type", "s" }),
+ NULL,
GDBUS_ARGS({ "fd", "h" }, { "mtu_r", "q" },
{ "mtu_w", "q" } ),
acquire) },
- { GDBUS_ASYNC_METHOD("Release",
- GDBUS_ARGS({ "access_type", "s" }), NULL,
- release ) },
+ { GDBUS_ASYNC_METHOD("Release", NULL, NULL, release) },
{ },
};
--
1.7.11.7
^ permalink raw reply related
* [PATCH v1 0/6] Remove access rights from MediaTransport
From: Mikel Astiz @ 2012-12-05 16:15 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Mikel Astiz
From: Mikel Astiz <mikel.astiz@bmw-carit.de>
v1 proposes TryAcquire() instead of Acquire(TRUE), as suggested by Johan.
>From original cover-letter:
The accessrights used in the Acquire() method are not very useful and can thus be removed. This simplifies both the D-Bus API and the internal implementation significantly.
Mikel Astiz (6):
media: Remove transport access type from D-Bus API
media: Remove internal transport locks
media: Remove transport owner list
media: Add MediaTransport.TryAcquire()
media: Trivial style fix
media: Add version suffix to all media interfaces
doc/audio-telephony-design.txt | 4 +-
doc/media-api.txt | 46 +++----
profiles/audio/media.c | 8 +-
profiles/audio/player.c | 2 +-
profiles/audio/transport.c | 264 ++++++++++++-----------------------------
test/mpris-player.c | 14 +--
6 files changed, 108 insertions(+), 230 deletions(-)
--
1.7.11.7
^ permalink raw reply
* Re: [PATCH v3] hciconfig: Remove putkey command
From: Johan Hedberg @ 2012-12-05 15:25 UTC (permalink / raw)
To: Frédéric Danis; +Cc: linux-bluetooth
In-Reply-To: <1354707834-30972-1-git-send-email-frederic.danis@linux.intel.com>
Hi Frederic,
On Wed, Dec 05, 2012, Frédéric Danis wrote:
> With new storage architecture legacy storage "linkkeys"
> file doesn't exist anymore.
> ---
> tools/hciconfig.8 | 5 -----
> tools/hciconfig.c | 64 -----------------------------------------------------
> 2 files changed, 69 deletions(-)
Applied. Thanks.
Johan
^ permalink raw reply
* Re: [PATCH BlueZ 1/7] build-sys: Define _GNU_SOURCE in config.h
From: Johan Hedberg @ 2012-12-05 15:24 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: linux-bluetooth, Lucas De Marchi
In-Reply-To: <1354706575-4718-1-git-send-email-lucas.demarchi@profusion.mobi>
Hi Lucas,
On Wed, Dec 05, 2012, Lucas De Marchi wrote:
> Instead of defining _GNU_SOURCE in each source file (and potentially
> forgetting in some), tell the build system we use extensions and let it
> define _GNU_SOURCE in config.h.
> ---
> configure.ac | 1 +
> monitor/btsnoop.c | 1 -
> monitor/sdp.c | 1 -
> profiles/input/hog_device.c | 1 -
> src/adapter.c | 1 -
> src/mgmt.c | 1 -
> src/sdp-xml.c | 1 -
> src/textfile.c | 1 -
> tools/btsnoop.c | 1 -
> tools/ciptool.c | 1 -
> tools/hciattach.c | 1 -
> tools/rfcomm.c | 1 -
> 12 files changed, 1 insertion(+), 11 deletions(-)
All patches in this set have been applied. Thanks!
Johan
^ permalink raw reply
* Re: [PATCH v3 00/15] Manager/Adapter transition to ObjectManager
From: Johan Hedberg @ 2012-12-05 14:44 UTC (permalink / raw)
To: Mikel Astiz; +Cc: linux-bluetooth, Mikel Astiz
In-Reply-To: <1354711902-16390-1-git-send-email-mikel.astiz.oss@gmail.com>
Hi Mikel,
On Wed, Dec 05, 2012, Mikel Astiz wrote:
> Main changes from v2 include the suggestions from Lizardo:
> - Python style improved.
> - Utility library renamed to bluezutils.py to avoid collisions in distros.
> - Recently added test-cyclingspeed also considered in the patchset.
>
> From previous cover-letter:
>
> This proposal completely removes org.bluez.Manager, with two main consequences:
> 1. Clients have a harder time to find adapters. Therefore, some helper
> function have been added to be used by test scripts.
> 2. The concept of "default adapter" disappears.
>
> All test scripts have been updated here but not all of them were
> tested, so apoligies if this breaks your script (some of them are
> already broken, by the way).
>
> Regarding the testing code written in C, they haven't been updated.
> The idea is to address these once the python part has been agreed.
>
> Mikel Astiz (15):
> cups: Remove unnecessary code
> test: Add utility library for python scripts
> test: Avoid using DefaultAdapter()
> test: Update monitor script to ObjectManager
> test: Update test-manager script to ObjectManager
> test: Use ObjectManager instead of Adapters property
> dbus: Remove org.bluez.Manager
> test: Use ObjectManager instead of Devices property
> test: Add helper function to find devices
> adapter: Remove DeviceCreated/DeviceRemoved signals
> adapter: Remove redundant Devices property
> test: Avoid using Adapter.FindDevice()
> adapter: Remove FindDevice method from D-Bus API
> dbus: Rename to org.bluez.Device1
> dbus: Rename to org.bluez.Adapter1
All patches in this set have been applied. Thanks.
Johan
^ permalink raw reply
* Re: [PATCH] adapter: Always write address type when converting to new storage
From: Johan Hedberg @ 2012-12-05 14:28 UTC (permalink / raw)
To: Szymon Janc; +Cc: linux-bluetooth
In-Reply-To: <1354710775-2670-1-git-send-email-szymon.janc@tieto.com>
Hi Szymon,
On Wed, Dec 05, 2012, Szymon Janc wrote:
> When address type is not present in legacy storage assume BDADDR_BREDR
> type and store it.
>
> This also fix following compilation error on ARM:
>
> CC src/bluetoothd-adapter.o
> src/adapter.c: In function ‘convert_entry’:
> src/adapter.c:2710:2: error: comparison is always true due to limited
> range of data type [-Werror=type-limits]
> cc1: all warnings being treated as errors
> make[1]: *** [src/bluetoothd-adapter.o] Error 1
> ---
> src/adapter.c | 7 +++----
> 1 file changed, 3 insertions(+), 4 deletions(-)
Applied. Thanks.
Johan
^ permalink raw reply
* Re: Cybertan MM230-M issue
From: Yegor Yefremov @ 2012-12-05 13:36 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <CAGm1_kva5xN1K0aDwvhaLBqW0qNCtdpQxp-ipzVRpLUD7XBVYw@mail.gmail.com>
On Fri, Nov 2, 2012 at 10:55 AM, Yegor Yefremov
<yegorslists@googlemail.com> wrote:
> I'm using this WLAN-BT-combo card with linux 3.2 and TI am335x based
> board. WLAN (88W8686/B1 (Marvell) ) is working, but Bluetooth
> (BC4ROM/21e (CSR)) only partly.
>
> I can connect to the card via hciattach ttyO5 bcsp and then I can
> bring it up and enable pscan. But hcitool scan delivers nothing.
>
> I get following values via bccmd:
>
> Chip revision: 0x0030 (BC4-ROM)
> Build name: odj_4hci_rom_bt2.0_21e_0604241634_encr128 2006-04-24
>
> bccmd -t BCSP -d /dev/ttyO5 -b 115200 enabletx returns with error:
> Can't execute command: No such device or address (6)
>
> Any idea how to get the card working?
When I execute hciattach I get following message:
root@arm:~# hciattach /dev/ttyO5 bcsp
Device setup complete
Bluetooth: Out-of-order packet arrived, got 1 expected 0
Is there any real tutorial for this chip? I found some related
threads, but would like to see the picture in whole or to get some
tips on how to debug my issue.
http://projects.goldelico.com/p/gta04-kernel/page/Wireless/
http://gumstix.8.n6.nabble.com/Bluetooth-on-2-6-39-pm-kernel-td4641950.html
http://permalink.gmane.org/gmane.linux.bluez.user/13460
Yegor
^ permalink raw reply
* [PATCH v3 15/15] dbus: Rename to org.bluez.Adapter1
From: Mikel Astiz @ 2012-12-05 12:51 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354711902-16390-1-git-send-email-mikel.astiz.oss@gmail.com>
From: Mikel Astiz <mikel.astiz@bmw-carit.de>
Trivially add the numbering suffix to org.bluez.Adapter according to
the proposal for BlueZ 5.
---
doc/adapter-api.txt | 2 +-
doc/oob-api.txt | 2 +-
profiles/cups/main.c | 20 ++++++++++----------
src/adapter.h | 2 +-
test/agent.c | 7 ++++---
test/bluezutils.py | 2 +-
test/list-devices | 4 ++--
test/monitor-bluetooth | 2 +-
test/test-adapter | 32 ++++++++++++++++----------------
test/test-discovery | 4 ++--
test/test-health | 4 ++--
test/test-health-sink | 4 ++--
test/test-manager | 4 ++--
13 files changed, 45 insertions(+), 44 deletions(-)
diff --git a/doc/adapter-api.txt b/doc/adapter-api.txt
index cf8374d..5d2ea65 100644
--- a/doc/adapter-api.txt
+++ b/doc/adapter-api.txt
@@ -11,7 +11,7 @@ Adapter hierarchy
=================
Service org.bluez
-Interface org.bluez.Adapter
+Interface org.bluez.Adapter1
Object path [variable prefix]/{hci0,hci1,...}
Methods void RequestSession()
diff --git a/doc/oob-api.txt b/doc/oob-api.txt
index 7f73db4..d54f612 100644
--- a/doc/oob-api.txt
+++ b/doc/oob-api.txt
@@ -28,7 +28,7 @@ Methods dict ReadLocalData()
16 bytes randomizer blob.
Other data that can be transmitted via OOB mechanism
- can be obtained from org.bluez.Adapter interface.
+ can be obtained from org.bluez.Adapter1 interface.
Note: This method will generate and return new data
every time it is called. Data received in previous
diff --git a/profiles/cups/main.c b/profiles/cups/main.c
index ae0cc6a..ef3a176 100644
--- a/profiles/cups/main.c
+++ b/profiles/cups/main.c
@@ -342,7 +342,7 @@ static void remote_device_found(const char *adapter, const char *bdaddr,
assert(adapter != NULL);
message = dbus_message_new_method_call("org.bluez", adapter,
- "org.bluez.Adapter",
+ "org.bluez.Adapter1",
"FindDevice");
dbus_message_iter_init_append(message, &iter);
dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &bdaddr);
@@ -357,7 +357,7 @@ static void remote_device_found(const char *adapter, const char *bdaddr,
if (!reply) {
message = dbus_message_new_method_call("org.bluez", adapter,
- "org.bluez.Adapter",
+ "org.bluez.Adapter1",
"CreateDevice");
dbus_message_iter_init_append(message, &iter);
dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &bdaddr);
@@ -417,7 +417,7 @@ static gboolean list_known_printers(const char *adapter)
DBusMessage *message, *reply;
message = dbus_message_new_method_call("org.bluez", adapter,
- "org.bluez.Adapter",
+ "org.bluez.Adapter1",
"ListDevices");
if (message == NULL)
return FALSE;
@@ -467,7 +467,7 @@ static gboolean list_known_printers(const char *adapter)
static DBusHandlerResult filter_func(DBusConnection *connection,
DBusMessage *message, void *user_data)
{
- if (dbus_message_is_signal(message, "org.bluez.Adapter",
+ if (dbus_message_is_signal(message, "org.bluez.Adapter1",
"DeviceFound")) {
const char *adapter, *bdaddr;
char *name;
@@ -481,7 +481,7 @@ static DBusHandlerResult filter_func(DBusConnection *connection,
if (parse_device_properties(&iter, &name, NULL))
remote_device_found(adapter, bdaddr, name);
g_free (name);
- } else if (dbus_message_is_signal(message, "org.bluez.Adapter",
+ } else if (dbus_message_is_signal(message, "org.bluez.Adapter1",
"DeviceDisappeared")) {
const char *bdaddr;
@@ -489,7 +489,7 @@ static DBusHandlerResult filter_func(DBusConnection *connection,
DBUS_TYPE_STRING, &bdaddr,
DBUS_TYPE_INVALID);
remote_device_disappeared(bdaddr);
- } else if (dbus_message_is_signal(message, "org.bluez.Adapter",
+ } else if (dbus_message_is_signal(message, "org.bluez.Adapter1",
"PropertyChanged")) {
DBusMessageIter iter, value_iter;
const char *name;
@@ -582,7 +582,7 @@ static gboolean list_printers(void)
#define MATCH_FORMAT \
"type='signal'," \
- "interface='org.bluez.Adapter'," \
+ "interface='org.bluez.Adapter1'," \
"sender='org.bluez'," \
"path='%s'"
@@ -595,7 +595,7 @@ static gboolean list_printers(void)
doing_disco = TRUE;
message = dbus_message_new_method_call("org.bluez", adapter,
- "org.bluez.Adapter",
+ "org.bluez.Adapter1",
"StartDiscovery");
if (!dbus_connection_send_with_reply(conn, message, NULL, -1)) {
@@ -649,7 +649,7 @@ static gboolean print_ieee1284(const char *bdaddr)
}
message = dbus_message_new_method_call("org.bluez", adapter,
- "org.bluez.Adapter",
+ "org.bluez.Adapter1",
"FindDevice");
dbus_message_iter_init_append(message, &iter);
dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &bdaddr);
@@ -664,7 +664,7 @@ static gboolean print_ieee1284(const char *bdaddr)
if (!reply) {
message = dbus_message_new_method_call("org.bluez", adapter,
- "org.bluez.Adapter",
+ "org.bluez.Adapter1",
"CreateDevice");
dbus_message_iter_init_append(message, &iter);
dbus_message_iter_append_basic(&iter,
diff --git a/src/adapter.h b/src/adapter.h
index e131e6d..0ec0b8f 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -30,7 +30,7 @@
#include <glib.h>
#include <stdbool.h>
-#define ADAPTER_INTERFACE "org.bluez.Adapter"
+#define ADAPTER_INTERFACE "org.bluez.Adapter1"
#define MODE_OFF 0x00
#define MODE_CONNECTABLE 0x01
diff --git a/test/agent.c b/test/agent.c
index 1713ec3..85dfb22 100644
--- a/test/agent.c
+++ b/test/agent.c
@@ -346,7 +346,7 @@ static int register_agent(DBusConnection *conn, const char *adapter_path,
DBusError err;
msg = dbus_message_new_method_call("org.bluez", adapter_path,
- "org.bluez.Adapter", "RegisterAgent");
+ "org.bluez.Adapter1", "RegisterAgent");
if (!msg) {
fprintf(stderr, "Can't allocate new method call\n");
return -1;
@@ -385,7 +385,8 @@ static int unregister_agent(DBusConnection *conn, const char *adapter_path,
DBusError err;
msg = dbus_message_new_method_call("org.bluez", adapter_path,
- "org.bluez.Adapter", "UnregisterAgent");
+ "org.bluez.Adapter1",
+ "UnregisterAgent");
if (!msg) {
fprintf(stderr, "Can't allocate new method call\n");
return -1;
@@ -435,7 +436,7 @@ static int create_paired_device(DBusConnection *conn, const char *adapter_path,
DBusPendingCall *pending;
msg = dbus_message_new_method_call("org.bluez", adapter_path,
- "org.bluez.Adapter",
+ "org.bluez.Adapter1",
"CreatePairedDevice");
if (!msg) {
fprintf(stderr, "Can't allocate new method call\n");
diff --git a/test/bluezutils.py b/test/bluezutils.py
index 803805b..d0c4773 100644
--- a/test/bluezutils.py
+++ b/test/bluezutils.py
@@ -1,7 +1,7 @@
import dbus
SERVICE_NAME = "org.bluez"
-ADAPTER_INTERFACE = SERVICE_NAME + ".Adapter"
+ADAPTER_INTERFACE = SERVICE_NAME + ".Adapter1"
DEVICE_INTERFACE = SERVICE_NAME + ".Device1"
def get_managed_objects():
diff --git a/test/list-devices b/test/list-devices
index 7e56239..0aac217 100755
--- a/test/list-devices
+++ b/test/list-devices
@@ -35,12 +35,12 @@ all_devices = (str(path) for path, interfaces in objects.iteritems() if
"org.bluez.Device1" in interfaces.keys())
for path, interfaces in objects.iteritems():
- if "org.bluez.Adapter" not in interfaces.keys():
+ if "org.bluez.Adapter1" not in interfaces.keys():
continue
print("[ " + path + " ]")
- properties = interfaces["org.bluez.Adapter"]
+ properties = interfaces["org.bluez.Adapter1"]
for key in properties.keys():
value = properties[key]
if (key == "UUIDs"):
diff --git a/test/monitor-bluetooth b/test/monitor-bluetooth
index cfda322..bc5ddaf 100755
--- a/test/monitor-bluetooth
+++ b/test/monitor-bluetooth
@@ -7,7 +7,7 @@ import gobject
import dbus
import dbus.mainloop.glib
-relevant_ifaces = [ "org.bluez.Adapter", "org.bluez.Device1" ]
+relevant_ifaces = [ "org.bluez.Adapter1", "org.bluez.Device1" ]
def property_changed(interface, changed, invalidated, path):
iface = interface[interface.rfind(".") + 1:]
diff --git a/test/test-adapter b/test/test-adapter
index dc66aa6..95e6662 100755
--- a/test/test-adapter
+++ b/test/test-adapter
@@ -37,16 +37,16 @@ if (len(args) < 1):
sys.exit(1)
if (args[0] == "address"):
- addr = adapter.Get("org.bluez.Adapter", "Address")
+ addr = adapter.Get("org.bluez.Adapter1", "Address")
print(addr)
sys.exit(0)
if (args[0] == "name"):
if (len(args) < 2):
- name = adapter.Get("org.bluez.Adapter", "Name")
+ name = adapter.Get("org.bluez.Adapter1", "Name")
print(name)
else:
- adapter.Set("org.bluez.Adapter", "Name", args[1])
+ adapter.Set("org.bluez.Adapter1", "Name", args[1])
sys.exit(0)
if (args[0] == "list"):
@@ -55,12 +55,12 @@ if (args[0] == "list"):
"org.freedesktop.DBus.ObjectManager")
objects = om.GetManagedObjects()
for path, interfaces in objects.iteritems():
- if "org.bluez.Adapter" not in interfaces:
+ if "org.bluez.Adapter1" not in interfaces:
continue
print(" [ %s ]" % (path))
- props = interfaces["org.bluez.Adapter"]
+ props = interfaces["org.bluez.Adapter1"]
for (key, value) in props.items():
if (key == "Class"):
@@ -72,7 +72,7 @@ if (args[0] == "list"):
if (args[0] == "powered"):
if (len(args) < 2):
- powered = adapter.Get("org.bluez.Adapter", "Powered")
+ powered = adapter.Get("org.bluez.Adapter1", "Powered")
print(powered)
else:
if (args[1] == "on"):
@@ -81,12 +81,12 @@ if (args[0] == "powered"):
value = dbus.Boolean(0)
else:
value = dbus.Boolean(args[1])
- adapter.Set("org.bluez.Adapter", "Powered", value)
+ adapter.Set("org.bluez.Adapter1", "Powered", value)
sys.exit(0)
if (args[0] == "pairable"):
if (len(args) < 2):
- pairable = adapter.Get("org.bluez.Adapter", "Pairable")
+ pairable = adapter.Get("org.bluez.Adapter1", "Pairable")
print(pairable)
else:
if (args[1] == "on"):
@@ -95,21 +95,21 @@ if (args[0] == "pairable"):
value = dbus.Boolean(0)
else:
value = dbus.Boolean(args[1])
- adapter.Set("org.bluez.Adapter", "Pairable", value)
+ adapter.Set("org.bluez.Adapter1", "Pairable", value)
sys.exit(0)
if (args[0] == "pairabletimeout"):
if (len(args) < 2):
- pt = adapter.Get("org.bluez.Adapter", "PairableTimeout")
+ pt = adapter.Get("org.bluez.Adapter1", "PairableTimeout")
print(pt)
else:
timeout = dbus.UInt32(args[1])
- adapter.Set("org.bluez.Adapter", "PairableTimeout", timeout)
+ adapter.Set("org.bluez.Adapter1", "PairableTimeout", timeout)
sys.exit(0)
if (args[0] == "discoverable"):
if (len(args) < 2):
- discoverable = adapter.Get("org.bluez.Adapter", "Discoverable")
+ discoverable = adapter.Get("org.bluez.Adapter1", "Discoverable")
print(discoverable)
else:
if (args[1] == "on"):
@@ -118,20 +118,20 @@ if (args[0] == "discoverable"):
value = dbus.Boolean(0)
else:
value = dbus.Boolean(args[1])
- adapter.Set("org.bluez.Adapter", "Discoverable", value)
+ adapter.Set("org.bluez.Adapter1", "Discoverable", value)
sys.exit(0)
if (args[0] == "discoverabletimeout"):
if (len(args) < 2):
- dt = adapter.Get("org.bluez.Adapter", "DiscoverableTimeout")
+ dt = adapter.Get("org.bluez.Adapter1", "DiscoverableTimeout")
print(dt)
else:
to = dbus.UInt32(args[1])
- adapter.Set("org.bluez.Adapter", "DiscoverableTimeout", to)
+ adapter.Set("org.bluez.Adapter1", "DiscoverableTimeout", to)
sys.exit(0)
if (args[0] == "discovering"):
- discovering = adapter.Get("org.bluez.Adapter", "Discovering")
+ discovering = adapter.Get("org.bluez.Adapter1", "Discovering")
print(discovering)
sys.exit(0)
diff --git a/test/test-discovery b/test/test-discovery
index 0f73fe4..0004f52 100755
--- a/test/test-discovery
+++ b/test/test-discovery
@@ -106,11 +106,11 @@ if __name__ == '__main__':
compact = True;
bus.add_signal_receiver(devices_found,
- dbus_interface = "org.bluez.Adapter",
+ dbus_interface = "org.bluez.Adapter1",
signal_name = "DevicesFound")
bus.add_signal_receiver(property_changed,
- dbus_interface = "org.bluez.Adapter",
+ dbus_interface = "org.bluez.Adapter1",
signal_name = "PropertyChanged")
adapter.StartDiscovery()
diff --git a/test/test-health b/test/test-health
index 9d2f62f..e0f95a6 100755
--- a/test/test-health
+++ b/test/test-health
@@ -138,7 +138,7 @@ objects = manager.GetManagedObjects()
adapters = []
for path, ifaces in objects.iteritems():
- if ifaces.has_key("org.bluez.Adapter"):
+ if ifaces.has_key("org.bluez.Adapter1"):
adapters.append(path)
i = 1
@@ -160,7 +160,7 @@ while select == None:
sys.exit()
adapter = dbus.Interface(bus.get_object("org.bluez", select),
- "org.bluez.Adapter")
+ "org.bluez.Adapter1")
devices = adapter.GetProperties()["Devices"]
diff --git a/test/test-health-sink b/test/test-health-sink
index a886d85..a14f16b 100755
--- a/test/test-health-sink
+++ b/test/test-health-sink
@@ -28,7 +28,7 @@ objects = manager.GetManagedObjects()
adapters = []
for path, ifaces in objects.iteritems():
- if ifaces.has_key("org.bluez.Adapter"):
+ if ifaces.has_key("org.bluez.Adapter1"):
adapters.append(path)
i = 1
@@ -50,7 +50,7 @@ while select == None:
sys.exit()
adapter = dbus.Interface(bus.get_object("org.bluez", select),
- "org.bluez.Adapter")
+ "org.bluez.Adapter1")
devices = adapter.GetProperties()["Devices"]
diff --git a/test/test-manager b/test/test-manager
index c5e8007..1e3882f 100755
--- a/test/test-manager
+++ b/test/test-manager
@@ -9,11 +9,11 @@ import dbus.mainloop.glib
import bluezutils
def interfaces_added(path, interfaces):
- if interfaces.get("org.bluez.Adapter") != None:
+ if interfaces.get("org.bluez.Adapter1") != None:
print("Adapter with path %s added" % (path))
def interfaces_removed(path, interfaces):
- if "org.bluez.Adapter" in interfaces:
+ if "org.bluez.Adapter1" in interfaces:
print("Adapter with path %s removed" % (path))
if __name__ == "__main__":
--
1.7.11.7
^ permalink raw reply related
* [PATCH v3 14/15] dbus: Rename to org.bluez.Device1
From: Mikel Astiz @ 2012-12-05 12:51 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354711902-16390-1-git-send-email-mikel.astiz.oss@gmail.com>
From: Mikel Astiz <mikel.astiz@bmw-carit.de>
Trivially add the numbering suffix to org.bluez.Device according to
the proposal for BlueZ 5.
---
doc/adapter-api.txt | 2 +-
doc/device-api.txt | 2 +-
profiles/cups/main.c | 4 ++--
src/device.h | 2 +-
test/bluezutils.py | 2 +-
test/list-devices | 4 ++--
test/monitor-bluetooth | 2 +-
test/simple-agent | 4 ++--
test/test-attrib | 2 +-
test/test-device | 22 +++++++++++-----------
10 files changed, 23 insertions(+), 23 deletions(-)
diff --git a/doc/adapter-api.txt b/doc/adapter-api.txt
index 983a20d..cf8374d 100644
--- a/doc/adapter-api.txt
+++ b/doc/adapter-api.txt
@@ -107,7 +107,7 @@ Signals DevicesFound(array{object path, dict values})
device discovery.
The dictionary contains the properties from the
- org.bluez.Device interface.
+ org.bluez.Device1 interface.
Properties string Address [readonly]
diff --git a/doc/device-api.txt b/doc/device-api.txt
index c1f2361..36ea1d9 100644
--- a/doc/device-api.txt
+++ b/doc/device-api.txt
@@ -11,7 +11,7 @@ Device hierarchy
================
Service org.bluez
-Interface org.bluez.Device
+Interface org.bluez.Device1
Object path [variable prefix]/{hci0,hci1,...}/dev_XX_XX_XX_XX_XX_XX
Methods dict DiscoverServices(string pattern)
diff --git a/profiles/cups/main.c b/profiles/cups/main.c
index 977c057..ae0cc6a 100644
--- a/profiles/cups/main.c
+++ b/profiles/cups/main.c
@@ -133,7 +133,7 @@ static char *device_get_ieee1284_id(const char *adapter, const char *device)
/* Look for the service handle of the HCRP service */
message = dbus_message_new_method_call("org.bluez", device,
- "org.bluez.Device",
+ "org.bluez.Device1",
"DiscoverServices");
dbus_message_iter_init_append(message, &iter);
dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &hcr_print);
@@ -309,7 +309,7 @@ static gboolean device_is_printer(const char *adapter, const char *device_path,
gboolean retval;
message = dbus_message_new_method_call("org.bluez", device_path,
- "org.bluez.Device",
+ "org.bluez.Device1",
"GetProperties");
reply = dbus_connection_send_with_reply_and_block(conn,
diff --git a/src/device.h b/src/device.h
index 1d7f54f..cb0bb50 100644
--- a/src/device.h
+++ b/src/device.h
@@ -22,7 +22,7 @@
*
*/
-#define DEVICE_INTERFACE "org.bluez.Device"
+#define DEVICE_INTERFACE "org.bluez.Device1"
struct btd_device;
diff --git a/test/bluezutils.py b/test/bluezutils.py
index 70fe01b..803805b 100644
--- a/test/bluezutils.py
+++ b/test/bluezutils.py
@@ -2,7 +2,7 @@ import dbus
SERVICE_NAME = "org.bluez"
ADAPTER_INTERFACE = SERVICE_NAME + ".Adapter"
-DEVICE_INTERFACE = SERVICE_NAME + ".Device"
+DEVICE_INTERFACE = SERVICE_NAME + ".Device1"
def get_managed_objects():
bus = dbus.SystemBus()
diff --git a/test/list-devices b/test/list-devices
index e8f3f24..7e56239 100755
--- a/test/list-devices
+++ b/test/list-devices
@@ -32,7 +32,7 @@ def extract_uuids(uuid_list):
objects = manager.GetManagedObjects()
all_devices = (str(path) for path, interfaces in objects.iteritems() if
- "org.bluez.Device" in interfaces.keys())
+ "org.bluez.Device1" in interfaces.keys())
for path, interfaces in objects.iteritems():
if "org.bluez.Adapter" not in interfaces.keys():
@@ -55,7 +55,7 @@ for path, interfaces in objects.iteritems():
print(" [ " + dev_path + " ]")
dev = objects[dev_path]
- properties = dev["org.bluez.Device"]
+ properties = dev["org.bluez.Device1"]
for key in properties.keys():
value = properties[key]
diff --git a/test/monitor-bluetooth b/test/monitor-bluetooth
index 45cc910..cfda322 100755
--- a/test/monitor-bluetooth
+++ b/test/monitor-bluetooth
@@ -7,7 +7,7 @@ import gobject
import dbus
import dbus.mainloop.glib
-relevant_ifaces = [ "org.bluez.Adapter", "org.bluez.Device" ]
+relevant_ifaces = [ "org.bluez.Adapter", "org.bluez.Device1" ]
def property_changed(interface, changed, invalidated, path):
iface = interface[interface.rfind(".") + 1:]
diff --git a/test/simple-agent b/test/simple-agent
index 3c51530..15f2a32 100755
--- a/test/simple-agent
+++ b/test/simple-agent
@@ -24,11 +24,11 @@ def ask(prompt):
def set_trusted(path):
props = dbus.Interface(bus.get_object("org.bluez", path),
"org.freedesktop.DBus.Properties")
- props.Set("org.bluez.Device", "Trusted", True)
+ props.Set("org.bluez.Device1", "Trusted", True)
def dev_connect(path):
dev = dbus.Interface(bus.get_object("org.bluez", path),
- "org.bluez.Device")
+ "org.bluez.Device1")
dev.Connect()
class Rejected(dbus.DBusException):
diff --git a/test/test-attrib b/test/test-attrib
index 2b0b010..aadffaa 100755
--- a/test/test-attrib
+++ b/test/test-attrib
@@ -40,7 +40,7 @@ if (args[0] == "list"):
adapter = bluezutils.find_adapter(options.dev_id)
for path in adapter.GetProperties()["Devices"]:
device = dbus.Interface(bus.get_object("org.bluez", path),
- "org.bluez.Device")
+ "org.bluez.Device1")
devprop = device.GetProperties()
print("[ %s ]" % devprop["Address"])
for path in devprop["Services"]:
diff --git a/test/test-device b/test/test-device
index d40d656..655eeae 100755
--- a/test/test-device
+++ b/test/test-device
@@ -49,9 +49,9 @@ if (args[0] == "list"):
objects = om.GetManagedObjects()
for path, interfaces in objects.iteritems():
- if "org.bluez.Device" not in interfaces:
+ if "org.bluez.Device1" not in interfaces:
continue
- properties = interfaces["org.bluez.Device"]
+ properties = interfaces["org.bluez.Device1"]
if properties["Adapter"] != adapter_path:
continue;
print("%s %s" % (properties["Address"], properties["Alias"]))
@@ -142,7 +142,7 @@ if (args[0] == "class"):
device = bluezutils.find_device(args[1], options.dev_id)
device = dbus.Interface(bus.get_object("org.bluez", path),
"org.freedesktop.DBus.Properties")
- cls = device.Get("org.bluez.Device", "Class")
+ cls = device.Get("org.bluez.Device1", "Class")
print("0x%06x" % cls)
sys.exit(0)
@@ -154,7 +154,7 @@ if (args[0] == "name"):
path = device.object_path
props = dbus.Interface(bus.get_object("org.bluez", path),
"org.freedesktop.DBus.Properties")
- name = props.Get("org.bluez.Device", "Name")
+ name = props.Get("org.bluez.Device1", "Name")
print(name)
sys.exit(0)
@@ -167,10 +167,10 @@ if (args[0] == "alias"):
props = dbus.Interface(bus.get_object("org.bluez", path),
"org.freedesktop.DBus.Properties")
if (len(args) < 3):
- alias = device.Get("org.bluez.Device", "Alias")
+ alias = device.Get("org.bluez.Device1", "Alias")
print(alias)
else:
- device.Set("org.bluez.Device", "Alias", args[2])
+ device.Set("org.bluez.Device1", "Alias", args[2])
sys.exit(0)
if (args[0] == "trusted"):
@@ -182,7 +182,7 @@ if (args[0] == "trusted"):
props = dbus.Interface(bus.get_object("org.bluez", path),
"org.freedesktop.DBus.Properties")
if (len(args) < 3):
- trusted = device.Get("org.bluez.Device", "Trusted")
+ trusted = device.Get("org.bluez.Device1", "Trusted")
print(trusted)
else:
if (args[2] == "yes"):
@@ -191,7 +191,7 @@ if (args[0] == "trusted"):
value = dbus.Boolean(0)
else:
value = dbus.Boolean(args[2])
- device.Set("org.bluez.Device", "Trusted", value)
+ device.Set("org.bluez.Device1", "Trusted", value)
sys.exit(0)
if (args[0] == "blocked"):
@@ -203,7 +203,7 @@ if (args[0] == "blocked"):
props = dbus.Interface(bus.get_object("org.bluez", path),
"org.freedesktop.DBus.Properties")
if (len(args) < 3):
- blocked = device.Get("org.bluez.Device", "Blocked")
+ blocked = device.Get("org.bluez.Device1", "Blocked")
print(blocked)
else:
if (args[2] == "yes"):
@@ -212,7 +212,7 @@ if (args[0] == "blocked"):
value = dbus.Boolean(0)
else:
value = dbus.Boolean(args[2])
- device.Set("org.bluez.Device", "Blocked", value)
+ device.Set("org.bluez.Device1", "Blocked", value)
sys.exit(0)
if (args[0] == "services"):
@@ -223,7 +223,7 @@ if (args[0] == "services"):
path = device.object_path
props = dbus.Interface(bus.get_object("org.bluez", path),
"org.freedesktop.DBus.Properties")
- services = device.Get("org.bluez.Device", "Services")
+ services = device.Get("org.bluez.Device1", "Services")
for path in services:
print(path)
sys.exit(0)
--
1.7.11.7
^ permalink raw reply related
* [PATCH v3 13/15] adapter: Remove FindDevice method from D-Bus API
From: Mikel Astiz @ 2012-12-05 12:51 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354711902-16390-1-git-send-email-mikel.astiz.oss@gmail.com>
From: Mikel Astiz <mikel.astiz@bmw-carit.de>
ObjectManager.GetManagedObjects() returns all devices and their
corresponding properties to any interested client. The device address is
included in the property dictionary and therefore having such a
FindDevice method is an unnecessary duplication.
---
doc/adapter-api.txt | 7 -------
src/adapter.c | 38 --------------------------------------
2 files changed, 45 deletions(-)
diff --git a/doc/adapter-api.txt b/doc/adapter-api.txt
index 3582793..983a20d 100644
--- a/doc/adapter-api.txt
+++ b/doc/adapter-api.txt
@@ -64,13 +64,6 @@ Methods void RequestSession()
org.bluez.Error.Failed
org.bluez.Error.NotAuthorized
- object FindDevice(string address)
-
- Returns the object path of device for given address.
-
- Possible Errors: org.bluez.Error.DoesNotExist
- org.bluez.Error.InvalidArguments
-
void RemoveDevice(object device)
This removes the remote device object at the given
diff --git a/src/adapter.c b/src/adapter.c
index 0c37ba4..a1c7170 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -1521,40 +1521,6 @@ static DBusMessage *remove_device(DBusConnection *conn, DBusMessage *msg,
return NULL;
}
-static DBusMessage *find_device(DBusConnection *conn, DBusMessage *msg,
- void *data)
-{
- struct btd_adapter *adapter = data;
- struct btd_device *device;
- DBusMessage *reply;
- const gchar *address;
- GSList *l;
- const gchar *dev_path;
-
- if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &address,
- DBUS_TYPE_INVALID))
- return btd_error_invalid_args(msg);
-
- l = g_slist_find_custom(adapter->devices,
- address, (GCompareFunc) device_address_cmp);
- if (!l)
- return btd_error_does_not_exist(msg);
-
- device = l->data;
-
- reply = dbus_message_new_method_return(msg);
- if (!reply)
- return NULL;
-
- dev_path = device_get_path(device);
-
- dbus_message_append_args(reply,
- DBUS_TYPE_OBJECT_PATH, &dev_path,
- DBUS_TYPE_INVALID);
-
- return reply;
-}
-
static void agent_removed(struct agent *agent, struct btd_adapter *adapter)
{
mgmt_set_io_capability(adapter->dev_id, IO_CAPABILITY_NOINPUTNOOUTPUT);
@@ -1626,10 +1592,6 @@ static const GDBusMethodTable adapter_methods[] = {
{ GDBUS_ASYNC_METHOD("RemoveDevice",
GDBUS_ARGS({ "device", "o" }), NULL,
remove_device) },
- { GDBUS_METHOD("FindDevice",
- GDBUS_ARGS({ "address", "s" }),
- GDBUS_ARGS({ "device", "o" }),
- find_device) },
{ GDBUS_METHOD("RegisterAgent",
GDBUS_ARGS({ "agent", "o" },
{ "capability", "s" }), NULL,
--
1.7.11.7
^ permalink raw reply related
* [PATCH v3 12/15] test: Avoid using Adapter.FindDevice()
From: Mikel Astiz @ 2012-12-05 12:51 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354711902-16390-1-git-send-email-mikel.astiz.oss@gmail.com>
From: Mikel Astiz <mikel.astiz@bmw-carit.de>
The method is now deprecated and thus the replacement utility library
should be used in the test scripts.
---
test/simple-agent | 12 +++++------
test/test-attrib | 7 ++-----
test/test-cyclingspeed | 9 ++++++--
test/test-device | 57 +++++++++++++++++++++++++++-----------------------
test/test-heartrate | 13 +++++++-----
test/test-oob | 12 +++++++----
test/test-proximity | 7 ++-----
test/test-thermometer | 10 +++++++--
8 files changed, 71 insertions(+), 56 deletions(-)
diff --git a/test/simple-agent b/test/simple-agent
index 13c3ce7..3c51530 100755
--- a/test/simple-agent
+++ b/test/simple-agent
@@ -149,10 +149,9 @@ if __name__ == '__main__':
if options.capability:
capability = options.capability
+ adapter_pattern = None
if len(args) > 0:
- adapter = bluezutils.find_adapter(args[0])
- else:
- adapter = bluezutils.find_adapter()
+ adapter_pattern = args[0]
path = "/test/agent"
agent = Agent(bus, path)
@@ -160,16 +159,15 @@ if __name__ == '__main__':
mainloop = GObject.MainLoop()
if len(args) > 1:
- dev_path = adapter.FindDevice(args[1])
- device = dbus.Interface(bus.get_object("org.bluez", dev_path),
- "org.bluez.Device")
-
+ device = bluezutils.find_device(args[1], adapter_pattern)
+ dev_path = device.object_path
agent.set_exit_on_release(False)
device.Pair(path, capability, timeout=options.timeout,
reply_handler=pair_reply,
error_handler=pair_error)
device_obj = device
else:
+ adapter = bluezutils.find_adapter(adapter_pattern)
adapter.RegisterAgent(path, capability)
print("Agent registered")
diff --git a/test/test-attrib b/test/test-attrib
index f75a566..2b0b010 100755
--- a/test/test-attrib
+++ b/test/test-attrib
@@ -27,8 +27,6 @@ parser = OptionParser(option_list=option_list)
(options, args) = parser.parse_args()
-adapter = bluezutils.find_adapter(options.dev_id)
-
if (len(args) < 1):
print("Usage: %s <command>" % (sys.argv[0]))
print("")
@@ -39,6 +37,7 @@ if (len(args) < 1):
sys.exit(1)
if (args[0] == "list"):
+ adapter = bluezutils.find_adapter(options.dev_id)
for path in adapter.GetProperties()["Devices"]:
device = dbus.Interface(bus.get_object("org.bluez", path),
"org.bluez.Device")
@@ -63,9 +62,7 @@ if (args[0] == "services"):
if (len(args) < 2):
print("Need address parameter")
else:
- path = adapter.FindDevice(args[1])
- device = dbus.Interface(bus.get_object("org.bluez", path),
- "org.bluez.Device")
+ device = bluezutils.find_device(args[1], options.dev_id)
properties = device.GetProperties()
for path in properties["Services"]:
print(path)
diff --git a/test/test-cyclingspeed b/test/test-cyclingspeed
index 2bfea36..10a16aa 100755
--- a/test/test-cyclingspeed
+++ b/test/test-cyclingspeed
@@ -125,10 +125,15 @@ if __name__ == "__main__":
print("\tSetCumulativeWheelRevolutions <value>")
sys.exit(1)
- adapter = bluezutils.find_adapter(options.adapter)
+ managed_objects = bluezutils.get_managed_objects()
+ adapter = bluezutils.find_adapter_in_objects(managed_objects,
+ options.adapter)
adapter_path = adapter.object_path
- device_path = adapter.FindDevice(options.address)
+ device = bluezutils.find_device_in_objects(managed_objects,
+ options.address,
+ options.adapter)
+ device_path = device.object_path
cscmanager = dbus.Interface(bus.get_object("org.bluez", adapter_path),
"org.bluez.CyclingSpeedManager")
diff --git a/test/test-device b/test/test-device
index f4a40c4..d40d656 100755
--- a/test/test-device
+++ b/test/test-device
@@ -23,10 +23,6 @@ parser = OptionParser(option_list=option_list)
(options, args) = parser.parse_args()
-adapter = bluezutils.find_adapter(options.dev_id)
-
-adapter_path = adapter.object_path
-
if (len(args) < 1):
print("Usage: %s <command>" % (sys.argv[0]))
print("")
@@ -45,6 +41,9 @@ if (len(args) < 1):
sys.exit(1)
if (args[0] == "list"):
+ adapter = bluezutils.find_adapter(options.dev_id)
+ adapter_path = adapter.object_path
+
om = dbus.Interface(bus.get_object("org.bluez", "/"),
"org.freedesktop.DBus.ObjectManager")
objects = om.GetManagedObjects()
@@ -73,6 +72,7 @@ if (args[0] == "create"):
if (len(args) < 2):
print("Need address parameter")
else:
+ adapter = bluezutils.find_adapter(options.dev_id)
adapter.CreateDevice(args[1],
reply_handler=create_device_reply,
error_handler=create_device_error)
@@ -82,8 +82,14 @@ if (args[0] == "remove"):
if (len(args) < 2):
print("Need address or object path parameter")
else:
+ managed_objects = bluezutils.get_managed_objects()
+ adapter = bluezutils.find_adapter_in_objects(managed_objects,
+ options.dev_id)
try:
- path = adapter.FindDevice(args[1])
+ dev = bluezutils.find_device_in_objects(managed_objects,
+ args[1],
+ options.dev_id)
+ path = dev.object_path
except:
path = args[1]
adapter.RemoveDevice(path)
@@ -93,9 +99,7 @@ if (args[0] == "connect"):
if (len(args) < 2):
print("Need address parameter")
else:
- path = adapter.FindDevice(args[1])
- device = dbus.Interface(bus.get_object("org.bluez", path),
- "org.bluez.Device")
+ device = bluezutils.find_device(args[1], options.dev_id)
if (len(args) > 2):
device.ConnectProfile(args[2])
else:
@@ -106,9 +110,7 @@ if (args[0] == "disconnect"):
if (len(args) < 2):
print("Need address parameter")
else:
- path = adapter.FindDevice(args[1])
- device = dbus.Interface(bus.get_object("org.bluez", path),
- "org.bluez.Device")
+ device = bluezutils.find_device(args[1], options.dev_id)
if (len(args) > 2):
device.DisconnectProfile(args[2])
else:
@@ -119,9 +121,7 @@ if (args[0] == "discover"):
if (len(args) < 2):
print("Need address parameter")
else:
- path = adapter.FindDevice(args[1])
- device = dbus.Interface(bus.get_object("org.bluez", path),
- "org.bluez.Device")
+ device = bluezutils.find_device(args[1], options.dev_id)
if (len(args) < 3):
pattern = ""
else:
@@ -139,7 +139,7 @@ if (args[0] == "class"):
if (len(args) < 2):
print("Need address parameter")
else:
- path = adapter.FindDevice(args[1])
+ device = bluezutils.find_device(args[1], options.dev_id)
device = dbus.Interface(bus.get_object("org.bluez", path),
"org.freedesktop.DBus.Properties")
cls = device.Get("org.bluez.Device", "Class")
@@ -150,10 +150,11 @@ if (args[0] == "name"):
if (len(args) < 2):
print("Need address parameter")
else:
- path = adapter.FindDevice(args[1])
- device = dbus.Interface(bus.get_object("org.bluez", path),
+ device = bluezutils.find_device(args[1], options.dev_id)
+ path = device.object_path
+ props = dbus.Interface(bus.get_object("org.bluez", path),
"org.freedesktop.DBus.Properties")
- name = device.Get("org.bluez.Device", "Name")
+ name = props.Get("org.bluez.Device", "Name")
print(name)
sys.exit(0)
@@ -161,8 +162,9 @@ if (args[0] == "alias"):
if (len(args) < 2):
print("Need address parameter")
else:
- path = adapter.FindDevice(args[1])
- device = dbus.Interface(bus.get_object("org.bluez", path),
+ device = bluezutils.find_device(args[1], options.dev_id)
+ path = device.object_path
+ props = dbus.Interface(bus.get_object("org.bluez", path),
"org.freedesktop.DBus.Properties")
if (len(args) < 3):
alias = device.Get("org.bluez.Device", "Alias")
@@ -175,8 +177,9 @@ if (args[0] == "trusted"):
if (len(args) < 2):
print("Need address parameter")
else:
- path = adapter.FindDevice(args[1])
- device = dbus.Interface(bus.get_object("org.bluez", path),
+ device = bluezutils.find_device(args[1], options.dev_id)
+ path = device.object_path
+ props = dbus.Interface(bus.get_object("org.bluez", path),
"org.freedesktop.DBus.Properties")
if (len(args) < 3):
trusted = device.Get("org.bluez.Device", "Trusted")
@@ -195,8 +198,9 @@ if (args[0] == "blocked"):
if (len(args) < 2):
print("Need address parameter")
else:
- path = adapter.FindDevice(args[1])
- device = dbus.Interface(bus.get_object("org.bluez", path),
+ device = bluezutils.find_device(args[1], options.dev_id)
+ path = device.object_path
+ props = dbus.Interface(bus.get_object("org.bluez", path),
"org.freedesktop.DBus.Properties")
if (len(args) < 3):
blocked = device.Get("org.bluez.Device", "Blocked")
@@ -215,8 +219,9 @@ if (args[0] == "services"):
if (len(args) < 2):
print("Need address parameter")
else:
- path = adapter.FindDevice(args[1])
- device = dbus.Interface(bus.get_object("org.bluez", path),
+ device = bluezutils.find_device(args[1], options.dev_id)
+ path = device.object_path
+ props = dbus.Interface(bus.get_object("org.bluez", path),
"org.freedesktop.DBus.Properties")
services = device.Get("org.bluez.Device", "Services")
for path in services:
diff --git a/test/test-heartrate b/test/test-heartrate
index a08e8df..47dd012 100755
--- a/test/test-heartrate
+++ b/test/test-heartrate
@@ -54,18 +54,21 @@ if __name__ == "__main__":
print("\tReset")
sys.exit(1)
- adapter = bluezutils.find_adapter(options.adapter)
+ managed_objects = bluezutils.get_managed_objects()
+ adapter = bluezutils.find_adapter_in_objects(managed_objects,
+ options.adapter)
adapter_path = adapter.object_path
+
heartrateManager = dbus.Interface(bus.get_object("org.bluez",
adapter_path), "org.bluez.HeartRateManager")
path = "/test/watcher"
heartrateManager.RegisterWatcher(path)
- device_path = adapter.FindDevice(options.address)
-
- device = dbus.Interface(bus.get_object("org.bluez", device_path),
- "org.bluez.Device")
+ device = bluezutils.find_device_in_objects(managed_objects,
+ options.address,
+ options.adapter)
+ device_path = device.object_path
heartrate = dbus.Interface(bus.get_object("org.bluez",
device_path), "org.bluez.HeartRate")
diff --git a/test/test-oob b/test/test-oob
index 34e042d..87c558f 100755
--- a/test/test-oob
+++ b/test/test-oob
@@ -42,14 +42,18 @@ if __name__ == '__main__':
print("Removing any existing bond...")
try:
- device = adapter0.FindDevice(adapter1_address)
- adapter0.RemoveDevice(device)
+ dev = bluezutils.find_device_in_objects(managed_objects,
+ adapter1_address,
+ adapter0_address)
+ adapter0.RemoveDevice(dev.object_path)
except:
pass
try:
- device = adapter1.FindDevice(adapter0_address)
- adapter1.RemoveDevice(device)
+ dev = bluezutils.find_device_in_objects(managed_objects,
+ adapter0_address,
+ adapter1_address)
+ adapter1.RemoveDevice(dev.object_path)
except:
pass
diff --git a/test/test-proximity b/test/test-proximity
index afde3fb..d6862de 100755
--- a/test/test-proximity
+++ b/test/test-proximity
@@ -35,10 +35,6 @@ if __name__ == "__main__":
]
parser = OptionParser(option_list=option_list)
- (options, args) = parser.parse_args()
-
- adapter = bluezutils.find_adapter(options.dev_id)
-
if (len(args) < 1):
print("Usage: %s <command>" % (sys.argv[0]))
print("")
@@ -46,7 +42,8 @@ if __name__ == "__main__":
print(" -b MAC ImmediateAlertLevel <none|mild|high>")
sys.exit(1)
- device_path = adapter.FindDevice(options.address)
+ device = bluezutils.find_device(options.address, options.dev_id)
+ device_path = device.object_path
bus.add_signal_receiver(properties_changed, bus_name="org.bluez",
path=device_path,
diff --git a/test/test-thermometer b/test/test-thermometer
index 5a884a3..fdb772f 100755
--- a/test/test-thermometer
+++ b/test/test-thermometer
@@ -58,12 +58,18 @@ if __name__ == "__main__":
print("\tEnableIntermediateMeasurement")
sys.exit(1)
- adapter = bluezutils.find_adapter(options.adapter)
+ managed_objects = bluezutils.get_managed_objects()
+ adapter = bluezutils.find_adapter_in_objects(managed_objects,
+ options.adapter)
adapter_path = adapter.object_path
+
thermometer_manager = dbus.Interface(bus.get_object("org.bluez",
adapter_path), "org.bluez.ThermometerManager")
- device_path = adapter.FindDevice(options.address)
+ device = bluezutils.find_device_in_objects(managed_objects,
+ options.address,
+ options.adapter)
+ device_path = device.object_path
bus.add_signal_receiver(properties_changed, bus_name="org.bluez",
path=device_path,
--
1.7.11.7
^ permalink raw reply related
* [PATCH v3 11/15] adapter: Remove redundant Devices property
From: Mikel Astiz @ 2012-12-05 12:51 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354711902-16390-1-git-send-email-mikel.astiz.oss@gmail.com>
From: Mikel Astiz <mikel.astiz@bmw-carit.de>
The ObjectManager interface already reports the list of devices, so the
the property can be entirely removed.
---
doc/adapter-api.txt | 4 ----
src/adapter.c | 30 ------------------------------
2 files changed, 34 deletions(-)
diff --git a/doc/adapter-api.txt b/doc/adapter-api.txt
index 132e60f..3582793 100644
--- a/doc/adapter-api.txt
+++ b/doc/adapter-api.txt
@@ -180,10 +180,6 @@ Properties string Address [readonly]
Indicates that a device discovery procedure is active.
- array{object} Devices [readonly]
-
- List of device object paths.
-
array{string} UUIDs [readonly]
List of 128-bit UUIDs that represents the available
diff --git a/src/adapter.c b/src/adapter.c
index a816ae3..0c37ba4 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -1021,9 +1021,6 @@ static struct btd_device *adapter_create_device(struct btd_adapter *adapter,
adapter->devices = g_slist_append(adapter->devices, device);
- g_dbus_emit_property_changed(btd_get_dbus_connection(),
- adapter->path, ADAPTER_INTERFACE, "Devices");
-
return device;
}
@@ -1076,9 +1073,6 @@ void adapter_remove_device(struct btd_adapter *adapter,
service_auth_cancel(auth);
}
- g_dbus_emit_property_changed(btd_get_dbus_connection(),
- adapter->path, ADAPTER_INTERFACE, "Devices");
-
device_remove(dev, remove_storage);
}
@@ -1384,29 +1378,6 @@ static gboolean adapter_property_get_discovering(
return TRUE;
}
-static gboolean adapter_property_get_devices(
- const GDBusPropertyTable *property,
- DBusMessageIter *iter, void *data)
-{
- struct btd_adapter *adapter = data;
- DBusMessageIter entry;
- GSList *l;
-
- dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY,
- DBUS_TYPE_OBJECT_PATH_AS_STRING, &entry);
-
- for (l = adapter->devices; l != NULL; l = l->next) {
- const char *path = device_get_path(l->data);
-
- dbus_message_iter_append_basic(&entry, DBUS_TYPE_OBJECT_PATH,
- &path);
- }
-
- dbus_message_iter_close_container(iter, &entry);
-
- return TRUE;
-}
-
static gboolean adapter_property_get_uuids(const GDBusPropertyTable *property,
DBusMessageIter *iter, void *data)
{
@@ -1691,7 +1662,6 @@ static const GDBusPropertyTable adapter_properties[] = {
{ "PairableTimeout", "u", adapter_property_get_pairable_timeout,
adapter_property_set_pairable_timeout },
{ "Discovering", "b", adapter_property_get_discovering },
- { "Devices", "ao", adapter_property_get_devices },
{ "UUIDs", "as", adapter_property_get_uuids },
{ }
};
--
1.7.11.7
^ permalink raw reply related
* [PATCH v3 10/15] adapter: Remove DeviceCreated/DeviceRemoved signals
From: Mikel Astiz @ 2012-12-05 12:51 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354711902-16390-1-git-send-email-mikel.astiz.oss@gmail.com>
From: Mikel Astiz <mikel.astiz@bmw-carit.de>
The Adapter interface already reports changes in the device list in form
of property changes, so there is no need to keep these two signals.
---
doc/adapter-api.txt | 8 --------
src/adapter.c | 17 -----------------
2 files changed, 25 deletions(-)
diff --git a/doc/adapter-api.txt b/doc/adapter-api.txt
index b638586..132e60f 100644
--- a/doc/adapter-api.txt
+++ b/doc/adapter-api.txt
@@ -116,14 +116,6 @@ Signals DevicesFound(array{object path, dict values})
The dictionary contains the properties from the
org.bluez.Device interface.
- DeviceCreated(object device)
-
- Parameter is object path of created device.
-
- DeviceRemoved(object device)
-
- Parameter is object path of removed device.
-
Properties string Address [readonly]
The Bluetooth device address.
diff --git a/src/adapter.c b/src/adapter.c
index ea0394f..a816ae3 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -1010,7 +1010,6 @@ static struct btd_device *adapter_create_device(struct btd_adapter *adapter,
uint8_t bdaddr_type)
{
struct btd_device *device;
- const char *path;
DBG("%s", address);
@@ -1022,12 +1021,6 @@ static struct btd_device *adapter_create_device(struct btd_adapter *adapter,
adapter->devices = g_slist_append(adapter->devices, device);
- path = device_get_path(device);
- g_dbus_emit_signal(btd_get_dbus_connection(), adapter->path,
- ADAPTER_INTERFACE, "DeviceCreated",
- DBUS_TYPE_OBJECT_PATH, &path,
- DBUS_TYPE_INVALID);
-
g_dbus_emit_property_changed(btd_get_dbus_connection(),
adapter->path, ADAPTER_INTERFACE, "Devices");
@@ -1055,7 +1048,6 @@ void adapter_remove_device(struct btd_adapter *adapter,
struct btd_device *dev,
gboolean remove_storage)
{
- const gchar *dev_path = device_get_path(dev);
struct discovery *discovery = adapter->discovery;
GList *l;
@@ -1087,11 +1079,6 @@ void adapter_remove_device(struct btd_adapter *adapter,
g_dbus_emit_property_changed(btd_get_dbus_connection(),
adapter->path, ADAPTER_INTERFACE, "Devices");
- g_dbus_emit_signal(btd_get_dbus_connection(), adapter->path,
- ADAPTER_INTERFACE, "DeviceRemoved",
- DBUS_TYPE_OBJECT_PATH, &dev_path,
- DBUS_TYPE_INVALID);
-
device_remove(dev, remove_storage);
}
@@ -1683,10 +1670,6 @@ static const GDBusMethodTable adapter_methods[] = {
};
static const GDBusSignalTable adapter_signals[] = {
- { GDBUS_SIGNAL("DeviceCreated",
- GDBUS_ARGS({ "device", "o" })) },
- { GDBUS_SIGNAL("DeviceRemoved",
- GDBUS_ARGS({ "device", "o" })) },
{ GDBUS_SIGNAL("DevicesFound",
GDBUS_ARGS({ "devices", "a{oa{sv}}" })) },
{ }
--
1.7.11.7
^ permalink raw reply related
* [PATCH v3 09/15] test: Add helper function to find devices
From: Mikel Astiz @ 2012-12-05 12:51 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354711902-16390-1-git-send-email-mikel.astiz.oss@gmail.com>
From: Mikel Astiz <mikel.astiz@bmw-carit.de>
Add a helper function to the utility library as an alternative to the
convenience method Adapter.FindDevice() in the D-Bus API.
---
test/bluezutils.py | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/test/bluezutils.py b/test/bluezutils.py
index 0b8aec3..70fe01b 100644
--- a/test/bluezutils.py
+++ b/test/bluezutils.py
@@ -2,6 +2,7 @@ import dbus
SERVICE_NAME = "org.bluez"
ADAPTER_INTERFACE = SERVICE_NAME + ".Adapter"
+DEVICE_INTERFACE = SERVICE_NAME + ".Device"
def get_managed_objects():
bus = dbus.SystemBus()
@@ -23,3 +24,24 @@ def find_adapter_in_objects(objects, pattern=None):
obj = bus.get_object(SERVICE_NAME, path)
return dbus.Interface(obj, ADAPTER_INTERFACE)
raise Exception("Bluetooth adapter not found")
+
+def find_device(device_address, adapter_pattern=None):
+ return find_device_in_objects(get_managed_objects(), device_address,
+ adapter_pattern)
+
+def find_device_in_objects(objects, device_address, adapter_pattern=None):
+ bus = dbus.SystemBus()
+ path_prefix = ""
+ if adapter_pattern:
+ adapter = find_adapter_in_objects(objects, adapter_pattern)
+ path_prefix = adapter.object_path
+ for path, ifaces in objects.iteritems():
+ device = ifaces.get(DEVICE_INTERFACE)
+ if device is None:
+ continue
+ if (device["Address"] == device_address and
+ path.startswith(path_prefix)):
+ obj = bus.get_object(SERVICE_NAME, path)
+ return dbus.Interface(obj, DEVICE_INTERFACE)
+
+ raise Exception("Bluetooth device not found")
--
1.7.11.7
^ permalink raw reply related
* [PATCH v3 08/15] test: Use ObjectManager instead of Devices property
From: Mikel Astiz @ 2012-12-05 12:51 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354711902-16390-1-git-send-email-mikel.astiz.oss@gmail.com>
From: Mikel Astiz <mikel.astiz@bmw-carit.de>
Use the objects and interfaces reported by the ObjectManager in order
to list the available devices per adapter.
---
test/list-devices | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/test/list-devices b/test/list-devices
index fcff3e7..e8f3f24 100755
--- a/test/list-devices
+++ b/test/list-devices
@@ -30,6 +30,10 @@ def extract_uuids(uuid_list):
return list
objects = manager.GetManagedObjects()
+
+all_devices = (str(path) for path, interfaces in objects.iteritems() if
+ "org.bluez.Device" in interfaces.keys())
+
for path, interfaces in objects.iteritems():
if "org.bluez.Adapter" not in interfaces.keys():
continue
@@ -39,19 +43,13 @@ for path, interfaces in objects.iteritems():
properties = interfaces["org.bluez.Adapter"]
for key in properties.keys():
value = properties[key]
- if (key == "Devices"):
- list = extract_objects(value)
- print(" %s = %s" % (key, list))
- elif (key == "UUIDs"):
+ if (key == "UUIDs"):
list = extract_uuids(value)
print(" %s = %s" % (key, list))
else:
print(" %s = %s" % (key, value))
- try:
- device_list = properties["Devices"]
- except:
- device_list = []
+ device_list = [d for d in all_devices if d.startswith(path + "/")]
for dev_path in device_list:
print(" [ " + dev_path + " ]")
--
1.7.11.7
^ permalink raw reply related
* [PATCH v3 07/15] dbus: Remove org.bluez.Manager
From: Mikel Astiz @ 2012-12-05 12:51 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354711902-16390-1-git-send-email-mikel.astiz.oss@gmail.com>
From: Mikel Astiz <mikel.astiz@bmw-carit.de>
After the decision to drop the "default-adapter" feature in the D-Bus
API, the org.bluez.Manager interface can be entirely dropped since it
has been replaced by the ObjectManager.
---
Makefile.am | 3 +-
doc/bluez-docs.xml | 7 ---
doc/manager-api.txt | 51 ----------------
src/adapter.c | 4 +-
src/manager.c | 163 ----------------------------------------------------
src/manager.h | 3 -
6 files changed, 3 insertions(+), 228 deletions(-)
delete mode 100644 doc/manager-api.txt
diff --git a/Makefile.am b/Makefile.am
index 438fca6..9b2f9f6 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -345,8 +345,7 @@ CLEANFILES += $(rules_DATA)
EXTRA_DIST += scripts/bluetooth-hid2hci.rules scripts/bluetooth-serial.rules
-EXTRA_DIST += doc/manager-api.txt \
- doc/adapter-api.txt doc/device-api.txt doc/profile-api.txt \
+EXTRA_DIST += doc/adapter-api.txt doc/device-api.txt doc/profile-api.txt \
doc/service-api.txt doc/agent-api.txt doc/attribute-api.txt \
doc/network-api.txt doc/control-api.txt doc/health-api.txt \
doc/sap-api.txt doc/media-api.txt doc/assigned-numbers.txt \
diff --git a/doc/bluez-docs.xml b/doc/bluez-docs.xml
index a90dde7..814ce00 100644
--- a/doc/bluez-docs.xml
+++ b/doc/bluez-docs.xml
@@ -47,13 +47,6 @@
</legalnotice>
</bookinfo>
- <reference id="manager">
- <title>Manager interface</title>
- <para>
-<programlisting><xi:include href="manager-api.txt" parse="text" /></programlisting>
- </para>
- </reference>
-
<reference id="adapter">
<title>Adapter interface</title>
<para>
diff --git a/doc/manager-api.txt b/doc/manager-api.txt
deleted file mode 100644
index 3add587..0000000
--- a/doc/manager-api.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-BlueZ D-Bus Manager API description
-***********************************
-
-Copyright (C) 2004-2010 Marcel Holtmann <marcel@holtmann.org>
-Copyright (C) 2005-2006 Johan Hedberg <johan.hedberg@nokia.com>
-Copyright (C) 2005-2006 Claudio Takahasi <claudio.takahasi@indt.org.br>
-Copyright (C) 2006-2007 Luiz von Dentz <luiz.dentz@indt.org.br>
-
-
-Manager hierarchy
-=================
-
-Service org.bluez
-Interface org.bluez.Manager
-Object path /
-
- 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
- patterns are "hci0" or "00:11:22:33:44:55".
-
- Possible errors: org.bluez.Error.InvalidArguments
- org.bluez.Error.NoSuchAdapter
-
-Signals AdapterAdded(object adapter)
-
- Parameter is object path of added adapter.
-
- AdapterRemoved(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.
diff --git a/src/adapter.c b/src/adapter.c
index 3c5d277..ea0394f 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -86,6 +86,7 @@
#define REMOVE_TEMP_TIMEOUT (3 * 60)
#define PENDING_FOUND_MAX 5
+static const char *base_path = "/org/bluez";
static GSList *adapter_drivers = NULL;
enum session_req_type {
@@ -2973,7 +2974,6 @@ struct btd_adapter *adapter_create(int id)
{
char path[MAX_PATH_LENGTH];
struct btd_adapter *adapter;
- const char *base_path = manager_get_base_path();
adapter = g_try_new0(struct btd_adapter, 1);
if (!adapter) {
@@ -3604,7 +3604,7 @@ const char *btd_adapter_any_request_path(void)
if (adapter_any_refcount++ > 0)
return adapter_any_path;
- adapter_any_path = g_strdup_printf("%s/any", manager_get_base_path());
+ adapter_any_path = g_strdup_printf("%s/any", base_path);
return adapter_any_path;
}
diff --git a/src/manager.c b/src/manager.c
index 3088dd9..3c415db 100644
--- a/src/manager.c
+++ b/src/manager.c
@@ -54,141 +54,11 @@
#include "error.h"
#include "manager.h"
-static const char *base_path = "/org/bluez";
-
static int default_adapter_id = -1;
static GSList *adapters = NULL;
-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)
-{
- DBusMessage *reply;
- struct btd_adapter *adapter;
- const char *pattern;
- int dev_id;
- const gchar *path;
-
- if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &pattern,
- DBUS_TYPE_INVALID))
- return btd_error_invalid_args(msg);
-
- /* hci_devid() would make sense to use here, except it is
- * restricted to devices which are up */
- if (!strcmp(pattern, "any") || !strcmp(pattern, "00:00:00:00:00:00")) {
- path = adapter_any_get_path();
- if (path != NULL)
- goto done;
- return btd_error_no_such_adapter(msg);
- } else if (!strncmp(pattern, "hci", 3) && strlen(pattern) >= 4) {
- dev_id = atoi(pattern + 3);
- adapter = manager_find_adapter_by_id(dev_id);
- } else {
- bdaddr_t bdaddr;
- str2ba(pattern, &bdaddr);
- adapter = manager_find_adapter(&bdaddr);
- }
-
- if (!adapter)
- return btd_error_no_such_adapter(msg);
-
- path = adapter_get_path(adapter);
-
-done:
- reply = dbus_message_new_method_return(msg);
- if (!reply)
- return NULL;
-
- dbus_message_append_args(reply, DBUS_TYPE_OBJECT_PATH, &path,
- DBUS_TYPE_INVALID);
-
- return reply;
-}
-
-static gboolean manager_property_get_adapters(
- const GDBusPropertyTable *property,
- DBusMessageIter *iter, void *data)
-{
- DBusMessageIter entry;
- GSList *l;
-
- dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY,
- DBUS_TYPE_OBJECT_PATH_AS_STRING, &entry);
-
- for (l = adapters; l != NULL; l = l->next) {
- struct btd_adapter *adapter = l->data;
- const char *path = adapter_get_path(adapter);
-
- dbus_message_iter_append_basic(&entry, DBUS_TYPE_OBJECT_PATH,
- &path);
- }
-
- dbus_message_iter_close_container(iter, &entry);
-
- 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" }),
- find_adapter) },
- { }
-};
-
-static const GDBusSignalTable manager_signals[] = {
- { GDBUS_SIGNAL("AdapterAdded",
- 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 },
- { }
-};
-
bool manager_init(const char *path)
{
- if (!g_dbus_register_interface(btd_get_dbus_connection(),
- "/", MANAGER_INTERFACE,
- manager_methods, manager_signals,
- manager_properties, NULL, NULL))
- return false;
-
btd_profile_init();
return true;
@@ -196,21 +66,7 @@ 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)
- return;
-
- path = adapter_get_path(adapter);
-
- g_dbus_emit_signal(btd_get_dbus_connection(), "/",
- MANAGER_INTERFACE, "DefaultAdapterChanged",
- DBUS_TYPE_OBJECT_PATH, &path,
- DBUS_TYPE_INVALID);
}
struct btd_adapter *manager_get_default_adapter(void)
@@ -221,24 +77,15 @@ struct btd_adapter *manager_get_default_adapter(void)
static void manager_remove_adapter(struct btd_adapter *adapter)
{
uint16_t dev_id = adapter_get_dev_id(adapter);
- const gchar *path = adapter_get_path(adapter);
adapters = g_slist_remove(adapters, adapter);
- g_dbus_emit_property_changed(btd_get_dbus_connection(), "/",
- MANAGER_INTERFACE, "Adapters");
-
if (default_adapter_id == dev_id || default_adapter_id < 0) {
int new_default = hci_get_route(NULL);
manager_set_default_adapter(new_default);
}
- g_dbus_emit_signal(btd_get_dbus_connection(), "/",
- MANAGER_INTERFACE, "AdapterRemoved",
- DBUS_TYPE_OBJECT_PATH, &path,
- DBUS_TYPE_INVALID);
-
adapter_remove(adapter);
btd_adapter_unref(adapter);
@@ -259,9 +106,6 @@ void manager_cleanup(const char *path)
}
btd_start_exit_timer();
-
- g_dbus_unregister_interface(btd_get_dbus_connection(),
- "/", MANAGER_INTERFACE);
}
static gint adapter_id_cmp(gconstpointer a, gconstpointer b)
@@ -338,13 +182,6 @@ struct btd_adapter *btd_manager_register_adapter(int id, gboolean up)
}
path = adapter_get_path(adapter);
- g_dbus_emit_signal(btd_get_dbus_connection(), "/",
- MANAGER_INTERFACE, "AdapterAdded",
- DBUS_TYPE_OBJECT_PATH, &path,
- DBUS_TYPE_INVALID);
-
- g_dbus_emit_property_changed(btd_get_dbus_connection(), "/",
- MANAGER_INTERFACE, "Adapters");
btd_stop_exit_timer();
diff --git a/src/manager.h b/src/manager.h
index 4d094b6..fdaabfd 100644
--- a/src/manager.h
+++ b/src/manager.h
@@ -25,14 +25,11 @@
#include <bluetooth/bluetooth.h>
#include <dbus/dbus.h>
-#define MANAGER_INTERFACE "org.bluez.Manager"
-
typedef void (*adapter_cb) (struct btd_adapter *adapter, gpointer user_data);
bool manager_init(const char *path);
void manager_cleanup(const char *path);
-const char *manager_get_base_path(void);
struct btd_adapter *manager_find_adapter(const bdaddr_t *sba);
struct btd_adapter *manager_find_adapter_by_id(int id);
struct btd_adapter *manager_get_default_adapter(void);
--
1.7.11.7
^ permalink raw reply related
* [PATCH v3 06/15] test: Use ObjectManager instead of Adapters property
From: Mikel Astiz @ 2012-12-05 12:51 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354711902-16390-1-git-send-email-mikel.astiz.oss@gmail.com>
From: Mikel Astiz <mikel.astiz@bmw-carit.de>
Use the objects and interfaces reported by the ObjectManager in order
to list the available adapters.
---
test/test-health | 9 +++++++--
test/test-health-sink | 10 ++++++++--
2 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/test/test-health b/test/test-health
index a7df679..9d2f62f 100755
--- a/test/test-health
+++ b/test/test-health
@@ -132,9 +132,14 @@ if not con:
sys.exit()
manager = dbus.Interface(bus.get_object("org.bluez", "/"),
- "org.bluez.Manager")
+ "org.freedesktop.DBus.ObjectManager")
-adapters = manager.GetProperties()["Adapters"]
+objects = manager.GetManagedObjects()
+adapters = []
+
+for path, ifaces in objects.iteritems():
+ if ifaces.has_key("org.bluez.Adapter"):
+ adapters.append(path)
i = 1
for ad in adapters:
diff --git a/test/test-health-sink b/test/test-health-sink
index 333b2fb..a886d85 100755
--- a/test/test-health-sink
+++ b/test/test-health-sink
@@ -22,9 +22,15 @@ app_path = hdp_manager.CreateApplication({"DataType": dbus.types.UInt16(4103),
print(app_path)
manager = dbus.Interface(bus.get_object("org.bluez", "/"),
- "org.bluez.Manager")
+ "org.freedesktop.DBus.ObjectManager")
+
+objects = manager.GetManagedObjects()
+adapters = []
+
+for path, ifaces in objects.iteritems():
+ if ifaces.has_key("org.bluez.Adapter"):
+ adapters.append(path)
-adapters = manager.GetProperties()["Adapters"]
i = 1
for ad in adapters:
print("%d. %s" % (i, ad))
--
1.7.11.7
^ permalink raw reply related
* [PATCH v3 05/15] test: Update test-manager script to ObjectManager
From: Mikel Astiz @ 2012-12-05 12:51 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354711902-16390-1-git-send-email-mikel.astiz.oss@gmail.com>
From: Mikel Astiz <mikel.astiz@bmw-carit.de>
Make the script compatible with the new API provided by the
ObjectManager interface.
---
test/test-manager | 30 ++++++++++++++----------------
1 file changed, 14 insertions(+), 16 deletions(-)
diff --git a/test/test-manager b/test/test-manager
index 16d6b08..c5e8007 100755
--- a/test/test-manager
+++ b/test/test-manager
@@ -8,34 +8,32 @@ import dbus
import dbus.mainloop.glib
import bluezutils
-def adapter_added(path):
- print("Adapter with path %s added" % (path))
+def interfaces_added(path, interfaces):
+ if interfaces.get("org.bluez.Adapter") != None:
+ print("Adapter with path %s added" % (path))
-def adapter_removed(path):
- print("Adapter with path %s removed" % (path))
-
-def default_changed(path):
- print("Default adapter is now at path %s" % (path))
+def interfaces_removed(path, interfaces):
+ if "org.bluez.Adapter" in interfaces:
+ print("Adapter with path %s removed" % (path))
if __name__ == "__main__":
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
- manager = dbus.Interface(bus.get_object('org.bluez', '/'),
- 'org.bluez.Manager')
-
- manager.connect_to_signal("AdapterAdded", adapter_added)
-
- manager.connect_to_signal("AdapterRemoved", adapter_removed)
+ bus.add_signal_receiver(interfaces_added, bus_name="org.bluez",
+ dbus_interface="org.freedesktop.DBus.ObjectManager",
+ signal_name="InterfacesAdded")
- manager.connect_to_signal("DefaultAdapterChanged", default_changed)
+ bus.add_signal_receiver(interfaces_removed, bus_name="org.bluez",
+ dbus_interface="org.freedesktop.DBus.ObjectManager",
+ signal_name="InterfacesRemoved")
try:
path = bluezutils.find_adapter().object_path
- default_changed(path)
+ print("Adapter found at path %s" % (path))
except:
- pass
+ print("No adapter found")
mainloop = GObject.MainLoop()
mainloop.run()
--
1.7.11.7
^ permalink raw reply related
* [PATCH v3 04/15] test: Update monitor script to ObjectManager
From: Mikel Astiz @ 2012-12-05 12:51 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354711902-16390-1-git-send-email-mikel.astiz.oss@gmail.com>
From: Mikel Astiz <mikel.astiz@bmw-carit.de>
Make the script compatible with the new API provided by the
ObjectManager and Properties interfaces.
---
test/monitor-bluetooth | 68 +++++++++++++++++++++++---------------------------
1 file changed, 31 insertions(+), 37 deletions(-)
diff --git a/test/monitor-bluetooth b/test/monitor-bluetooth
index 4a598e1..45cc910 100755
--- a/test/monitor-bluetooth
+++ b/test/monitor-bluetooth
@@ -7,15 +7,28 @@ import gobject
import dbus
import dbus.mainloop.glib
-def property_changed(name, value, path, interface):
- iface = interface[interface.rfind(".") + 1:]
- val = str(value)
- print("{%s.PropertyChanged} [%s] %s = %s" % (iface, path, name, val))
+relevant_ifaces = [ "org.bluez.Adapter", "org.bluez.Device" ]
-def object_signal(value, path, interface, member):
+def property_changed(interface, changed, invalidated, path):
iface = interface[interface.rfind(".") + 1:]
- val = str(value)
- print("{%s.%s} [%s] Path = %s" % (iface, member, path, val))
+ for name, value in changed.iteritems():
+ val = str(value)
+ print("{%s.PropertyChanged} [%s] %s = %s" % (iface, path, name,
+ val))
+
+def interfaces_added(path, interfaces):
+ for iface, props in interfaces.iteritems():
+ if not(iface in relevant_ifaces):
+ continue
+ print("{Added %s} [%s]" % (iface, path))
+ for name, value in props.iteritems():
+ print(" %s = %s" % (name, value))
+
+def interfaces_removed(path, interfaces):
+ for iface in interfaces:
+ if not(iface in relevant_ifaces):
+ continue
+ print("{Removed %s} [%s]" % (iface, path))
if __name__ == '__main__':
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
@@ -23,36 +36,17 @@ if __name__ == '__main__':
bus = dbus.SystemBus()
bus.add_signal_receiver(property_changed, bus_name="org.bluez",
- signal_name = "PropertyChanged",
- path_keyword="path",
- interface_keyword="interface")
-
- bus.add_signal_receiver(object_signal, bus_name="org.bluez",
- signal_name = "AdapterAdded",
- path_keyword="path",
- member_keyword="member",
- interface_keyword="interface")
- bus.add_signal_receiver(object_signal, bus_name="org.bluez",
- signal_name = "AdapterRemoved",
- path_keyword="path",
- member_keyword="member",
- interface_keyword="interface")
- bus.add_signal_receiver(object_signal, bus_name="org.bluez",
- signal_name = "DefaultAdapterChanged",
- path_keyword="path",
- member_keyword="member",
- interface_keyword="interface")
-
- bus.add_signal_receiver(object_signal, bus_name="org.bluez",
- signal_name = "DeviceCreated",
- path_keyword="path",
- member_keyword="member",
- interface_keyword="interface")
- bus.add_signal_receiver(object_signal, bus_name="org.bluez",
- signal_name = "DeviceRemoved",
- path_keyword="path",
- member_keyword="member",
- interface_keyword="interface")
+ dbus_interface="org.freedesktop.DBus.Properties",
+ signal_name="PropertiesChanged",
+ path_keyword="path")
+
+ bus.add_signal_receiver(interfaces_added, bus_name="org.bluez",
+ dbus_interface="org.freedesktop.DBus.ObjectManager",
+ signal_name="InterfacesAdded")
+
+ bus.add_signal_receiver(interfaces_removed, bus_name="org.bluez",
+ dbus_interface="org.freedesktop.DBus.ObjectManager",
+ signal_name="InterfacesRemoved")
mainloop = gobject.MainLoop()
mainloop.run()
--
1.7.11.7
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox