diff --git a/components/bt/host/bluedroid/api/include/api/esp_hf_ag_api.h b/components/bt/host/bluedroid/api/include/api/esp_hf_ag_api.h index 3b75669ba..bdfa3db00 100644 --- a/components/bt/host/bluedroid/api/include/api/esp_hf_ag_api.h +++ b/components/bt/host/bluedroid/api/include/api/esp_hf_ag_api.h @@ -64,8 +64,8 @@ typedef enum ESP_HF_ATA_RESPONSE_EVT, /*!< Answer an Incoming Call */ ESP_HF_CHUP_RESPONSE_EVT, /*!< Reject an Incoming Call */ ESP_HF_DIAL_EVT, /*!< Origin an outgoing call with specific number or the dial the last number */ - ESP_HF_BAC_RESPONSE_EVT, /*!< Codec Negotiation */ - ESP_HF_BCS_RESPONSE_EVT, /*!< Codec Negotiation */ + ESP_HF_WBS_RESPONSE_EVT, /*!< Codec Status */ + ESP_HF_BCS_RESPONSE_EVT, /*!< Final Codec Choice */ } esp_hf_cb_event_t; /// HFP AG callback parameters @@ -147,12 +147,19 @@ typedef union esp_hf_nrec_t state; /*!< NREC enabled or disabled */ } nrec; /*!< AG callback param of ESP_HF_NREC_RESPONSE_EVT */ + /** + * @brief ESP_HF_WBS_RESPONSE_EVT + */ + struct hf_wbs_rep_param { + esp_hf_wbs_config_t codec; /*!< codec mode CVSD or mSBC */ + } wbs_rep; /*!< AG callback param of ESP_HF_WBS_RESPONSE_EVT */ + /** * @brief ESP_HF_BCS_RESPONSE_EVT */ - struct hf_codec_param { + struct hf_bcs_rep_param { esp_hf_wbs_config_t mode; /*!< codec mode CVSD or mSBC */ - } codec; /*!< AG callback param of ESP_HF_BAC_RESPONSE_EVT */ + } bcs_rep; /*!< AG callback param of ESP_HF_BCS_RESPONSE_EVT */ } esp_hf_cb_param_t; /*!< HFP AG callback param compound*/ diff --git a/components/bt/host/bluedroid/btc/profile/std/hf_ag/btc_hf_ag.c b/components/bt/host/bluedroid/btc/profile/std/hf_ag/btc_hf_ag.c index 0630f66ef..bd8d2e405 100644 --- a/components/bt/host/bluedroid/btc/profile/std/hf_ag/btc_hf_ag.c +++ b/components/bt/host/bluedroid/btc/profile/std/hf_ag/btc_hf_ag.c @@ -80,7 +80,7 @@ static hf_local_param_t hf_local_param[BTC_HF_NUM_CB]; /* wide band synchronous */ #ifndef BTC_HF_WBS_PREFERRED -#define BTC_HF_WBS_PREFERRED FALSE +#define BTC_HF_WBS_PREFERRED TRUE #endif BOOLEAN btc_conf_hf_force_wbs = BTC_HF_WBS_PREFERRED; @@ -1426,51 +1426,41 @@ void btc_hf_cb_handler(btc_msg_t *msg) case BTA_AG_AT_BAC_EVT: { BTC_TRACE_DEBUG("AG Bitmap of peer-codecs %d", p_data->val.num); - memset(¶m, 0, sizeof(esp_hf_cb_param_t)); - param.codec.mode = p_data->val.num; - btc_hf_cb_to_app(ESP_HF_BAC_RESPONSE_EVT, ¶m); - break; - } - - case BTA_AG_AT_BCS_EVT: - { - BTC_TRACE_DEBUG("AG Bitmap of peer-codecs %d", p_data->val.num); - memset(¶m, 0, sizeof(esp_hf_cb_param_t)); - param.codec.mode = p_data->val.num; - btc_hf_cb_to_app(ESP_HF_BCS_RESPONSE_EVT, ¶m); - break; - } -#if (BTM_WBS_INCLUDED == TRUE ) - case BTA_AG_WBS_EVT: - { - BTC_TRACE_DEBUG("BTA_AG_WBS_EVT Set codec status %d codec %d 1=CVSD 2=MSBC", p_data->val.hdr.status, p_data->val.num); - memset(¶m, 0, sizeof(esp_hf_cb_param_t)); - param.codec.mode = p_data->val.num; - if(p_data->val.num == BTA_AG_CODEC_CVSD) { - btc_hf_cb_to_app(ESP_HF_BCS_RESPONSE_EVT, ¶m); - } else if(p_data->val.num == BTA_AG_CODEC_MSBC) { - btc_hf_cb_to_app(ESP_HF_BCS_RESPONSE_EVT, ¶m); - } else { - btc_hf_cb_to_app(ESP_HF_BCS_RESPONSE_EVT, ¶m); - } - break; - } -#endif - #if (BTM_WBS_INCLUDED == TRUE) /* If the peer supports mSBC and the BTC prefferred codec is also mSBC, then ** we should set the BTA AG Codec to mSBC. This would trigger a +BCS to mSBC at the time ** of SCO connection establishment */ if ((btc_conf_hf_force_wbs == TRUE) && (p_data->val.num & BTA_AG_CODEC_MSBC)) { - BTC_TRACE_EVENT("%s btc_hf override-Preferred Codec to MSBC", __FUNCTION__); + BTC_TRACE_DEBUG("%s btc_hf override-Preferred Codec to MSBC", __FUNCTION__); BTA_AgSetCodec(hf_local_param[idx].btc_hf_cb.handle,BTA_AG_CODEC_MSBC); } else { - BTC_TRACE_EVENT("%s btif_hf override-Preferred Codec to CVSD", __FUNCTION__); + BTC_TRACE_DEBUG("%s btc_hf override-Preferred Codec to CVSD", __FUNCTION__); BTA_AgSetCodec(hf_local_param[idx].btc_hf_cb.handle,BTA_AG_CODEC_CVSD); } #endif break; + } + +#if (BTM_WBS_INCLUDED == TRUE) + case BTA_AG_WBS_EVT: + { + BTC_TRACE_DEBUG("Set codec status %d codec %d 1=CVSD 2=MSBC", p_data->val.hdr.status, p_data->val.value); + memset(¶m, 0, sizeof(esp_hf_cb_param_t)); + param.wbs_rep.codec = p_data->val.value; + btc_hf_cb_to_app(ESP_HF_WBS_RESPONSE_EVT, ¶m); + break; + } +#endif + case BTA_AG_AT_BCS_EVT: + { + BTC_TRACE_DEBUG("AG final seleded codec is %d 1=CVSD 2=MSBC", p_data->val.num); + memset(¶m, 0, sizeof(esp_hf_cb_param_t)); + param.bcs_rep.mode = p_data->val.num; + /* No ESP_HF_WBS_NONE case, becuase HFP 1.6 supported device can send BCS */ + btc_hf_cb_to_app(ESP_HF_BCS_RESPONSE_EVT, ¶m); + break; + } default: BTC_TRACE_WARNING("%s: Unhandled event: %d", __FUNCTION__, event); break; diff --git a/examples/bluetooth/bluedroid/classic_bt/hfp_ag/README.md b/examples/bluetooth/bluedroid/classic_bt/hfp_ag/README.md index e2828656a..ae4fdb6f4 100644 --- a/examples/bluetooth/bluedroid/classic_bt/hfp_ag/README.md +++ b/examples/bluetooth/bluedroid/classic_bt/hfp_ag/README.md @@ -6,7 +6,7 @@ This example is to show how to use the APIs of Hands-Free (HF) Audio Gateway (AG ### Hardware Required -This example is designed to run on commonly available ESP32 development board, e.g. ESP32-DevKitC. To operate it should be connected to an Hands-Free Unit running on a Headphone/Headset or on another ESP32 development board loaded with Hands Free Unit (hfp_hf) example from ESP-IDF. +This example is designed to run on commonly available ESP32 development board, e.g. ESP32-DevKitC. To operate this example, it should be connected to an Hands-Free Unit running on a Headphone/Headset or on another ESP32 development board loaded with Hands Free Unit (hfp_hf) example from ESP-IDF. ### Configure the project @@ -177,8 +177,8 @@ I (159311) BT_APP_HF: --ESP AG Audio Connection Disconnected. You can type `hf d ;` to dial `` from AG and log prints such as: ``` -E (207351) CNSL: Command [hf d 18629485549;] -Dial number 18629485549 +E (207351) CNSL: Command [hf d 123456;] +Dial number 123456 I (207361) BT_APP_HF: APP HFP event: AUDIO_STATE_EVT I (207361) BT_APP_HF: --Audio State connecting W (207361) BT_APPL: BTA_AG_SCO_OPENING_ST: Ignoring event 1 diff --git a/examples/bluetooth/bluedroid/classic_bt/hfp_ag/main/app_hf_msg_set.c b/examples/bluetooth/bluedroid/classic_bt/hfp_ag/main/app_hf_msg_set.c index 97566f10e..b45c4960b 100644 --- a/examples/bluetooth/bluedroid/classic_bt/hfp_ag/main/app_hf_msg_set.c +++ b/examples/bluetooth/bluedroid/classic_bt/hfp_ag/main/app_hf_msg_set.c @@ -194,7 +194,7 @@ HF_CMD_HANDLER(ir_off) HF_CMD_HANDLER(ac) { printf("Answer Call from AG.\n"); - char *number = {"186xxxx5549"}; + char *number = {"123456"}; esp_bt_hf_answer_call(hf_peer_addr,1,0,1,1,number,0); } @@ -202,7 +202,7 @@ HF_CMD_HANDLER(ac) HF_CMD_HANDLER(rc) { printf("Reject Call from AG.\n"); - char *number = {"186xxxx5549"}; + char *number = {"123456"}; esp_bt_hf_reject_call(hf_peer_addr,0,0,0,0,number,0); } @@ -210,7 +210,7 @@ HF_CMD_HANDLER(rc) HF_CMD_HANDLER(end) { printf("End Call from AG.\n"); - char *number = {"186xxxx5549"}; + char *number = {"123456"}; esp_bt_hf_end_call(hf_peer_addr,0,0,0,0,number,0); } diff --git a/examples/bluetooth/bluedroid/classic_bt/hfp_ag/main/bt_app_hf.c b/examples/bluetooth/bluedroid/classic_bt/hfp_ag/main/bt_app_hf.c index 6c9e25d83..4635d9063 100644 --- a/examples/bluetooth/bluedroid/classic_bt/hfp_ag/main/bt_app_hf.c +++ b/examples/bluetooth/bluedroid/classic_bt/hfp_ag/main/bt_app_hf.c @@ -40,7 +40,7 @@ const char *c_hf_evt_str[] = { "ANSWER_INCOMING_EVT", /*!< ANSWER INCOMING EVT */ "REJECT_INCOMING_EVT", /*!< AREJECT INCOMING EVT */ "DIAL_EVT", /*!< DIAL INCOMING EVT */ - "BAC_EVT", /*!< CODEC NEGO EVT */ + "WBS_EVT", /*!< CURRENT CODEC EVT */ "BCS_EVT", /*!< CODEC NEGO EVT */ }; @@ -231,7 +231,7 @@ void bt_app_hf_cb(esp_hf_cb_event_t event, esp_hf_cb_param_t *param) esp_hf_current_call_mode_t mode = 0; esp_hf_current_call_mpty_type_t mpty = 0; //option - char *number = {"186xxxx5549"}; + char *number = {"123456"}; esp_hf_call_addr_type_t type = ESP_HF_CALL_ADDR_TYPE_UNKNOWN; ESP_LOGI(BT_HF_TAG, "--Calling Line Identification."); @@ -241,7 +241,7 @@ void bt_app_hf_cb(esp_hf_cb_event_t event, esp_hf_cb_param_t *param) case ESP_HF_CNUM_RESPONSE_EVT: { - char *number = {"186xxxx5549"}; + char *number = {"123456"}; esp_hf_subscriber_service_type_t type = 1; ESP_LOGI(BT_HF_TAG, "--Current Number is %s ,Type is %s.", number, c_subscriber_service_type_str[type]); esp_bt_hf_cnum_response(hf_peer_addr, number,type); @@ -288,11 +288,16 @@ void bt_app_hf_cb(esp_hf_cb_event_t event, esp_hf_cb_param_t *param) } break; } - - case ESP_HF_BAC_RESPONSE_EVT: +#if (BTM_WBS_INCLUDED == TRUE) + case ESP_HF_WBS_RESPONSE_EVT: + { + ESP_LOGI(BT_HF_TAG, "--Current codec: %s",c_codec_mode_str[param->wbs_rep.codec]); + break; + } +#endif case ESP_HF_BCS_RESPONSE_EVT: { - ESP_LOGI(BT_HF_TAG, "--AG choose codec mode: %s",c_codec_mode_str[param->codec.mode]); + ESP_LOGI(BT_HF_TAG, "--Consequence of codec negotiation: %s",c_codec_mode_str[param->bcs_rep.mode]); break; } diff --git a/examples/bluetooth/bluedroid/classic_bt/hfp_ag/main/console_uart.c b/examples/bluetooth/bluedroid/classic_bt/hfp_ag/main/console_uart.c index 640f15d0a..9cdcfa563 100644 --- a/examples/bluetooth/bluedroid/classic_bt/hfp_ag/main/console_uart.c +++ b/examples/bluetooth/bluedroid/classic_bt/hfp_ag/main/console_uart.c @@ -21,7 +21,7 @@ static QueueHandle_t uart_queue; static hf_msg_prs_cb_t hf_msg_parser; static const uart_config_t uart_cfg = { - .baud_rate = 115200, //1.5M + .baud_rate = 115200, .data_bits = UART_DATA_8_BITS, .parity = UART_PARITY_DISABLE, .stop_bits = UART_STOP_BITS_1,