forked from espressif/esp-idf
fix(bt/bluedroid): Fixed the issue of NULL address for btc_hf_ag
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -76,7 +76,7 @@ typedef enum
|
|||||||
typedef union
|
typedef union
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @brief ESP_HS_CONNECTION_STATE_EVT
|
* @brief ESP_HF_CONNECTION_STATE_EVT
|
||||||
*/
|
*/
|
||||||
struct hf_conn_stat_param {
|
struct hf_conn_stat_param {
|
||||||
esp_bd_addr_t remote_bda; /*!< Remote bluetooth device address */
|
esp_bd_addr_t remote_bda; /*!< Remote bluetooth device address */
|
||||||
@@ -105,7 +105,7 @@ typedef union
|
|||||||
* @brief ESP_HF_VOLUME_CONTROL_EVT
|
* @brief ESP_HF_VOLUME_CONTROL_EVT
|
||||||
*/
|
*/
|
||||||
struct hf_volume_control_param {
|
struct hf_volume_control_param {
|
||||||
esp_bd_addr_t remote_bda; /*!< Remote bluetooth device address */
|
esp_bd_addr_t remote_addr; /*!< Remote bluetooth device address */
|
||||||
esp_hf_volume_type_t type; /*!< Volume control target, speaker or microphone */
|
esp_hf_volume_type_t type; /*!< Volume control target, speaker or microphone */
|
||||||
int volume; /*!< Gain, ranges from 0 to 15 */
|
int volume; /*!< Gain, ranges from 0 to 15 */
|
||||||
} volume_control; /*!< AG callback param of ESP_HF_VOLUME_CONTROL_EVT */
|
} volume_control; /*!< AG callback param of ESP_HF_VOLUME_CONTROL_EVT */
|
||||||
@@ -114,7 +114,7 @@ typedef union
|
|||||||
* @brief ESP_HF_UNAT_RESPONSE_EVT
|
* @brief ESP_HF_UNAT_RESPONSE_EVT
|
||||||
*/
|
*/
|
||||||
struct hf_unat_rep_param {
|
struct hf_unat_rep_param {
|
||||||
esp_bd_addr_t remote_bda; /*!< Remote bluetooth device address */
|
esp_bd_addr_t remote_addr; /*!< Remote bluetooth device address */
|
||||||
char *unat; /*!< Unknown AT command string */
|
char *unat; /*!< Unknown AT command string */
|
||||||
} unat_rep; /*!< AG callback param of ESP_HF_UNAT_RESPONSE_EVT */
|
} unat_rep; /*!< AG callback param of ESP_HF_UNAT_RESPONSE_EVT */
|
||||||
|
|
||||||
@@ -166,7 +166,7 @@ typedef union
|
|||||||
* @brief ESP_HF_VTS_RESPONSE_EVT
|
* @brief ESP_HF_VTS_RESPONSE_EVT
|
||||||
*/
|
*/
|
||||||
struct hf_vts_rep_param {
|
struct hf_vts_rep_param {
|
||||||
esp_bd_addr_t remote_bda; /*!< Remote bluetooth device address */
|
esp_bd_addr_t remote_addr; /*!< Remote bluetooth device address */
|
||||||
char *code; /*!< MTF code from HF Client */
|
char *code; /*!< MTF code from HF Client */
|
||||||
} vts_rep; /*!< AG callback param of ESP_HF_VTS_RESPONSE_EVT */
|
} vts_rep; /*!< AG callback param of ESP_HF_VTS_RESPONSE_EVT */
|
||||||
|
|
||||||
@@ -174,7 +174,7 @@ typedef union
|
|||||||
* @brief ESP_HF_NREC_RESPONSE_EVT
|
* @brief ESP_HF_NREC_RESPONSE_EVT
|
||||||
*/
|
*/
|
||||||
struct hf_nrec_param {
|
struct hf_nrec_param {
|
||||||
esp_bd_addr_t remote_bda; /*!< Remote bluetooth device address */
|
esp_bd_addr_t remote_addr; /*!< Remote bluetooth device address */
|
||||||
esp_hf_nrec_t state; /*!< NREC enabled or disabled */
|
esp_hf_nrec_t state; /*!< NREC enabled or disabled */
|
||||||
} nrec; /*!< AG callback param of ESP_HF_NREC_RESPONSE_EVT */
|
} nrec; /*!< AG callback param of ESP_HF_NREC_RESPONSE_EVT */
|
||||||
|
|
||||||
@@ -196,7 +196,7 @@ typedef union
|
|||||||
* @brief ESP_HF_WBS_RESPONSE_EVT
|
* @brief ESP_HF_WBS_RESPONSE_EVT
|
||||||
*/
|
*/
|
||||||
struct hf_wbs_rep_param {
|
struct hf_wbs_rep_param {
|
||||||
esp_bd_addr_t remote_bda; /*!< Remote bluetooth device address */
|
esp_bd_addr_t remote_addr; /*!< Remote bluetooth device address */
|
||||||
esp_hf_wbs_config_t codec; /*!< codec mode CVSD or mSBC */
|
esp_hf_wbs_config_t codec; /*!< codec mode CVSD or mSBC */
|
||||||
} wbs_rep; /*!< AG callback param of ESP_HF_WBS_RESPONSE_EVT */
|
} wbs_rep; /*!< AG callback param of ESP_HF_WBS_RESPONSE_EVT */
|
||||||
|
|
||||||
@@ -204,7 +204,7 @@ typedef union
|
|||||||
* @brief ESP_HF_BCS_RESPONSE_EVT
|
* @brief ESP_HF_BCS_RESPONSE_EVT
|
||||||
*/
|
*/
|
||||||
struct hf_bcs_rep_param {
|
struct hf_bcs_rep_param {
|
||||||
esp_bd_addr_t remote_bda; /*!< Remote bluetooth device address */
|
esp_bd_addr_t remote_addr; /*!< Remote bluetooth device address */
|
||||||
esp_hf_wbs_config_t mode; /*!< codec mode CVSD or mSBC */
|
esp_hf_wbs_config_t mode; /*!< codec mode CVSD or mSBC */
|
||||||
} bcs_rep; /*!< AG callback param of ESP_HF_BCS_RESPONSE_EVT */
|
} bcs_rep; /*!< AG callback param of ESP_HF_BCS_RESPONSE_EVT */
|
||||||
|
|
||||||
|
@@ -1349,7 +1349,7 @@ void btc_hf_cb_handler(btc_msg_t *msg)
|
|||||||
idx = p_data->hdr.handle - 1;
|
idx = p_data->hdr.handle - 1;
|
||||||
CHECK_HF_IDX(idx);
|
CHECK_HF_IDX(idx);
|
||||||
do {
|
do {
|
||||||
memcpy(param.volume_control.remote_bda, &hf_local_param[idx].btc_hf_cb.connected_bda,sizeof(esp_bd_addr_t));
|
memcpy(param.volume_control.remote_addr, &hf_local_param[idx].btc_hf_cb.connected_bda,sizeof(esp_bd_addr_t));
|
||||||
param.volume_control.type = (event == BTA_AG_SPK_EVT) ? ESP_HF_VOLUME_CONTROL_TARGET_SPK : ESP_HF_VOLUME_CONTROL_TARGET_MIC;
|
param.volume_control.type = (event == BTA_AG_SPK_EVT) ? ESP_HF_VOLUME_CONTROL_TARGET_SPK : ESP_HF_VOLUME_CONTROL_TARGET_MIC;
|
||||||
param.volume_control.volume = p_data->val.num;
|
param.volume_control.volume = p_data->val.num;
|
||||||
btc_hf_cb_to_app(ESP_HF_VOLUME_CONTROL_EVT, ¶m);
|
btc_hf_cb_to_app(ESP_HF_VOLUME_CONTROL_EVT, ¶m);
|
||||||
@@ -1362,7 +1362,7 @@ void btc_hf_cb_handler(btc_msg_t *msg)
|
|||||||
idx = p_data->hdr.handle - 1;
|
idx = p_data->hdr.handle - 1;
|
||||||
CHECK_HF_IDX(idx);
|
CHECK_HF_IDX(idx);
|
||||||
do {
|
do {
|
||||||
memcpy(param.unat_rep.remote_bda, &hf_local_param[idx].btc_hf_cb.connected_bda,sizeof(esp_bd_addr_t));
|
memcpy(param.unat_rep.remote_addr, &hf_local_param[idx].btc_hf_cb.connected_bda,sizeof(esp_bd_addr_t));
|
||||||
param.unat_rep.unat = p_data->val.str;
|
param.unat_rep.unat = p_data->val.str;
|
||||||
btc_hf_cb_to_app(ESP_HF_UNAT_RESPONSE_EVT, ¶m);
|
btc_hf_cb_to_app(ESP_HF_UNAT_RESPONSE_EVT, ¶m);
|
||||||
} while (0);
|
} while (0);
|
||||||
@@ -1371,31 +1371,46 @@ void btc_hf_cb_handler(btc_msg_t *msg)
|
|||||||
|
|
||||||
case BTA_AG_AT_CBC_EVT:
|
case BTA_AG_AT_CBC_EVT:
|
||||||
{
|
{
|
||||||
btc_hf_cb_to_app(ESP_HF_IND_UPDATE_EVT, NULL);
|
idx = p_data->hdr.handle - 1;
|
||||||
|
CHECK_HF_IDX(idx);
|
||||||
|
memcpy(param.ind_upd.remote_addr, &hf_local_param[idx].btc_hf_cb.connected_bda,sizeof(esp_bd_addr_t));
|
||||||
|
btc_hf_cb_to_app(ESP_HF_IND_UPDATE_EVT, ¶m);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case BTA_AG_AT_CIND_EVT:
|
case BTA_AG_AT_CIND_EVT:
|
||||||
{
|
{
|
||||||
btc_hf_cb_to_app(ESP_HF_CIND_RESPONSE_EVT, NULL);
|
idx = p_data->hdr.handle - 1;
|
||||||
|
CHECK_HF_IDX(idx);
|
||||||
|
memcpy(param.cind_rep.remote_addr, &hf_local_param[idx].btc_hf_cb.connected_bda,sizeof(esp_bd_addr_t));
|
||||||
|
btc_hf_cb_to_app(ESP_HF_CIND_RESPONSE_EVT, ¶m);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case BTA_AG_AT_COPS_EVT:
|
case BTA_AG_AT_COPS_EVT:
|
||||||
{
|
{
|
||||||
btc_hf_cb_to_app(ESP_HF_COPS_RESPONSE_EVT, NULL);
|
idx = p_data->hdr.handle - 1;
|
||||||
|
CHECK_HF_IDX(idx);
|
||||||
|
memcpy(param.cops_rep.remote_addr, &hf_local_param[idx].btc_hf_cb.connected_bda,sizeof(esp_bd_addr_t));
|
||||||
|
btc_hf_cb_to_app(ESP_HF_COPS_RESPONSE_EVT, ¶m);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case BTA_AG_AT_CLCC_EVT:
|
case BTA_AG_AT_CLCC_EVT:
|
||||||
{
|
{
|
||||||
btc_hf_cb_to_app(ESP_HF_CLCC_RESPONSE_EVT, NULL);
|
idx = p_data->hdr.handle - 1;
|
||||||
|
CHECK_HF_IDX(idx);
|
||||||
|
memcpy(param.clcc_rep.remote_addr, &hf_local_param[idx].btc_hf_cb.connected_bda,sizeof(esp_bd_addr_t));
|
||||||
|
btc_hf_cb_to_app(ESP_HF_CLCC_RESPONSE_EVT, ¶m);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case BTA_AG_AT_CNUM_EVT:
|
case BTA_AG_AT_CNUM_EVT:
|
||||||
{
|
{
|
||||||
btc_hf_cb_to_app(ESP_HF_CNUM_RESPONSE_EVT, NULL);
|
idx = p_data->hdr.handle - 1;
|
||||||
|
CHECK_HF_IDX(idx);
|
||||||
|
memcpy(param.cnum_rep.remote_addr, &hf_local_param[idx].btc_hf_cb.connected_bda,sizeof(esp_bd_addr_t));
|
||||||
|
btc_hf_cb_to_app(ESP_HF_CNUM_RESPONSE_EVT, ¶m);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1404,7 +1419,7 @@ void btc_hf_cb_handler(btc_msg_t *msg)
|
|||||||
idx = p_data->hdr.handle - 1;
|
idx = p_data->hdr.handle - 1;
|
||||||
CHECK_HF_IDX(idx);
|
CHECK_HF_IDX(idx);
|
||||||
do {
|
do {
|
||||||
memcpy(param.vts_rep.remote_bda, &hf_local_param[idx].btc_hf_cb.connected_bda,sizeof(esp_bd_addr_t));
|
memcpy(param.vts_rep.remote_addr, &hf_local_param[idx].btc_hf_cb.connected_bda,sizeof(esp_bd_addr_t));
|
||||||
param.vts_rep.code = p_data->val.str;
|
param.vts_rep.code = p_data->val.str;
|
||||||
btc_hf_cb_to_app(ESP_HF_VTS_RESPONSE_EVT, ¶m);
|
btc_hf_cb_to_app(ESP_HF_VTS_RESPONSE_EVT, ¶m);
|
||||||
} while(0);
|
} while(0);
|
||||||
@@ -1416,7 +1431,7 @@ void btc_hf_cb_handler(btc_msg_t *msg)
|
|||||||
idx = p_data->hdr.handle - 1;
|
idx = p_data->hdr.handle - 1;
|
||||||
CHECK_HF_IDX(idx);
|
CHECK_HF_IDX(idx);
|
||||||
do {
|
do {
|
||||||
memcpy(param.nrec.remote_bda, &hf_local_param[idx].btc_hf_cb.connected_bda,sizeof(esp_bd_addr_t));
|
memcpy(param.nrec.remote_addr, &hf_local_param[idx].btc_hf_cb.connected_bda,sizeof(esp_bd_addr_t));
|
||||||
param.nrec.state = p_data->val.num;
|
param.nrec.state = p_data->val.num;
|
||||||
btc_hf_cb_to_app(ESP_HF_NREC_RESPONSE_EVT, ¶m);
|
btc_hf_cb_to_app(ESP_HF_NREC_RESPONSE_EVT, ¶m);
|
||||||
} while(0);
|
} while(0);
|
||||||
@@ -1425,13 +1440,19 @@ void btc_hf_cb_handler(btc_msg_t *msg)
|
|||||||
|
|
||||||
case BTA_AG_AT_A_EVT:
|
case BTA_AG_AT_A_EVT:
|
||||||
{
|
{
|
||||||
btc_hf_cb_to_app(ESP_HF_ATA_RESPONSE_EVT, NULL);
|
idx = p_data->hdr.handle - 1;
|
||||||
|
CHECK_HF_IDX(idx);
|
||||||
|
memcpy(param.ata_rep.remote_addr, &hf_local_param[idx].btc_hf_cb.connected_bda,sizeof(esp_bd_addr_t));
|
||||||
|
btc_hf_cb_to_app(ESP_HF_ATA_RESPONSE_EVT, ¶m);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case BTA_AG_AT_CHUP_EVT:
|
case BTA_AG_AT_CHUP_EVT:
|
||||||
{
|
{
|
||||||
btc_hf_cb_to_app(ESP_HF_CHUP_RESPONSE_EVT, NULL);
|
idx = p_data->hdr.handle - 1;
|
||||||
|
CHECK_HF_IDX(idx);
|
||||||
|
memcpy(param.chup_rep.remote_addr, &hf_local_param[idx].btc_hf_cb.connected_bda,sizeof(esp_bd_addr_t));
|
||||||
|
btc_hf_cb_to_app(ESP_HF_CHUP_RESPONSE_EVT, ¶m);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -348,7 +348,7 @@ void bt_app_hf_cb(esp_hf_cb_event_t event, esp_hf_cb_param_t *param)
|
|||||||
case ESP_HF_UNAT_RESPONSE_EVT:
|
case ESP_HF_UNAT_RESPONSE_EVT:
|
||||||
{
|
{
|
||||||
ESP_LOGI(BT_HF_TAG, "--UNKOW AT CMD: %s", param->unat_rep.unat);
|
ESP_LOGI(BT_HF_TAG, "--UNKOW AT CMD: %s", param->unat_rep.unat);
|
||||||
esp_hf_ag_unknown_at_send(param->unat_rep.remote_bda, NULL);
|
esp_hf_ag_unknown_at_send(param->unat_rep.remote_addr, NULL);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user