Merge "Make AdvertiseManager shutdown gracefully"
diff --git a/binder/android/bluetooth/IBluetoothHeadset.aidl b/binder/android/bluetooth/IBluetoothHeadset.aidl
index 71f6713..60a92d2 100644
--- a/binder/android/bluetooth/IBluetoothHeadset.aidl
+++ b/binder/android/bluetooth/IBluetoothHeadset.aidl
@@ -58,4 +58,5 @@
                       String number, int type);
     boolean setActiveDevice(in BluetoothDevice device);
     BluetoothDevice getActiveDevice();
+    boolean isInbandRingingEnabled();
 }
diff --git a/bta/ag/bta_ag_act.cc b/bta/ag/bta_ag_act.cc
index 1d6da2a..a242c0d 100644
--- a/bta/ag/bta_ag_act.cc
+++ b/bta/ag/bta_ag_act.cc
@@ -25,7 +25,6 @@
 #include <cstring>
 
 #include "bta_ag_api.h"
-#include "bta_ag_co.h"
 #include "bta_ag_int.h"
 #include "bta_api.h"
 #include "bta_dm_api.h"
@@ -403,9 +402,6 @@
 
   bta_sys_conn_close(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr);
 
-  /* call close call-out */
-  bta_ag_co_data_close(close.hdr.handle);
-
   if (bta_ag_get_active_device() == p_scb->peer_addr) {
     bta_clear_active_device();
   }
@@ -477,10 +473,6 @@
   p_scb->at_cb.cmd_max_len = BTA_AG_CMD_MAX;
   bta_ag_at_init(&p_scb->at_cb);
 
-  /* call app open call-out */
-  bta_ag_co_data_open(bta_ag_scb_to_idx(p_scb),
-                      bta_ag_svc_id[p_scb->conn_service]);
-
   bta_sys_conn_open(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr);
 
   bta_ag_cback_open(p_scb, nullptr, BTA_AG_SUCCESS);
@@ -779,54 +771,6 @@
 
 /*******************************************************************************
  *
- * Function         bta_ag_ci_rx_data
- *
- * Description      Send result code
- *
- * Returns          void
- *
- ******************************************************************************/
-void bta_ag_ci_rx_data(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data) {
-  uint16_t len;
-  tBTA_AG_CI_RX_WRITE* p_rx_write_msg = &p_data->ci_rx_write;
-  char* p_data_area =
-      (char*)(p_rx_write_msg + 1); /* Point to data area after header */
-
-  APPL_TRACE_DEBUG("bta_ag_ci_rx_data:");
-  /* send to RFCOMM */
-  bta_sys_busy(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr);
-  PORT_WriteData(p_scb->conn_handle, p_data_area, strlen(p_data_area), &len);
-  if ((p_scb->sco_idx != BTM_INVALID_SCO_INDEX) && bta_ag_sco_is_open(p_scb)) {
-    APPL_TRACE_DEBUG("bta_ag_rfc_data, change link policy for SCO");
-    bta_sys_sco_open(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr);
-  } else {
-    bta_sys_idle(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr);
-  }
-}
-
-/*******************************************************************************
- *
- * Function         bta_ag_rcvd_slc_ready
- *
- * Description      Handles SLC ready call-in in case of pass-through mode.
- *
- * Returns          void
- *
- ******************************************************************************/
-void bta_ag_rcvd_slc_ready(tBTA_AG_SCB* p_scb,
-                           UNUSED_ATTR tBTA_AG_DATA* p_data) {
-  APPL_TRACE_DEBUG("bta_ag_rcvd_slc_ready: handle = %d",
-                   bta_ag_scb_to_idx(p_scb));
-
-  if (bta_ag_cb.parse_mode == BTA_AG_PASS_THROUGH) {
-    /* In pass-through mode, BTA knows that SLC is ready only through call-in.
-     */
-    bta_ag_svc_conn_open(p_scb, nullptr);
-  }
-}
-
-/*******************************************************************************
- *
  * Function         bta_ag_setcodec
  *
  * Description      Handle API SetCodec
diff --git a/bta/ag/bta_ag_api.cc b/bta/ag/bta_ag_api.cc
index b35f136..c4f2ddf 100644
--- a/bta/ag/bta_ag_api.cc
+++ b/bta/ag/bta_ag_api.cc
@@ -50,8 +50,7 @@
  * Returns          BTA_SUCCESS if OK, BTA_FAILURE otherwise.
  *
  ******************************************************************************/
