feat(ble/bluedroid): add LL Extended Feature Set host support (Core 6.0)

(cherry picked from commit d568f2f151)

Co-authored-by: zhiweijian <zhiweijian@espressif.com>
This commit is contained in:
Zhi Wei Jian
2026-06-26 09:08:29 +08:00
parent e23d745b76
commit 78257b3e96
19 changed files with 400 additions and 5 deletions
@@ -1298,6 +1298,34 @@ void btc_ble_5_gap_callback(tBTA_DM_BLE_5_GAP_EVENT event,
break;
}
#endif // #if (BLE_FEAT_FRAME_SPACE_UPDATE == TRUE)
#if (BLE_FEAT_LL_EXT_FEAT == TRUE)
case BTA_DM_BLE_5_GAP_READ_ALL_LOCAL_SUPP_FEAT_COMPLETE_EVT: {
msg.act = ESP_GAP_BLE_READ_ALL_LOCAL_SUPP_FEAT_COMPLETE_EVT;
param.read_all_local_supp_feat.status = btc_btm_status_to_esp_status(params->read_all_local_supp_feat.status);
param.read_all_local_supp_feat.max_page = params->read_all_local_supp_feat.max_page;
if (params->read_all_local_supp_feat.le_features != NULL) {
memcpy(param.read_all_local_supp_feat.le_features, params->read_all_local_supp_feat.le_features,
ESP_BLE_GAP_LL_EXT_FEAT_DATA_LEN);
} else {
memset(param.read_all_local_supp_feat.le_features, 0, ESP_BLE_GAP_LL_EXT_FEAT_DATA_LEN);
}
break;
}
case BTA_DM_BLE_5_GAP_READ_ALL_REMOTE_FEAT_COMPLETE_EVT: {
msg.act = ESP_GAP_BLE_READ_ALL_REMOTE_FEAT_COMPLETE_EVT;
param.read_all_remote_feat.status = btc_btm_status_to_esp_status(params->read_all_remote_feat.status);
param.read_all_remote_feat.conn_handle = params->read_all_remote_feat.conn_handle;
param.read_all_remote_feat.max_remote_page = params->read_all_remote_feat.max_remote_page;
param.read_all_remote_feat.max_valid_page = params->read_all_remote_feat.max_valid_page;
if (params->read_all_remote_feat.le_features != NULL) {
memcpy(param.read_all_remote_feat.le_features, params->read_all_remote_feat.le_features,
ESP_BLE_GAP_LL_EXT_FEAT_DATA_LEN);
} else {
memset(param.read_all_remote_feat.le_features, 0, ESP_BLE_GAP_LL_EXT_FEAT_DATA_LEN);
}
break;
}
#endif // #if (BLE_FEAT_LL_EXT_FEAT == TRUE)
#if (BLE_50_EXTEND_ADV_EN == TRUE)
case BTA_DM_BLE_5_GAP_ADV_TERMINATED_EVT: {
param.adv_terminate.status = params->adv_term.status;
@@ -3462,6 +3490,15 @@ void btc_gap_ble_call_handler(btc_msg_t *msg)
arg_5->frame_space_update.spacing_types);
break;
#endif // #if (BLE_FEAT_FRAME_SPACE_UPDATE == TRUE)
#if (BLE_FEAT_LL_EXT_FEAT == TRUE)
case BTC_GAP_BLE_READ_ALL_LOCAL_SUPP_FEAT:
BTA_DmBleGapReadAllLocalSuppFeatures();
break;
case BTC_GAP_BLE_READ_ALL_REMOTE_FEAT:
BTA_DmBleGapReadAllRemoteFeatures(arg_5->read_all_remote_feat.conn_handle,
arg_5->read_all_remote_feat.page_requested);
break;
#endif // #if (BLE_FEAT_LL_EXT_FEAT == TRUE)
#if (BT_BLE_FEAT_PAWR_EN == TRUE)
case BTC_GAP_BLE_SET_PA_SUBEVT_DATA:
BTA_DmBleGapSetPASubevtData(arg_5->per_adv_subevent_data_params.adv_handle, arg_5->per_adv_subevent_data_params.num_subevents_with_data, (uint8_t *)(arg_5->per_adv_subevent_data_params.subevent_params));
@@ -154,6 +154,10 @@ typedef enum {
#if (BLE_FEAT_FRAME_SPACE_UPDATE == TRUE)
BTC_GAP_BLE_FRAME_SPACE_UPDATE,
#endif // #if (BLE_FEAT_FRAME_SPACE_UPDATE == TRUE)
#if (BLE_FEAT_LL_EXT_FEAT == TRUE)
BTC_GAP_BLE_READ_ALL_LOCAL_SUPP_FEAT,
BTC_GAP_BLE_READ_ALL_REMOTE_FEAT,
#endif // #if (BLE_FEAT_LL_EXT_FEAT == TRUE)
BTC_GAP_BLE_READ_CHANNEL_MAP,
#if (BT_BLE_FEAT_PAWR_EN == TRUE)
BTC_GAP_BLE_SET_PA_SUBEVT_DATA,
@@ -618,6 +622,12 @@ typedef union {
uint16_t spacing_types;
} frame_space_update;
#endif // #if (BLE_FEAT_FRAME_SPACE_UPDATE == TRUE)
#if (BLE_FEAT_LL_EXT_FEAT == TRUE)
struct read_all_remote_feat_args {
uint16_t conn_handle;
uint8_t page_requested;
} read_all_remote_feat;
#endif // #if (BLE_FEAT_LL_EXT_FEAT == TRUE)
#if (BT_BLE_FEAT_PAWR_EN == TRUE)
// BTC_GAP_BLE_SET_PA_SUBEVT_DATA
struct per_adv_subevent_data_params_args {