Parcourir la source

Merge branch 'bugfix/add_protection_for_spp_api_4.2' into 'release/v4.2'

Bugfix/add protection for spp api 4.2

See merge request espressif/esp-idf!10281
Jiang Jiang Jian il y a 5 ans
Parent
commit
dddcc2ede8

+ 3 - 3
components/bt/common/btc/core/btc_task.c

@@ -68,7 +68,7 @@
 
 #define BTC_TASK_PINNED_TO_CORE         (TASK_PINNED_TO_CORE)
 #define BTC_TASK_STACK_SIZE             (BT_BTC_TASK_STACK_SIZE + BT_TASK_EXTRA_STACK_SIZE)	//by menuconfig
-#define BTC_TASK_NAME                   "btcT"
+#define BTC_TASK_NAME                   "BTC_TASK"
 #define BTC_TASK_PRIO                   (BT_TASK_MAX_PRIORITIES - 6)
 
 osi_thread_t *btc_thread;
@@ -331,9 +331,9 @@ error_exit:;
 }
 #endif ///BTC_DYNAMIC_MEMORY
 
-int btc_init(void)
+bt_status_t btc_init(void)
 {
-    btc_thread = osi_thread_create("BTC_TASK", BTC_TASK_STACK_SIZE, BTC_TASK_PRIO, BTC_TASK_PINNED_TO_CORE, 2);
+    btc_thread = osi_thread_create(BTC_TASK_NAME, BTC_TASK_STACK_SIZE, BTC_TASK_PRIO, BTC_TASK_PINNED_TO_CORE, 2);
     if (btc_thread == NULL) {
         return BT_STATUS_NOMEM;
     }

+ 1 - 1
components/bt/common/btc/include/btc/btc_task.h

@@ -98,7 +98,7 @@ typedef void (* btc_arg_deep_copy_t)(btc_msg_t *msg, void *dst, void *src);
 
 bt_status_t btc_transfer_context(btc_msg_t *msg, void *arg, int arg_len, btc_arg_deep_copy_t copy_func);
 
-int btc_init(void);
+bt_status_t btc_init(void);
 void btc_deinit(void);
 bool btc_check_queue_is_congest(void);
 

+ 12 - 4
components/bt/host/bluedroid/api/esp_bt_main.c

@@ -117,6 +117,7 @@ esp_err_t esp_bluedroid_init(void)
 {
     btc_msg_t msg;
     future_t **future_p;
+    bt_status_t ret;
 
     if (esp_bt_controller_get_status() != ESP_BT_CONTROLLER_STATUS_ENABLED) {
         LOG_ERROR("Controller not initialised\n");
@@ -132,12 +133,19 @@ esp_err_t esp_bluedroid_init(void)
     osi_mem_dbg_init();
 #endif
 
-    btc_init();
+    /* 
+    * BTC Init
+    */
+    ret = btc_init();
+    if (ret != BT_STATUS_SUCCESS) {
+        LOG_ERROR("Bluedroid Initialize Fail");
+        return ESP_FAIL;
+    }
 
     future_p = btc_main_get_future_p(BTC_MAIN_INIT_FUTURE);
     *future_p = future_new();
     if (*future_p == NULL) {
-        LOG_ERROR("Bluedroid initialise failed\n");
+        LOG_ERROR("Bluedroid Initialize Fail!");
         return ESP_ERR_NO_MEM;
     }
 
@@ -146,12 +154,12 @@ esp_err_t esp_bluedroid_init(void)
     msg.act = BTC_MAIN_ACT_INIT;
 
     if (btc_transfer_context(&msg, NULL, 0, NULL) != BT_STATUS_SUCCESS) {
-        LOG_ERROR("Bluedroid initialise failed\n");
+        LOG_ERROR("Bluedroid Initialize Fail");
         return ESP_FAIL;
     }
 
     if (future_await(*future_p) == FUTURE_FAIL) {
-        LOG_ERROR("Bluedroid initialise failed\n");
+        LOG_ERROR("Bluedroid Initialize Fail");
         return ESP_FAIL;
     }
 

+ 2 - 2
components/bt/host/bluedroid/api/include/api/esp_hf_ag_api.h

@@ -301,8 +301,8 @@ esp_err_t esp_bt_hf_disconnect_audio(esp_bd_addr_t remote_bda);
  * @brief           Response of Volume Recognition Command(AT+VRA) from HFP client. As a precondition to use this API,
  *                  Service Level Connection shall exist with HFP client.
  *
- * @param[in]       remote_bda: volume control target, speaker or microphone
- * @param[in]       value: gain of the speaker of microphone, ranges 0 to 15
+ * @param[in]       remote_bda: the device address of voice recognization initiator
+ * @param[in]       value: 0 - voice recognition disabled, 1- voice recognition enabled
  *
  * @return
  *                  - ESP_OK: disconnect request is sent to lower layer

+ 4 - 1
components/bt/host/bluedroid/bta/jv/bta_jv_api.c

@@ -94,8 +94,11 @@ tBTA_JV_STATUS BTA_JvEnable(tBTA_JV_DM_CBACK *p_cback)
             bta_sys_sendmsg(p_buf);
             status = BTA_JV_SUCCESS;
         }
+    } else if (p_cback == NULL) {
+        APPL_TRACE_ERROR("No p_cback.");
     } else {
-        APPL_TRACE_ERROR("JVenable fails");
+        APPL_TRACE_WARNING("No need to Init again.");
+        // status = BTA_JV_SUCCESS;
     }
     return (status);
 }

+ 0 - 1
components/bt/host/bluedroid/bta/sys/bta_sys_main.c

