From 69c212f8c13794f70899d1fe6baec1b6e3c92032 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Thu, 4 May 2017 12:58:54 +0200 Subject: bluetooth: Auto recover if profile is 'off' This means something went wrong, which in case of ofono backend it is probably due to the profile not connecting immediately, but it can be safely restored in that case the transport is playing which means the profile has recovered connectivity. --- src/modules/bluetooth/module-bluez5-device.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/modules/bluetooth/module-bluez5-device.c b/src/modules/bluetooth/module-bluez5-device.c index a96da17d9..2f0ec9762 100644 --- a/src/modules/bluetooth/module-bluez5-device.c +++ b/src/modules/bluetooth/module-bluez5-device.c @@ -2060,8 +2060,14 @@ static pa_hook_result_t transport_state_changed_cb(pa_bluetooth_discovery *y, pa if (t == u->transport && t->state <= PA_BLUETOOTH_TRANSPORT_STATE_DISCONNECTED) pa_assert_se(pa_card_set_profile(u->card, pa_hashmap_get(u->card->profiles, "off"), false) >= 0); - if (t->device == u->device) + if (t->device == u->device) { + /* Auto recover from errors causing the profile to be set to off */ + if (u->profile == PA_BLUETOOTH_PROFILE_OFF && t->state == PA_BLUETOOTH_TRANSPORT_STATE_PLAYING) { + pa_log_debug("Switching to profile %s", pa_bluetooth_profile_to_string(t->profile)); + pa_assert_se(pa_card_set_profile(u->card, pa_hashmap_get(u->card->profiles, pa_bluetooth_profile_to_string(t->profile)), false) >= 0); + } handle_transport_state_change(u, t); + } return PA_HOOK_OK; } -- cgit v1.2.1