gap: provide LE Whitelist API via gap_whitelist_add/remove/clear

This commit is contained in:
Matthias Ringwald 2020-08-17 15:34:40 +02:00
parent 95e257d9ea
commit a3b69fde2a
2 changed files with 73 additions and 6 deletions

View File

@ -442,6 +442,28 @@ int gap_connection_parameter_range_included(le_connection_parameter_range_t * ex
*/
void gap_set_max_number_peripheral_connections(int max_peripheral_connections);
/**
* @brief Add Device to Whitelist
* @param address_typ
* @param address
* @returns 0 if ok
*/
uint8_t gap_whitelist_add(bd_addr_type_t address_type, bd_addr_t address);
/**
* @brief Remove Device from Whitelist
* @param address_typ
* @param address
* @returns 0 if ok
*/
uint8_t gap_whitelist_remove(bd_addr_type_t address_type, bd_addr_t address);
/**
* @brief Clear Whitelist
* @returns 0 if ok
*/
uint8_t gap_whitelist_clear(void);
/**
* @brief Connect to remote LE device
*/
@ -461,6 +483,7 @@ uint8_t gap_connect_cancel(void);
/**
* @brief Auto Connection Establishment - Start Connecting to device
* @deprecated Please setup Whitelist with gap_whitelist_* and start connecting with gap_connect_with_whitelist
* @param address_typ
* @param address
* @returns 0 if ok
@ -469,6 +492,7 @@ uint8_t gap_auto_connection_start(bd_addr_type_t address_typ, bd_addr_t address)
/**
* @brief Auto Connection Establishment - Stop Connecting to device
* @deprecated Please setup Whitelist with gap_whitelist_* and start connecting with gap_connect_with_whitelist
* @param address_typ
* @param address
* @returns 0 if ok
@ -477,6 +501,7 @@ uint8_t gap_auto_connection_stop(bd_addr_type_t address_typ, bd_addr_t address);
/**
* @brief Auto Connection Establishment - Stop everything
* @deprecated Please setup Whitelist with gap_whitelist_* and start connecting with gap_connect_with_whitelist
* @note Convenience function to stop all active auto connection attempts
*/
uint8_t gap_auto_connection_stop_all(void);

View File

@ -165,7 +165,7 @@ static int hci_have_usb_transport(void);
#ifdef ENABLE_LE_CENTRAL
// called from test/ble_client/advertising_data_parser.c
void le_handle_advertisement_report(uint8_t *packet, uint16_t size);
static void hci_whitelist_remove(bd_addr_type_t address_type, bd_addr_t address);
static uint8_t hci_whitelist_remove(bd_addr_type_t address_type, bd_addr_t address);
static hci_connection_t * gap_get_outgoing_connection(void);
#endif
#endif
@ -5288,7 +5288,7 @@ static uint8_t hci_whitelist_add(bd_addr_type_t address_type, bd_addr_t address)
return ERROR_CODE_SUCCESS;
}
static void hci_whitelist_remove(bd_addr_type_t address_type, bd_addr_t address){
static uint8_t hci_whitelist_remove(bd_addr_type_t address_type, bd_addr_t address){
btstack_linked_list_iterator_t it;
btstack_linked_list_iterator_init(&it, &hci_stack->le_whitelist);
while (btstack_linked_list_iterator_has_next(&it)){
@ -5298,12 +5298,14 @@ static void hci_whitelist_remove(bd_addr_type_t address_type, bd_addr_t address)
if (entry->state & LE_WHITELIST_ON_CONTROLLER){
// remove from controller if already present
entry->state |= LE_WHITELIST_REMOVE_FROM_CONTROLLER;
continue;
} else {
// directly remove entry from whitelist
btstack_linked_list_iterator_remove(&it);
btstack_memory_whitelist_entry_free(entry);
}
// directly remove entry from whitelist
btstack_linked_list_iterator_remove(&it);
btstack_memory_whitelist_entry_free(entry);
return ERROR_CODE_SUCCESS;
}
return ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER;
}
static void hci_whitelist_clear(void){
@ -5322,6 +5324,46 @@ static void hci_whitelist_clear(void){
}
}
/**
* @brief Clear Whitelist
* @returns 0 if ok
*/
uint8_t gap_whitelist_clear(void){
hci_whitelist_clear();
hci_run();
return ERROR_CODE_SUCCESS;
}
/**
* @brief Add Device to Whitelist
* @param address_typ
* @param address
* @returns 0 if ok
*/
uint8_t gap_whitelist_add(bd_addr_type_t address_type, bd_addr_t address){
uint8_t status = hci_whitelist_add(address_type, address);
if (status){
return status;
}
hci_run();
return ERROR_CODE_SUCCESS;
}
/**
* @brief Remove Device from Whitelist
* @param address_typ
* @param address
* @returns 0 if ok
*/
uint8_t gap_whitelist_remove(bd_addr_type_t address_type, bd_addr_t address){
uint8_t status = hci_whitelist_remove(address_type, address);
if (status){
return status;
}
hci_run();
return ERROR_CODE_SUCCESS;
}
#ifdef ENABLE_LE_CENTRAL
/**
* @brief Connect with Whitelist