@@ -504,7 +504,6 @@ void bta_sys_event(void * param)
     if (freebuf) {
         osi_free(p_msg);
     }
-
 }
 
 /*******************************************************************************

+ 1 - 1
components/bt/host/bluedroid/stack/btu/btu_init.c

@@ -47,7 +47,7 @@
 #define BTU_TASK_PINNED_TO_CORE         (TASK_PINNED_TO_CORE)
 #define BTU_TASK_STACK_SIZE             (BT_BTU_TASK_STACK_SIZE + BT_TASK_EXTRA_STACK_SIZE)
 #define BTU_TASK_PRIO                   (BT_TASK_MAX_PRIORITIES - 5)
-#define BTU_TASK_NAME                   "btuT"
+#define BTU_TASK_NAME                   "BTU_TASK"
 
 hash_map_t *btu_general_alarm_hash_map;
 osi_mutex_t btu_general_alarm_lock;

+ 17 - 4
components/bt/host/bluedroid/stack/include/stack/a2d_api.h

@@ -236,10 +236,6 @@ extern UINT8 A2D_SetTraceLevel (UINT8 new_level);
 ******************************************************************************/
 extern UINT8 A2D_BitsSet(UINT8 num);
 
-#ifdef __cplusplus
-}
-#endif
-
 /*******************************************************************************
 **
 ** Function         A2D_Init
@@ -252,6 +248,23 @@ extern UINT8 A2D_BitsSet(UINT8 num);
 **
 *******************************************************************************/
 extern bt_status_t A2D_Init(void);
+
+/*******************************************************************************
+**
+** Function         A2D_Deinit
+**
+** Description      This function is called at stack startup to free the
+**                  control block (if using dynamic memory), and free the
+**                  control block and tracing level.
+**
+** Returns          void
+**
+*******************************************************************************/
 extern void A2D_Deinit(void);
+
+#ifdef __cplusplus
+}
+#endif
+
 #endif  ///A2D_INCLUDED
 #endif /* A2D_API_H */

+ 1 - 1
components/bt/host/bluedroid/stack/include/stack/sdp_api.h

@@ -222,7 +222,7 @@ extern BOOLEAN SDP_ServiceSearchRequest (UINT8 *p_bd_addr,
 ** Description      This function queries an SDP server for information.
 **
 **                  The difference between this API function and the function
-**                  SDP_ServiceSearchRequest is that this one does a
+**                  SDP_ServiceSearchRequest2 is that this one does a
 **                  combined ServiceSearchAttributeRequest SDP function.
 **
 ** Returns          TRUE if discovery started, FALSE if failed.

+ 1 - 1
components/bt/host/bluedroid/stack/l2cap/l2c_utils.c

@@ -2314,7 +2314,7 @@ UINT8 l2cu_get_num_hi_priority (void)
 ** Description      This function initiates an acl connection via HCI
 **                  If switch required to create connection it is already done.
 **
-** Returns          TRUE if successful, FALSE if gki get buffer fails.
+** Returns          TRUE if successful, FALSE if osi get buffer fails.
 **
 *******************************************************************************/
 

+ 8 - 6
components/bt/host/bluedroid/stack/rfcomm/port_utils.c

@@ -210,16 +210,18 @@ void port_release_port (tPORT *p_port)
 
     osi_mutex_global_lock();
     RFCOMM_TRACE_DEBUG("port_release_port, p_port:%p", p_port);
-    while ((p_buf = (BT_HDR *)fixed_queue_dequeue(p_port->rx.queue, 0)) != NULL) {
-        osi_free (p_buf);
+    if (p_port->rx.queue) {
+        while ((p_buf = (BT_HDR *)fixed_queue_dequeue(p_port->rx.queue, 0)) != NULL) {
+            osi_free (p_buf);
+        }
     }
-
     p_port->rx.queue_size = 0;
 
-    while ((p_buf = (BT_HDR *)fixed_queue_dequeue(p_port->tx.queue, 0)) != NULL) {
-        osi_free (p_buf);
+    if (p_port->tx.queue) {
+        while ((p_buf = (BT_HDR *)fixed_queue_dequeue(p_port->tx.queue, 0)) != NULL) {
+            osi_free (p_buf);
+        }   
     }
-
     p_port->tx.queue_size = 0;
 
     osi_mutex_global_unlock();

+ 3 - 4
components/bt/host/bluedroid/stack/sdp/sdp_api.c

@@ -169,9 +169,8 @@ BOOLEAN SDP_ServiceSearchRequest (UINT8 *p_bd_addr, tSDP_DISCOVERY_DB *p_db,
 ** Description      This function queries an SDP server for information.
 **
 **                  The difference between this API function and the function
-**                  SDP_ServiceSearchRequest is that this one does a
+**                  SDP_ServiceSearchRequest2 is that this one does a
 **                  combined ServiceSearchAttributeRequest SDP function.
-**                  (This is for Unplug Testing)
 **
 ** Returns          TRUE if discovery started, FALSE if failed.
 **
@@ -208,8 +207,8 @@ BOOLEAN SDP_ServiceSearchAttributeRequest (UINT8 *p_bd_addr, tSDP_DISCOVERY_DB *
 **
 **                  The difference between this API function and the function
 **                  SDP_ServiceSearchRequest is that this one does a
-**                  combined ServiceSearchAttributeRequest SDP function.
-**                  (This is for Unplug Testing)
+**                  combined ServiceSearchAttributeRequest SDP function with the
+**                  user data piggyback
 **
 ** Returns          TRUE if discovery started, FALSE if failed.
 **