/* 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);
/* 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;
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);
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;
}
return ESP_ERR_INVALID_STATE;
}
+ btdm_controller_status = ESP_BT_CONTROLLER_STATUS_ENABLED;
+
return ESP_OK;
}
{
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;
}
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
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.
*
* @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);
* @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