-tBTA_STATUS BTA_AgEnable(tBTA_AG_PARSE_MODE parse_mode,
-                         tBTA_AG_CBACK* p_cback) {
+tBTA_STATUS BTA_AgEnable(tBTA_AG_CBACK* p_cback) {
   /* Error if AG is already enabled, or AG is in the middle of disabling. */
   for (const tBTA_AG_SCB& scb : bta_ag_cb.scb) {
     if (scb.in_use) {
@@ -66,7 +65,6 @@
   tBTA_AG_API_ENABLE* p_buf =
       (tBTA_AG_API_ENABLE*)osi_malloc(sizeof(tBTA_AG_API_ENABLE));
   p_buf->hdr.event = BTA_AG_API_ENABLE_EVT;
-  p_buf->parse_mode = parse_mode;
   p_buf->p_cback = p_cback;
 
   bta_sys_sendmsg(p_buf);
diff --git a/bta/ag/bta_ag_int.h b/bta/ag/bta_ag_int.h
index 847f01e..37a8d95 100644
--- a/bta/ag/bta_ag_int.h
+++ b/bta/ag/bta_ag_int.h
@@ -82,11 +82,8 @@
   BTA_AG_DISC_INT_RES_EVT,
   BTA_AG_DISC_OK_EVT,
   BTA_AG_DISC_FAIL_EVT,
-  BTA_AG_CI_RX_WRITE_EVT,
   BTA_AG_RING_TIMEOUT_EVT,
   BTA_AG_SVC_TIMEOUT_EVT,
-  BTA_AG_CI_SCO_DATA_EVT,
-  BTA_AG_CI_SLC_READY_EVT,
   BTA_AG_MAX_EVT,
 
   /* these events are handled outside of the state machine */
@@ -130,7 +127,6 @@
 /* data type for BTA_AG_API_ENABLE_EVT */
 typedef struct {
   BT_HDR hdr;
-  tBTA_AG_PARSE_MODE parse_mode;
   tBTA_AG_CBACK* p_cback;
 } tBTA_AG_API_ENABLE;
 
@@ -188,12 +184,6 @@
   uint16_t port_handle;
 } tBTA_AG_RFC;
 
-/* data type for BTA_AG_CI_RX_WRITE_EVT */
-typedef struct {
-  BT_HDR hdr;
-  //    char            p_data[BTA_AG_MTU+1];
-} tBTA_AG_CI_RX_WRITE;
-
 /* union of all event datatypes */
 typedef union {
   BT_HDR hdr;
@@ -206,7 +196,6 @@
   tBTA_AG_API_SET_ACTIVE_DEVICE api_set_active_device;
   tBTA_AG_DISC_RESULT disc_result;
   tBTA_AG_RFC rfc;
-  tBTA_AG_CI_RX_WRITE ci_rx_write;
 } tBTA_AG_DATA;
 
 /* type for each profile */
@@ -295,7 +284,6 @@
   tBTA_AG_PROFILE profile[BTA_AG_NUM_IDX]; /* profile-specific data */
   tBTA_AG_SCO_CB sco;                      /* SCO data */
   tBTA_AG_CBACK* p_cback;                  /* application callback */
-  tBTA_AG_PARSE_MODE parse_mode;           /* parse/pass-through mode */
 } tBTA_AG_CB;
 
 /*****************************************************************************
@@ -398,9 +386,6 @@
 extern void bta_ag_setcodec(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data);
 extern void bta_ag_send_bcs(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data);
 extern void bta_ag_send_ring(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data);
-extern void bta_ag_ci_sco_data(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data);
-extern void bta_ag_ci_rx_data(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data);
-extern void bta_ag_rcvd_slc_ready(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data);
 extern void bta_ag_set_sco_allowed(tBTA_AG_DATA* p_data);
 extern const RawAddress& bta_ag_get_active_device();
 extern void bta_clear_active_device();
diff --git a/bta/ag/bta_ag_main.cc b/bta/ag/bta_ag_main.cc
index 89a6827..56a2638 100644
--- a/bta/ag/bta_ag_main.cc
+++ b/bta/ag/bta_ag_main.cc
@@ -24,7 +24,6 @@
 
 #include <string.h>
 
-#include "bta_ag_co.h"
 #include "bta_ag_int.h"
 #include "bta_api.h"
 #include "bta_sys.h"
@@ -34,15 +33,6 @@
 /*****************************************************************************
  * Constants and types
  ****************************************************************************/
-#ifndef BTA_AG_DEBUG
-#define BTA_AG_DEBUG FALSE
-#endif
-
-#if (BTA_AG_DEBUG == TRUE)
-static char* bta_ag_evt_str(uint16_t event, tBTA_AG_RES result);
-static char* bta_ag_state_str(uint8_t state);
-#endif
-
 /* state machine states */
 enum { BTA_AG_INIT_ST, BTA_AG_OPENING_ST, BTA_AG_OPEN_ST, BTA_AG_CLOSING_ST };
 
@@ -77,9 +67,6 @@
   BTA_AG_RESULT,
   BTA_AG_SETCODEC,
   BTA_AG_SEND_RING,
-  BTA_AG_CI_SCO_DATA,
-  BTA_AG_CI_RX_DATA,
-  BTA_AG_RCVD_SLC_READY,
   BTA_AG_NUM_ACTIONS
 };
 
@@ -88,6 +75,83 @@
 /* type for action functions */
 typedef void (*tBTA_AG_ACTION)(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data);
 
+#define CASE_RETURN_STR(const) \
+  case const:                  \
+    return #const;
+
+static const char* bta_ag_res_str(tBTA_AG_RES result) {
+  switch (result) {
+    CASE_RETURN_STR(BTA_AG_SPK_RES)
+    CASE_RETURN_STR(BTA_AG_MIC_RES)
+    CASE_RETURN_STR(BTA_AG_INBAND_RING_RES)
+    CASE_RETURN_STR(BTA_AG_CIND_RES)
+    CASE_RETURN_STR(BTA_AG_BINP_RES)
+    CASE_RETURN_STR(BTA_AG_IND_RES)
+    CASE_RETURN_STR(BTA_AG_BVRA_RES)
+    CASE_RETURN_STR(BTA_AG_CNUM_RES)
+    CASE_RETURN_STR(BTA_AG_BTRH_RES)
+    CASE_RETURN_STR(BTA_AG_CLCC_RES)
+    CASE_RETURN_STR(BTA_AG_COPS_RES)
+    CASE_RETURN_STR(BTA_AG_IN_CALL_RES)
+    CASE_RETURN_STR(BTA_AG_IN_CALL_CONN_RES)
+    CASE_RETURN_STR(BTA_AG_CALL_WAIT_RES)
+    CASE_RETURN_STR(BTA_AG_OUT_CALL_ORIG_RES)
+    CASE_RETURN_STR(BTA_AG_OUT_CALL_ALERT_RES)
+    CASE_RETURN_STR(BTA_AG_OUT_CALL_CONN_RES)
+    CASE_RETURN_STR(BTA_AG_CALL_CANCEL_RES)
+    CASE_RETURN_STR(BTA_AG_END_CALL_RES)
+    CASE_RETURN_STR(BTA_AG_IN_CALL_HELD_RES)
+    CASE_RETURN_STR(BTA_AG_UNAT_RES)
+    CASE_RETURN_STR(BTA_AG_MULTI_CALL_RES)
+    CASE_RETURN_STR(BTA_AG_BIND_RES)
+    CASE_RETURN_STR(BTA_AG_IND_RES_ON_DEMAND)
+    default:
+      return "Unknown AG Result";
+  }
+}
+
+static const char* bta_ag_evt_str(uint16_t event) {
+  switch (event) {
+    CASE_RETURN_STR(BTA_AG_API_REGISTER_EVT)
+    CASE_RETURN_STR(BTA_AG_API_DEREGISTER_EVT)
+    CASE_RETURN_STR(BTA_AG_API_OPEN_EVT)
+    CASE_RETURN_STR(BTA_AG_API_CLOSE_EVT)
+    CASE_RETURN_STR(BTA_AG_API_AUDIO_OPEN_EVT)
+    CASE_RETURN_STR(BTA_AG_API_AUDIO_CLOSE_EVT)
+    CASE_RETURN_STR(BTA_AG_API_RESULT_EVT)
+    CASE_RETURN_STR(BTA_AG_API_SETCODEC_EVT)
+    CASE_RETURN_STR(BTA_AG_RFC_OPEN_EVT)
+    CASE_RETURN_STR(BTA_AG_RFC_CLOSE_EVT)
+    CASE_RETURN_STR(BTA_AG_RFC_SRV_CLOSE_EVT)
+    CASE_RETURN_STR(BTA_AG_RFC_DATA_EVT)
+    CASE_RETURN_STR(BTA_AG_SCO_OPEN_EVT)
+    CASE_RETURN_STR(BTA_AG_SCO_CLOSE_EVT)
+    CASE_RETURN_STR(BTA_AG_DISC_ACP_RES_EVT)
+    CASE_RETURN_STR(BTA_AG_DISC_INT_RES_EVT)
+    CASE_RETURN_STR(BTA_AG_DISC_OK_EVT)
+    CASE_RETURN_STR(BTA_AG_DISC_FAIL_EVT)
+    CASE_RETURN_STR(BTA_AG_RING_TIMEOUT_EVT)
+    CASE_RETURN_STR(BTA_AG_SVC_TIMEOUT_EVT)
+    CASE_RETURN_STR(BTA_AG_API_ENABLE_EVT)
+    CASE_RETURN_STR(BTA_AG_API_DISABLE_EVT)
+    CASE_RETURN_STR(BTA_AG_API_SET_SCO_ALLOWED_EVT)
+    CASE_RETURN_STR(BTA_AG_API_SET_ACTIVE_DEVICE_EVT)
+    default:
+      return "Unknown AG Event";
+  }
+}
+
+static const char* bta_ag_state_str(uint8_t state) {
+  switch (state) {
+    CASE_RETURN_STR(BTA_AG_INIT_ST)
+    CASE_RETURN_STR(BTA_AG_OPENING_ST)
+    CASE_RETURN_STR(BTA_AG_OPEN_ST)
+    CASE_RETURN_STR(BTA_AG_CLOSING_ST)
+    default:
+      return "Unknown AG State";
+  }
+}
+
 /* action functions */
 const tBTA_AG_ACTION bta_ag_action[] = {
     bta_ag_register,       bta_ag_deregister,    bta_ag_start_open,
@@ -99,8 +163,7 @@
     bta_ag_sco_conn_close, bta_ag_sco_listen,    bta_ag_sco_open,
     bta_ag_sco_close,      bta_ag_sco_shutdown,  bta_ag_post_sco_open,
     bta_ag_post_sco_close, bta_ag_svc_conn_open, bta_ag_result,
-    bta_ag_setcodec,       bta_ag_send_ring,     bta_ag_ci_sco_data,
-    bta_ag_ci_rx_data,     bta_ag_rcvd_slc_ready};
+    bta_ag_setcodec,       bta_ag_send_ring};
 
 /* state table information */
 #define BTA_AG_ACTIONS 2    /* number of actions */
