]> granicus.if.org Git - esp-idf/commitdiff
component/bt : add bluetooth status check
authorTian Hao <tianhao@espressif.com>
Mon, 20 Feb 2017 17:05:37 +0000 (01:05 +0800)
committerTian Hao <tianhao@espressif.com>
Mon, 20 Feb 2017 17:05:37 +0000 (01:05 +0800)
1. add bluetooth controller/host initialize status check
2. separate bluetooth controller task schedule loop from controller init

components/bt/bluedroid/api/esp_bt_main.c
components/bt/bt.c
components/bt/include/bt.h
components/bt/lib
docs/api/bluetooth/controller_vhci.rst

index c9fe4fc060e97a96c99526a9d9ad572825d33835..5f7265e99c882fb76334a20bb2bfea8e3777cfd9 100644 (file)
@@ -16,6 +16,7 @@
 #include "esp_bt_main.h"
 #include "btc_task.h"
 #include "btc_main.h"
+#include "bt.h"
 #include "future.h"
 
 static bool esp_already_enable = false;
@@ -103,6 +104,11 @@ esp_err_t esp_bluedroid_init(void)
     btc_msg_t msg;
     future_t **future_p;
 
+    if (esp_bt_controller_get_status() != ESP_BT_CONTROLLER_STATUS_ENABLED) {
+        LOG_ERROR("%s conroller not init\n", __func__);
+        return ESP_ERR_INVALID_STATE;
+    }
+
     if (esp_already_init) {
         LOG_ERROR("%s already init\n", __func__);
         return ESP_ERR_INVALID_STATE;
index 440c960e649a0948373fc58786ee2c4ef5e2e44e..6a81d11accad9bcbc459f47862ec5c34dae123e9 100644 (file)
@@ -35,6 +35,7 @@
 /* not for user call, so don't put to include file */
 extern void btdm_osi_funcs_register(void *osi_funcs);
 extern void btdm_controller_init(void);
+extern void btdm_controller_schedule(void);
 extern void btdm_controller_deinit(void);
 extern int btdm_controller_enable(esp_bt_mode_t mode);
 extern int btdm_controller_disable(esp_bt_mode_t mode);
@@ -77,6 +78,7 @@ struct osi_funcs_t {
 
 /* Static variable declare */
 static bool btdm_bb_init_flag = false;
+static esp_bt_controller_status_t btdm_controller_status = ESP_BT_CONTROLLER_STATUS_IDLE;
 
 static xTaskHandle btControllerTaskHandle;
 
@@ -157,12 +159,18 @@ static void bt_controller_task(void *pvParam)
     btdm_osi_funcs_register(&osi_funcs);
 
     btdm_controller_init();
+    btdm_controller_status = ESP_BT_CONTROLLER_STATUS_INITED;
+
+    /* Loop */
+    btdm_controller_schedule();
 }
 
-static bool bb_inited;
 void esp_bt_controller_init()
 {
-    bb_inited = false;
+    if (btdm_controller_status != ESP_BT_CONTROLLER_STATUS_IDLE) {
+        return;
+    }
+
     xTaskCreatePinnedToCore(bt_controller_task, "btController",
                             ESP_TASK_BT_CONTROLLER_STACK, NULL,
                             ESP_TASK_BT_CONTROLLER_PRIO, &btControllerTaskHandle, 0);
@@ -171,13 +179,17 @@ void esp_bt_controller_init()
 void esp_bt_controller_deinit(void)
 {
     vTaskDelete(btControllerTaskHandle);
-    bb_inited = false;
+    btdm_controller_status = ESP_BT_CONTROLLER_STATUS_IDLE;
 }
 
 esp_err_t esp_bt_controller_enable(esp_bt_mode_t mode)
 {
     int ret;
 
+    if (btdm_controller_status != ESP_BT_CONTROLLER_STATUS_INITED) {
+        return ESP_ERR_INVALID_STATE;
+    }
+
     if (mode != ESP_BT_MODE_BTDM) {
         return ESP_ERR_INVALID_ARG;
     }
@@ -194,6 +206,8 @@ esp_err_t esp_bt_controller_enable(esp_bt_mode_t mode)
         return ESP_ERR_INVALID_STATE;
     }
 
+    btdm_controller_status = ESP_BT_CONTROLLER_STATUS_ENABLED;
+
     return ESP_OK;
 }
 
@@ -201,6 +215,10 @@ esp_err_t esp_bt_controller_disable(esp_bt_mode_t mode)
 {
     int ret;
 
+    if (btdm_controller_status != ESP_BT_CONTROLLER_STATUS_ENABLED) {
+        return ESP_ERR_INVALID_STATE;
+    }
+
     if (mode != ESP_BT_MODE_BTDM) {
         return ESP_ERR_INVALID_ARG;
     }
@@ -212,7 +230,14 @@ esp_err_t esp_bt_controller_disable(esp_bt_mode_t mode)
 
     esp_phy_rf_deinit();
 
+    btdm_controller_status = ESP_BT_CONTROLLER_STATUS_INITED;
+
     return ESP_OK;
 }
 
+esp_bt_controller_status_t esp_bt_controller_get_status(void)
+{
+    return btdm_controller_status;
+}
+
 #endif
index 91617a28f4e79a9b4f36f7afcefd3a9047ecc3f6..2c652466bd590fa2436bce46a4ff66c99e1b9c6b 100644 (file)
@@ -33,6 +33,16 @@ typedef enum {
     ESP_BT_MODE_BTDM       = 0x03,   /*!< Run dual mode */
 } esp_bt_mode_t;
 
+/**
+ * @brief Bluetooth controller enable/disable/initialised/de-initialised status
+ */
+typedef enum {
+    ESP_BT_CONTROLLER_STATUS_IDLE = 0,
+    ESP_BT_CONTROLLER_STATUS_INITED,
+    ESP_BT_CONTROLLER_STATUS_ENABLED,
+    ESP_BT_CONTROLLER_STATUS_NUM,
+} esp_bt_controller_status_t;
+
 /**
  * @brief  Initialize BT controller to allocate task and other resource.
  *
@@ -52,6 +62,7 @@ void esp_bt_controller_deinit(void);
  * @brief Enable BT controller
  * @param mode : the mode(BLE/BT/BTDM) to enable.
  *               Now only support BTDM.
+ * @return       ESP_OK - success, other - failed
  */
 esp_err_t esp_bt_controller_enable(esp_bt_mode_t mode);
 
@@ -59,10 +70,15 @@ esp_err_t esp_bt_controller_enable(esp_bt_mode_t mode);
  * @brief  Disable BT controller
  * @param mode : the mode(BLE/BT/BTDM) to disable.
  *               Now only support BTDM.
+ * @return       ESP_OK - success, other - failed
  */
 esp_err_t esp_bt_controller_disable(esp_bt_mode_t mode);
 
-
+/**
+ * @brief  Get BT controller is initialised/de-initialised/enabled/disabled
+ * @return status value
+ */
+esp_bt_controller_status_t esp_bt_controller_get_status(void);
 
 /** @brief esp_vhci_host_callback
  *  used for vhci call host function to notify what host need to do
index 69616af7653f4de6e3b78f475dc10e73f0a20ece..dbac82b5c2694f2639161b0a2b3c0bd8c7d3efc5 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 69616af7653f4de6e3b78f475dc10e73f0a20ece
+Subproject commit dbac82b5c2694f2639161b0a2b3c0bd8c7d3efc5
index 108a9f678d9d41415813098e0b322f14a81dca04..9fc5910c253b21574aefcd2e8e1c4260393f03fc 100644 (file)
@@ -49,6 +49,7 @@ Functions
 .. doxygenfunction:: esp_bt_controller_deinit
 .. doxygenfunction:: esp_bt_controller_enable
 .. doxygenfunction:: esp_bt_controller_disable
+.. doxygenfunction:: esp_bt_controller_get_status
 .. doxygenfunction:: esp_vhci_host_check_send_available
 .. doxygenfunction:: esp_vhci_host_send_packet
 .. doxygenfunction:: esp_vhci_host_register_callback