mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
Merge branch 'backport/fix_ble_menuconfig_v5.2' into 'release/v5.2'
Backport/fix ble menuconfig v5.2(backport v5.2) See merge request espressif/esp-idf!27498
This commit is contained in:
commit
1f2d548fbb
@ -1051,7 +1051,7 @@ config BT_ACL_CONNECTIONS
|
||||
|
||||
config BT_MULTI_CONNECTION_ENBALE
|
||||
bool "Enable BLE multi-conections"
|
||||
depends on BT_BLUEDROID_ENABLED
|
||||
depends on BT_BLE_ENABLED
|
||||
default y
|
||||
help
|
||||
Enable this option if there are multiple connections
|
||||
@ -1072,7 +1072,7 @@ config BT_BLE_DYNAMIC_ENV_MEMORY
|
||||
|
||||
config BT_BLE_HOST_QUEUE_CONG_CHECK
|
||||
bool "BLE queue congestion check"
|
||||
depends on BT_BLUEDROID_ENABLED
|
||||
depends on BT_BLE_ENABLED
|
||||
default n
|
||||
help
|
||||
When scanning and scan duplicate is not enabled, if there are a lot of adv packets around
|
||||
@ -1097,7 +1097,7 @@ config BT_BLE_ACT_SCAN_REP_ADV_SCAN
|
||||
|
||||
config BT_BLE_ESTAB_LINK_CONN_TOUT
|
||||
int "Timeout of BLE connection establishment"
|
||||
depends on BT_BLUEDROID_ENABLED
|
||||
depends on BT_BLE_ENABLED
|
||||
range 1 60
|
||||
default 30
|
||||
help
|
||||
@ -1133,7 +1133,7 @@ config BT_BLE_RPA_SUPPORTED
|
||||
|
||||
config BT_BLE_RPA_TIMEOUT
|
||||
int "Timeout of resolvable private address"
|
||||
depends on BT_BLUEDROID_ENABLED
|
||||
depends on BT_BLE_ENABLED
|
||||
range 1 3600
|
||||
default 900
|
||||
help
|
||||
@ -1142,35 +1142,43 @@ config BT_BLE_RPA_TIMEOUT
|
||||
|
||||
config BT_BLE_50_FEATURES_SUPPORTED
|
||||
bool "Enable BLE 5.0 features"
|
||||
depends on (BT_BLUEDROID_ENABLED && ((BT_CONTROLLER_ENABLED && SOC_BLE_50_SUPPORTED) || BT_CONTROLLER_DISABLED))
|
||||
depends on (BT_BLE_ENABLED && ((BT_CONTROLLER_ENABLED && SOC_BLE_50_SUPPORTED) || BT_CONTROLLER_DISABLED))
|
||||
default y
|
||||
help
|
||||
This enables BLE 5.0 features, this option only support esp32c3/esp32s3 chip
|
||||
Enabling this option activates BLE 5.0 features.
|
||||
This option is universally supported in chips that support BLE, except for ESP32.
|
||||
|
||||
config BT_BLE_42_FEATURES_SUPPORTED
|
||||
bool "Enable BLE 4.2 features"
|
||||
depends on (BT_BLUEDROID_ENABLED && ((BT_CONTROLLER_ENABLED && SOC_BLE_SUPPORTED) || BT_CONTROLLER_DISABLED))
|
||||
depends on (BT_BLE_ENABLED && ((BT_CONTROLLER_ENABLED && SOC_BLE_SUPPORTED) || BT_CONTROLLER_DISABLED))
|
||||
default n
|
||||
help
|
||||
This enables BLE 4.2 features.
|
||||
|
||||
config BT_BLE_FEAT_PERIODIC_ADV_SYNC_TRANSFER
|
||||
bool "Enable BLE periodic advertising sync transfer feature"
|
||||
depends on (BT_BLUEDROID_ENABLED && BT_BLE_50_FEATURES_SUPPORTED && ((BT_CONTROLLER_ENABLED && SOC_ESP_NIMBLE_CONTROLLER) || BT_CONTROLLER_DISABLED))
|
||||
depends on (BT_BLE_50_FEATURES_SUPPORTED && ((BT_CONTROLLER_ENABLED && SOC_ESP_NIMBLE_CONTROLLER) || BT_CONTROLLER_DISABLED))
|
||||
default n
|
||||
help
|
||||
This enables BLE periodic advertising sync transfer feature
|
||||
|
||||
config BT_BLE_FEAT_PERIODIC_ADV_ENH
|
||||
bool "Enable periodic adv enhancements(adi support)"
|
||||
depends on (BT_BLUEDROID_ENABLED && BT_BLE_50_FEATURES_SUPPORTED && ((BT_CONTROLLER_ENABLED && SOC_ESP_NIMBLE_CONTROLLER) || BT_CONTROLLER_DISABLED))
|
||||
depends on (BT_BLE_50_FEATURES_SUPPORTED && ((BT_CONTROLLER_ENABLED && SOC_ESP_NIMBLE_CONTROLLER) || BT_CONTROLLER_DISABLED))
|
||||
default n
|
||||
help
|
||||
Enable the periodic advertising enhancements
|
||||
|
||||
config BT_BLE_FEAT_CREATE_SYNC_ENH
|
||||
bool "Enable create sync enhancements(reporting disable and duplicate filtering enable support)"
|
||||
depends on (BT_BLE_50_FEATURES_SUPPORTED && ((BT_CONTROLLER_ENABLED && SOC_ESP_NIMBLE_CONTROLLER) || BT_CONTROLLER_DISABLED))
|
||||
default n
|
||||
help
|
||||
Enable the create sync enhancements
|
||||
|
||||
config BT_BLE_HIGH_DUTY_ADV_INTERVAL
|
||||
bool "Enable BLE high duty advertising interval feature"
|
||||
depends on BT_BLUEDROID_ENABLED
|
||||
depends on BT_BLE_ENABLED
|
||||
default n
|
||||
help
|
||||
This enable BLE high duty advertising interval feature
|
||||
|
@ -904,12 +904,22 @@ typedef struct {
|
||||
* @brief periodic adv sync parameters
|
||||
*/
|
||||
typedef struct {
|
||||
esp_ble_gap_sync_t filter_policy; /*!< periodic advertising sync filter policy */
|
||||
uint8_t sid; /*!< periodic advertising sid */
|
||||
esp_ble_addr_type_t addr_type; /*!< periodic advertising address type */
|
||||
esp_bd_addr_t addr; /*!< periodic advertising address */
|
||||
uint16_t skip; /*!< the maximum number of periodic advertising events that can be skipped */
|
||||
uint16_t sync_timeout; /*!< synchronization timeout */
|
||||
esp_ble_gap_sync_t filter_policy; /*!< Configures the filter policy for periodic advertising sync:
|
||||
0: Use Advertising SID, Advertiser Address Type, and Advertiser Address parameters to determine the advertiser to listen to.
|
||||
1: Use the Periodic Advertiser List to determine the advertiser to listen to. */
|
||||
#if (CONFIG_BT_BLE_FEAT_CREATE_SYNC_ENH)
|
||||
esp_ble_gap_sync_t reports_disabled; /*!< Supported only by esp32c2, esp32c6, and esp32h2; can be set by menuconfig:
|
||||
0: Reporting initially enabled.
|
||||
1: Reporting initially disabled. */
|
||||
esp_ble_gap_sync_t filter_duplicates; /*!< Supported only by esp32c2, esp32c6, and esp32h2; can be set by menuconfig:
|
||||
0: Duplicate filtering initially disabled.
|
||||
1: Duplicate filtering initially enabled. */
|
||||
#endif
|
||||
uint8_t sid; /*!< SID of the periodic advertising */
|
||||
esp_ble_addr_type_t addr_type; /*!< Address type of the periodic advertising */
|
||||
esp_bd_addr_t addr; /*!< Address of the periodic advertising */
|
||||
uint16_t skip; /*!< Maximum number of periodic advertising events that can be skipped */
|
||||
uint16_t sync_timeout; /*!< Synchronization timeout */
|
||||
} esp_ble_gap_periodic_adv_sync_params_t;
|
||||
|
||||
/**
|
||||
|
@ -1539,6 +1539,10 @@ typedef struct {
|
||||
|
||||
typedef struct {
|
||||
UINT8 filter_policy;
|
||||
#if (CONFIG_BT_BLE_FEAT_CREATE_SYNC_ENH)
|
||||
UINT8 reports_disabled;
|
||||
UINT8 filter_duplicates;
|
||||
#endif
|
||||
UINT8 sid;
|
||||
tBLE_ADDR_TYPE addr_type;
|
||||
BD_ADDR addr;
|
||||
|
@ -2076,6 +2076,10 @@ void btc_gap_ble_call_handler(btc_msg_t *msg)
|
||||
params.addr_type = arg_5->periodic_adv_create_sync.params.addr_type;
|
||||
params.skip = arg_5->periodic_adv_create_sync.params.skip;
|
||||
params.sync_timeout = arg_5->periodic_adv_create_sync.params.sync_timeout;
|
||||
#if (CONFIG_BT_BLE_FEAT_CREATE_SYNC_ENH)
|
||||
params.reports_disabled = arg_5->periodic_adv_create_sync.params.reports_disabled;
|
||||
params.filter_duplicates = arg_5->periodic_adv_create_sync.params.filter_duplicates;
|
||||
#endif
|
||||
|
||||
memcpy(params.addr, arg_5->periodic_adv_create_sync.params.addr, sizeof(BD_ADDR));
|
||||
BTC_TRACE_DEBUG("BTC_GAP_BLE_PERIODIC_ADV_CREATE_SYNC");
|
||||
|
@ -136,6 +136,12 @@
|
||||
#define UC_BT_BLE_FEAT_PERIODIC_ADV_ENH FALSE
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_BT_BLE_FEAT_CREATE_SYNC_ENH
|
||||
#define UC_BT_BLE_FEAT_CREATE_SYNC_ENH CONFIG_BT_BLE_FEAT_CREATE_SYNC_ENH
|
||||
#else
|
||||
#define UC_BT_BLE_FEAT_CREATE_SYNC_ENH FALSE
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_BT_BLE_HIGH_DUTY_ADV_INTERVAL
|
||||
#define UC_BT_BLE_HIGH_DUTY_ADV_INTERVAL CONFIG_BT_BLE_HIGH_DUTY_ADV_INTERVAL
|
||||
#else
|
||||
|
@ -213,6 +213,12 @@
|
||||
#define BLE_FEAT_PERIODIC_ADV_ENH FALSE
|
||||
#endif
|
||||
|
||||
#if (UC_BT_BLE_FEAT_CREATE_SYNC_ENH == TRUE)
|
||||
#define BLE_FEAT_CREATE_SYNC_ENH TRUE
|
||||
#else
|
||||
#define BLE_FEAT_CREATE_SYNC_ENH FALSE
|
||||
#endif
|
||||
|
||||
#if (UC_BT_BLE_HIGH_DUTY_ADV_INTERVAL == TRUE)
|
||||
#define BLE_HIGH_DUTY_ADV_INTERVAL TRUE
|
||||
#else
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include <string.h>
|
||||
#include "l2c_int.h"
|
||||
#if (BLE_50_FEATURE_SUPPORT == TRUE)
|
||||
#define SET_BIT(t, n) (t |= 1UL << (n))
|
||||
tBTM_BLE_EXTENDED_CB extend_adv_cb;
|
||||
|
||||
tBTM_BLE_5_HCI_CBACK ble_5_hci_cb;
|
||||
@ -788,14 +789,32 @@ tBTM_STATUS BTM_BlePeriodicAdvCreateSync(tBTM_BLE_Periodic_Sync_Params *params)
|
||||
}
|
||||
|
||||
if ((params->sync_timeout < 0x0a || params->sync_timeout > 0x4000)
|
||||
|| (params->filter_policy > 0x01) || (params->addr_type > 0x01) ||
|
||||
|| (params->filter_policy > 0x01)
|
||||
#if (CONFIG_BT_BLE_FEAT_CREATE_SYNC_ENH)
|
||||
|| (params->reports_disabled > 0x01)
|
||||
|| (params->filter_duplicates > 0x01)
|
||||
#endif
|
||||
|| (params->addr_type > 0x01) ||
|
||||
(params->sid > 0xf) || (params->skip > 0x01F3)) {
|
||||
status = BTM_ILLEGAL_VALUE;
|
||||
BTM_TRACE_ERROR("%s, The sync parameters is invalid.", __func__);
|
||||
goto end;
|
||||
}
|
||||
uint8_t option = 0x00;
|
||||
if (params->filter_policy) {
|
||||
SET_BIT(option, 0);
|
||||
}
|
||||
|
||||
if (!btsnd_hcic_ble_periodic_adv_create_sync(params->filter_policy, params->sid, params->addr_type,
|
||||
#if (CONFIG_BT_BLE_FEAT_CREATE_SYNC_ENH)
|
||||
if (params->reports_disabled) {
|
||||
SET_BIT(option, 1);
|
||||
}
|
||||
if (params->filter_duplicates) {
|
||||
SET_BIT(option, 2);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!btsnd_hcic_ble_periodic_adv_create_sync(option, params->sid, params->addr_type,
|
||||
params->addr, params->sync_timeout, 0)) {
|
||||
BTM_TRACE_ERROR("LE PA CreateSync cmd failed");
|
||||
status = BTM_ILLEGAL_VALUE;
|
||||
|
@ -1627,14 +1627,14 @@ BOOLEAN btsnd_hcic_ble_create_ext_conn(tHCI_CreatExtConn *p_conn)
|
||||
|
||||
}
|
||||
|
||||
BOOLEAN btsnd_hcic_ble_periodic_adv_create_sync(UINT8 filter_policy, UINT8 adv_sid,
|
||||
BOOLEAN btsnd_hcic_ble_periodic_adv_create_sync(UINT8 option, UINT8 adv_sid,
|
||||
UINT8 adv_addr_type, BD_ADDR adv_addr,
|
||||
UINT16 sync_timeout, UINT8 unused)
|
||||
{
|
||||
BT_HDR *p;
|
||||
UINT8 *pp;
|
||||
HCI_TRACE_EVENT("%s, filter_policy = %d, adv_sid = %d, adv_addr_type = %d, sync_timeout = %d, unused = %d",
|
||||
__func__, filter_policy, adv_sid, adv_addr_type, sync_timeout, unused);
|
||||
HCI_TRACE_EVENT("%s, option = %d, adv_sid = %d, adv_addr_type = %d, sync_timeout = %d, unused = %d",
|
||||
__func__, option, adv_sid, adv_addr_type, sync_timeout, unused);
|
||||
|
||||
HCI_TRACE_EVENT("addr %02x %02x %02x %02x %02x %02x", adv_addr[0], adv_addr[1], adv_addr[2], adv_addr[3], adv_addr[4], adv_addr[5]);
|
||||
uint16_t skip = 0;
|
||||
@ -1642,7 +1642,7 @@ BOOLEAN btsnd_hcic_ble_periodic_adv_create_sync(UINT8 filter_policy, UINT8 adv_s
|
||||
|
||||
UINT16_TO_STREAM(pp, HCI_BLE_PERIOD_ADV_CREATE_SYNC);
|
||||
UINT8_TO_STREAM(pp, HCIC_PARAM_SIZE_PERIODIC_ADV_CREATE_SYNC + 2);
|
||||
UINT8_TO_STREAM(pp, filter_policy);
|
||||
UINT8_TO_STREAM(pp, option);
|
||||
UINT8_TO_STREAM(pp, adv_sid);
|
||||
UINT8_TO_STREAM(pp, adv_addr_type);
|
||||
BDADDR_TO_STREAM(pp, adv_addr);
|
||||
|
@ -809,6 +809,10 @@ typedef struct {
|
||||
|
||||
typedef struct {
|
||||
UINT8 filter_policy;
|
||||
#if (CONFIG_BT_BLE_FEAT_CREATE_SYNC_ENH)
|
||||
UINT8 reports_disabled;
|
||||
UINT8 filter_duplicates;
|
||||
#endif
|
||||
UINT8 sid;
|
||||
tBLE_ADDR_TYPE addr_type;
|
||||
BD_ADDR addr;
|
||||
|
@ -125,7 +125,7 @@ BOOLEAN SMP_Register (tSMP_CALLBACK *p_cback)
|
||||
SMP_TRACE_EVENT ("SMP_Register state=%d", smp_cb.state);
|
||||
|
||||
if (smp_cb.p_callback != NULL) {
|
||||
SMP_TRACE_ERROR ("SMP_Register: duplicate registration, overwrite it");
|
||||
SMP_TRACE_WARNING ("SMP_Register: duplicate registration, overwrite it");
|
||||
}
|
||||
smp_cb.p_callback = p_cback;
|
||||
|
||||
|
@ -403,6 +403,11 @@ static void gatts_profile_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_
|
||||
{
|
||||
indicate_data[i] = i % 0xff;
|
||||
}
|
||||
|
||||
// if want to change the value in server database, call:
|
||||
// esp_ble_gatts_set_attr_value(heart_rate_handle_table[IDX_CHAR_VAL_A], sizeof(indicate_data), indicate_data);
|
||||
|
||||
|
||||
//the size of indicate_data[] need less than MTU size
|
||||
esp_ble_gatts_send_indicate(gatts_if, param->write.conn_id, heart_rate_handle_table[IDX_CHAR_VAL_A],
|
||||
sizeof(indicate_data), indicate_data, true);
|
||||
|
@ -159,6 +159,7 @@ The application registration takes place inside ``app_main()`` using the ``esp_b
|
||||
```c
|
||||
esp_ble_gatts_app_register(ESP_HEART_RATE_APP_ID);
|
||||
```
|
||||
The ``ESP_HEART_RATE_APP_ID`` serves as an application ID, distinguishing between various application layer callbacks. This identifier corresponds to the ``app_id`` found within the ``gatts_reg_evt_param`` in ESP_GATTS_REG_EVT.
|
||||
|
||||
## Setting GAP Parameters
|
||||
|
||||
|
@ -241,13 +241,22 @@ same for the periodic sync:
|
||||
* @brief periodic adv sync parameters
|
||||
*/
|
||||
typedef struct {
|
||||
esp_ble_gap_sync_t filter_policy; /*!< periodic advertising sync filter policy */
|
||||
uint8_t sid; /*!< periodic advertising sid */
|
||||
esp_ble_addr_type_t addr_type; /*!< periodic advertising address type */
|
||||
esp_bd_addr_t addr; /*!< periodic advertising address */
|
||||
uint16_t skip; /*!< the maximum number of periodic advertising events t
|
||||
hat can be skipped */
|
||||
uint16_t sync_timeout; /*!< synchronization timeout */
|
||||
esp_ble_gap_sync_t filter_policy; /*!< Configures the filter policy for periodic advertising sync:
|
||||
0: Use Advertising SID, Advertiser Address Type, and Advertiser Address parameters to determine the advertiser to listen to.
|
||||
1: Use the Periodic Advertiser List to determine the advertiser to listen to. */
|
||||
#if (BLE_FEAT_CREATE_SYNC_ENH)
|
||||
esp_ble_gap_sync_t reports_disabled; /*!< Supported only by esp32c2, esp32c6, and esp32h2; can be set by menuconfig:
|
||||
0: Reporting initially enabled.
|
||||
1: Reporting initially disabled. */
|
||||
esp_ble_gap_sync_t filter_duplicates; /*!< Supported only by esp32c2, esp32c6, and esp32h2; can be set by menuconfig:
|
||||
0: Duplicate filtering initially disabled.
|
||||
1: Duplicate filtering initially enabled. */
|
||||
#endif
|
||||
uint8_t sid; /*!< SID of the periodic advertising */
|
||||
esp_ble_addr_type_t addr_type; /*!< Address type of the periodic advertising */
|
||||
esp_bd_addr_t addr; /*!< Address of the periodic advertising */
|
||||
uint16_t skip; /*!< Maximum number of periodic advertising events that can be skipped */
|
||||
uint16_t sync_timeout; /*!< Synchronization timeout */
|
||||
} esp_ble_gap_periodic_adv_sync_params_t;
|
||||
|
||||
```
|
||||
|
Loading…
x
Reference in New Issue
Block a user