@@ -128,18 +191,15 @@
     /* DISC_INT_RES_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST},
     /* DISC_OK_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST},
     /* DISC_FAIL_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST},
-    /* CI_RX_WRITE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST},
     /* RING_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST},
-    /* SVC_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST},
-    /* CI_SCO_DATA_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST},
-    /* CI_SLC_READY_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}};
+    /* SVC_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}};
 
 /* state table for opening state */
 const uint8_t bta_ag_st_opening[][BTA_AG_NUM_COLS] = {
     /* Event                    Action 1                Action 2 Next state */
     /* API_REGISTER_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST},
-    /* API_DEREGISTER_EVT */ {BTA_AG_RFC_DO_CLOSE, BTA_AG_START_DEREG,
-                              BTA_AG_CLOSING_ST},
+    /* API_DEREGISTER_EVT */
+    {BTA_AG_RFC_DO_CLOSE, BTA_AG_START_DEREG, BTA_AG_CLOSING_ST},
     /* API_OPEN_EVT */ {BTA_AG_OPEN_FAIL, BTA_AG_IGNORE, BTA_AG_OPENING_ST},
     /* API_CLOSE_EVT */ {BTA_AG_RFC_DO_CLOSE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST},
     /* API_AUDIO_OPEN_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST},
@@ -151,25 +211,22 @@
     /* RFC_SRV_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST},
     /* RFC_DATA_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST},
     /* SCO_OPEN_EVT */ {BTA_AG_SCO_CONN_OPEN, BTA_AG_IGNORE, BTA_AG_OPENING_ST},
-    /* SCO_CLOSE_EVT */ {BTA_AG_SCO_CONN_CLOSE, BTA_AG_IGNORE,
-                         BTA_AG_OPENING_ST},
+    /* SCO_CLOSE_EVT */
+    {BTA_AG_SCO_CONN_CLOSE, BTA_AG_IGNORE, BTA_AG_OPENING_ST},
     /* DISC_ACP_RES_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST},
-    /* DISC_INT_RES_EVT */ {BTA_AG_DISC_INT_RES, BTA_AG_IGNORE,
-                            BTA_AG_OPENING_ST},
+    /* DISC_INT_RES_EVT */
+    {BTA_AG_DISC_INT_RES, BTA_AG_IGNORE, BTA_AG_OPENING_ST},
     /* DISC_OK_EVT */ {BTA_AG_RFC_DO_OPEN, BTA_AG_IGNORE, BTA_AG_OPENING_ST},
     /* DISC_FAIL_EVT */ {BTA_AG_DISC_FAIL, BTA_AG_IGNORE, BTA_AG_INIT_ST},
-    /* CI_RX_WRITE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST},
     /* RING_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST},
-    /* SVC_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST},
-    /* CI_SCO_DATA_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST},
-    /* CI_SLC_READY_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}};
+    /* SVC_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}};
 
 /* state table for open state */
 const uint8_t bta_ag_st_open[][BTA_AG_NUM_COLS] = {
     /* Event                    Action 1                Action 2 Next state */
     /* API_REGISTER_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPEN_ST},
-    /* API_DEREGISTER_EVT */ {BTA_AG_START_CLOSE, BTA_AG_START_DEREG,
-                              BTA_AG_CLOSING_ST},
+    /* API_DEREGISTER_EVT */
+    {BTA_AG_START_CLOSE, BTA_AG_START_DEREG, BTA_AG_CLOSING_ST},
     /* API_OPEN_EVT */ {BTA_AG_OPEN_FAIL, BTA_AG_IGNORE, BTA_AG_OPEN_ST},
     /* API_CLOSE_EVT */ {BTA_AG_START_CLOSE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST},
     /* API_AUDIO_OPEN_EVT */ {BTA_AG_SCO_OPEN, BTA_AG_IGNORE, BTA_AG_OPEN_ST},
@@ -180,27 +237,23 @@
     /* RFC_CLOSE_EVT */ {BTA_AG_RFC_CLOSE, BTA_AG_IGNORE, BTA_AG_INIT_ST},
     /* RFC_SRV_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPEN_ST},
     /* RFC_DATA_EVT */ {BTA_AG_RFC_DATA, BTA_AG_IGNORE, BTA_AG_OPEN_ST},
-    /* SCO_OPEN_EVT */ {BTA_AG_SCO_CONN_OPEN, BTA_AG_POST_SCO_OPEN,
-                        BTA_AG_OPEN_ST},
-    /* SCO_CLOSE_EVT */ {BTA_AG_SCO_CONN_CLOSE, BTA_AG_POST_SCO_CLOSE,
-                         BTA_AG_OPEN_ST},
+    /* SCO_OPEN_EVT */
+    {BTA_AG_SCO_CONN_OPEN, BTA_AG_POST_SCO_OPEN, BTA_AG_OPEN_ST},
+    /* SCO_CLOSE_EVT */
+    {BTA_AG_SCO_CONN_CLOSE, BTA_AG_POST_SCO_CLOSE, BTA_AG_OPEN_ST},
     /* DISC_ACP_RES_EVT */ {BTA_AG_DISC_ACP_RES, BTA_AG_IGNORE, BTA_AG_OPEN_ST},
     /* DISC_INT_RES_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPEN_ST},
     /* DISC_OK_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPEN_ST},
     /* DISC_FAIL_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPEN_ST},
-    /* CI_RX_WRITE_EVT */ {BTA_AG_CI_RX_DATA, BTA_AG_IGNORE, BTA_AG_OPEN_ST},
     /* RING_TOUT_EVT */ {BTA_AG_SEND_RING, BTA_AG_IGNORE, BTA_AG_OPEN_ST},
-    /* SVC_TOUT_EVT */ {BTA_AG_START_CLOSE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST},
-    /* CI_SCO_DATA_EVT */ {BTA_AG_CI_SCO_DATA, BTA_AG_IGNORE, BTA_AG_OPEN_ST},
-    /* CI_SLC_READY_EVT */
-    {BTA_AG_RCVD_SLC_READY, BTA_AG_IGNORE, BTA_AG_OPEN_ST}};
+    /* SVC_TOUT_EVT */ {BTA_AG_START_CLOSE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}};
 
 /* state table for closing state */
 const uint8_t bta_ag_st_closing[][BTA_AG_NUM_COLS] = {
     /* Event                    Action 1                Action 2 Next state */
     /* API_REGISTER_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST},
-    /* API_DEREGISTER_EVT */ {BTA_AG_START_DEREG, BTA_AG_IGNORE,
-                              BTA_AG_CLOSING_ST},
+    /* API_DEREGISTER_EVT */
+    {BTA_AG_START_DEREG, BTA_AG_IGNORE, BTA_AG_CLOSING_ST},
     /* API_OPEN_EVT */ {BTA_AG_OPEN_FAIL, BTA_AG_IGNORE, BTA_AG_CLOSING_ST},
     /* API_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST},
     /* API_AUDIO_OPEN_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST},
@@ -212,17 +265,14 @@
     /* RFC_SRV_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST},
     /* RFC_DATA_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST},
     /* SCO_OPEN_EVT */ {BTA_AG_SCO_CONN_OPEN, BTA_AG_IGNORE, BTA_AG_CLOSING_ST},
-    /* SCO_CLOSE_EVT */ {BTA_AG_SCO_CONN_CLOSE, BTA_AG_POST_SCO_CLOSE,
-                         BTA_AG_CLOSING_ST},
+    /* SCO_CLOSE_EVT */
+    {BTA_AG_SCO_CONN_CLOSE, BTA_AG_POST_SCO_CLOSE, BTA_AG_CLOSING_ST},
     /* DISC_ACP_RES_EVT */ {BTA_AG_FREE_DB, BTA_AG_IGNORE, BTA_AG_CLOSING_ST},
     /* DISC_INT_RES_EVT */ {BTA_AG_FREE_DB, BTA_AG_IGNORE, BTA_AG_INIT_ST},
     /* DISC_OK_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST},
     /* DISC_FAIL_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST},
-    /* CI_RX_WRITE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST},
     /* RING_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST},
-    /* SVC_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST},
-    /* CI_SCO_DATA_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST},
-    /* CI_SLC_READY_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}};
+    /* SVC_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}};
 
 /* type for state table */
 typedef const uint8_t (*tBTA_AG_ST_TBL)[BTA_AG_NUM_COLS];
@@ -586,10 +636,9 @@
 
   /* store callback function */
   bta_ag_cb.p_cback = p_data->api_enable.p_cback;
-  bta_ag_cb.parse_mode = p_data->api_enable.parse_mode;
 
   /* call init call-out */
-  bta_ag_co_init();
+  BTM_WriteVoiceSettings(AG_VOICE_SETTINGS);
 
   bta_sys_collision_register(BTA_ID_AG, bta_ag_collision_cback);
 
@@ -706,26 +755,20 @@
   tBTA_AG_ST_TBL state_table;
   uint8_t action;
   int i;
-#if (BTA_AG_DEBUG == TRUE)
   uint16_t previous_event = event;
   uint8_t previous_state = p_scb->state;
 
   /* Ignore displaying of AT results when not connected (Ignored in state
    * machine) */
-  if ((previous_event != BTA_AG_API_RESULT_EVT ||
-       p_scb->state == BTA_AG_OPEN_ST) &&
-      event != BTA_AG_CI_SCO_DATA_EVT) {
-    APPL_TRACE_EVENT("%s: Handle 0x%04x, State %d (%s), Event 0x%04x (%s)",
-                     __func__, bta_ag_scb_to_idx(p_scb), p_scb->state,
-                     bta_ag_state_str(p_scb->state), event,
-                     bta_ag_evt_str(event, p_data->api_result.result));
+  if (previous_event != BTA_AG_API_RESULT_EVT ||
+      p_scb->state == BTA_AG_OPEN_ST) {
+    APPL_TRACE_EVENT(
+        "%s: handle=0x%04x, state=%s(0x%02x), event=%s(0x%04x), "
+        "result=%s(0x%02x)",
+        __func__, bta_ag_scb_to_idx(p_scb), bta_ag_state_str(p_scb->state),
+        p_scb->state, bta_ag_evt_str(event), event,
+        bta_ag_res_str(p_data->api_result.result), p_data->api_result.result);
   }
-#else
-  if (event != BTA_AG_CI_SCO_DATA_EVT) {
-    APPL_TRACE_EVENT("%s: Handle 0x%04x, State %d, Event 0x%04x", __func__,
-                     bta_ag_scb_to_idx(p_scb), p_scb->state, event);
-  }
-#endif
 
   event &= 0x00FF;
   if (event >= (BTA_AG_MAX_EVT & 0x00FF)) {
@@ -748,14 +791,15 @@
       break;
     }
   }
-#if (BTA_AG_DEBUG == TRUE)
   if (p_scb->state != previous_state) {
-    APPL_TRACE_EVENT("%s: State Change: [%s] -> [%s] after Event [%s]",
-                     __func__, bta_ag_state_str(previous_state),
-                     bta_ag_state_str(p_scb->state),
-                     bta_ag_evt_str(previous_event, p_data->api_result.result));
+    APPL_TRACE_EVENT(
+        "%s: state_change[%s(0x%02x)]->[%s(0x%02x)], "
+        "event[%s(0x%04x)], result[%s(0x%02x)]",
+        __func__, bta_ag_state_str(previous_state), previous_state,
+        bta_ag_state_str(p_scb->state), p_scb->state,
+        bta_ag_evt_str(previous_event), previous_event,
+        bta_ag_res_str(p_data->api_result.result), p_data->api_result.result);
   }
-#endif
 }
 
 /*******************************************************************************
@@ -808,121 +852,3 @@
   }
   return true;
 }
-
-#if (BTA_AG_DEBUG == TRUE)
-static char* bta_ag_evt_str(uint16_t event, tBTA_AG_RES result) {
-  switch (event) {
-    case BTA_AG_API_REGISTER_EVT:
-      return "Register Request";
-    case BTA_AG_API_DEREGISTER_EVT:
-      return "Deregister Request";
-    case BTA_AG_API_OPEN_EVT:
-      return "Open SLC Request";
-    case BTA_AG_API_CLOSE_EVT:
-      return "Close SLC Request";
-    case BTA_AG_API_AUDIO_OPEN_EVT:
-      return "Open Audio Request";
-    case BTA_AG_API_AUDIO_CLOSE_EVT:
-      return "Close Audio Request";
-    case BTA_AG_API_RESULT_EVT:
-      switch (result) {
-        case BTA_AG_SPK_RES:
-          return ("AT Result  BTA_AG_SPK_RES");
-        case BTA_AG_MIC_RES:
-          return ("AT Result  BTA_AG_MIC_RES");
-        case BTA_AG_INBAND_RING_RES:
-          return ("AT Result  BTA_AG_INBAND_RING_RES");
-        case BTA_AG_CIND_RES:
-          return ("AT Result  BTA_AG_CIND_RES");
-        case BTA_AG_BINP_RES:
-          return ("AT Result  BTA_AG_BINP_RES");
-        case BTA_AG_IND_RES:
-          return ("AT Result  BTA_AG_IND_RES");
-        case BTA_AG_BVRA_RES:
-          return ("AT Result  BTA_AG_BVRA_RES");
-        case BTA_AG_CNUM_RES:
-          return ("AT Result  BTA_AG_CNUM_RES");
-        case BTA_AG_BTRH_RES:
-          return ("AT Result  BTA_AG_BTRH_RES");
-        case BTA_AG_CLCC_RES:
-          return ("AT Result  BTA_AG_CLCC_RES");
-        case BTA_AG_COPS_RES:
-          return ("AT Result  BTA_AG_COPS_RES");
-        case BTA_AG_IN_CALL_RES:
-          return ("AT Result  BTA_AG_IN_CALL_RES");
-        case BTA_AG_IN_CALL_CONN_RES:
-          return ("AT Result  BTA_AG_IN_CALL_CONN_RES");
-        case BTA_AG_CALL_WAIT_RES:
-          return ("AT Result  BTA_AG_CALL_WAIT_RES");
-        case BTA_AG_OUT_CALL_ORIG_RES:
-          return ("AT Result  BTA_AG_OUT_CALL_ORIG_RES");
-        case BTA_AG_OUT_CALL_ALERT_RES:
-          return ("AT Result  BTA_AG_OUT_CALL_ALERT_RES");
-        case BTA_AG_OUT_CALL_CONN_RES:
-          return ("AT Result  BTA_AG_OUT_CALL_CONN_RES");
-        case BTA_AG_CALL_CANCEL_RES:
-          return ("AT Result  BTA_AG_CALL_CANCEL_RES");
-        case BTA_AG_END_CALL_RES:
-          return ("AT Result  BTA_AG_END_CALL_RES");
-        case BTA_AG_UNAT_RES:
-          return ("AT Result  BTA_AG_UNAT_RES");
-        default:
-          return ("Unknown AG Result");
-      }
-    case BTA_AG_API_SETCODEC_EVT:
-      return "Set Codec Request";
-    case BTA_AG_RFC_OPEN_EVT:
-      return "RFC Opened";
-    case BTA_AG_RFC_CLOSE_EVT:
-      return "RFC Closed";
-    case BTA_AG_RFC_SRV_CLOSE_EVT:
-      return "RFC SRV Closed";
-    case BTA_AG_RFC_DATA_EVT:
-      return "RFC Data";
-    case BTA_AG_SCO_OPEN_EVT:
-      return "Audio Opened";
-    case BTA_AG_SCO_CLOSE_EVT:
-      return "Audio Closed";
-    case BTA_AG_DISC_ACP_RES_EVT:
-      return "Discovery ACP Result";
-    case BTA_AG_DISC_INT_RES_EVT:
-      return "Discovery INT Result";
-    case BTA_AG_DISC_OK_EVT:
-      return "Discovery OK";
-    case BTA_AG_DISC_FAIL_EVT:
-      return "Discovery Failed";
-    case BTA_AG_CI_RX_WRITE_EVT:
-      return "CI RX Write";
-    case BTA_AG_RING_TIMEOUT_EVT:
-      return "Ring Timeout";
-    case BTA_AG_SVC_TIMEOUT_EVT:
-      return "Service Timeout";
-    case BTA_AG_API_ENABLE_EVT:
-      return "Enable AG";
-    case BTA_AG_API_DISABLE_EVT:
-      return "Disable AG";
-    case BTA_AG_CI_SCO_DATA_EVT:
-      return "SCO data Callin";
-    case BTA_AG_CI_SLC_READY_EVT:
-      return "SLC Ready Callin";
-    default:
-      return "Unknown AG Event";
-  }
-}
-
-static char* bta_ag_state_str(uint8_t state) {
-  switch (state) {
-    case BTA_AG_INIT_ST:
-      return "Initial";
-    case BTA_AG_OPENING_ST:
-      return "Opening";
-    case BTA_AG_OPEN_ST:
-      return "Open";
-    case BTA_AG_CLOSING_ST:
-      return "Closing";
-    default:
-      return "Unknown AG State";
-  }
-}
-
-#endif
diff --git a/bta/ag/bta_ag_rfc.cc b/bta/ag/bta_ag_rfc.cc
index a3adf07..a8392c1 100644
--- a/bta/ag/bta_ag_rfc.cc
+++ b/bta/ag/bta_ag_rfc.cc
@@ -27,7 +27,6 @@
 
 #include "bt_common.h"
 #include "bta_ag_api.h"
-#include "bta_ag_co.h"
 #include "bta_ag_int.h"
 #include "bta_api.h"
 #include "bta_sys.h"
@@ -49,10 +48,6 @@
 void bta_ag_mgmt_cback_2(uint32_t code, uint16_t port_handle);
 void bta_ag_mgmt_cback_3(uint32_t code, uint16_t port_handle);
 
-int bta_ag_data_cback_1(uint16_t port_handle, void* p_data, uint16_t len);
-int bta_ag_data_cback_2(uint16_t port_handle, void* p_data, uint16_t len);
-int bta_ag_data_cback_3(uint16_t port_handle, void* p_data, uint16_t len);
-
 /* rfcomm callback function tables */
 typedef tPORT_CALLBACK* tBTA_AG_PORT_CBACK;
 const tBTA_AG_PORT_CBACK bta_ag_port_cback_tbl[] = {
@@ -61,10 +56,6 @@
 const tBTA_AG_PORT_CBACK bta_ag_mgmt_cback_tbl[] = {
     bta_ag_mgmt_cback_1, bta_ag_mgmt_cback_2, bta_ag_mgmt_cback_3};
 
-typedef tPORT_DATA_CALLBACK* tBTA_AG_DATA_CBACK;
-const tBTA_AG_DATA_CBACK bta_ag_data_cback_tbl[] = {
-    bta_ag_data_cback_1, bta_ag_data_cback_2, bta_ag_data_cback_3};
-
 /*******************************************************************************
  *
  * Function         bta_ag_port_cback
@@ -161,23 +152,6 @@
 
 /*******************************************************************************
  *
- * Function         bta_ag_data_cback
- *
- * Description      RFCOMM data callback
- *
- *
- * Returns          void
- *
- ******************************************************************************/
-static int bta_ag_data_cback(UNUSED_ATTR uint16_t port_handle, void* p_data,
-                             uint16_t len, uint16_t handle) {
-  /* call data call-out directly */
-  bta_ag_co_tx_write(handle, (uint8_t*)p_data, len);
-  return 0;
-}
-
-/*******************************************************************************
- *
  * Function         bta_ag_port_cback_1 to 3
  *                  bta_ag_mgmt_cback_1 to 3
  *
@@ -209,27 +183,6 @@
 
 /*******************************************************************************
  *
- * Function         bta_ag_data_cback_1 to 3
- *
- * Description      RFCOMM data callback functions.  This is an easy way to
- *                  distinguish scb from the callback.
- *
- *
- * Returns          void
- *
- ******************************************************************************/
-int bta_ag_data_cback_1(uint16_t port_handle, void* p_data, uint16_t len) {
-  return bta_ag_data_cback(port_handle, p_data, len, 1);
-}
-int bta_ag_data_cback_2(uint16_t port_handle, void* p_data, uint16_t len) {
-  return bta_ag_data_cback(port_handle, p_data, len, 2);
-}
-int bta_ag_data_cback_3(uint16_t port_handle, void* p_data, uint16_t len) {
-  return bta_ag_data_cback(port_handle, p_data, len, 3);
-}
-
-/*******************************************************************************
- *
  * Function         bta_ag_setup_port
  *
  * Description      Setup RFCOMM port for use by AG.
@@ -240,12 +193,6 @@
  ******************************************************************************/
 void bta_ag_setup_port(tBTA_AG_SCB* p_scb, uint16_t handle) {
   uint16_t i = bta_ag_scb_to_idx(p_scb) - 1;
-
-  /* set up data callback if using pass through mode */
-  if (bta_ag_cb.parse_mode == BTA_AG_PASS_THROUGH) {
-    PORT_SetDataCallback(handle, bta_ag_data_cback_tbl[i]);
-  }
-
   PORT_SetEventMask(handle, BTA_AG_PORT_EV_MASK);
   PORT_SetEventCallback(handle, bta_ag_port_cback_tbl[i]);
 }
diff --git a/bta/ag/bta_ag_sco.cc b/bta/ag/bta_ag_sco.cc
index 2292ef0..6503733 100644
--- a/bta/ag/bta_ag_sco.cc
+++ b/bta/ag/bta_ag_sco.cc
@@ -26,7 +26,6 @@
 
 #include "bt_common.h"
 #include "bta_ag_api.h"
-#include "bta_ag_co.h"
 #include "bta_ag_int.h"
 #include "bta_api.h"
 #include "btm_api.h"
@@ -35,20 +34,11 @@
 #include "osi/include/osi.h"
 #include "utl.h"
 
-#ifndef BTA_AG_SCO_DEBUG
-#define BTA_AG_SCO_DEBUG FALSE
-#endif
-
 /* Codec negotiation timeout */
 #ifndef BTA_AG_CODEC_NEGOTIATION_TIMEOUT_MS
 #define BTA_AG_CODEC_NEGOTIATION_TIMEOUT_MS (3 * 1000) /* 3 seconds */
 #endif
 
-#if (BTA_AG_SCO_DEBUG == TRUE)
-static char* bta_ag_sco_evt_str(uint8_t event);
-static char* bta_ag_sco_state_str(uint8_t state);
-#endif
-
 static bool sco_allowed = true;
 RawAddress active_device_addr;
 
@@ -63,9 +53,46 @@
   BTA_AG_SCO_SHUTDOWN_E,   /* shutdown request */
   BTA_AG_SCO_CONN_OPEN_E,  /* sco open */
   BTA_AG_SCO_CONN_CLOSE_E, /* sco closed */
-  BTA_AG_SCO_CI_DATA_E     /* SCO data ready */
 };
 
