mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-02 20:24:32 +02:00
Merge branch 'feature/optimzie_nimble_host_interface_implement' into 'master'
update head files for nimble See merge request espressif/esp-idf!18864
This commit is contained in:
Submodule components/bt/host/nimble/nimble updated: c23dee337f...eda98ca8fa
@@ -1,15 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include "esp_err.h"
|
||||
|
||||
esp_err_t esp_nimble_init();
|
||||
|
||||
esp_err_t esp_nimble_enable(void *host_task);
|
||||
|
||||
esp_err_t esp_nimble_disable();
|
||||
|
||||
esp_err_t esp_nimble_deinit();
|
@@ -1,116 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include "esp_attr.h"
|
||||
#include "esp_heap_caps.h"
|
||||
#include "sdkconfig.h"
|
||||
#include "esp_nimble_mem.h"
|
||||
#include "nimble/nimble_port.h"
|
||||
#include "host/ble_hs.h"
|
||||
|
||||
static TaskHandle_t host_task_h;
|
||||
|
||||
extern void ble_hs_deinit(void);
|
||||
static struct ble_hs_stop_listener stop_listener;
|
||||
|
||||
static struct ble_npl_eventq g_eventq_dflt;
|
||||
static struct ble_npl_sem ble_hs_stop_sem;
|
||||
static struct ble_npl_event ble_hs_ev_stop;
|
||||
|
||||
/**
|
||||
* Called when the host stop procedure has completed.
|
||||
*/
|
||||
static void
|
||||
ble_hs_stop_cb(int status, void *arg)
|
||||
{
|
||||
ble_npl_sem_release(&ble_hs_stop_sem);
|
||||
}
|
||||
|
||||
static void
|
||||
nimble_port_stop_cb(struct ble_npl_event *ev)
|
||||
{
|
||||
ble_npl_sem_release(&ble_hs_stop_sem);
|
||||
}
|
||||
|
||||
esp_err_t esp_nimble_init(void)
|
||||
{
|
||||
#if !SOC_ESP_NIMBLE_CONTROLLER
|
||||
/* Initialize the function pointers for OS porting */
|
||||
npl_freertos_funcs_init();
|
||||
|
||||
npl_freertos_mempool_init();
|
||||
|
||||
/* Initialize default event queue */
|
||||
|
||||
ble_npl_eventq_init(&g_eventq_dflt);
|
||||
|
||||
|
||||
os_msys_init();
|
||||
|
||||
void ble_store_ram_init(void); // Do we need this?
|
||||
/* XXX Need to have template for store */
|
||||
ble_store_ram_init();
|
||||
#endif
|
||||
|
||||
/* Initialize the host */
|
||||
ble_hs_init();
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
esp_err_t esp_nimble_enable(void *host_task)
|
||||
{
|
||||
/*
|
||||
* Create task where NimBLE host will run. It is not strictly necessary to
|
||||
* have separate task for NimBLE host, but since something needs to handle
|
||||
* default queue it is just easier to make separate task which does this.
|
||||
*/
|
||||
xTaskCreatePinnedToCore(host_task, "nimble_host", NIMBLE_HS_STACK_SIZE,
|
||||
NULL, (configMAX_PRIORITIES - 4), &host_task_h, NIMBLE_CORE);
|
||||
return ESP_OK;
|
||||
|
||||
}
|
||||
|
||||
esp_err_t esp_nimble_disable(void)
|
||||
{
|
||||
esp_err_t err = ESP_OK;
|
||||
ble_npl_sem_init(&ble_hs_stop_sem, 0);
|
||||
|
||||
/* Initiate a host stop procedure. */
|
||||
err = ble_hs_stop(&stop_listener, ble_hs_stop_cb,
|
||||
NULL);
|
||||
if (err != 0) {
|
||||
ble_npl_sem_deinit(&ble_hs_stop_sem);
|
||||
return err;
|
||||
}
|
||||
|
||||
/* Wait till the host stop procedure is complete */
|
||||
ble_npl_sem_pend(&ble_hs_stop_sem, BLE_NPL_TIME_FOREVER);
|
||||
|
||||
ble_npl_event_init(&ble_hs_ev_stop, nimble_port_stop_cb,
|
||||
NULL);
|
||||
ble_npl_eventq_put(&g_eventq_dflt, &ble_hs_ev_stop);
|
||||
|
||||
/* Wait till the event is serviced */
|
||||
ble_npl_sem_pend(&ble_hs_stop_sem, BLE_NPL_TIME_FOREVER);
|
||||
|
||||
ble_npl_sem_deinit(&ble_hs_stop_sem);
|
||||
|
||||
return ESP_OK;
|
||||
|
||||
}
|
||||
|
||||
esp_err_t esp_nimble_deinit(void)
|
||||
{
|
||||
#if !(SOC_ESP_NIMBLE_CONTROLLER && CONFIG_BT_CONTROLLER_ENABLED)
|
||||
ble_npl_eventq_deinit(&g_eventq_dflt);
|
||||
#endif
|
||||
|
||||
if (host_task_h) {
|
||||
vTaskDelete(host_task_h);
|
||||
}
|
||||
ble_hs_deinit();
|
||||
return ESP_OK;
|
||||
}
|
@@ -41,14 +41,22 @@ void nimble_port_deinit(void);
|
||||
void nimble_port_run(void);
|
||||
int nimble_port_stop(void);
|
||||
|
||||
struct ble_npl_eventq *nimble_port_get_dflt_eventq(void);
|
||||
|
||||
/**
|
||||
* @brief esp_nimble_init - Initialize the NimBLE host stack
|
||||
*
|
||||
* @return esp_err_t
|
||||
*/
|
||||
esp_err_t esp_nimble_init(void);
|
||||
esp_err_t esp_nimble_enable(void *host_task);
|
||||
|
||||
esp_err_t esp_nimble_disable(void);
|
||||
/**
|
||||
* @brief esp_nimble_deinit - Deinitialize the NimBLE host stack
|
||||
*
|
||||
* @return esp_err_t
|
||||
*/
|
||||
esp_err_t esp_nimble_deinit(void);
|
||||
|
||||
struct ble_npl_eventq *nimble_port_get_dflt_eventq(void);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@@ -15,6 +15,22 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
/**
|
||||
* @brief esp_nimble_enable - Initialize the NimBLE host task
|
||||
*
|
||||
* @param host_task
|
||||
* @return esp_err_t
|
||||
*/
|
||||
esp_err_t esp_nimble_enable(void *host_task);
|
||||
|
||||
/**
|
||||
* @brief esp_nimble_disable - Disable the NimBLE host task
|
||||
*
|
||||
* @return esp_err_t
|
||||
*/
|
||||
esp_err_t esp_nimble_disable(void);
|
||||
|
||||
void nimble_port_freertos_init(TaskFunction_t host_task_fn);
|
||||
void nimble_port_freertos_deinit(void);
|
||||
void npl_freertos_funcs_init(void);
|
||||
|
@@ -762,12 +762,16 @@ IRAM_ATTR npl_freertos_callout_deinit(struct ble_npl_callout *co)
|
||||
BLE_LL_ASSERT(callout->handle);
|
||||
|
||||
#if CONFIG_BT_NIMBLE_USE_ESP_TIMER
|
||||
if(esp_timer_stop(callout->handle))
|
||||
ESP_LOGW(TAG, "Timer not stopped");
|
||||
|
||||
if(esp_timer_delete(callout->handle))
|
||||
esp_err_t err = esp_timer_stop(callout->handle);
|
||||
if(err != ESP_OK) {
|
||||
if (err != ESP_ERR_INVALID_STATE) { // ESP_ERR_INVALID_STATE is expected when timer is already stopped
|
||||
ESP_LOGW(TAG, "Timer not stopped");
|
||||
}
|
||||
}
|
||||
err = esp_timer_delete(callout->handle);
|
||||
if(err != ESP_OK) {
|
||||
ESP_LOGW(TAG, "Timer not deleted");
|
||||
|
||||
}
|
||||
#else
|
||||
|
||||
xTimerDelete(callout->handle, portMAX_DELAY);
|
||||
|
Reference in New Issue
Block a user