HFP 1.7 profile update (1/4)

-> Added AG support for HFP 1.7 version upgrade which
   adds new type of indicator called HF(headset) indicators.
-> Added support for two new AT commands AT + BIND and AT + BIEV
   which have been appended to Hands-Free SLC sequence.
-> Added support to propagate the above commands and their data to
   the upper layers.

Bug: 19983867
Change-Id: I93d5b2af949f9fb99507a954e623cd0927ddc976
(cherry picked from commit e5bed64926d6ae45501617052f90932287da135b)
diff --git a/btif/src/btif_hf.cc b/btif/src/btif_hf.cc
index b38ba82..8c925b8 100644
--- a/btif/src/btif_hf.cc
+++ b/btif/src/btif_hf.cc
@@ -73,6 +73,8 @@
                              BTA_AG_FEAT_BTRH   | \
                              BTA_AG_FEAT_VREC   | \
                              BTA_AG_FEAT_CODEC |\
+                             BTA_AG_FEAT_HF_IND | \
+                             BTA_AG_FEAT_ESCO   | \
                              BTA_AG_FEAT_UNAT)
 #endif
 #else
@@ -84,6 +86,8 @@
                              BTA_AG_FEAT_EXTERR | \
                              BTA_AG_FEAT_BTRH   | \
                              BTA_AG_FEAT_VREC   | \
+                             BTA_AG_FEAT_HF_IND | \
+                             BTA_AG_FEAT_ESCO   | \
                              BTA_AG_FEAT_UNAT)
 #endif
 #endif
@@ -621,6 +625,21 @@
                         BTHF_WBS_YES : BTHF_WBS_NO, &btif_hf_cb[idx].connected_bda);
             break;
 
+        case BTA_AG_AT_BIND_EVT:
+            if (p_data->val.hdr.status == BTA_AG_SUCCESS)
+            {
+                HAL_CBACK(bt_hf_callbacks, bind_cb,p_data->val.str,
+                                                &btif_hf_cb[idx].connected_bda);
+            }
+            break;
+
+        case BTA_AG_AT_BIEV_EVT:
+            if (p_data->val.hdr.status == BTA_AG_SUCCESS)
+            {
+                HAL_CBACK(bt_hf_callbacks, biev_cb, (bthf_hf_ind_type_t)p_data->val.lidx, (int)p_data->val.num,
+                              &btif_hf_cb[idx].connected_bda);
+            }
+            break;
         default:
             BTIF_TRACE_WARNING("%s: Unhandled event: %d", __func__, event);
             break;
@@ -1107,6 +1126,33 @@
 
 /*******************************************************************************
 **
+** Function         bind_response
+**
+** Description      Send +BIND response
+**
+** Returns          bt_status_t
+**
+*******************************************************************************/
+static bt_status_t bind_response(bthf_hf_ind_type_t ind_id, bthf_hf_ind_status_t ind_status,
+                                 bt_bdaddr_t * bd_addr)
+{
+    CHECK_BTHF_INIT();
+
+    int index = btif_hf_idx_by_bdaddr(bd_addr);
+    if (!is_connected(bd_addr) || index == BTIF_HF_INVALID_IDX)
+        return BT_STATUS_FAIL;
+
+    tBTA_AG_RES_DATA ag_res;
+    memset(&ag_res, 0, sizeof(ag_res));
+    ag_res.ind.id = ind_id;
+    ag_res.ind.on_demand = (ind_status == BTHF_HF_IND_ENABLED);
+
+    BTA_AgResult(btif_hf_cb[index].handle, BTA_AG_BIND_RES, &ag_res);
+    return BT_STATUS_SUCCESS;
+}
+
+/*******************************************************************************
+**
 ** Function         formatted_at_response
 **
 ** Description      Pre-formatted AT response, typically in response to unknown AT cmd
@@ -1581,6 +1627,7 @@
     phone_state_change,
     cleanup,
     configure_wbs,
+    bind_response,
 };
 
 /*******************************************************************************