diff options
author | 2017-02-24 15:09:01 +0530 | |
---|---|---|
committer | 2017-07-31 14:22:23 -0700 | |
commit | 23e0bcd88ebbcc2e08a14d131bc35da26a502a85 (patch) | |
tree | 5f6b040f28ced18a5d81f11a25039274a96a9f66 | |
parent | 189ab31160319c0d386200e6b72c8aa44dcb0872 (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.cc | 5 | ||||
-rw-r--r-- | system/stack/a2dp/a2dp_api.cc | 2 | ||||
-rw-r--r-- | system/stack/include/a2dp_api.h | 11 | ||||
-rw-r--r-- | system/stack/include/avdt_api.h | 2 |
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 |