[PATCH 1/2] android/handsfree: Improve audio connection handling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This add disconnecting SCO if last call was dropped (required by
Java 'virtual voice call'). Also make sure that SCO is connected
only there were no calls present before phone state change. This
makes sure SCO won't be re-connected in three way calling scenarios
when user choose to not use audio on BT headset.
---
 android/handsfree.c | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/android/handsfree.c b/android/handsfree.c
index c8e5f8a..ebeb751 100644
--- a/android/handsfree.c
+++ b/android/handsfree.c
@@ -1995,7 +1995,8 @@ static void phone_state_dialing(int num_active, int num_held)
 	if (num_active == 0 && num_held > 0)
 		update_indicator(IND_CALLHELD, 2);
 
-	connect_audio();
+	if (device.num_active == 0 && device.num_held == 0)
+		connect_audio();
 }
 
 static void phone_state_alerting(int num_active, int num_held)
@@ -2066,7 +2067,9 @@ static void phone_state_idle(int num_active, int num_held)
 	case HAL_HANDSFREE_CALL_STATE_INCOMING:
 		if (num_active > device.num_active) {
 			update_indicator(IND_CALL, 1);
-			connect_audio();
+
+			if (device.num_active == 0 && device.num_held == 0)
+				connect_audio();
 		}
 
 		if (num_held > device.num_held)
@@ -2089,14 +2092,16 @@ static void phone_state_idle(int num_active, int num_held)
 			/* TODO better way for forcing indicator */
 			device.inds[IND_CALLHELD].val = 0;
 			update_indicator(IND_CALLHELD, 1);
-		} else if (num_active > 0 && device.num_active == 0) {
-			/* If number of active calls change but there was no
-			 * call setup change this means that there were active
+		} else if ((num_active > 0 || num_held > 0) &&
+						device.num_active == 0 &&
+						device.num_held == 0) {
+			/* If number of active or held calls change but there
+			 * was no call setup change this means that there were
 			 * calls present when headset was connected.
-			 *
-			 * TODO should we care about held calls here as well?
 			 */
 			connect_audio();
+		} else if (num_active == 0 && num_held == 0) {
+			disconnect_sco();
 		} else {
 			update_indicator(IND_CALLHELD,
 					num_held ? (num_active ? 1 : 2) : 0);
-- 
1.8.5.3

--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux