Revert "bluetooth: Update to new BlueZ 5 transport acquire/release API"

This reverts commit 9615def4b9.

This is part of the reversion of BlueZ 5 support so it can be added back
in a separate set of modules. This makes the code easier to maintain and
decrease PulseAudio's binary size.
This commit is contained in:
João Paulo Rechi Vita 2013-08-13 01:53:40 -03:00 committed by Tanu Kaskinen
parent 9882f2d4fd
commit 44ca651220
2 changed files with 31 additions and 41 deletions

View file

@ -1448,52 +1448,40 @@ bool pa_bluetooth_device_any_audio_connected(const pa_bluetooth_device *d) {
} }
int pa_bluetooth_transport_acquire(pa_bluetooth_transport *t, bool optional, size_t *imtu, size_t *omtu) { int pa_bluetooth_transport_acquire(pa_bluetooth_transport *t, bool optional, size_t *imtu, size_t *omtu) {
const char *accesstype = "rw";
const char *interface;
DBusMessage *m, *r; DBusMessage *m, *r;
DBusError err; DBusError err;
int ret; int ret;
uint16_t i, o; uint16_t i, o;
const char *method;
pa_assert(t); pa_assert(t);
pa_assert(t->device); pa_assert(t->device);
pa_assert(t->device->discovery); pa_assert(t->device->discovery);
dbus_error_init(&err); interface = t->device->discovery->version == BLUEZ_VERSION_4 ? "org.bluez.MediaTransport" : "org.bluez.MediaTransport1";
if (t->device->discovery->version == BLUEZ_VERSION_4) { if (optional) {
const char *accesstype = "rw"; /* FIXME: we are trying to acquire the transport only if the stream is
playing, without actually initiating the stream request from our side
if (optional) { (which is typically undesireable specially for hfgw use-cases.
/* We are trying to acquire the transport only if the stream is However this approach is racy, since the stream could have been
playing, without actually initiating the stream request from our side suspended in the meantime, so we can't really guarantee that the
(which is typically undesireable specially for hfgw use-cases. stream will not be requested until BlueZ's API supports this
However this approach is racy, since the stream could have been atomically. */
suspended in the meantime, so we can't really guarantee that the if (t->state < PA_BLUETOOTH_TRANSPORT_STATE_PLAYING) {
stream will not be requested with the API in BlueZ 4.x */ pa_log_info("Failed optional acquire of transport %s", t->path);
if (t->state < PA_BLUETOOTH_TRANSPORT_STATE_PLAYING) { return -1;
pa_log_info("Failed optional acquire of unavailable transport %s", t->path);
return -1;
}
} }
method = "Acquire";
pa_assert_se(m = dbus_message_new_method_call(t->owner, t->path, "org.bluez.MediaTransport", method));
pa_assert_se(dbus_message_append_args(m, DBUS_TYPE_STRING, &accesstype, DBUS_TYPE_INVALID));
} else {
pa_assert(t->device->discovery->version == BLUEZ_VERSION_5);
method = optional ? "TryAcquire" : "Acquire";
pa_assert_se(m = dbus_message_new_method_call(t->owner, t->path, "org.bluez.MediaTransport1", method));
} }
dbus_error_init(&err);
pa_assert_se(m = dbus_message_new_method_call(t->owner, t->path, interface, "Acquire"));
pa_assert_se(dbus_message_append_args(m, DBUS_TYPE_STRING, &accesstype, DBUS_TYPE_INVALID));
r = dbus_connection_send_with_reply_and_block(pa_dbus_connection_get(t->device->discovery->connection), m, -1, &err); r = dbus_connection_send_with_reply_and_block(pa_dbus_connection_get(t->device->discovery->connection), m, -1, &err);
if (!r) { if (!r) {
if (optional && pa_streq(err.name, "org.bluez.Error.NotAvailable"))
pa_log_info("Failed optional acquire of unavailable transport %s", t->path);
else
pa_log("Transport %s() failed for transport %s (%s)", method, t->path, err.message);
dbus_error_free(&err); dbus_error_free(&err);
return -1; return -1;
} }
@ -1518,6 +1506,8 @@ fail:
} }
void pa_bluetooth_transport_release(pa_bluetooth_transport *t) { void pa_bluetooth_transport_release(pa_bluetooth_transport *t) {
const char *accesstype = "rw";
const char *interface;
DBusMessage *m; DBusMessage *m;
DBusError err; DBusError err;
@ -1525,18 +1515,12 @@ void pa_bluetooth_transport_release(pa_bluetooth_transport *t) {
pa_assert(t->device); pa_assert(t->device);
pa_assert(t->device->discovery); pa_assert(t->device->discovery);
interface = t->device->discovery->version == BLUEZ_VERSION_4 ? "org.bluez.MediaTransport" : "org.bluez.MediaTransport1";
dbus_error_init(&err); dbus_error_init(&err);
if (t->device->discovery->version == BLUEZ_VERSION_4) { pa_assert_se(m = dbus_message_new_method_call(t->owner, t->path, interface, "Release"));
const char *accesstype = "rw"; pa_assert_se(dbus_message_append_args(m, DBUS_TYPE_STRING, &accesstype, DBUS_TYPE_INVALID));
pa_assert_se(m = dbus_message_new_method_call(t->owner, t->path, "org.bluez.MediaTransport", "Release"));
pa_assert_se(dbus_message_append_args(m, DBUS_TYPE_STRING, &accesstype, DBUS_TYPE_INVALID));
} else {
pa_assert(t->device->discovery->version == BLUEZ_VERSION_5);
pa_assert_se(m = dbus_message_new_method_call(t->owner, t->path, "org.bluez.MediaTransport1", "Release"));
}
dbus_connection_send_with_reply_and_block(pa_dbus_connection_get(t->device->discovery->connection), m, -1, &err); dbus_connection_send_with_reply_and_block(pa_dbus_connection_get(t->device->discovery->connection), m, -1, &err);
if (dbus_error_is_set(&err)) { if (dbus_error_is_set(&err)) {

View file

@ -367,8 +367,14 @@ static int bt_transport_acquire(struct userdata *u, bool optional) {
pa_log_debug("Acquiring transport %s", u->transport->path); pa_log_debug("Acquiring transport %s", u->transport->path);
u->stream_fd = pa_bluetooth_transport_acquire(u->transport, optional, &u->read_link_mtu, &u->write_link_mtu); u->stream_fd = pa_bluetooth_transport_acquire(u->transport, optional, &u->read_link_mtu, &u->write_link_mtu);
if (u->stream_fd < 0) if (u->stream_fd < 0) {
if (!optional)
pa_log("Failed to acquire transport %s", u->transport->path);
else
pa_log_info("Failed optional acquire of transport %s", u->transport->path);
return -1; return -1;
}
u->transport_acquired = true; u->transport_acquired = true;
pa_log_info("Transport %s acquired: fd %d", u->transport->path, u->stream_fd); pa_log_info("Transport %s acquired: fd %d", u->transport->path, u->stream_fd);