mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-03 12:44:33 +02:00
Merge branch 'bugfix/fix_ble_some_bugs_20221219' into 'release/v5.0'
backport some BLE bugs 20221219 (backport v5.0) See merge request espressif/esp-idf!21697
This commit is contained in:
@@ -353,6 +353,22 @@ config BTDM_SCAN_DUPL_CACHE_SIZE
|
|||||||
Maximum number of devices which can be recorded in scan duplicate filter.
|
Maximum number of devices which can be recorded in scan duplicate filter.
|
||||||
When the maximum amount of device in the filter is reached, the cache will be refreshed.
|
When the maximum amount of device in the filter is reached, the cache will be refreshed.
|
||||||
|
|
||||||
|
config BTDM_SCAN_DUPL_CACHE_REFRESH_PERIOD
|
||||||
|
int "Duplicate scan list refresh period (seconds)"
|
||||||
|
depends on BTDM_BLE_SCAN_DUPL
|
||||||
|
range 0 1000
|
||||||
|
default 0
|
||||||
|
help
|
||||||
|
If the period value is non-zero, the controller will periodically clear the device information
|
||||||
|
stored in the scan duuplicate filter. If it is 0, the scan duuplicate filter will not be cleared
|
||||||
|
until the scanning is disabled. Duplicate advertisements for this period should not be sent to the
|
||||||
|
Host in advertising report events.
|
||||||
|
There are two scenarios where the ADV packet will be repeatedly reported:
|
||||||
|
1. The duplicate scan cache is full, the controller will delete the oldest device information and
|
||||||
|
add new device information.
|
||||||
|
2. When the refresh period is up, the controller will clear all device information and start filtering
|
||||||
|
again.
|
||||||
|
|
||||||
config BTDM_BLE_MESH_SCAN_DUPL_EN
|
config BTDM_BLE_MESH_SCAN_DUPL_EN
|
||||||
bool "Special duplicate scan mechanism for BLE Mesh scan"
|
bool "Special duplicate scan mechanism for BLE Mesh scan"
|
||||||
depends on BTDM_BLE_SCAN_DUPL
|
depends on BTDM_BLE_SCAN_DUPL
|
||||||
|
@@ -325,6 +325,7 @@ static void *customer_queue_create_hlevel_wrapper(uint32_t queue_len, uint32_t i
|
|||||||
#endif /* CONFIG_BTDM_CTRL_HLI */
|
#endif /* CONFIG_BTDM_CTRL_HLI */
|
||||||
static void interrupt_l3_disable(void);
|
static void interrupt_l3_disable(void);
|
||||||
static void interrupt_l3_restore(void);
|
static void interrupt_l3_restore(void);
|
||||||
|
static void bt_controller_deinit_internal(void);
|
||||||
|
|
||||||
/* Local variable definition
|
/* Local variable definition
|
||||||
***************************************************************************
|
***************************************************************************
|
||||||
@@ -1576,26 +1577,9 @@ esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg)
|
|||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
#ifdef CONFIG_PM_ENABLE
|
|
||||||
if (!s_btdm_allow_light_sleep) {
|
bt_controller_deinit_internal();
|
||||||
if (s_light_sleep_pm_lock != NULL) {
|
|
||||||
esp_pm_lock_delete(s_light_sleep_pm_lock);
|
|
||||||
s_light_sleep_pm_lock = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (s_pm_lock != NULL) {
|
|
||||||
esp_pm_lock_delete(s_pm_lock);
|
|
||||||
s_pm_lock = NULL;
|
|
||||||
}
|
|
||||||
if (s_btdm_slp_tmr != NULL) {
|
|
||||||
esp_timer_delete(s_btdm_slp_tmr);
|
|
||||||
s_btdm_slp_tmr = NULL;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (s_wakeup_req_sem) {
|
|
||||||
semphr_delete_wrapper(s_wakeup_req_sem);
|
|
||||||
s_wakeup_req_sem = NULL;
|
|
||||||
}
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1607,6 +1591,13 @@ esp_err_t esp_bt_controller_deinit(void)
|
|||||||
|
|
||||||
btdm_controller_deinit();
|
btdm_controller_deinit();
|
||||||
|
|
||||||
|
bt_controller_deinit_internal();
|
||||||
|
|
||||||
|
return ESP_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void bt_controller_deinit_internal(void)
|
||||||
|
{
|
||||||
periph_module_disable(PERIPH_BT_MODULE);
|
periph_module_disable(PERIPH_BT_MODULE);
|
||||||
|
|
||||||
#ifdef CONFIG_PM_ENABLE
|
#ifdef CONFIG_PM_ENABLE
|
||||||
@@ -1628,11 +1619,16 @@ esp_err_t esp_bt_controller_deinit(void)
|
|||||||
|
|
||||||
s_pm_lock_acquired = false;
|
s_pm_lock_acquired = false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (s_wakeup_req_sem) {
|
||||||
semphr_delete_wrapper(s_wakeup_req_sem);
|
semphr_delete_wrapper(s_wakeup_req_sem);
|
||||||
s_wakeup_req_sem = NULL;
|
s_wakeup_req_sem = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (osi_funcs_p) {
|
||||||
free(osi_funcs_p);
|
free(osi_funcs_p);
|
||||||
osi_funcs_p = NULL;
|
osi_funcs_p = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
btdm_controller_status = ESP_BT_CONTROLLER_STATUS_IDLE;
|
btdm_controller_status = ESP_BT_CONTROLLER_STATUS_IDLE;
|
||||||
|
|
||||||
@@ -1642,8 +1638,6 @@ esp_err_t esp_bt_controller_deinit(void)
|
|||||||
esp_bt_power_domain_off();
|
esp_bt_power_domain_off();
|
||||||
|
|
||||||
esp_phy_modem_deinit();
|
esp_phy_modem_deinit();
|
||||||
|
|
||||||
return ESP_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bt_controller_shutdown(void* arg)
|
static void bt_controller_shutdown(void* arg)
|
||||||
|
@@ -280,6 +280,22 @@ config BT_CTRL_SCAN_DUPL_CACHE_SIZE
|
|||||||
Maximum number of devices which can be recorded in scan duplicate filter.
|
Maximum number of devices which can be recorded in scan duplicate filter.
|
||||||
When the maximum amount of device in the filter is reached, the cache will be refreshed.
|
When the maximum amount of device in the filter is reached, the cache will be refreshed.
|
||||||
|
|
||||||
|
config BT_CTRL_DUPL_SCAN_CACHE_REFRESH_PERIOD
|
||||||
|
int "Duplicate scan list refresh period (seconds)"
|
||||||
|
depends on BT_CTRL_BLE_SCAN_DUPL
|
||||||
|
range 0 1000
|
||||||
|
default 0
|
||||||
|
help
|
||||||
|
If the period value is non-zero, the controller will periodically clear the device information
|
||||||
|
stored in the scan duuplicate filter. If it is 0, the scan duuplicate filter will not be cleared
|
||||||
|
until the scanning is disabled. Duplicate advertisements for this period should not be sent to the
|
||||||
|
Host in advertising report events.
|
||||||
|
There are two scenarios where the ADV packet will be repeatedly reported:
|
||||||
|
1. The duplicate scan cache is full, the controller will delete the oldest device information and
|
||||||
|
add new device information.
|
||||||
|
2. When the refresh period is up, the controller will clear all device information and start filtering
|
||||||
|
again.
|
||||||
|
|
||||||
config BT_CTRL_BLE_MESH_SCAN_DUPL_EN
|
config BT_CTRL_BLE_MESH_SCAN_DUPL_EN
|
||||||
bool "Special duplicate scan mechanism for BLE Mesh scan"
|
bool "Special duplicate scan mechanism for BLE Mesh scan"
|
||||||
depends on BT_CTRL_BLE_SCAN_DUPL
|
depends on BT_CTRL_BLE_SCAN_DUPL
|
||||||
|
@@ -314,6 +314,8 @@ static void btdm_slp_tmr_callback(void *arg);
|
|||||||
|
|
||||||
static esp_err_t try_heap_caps_add_region(intptr_t start, intptr_t end);
|
static esp_err_t try_heap_caps_add_region(intptr_t start, intptr_t end);
|
||||||
|
|
||||||
|
static void bt_controller_deinit_internal(void);
|
||||||
|
|
||||||
/* Local variable definition
|
/* Local variable definition
|
||||||
***************************************************************************
|
***************************************************************************
|
||||||
*/
|
*/
|
||||||
@@ -1272,73 +1274,9 @@ esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg)
|
|||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
if (s_lp_stat.phy_enabled) {
|
|
||||||
esp_phy_disable();
|
|
||||||
s_lp_stat.phy_enabled = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
do {
|
bt_controller_deinit_internal();
|
||||||
// deinit low power control resources
|
|
||||||
#ifdef CONFIG_PM_ENABLE
|
|
||||||
if (s_lp_cntl.no_light_sleep) {
|
|
||||||
if (s_light_sleep_pm_lock != NULL) {
|
|
||||||
esp_pm_lock_delete(s_light_sleep_pm_lock);
|
|
||||||
s_light_sleep_pm_lock = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (s_pm_lock != NULL) {
|
|
||||||
esp_pm_lock_delete(s_pm_lock);
|
|
||||||
s_pm_lock = NULL;
|
|
||||||
s_lp_stat.pm_lock_released = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
if (s_lp_cntl.wakeup_timer_required && s_btdm_slp_tmr != NULL) {
|
|
||||||
esp_timer_delete(s_btdm_slp_tmr);
|
|
||||||
s_btdm_slp_tmr = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if CONFIG_MAC_BB_PD
|
|
||||||
if (s_lp_cntl.mac_bb_pd) {
|
|
||||||
btdm_deep_sleep_mem_deinit();
|
|
||||||
s_lp_cntl.mac_bb_pd = 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (s_lp_cntl.enable) {
|
|
||||||
btdm_vnd_offload_task_deregister(BTDM_VND_OL_SIG_WAKEUP_TMR);
|
|
||||||
if (s_wakeup_req_sem != NULL) {
|
|
||||||
semphr_delete_wrapper(s_wakeup_req_sem);
|
|
||||||
s_wakeup_req_sem = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (s_lp_cntl.lpclk_sel == BTDM_LPCLK_SEL_XTAL) {
|
|
||||||
#ifdef CONFIG_BT_CTRL_MAIN_XTAL_PU_DURING_LIGHT_SLEEP
|
|
||||||
if (s_lp_cntl.main_xtal_pu) {
|
|
||||||
ESP_ERROR_CHECK(esp_sleep_pd_config(ESP_PD_DOMAIN_XTAL, ESP_PD_OPTION_OFF));
|
|
||||||
s_lp_cntl.main_xtal_pu = 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
btdm_lpclk_select_src(BTDM_LPCLK_SEL_RTC_SLOW);
|
|
||||||
btdm_lpclk_set_div(0);
|
|
||||||
#if CONFIG_SW_COEXIST_ENABLE
|
|
||||||
coex_update_lpclk_interval();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
btdm_lpcycle_us = 0;
|
|
||||||
} while (0);
|
|
||||||
|
|
||||||
#if CONFIG_MAC_BB_PD
|
|
||||||
esp_unregister_mac_bb_pd_callback(btdm_mac_bb_power_down_cb);
|
|
||||||
|
|
||||||
esp_unregister_mac_bb_pu_callback(btdm_mac_bb_power_up_cb);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (osi_funcs_p != NULL) {
|
|
||||||
free(osi_funcs_p);
|
|
||||||
osi_funcs_p = NULL;
|
|
||||||
}
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1349,31 +1287,47 @@ esp_err_t esp_bt_controller_deinit(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
btdm_controller_deinit();
|
btdm_controller_deinit();
|
||||||
|
|
||||||
|
bt_controller_deinit_internal();
|
||||||
|
|
||||||
|
return ESP_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void bt_controller_deinit_internal(void)
|
||||||
|
{
|
||||||
periph_module_disable(PERIPH_BT_MODULE);
|
periph_module_disable(PERIPH_BT_MODULE);
|
||||||
|
|
||||||
if (s_lp_stat.phy_enabled) {
|
if (s_lp_stat.phy_enabled) {
|
||||||
esp_phy_disable();
|
esp_phy_disable();
|
||||||
s_lp_stat.phy_enabled = 0;
|
s_lp_stat.phy_enabled = 0;
|
||||||
} else {
|
|
||||||
assert(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// deinit low power control resources
|
// deinit low power control resources
|
||||||
do {
|
do {
|
||||||
|
|
||||||
#if CONFIG_MAC_BB_PD
|
#if CONFIG_MAC_BB_PD
|
||||||
|
if (s_lp_cntl.mac_bb_pd) {
|
||||||
btdm_deep_sleep_mem_deinit();
|
btdm_deep_sleep_mem_deinit();
|
||||||
|
s_lp_cntl.mac_bb_pd = 0;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_PM_ENABLE
|
#ifdef CONFIG_PM_ENABLE
|
||||||
if (s_lp_cntl.no_light_sleep) {
|
if (s_lp_cntl.no_light_sleep) {
|
||||||
|
if (s_light_sleep_pm_lock != NULL) {
|
||||||
esp_pm_lock_delete(s_light_sleep_pm_lock);
|
esp_pm_lock_delete(s_light_sleep_pm_lock);
|
||||||
s_light_sleep_pm_lock = NULL;
|
s_light_sleep_pm_lock = NULL;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (s_pm_lock != NULL) {
|
||||||
esp_pm_lock_delete(s_pm_lock);
|
esp_pm_lock_delete(s_pm_lock);
|
||||||
s_pm_lock = NULL;
|
s_pm_lock = NULL;
|
||||||
s_lp_stat.pm_lock_released = 0;
|
s_lp_stat.pm_lock_released = 0;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (s_lp_cntl.wakeup_timer_required) {
|
if (s_lp_cntl.wakeup_timer_required) {
|
||||||
if (s_lp_stat.wakeup_timer_started) {
|
if (s_lp_stat.wakeup_timer_started) {
|
||||||
esp_timer_stop(s_btdm_slp_tmr);
|
esp_timer_stop(s_btdm_slp_tmr);
|
||||||
@@ -1385,10 +1339,12 @@ esp_err_t esp_bt_controller_deinit(void)
|
|||||||
|
|
||||||
if (s_lp_cntl.enable) {
|
if (s_lp_cntl.enable) {
|
||||||
btdm_vnd_offload_task_deregister(BTDM_VND_OL_SIG_WAKEUP_TMR);
|
btdm_vnd_offload_task_deregister(BTDM_VND_OL_SIG_WAKEUP_TMR);
|
||||||
|
if (s_wakeup_req_sem != NULL) {
|
||||||
semphr_delete_wrapper(s_wakeup_req_sem);
|
semphr_delete_wrapper(s_wakeup_req_sem);
|
||||||
s_wakeup_req_sem = NULL;
|
s_wakeup_req_sem = NULL;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (s_lp_cntl.lpclk_sel == BTDM_LPCLK_SEL_XTAL) {
|
if (s_lp_cntl.lpclk_sel == BTDM_LPCLK_SEL_XTAL) {
|
||||||
#ifdef CONFIG_BT_CTRL_MAIN_XTAL_PU_DURING_LIGHT_SLEEP
|
#ifdef CONFIG_BT_CTRL_MAIN_XTAL_PU_DURING_LIGHT_SLEEP
|
||||||
if (s_lp_cntl.main_xtal_pu) {
|
if (s_lp_cntl.main_xtal_pu) {
|
||||||
@@ -1417,11 +1373,12 @@ esp_err_t esp_bt_controller_deinit(void)
|
|||||||
#endif
|
#endif
|
||||||
esp_phy_modem_deinit();
|
esp_phy_modem_deinit();
|
||||||
|
|
||||||
|
if (osi_funcs_p != NULL) {
|
||||||
free(osi_funcs_p);
|
free(osi_funcs_p);
|
||||||
osi_funcs_p = NULL;
|
osi_funcs_p = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
btdm_controller_status = ESP_BT_CONTROLLER_STATUS_IDLE;
|
btdm_controller_status = ESP_BT_CONTROLLER_STATUS_IDLE;
|
||||||
return ESP_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
esp_err_t esp_bt_controller_enable(esp_bt_mode_t mode)
|
esp_err_t esp_bt_controller_enable(esp_bt_mode_t mode)
|
||||||
|
@@ -297,6 +297,22 @@ config BT_CTRL_SCAN_DUPL_CACHE_SIZE
|
|||||||
Maximum number of devices which can be recorded in scan duplicate filter.
|
Maximum number of devices which can be recorded in scan duplicate filter.
|
||||||
When the maximum amount of device in the filter is reached, the cache will be refreshed.
|
When the maximum amount of device in the filter is reached, the cache will be refreshed.
|
||||||
|
|
||||||
|
config BT_CTRL_DUPL_SCAN_CACHE_REFRESH_PERIOD
|
||||||
|
int "Duplicate scan list refresh period (seconds)"
|
||||||
|
depends on BT_CTRL_BLE_SCAN_DUPL
|
||||||
|
range 0 1000
|
||||||
|
default 0
|
||||||
|
help
|
||||||
|
If the period value is non-zero, the controller will periodically clear the device information
|
||||||
|
stored in the scan duuplicate filter. If it is 0, the scan duuplicate filter will not be cleared
|
||||||
|
until the scanning is disabled. Duplicate advertisements for this period should not be sent to the
|
||||||
|
Host in advertising report events.
|
||||||
|
There are two scenarios where the ADV packet will be repeatedly reported:
|
||||||
|
1. The duplicate scan cache is full, the controller will delete the oldest device information and
|
||||||
|
add new device information.
|
||||||
|
2. When the refresh period is up, the controller will clear all device information and start filtering
|
||||||
|
again.
|
||||||
|
|
||||||
config BT_CTRL_BLE_MESH_SCAN_DUPL_EN
|
config BT_CTRL_BLE_MESH_SCAN_DUPL_EN
|
||||||
bool "Special duplicate scan mechanism for BLE Mesh scan"
|
bool "Special duplicate scan mechanism for BLE Mesh scan"
|
||||||
depends on BT_CTRL_BLE_SCAN_DUPL
|
depends on BT_CTRL_BLE_SCAN_DUPL
|
||||||
|
@@ -318,6 +318,8 @@ static void btdm_slp_tmr_callback(void *arg);
|
|||||||
|
|
||||||
static esp_err_t try_heap_caps_add_region(intptr_t start, intptr_t end);
|
static esp_err_t try_heap_caps_add_region(intptr_t start, intptr_t end);
|
||||||
|
|
||||||
|
static void bt_controller_deinit_internal(void);
|
||||||
|
|
||||||
/* Local variable definition
|
/* Local variable definition
|
||||||
***************************************************************************
|
***************************************************************************
|
||||||
*/
|
*/
|
||||||
@@ -1318,73 +1320,9 @@ esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg)
|
|||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
if (s_lp_stat.phy_enabled) {
|
|
||||||
esp_phy_disable();
|
|
||||||
s_lp_stat.phy_enabled = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
do {
|
bt_controller_deinit_internal();
|
||||||
// deinit low power control resources
|
|
||||||
#ifdef CONFIG_PM_ENABLE
|
|
||||||
if (s_lp_cntl.no_light_sleep) {
|
|
||||||
if (s_light_sleep_pm_lock != NULL) {
|
|
||||||
esp_pm_lock_delete(s_light_sleep_pm_lock);
|
|
||||||
s_light_sleep_pm_lock = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (s_pm_lock != NULL) {
|
|
||||||
esp_pm_lock_delete(s_pm_lock);
|
|
||||||
s_pm_lock = NULL;
|
|
||||||
s_lp_stat.pm_lock_released = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
if (s_lp_cntl.wakeup_timer_required && s_btdm_slp_tmr != NULL) {
|
|
||||||
esp_timer_delete(s_btdm_slp_tmr);
|
|
||||||
s_btdm_slp_tmr = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if CONFIG_MAC_BB_PD
|
|
||||||
if (s_lp_cntl.mac_bb_pd) {
|
|
||||||
btdm_deep_sleep_mem_deinit();
|
|
||||||
s_lp_cntl.mac_bb_pd = 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (s_lp_cntl.enable) {
|
|
||||||
btdm_vnd_offload_task_deregister(BTDM_VND_OL_SIG_WAKEUP_TMR);
|
|
||||||
if (s_wakeup_req_sem != NULL) {
|
|
||||||
semphr_delete_wrapper(s_wakeup_req_sem);
|
|
||||||
s_wakeup_req_sem = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (s_lp_cntl.lpclk_sel == BTDM_LPCLK_SEL_XTAL) {
|
|
||||||
#ifdef CONFIG_BT_CTRL_MAIN_XTAL_PU_DURING_LIGHT_SLEEP
|
|
||||||
if (s_lp_cntl.main_xtal_pu) {
|
|
||||||
ESP_ERROR_CHECK(esp_sleep_pd_config(ESP_PD_DOMAIN_XTAL, ESP_PD_OPTION_OFF));
|
|
||||||
s_lp_cntl.main_xtal_pu = 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
btdm_lpclk_select_src(BTDM_LPCLK_SEL_RTC_SLOW);
|
|
||||||
btdm_lpclk_set_div(0);
|
|
||||||
#if CONFIG_SW_COEXIST_ENABLE
|
|
||||||
coex_update_lpclk_interval();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
btdm_lpcycle_us = 0;
|
|
||||||
} while (0);
|
|
||||||
|
|
||||||
#if CONFIG_MAC_BB_PD
|
|
||||||
esp_unregister_mac_bb_pd_callback(btdm_mac_bb_power_down_cb);
|
|
||||||
|
|
||||||
esp_unregister_mac_bb_pu_callback(btdm_mac_bb_power_up_cb);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (osi_funcs_p != NULL) {
|
|
||||||
free(osi_funcs_p);
|
|
||||||
osi_funcs_p = NULL;
|
|
||||||
}
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1395,31 +1333,47 @@ esp_err_t esp_bt_controller_deinit(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
btdm_controller_deinit();
|
btdm_controller_deinit();
|
||||||
|
|
||||||
|
bt_controller_deinit_internal();
|
||||||
|
|
||||||
|
return ESP_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void bt_controller_deinit_internal(void)
|
||||||
|
{
|
||||||
periph_module_disable(PERIPH_BT_MODULE);
|
periph_module_disable(PERIPH_BT_MODULE);
|
||||||
|
|
||||||
if (s_lp_stat.phy_enabled) {
|
if (s_lp_stat.phy_enabled) {
|
||||||
esp_phy_disable();
|
esp_phy_disable();
|
||||||
s_lp_stat.phy_enabled = 0;
|
s_lp_stat.phy_enabled = 0;
|
||||||
} else {
|
|
||||||
assert(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// deinit low power control resources
|
// deinit low power control resources
|
||||||
do {
|
do {
|
||||||
|
|
||||||
#if CONFIG_MAC_BB_PD
|
#if CONFIG_MAC_BB_PD
|
||||||
|
if (s_lp_cntl.mac_bb_pd) {
|
||||||
btdm_deep_sleep_mem_deinit();
|
btdm_deep_sleep_mem_deinit();
|
||||||
|
s_lp_cntl.mac_bb_pd = 0;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_PM_ENABLE
|
#ifdef CONFIG_PM_ENABLE
|
||||||
if (s_lp_cntl.no_light_sleep) {
|
if (s_lp_cntl.no_light_sleep) {
|
||||||
|
if (s_light_sleep_pm_lock != NULL) {
|
||||||
esp_pm_lock_delete(s_light_sleep_pm_lock);
|
esp_pm_lock_delete(s_light_sleep_pm_lock);
|
||||||
s_light_sleep_pm_lock = NULL;
|
s_light_sleep_pm_lock = NULL;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (s_pm_lock != NULL) {
|
||||||
esp_pm_lock_delete(s_pm_lock);
|
esp_pm_lock_delete(s_pm_lock);
|
||||||
s_pm_lock = NULL;
|
s_pm_lock = NULL;
|
||||||
s_lp_stat.pm_lock_released = 0;
|
s_lp_stat.pm_lock_released = 0;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (s_lp_cntl.wakeup_timer_required) {
|
if (s_lp_cntl.wakeup_timer_required) {
|
||||||
if (s_lp_stat.wakeup_timer_started) {
|
if (s_lp_stat.wakeup_timer_started) {
|
||||||
esp_timer_stop(s_btdm_slp_tmr);
|
esp_timer_stop(s_btdm_slp_tmr);
|
||||||
@@ -1431,10 +1385,11 @@ esp_err_t esp_bt_controller_deinit(void)
|
|||||||
|
|
||||||
if (s_lp_cntl.enable) {
|
if (s_lp_cntl.enable) {
|
||||||
btdm_vnd_offload_task_deregister(BTDM_VND_OL_SIG_WAKEUP_TMR);
|
btdm_vnd_offload_task_deregister(BTDM_VND_OL_SIG_WAKEUP_TMR);
|
||||||
|
if (s_wakeup_req_sem != NULL) {
|
||||||
semphr_delete_wrapper(s_wakeup_req_sem);
|
semphr_delete_wrapper(s_wakeup_req_sem);
|
||||||
s_wakeup_req_sem = NULL;
|
s_wakeup_req_sem = NULL;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (s_lp_cntl.lpclk_sel == BTDM_LPCLK_SEL_XTAL) {
|
if (s_lp_cntl.lpclk_sel == BTDM_LPCLK_SEL_XTAL) {
|
||||||
#ifdef CONFIG_BT_CTRL_MAIN_XTAL_PU_DURING_LIGHT_SLEEP
|
#ifdef CONFIG_BT_CTRL_MAIN_XTAL_PU_DURING_LIGHT_SLEEP
|
||||||
@@ -1464,11 +1419,12 @@ esp_err_t esp_bt_controller_deinit(void)
|
|||||||
#endif
|
#endif
|
||||||
esp_phy_modem_deinit();
|
esp_phy_modem_deinit();
|
||||||
|
|
||||||
|
if (osi_funcs_p != NULL) {
|
||||||
free(osi_funcs_p);
|
free(osi_funcs_p);
|
||||||
osi_funcs_p = NULL;
|
osi_funcs_p = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
btdm_controller_status = ESP_BT_CONTROLLER_STATUS_IDLE;
|
btdm_controller_status = ESP_BT_CONTROLLER_STATUS_IDLE;
|
||||||
return ESP_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
esp_err_t esp_bt_controller_enable(esp_bt_mode_t mode)
|
esp_err_t esp_bt_controller_enable(esp_bt_mode_t mode)
|
||||||
|
Submodule components/bt/controller/lib_esp32 updated: dbaeb136ca...d4a224c5d6
Submodule components/bt/controller/lib_esp32c3_family updated: 79152b5190...bba9af9259
@@ -49,7 +49,7 @@ extern "C" {
|
|||||||
|
|
||||||
#endif //CONFIG_BT_ENABLED
|
#endif //CONFIG_BT_ENABLED
|
||||||
|
|
||||||
#define ESP_BT_CONTROLLER_CONFIG_MAGIC_VAL 0x20200622
|
#define ESP_BT_CONTROLLER_CONFIG_MAGIC_VAL 0x20221207
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Bluetooth mode for controller enable/disable
|
* @brief Bluetooth mode for controller enable/disable
|
||||||
@@ -127,6 +127,12 @@ the adv packet will be discarded until the memory is restored. */
|
|||||||
#define MESH_DUPLICATE_SCAN_CACHE_SIZE 0
|
#define MESH_DUPLICATE_SCAN_CACHE_SIZE 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_BTDM_SCAN_DUPL_CACHE_REFRESH_PERIOD
|
||||||
|
#define SCAN_DUPL_CACHE_REFRESH_PERIOD CONFIG_BTDM_SCAN_DUPL_CACHE_REFRESH_PERIOD
|
||||||
|
#else
|
||||||
|
#define SCAN_DUPL_CACHE_REFRESH_PERIOD 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_BTDM_CTRL_MODE_BLE_ONLY)
|
#if defined(CONFIG_BTDM_CTRL_MODE_BLE_ONLY)
|
||||||
#define BTDM_CONTROLLER_MODE_EFF ESP_BT_MODE_BLE
|
#define BTDM_CONTROLLER_MODE_EFF ESP_BT_MODE_BLE
|
||||||
#elif defined(CONFIG_BTDM_CTRL_MODE_BR_EDR_ONLY)
|
#elif defined(CONFIG_BTDM_CTRL_MODE_BR_EDR_ONLY)
|
||||||
@@ -182,6 +188,7 @@ the adv packet will be discarded until the memory is restored. */
|
|||||||
.pcm_role = CONFIG_BTDM_CTRL_PCM_ROLE_EFF, \
|
.pcm_role = CONFIG_BTDM_CTRL_PCM_ROLE_EFF, \
|
||||||
.pcm_polar = CONFIG_BTDM_CTRL_PCM_POLAR_EFF, \
|
.pcm_polar = CONFIG_BTDM_CTRL_PCM_POLAR_EFF, \
|
||||||
.hli = BTDM_CTRL_HLI, \
|
.hli = BTDM_CTRL_HLI, \
|
||||||
|
.dup_list_refresh_period = SCAN_DUPL_CACHE_REFRESH_PERIOD, \
|
||||||
.magic = ESP_BT_CONTROLLER_CONFIG_MAGIC_VAL, \
|
.magic = ESP_BT_CONTROLLER_CONFIG_MAGIC_VAL, \
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -224,6 +231,7 @@ typedef struct {
|
|||||||
uint8_t pcm_role; /*!< PCM role (master & slave)*/
|
uint8_t pcm_role; /*!< PCM role (master & slave)*/
|
||||||
uint8_t pcm_polar; /*!< PCM polar trig (falling clk edge & rising clk edge) */
|
uint8_t pcm_polar; /*!< PCM polar trig (falling clk edge & rising clk edge) */
|
||||||
bool hli; /*!< Using high level interrupt or not */
|
bool hli; /*!< Using high level interrupt or not */
|
||||||
|
uint16_t dup_list_refresh_period; /*!< Duplicate scan list refresh period */
|
||||||
uint32_t magic; /*!< Magic number */
|
uint32_t magic; /*!< Magic number */
|
||||||
} esp_bt_controller_config_t;
|
} esp_bt_controller_config_t;
|
||||||
|
|
||||||
|
@@ -18,7 +18,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define ESP_BT_CTRL_CONFIG_MAGIC_VAL 0x5A5AA5A5
|
#define ESP_BT_CTRL_CONFIG_MAGIC_VAL 0x5A5AA5A5
|
||||||
#define ESP_BT_CTRL_CONFIG_VERSION 0x02209230
|
#define ESP_BT_CTRL_CONFIG_VERSION 0x02212090
|
||||||
|
|
||||||
#define ESP_BT_HCI_TL_MAGIC_VALUE 0xfadebead
|
#define ESP_BT_HCI_TL_MAGIC_VALUE 0xfadebead
|
||||||
#define ESP_BT_HCI_TL_VERSION 0x00010000
|
#define ESP_BT_HCI_TL_VERSION 0x00010000
|
||||||
@@ -129,6 +129,12 @@ typedef void (* esp_bt_hci_tl_callback_t) (void *arg, uint8_t status);
|
|||||||
#define MESH_DUPLICATE_SCAN_CACHE_SIZE 0
|
#define MESH_DUPLICATE_SCAN_CACHE_SIZE 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef CONFIG_BT_CTRL_DUPL_SCAN_CACHE_REFRESH_PERIOD
|
||||||
|
#define DUPL_SCAN_CACHE_REFRESH_PERIOD 0
|
||||||
|
#else
|
||||||
|
#define DUPL_SCAN_CACHE_REFRESH_PERIOD CONFIG_BT_CTRL_DUPL_SCAN_CACHE_REFRESH_PERIOD
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_BT_CTRL_AGC_RECORRECT_EN
|
#ifdef CONFIG_BT_CTRL_AGC_RECORRECT_EN
|
||||||
#define BT_CTRL_AGC_RECORRECT_EN CONFIG_BT_CTRL_AGC_RECORRECT_EN
|
#define BT_CTRL_AGC_RECORRECT_EN CONFIG_BT_CTRL_AGC_RECORRECT_EN
|
||||||
#else
|
#else
|
||||||
@@ -188,6 +194,7 @@ typedef void (* esp_bt_hci_tl_callback_t) (void *arg, uint8_t status);
|
|||||||
.hw_recorrect_en = AGC_RECORRECT_EN, \
|
.hw_recorrect_en = AGC_RECORRECT_EN, \
|
||||||
.cca_thresh = CONFIG_BT_CTRL_HW_CCA_VAL, \
|
.cca_thresh = CONFIG_BT_CTRL_HW_CCA_VAL, \
|
||||||
.scan_backoff_upperlimitmax = BT_CTRL_SCAN_BACKOFF_UPPERLIMITMAX, \
|
.scan_backoff_upperlimitmax = BT_CTRL_SCAN_BACKOFF_UPPERLIMITMAX, \
|
||||||
|
.dup_list_refresh_period = DUPL_SCAN_CACHE_REFRESH_PERIOD, \
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
@@ -256,6 +263,7 @@ typedef struct {
|
|||||||
uint8_t hw_recorrect_en;
|
uint8_t hw_recorrect_en;
|
||||||
uint8_t cca_thresh; /*!< cca threshold*/
|
uint8_t cca_thresh; /*!< cca threshold*/
|
||||||
uint16_t scan_backoff_upperlimitmax; /*!< scan backoff upperlimitmax value */
|
uint16_t scan_backoff_upperlimitmax; /*!< scan backoff upperlimitmax value */
|
||||||
|
uint16_t dup_list_refresh_period; /*!< duplicate scan list refresh time */
|
||||||
} esp_bt_controller_config_t;
|
} esp_bt_controller_config_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -18,7 +18,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define ESP_BT_CTRL_CONFIG_MAGIC_VAL 0x5A5AA5A5
|
#define ESP_BT_CTRL_CONFIG_MAGIC_VAL 0x5A5AA5A5
|
||||||
#define ESP_BT_CTRL_CONFIG_VERSION 0x02209230
|
#define ESP_BT_CTRL_CONFIG_VERSION 0x02212090
|
||||||
|
|
||||||
#define ESP_BT_HCI_TL_MAGIC_VALUE 0xfadebead
|
#define ESP_BT_HCI_TL_MAGIC_VALUE 0xfadebead
|
||||||
#define ESP_BT_HCI_TL_VERSION 0x00010000
|
#define ESP_BT_HCI_TL_VERSION 0x00010000
|
||||||
@@ -129,6 +129,12 @@ typedef void (* esp_bt_hci_tl_callback_t) (void *arg, uint8_t status);
|
|||||||
#define MESH_DUPLICATE_SCAN_CACHE_SIZE 0
|
#define MESH_DUPLICATE_SCAN_CACHE_SIZE 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef CONFIG_BT_CTRL_DUPL_SCAN_CACHE_REFRESH_PERIOD
|
||||||
|
#define DUPL_SCAN_CACHE_REFRESH_PERIOD 0
|
||||||
|
#else
|
||||||
|
#define DUPL_SCAN_CACHE_REFRESH_PERIOD CONFIG_BT_CTRL_DUPL_SCAN_CACHE_REFRESH_PERIOD
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_BT_CTRL_SCAN_BACKOFF_UPPERLIMITMAX
|
#ifdef CONFIG_BT_CTRL_SCAN_BACKOFF_UPPERLIMITMAX
|
||||||
#define BT_CTRL_SCAN_BACKOFF_UPPERLIMITMAX CONFIG_BT_CTRL_SCAN_BACKOFF_UPPERLIMITMAX
|
#define BT_CTRL_SCAN_BACKOFF_UPPERLIMITMAX CONFIG_BT_CTRL_SCAN_BACKOFF_UPPERLIMITMAX
|
||||||
#else
|
#else
|
||||||
@@ -187,6 +193,7 @@ typedef void (* esp_bt_hci_tl_callback_t) (void *arg, uint8_t status);
|
|||||||
.hw_recorrect_en = AGC_RECORRECT_EN, \
|
.hw_recorrect_en = AGC_RECORRECT_EN, \
|
||||||
.cca_thresh = CONFIG_BT_CTRL_HW_CCA_VAL, \
|
.cca_thresh = CONFIG_BT_CTRL_HW_CCA_VAL, \
|
||||||
.scan_backoff_upperlimitmax = BT_CTRL_SCAN_BACKOFF_UPPERLIMITMAX, \
|
.scan_backoff_upperlimitmax = BT_CTRL_SCAN_BACKOFF_UPPERLIMITMAX, \
|
||||||
|
.dup_list_refresh_period = DUPL_SCAN_CACHE_REFRESH_PERIOD, \
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
@@ -255,6 +262,7 @@ typedef struct {
|
|||||||
uint8_t hw_recorrect_en;
|
uint8_t hw_recorrect_en;
|
||||||
uint8_t cca_thresh; /*!< cca threshold*/
|
uint8_t cca_thresh; /*!< cca threshold*/
|
||||||
uint16_t scan_backoff_upperlimitmax; /*!< scan backoff upperlimitmax value */
|
uint16_t scan_backoff_upperlimitmax; /*!< scan backoff upperlimitmax value */
|
||||||
|
uint16_t dup_list_refresh_period; /*!< duplicate scan list refresh time */
|
||||||
} esp_bt_controller_config_t;
|
} esp_bt_controller_config_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -1,3 +1,2 @@
|
|||||||
idf_component_register(SRCS "ble_ancs_demo.c" "ble_ancs.c"
|
idf_component_register(SRCS "ble_ancs_demo.c" "ble_ancs.c"
|
||||||
INCLUDE_DIRS ".")
|
INCLUDE_DIRS ".")
|
||||||
target_compile_options(${COMPONENT_LIB} PRIVATE "-Wno-format")
|
|
||||||
|
@@ -1,11 +1,12 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2021 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <inttypes.h>
|
||||||
#include "esp_log.h"
|
#include "esp_log.h"
|
||||||
#include "ble_ancs.h"
|
#include "ble_ancs.h"
|
||||||
|
|
||||||
@@ -113,7 +114,7 @@ void esp_receive_apple_notification_source(uint8_t *message, uint16_t message_le
|
|||||||
char *Cidstr = CategoryID_to_String(CategoryID);
|
char *Cidstr = CategoryID_to_String(CategoryID);
|
||||||
uint8_t CategoryCount = message[3];
|
uint8_t CategoryCount = message[3];
|
||||||
uint32_t NotificationUID = (message[4]) | (message[5]<< 8) | (message[6]<< 16) | (message[7] << 24);
|
uint32_t NotificationUID = (message[4]) | (message[5]<< 8) | (message[6]<< 16) | (message[7] << 24);
|
||||||
ESP_LOGI(BLE_ANCS_TAG, "EventID:%s EventFlags:0x%x CategoryID:%s CategoryCount:%d NotificationUID:%d", EventIDS, EventFlags, Cidstr, CategoryCount, NotificationUID);
|
ESP_LOGI(BLE_ANCS_TAG, "EventID:%s EventFlags:0x%x CategoryID:%s CategoryCount:%d NotificationUID:%" PRIu32, EventIDS, EventFlags, Cidstr, CategoryCount, NotificationUID);
|
||||||
}
|
}
|
||||||
|
|
||||||
void esp_receive_apple_data_source(uint8_t *message, uint16_t message_len)
|
void esp_receive_apple_data_source(uint8_t *message, uint16_t message_len)
|
||||||
@@ -129,7 +130,7 @@ void esp_receive_apple_data_source(uint8_t *message, uint16_t message_len)
|
|||||||
uint32_t NotificationUID = (message[1]) | (message[2]<< 8) | (message[3]<< 16) | (message[4] << 24);
|
uint32_t NotificationUID = (message[1]) | (message[2]<< 8) | (message[3]<< 16) | (message[4] << 24);
|
||||||
uint32_t remian_attr_len = message_len - 5;
|
uint32_t remian_attr_len = message_len - 5;
|
||||||
uint8_t *attrs = &message[5];
|
uint8_t *attrs = &message[5];
|
||||||
ESP_LOGI(BLE_ANCS_TAG, "recevice Notification Attributes response Command_id %d NotificationUID %d", Command_id, NotificationUID);
|
ESP_LOGI(BLE_ANCS_TAG, "recevice Notification Attributes response Command_id %d NotificationUID %" PRIu32, Command_id, NotificationUID);
|
||||||
while(remian_attr_len > 0) {
|
while(remian_attr_len > 0) {
|
||||||
uint8_t AttributeID = attrs[0];
|
uint8_t AttributeID = attrs[0];
|
||||||
uint16_t len = attrs[1] | (attrs[2] << 8);
|
uint16_t len = attrs[1] | (attrs[2] << 8);
|
||||||
|
@@ -1,9 +1,10 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2021 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
#include "freertos/FreeRTOS.h"
|
#include "freertos/FreeRTOS.h"
|
||||||
#include "freertos/task.h"
|
#include "freertos/task.h"
|
||||||
#include "freertos/event_groups.h"
|
#include "freertos/event_groups.h"
|
||||||
@@ -280,7 +281,7 @@ static void gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param
|
|||||||
/* The app will receive this evt when the IO has DisplayYesNO capability and the peer device IO also has DisplayYesNo capability.
|
/* The app will receive this evt when the IO has DisplayYesNO capability and the peer device IO also has DisplayYesNo capability.
|
||||||
show the passkey number to the user to confirm it with the number displayed by peer device. */
|
show the passkey number to the user to confirm it with the number displayed by peer device. */
|
||||||
esp_ble_confirm_reply(param->ble_security.ble_req.bd_addr, true);
|
esp_ble_confirm_reply(param->ble_security.ble_req.bd_addr, true);
|
||||||
ESP_LOGI(BLE_ANCS_TAG, "ESP_GAP_BLE_NC_REQ_EVT, the passkey Notify number:%d", param->ble_security.key_notif.passkey);
|
ESP_LOGI(BLE_ANCS_TAG, "ESP_GAP_BLE_NC_REQ_EVT, the passkey Notify number:%" PRIu32, param->ble_security.key_notif.passkey);
|
||||||
break;
|
break;
|
||||||
case ESP_GAP_BLE_SEC_REQ_EVT:
|
case ESP_GAP_BLE_SEC_REQ_EVT:
|
||||||
/* send the positive(true) security response to the peer device to accept the security request.
|
/* send the positive(true) security response to the peer device to accept the security request.
|
||||||
@@ -289,7 +290,7 @@ static void gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param
|
|||||||
break;
|
break;
|
||||||
case ESP_GAP_BLE_PASSKEY_NOTIF_EVT: ///the app will receive this evt when the IO has Output capability and the peer device IO has Input capability.
|
case ESP_GAP_BLE_PASSKEY_NOTIF_EVT: ///the app will receive this evt when the IO has Output capability and the peer device IO has Input capability.
|
||||||
///show the passkey number to the user to input it in the peer device.
|
///show the passkey number to the user to input it in the peer device.
|
||||||
ESP_LOGI(BLE_ANCS_TAG, "The passkey Notify number:%06d", param->ble_security.key_notif.passkey);
|
ESP_LOGI(BLE_ANCS_TAG, "The passkey Notify number:%06" PRIu32, param->ble_security.key_notif.passkey);
|
||||||
break;
|
break;
|
||||||
case ESP_GAP_BLE_AUTH_CMPL_EVT: {
|
case ESP_GAP_BLE_AUTH_CMPL_EVT: {
|
||||||
esp_log_buffer_hex("addr", param->ble_security.auth_cmpl.bd_addr, ESP_BD_ADDR_LEN);
|
esp_log_buffer_hex("addr", param->ble_security.auth_cmpl.bd_addr, ESP_BD_ADDR_LEN);
|
||||||
|
@@ -1,4 +1,2 @@
|
|||||||
idf_component_register(SRCS "ble_compatibility_test.c"
|
idf_component_register(SRCS "ble_compatibility_test.c"
|
||||||
INCLUDE_DIRS ".")
|
INCLUDE_DIRS ".")
|
||||||
|
|
||||||
target_compile_options(${COMPONENT_LIB} PRIVATE "-Wno-format")
|
|
||||||
|
@@ -10,7 +10,7 @@
|
|||||||
*
|
*
|
||||||
*********************************************************************************/
|
*********************************************************************************/
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
#include "freertos/FreeRTOS.h"
|
#include "freertos/FreeRTOS.h"
|
||||||
#include "freertos/task.h"
|
#include "freertos/task.h"
|
||||||
#include "freertos/event_groups.h"
|
#include "freertos/event_groups.h"
|
||||||
@@ -337,7 +337,7 @@ static void gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param
|
|||||||
case ESP_GAP_BLE_NC_REQ_EVT:
|
case ESP_GAP_BLE_NC_REQ_EVT:
|
||||||
/* The app will receive this event when the IO has DisplayYesNO capability and the peer device IO also has DisplayYesNo capability.
|
/* The app will receive this event when the IO has DisplayYesNO capability and the peer device IO also has DisplayYesNo capability.
|
||||||
show the passkey number to the user to confirm it with the number displayed by peer device. */
|
show the passkey number to the user to confirm it with the number displayed by peer device. */
|
||||||
ESP_LOGI(EXAMPLE_TAG, "ESP_GAP_BLE_NC_REQ_EVT, the passkey Notify number:%d", param->ble_security.key_notif.passkey);
|
ESP_LOGI(EXAMPLE_TAG, "ESP_GAP_BLE_NC_REQ_EVT, the passkey Notify number:%" PRIu32, param->ble_security.key_notif.passkey);
|
||||||
break;
|
break;
|
||||||
case ESP_GAP_BLE_SEC_REQ_EVT:
|
case ESP_GAP_BLE_SEC_REQ_EVT:
|
||||||
/* send the positive(true) security response to the peer device to accept the security request.
|
/* send the positive(true) security response to the peer device to accept the security request.
|
||||||
@@ -346,7 +346,7 @@ static void gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param
|
|||||||
break;
|
break;
|
||||||
case ESP_GAP_BLE_PASSKEY_NOTIF_EVT: ///the app will receive this evt when the IO has Output capability and the peer device IO has Input capability.
|
case ESP_GAP_BLE_PASSKEY_NOTIF_EVT: ///the app will receive this evt when the IO has Output capability and the peer device IO has Input capability.
|
||||||
///show the passkey number to the user to input it in the peer device.
|
///show the passkey number to the user to input it in the peer device.
|
||||||
ESP_LOGI(EXAMPLE_TAG, "The passkey notify number:%d", param->ble_security.key_notif.passkey);
|
ESP_LOGI(EXAMPLE_TAG, "The passkey notify number:%06" PRIu32, param->ble_security.key_notif.passkey);
|
||||||
break;
|
break;
|
||||||
case ESP_GAP_BLE_KEY_EVT:
|
case ESP_GAP_BLE_KEY_EVT:
|
||||||
//shows the ble key info share with peer device to the user.
|
//shows the ble key info share with peer device to the user.
|
||||||
|
@@ -1,4 +1,3 @@
|
|||||||
idf_component_register(SRCS "esp_eddystone_api.c"
|
idf_component_register(SRCS "esp_eddystone_api.c"
|
||||||
"esp_eddystone_demo.c"
|
"esp_eddystone_demo.c"
|
||||||
INCLUDE_DIRS "")
|
INCLUDE_DIRS "")
|
||||||
target_compile_options(${COMPONENT_LIB} PRIVATE "-Wno-format")
|
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2021 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||||
*/
|
*/
|
||||||
@@ -14,6 +14,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <inttypes.h>
|
||||||
|
|
||||||
#include "esp_bt.h"
|
#include "esp_bt.h"
|
||||||
#include "nvs_flash.h"
|
#include "nvs_flash.h"
|
||||||
@@ -67,8 +68,8 @@ static void esp_eddystone_show_inform(const esp_eddystone_result_t* res)
|
|||||||
ESP_LOGI(DEMO_TAG, "version: %d", res->inform.tlm.version);
|
ESP_LOGI(DEMO_TAG, "version: %d", res->inform.tlm.version);
|
||||||
ESP_LOGI(DEMO_TAG, "battery voltage: %d mV", res->inform.tlm.battery_voltage);
|
ESP_LOGI(DEMO_TAG, "battery voltage: %d mV", res->inform.tlm.battery_voltage);
|
||||||
ESP_LOGI(DEMO_TAG, "beacon temperature in degrees Celsius: %6.1f", res->inform.tlm.temperature);
|
ESP_LOGI(DEMO_TAG, "beacon temperature in degrees Celsius: %6.1f", res->inform.tlm.temperature);
|
||||||
ESP_LOGI(DEMO_TAG, "adv pdu count since power-up: %d", res->inform.tlm.adv_count);
|
ESP_LOGI(DEMO_TAG, "adv pdu count since power-up: %" PRIu32, res->inform.tlm.adv_count);
|
||||||
ESP_LOGI(DEMO_TAG, "time since power-up: %d s", (res->inform.tlm.time)/10);
|
ESP_LOGI(DEMO_TAG, "time since power-up: %" PRIu32 " s", (res->inform.tlm.time)/10);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
@@ -1,3 +1,2 @@
|
|||||||
idf_component_register(SRCS "spp_client_demo.c"
|
idf_component_register(SRCS "spp_client_demo.c"
|
||||||
INCLUDE_DIRS ".")
|
INCLUDE_DIRS ".")
|
||||||
target_compile_options(${COMPONENT_LIB} PRIVATE "-Wno-format")
|
|
||||||
|
@@ -218,7 +218,7 @@ static void esp_gap_cb(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *par
|
|||||||
}
|
}
|
||||||
//the unit of the duration is second
|
//the unit of the duration is second
|
||||||
uint32_t duration = 0xFFFF;
|
uint32_t duration = 0xFFFF;
|
||||||
ESP_LOGI(GATTC_TAG, "Enable Ble Scan:during time 0x%04X minutes.",duration);
|
ESP_LOGI(GATTC_TAG, "Enable Ble Scan:during time %04" PRIx32 " minutes.",duration);
|
||||||
esp_ble_gap_start_scanning(duration);
|
esp_ble_gap_start_scanning(duration);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -1,3 +1,2 @@
|
|||||||
idf_component_register(SRCS "example_ble_client_throughput.c"
|
idf_component_register(SRCS "example_ble_client_throughput.c"
|
||||||
INCLUDE_DIRS ".")
|
INCLUDE_DIRS ".")
|
||||||
target_compile_options(${COMPONENT_LIB} PRIVATE "-Wno-format")
|
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2021 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||||
*/
|
*/
|
||||||
@@ -14,6 +14,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <inttypes.h>
|
||||||
#include "nvs.h"
|
#include "nvs.h"
|
||||||
#include "nvs_flash.h"
|
#include "nvs_flash.h"
|
||||||
|
|
||||||
@@ -490,7 +491,7 @@ static void throughput_client_task(void *param)
|
|||||||
if (start_time) {
|
if (start_time) {
|
||||||
current_time = esp_timer_get_time();
|
current_time = esp_timer_get_time();
|
||||||
bit_rate = notify_len * SECOND_TO_USECOND / (current_time - start_time);
|
bit_rate = notify_len * SECOND_TO_USECOND / (current_time - start_time);
|
||||||
ESP_LOGI(GATTC_TAG, "Notify Bit rate = %d Byte/s, = %d bit/s, time = %ds",
|
ESP_LOGI(GATTC_TAG, "Notify Bit rate = %" PRIu32 " Byte/s, = %" PRIu32 " bit/s, time = %ds",
|
||||||
bit_rate, bit_rate<<3, (int)((current_time - start_time) / SECOND_TO_USECOND));
|
bit_rate, bit_rate<<3, (int)((current_time - start_time) / SECOND_TO_USECOND));
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGI(GATTC_TAG, "Notify Bit rate = 0 Byte/s, = 0 bit/s");
|
ESP_LOGI(GATTC_TAG, "Notify Bit rate = 0 Byte/s, = 0 bit/s");
|
||||||
|
@@ -1,3 +1,2 @@
|
|||||||
idf_component_register(SRCS "example_ble_server_throughput.c"
|
idf_component_register(SRCS "example_ble_server_throughput.c"
|
||||||
INCLUDE_DIRS ".")
|
INCLUDE_DIRS ".")
|
||||||
target_compile_options(${COMPONENT_LIB} PRIVATE "-Wno-format")
|
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2021 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||||
*/
|
*/
|
||||||
@@ -13,6 +13,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <inttypes.h>
|
||||||
#include "freertos/FreeRTOS.h"
|
#include "freertos/FreeRTOS.h"
|
||||||
#include "freertos/task.h"
|
#include "freertos/task.h"
|
||||||
#include "freertos/event_groups.h"
|
#include "freertos/event_groups.h"
|
||||||
@@ -376,7 +377,7 @@ static void gatts_profile_a_event_handler(esp_gatts_cb_event_t event, esp_gatt_i
|
|||||||
esp_ble_gatts_create_service(gatts_if, &gl_profile_tab[PROFILE_A_APP_ID].service_id, GATTS_NUM_HANDLE_TEST_A);
|
esp_ble_gatts_create_service(gatts_if, &gl_profile_tab[PROFILE_A_APP_ID].service_id, GATTS_NUM_HANDLE_TEST_A);
|
||||||
break;
|
break;
|
||||||
case ESP_GATTS_READ_EVT: {
|
case ESP_GATTS_READ_EVT: {
|
||||||
ESP_LOGI(GATTS_TAG, "GATT_READ_EVT, conn_id %d, trans_id %d, handle %d\n", param->read.conn_id, param->read.trans_id, param->read.handle);
|
ESP_LOGI(GATTS_TAG, "GATT_READ_EVT, conn_id %d, trans_id %" PRIu32 ", handle %d\n", param->read.conn_id, param->read.trans_id, param->read.handle);
|
||||||
esp_gatt_rsp_t rsp;
|
esp_gatt_rsp_t rsp;
|
||||||
memset(&rsp, 0, sizeof(esp_gatt_rsp_t));
|
memset(&rsp, 0, sizeof(esp_gatt_rsp_t));
|
||||||
rsp.attr_value.handle = param->read.handle;
|
rsp.attr_value.handle = param->read.handle;
|
||||||
@@ -391,7 +392,7 @@ static void gatts_profile_a_event_handler(esp_gatts_cb_event_t event, esp_gatt_i
|
|||||||
}
|
}
|
||||||
case ESP_GATTS_WRITE_EVT: {
|
case ESP_GATTS_WRITE_EVT: {
|
||||||
#if (CONFIG_EXAMPLE_GATTS_NOTIFY_THROUGHPUT)
|
#if (CONFIG_EXAMPLE_GATTS_NOTIFY_THROUGHPUT)
|
||||||
ESP_LOGI(GATTS_TAG, "GATT_WRITE_EVT, conn_id %d, trans_id %d, handle %d", param->write.conn_id, param->write.trans_id, param->write.handle);
|
ESP_LOGI(GATTS_TAG, "GATT_WRITE_EVT, conn_id %d, trans_id %" PRIu32 ", handle %d", param->write.conn_id, param->write.trans_id, param->write.handle);
|
||||||
if (!param->write.is_prep){
|
if (!param->write.is_prep){
|
||||||
ESP_LOGI(GATTS_TAG, "GATT_WRITE_EVT, value len %d, value :", param->write.len);
|
ESP_LOGI(GATTS_TAG, "GATT_WRITE_EVT, value len %d, value :", param->write.len);
|
||||||
esp_log_buffer_hex(GATTS_TAG, param->write.value, param->write.len);
|
esp_log_buffer_hex(GATTS_TAG, param->write.value, param->write.len);
|
||||||
|
@@ -1,3 +1,2 @@
|
|||||||
idf_component_register(SRCS "example_ble_sec_gattc_demo.c"
|
idf_component_register(SRCS "example_ble_sec_gattc_demo.c"
|
||||||
INCLUDE_DIRS ".")
|
INCLUDE_DIRS ".")
|
||||||
target_compile_options(${COMPONENT_LIB} PRIVATE "-Wno-format")
|
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2021 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||||
*/
|
*/
|
||||||
@@ -18,6 +18,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <inttypes.h>
|
||||||
#include "nvs.h"
|
#include "nvs.h"
|
||||||
#include "nvs_flash.h"
|
#include "nvs_flash.h"
|
||||||
|
|
||||||
@@ -407,11 +408,11 @@ static void esp_gap_cb(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *par
|
|||||||
/* The app will receive this evt when the IO has DisplayYesNO capability and the peer device IO also has DisplayYesNo capability.
|
/* The app will receive this evt when the IO has DisplayYesNO capability and the peer device IO also has DisplayYesNo capability.
|
||||||
show the passkey number to the user to confirm it with the number displayed by peer device. */
|
show the passkey number to the user to confirm it with the number displayed by peer device. */
|
||||||
esp_ble_confirm_reply(param->ble_security.ble_req.bd_addr, true);
|
esp_ble_confirm_reply(param->ble_security.ble_req.bd_addr, true);
|
||||||
ESP_LOGI(GATTC_TAG, "ESP_GAP_BLE_NC_REQ_EVT, the passkey Notify number:%d", param->ble_security.key_notif.passkey);
|
ESP_LOGI(GATTC_TAG, "ESP_GAP_BLE_NC_REQ_EVT, the passkey Notify number:%" PRIu32, param->ble_security.key_notif.passkey);
|
||||||
break;
|
break;
|
||||||
case ESP_GAP_BLE_PASSKEY_NOTIF_EVT: ///the app will receive this evt when the IO has Output capability and the peer device IO has Input capability.
|
case ESP_GAP_BLE_PASSKEY_NOTIF_EVT: ///the app will receive this evt when the IO has Output capability and the peer device IO has Input capability.
|
||||||
///show the passkey number to the user to input it in the peer device.
|
///show the passkey number to the user to input it in the peer device.
|
||||||
ESP_LOGI(GATTC_TAG, "The passkey Notify number:%06d", param->ble_security.key_notif.passkey);
|
ESP_LOGI(GATTC_TAG, "The passkey Notify number:%06" PRIu32, param->ble_security.key_notif.passkey);
|
||||||
break;
|
break;
|
||||||
case ESP_GAP_BLE_KEY_EVT:
|
case ESP_GAP_BLE_KEY_EVT:
|
||||||
//shows the ble key info share with peer device to the user.
|
//shows the ble key info share with peer device to the user.
|
||||||
|
@@ -1,3 +1,2 @@
|
|||||||
idf_component_register(SRCS "example_ble_sec_gatts_demo.c"
|
idf_component_register(SRCS "example_ble_sec_gatts_demo.c"
|
||||||
INCLUDE_DIRS ".")
|
INCLUDE_DIRS ".")
|
||||||
target_compile_options(${COMPONENT_LIB} PRIVATE "-Wno-format")
|
|
||||||
|
@@ -1,9 +1,10 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2021 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
#include "freertos/FreeRTOS.h"
|
#include "freertos/FreeRTOS.h"
|
||||||
#include "freertos/task.h"
|
#include "freertos/task.h"
|
||||||
#include "freertos/event_groups.h"
|
#include "freertos/event_groups.h"
|
||||||
@@ -327,7 +328,7 @@ static void gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param
|
|||||||
/* The app will receive this evt when the IO has DisplayYesNO capability and the peer device IO also has DisplayYesNo capability.
|
/* The app will receive this evt when the IO has DisplayYesNO capability and the peer device IO also has DisplayYesNo capability.
|
||||||
show the passkey number to the user to confirm it with the number displayed by peer device. */
|
show the passkey number to the user to confirm it with the number displayed by peer device. */
|
||||||
esp_ble_confirm_reply(param->ble_security.ble_req.bd_addr, true);
|
esp_ble_confirm_reply(param->ble_security.ble_req.bd_addr, true);
|
||||||
ESP_LOGI(GATTS_TABLE_TAG, "ESP_GAP_BLE_NC_REQ_EVT, the passkey Notify number:%d", param->ble_security.key_notif.passkey);
|
ESP_LOGI(GATTS_TABLE_TAG, "ESP_GAP_BLE_NC_REQ_EVT, the passkey Notify number:%" PRIu32, param->ble_security.key_notif.passkey);
|
||||||
break;
|
break;
|
||||||
case ESP_GAP_BLE_SEC_REQ_EVT:
|
case ESP_GAP_BLE_SEC_REQ_EVT:
|
||||||
/* send the positive(true) security response to the peer device to accept the security request.
|
/* send the positive(true) security response to the peer device to accept the security request.
|
||||||
@@ -336,7 +337,7 @@ static void gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param
|
|||||||
break;
|
break;
|
||||||
case ESP_GAP_BLE_PASSKEY_NOTIF_EVT: ///the app will receive this evt when the IO has Output capability and the peer device IO has Input capability.
|
case ESP_GAP_BLE_PASSKEY_NOTIF_EVT: ///the app will receive this evt when the IO has Output capability and the peer device IO has Input capability.
|
||||||
///show the passkey number to the user to input it in the peer device.
|
///show the passkey number to the user to input it in the peer device.
|
||||||
ESP_LOGI(GATTS_TABLE_TAG, "The passkey Notify number:%06d", param->ble_security.key_notif.passkey);
|
ESP_LOGI(GATTS_TABLE_TAG, "The passkey Notify number:%06" PRIu32, param->ble_security.key_notif.passkey);
|
||||||
break;
|
break;
|
||||||
case ESP_GAP_BLE_KEY_EVT:
|
case ESP_GAP_BLE_KEY_EVT:
|
||||||
//shows the ble key info share with peer device to the user.
|
//shows the ble key info share with peer device to the user.
|
||||||
|
@@ -1,3 +1,2 @@
|
|||||||
idf_component_register(SRCS "gatts_demo.c"
|
idf_component_register(SRCS "gatts_demo.c"
|
||||||
INCLUDE_DIRS ".")
|
INCLUDE_DIRS ".")
|
||||||
target_compile_options(${COMPONENT_LIB} PRIVATE "-Wno-format")
|
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2021 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||||
*/
|
*/
|
||||||
@@ -17,6 +17,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <inttypes.h>
|
||||||
#include "freertos/FreeRTOS.h"
|
#include "freertos/FreeRTOS.h"
|
||||||
#include "freertos/task.h"
|
#include "freertos/task.h"
|
||||||
#include "freertos/event_groups.h"
|
#include "freertos/event_groups.h"
|
||||||
@@ -336,7 +337,7 @@ static void gatts_profile_a_event_handler(esp_gatts_cb_event_t event, esp_gatt_i
|
|||||||
esp_ble_gatts_create_service(gatts_if, &gl_profile_tab[PROFILE_A_APP_ID].service_id, GATTS_NUM_HANDLE_TEST_A);
|
esp_ble_gatts_create_service(gatts_if, &gl_profile_tab[PROFILE_A_APP_ID].service_id, GATTS_NUM_HANDLE_TEST_A);
|
||||||
break;
|
break;
|
||||||
case ESP_GATTS_READ_EVT: {
|
case ESP_GATTS_READ_EVT: {
|
||||||
ESP_LOGI(GATTS_TAG, "GATT_READ_EVT, conn_id %d, trans_id %d, handle %d\n", param->read.conn_id, param->read.trans_id, param->read.handle);
|
ESP_LOGI(GATTS_TAG, "GATT_READ_EVT, conn_id %d, trans_id %" PRIu32 ", handle %d\n", param->read.conn_id, param->read.trans_id, param->read.handle);
|
||||||
esp_gatt_rsp_t rsp;
|
esp_gatt_rsp_t rsp;
|
||||||
memset(&rsp, 0, sizeof(esp_gatt_rsp_t));
|
memset(&rsp, 0, sizeof(esp_gatt_rsp_t));
|
||||||
rsp.attr_value.handle = param->read.handle;
|
rsp.attr_value.handle = param->read.handle;
|
||||||
@@ -350,7 +351,7 @@ static void gatts_profile_a_event_handler(esp_gatts_cb_event_t event, esp_gatt_i
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ESP_GATTS_WRITE_EVT: {
|
case ESP_GATTS_WRITE_EVT: {
|
||||||
ESP_LOGI(GATTS_TAG, "GATT_WRITE_EVT, conn_id %d, trans_id %d, handle %d", param->write.conn_id, param->write.trans_id, param->write.handle);
|
ESP_LOGI(GATTS_TAG, "GATT_WRITE_EVT, conn_id %d, trans_id %" PRIu32 ", handle %d", param->write.conn_id, param->write.trans_id, param->write.handle);
|
||||||
if (!param->write.is_prep){
|
if (!param->write.is_prep){
|
||||||
ESP_LOGI(GATTS_TAG, "GATT_WRITE_EVT, value len %d, value :", param->write.len);
|
ESP_LOGI(GATTS_TAG, "GATT_WRITE_EVT, value len %d, value :", param->write.len);
|
||||||
esp_log_buffer_hex(GATTS_TAG, param->write.value, param->write.len);
|
esp_log_buffer_hex(GATTS_TAG, param->write.value, param->write.len);
|
||||||
@@ -508,7 +509,7 @@ static void gatts_profile_b_event_handler(esp_gatts_cb_event_t event, esp_gatt_i
|
|||||||
esp_ble_gatts_create_service(gatts_if, &gl_profile_tab[PROFILE_B_APP_ID].service_id, GATTS_NUM_HANDLE_TEST_B);
|
esp_ble_gatts_create_service(gatts_if, &gl_profile_tab[PROFILE_B_APP_ID].service_id, GATTS_NUM_HANDLE_TEST_B);
|
||||||
break;
|
break;
|
||||||
case ESP_GATTS_READ_EVT: {
|
case ESP_GATTS_READ_EVT: {
|
||||||
ESP_LOGI(GATTS_TAG, "GATT_READ_EVT, conn_id %d, trans_id %d, handle %d\n", param->read.conn_id, param->read.trans_id, param->read.handle);
|
ESP_LOGI(GATTS_TAG, "GATT_READ_EVT, conn_id %d, trans_id %" PRIu32 ", handle %d\n", param->read.conn_id, param->read.trans_id, param->read.handle);
|
||||||
esp_gatt_rsp_t rsp;
|
esp_gatt_rsp_t rsp;
|
||||||
memset(&rsp, 0, sizeof(esp_gatt_rsp_t));
|
memset(&rsp, 0, sizeof(esp_gatt_rsp_t));
|
||||||
rsp.attr_value.handle = param->read.handle;
|
rsp.attr_value.handle = param->read.handle;
|
||||||
@@ -522,7 +523,7 @@ static void gatts_profile_b_event_handler(esp_gatts_cb_event_t event, esp_gatt_i
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ESP_GATTS_WRITE_EVT: {
|
case ESP_GATTS_WRITE_EVT: {
|
||||||
ESP_LOGI(GATTS_TAG, "GATT_WRITE_EVT, conn_id %d, trans_id %d, handle %d\n", param->write.conn_id, param->write.trans_id, param->write.handle);
|
ESP_LOGI(GATTS_TAG, "GATT_WRITE_EVT, conn_id %d, trans_id %" PRIu32 ", handle %d\n", param->write.conn_id, param->write.trans_id, param->write.handle);
|
||||||
if (!param->write.is_prep){
|
if (!param->write.is_prep){
|
||||||
ESP_LOGI(GATTS_TAG, "GATT_WRITE_EVT, value len %d, value :", param->write.len);
|
ESP_LOGI(GATTS_TAG, "GATT_WRITE_EVT, value len %d, value :", param->write.len);
|
||||||
esp_log_buffer_hex(GATTS_TAG, param->write.value, param->write.len);
|
esp_log_buffer_hex(GATTS_TAG, param->write.value, param->write.len);
|
||||||
|
@@ -1,3 +1,2 @@
|
|||||||
idf_component_register(SRCS "ble50_sec_gattc_demo.c"
|
idf_component_register(SRCS "ble50_sec_gattc_demo.c"
|
||||||
INCLUDE_DIRS ".")
|
INCLUDE_DIRS ".")
|
||||||
target_compile_options(${COMPONENT_LIB} PRIVATE "-Wno-format")
|
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2021 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||||
*/
|
*/
|
||||||
@@ -18,6 +18,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <inttypes.h>
|
||||||
#include "nvs.h"
|
#include "nvs.h"
|
||||||
#include "nvs_flash.h"
|
#include "nvs_flash.h"
|
||||||
|
|
||||||
@@ -450,11 +451,11 @@ static void esp_gap_cb(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *par
|
|||||||
/* The app will receive this evt when the IO has DisplayYesNO capability and the peer device IO also has DisplayYesNo capability.
|
/* The app will receive this evt when the IO has DisplayYesNO capability and the peer device IO also has DisplayYesNo capability.
|
||||||
show the passkey number to the user to confirm it with the number displayed by peer device. */
|
show the passkey number to the user to confirm it with the number displayed by peer device. */
|
||||||
esp_ble_confirm_reply(param->ble_security.ble_req.bd_addr, true);
|
esp_ble_confirm_reply(param->ble_security.ble_req.bd_addr, true);
|
||||||
ESP_LOGI(GATTC_TAG, "ESP_GAP_BLE_NC_REQ_EVT, the passkey Notify number:%d", param->ble_security.key_notif.passkey);
|
ESP_LOGI(GATTC_TAG, "ESP_GAP_BLE_NC_REQ_EVT, the passkey Notify number:%" PRIu32, param->ble_security.key_notif.passkey);
|
||||||
break;
|
break;
|
||||||
case ESP_GAP_BLE_PASSKEY_NOTIF_EVT: ///the app will receive this evt when the IO has Output capability and the peer device IO has Input capability.
|
case ESP_GAP_BLE_PASSKEY_NOTIF_EVT: ///the app will receive this evt when the IO has Output capability and the peer device IO has Input capability.
|
||||||
///show the passkey number to the user to input it in the peer device.
|
///show the passkey number to the user to input it in the peer device.
|
||||||
ESP_LOGI(GATTC_TAG, "The passkey Notify number:%06d", param->ble_security.key_notif.passkey);
|
ESP_LOGI(GATTC_TAG, "The passkey Notify number:%06" PRIu32, param->ble_security.key_notif.passkey);
|
||||||
break;
|
break;
|
||||||
case ESP_GAP_BLE_KEY_EVT:
|
case ESP_GAP_BLE_KEY_EVT:
|
||||||
//shows the ble key info share with peer device to the user.
|
//shows the ble key info share with peer device to the user.
|
||||||
|
@@ -1,3 +1,2 @@
|
|||||||
idf_component_register(SRCS "ble50_sec_gatts_demo.c"
|
idf_component_register(SRCS "ble50_sec_gatts_demo.c"
|
||||||
INCLUDE_DIRS ".")
|
INCLUDE_DIRS ".")
|
||||||
target_compile_options(${COMPONENT_LIB} PRIVATE "-Wno-format")
|
|
||||||
|
@@ -4,6 +4,7 @@
|
|||||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
#include "freertos/FreeRTOS.h"
|
#include "freertos/FreeRTOS.h"
|
||||||
#include "freertos/task.h"
|
#include "freertos/task.h"
|
||||||
#include "freertos/event_groups.h"
|
#include "freertos/event_groups.h"
|
||||||
@@ -291,7 +292,7 @@ static void gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param
|
|||||||
/* The app will receive this evt when the IO has DisplayYesNO capability and the peer device IO also has DisplayYesNo capability.
|
/* The app will receive this evt when the IO has DisplayYesNO capability and the peer device IO also has DisplayYesNo capability.
|
||||||
show the passkey number to the user to confirm it with the number displayed by peer device. */
|
show the passkey number to the user to confirm it with the number displayed by peer device. */
|
||||||
esp_ble_confirm_reply(param->ble_security.ble_req.bd_addr, true);
|
esp_ble_confirm_reply(param->ble_security.ble_req.bd_addr, true);
|
||||||
ESP_LOGI(GATTS_TABLE_TAG, "ESP_GAP_BLE_NC_REQ_EVT, the passkey Notify number:%d", param->ble_security.key_notif.passkey);
|
ESP_LOGI(GATTS_TABLE_TAG, "ESP_GAP_BLE_NC_REQ_EVT, the passkey Notify number:%" PRIu32, param->ble_security.key_notif.passkey);
|
||||||
break;
|
break;
|
||||||
case ESP_GAP_BLE_SEC_REQ_EVT:
|
case ESP_GAP_BLE_SEC_REQ_EVT:
|
||||||
/* send the positive(true) security response to the peer device to accept the security request.
|
/* send the positive(true) security response to the peer device to accept the security request.
|
||||||
@@ -300,7 +301,7 @@ static void gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param
|
|||||||
break;
|
break;
|
||||||
case ESP_GAP_BLE_PASSKEY_NOTIF_EVT: ///the app will receive this evt when the IO has Output capability and the peer device IO has Input capability.
|
case ESP_GAP_BLE_PASSKEY_NOTIF_EVT: ///the app will receive this evt when the IO has Output capability and the peer device IO has Input capability.
|
||||||
///show the passkey number to the user to input it in the peer device.
|
///show the passkey number to the user to input it in the peer device.
|
||||||
ESP_LOGI(GATTS_TABLE_TAG, "The passkey Notify number:%06d", param->ble_security.key_notif.passkey);
|
ESP_LOGI(GATTS_TABLE_TAG, "The passkey Notify number:%06" PRIu32, param->ble_security.key_notif.passkey);
|
||||||
break;
|
break;
|
||||||
case ESP_GAP_BLE_KEY_EVT:
|
case ESP_GAP_BLE_KEY_EVT:
|
||||||
//shows the ble key info share with peer device to the user.
|
//shows the ble key info share with peer device to the user.
|
||||||
|
Reference in New Issue
Block a user