summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Satish Kodishala <skodisha@codeaurora.org> 2017-02-24 15:09:01 +0530
committer Pavlin Radoslavov <pavlin@google.com> 2017-07-31 14:22:23 -0700
commit23e0bcd88ebbcc2e08a14d131bc35da26a502a85 (patch)
tree5f6b040f28ced18a5d81f11a25039274a96a9f66
parent189ab31160319c0d386200e6b72c8aa44dcb0872 (diff)
Use the correct AVDTP version-specific features
Failure: A2DP is not reconnected after power cycling DUT BT. Root cause: AVDTP v1.3 feature request (AVDT_GetAllCapReq) sent by DUT as remote supports the same, but this 1.3 feature is not completely supported by DUT which leads to erroneous behavior. Fix: Use AVDT_GetAllCapReq request only when both host and remote AVDTP version are 1.3 and above. Test: 1.Pair to CarKit; 2.Connect to CarKit; 3.Do BT power cycle @ DUT Bug: 35657623 Change-Id: I66c2d7d8fe8506b74282bcca93595e1cbf5c2565
-rw-r--r--system/bta/av/bta_av_aact.cc5
-rw-r--r--system/stack/a2dp/a2dp_api.cc2
-rw-r--r--system/stack/include/a2dp_api.h11
-rw-r--r--system/stack/include/avdt_api.h2
4 files changed, 17 insertions, 3 deletions
diff --git a/system/bta/av/bta_av_aact.cc b/system/bta/av/bta_av_aact.cc
index 89cf558ff9..a79164ca79 100644
--- a/system/bta/av/bta_av_aact.cc
+++ b/system/bta/av/bta_av_aact.cc
@@ -387,7 +387,8 @@ static bool bta_av_next_getcap(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) {
/* we got a stream; get its capabilities */
if (p_scb->p_cap == NULL)
p_scb->p_cap = (tAVDT_CFG*)osi_malloc(sizeof(tAVDT_CFG));
- if (p_scb->avdt_version >= AVDT_VERSION_SYNC) {
+ if ((p_scb->avdt_version >= AVDT_VERSION_1_3) &&
+ (A2DP_GetAvdtpVersion() >= AVDT_VERSION_1_3)) {
p_req = AVDT_GetAllCapReq;
} else {
p_req = AVDT_GetCapReq;
@@ -1261,7 +1262,7 @@ void bta_av_setconfig_rsp(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) {
p_scb->num_seps = num;
if (p_scb->cur_psc_mask & AVDT_PSC_DELAY_RPT)
- p_scb->avdt_version = AVDT_VERSION_SYNC;
+ p_scb->avdt_version = AVDT_VERSION_1_3;
if (A2DP_GetCodecType(p_scb->cfg.codec_info) == A2DP_MEDIA_CT_SBC ||
num > 1) {
diff --git a/system/stack/a2dp/a2dp_api.cc b/system/stack/a2dp/a2dp_api.cc
index 06b3ae9b21..4be2bddecc 100644
--- a/system/stack/a2dp/a2dp_api.cc
+++ b/system/stack/a2dp/a2dp_api.cc
@@ -377,3 +377,5 @@ void A2DP_Init(void) {
a2dp_cb.trace_level = BT_TRACE_LEVEL_NONE;
#endif
}
+
+uint16_t A2DP_GetAvdtpVersion() { return a2dp_cb.avdt_sdp_ver; }
diff --git a/system/stack/include/a2dp_api.h b/system/stack/include/a2dp_api.h
index 2ea3e1fe49..ee215a9602 100644
--- a/system/stack/include/a2dp_api.h
+++ b/system/stack/include/a2dp_api.h
@@ -163,6 +163,17 @@ extern tA2DP_STATUS A2DP_FindService(uint16_t service_uuid,
/******************************************************************************
*
+ * Function A2DP_GetAvdtpVersion()
+ *
+ * Description Gets the local version of AVDTP
+ *
+ * Returns The local version of AVDTP.
+ *
+ *****************************************************************************/
+extern uint16_t A2DP_GetAvdtpVersion(void);
+
+/******************************************************************************
+ *
* Function A2DP_SetTraceLevel
*
* Description Sets the trace level for A2D. If 0xff is passed, the
diff --git a/system/stack/include/avdt_api.h b/system/stack/include/avdt_api.h
index fec0089d41..6fb1441bed 100644
--- a/system/stack/include/avdt_api.h
+++ b/system/stack/include/avdt_api.h
@@ -34,7 +34,7 @@
#ifndef AVDT_VERSION
#define AVDT_VERSION 0x0102
#endif
-#define AVDT_VERSION_SYNC 0x0103
+#define AVDT_VERSION_1_3 0x0103
/* Maximum size in bytes of the codec capabilities information element. */
#define AVDT_CODEC_SIZE 20