From b56957b70ff8548970c40e627ab41918e69a7434 Mon Sep 17 00:00:00 2001 From: Matthias Ringwald Date: Mon, 10 Jan 2022 15:33:51 +0100 Subject: [PATCH] gap: add extended advertising api --- src/gap.h | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 110 insertions(+), 1 deletion(-) diff --git a/src/gap.h b/src/gap.h index 50b0c8bb1..66fd64546 100644 --- a/src/gap.h +++ b/src/gap.h @@ -135,6 +135,39 @@ typedef enum { AUTHORIZATION_GRANTED } authorization_state_t; +// Extended Advertising Parameters +typedef struct { + uint16_t advertising_event_properties; + uint16_t primary_advertising_interval_min; + uint16_t primary_advertising_interval_max; + uint8_t primary_advertising_channel_map; + bd_addr_type_t own_address_type; + bd_addr_type_t peer_address_type; + bd_addr_t peer_address; + uint8_t advertising_filter_policy; + int8_t advertising_tx_power; + uint8_t primary_advertising_phy; + uint8_t secondary_advertising_max_skip; + uint8_t secondary_advertising_phy; + uint8_t advertising_sid; + uint8_t scan_request_notification_enable; +} le_extended_advertising_parameters_t; + +// Extended Advertising Set State +typedef struct { + btstack_linked_item_t item; + le_extended_advertising_parameters_t params; + bd_addr_t random_address; + uint8_t * adv_data; + uint8_t * scan_data; + uint16_t adv_data_len; + uint16_t scan_data_len; + uint16_t enable_timeout; + uint8_t advertising_handle; + uint8_t enable_max_scan_events; + uint8_t state; + uint8_t tasks; +} le_advertising_set_t; /* API_START */ @@ -426,7 +459,7 @@ void gap_random_address_set(const bd_addr_t addr); void gap_advertisements_set_data(uint8_t advertising_data_length, uint8_t * advertising_data); /** - * @brief Set Advertisement Paramters + * @brief Set Advertisement Parameters * @param adv_int_min * @param adv_int_max * @param adv_type @@ -457,6 +490,82 @@ void gap_advertisements_enable(int enabled); */ void gap_scan_response_set_data(uint8_t scan_response_data_length, uint8_t * scan_response_data); +/** + * @brief Provide storage for new advertising set and setup on Controller + * @param storage to use by stack, needs to stay valid until adv set is removed with gap_extended_advertising_remove + * @param advertising_parameters + * @param out_advertising_handle to use with other adv config commands + * @return status + * @events: GAP_SUBEVENT_ADVERTISING_SET_INSTALLED + */ +uint8_t gap_extended_advertising_setup(le_advertising_set_t * storage, const le_extended_advertising_parameters_t * advertising_parameters, uint8_t * out_advertising_handle); + +/** + * @param Set advertising params for advertising set + * @param advertising_handle + * @param advertising_parameters + * @return status + */ +uint8_t gap_extended_advertising_set_params(uint8_t advertising_handle, const le_extended_advertising_parameters_t * advertising_parameters); + +/** + * @param Get advertising params for advertising set, e.g. to update params + * @param advertising_handle + * @param advertising_parameters + * @return status + */ +uint8_t gap_extended_advertising_get_params(uint8_t advertising_handle, le_extended_advertising_parameters_t * advertising_parameters); + +/** + * @param Set random addrress for advertising set + * @param advertising_handle + * @param random_address + * @return status + */ +uint8_t gap_extended_advertising_set_random_address(uint8_t advertising_handle, bd_addr_t random_address); + +/** + * @brief Set Advertising Data for a advertisement set + * @param advertising_handle + * @param advertising_data_length + * @param advertising_data + * @return status + */ +uint8_t gap_extended_advertising_set_adv_data(uint8_t advertising_handle, uint16_t advertising_data_length, uint8_t * advertising_data); + +/** + * @brief Set Scan Response Data for a advertisement set + * @param advertising_handle + * @param scan_response_data_length + * @param scan_response_data + * @return status + */ +uint8_t gap_extended_advertising_set_scan_response_data(uint8_t advertising_handle, uint16_t scan_response_data_length, uint8_t * scan_response_data); + +/** + * @brief Start advertising advertising set + * @param advertising_handle + * @param timeout in 10ms, or 0 == no timeout + * @param num_extended_advertising_events Controller shall send, or 0 == no max number + * @return status + */ +uint8_t gap_extended_advertising_start(uint8_t advertising_handle, uint16_t timeout, uint8_t num_extended_advertising_events); + +/** + * @brief Stop advertising + * @param advertising_handle + * @return status + */ +uint8_t gap_extended_advertising_stop(uint8_t advertising_handle); + +/** + * @brief Remove advertising set from Controller + * @param advertising_handle + * @return status + * @events: GAP_SUBEVENT_ADVERTISING_SET_REMOVED + */ +uint8_t gap_extended_advertising_remove(uint8_t advertising_handle); + /** * @brief Set connection parameters for outgoing connections * @param conn_scan_interval (unit: 0.625 msec), default: 60 ms