Bluetooth-SWB: Enable/Disable SWB.

Enable/Disable SWB based on network type
or property.

CRs-fixed: 2443122
Change-Id: I38445a4c3357ef403ae9000b4419e7a8a93069da
diff --git a/system_bt_ext/bta/include/bta_ag_swb.h b/system_bt_ext/bta/include/bta_ag_swb.h
index 95b77ca..a65f3c3 100644
--- a/system_bt_ext/bta/include/bta_ag_swb.h
+++ b/system_bt_ext/bta/include/bta_ag_swb.h
@@ -31,6 +31,7 @@
 #define _BTA_AG_SWB_H_
 
 #include "bta_ag_int.h"
+#include "device/include/esco_parameters.h"
 
 #define BTA_AG_SCO_SWB_SETTINGS_Q0_MASK 4
 #define BTA_AG_SCO_SWB_SETTINGS_Q1_MASK 8
@@ -44,9 +45,45 @@
 #define  BTA_AG_LOCAL_RES_QAC 0x108
 #define  BTA_AG_LOCAL_RES_QCS 0x109
 
+#define LEGACY_CODECS 2
+#define SWB_ESCO_NUM_CODECS 1
+
 void bta_ag_swb_handle_vs_at_events(tBTA_AG_SCB* p_scb, uint16_t cmd, int16_t int_arg, tBTA_AG_VAL val);
 void bta_ag_send_qac(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data);
 void bta_ag_send_qcs(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data);
 tBTA_AG_PEER_CODEC bta_ag_parse_qac(tBTA_AG_SCB* p_scb, char* p_s);
 
+const enh_esco_params_t default_esco_swb_parameters[SWB_ESCO_NUM_CODECS] = {
+     {.transmit_bandwidth = TXRX_64KBITS_RATE,
+     .receive_bandwidth = TXRX_64KBITS_RATE,
+     .transmit_coding_format = {.coding_format = ESCO_CODING_FORMAT_VS,
+                                .company_id = 0x000A,
+                                .vendor_specific_codec_id = 0x0000},
+     .receive_coding_format = {.coding_format = ESCO_CODING_FORMAT_VS,
+                               .company_id = 0x000A,
+                               .vendor_specific_codec_id = 0x0000},
+     .transmit_codec_frame_size = 60,
+     .receive_codec_frame_size = 60,
+     .input_bandwidth = INPUT_OUTPUT_128K_RATE,
+     .output_bandwidth = INPUT_OUTPUT_128K_RATE,
+     .input_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR,
+                             .company_id = 0x0000,
+                             .vendor_specific_codec_id = 0x0000},
+     .output_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR,
+                              .company_id = 0x0000,
+                              .vendor_specific_codec_id = 0x0000},
+     .input_coded_data_size = 16,
+     .output_coded_data_size = 16,
+     .input_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP,
+     .output_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP,
+     .input_pcm_payload_msb_position = 0,
+     .output_pcm_payload_msb_position = 0,
+     .input_data_path = ESCO_DATA_PATH_PCM,
+     .output_data_path = ESCO_DATA_PATH_PCM,
+     .input_transport_unit_size = 0x00,
+     .output_transport_unit_size = 0x00,
+     .max_latency_ms = 14,
+     .packet_types = 0x0380,
+     .retransmission_effort = ESCO_RETRANSMISSION_QUALITY}};
+
 #endif//_BTA_AG_SWB_H_
diff --git a/system_bt_ext/bta/swb/bta_ag_swb.cc b/system_bt_ext/bta/swb/bta_ag_swb.cc
index ead0572..496f110 100644
--- a/system_bt_ext/bta/swb/bta_ag_swb.cc
+++ b/system_bt_ext/bta/swb/bta_ag_swb.cc
@@ -33,14 +33,22 @@
 #include "bta_ag_int.h"
 #include "utl.h"
 #include "device/include/interop.h"
+#include <hardware/vendor_hf.h>
 
 #if (SWB_ENABLED == TRUE)
 
+#define SWB_CODECS_SUPPORTED "0,4,6,7"
+#define SWB_CODECS_UNSUPPORTD "0xFFFF"
+
 void bta_ag_swb_handle_vs_at_events(tBTA_AG_SCB* p_scb, uint16_t cmd, int16_t int_arg, tBTA_AG_VAL val)
 {
   APPL_TRACE_DEBUG("%s: p_scb : %x cmd : %d", __func__, p_scb, cmd);
   switch(cmd) {
     case BTA_AG_AT_QAC_EVT:
+      if (!get_swb_codec_status()) {
+        bta_ag_send_qac(p_scb, NULL);
+        break;
+      }
       p_scb->codec_updated = true;
       if (p_scb->peer_codecs &  BTA_AG_SCO_SWB_SETTINGS_Q0_MASK) {
         p_scb->sco_codec = BTA_AG_SCO_SWB_SETTINGS_Q0;
@@ -132,7 +140,12 @@
 void bta_ag_send_qac(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data) {
   /* send +BCS */
   APPL_TRACE_DEBUG("send +QAC codecs suuported");
-  bta_ag_send_result(p_scb, BTA_AG_LOCAL_RES_QAC, "0,4,6,7", 0);
+  if (!get_swb_codec_status()) {
+    bta_ag_send_result(p_scb, BTA_AG_LOCAL_RES_QAC, SWB_CODECS_UNSUPPORTD, 0);
+    return;
+  } else{
+    bta_ag_send_result(p_scb, BTA_AG_LOCAL_RES_QAC, SWB_CODECS_SUPPORTED, 0);
+  }
   if (p_scb->sco_codec == BTA_AG_SCO_SWB_SETTINGS_Q0) {
       p_scb->is_swb_codec = true;
   }
diff --git a/vhal/include/hardware/vendor_hf.h b/vhal/include/hardware/vendor_hf.h
index 6399de6..6b07c5c 100644
--- a/vhal/include/hardware/vendor_hf.h
+++ b/vhal/include/hardware/vendor_hf.h
@@ -36,6 +36,8 @@
 
 #define BT_PROFILE_VENDOR_HF_ID "vendorhfservice"
 
+bool get_swb_codec_status();
+
 void btif_handle_vendor_hf_events(uint16_t event, uint16_t swb_config, RawAddress *bd_addr);
 
 /* SWB callback events */