+#define CASE_RETURN_STR(const) \
+  case const:                  \
+    return #const;
+
+static const char* bta_ag_sco_evt_str(uint8_t event) {
+  switch (event) {
+    CASE_RETURN_STR(BTA_AG_SCO_LISTEN_E)
+    CASE_RETURN_STR(BTA_AG_SCO_OPEN_E)
+    CASE_RETURN_STR(BTA_AG_SCO_XFER_E)
+    CASE_RETURN_STR(BTA_AG_SCO_CN_DONE_E)
+    CASE_RETURN_STR(BTA_AG_SCO_REOPEN_E)
+    CASE_RETURN_STR(BTA_AG_SCO_CLOSE_E)
+    CASE_RETURN_STR(BTA_AG_SCO_SHUTDOWN_E)
+    CASE_RETURN_STR(BTA_AG_SCO_CONN_OPEN_E)
+    CASE_RETURN_STR(BTA_AG_SCO_CONN_CLOSE_E)
+    default:
+      return "Unknown SCO Event";
+  }
+}
+
+static const char* bta_ag_sco_state_str(uint8_t state) {
+  switch (state) {
+    CASE_RETURN_STR(BTA_AG_SCO_SHUTDOWN_ST)
+    CASE_RETURN_STR(BTA_AG_SCO_LISTEN_ST)
+    CASE_RETURN_STR(BTA_AG_SCO_CODEC_ST)
+    CASE_RETURN_STR(BTA_AG_SCO_OPENING_ST)
+    CASE_RETURN_STR(BTA_AG_SCO_OPEN_CL_ST)
+    CASE_RETURN_STR(BTA_AG_SCO_OPEN_XFER_ST)
+    CASE_RETURN_STR(BTA_AG_SCO_OPEN_ST)
+    CASE_RETURN_STR(BTA_AG_SCO_CLOSING_ST)
+    CASE_RETURN_STR(BTA_AG_SCO_CLOSE_OP_ST)
+    CASE_RETURN_STR(BTA_AG_SCO_CLOSE_XFER_ST)
+    CASE_RETURN_STR(BTA_AG_SCO_SHUTTING_ST)
+    default:
+      return "Unknown SCO State";
+  }
+}
+
 static void bta_ag_create_pending_sco(tBTA_AG_SCB* p_scb, bool is_local);
 
 /*******************************************************************************
@@ -537,22 +564,10 @@
  ******************************************************************************/
 static void bta_ag_sco_event(tBTA_AG_SCB* p_scb, uint8_t event) {
   tBTA_AG_SCO_CB* p_sco = &bta_ag_cb.sco;
-
-#if (BTA_AG_SCO_DEBUG == TRUE)
-  uint8_t in_state = p_sco->state;
-
-  if (event != BTA_AG_SCO_CI_DATA_E) {
-    APPL_TRACE_EVENT("%s: SCO Index 0x%04x, State %d (%s), Event %d (%s)",
-                     __func__, p_scb->sco_idx, p_sco->state,
-                     bta_ag_sco_state_str(p_sco->state), event,
-                     bta_ag_sco_evt_str(event));
-  }
-#else
-  if (event != BTA_AG_SCO_CI_DATA_E) {
-    APPL_TRACE_EVENT("%s: SCO Index 0x%04x, State %d, Event %d", __func__,
-                     p_scb->sco_idx, p_sco->state, event);
-  }
-#endif
+  uint8_t previous_state = p_sco->state;
+  APPL_TRACE_EVENT("%s: SCO index=0x%04x, state=[%s]0x%02x, event=[%s](%d)",
+                   __func__, p_scb->sco_idx, bta_ag_sco_state_str(p_sco->state),
+                   p_sco->state, bta_ag_sco_evt_str(event), event);
 
   switch (p_sco->state) {
     case BTA_AG_SCO_SHUTDOWN_ST:
@@ -1028,14 +1043,14 @@
     default:
       break;
   }
-#if (BTA_AG_SCO_DEBUG == TRUE)
-  if (p_sco->state != in_state) {
-    APPL_TRACE_EVENT("BTA AG SCO State Change: [%s] -> [%s] after Event [%s]",
-                     bta_ag_sco_state_str(in_state),
-                     bta_ag_sco_state_str(p_sco->state),
-                     bta_ag_sco_evt_str(event));
+  if (p_sco->state != previous_state) {
+    APPL_TRACE_EVENT(
+        "%s: SCO_state_change: [%s(0x%02x)]->[%s(0x%02x)] "
+        "after event [%s(0x%02x)]",
+        __func__, bta_ag_sco_state_str(previous_state), previous_state,
+        bta_ag_sco_state_str(p_sco->state), p_sco->state,
+        bta_ag_sco_evt_str(event), event);
   }
-#endif
 }
 
 /*******************************************************************************
@@ -1272,20 +1287,6 @@
   bta_ag_create_pending_sco(p_scb, bta_ag_cb.sco.is_local);
 }
 
-/*******************************************************************************
- *
- * Function         bta_ag_ci_sco_data
- *
- * Description      Process the SCO data ready callin event
- *
- *
- * Returns          void
- *
- ******************************************************************************/
-void bta_ag_ci_sco_data(UNUSED_ATTR tBTA_AG_SCB* p_scb,
-                        UNUSED_ATTR tBTA_AG_DATA* p_data) {
-}
-
 void bta_ag_set_sco_allowed(tBTA_AG_DATA* p_data) {
   sco_allowed = p_data->api_set_sco_allowed.value;
   APPL_TRACE_DEBUG(sco_allowed ? "sco now allowed" : "sco now not allowed");
@@ -1302,66 +1303,3 @@
   }
   active_device_addr = p_data->api_set_active_device.active_device_addr;
 }
