From af4f8e93d83c0220c8b3700111ae70d545d6b67b Mon Sep 17 00:00:00 2001 From: Hsin-Yu Chao Date: Thu, 9 Feb 2017 16:21:27 +0800 Subject: CRAS: bt_device - Handle SCO socket error case BT headset could send SCO Interval Rejected (0x1c) command right after SCO connection established when switches to HFP/HSP. Handle this error by checking the revent code of ppoll and suspend this bt device so user has a chance to re-connect it. BUG=chrome-os-partner:59015 TEST=Manual test MDR-XB950BT headset switch from A2DP to HFP, disconnect and reconnect a few times to verify that headset won't fall into the state that stay connected but not working. Change-Id: I6d16ddcea1608f024b5bd0780941d1f17db5de75 Reviewed-on: https://chromium-review.googlesource.com/440048 Commit-Ready: Hsinyu Chao Tested-by: Hsinyu Chao Reviewed-by: Cheng-Yi Chiang --- cras/src/server/cras_bt_device.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cras/src/server/cras_bt_device.c b/cras/src/server/cras_bt_device.c index 353c2938..682edba4 100644 --- a/cras/src/server/cras_bt_device.c +++ b/cras/src/server/cras_bt_device.c @@ -863,6 +863,13 @@ int cras_bt_device_sco_connect(struct cras_bt_device *device) goto error; } + if (pollfds[0].revents & (POLLERR | POLLHUP)) { + syslog(LOG_ERR, "SCO socket error, revents: %u", + pollfds[0].revents); + bt_device_schedule_suspend(device, 0); + goto error; + } + return sk; error: -- cgit v1.2.3