diff options
author | Sagar Verma <quic_sagarv@quicinc.com> | 2023-03-21 15:17:02 +0530 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2023-04-03 22:58:14 -0700 |
commit | a35e35b5eaa95bc4d000c54ca405d808ad332689 (patch) | |
tree | c30b9ebbc5d45989b2fe33f6f042792d5e549b17 | |
parent | f20503c97e19542e15f2e94b0d4fc21fed70dfa1 (diff) |
A2DP: Reject SetConfig if Cfgs are not negotiated properly
Reject Set Config Cmd if configurations are not negotiated
properly during capability exchange.
CRs-Fixed: 3429434
Change-Id: Ied0d481384e0e18a2067515c59a3b9bf70e57754
-rw-r--r-- | btif/co/bta_av_co.cc | 5 | ||||
-rw-r--r-- | stack/a2dp/a2dp_vendor.cc | 8 | ||||
-rw-r--r-- | stack/a2dp/a2dp_vendor_aptx_adaptive.cc | 10 | ||||
-rw-r--r-- | stack/include/a2dp_vendor_aptx_adaptive.h | 4 |
4 files changed, 25 insertions, 2 deletions
diff --git a/btif/co/bta_av_co.cc b/btif/co/bta_av_co.cc index cd978784a..f650cf3ef 100644 --- a/btif/co/bta_av_co.cc +++ b/btif/co/bta_av_co.cc @@ -798,10 +798,13 @@ void bta_av_co_audio_setconfig(tBTA_AV_HNDL hndl, const uint8_t* p_codec_info, if (!codec_config_supported) { category = AVDT_ASC_CODEC; status = A2DP_WRONG_CODEC; + } else { + status = A2dp_IsCodecConfigMatch(p_codec_info); + APPL_TRACE_DEBUG("%s: after setotaconfig call cfg match for codec %s", __func__, + A2DP_CodecName(p_codec_info)); } } - status = A2dp_IsCodecConfigMatch(p_codec_info); error_code = A2dp_SendSetConfigRspErrorCodeForPTS(); APPL_TRACE_DEBUG("%s: status : %d, error_code: %d", diff --git a/stack/a2dp/a2dp_vendor.cc b/stack/a2dp/a2dp_vendor.cc index b55913494..6bd92e25b 100644 --- a/stack/a2dp/a2dp_vendor.cc +++ b/stack/a2dp/a2dp_vendor.cc @@ -815,8 +815,14 @@ tA2DP_STATUS A2DP_VendorIsCodecConfigMatch(const uint8_t* p_codec_info) { return A2DP_VendorIsCodecConfigMatchLdac(p_codec_info); } + // Check for AptX-Adaptive + if (vendor_id == A2DP_APTX_ADAPTIVE_VENDOR_ID && + codec_id == A2DP_APTX_ADAPTIVE_CODEC_ID_BLUETOOTH) { + LOG_DEBUG(LOG_TAG, "%s: checking for Aptx-Adaptive codecConfig match", __func__); + return A2DP_VendorIsCodecConfigMatchAptxAdaptive(p_codec_info); + } + // Add checks based on <vendor_id, codec_id> return false; } - diff --git a/stack/a2dp/a2dp_vendor_aptx_adaptive.cc b/stack/a2dp/a2dp_vendor_aptx_adaptive.cc index 8e21f155f..b04b58e44 100644 --- a/stack/a2dp/a2dp_vendor_aptx_adaptive.cc +++ b/stack/a2dp/a2dp_vendor_aptx_adaptive.cc @@ -736,6 +736,16 @@ bool A2DP_VendorAdjustCodecAptxAdaptive(uint8_t* p_codec_info) { return true; } +tA2DP_STATUS A2DP_VendorIsCodecConfigMatchAptxAdaptive(const uint8_t* p_codec_info) { + tA2DP_APTX_ADAPTIVE_CIE aptx_adaptive_cie; + + LOG_DEBUG(LOG_TAG, "%s", __func__); + tA2DP_STATUS a2dp_status = + A2DP_ParseInfoAptxAdaptive(&aptx_adaptive_cie, p_codec_info, false); + LOG_DEBUG(LOG_TAG, "%s: a2dp_status: %d", __func__, a2dp_status); + return a2dp_status; +} + btav_a2dp_codec_index_t A2DP_VendorSourceCodecIndexAptxAdaptive( const uint8_t* p_codec_info) { return BTAV_A2DP_CODEC_INDEX_SOURCE_APTX_ADAPTIVE; diff --git a/stack/include/a2dp_vendor_aptx_adaptive.h b/stack/include/a2dp_vendor_aptx_adaptive.h index ff574ada4..2b70fec1a 100644 --- a/stack/include/a2dp_vendor_aptx_adaptive.h +++ b/stack/include/a2dp_vendor_aptx_adaptive.h @@ -206,4 +206,8 @@ const char* A2DP_VendorCodecIndexStrAptxAdaptive(void); // configuration entry pointed by |p_cfg|. bool A2DP_VendorInitCodecConfigAptxAdaptive(tAVDT_CFG* p_cfg); +// Checks peer initiated setconfig with DUT supported config +// and returns proper status. +tA2DP_STATUS A2DP_VendorIsCodecConfigMatchAptxAdaptive(const uint8_t* p_codec_info); + #endif // A2DP_VENDOR_APTX_ADAPTIVE_H |