-
-/*******************************************************************************
- *  Debugging functions
- ******************************************************************************/
-
-#if (BTA_AG_SCO_DEBUG == TRUE)
-static char* bta_ag_sco_evt_str(uint8_t event) {
-  switch (event) {
-    case BTA_AG_SCO_LISTEN_E:
-      return "Listen Request";
-    case BTA_AG_SCO_OPEN_E:
-      return "Open Request";
-    case BTA_AG_SCO_XFER_E:
-      return "Transfer Request";
-    case BTA_AG_SCO_CN_DONE_E:
-      return "Codec Negotiation Done";
-    case BTA_AG_SCO_REOPEN_E:
-      return "Reopen Request";
-    case BTA_AG_SCO_CLOSE_E:
-      return "Close Request";
-    case BTA_AG_SCO_SHUTDOWN_E:
-      return "Shutdown Request";
-    case BTA_AG_SCO_CONN_OPEN_E:
-      return "Opened";
-    case BTA_AG_SCO_CONN_CLOSE_E:
-      return "Closed";
-    case BTA_AG_SCO_CI_DATA_E:
-      return "Sco Data";
-    default:
-      return "Unknown SCO Event";
-  }
-}
-
-static char* bta_ag_sco_state_str(uint8_t state) {
-  switch (state) {
-    case BTA_AG_SCO_SHUTDOWN_ST:
-      return "Shutdown";
-    case BTA_AG_SCO_LISTEN_ST:
-      return "Listening";
-    case BTA_AG_SCO_CODEC_ST:
-      return "Codec Negotiation";
-    case BTA_AG_SCO_OPENING_ST:
-      return "Opening";
-    case BTA_AG_SCO_OPEN_CL_ST:
-      return "Open while closing";
-    case BTA_AG_SCO_OPEN_XFER_ST:
-      return "Opening while Transferring";
-    case BTA_AG_SCO_OPEN_ST:
-      return "Open";
-    case BTA_AG_SCO_CLOSING_ST:
-      return "Closing";
-    case BTA_AG_SCO_CLOSE_OP_ST:
-      return "Close while Opening";
-    case BTA_AG_SCO_CLOSE_XFER_ST:
-      return "Close while Transferring";
-    case BTA_AG_SCO_SHUTTING_ST:
-      return "Shutting Down";
-    default:
-      return "Unknown SCO State";
-  }
-}
-
-#endif /* (BTA_AG_SCO_DEBUG) */
diff --git a/bta/hf_client/bta_hf_client_main.cc b/bta/hf_client/bta_hf_client_main.cc
index 83f463d..4f717ae 100644
--- a/bta/hf_client/bta_hf_client_main.cc
+++ b/bta/hf_client/bta_hf_client_main.cc
@@ -381,7 +381,7 @@
     /* Cancel SDP if it had been started. */
     if (client_cb->p_disc_db) {
       (void)SDP_CancelServiceSearch(client_cb->p_disc_db);
-      bta_hf_client_free_db(NULL);
+      osi_free_and_reset((void**)&client_cb->p_disc_db);
     }
 
     /* reopen registered server */
