[pulseaudio-discuss] [RFC 12/24] bluetooth: Create a pa_bluetooth_transport for each HF card
jprvita at gmail.com
jprvita at gmail.com
Tue Mar 26 22:16:51 PDT 2013
From: João Paulo Rechi Vita <jprvita at openbossa.org>
Every time a HF card is found a new pa_transport is created on the
pa_bluetooth_device representing the bluetooth audio device. This way
the module-bluetooth-device is loaded if necessary, and kept around even
when all other transports get disconnected.
---
src/modules/bluetooth/bluetooth-util.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/src/modules/bluetooth/bluetooth-util.c b/src/modules/bluetooth/bluetooth-util.c
index 59d0854..9a3bc6c 100644
--- a/src/modules/bluetooth/bluetooth-util.c
+++ b/src/modules/bluetooth/bluetooth-util.c
@@ -137,8 +137,13 @@ struct handsfree_card {
int fd;
uint8_t codec;
+
+ pa_bluetooth_device *device;
};
+static pa_bluetooth_transport *transport_new(pa_bluetooth_device *d, const char *owner, const char *path, enum profile p,
+ const uint8_t *config, int size);
+
static void get_properties_reply(DBusPendingCall *pending, void *userdata);
static pa_dbus_pending* send_and_add_to_pending(pa_bluetooth_discovery *y, DBusMessage *m, DBusPendingCallNotifyFunction func,
void *call_data);
@@ -1206,6 +1211,21 @@ static void hfagent_card_found(pa_bluetooth_discovery *y, const char *path, DBus
}
pa_hashmap_put(y->hf_cards, hf_card->path, hf_card);
+
+ hf_card->device = pa_bluetooth_discovery_get_by_address(y, hf_card->remote);
+ if(hf_card->device) {
+ bool old_any_connected = pa_bluetooth_device_any_audio_connected(hf_card->device);
+ pa_bluetooth_transport *t = transport_new(hf_card->device, y->ofono_bus_id, path,
+ PROFILE_HFP_AG, NULL, 0);
+ hf_card->device->transports[PROFILE_HFP_AG] = t;
+ pa_assert_se(pa_hashmap_put(y->transports, t->path, t) >= 0);
+ pa_hook_fire(&y->hooks[PA_BLUETOOTH_HOOK_TRANSPORT_STATE_CHANGED], t);
+
+ if (old_any_connected != pa_bluetooth_device_any_audio_connected(hf_card->device))
+ run_callback(hf_card->device, false);
+ } else
+ pa_log_error("Device doesnt exist for %s", path);
+
return;
fail:
--
1.7.11.7
More information about the pulseaudio-discuss
mailing list