feat(ble/bluedroid): Support setting connection params when creating connection

This commit is contained in:
chenjianhua
2024-11-27 17:13:21 +08:00
parent 4ed30165d8
commit 02cc012db5
32 changed files with 348 additions and 128 deletions
@@ -65,7 +65,7 @@ static esp_ble_ext_scan_params_t ext_scan_params = {
.coded_cfg = {BLE_SCAN_TYPE_ACTIVE, 40, 40},
};
const esp_ble_gap_conn_params_t phy_1m_conn_params = {
const esp_ble_conn_params_t phy_1m_conn_params = {
.scan_interval = 0x40,
.scan_window = 0x40,
.interval_min = 320,
@@ -75,7 +75,7 @@ const esp_ble_gap_conn_params_t phy_1m_conn_params = {
.min_ce_len = 0,
.max_ce_len = 0,
};
const esp_ble_gap_conn_params_t phy_2m_conn_params = {
const esp_ble_conn_params_t phy_2m_conn_params = {
.scan_interval = 0x40,
.scan_window = 0x40,
.interval_min = 320,
@@ -85,7 +85,7 @@ const esp_ble_gap_conn_params_t phy_2m_conn_params = {
.min_ce_len = 0,
.max_ce_len = 0,
};
const esp_ble_gap_conn_params_t phy_coded_conn_params = {
const esp_ble_conn_params_t phy_coded_conn_params = {
.scan_interval = 0x40,
.scan_window = 0x40,
.interval_min = 320, // 306-> 362Kbps
@@ -500,18 +500,18 @@ static void esp_gap_cb(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *par
ESP_LOG_BUFFER_CHAR("Adv name", adv_name, adv_name_len);
ESP_LOGI(GATTC_TAG, "Stop extend scan and create aux open, primary_phy %d secondary phy %d", param->ext_adv_report.params.primary_phy, param->ext_adv_report.params.secondly_phy);
esp_ble_gap_prefer_ext_connect_params_set(param->ext_adv_report.params.addr,
ESP_BLE_GAP_PHY_1M_PREF_MASK | ESP_BLE_GAP_PHY_2M_PREF_MASK | ESP_BLE_GAP_PHY_CODED_PREF_MASK ,
&phy_1m_conn_params, &phy_2m_conn_params, &phy_coded_conn_params);
// create gattc virtual connection
esp_ble_gatt_creat_conn_params_t creat_conn_params;
esp_ble_gatt_creat_conn_params_t creat_conn_params = {0};
memcpy(&creat_conn_params.remote_bda, param->ext_adv_report.params.addr, ESP_BD_ADDR_LEN);
creat_conn_params.remote_addr_type = param->ext_adv_report.params.addr_type;
creat_conn_params.own_addr_type = BLE_ADDR_TYPE_PUBLIC;
creat_conn_params.is_direct = true;
creat_conn_params.is_aux = true;
esp_ble_gattc_enh_open(gl_profile_tab[PROFILE_A_APP_ID].gattc_if,
&creat_conn_params);
creat_conn_params.phy_mask = ESP_BLE_PHY_1M_PREF_MASK | ESP_BLE_PHY_2M_PREF_MASK | ESP_BLE_PHY_CODED_PREF_MASK;
creat_conn_params.phy_1m_conn_params = &phy_1m_conn_params;
creat_conn_params.phy_2m_conn_params = &phy_2m_conn_params;
creat_conn_params.phy_coded_conn_params = &phy_coded_conn_params;
esp_ble_gattc_enh_open(gl_profile_tab[PROFILE_A_APP_ID].gattc_if, &creat_conn_params);
}
break;
@@ -95,7 +95,7 @@ static esp_bt_uuid_t notify_descr_uuid = {
};
static esp_ble_ext_scan_params_t ext_scan_params = {
.own_addr_type = BLE_ADDR_TYPE_RPA_PUBLIC,
.own_addr_type = BLE_ADDR_TYPE_PUBLIC,
.filter_policy = BLE_SCAN_FILTER_ALLOW_ALL,
.scan_duplicate = BLE_SCAN_DUPLICATE_DISABLE,
.cfg_mask = ESP_BLE_GAP_EXT_SCAN_CFG_CODE_MASK | ESP_BLE_GAP_EXT_SCAN_CFG_UNCODE_MASK,
@@ -104,7 +104,7 @@ static esp_ble_ext_scan_params_t ext_scan_params = {
};
// If the interference in the air is severe, the connection interval can be reduced.
const esp_ble_gap_conn_params_t phy_1m_conn_params = {
const esp_ble_conn_params_t phy_1m_conn_params = {
.interval_max = 104, // 130ms
.interval_min = 104,
.latency = 0,
@@ -115,7 +115,7 @@ const esp_ble_gap_conn_params_t phy_1m_conn_params = {
.supervision_timeout = 600,
};
const esp_ble_gap_conn_params_t phy_2m_conn_params = {
const esp_ble_conn_params_t phy_2m_conn_params = {
.interval_max = 104, // 130ms
.interval_min = 104,
.latency = 0,
@@ -126,7 +126,7 @@ const esp_ble_gap_conn_params_t phy_2m_conn_params = {
.supervision_timeout = 600,
};
const esp_ble_gap_conn_params_t phy_coded_conn_params = {
const esp_ble_conn_params_t phy_coded_conn_params = {
.interval_max = 104, // 130ms
.interval_min = 104,
.latency = 0,
@@ -441,12 +441,17 @@ static void esp_gap_cb(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *par
ESP_LOGI(GATTC_TAG, "Device found "ESP_BD_ADDR_STR"", ESP_BD_ADDR_HEX(param->ext_adv_report.params.addr));
ESP_LOG_BUFFER_CHAR("Adv name", adv_name, adv_name_len);
ESP_LOGI(GATTC_TAG, "Stop extend scan and create aux open, primary_phy %d secondary phy %d", param->ext_adv_report.params.primary_phy, param->ext_adv_report.params.secondly_phy);
esp_ble_gap_prefer_ext_connect_params_set(param->ext_adv_report.params.addr,
ESP_BLE_GAP_PHY_1M_PREF_MASK | ESP_BLE_GAP_PHY_2M_PREF_MASK | ESP_BLE_GAP_PHY_CODED_PREF_MASK,
&phy_1m_conn_params, &phy_2m_conn_params, &phy_coded_conn_params);
esp_ble_gattc_aux_open(gl_profile_tab[PROFILE_A_APP_ID].gattc_if,
param->ext_adv_report.params.addr,
param->ext_adv_report.params.addr_type, true);
esp_ble_gatt_creat_conn_params_t creat_conn_params = {0};
memcpy(&creat_conn_params.remote_bda, param->ext_adv_report.params.addr, ESP_BD_ADDR_LEN);
creat_conn_params.remote_addr_type = param->ext_adv_report.params.addr_type;
creat_conn_params.own_addr_type = BLE_ADDR_TYPE_PUBLIC;
creat_conn_params.is_direct = true;
creat_conn_params.is_aux = true;
creat_conn_params.phy_mask = ESP_BLE_PHY_1M_PREF_MASK | ESP_BLE_PHY_2M_PREF_MASK | ESP_BLE_PHY_CODED_PREF_MASK;
creat_conn_params.phy_1m_conn_params = &phy_1m_conn_params;
creat_conn_params.phy_2m_conn_params = &phy_2m_conn_params;
creat_conn_params.phy_coded_conn_params = &phy_coded_conn_params;
esp_ble_gattc_enh_open(gl_profile_tab[PROFILE_A_APP_ID].gattc_if, &creat_conn_params);
}
break;
}