gap: add gap_periodic_advertising_sync_transfer_set_default_parameters

This commit is contained in:
Matthias Ringwald 2022-09-14 15:27:34 +02:00
parent 5332c7c0a9
commit 98aa715f74
3 changed files with 52 additions and 0 deletions

View File

@ -772,6 +772,23 @@ uint8_t gap_periodic_advertising_start(uint8_t advertising_handle, bool include_
*/
uint8_t gap_periodic_advertising_stop(uint8_t advertising_handle);
/**
* @brief Set Default Periodic Advertising Sync Transfer Parameters
* @note The parameters are used for all subsequent connections over the LE transport.
* If mode != 0, an HCI_LE_Periodic_Advertising_Sync_Transfer_Received event will be emitted by the Controller
* @param mode 0 = ignore (default), 1 = periodic advertising events disabled
* 2 = periodic advertising events enabled with duplicate filtering
* 3 = periodic advertising events enabled with duplicate filtering
* @return status
* @param skip The number of periodic advertising packets that can be skipped after a successful receive
* @param sync_timeout Range: 0x000A to 0x4000, Time = N*10 ms, Time Range: 100 ms to 163.84 s
* @param cte_type bit 0 = Do not sync to packets with an AoA Constant Tone Extension
* bit 1 = Do not sync to packets with an AoD Constant Tone Extension with 1 μs slots
* bit 2 = Do not sync to packets with an AoD Constant Tone Extension with 2 μs slots
* bit 3 = Do not sync to packets without a Constant Tone Extension
*/
uint8_t gap_periodic_advertising_sync_transfer_set_default_parameters(uint8_t mode, uint16_t skip, uint16_t sync_timeout, uint8_t cte_type);
/**
* @brief Remove advertising set from Controller
* @param advertising_handle

View File

@ -6203,6 +6203,22 @@ static bool hci_run_general_gap_le(void){
}
}
#endif
#endif
#ifdef ENABLE_LE_CENTRAL
#ifdef ENABLE_LE_EXTENDED_ADVERTISING
#ifdef ENABLE_LE_PERIODIC_ADVERTISING
if (hci_stack->le_past_set_default_params){
hci_stack->le_past_set_default_params = false;
hci_send_cmd(&hci_le_set_default_periodic_advertising_sync_transfer_parameters,
hci_stack->le_past_mode,
hci_stack->le_past_skip,
hci_stack->le_past_sync_timeout,
hci_stack->le_past_cte_type);
return true;
}
#endif
#endif
#endif
// post-pone all actions until stack is fully working
@ -8138,6 +8154,17 @@ uint8_t gap_periodic_advertising_stop(uint8_t advertising_handle){
hci_run();
return ERROR_CODE_SUCCESS;
}
uint8_t gap_periodic_advertising_sync_transfer_set_default_parameters(uint8_t mode, uint16_t skip, uint16_t sync_timeout, uint8_t cte_type){
hci_stack->le_past_mode = mode;
hci_stack->le_past_skip = skip;
hci_stack->le_past_sync_timeout = sync_timeout;
hci_stack->le_past_cte_type = cte_type;
hci_stack->le_past_set_default_params = true;
hci_run();
return ERROR_CODE_SUCCESS;
}
#endif /* ENABLE_LE_PERIODIC_ADVERTISING */
#endif

View File

@ -1165,6 +1165,7 @@ typedef struct {
#ifdef ENABLE_LE_EXTENDED_ADVERTISING
btstack_linked_list_t le_periodic_advertiser_list;
uint16_t le_periodic_terminate_sync_handle;
// Periodic Advertising Sync parameters
uint8_t le_periodic_sync_options;
uint8_t le_periodic_sync_advertising_sid;
@ -1175,6 +1176,13 @@ typedef struct {
uint8_t le_periodic_sync_cte_type;
le_connecting_state_t le_periodic_sync_state;
le_connecting_state_t le_periodic_sync_request;
// Periodic Advertising Sync Transfer (PAST)
bool le_past_set_default_params;
uint8_t le_past_mode;
uint16_t le_past_skip;
uint16_t le_past_sync_timeout;
uint8_t le_past_cte_type;
#endif
#endif