summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCNSS_WLAN Service <cnssbldsw@qualcomm.com>2023-04-20 00:01:41 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2023-04-20 00:01:41 -0700
commitcb351c2c2b7c44c742b4ab4e4482122acc105956 (patch)
tree12ab274ea07dd806d4ed00595cc8a06345aa5cfe
parente12c682726e6d4b8151c2f7249fdf16fdadc269d (diff)
parenta35e35b5eaa95bc4d000c54ca405d808ad332689 (diff)
Merge "A2DP: Reject SetConfig if Cfgs are not negotiated properly" into bt-sys.lnx.13.0
-rw-r--r--btif/co/bta_av_co.cc5
-rw-r--r--stack/a2dp/a2dp_vendor.cc8
-rw-r--r--stack/a2dp/a2dp_vendor_aptx_adaptive.cc10
-rw-r--r--stack/include/a2dp_vendor_aptx_adaptive.h4
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