diff options
author | Hsin-Yu Chao <hychao@chromium.org> | 2017-02-09 16:21:27 +0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2017-02-11 09:26:24 -0800 |
commit | af4f8e93d83c0220c8b3700111ae70d545d6b67b (patch) | |
tree | d64c0884f8d2828df8ae5c50f7cb10f5a14f7f40 | |
parent | 825b11343233267b67b15bbea7b399675036a824 (diff) | |
download | adhd-af4f8e93d83c0220c8b3700111ae70d545d6b67b.tar.gz |
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 <hychao@chromium.org>
Tested-by: Hsinyu Chao <hychao@chromium.org>
Reviewed-by: Cheng-Yi Chiang <cychiang@chromium.org>
-rw-r--r-- | cras/src/server/cras_bt_device.c | 7 |
1 files changed, 7 insertions, 0 deletions
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: |