diff --git a/bta/hf_client/bta_hf_client_rfc.cc b/bta/hf_client/bta_hf_client_rfc.cc
index b813ddb..e261c16 100644
--- a/bta/hf_client/bta_hf_client_rfc.cc
+++ b/bta/hf_client/bta_hf_client_rfc.cc
@@ -284,7 +284,7 @@
     /* Cancel SDP if it had been started. */
     if (client_cb->p_disc_db) {
       (void)SDP_CancelServiceSearch(client_cb->p_disc_db);
-      bta_hf_client_free_db(NULL);
+      osi_free_and_reset((void**)&client_cb->p_disc_db);
     }
   }
 }
diff --git a/bta/hf_client/bta_hf_client_sdp.cc b/bta/hf_client/bta_hf_client_sdp.cc
index 418016f..d68adcc 100644
--- a/bta/hf_client/bta_hf_client_sdp.cc
+++ b/bta/hf_client/bta_hf_client_sdp.cc
@@ -25,6 +25,7 @@
  ******************************************************************************/
 
 #include <string.h>
+#include <base/logging.h>
 
 #include "bt_utils.h"
 #include "bta_api.h"
@@ -331,7 +332,7 @@
 
   if (!db_inited) {
     /*free discover db */
-    bta_hf_client_free_db(NULL);
+    osi_free_and_reset((void**)&client_cb->p_disc_db);
     /* sent failed event */
     tBTA_HF_CLIENT_DATA msg;
     msg.hdr.layer_specific = client_cb->handle;
@@ -350,6 +351,7 @@
  *
  ******************************************************************************/
 void bta_hf_client_free_db(tBTA_HF_CLIENT_DATA* p_data) {
+  CHECK(p_data != NULL);
   tBTA_HF_CLIENT_CB* client_cb =
       bta_hf_client_find_cb_by_handle(p_data->hdr.layer_specific);
   if (client_cb == NULL) {
diff --git a/bta/include/bta_ag_api.h b/bta/include/bta_ag_api.h
index 754efea..3f09c1f 100644
--- a/bta/include/bta_ag_api.h
+++ b/bta/include/bta_ag_api.h
@@ -73,14 +73,6 @@
 
 typedef uint32_t tBTA_AG_FEAT;
 
-/* AG parse mode */
-#define BTA_AG_PARSE 0 /* Perform AT command parsing in AG */
-
-/* Pass data directly to phone's AT command interpreter */
-#define BTA_AG_PASS_THROUGH 1
-
-typedef uint8_t tBTA_AG_PARSE_MODE;
-
 /* AG open status */
 #define BTA_AG_SUCCESS 0        /* Connection successfully opened */
 #define BTA_AG_FAIL_SDP 1       /* Open failed due to SDP */
@@ -460,7 +452,7 @@
  * Returns          BTA_SUCCESS if OK, BTA_FAILURE otherwise.
  *
  ******************************************************************************/
-tBTA_STATUS BTA_AgEnable(tBTA_AG_PARSE_MODE parse_mode, tBTA_AG_CBACK* p_cback);
+tBTA_STATUS BTA_AgEnable(tBTA_AG_CBACK* p_cback);
 
 /*******************************************************************************
  *
diff --git a/bta/include/bta_ag_co.h b/bta/include/bta_ag_co.h
deleted file mode 100644
index 5817923..0000000
--- a/bta/include/bta_ag_co.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/******************************************************************************
- *
- *  Copyright 2003-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  This is the interface file for audio gateway call-out functions.
- *
- ******************************************************************************/
-#ifndef BTA_AG_CO_H
-#define BTA_AG_CO_H
-
-#include "bta_ag_api.h"
-
-/*******************************************************************************
- *
- * Function         bta_ag_co_init
- *
- * Description      This callout function is executed by AG when it is
- *                  started by calling BTA_AgEnable().  This function can be
- *                  used by the phone to initialize audio paths or for other
- *                  initialization purposes.
- *
- *
- * Returns          Void.
- *
- ******************************************************************************/
-extern void bta_ag_co_init(void);
-
-/*******************************************************************************
- *
- * Function         bta_ag_co_data_open
- *
- * Description      This function is executed by AG when a service level
- *                  connection
- *                  is opened.  The phone can use this function to set
- *                  up data paths or perform any required initialization or
- *                  set up particular to the connected service.
- *
- *
- * Returns          void
- *
- ******************************************************************************/
-extern void bta_ag_co_data_open(uint16_t handle, tBTA_SERVICE_ID service);
-
-/*******************************************************************************
- *
- * Function         bta_ag_co_data_close
- *
- * Description      This function is called by AG when a service level
- *                  connection is closed
- *
- *
- * Returns          void
- *
- ******************************************************************************/
-extern void bta_ag_co_data_close(uint16_t handle);
-
-/*******************************************************************************
- *
- * Function         bta_ag_co_tx_write
- *
- * Description      This function is called by the AG to send data to the
- *                  phone when the AG is configured for AT command pass-through.
- *                  The implementation of this function must copy the data to
- *                  the phone's memory.
- *
- * Returns          void
- *
- ******************************************************************************/
-extern void bta_ag_co_tx_write(uint16_t handle, uint8_t* p_data, uint16_t len);
-
-#endif /* BTA_AG_CO_H */
diff --git a/btif/Android.bp b/btif/Android.bp
index e37f9fa..b6ab774 100644
--- a/btif/Android.bp
+++ b/btif/Android.bp
@@ -78,7 +78,6 @@
         "src/btif_util.cc",
         "src/stack_manager.cc",
         // Callouts
-        "co/bta_ag_co.cc",
         "co/bta_dm_co.cc",
         "co/bta_av_co.cc",
         "co/bta_hh_co.cc",
diff --git a/btif/co/bta_ag_co.cc b/btif/co/bta_ag_co.cc
deleted file mode 100644
index 46f7b59..0000000
--- a/btif/co/bta_ag_co.cc
+++ /dev/null
@@ -1,87 +0,0 @@
-/******************************************************************************
- *
- *  Copyright 2009-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-#define LOG_TAG "bt_btif_bta_ag"
-
-#include "bta/include/bta_ag_co.h"
-#include "bta/ag/bta_ag_int.h"
-#include "bta/include/bta_ag_api.h"
-#include "osi/include/osi.h"
-
-/*******************************************************************************
- *
- * Function         bta_ag_co_init
- *
- * Description      This callout function is executed by AG when it is
- *                  started by calling BTA_AgEnable().  This function can be
- *                  used by the phone to initialize audio paths or for other
- *                  initialization purposes.
- *
- *
- * Returns          Void.
- *
- ******************************************************************************/
-void bta_ag_co_init(void) { BTM_WriteVoiceSettings(AG_VOICE_SETTINGS); }
-
-/*******************************************************************************
- *
- * Function         bta_ag_co_data_open
- *
- * Description      This function is executed by AG when a service level
- *                  connection is opened.  The phone can use this function to
- *                  set up data paths or perform any required initialization or
- *                  set up particular to the connected service.
- *
- * Returns          void
- *
- ******************************************************************************/
-void bta_ag_co_data_open(uint16_t handle, tBTA_SERVICE_ID service) {
-  BTIF_TRACE_DEBUG("bta_ag_co_data_open handle:%d service:%d", handle, service);
-}
-
-/*******************************************************************************
- *
- * Function         bta_ag_co_data_close
- *
- * Description      This function is called by AG when a service level
- *                  connection is closed
- *
- *
- * Returns          void
- *
- ******************************************************************************/
-void bta_ag_co_data_close(uint16_t handle) {
-  BTIF_TRACE_DEBUG("bta_ag_co_data_close handle:%d", handle);
-}
-
-/*******************************************************************************
- **
- ** Function         bta_ag_co_tx_write
- **
- ** Description      This function is called by the AG to send data to the
- **                  phone when the AG is configured for AT command
- **                  pass-through. The implementation of this function must copy
- **                  the data to the phones memory.
- **
- ** Returns          void
- **
- ******************************************************************************/
-void bta_ag_co_tx_write(uint16_t handle, UNUSED_ATTR uint8_t* p_data,
-                        uint16_t len) {
-  BTIF_TRACE_DEBUG("bta_ag_co_tx_write: handle: %d, len: %d", handle, len);
-}
diff --git a/btif/src/btif_hf.cc b/btif/src/btif_hf.cc
index 4664c56..b97793d 100644
--- a/btif/src/btif_hf.cc
+++ b/btif/src/btif_hf.cc
@@ -626,17 +626,6 @@
   ASSERTC(status == BT_STATUS_SUCCESS, "context transfer failed", status);
 }
 
-static bool inband_ringing_property_disabled() {
-  char disable_inband_ringing_flag[PROPERTY_VALUE_MAX] = {0};
-  osi_property_get("persist.bluetooth.disableinbandringing",
-                   disable_inband_ringing_flag, "false");
-  if (strncmp(disable_inband_ringing_flag, "true", 4) == 0) {
-    BTIF_TRACE_DEBUG("%s: In-band ringing disabled by property", __func__);
-    return true;
-  }
-  return false;
-}
-
 /*******************************************************************************
  *
  * Function         connect
@@ -699,7 +688,7 @@
     return instance;
   }
   bt_status_t Init(Callbacks* callbacks, int max_hf_clients,
-                   bool inband_ringing_supported) override;
+                   bool inband_ringing_enabled) override;
   bt_status_t Connect(RawAddress* bd_addr) override;
   bt_status_t Disconnect(RawAddress* bd_addr) override;
   bt_status_t ConnectAudio(RawAddress* bd_addr) override;
@@ -737,19 +726,16 @@
 };
 
 bt_status_t HeadsetInterface::Init(Callbacks* callbacks, int max_hf_clients,
-                                   bool inband_ringing_supported) {
-  bool inband_ringing_property_disable = inband_ringing_property_disabled();
-  if (inband_ringing_supported && !inband_ringing_property_disable) {
+                                   bool inband_ringing_enabled) {
+  if (inband_ringing_enabled) {
     btif_hf_features |= BTA_AG_FEAT_INBAND;
   } else {
     btif_hf_features &= ~BTA_AG_FEAT_INBAND;
   }
   btif_max_hf_clients = max_hf_clients;
   BTIF_TRACE_DEBUG(
-      "%s: btif_hf_features=%zu, max_hf_clients=%d, "
-      "inband_ringing=[supported=%d, enabled=%d]",
-      __func__, btif_hf_features, btif_max_hf_clients, inband_ringing_supported,
-      !inband_ringing_property_disable);
+      "%s: btif_hf_features=%zu, max_hf_clients=%d, inband_ringing_enabled=%d",
+      __func__, btif_hf_features, btif_max_hf_clients, inband_ringing_enabled);
   bt_hf_callbacks = callbacks;
   for (btif_hf_cb_t& hf_cb : btif_hf_cb) {
     hf_cb = {};
@@ -1337,7 +1323,7 @@
   const char* p_service_names[] = BTIF_HF_SERVICE_NAMES;
   if (b_enable) {
     /* Enable and register with BTA-AG */
-    BTA_AgEnable(BTA_AG_PARSE, bte_hf_evt);
+    BTA_AgEnable(bte_hf_evt);
     for (int i = 0; i < btif_max_hf_clients; i++) {
       BTA_AgRegister(BTIF_HF_SERVICES, BTIF_HF_SECURITY, btif_hf_features,
                      p_service_names, bthf_hf_id[i]);
diff --git a/include/hardware/bluetooth_headset_interface.h b/include/hardware/bluetooth_headset_interface.h
index 51e7b03..b4946c4 100644
--- a/include/hardware/bluetooth_headset_interface.h
+++ b/include/hardware/bluetooth_headset_interface.h
@@ -34,12 +34,11 @@
    *
    * @param callbacks callbacks for the user of the native stack
    * @param max_hf_clients maximum number of headset clients
-   * @param inband_ringing_supported whether inband ringtone is supported by
-   * the platform hardware
+   * @param inband_ringing_enabled whether inband ringtone is enabled
    * @return BT_STATUS_SUCCESS on success
    */
   virtual bt_status_t Init(Callbacks* callbacks, int max_hf_clients,
-                           bool inband_ringing_supported) = 0;
+                           bool inband_ringing_enabled) = 0;
 
   /**
    * Connect to headset
diff --git a/osi/Android.bp b/osi/Android.bp
index 8e5dbde..9b738f0 100644
--- a/osi/Android.bp
+++ b/osi/Android.bp
@@ -151,4 +151,7 @@
             enabled: false,
         }
     },
+    sanitize: {
+        cfi: false,
+    },
 }
diff --git a/service/Android.bp b/service/Android.bp
index 199a51b..37966af 100644
--- a/service/Android.bp
+++ b/service/Android.bp
@@ -144,6 +144,9 @@
             ],
         },
     },
+    sanitize: {
+        cfi: false,
+    },
 }
 
 // Native system service CLI for target
diff --git a/stack/Android.bp b/stack/Android.bp
index bdd1cfd..1bedd40 100644
--- a/stack/Android.bp
+++ b/stack/Android.bp
@@ -287,6 +287,9 @@
         "liblog",
         "libgmock",
     ],
+    sanitize: {
+        cfi: false,
+    },
 }
 
 // Bluetooth stack advertise data parsing unit tests for target
@@ -337,4 +340,7 @@
         "libosi",
         "libbt-protos",
     ],
+    sanitize: {
+        cfi: false,
+    },
 }
diff --git a/test/run_unit_tests.sh b/test/run_unit_tests.sh
index 8fe47f8..4c390bf 100755
--- a/test/run_unit_tests.sh
+++ b/test/run_unit_tests.sh
@@ -102,11 +102,18 @@
   adb+=( "-s" "${device}" )
 fi
 
+source ${ANDROID_BUILD_TOP}/build/envsetup.sh
+target_arch=$(gettargetarch)
+
 failed_tests=()
 for spec in "${tests[@]}"
 do
   name="${spec%%.*}"
-  binary="/data/nativetest/${name}/${name}"
+  if [[ $target_arch == *"64"* ]]; then
+    binary="/data/nativetest64/${name}/${name}"
+  else
+    binary="/data/nativetest/${name}/${name}"
+  fi
 
   push_command=( "${adb[@]}" push {"${ANDROID_PRODUCT_OUT}",}"${binary}" )
   test_command=( "${adb[@]}" shell "${binary}" )