Просмотр исходного кода

Merge branch 'bugfix/ag_use_dynamic_memory_error_v4.1' into 'release/v4.1'

Fix ag use dynamic memory error

See merge request espressif/esp-idf!13552
Jiang Jiang Jian 4 лет назад
Родитель
Сommit
3a12c7ee8d

+ 23 - 3
components/bt/host/bluedroid/btc/profile/std/hf_ag/btc_hf_ag.c

@@ -53,7 +53,11 @@
 /* Max HF Clients Supported From App */
 /* Max HF Clients Supported From App */
 static UINT16 btc_max_hf_clients = 1;
 static UINT16 btc_max_hf_clients = 1;
 /* HF Param Definition */
 /* HF Param Definition */
+#if HFP_DYNAMIC_MEMORY == FALSE
 static hf_local_param_t hf_local_param[BTC_HF_NUM_CB];
 static hf_local_param_t hf_local_param[BTC_HF_NUM_CB];
+#else
+static hf_local_param_t *hf_local_param;
+#endif
 
 
 #if (BTM_WBS_INCLUDED == TRUE)
 #if (BTM_WBS_INCLUDED == TRUE)
 #ifndef BTC_HF_FEATURES
 #ifndef BTC_HF_FEATURES
@@ -296,7 +300,15 @@ bt_status_t btc_hf_execute_service(BOOLEAN b_enable)
 ************************************************************************************/
 ************************************************************************************/
 bt_status_t btc_hf_init(bt_bdaddr_t *bd_addr)
 bt_status_t btc_hf_init(bt_bdaddr_t *bd_addr)
 {
 {
-    int idx = btc_hf_idx_by_bdaddr(bd_addr);
+    int idx = 0;
+    UNUSED(bd_addr);
+
+#if HFP_DYNAMIC_MEMORY == TRUE
+    if ((hf_local_param = (hf_local_param_t *)osi_malloc(sizeof(hf_local_param_t) * BTC_HF_NUM_CB)) == NULL) {
+        return BT_STATUS_FAIL;
+    }
+#endif
+
     BTC_TRACE_DEBUG("%s - max_hf_clients=%d", __func__, btc_max_hf_clients);
     BTC_TRACE_DEBUG("%s - max_hf_clients=%d", __func__, btc_max_hf_clients);
     /* Invoke the enable service API to the core to set the appropriate service_id
     /* Invoke the enable service API to the core to set the appropriate service_id
      * Internally, the HSP_SERVICE_ID shall also be enabled if HFP is enabled (phone)
      * Internally, the HSP_SERVICE_ID shall also be enabled if HFP is enabled (phone)
@@ -322,10 +334,18 @@ bt_status_t btc_hf_init(bt_bdaddr_t *bd_addr)
 
 
 void btc_hf_deinit(bt_bdaddr_t *bd_addr)
 void btc_hf_deinit(bt_bdaddr_t *bd_addr)
 {
 {
-    int idx = btc_hf_idx_by_bdaddr(bd_addr);
+    UNUSED(bd_addr);
+
     BTC_TRACE_EVENT("%s", __FUNCTION__);
     BTC_TRACE_EVENT("%s", __FUNCTION__);
     btc_dm_disable_service(BTA_HFP_SERVICE_ID);
     btc_dm_disable_service(BTA_HFP_SERVICE_ID);
-    hf_local_param[idx].btc_hf_cb.initialized = false;
+#if HFP_DYNAMIC_MEMORY == TRUE
+    if (hf_local_param) {
+        osi_free(hf_local_param);
+        hf_local_param = NULL;
+    }
+#else
+    hf_local_param[0].btc_hf_cb.initialized = false;
+#endif
 }
 }
 
 
 static bt_status_t connect_init(bt_bdaddr_t *bd_addr, uint16_t uuid)
 static bt_status_t connect_init(bt_bdaddr_t *bd_addr, uint16_t uuid)

+ 0 - 5
components/bt/host/bluedroid/btc/profile/std/include/btc_hf_ag.h

@@ -206,11 +206,6 @@ typedef union
 /* APP ID definition*/
 /* APP ID definition*/
 #define BTC_HF_ID_1    0
 #define BTC_HF_ID_1    0
 
 
-#if HFP_DYNAMIC_MEMORY == TRUE
-extern hf_local_param_t *hf_local_param_ptr;
-#define hf_local_param (*hf_local_param_ptr)
-#endif
-
 /* BTC-AG control block to map bdaddr to BTA handle */
 /* BTC-AG control block to map bdaddr to BTA handle */
 typedef struct
 typedef struct
 {
 {

+ 16 - 0
components/bt/host/bluedroid/main/bte_init.c

@@ -93,6 +93,10 @@
 #include "bta_hf_client_int.h"
 #include "bta_hf_client_int.h"
 #endif
 #endif
 
 
+#if BTA_AG_INCLUDED == TRUE
+#include "bta_ag_int.h"
+#endif
+
 #if BTA_SDP_INCLUDED == TRUE
 #if BTA_SDP_INCLUDED == TRUE
 #include "bta_sdp_int.h"
 #include "bta_sdp_int.h"
 #endif
 #endif
@@ -216,6 +220,12 @@ void BTE_DeinitStack(void)
         osi_free(bta_hf_client_cb_ptr);
         osi_free(bta_hf_client_cb_ptr);
         bta_hf_client_cb_ptr = NULL;
         bta_hf_client_cb_ptr = NULL;
     }
     }
+#endif
+#if (defined BTA_AG_INCLUDED && BTA_AG_INCLUDED == TRUE)
+    if (bta_ag_cb_ptr){
+        osi_free(bta_ag_cb_ptr);
+        bta_ag_cb_ptr = NULL;
+    }
 #endif
 #endif
     if (bta_dm_conn_srvcs_ptr){
     if (bta_dm_conn_srvcs_ptr){
         osi_free(bta_dm_conn_srvcs_ptr);
         osi_free(bta_dm_conn_srvcs_ptr);
@@ -374,6 +384,12 @@ bt_status_t BTE_InitStack(void)
     }
     }
     memset((void *)bta_hf_client_cb_ptr, 0, sizeof(tBTA_HF_CLIENT_CB));
     memset((void *)bta_hf_client_cb_ptr, 0, sizeof(tBTA_HF_CLIENT_CB));
 #endif
 #endif
+#if (defined BTA_AG_INCLUDED && BTA_AG_INCLUDED == TRUE)
+    if ((bta_ag_cb_ptr = (tBTA_AG_CB *)osi_malloc(sizeof(tBTA_AG_CB))) == NULL) {
+        goto error_exit;
+    }
+    memset((void *)bta_ag_cb_ptr, 0, sizeof(tBTA_AG_CB));
+#endif
 #if (defined BTA_JV_INCLUDED && BTA_JV_INCLUDED == TRUE)
 #if (defined BTA_JV_INCLUDED && BTA_JV_INCLUDED == TRUE)
     if ((bta_jv_cb_ptr = (tBTA_JV_CB *)osi_malloc(sizeof(tBTA_JV_CB))) == NULL) {
     if ((bta_jv_cb_ptr = (tBTA_JV_CB *)osi_malloc(sizeof(tBTA_JV_CB))) == NULL) {
         goto error_exit;
         goto error_exit;