aboutsummaryrefslogtreecommitdiff
path: root/bta/ag/bta_ag_cmd.cc
diff options
context:
space:
mode:
Diffstat (limited to 'bta/ag/bta_ag_cmd.cc')
-rw-r--r--bta/ag/bta_ag_cmd.cc24
1 files changed, 24 insertions, 0 deletions
diff --git a/bta/ag/bta_ag_cmd.cc b/bta/ag/bta_ag_cmd.cc
index 6cd3a1f4b..0a99eed24 100644
--- a/bta/ag/bta_ag_cmd.cc
+++ b/bta/ag/bta_ag_cmd.cc
@@ -25,6 +25,7 @@
#include "bta/ag/bta_ag_int.h"
#include "bta/include/bta_ag_api.h"
#include "bta/include/utl.h"
+#include "device/include/interop.h"
#include "osi/include/compat.h"
#include "osi/include/log.h"
#include "osi/include/osi.h" // UNUSED_ATTR
@@ -822,6 +823,21 @@ static bool bta_ag_parse_biev_response(tBTA_AG_SCB* p_scb, tBTA_AG_VAL* val) {
/*******************************************************************************
*
+ * Function bta_ag_bind_timer_cback
+ *
+ * Description Handles bind timer callback
+ *
+ *
+ * Returns void
+ *
+ ******************************************************************************/
+static void bta_ag_bind_timer_cback(void* data) {
+ tBTA_AG_SCB* p_scb = (tBTA_AG_SCB*)data;
+ bta_ag_svc_conn_open(p_scb, tBTA_AG_DATA::kEmpty);
+}
+
+/*******************************************************************************
+ *
* Function bta_ag_at_hfp_cback
*
* Description AT command processing callback for HFP.
@@ -966,6 +982,13 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type,
!((p_scb->features & BTA_AG_FEAT_HF_IND) &&
(p_scb->peer_features & BTA_AG_PEER_FEAT_HF_IND))) {
bta_ag_svc_conn_open(p_scb, tBTA_AG_DATA::kEmpty);
+ } else {
+ if (p_scb->peer_version >= HFP_VERSION_1_7 &&
+ interop_match_addr(INTEROP_SLC_SKIP_BIND_COMMAND,
+ &p_scb->peer_addr)) {
+ alarm_set_on_mloop(p_scb->bind_timer, BTA_AG_BIND_TIMEOUT_MS,
+ bta_ag_bind_timer_cback, p_scb);
+ }
}
} else {
val.idx = bta_ag_parse_chld(p_scb, val.str);
@@ -1008,6 +1031,7 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type,
case BTA_AG_AT_BIND_EVT:
APPL_TRACE_DEBUG("%s BTA_AG_AT_BIND_EVT arg_type: %d", __func__,
arg_type);
+ alarm_cancel(p_scb->bind_timer);
if (arg_type == BTA_AG_AT_SET) {
if (bta_ag_parse_bind_set(p_scb, val)) {
bta_ag_send_ok(p_scb);