mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-04-10 15:44:32 +00:00
hci: define periodic_advertiser_list_entry_t
This commit is contained in:
parent
0c10ebdb23
commit
dbca66ff5b
@ -1385,6 +1385,63 @@ void btstack_memory_whitelist_entry_free(whitelist_entry_t *whitelist_entry){
|
||||
#endif
|
||||
|
||||
|
||||
// MARK: periodic_advertiser_list_entry_t
|
||||
#if !defined(HAVE_MALLOC) && !defined(MAX_NR_PERIODIC_ADVERTISER_LIST_ENTRIES)
|
||||
#if defined(MAX_NO_PERIODIC_ADVERTISER_LIST_ENTRIES)
|
||||
#error "Deprecated MAX_NO_PERIODIC_ADVERTISER_LIST_ENTRIES defined instead of MAX_NR_PERIODIC_ADVERTISER_LIST_ENTRIES. Please update your btstack_config.h to use MAX_NR_PERIODIC_ADVERTISER_LIST_ENTRIES."
|
||||
#else
|
||||
#define MAX_NR_PERIODIC_ADVERTISER_LIST_ENTRIES 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef MAX_NR_PERIODIC_ADVERTISER_LIST_ENTRIES
|
||||
#if MAX_NR_PERIODIC_ADVERTISER_LIST_ENTRIES > 0
|
||||
static periodic_advertiser_list_entry_t periodic_advertiser_list_entry_storage[MAX_NR_PERIODIC_ADVERTISER_LIST_ENTRIES];
|
||||
static btstack_memory_pool_t periodic_advertiser_list_entry_pool;
|
||||
periodic_advertiser_list_entry_t * btstack_memory_periodic_advertiser_list_entry_get(void){
|
||||
void * buffer = btstack_memory_pool_get(&periodic_advertiser_list_entry_pool);
|
||||
if (buffer){
|
||||
memset(buffer, 0, sizeof(periodic_advertiser_list_entry_t));
|
||||
}
|
||||
return (periodic_advertiser_list_entry_t *) buffer;
|
||||
}
|
||||
void btstack_memory_periodic_advertiser_list_entry_free(periodic_advertiser_list_entry_t *periodic_advertiser_list_entry){
|
||||
btstack_memory_pool_free(&periodic_advertiser_list_entry_pool, periodic_advertiser_list_entry);
|
||||
}
|
||||
#else
|
||||
periodic_advertiser_list_entry_t * btstack_memory_periodic_advertiser_list_entry_get(void){
|
||||
return NULL;
|
||||
}
|
||||
void btstack_memory_periodic_advertiser_list_entry_free(periodic_advertiser_list_entry_t *periodic_advertiser_list_entry){
|
||||
UNUSED(periodic_advertiser_list_entry);
|
||||
};
|
||||
#endif
|
||||
#elif defined(HAVE_MALLOC)
|
||||
|
||||
typedef struct {
|
||||
btstack_memory_buffer_t tracking;
|
||||
periodic_advertiser_list_entry_t data;
|
||||
} btstack_memory_periodic_advertiser_list_entry_t;
|
||||
|
||||
periodic_advertiser_list_entry_t * btstack_memory_periodic_advertiser_list_entry_get(void){
|
||||
btstack_memory_periodic_advertiser_list_entry_t * buffer = (btstack_memory_periodic_advertiser_list_entry_t *) malloc(sizeof(btstack_memory_periodic_advertiser_list_entry_t));
|
||||
if (buffer){
|
||||
memset(buffer, 0, sizeof(btstack_memory_periodic_advertiser_list_entry_t));
|
||||
btstack_memory_tracking_add(&buffer->tracking);
|
||||
return &buffer->data;
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
void btstack_memory_periodic_advertiser_list_entry_free(periodic_advertiser_list_entry_t *periodic_advertiser_list_entry){
|
||||
// reconstruct buffer start
|
||||
btstack_memory_buffer_t * buffer = &((btstack_memory_buffer_t *) periodic_advertiser_list_entry)[-1];
|
||||
btstack_memory_tracking_remove(buffer);
|
||||
free(buffer);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
#ifdef ENABLE_MESH
|
||||
|
||||
@ -1865,6 +1922,9 @@ void btstack_memory_init(void){
|
||||
#if MAX_NR_WHITELIST_ENTRIES > 0
|
||||
btstack_memory_pool_create(&whitelist_entry_pool, whitelist_entry_storage, MAX_NR_WHITELIST_ENTRIES, sizeof(whitelist_entry_t));
|
||||
#endif
|
||||
#if MAX_NR_PERIODIC_ADVERTISER_LIST_ENTRIES > 0
|
||||
btstack_memory_pool_create(&periodic_advertiser_list_entry_pool, periodic_advertiser_list_entry_storage, MAX_NR_PERIODIC_ADVERTISER_LIST_ENTRIES, sizeof(periodic_advertiser_list_entry_t));
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ENABLE_MESH
|
||||
#if MAX_NR_MESH_NETWORK_PDUS > 0
|
||||
|
@ -160,7 +160,7 @@ void btstack_memory_avrcp_browsing_connection_free(avrcp_browsing_connection_t
|
||||
|
||||
#endif
|
||||
#ifdef ENABLE_BLE
|
||||
// battery_service_client, gatt_client, hids_client, scan_parameters_service_client, sm_lookup_entry, whitelist_entry
|
||||
// battery_service_client, gatt_client, hids_client, scan_parameters_service_client, sm_lookup_entry, whitelist_entry, periodic_advertiser_list_entry
|
||||
battery_service_client_t * btstack_memory_battery_service_client_get(void);
|
||||
void btstack_memory_battery_service_client_free(battery_service_client_t *battery_service_client);
|
||||
gatt_client_t * btstack_memory_gatt_client_get(void);
|
||||
@ -173,6 +173,8 @@ sm_lookup_entry_t * btstack_memory_sm_lookup_entry_get(void);
|
||||
void btstack_memory_sm_lookup_entry_free(sm_lookup_entry_t *sm_lookup_entry);
|
||||
whitelist_entry_t * btstack_memory_whitelist_entry_get(void);
|
||||
void btstack_memory_whitelist_entry_free(whitelist_entry_t *whitelist_entry);
|
||||
periodic_advertiser_list_entry_t * btstack_memory_periodic_advertiser_list_entry_get(void);
|
||||
void btstack_memory_periodic_advertiser_list_entry_free(periodic_advertiser_list_entry_t *periodic_advertiser_list_entry);
|
||||
#endif
|
||||
#ifdef ENABLE_MESH
|
||||
// mesh_network_pdu, mesh_segmented_pdu, mesh_upper_transport_pdu, mesh_network_key, mesh_transport_key, mesh_virtual_address, mesh_subnet
|
||||
|
14
src/hci.h
14
src/hci.h
@ -830,6 +830,12 @@ enum {
|
||||
LE_WHITELIST_REMOVE_FROM_CONTROLLER = 1 << 2,
|
||||
};
|
||||
|
||||
enum {
|
||||
LE_PERIODIC_ADVERTISER_LIST_ENTRY_ON_CONTROLLER = 1 << 0,
|
||||
LE_PERIODIC_ADVERTISER_LIST_ENTRY_ADD_TO_CONTROLLER = 1 << 1,
|
||||
LE_PERIODIC_ADVERTISER_LIST_ENTRY_REMOVE_FROM_CONTROLLER = 1 << 2,
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
btstack_linked_item_t item;
|
||||
bd_addr_t address;
|
||||
@ -837,6 +843,14 @@ typedef struct {
|
||||
uint8_t state;
|
||||
} whitelist_entry_t;
|
||||
|
||||
typedef struct {
|
||||
btstack_linked_item_t item;
|
||||
bd_addr_t address;
|
||||
bd_addr_type_t address_type;
|
||||
uint8_t sid;
|
||||
uint8_t state;
|
||||
} periodic_advertiser_list_entry_t;
|
||||
|
||||
#define MAX_NUM_RESOLVING_LIST_ENTRIES 64
|
||||
typedef enum {
|
||||
LE_RESOLVING_LIST_SEND_ENABLE_ADDRESS_RESOLUTION,
|
||||
|
@ -1010,6 +1010,48 @@ TEST(btstack_memory, whitelist_entry_NotEnoughBuffers){
|
||||
CHECK(context == NULL);
|
||||
}
|
||||
|
||||
|
||||
|
||||
TEST(btstack_memory, periodic_advertiser_list_entry_GetAndFree){
|
||||
periodic_advertiser_list_entry_t * context;
|
||||
#ifdef HAVE_MALLOC
|
||||
context = btstack_memory_periodic_advertiser_list_entry_get();
|
||||
CHECK(context != NULL);
|
||||
btstack_memory_periodic_advertiser_list_entry_free(context);
|
||||
#else
|
||||
#ifdef MAX_NR_PERIODIC_ADVERTISER_LIST_ENTRIES
|
||||
// single
|
||||
context = btstack_memory_periodic_advertiser_list_entry_get();
|
||||
CHECK(context != NULL);
|
||||
btstack_memory_periodic_advertiser_list_entry_free(context);
|
||||
#else
|
||||
// none
|
||||
context = btstack_memory_periodic_advertiser_list_entry_get();
|
||||
CHECK(context == NULL);
|
||||
btstack_memory_periodic_advertiser_list_entry_free(context);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
TEST(btstack_memory, periodic_advertiser_list_entry_NotEnoughBuffers){
|
||||
periodic_advertiser_list_entry_t * context;
|
||||
#ifdef HAVE_MALLOC
|
||||
simulate_no_memory = 1;
|
||||
#else
|
||||
#ifdef MAX_NR_PERIODIC_ADVERTISER_LIST_ENTRIES
|
||||
int i;
|
||||
// alloc all static buffers
|
||||
for (i = 0; i < MAX_NR_PERIODIC_ADVERTISER_LIST_ENTRIES; i++){
|
||||
context = btstack_memory_periodic_advertiser_list_entry_get();
|
||||
CHECK(context != NULL);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
// get one more
|
||||
context = btstack_memory_periodic_advertiser_list_entry_get();
|
||||
CHECK(context == NULL);
|
||||
}
|
||||
|
||||
#endif
|
||||
#ifdef ENABLE_MESH
|
||||
|
||||
|
@ -303,7 +303,7 @@ list_of_classic_structs = [
|
||||
["avrcp_browsing_connection"],
|
||||
]
|
||||
list_of_le_structs = [
|
||||
["battery_service_client", "gatt_client", "hids_client", "scan_parameters_service_client", "sm_lookup_entry", "whitelist_entry"],
|
||||
["battery_service_client", "gatt_client", "hids_client", "scan_parameters_service_client", "sm_lookup_entry", "whitelist_entry", "periodic_advertiser_list_entry"],
|
||||
]
|
||||
list_of_mesh_structs = [
|
||||
['mesh_network_pdu', 'mesh_segmented_pdu', 'mesh_upper_transport_pdu', 'mesh_network_key', 'mesh_transport_key', 'mesh_virtual_address', 'mesh_subnet']
|
||||
|
Loading…
x
Reference in New Issue
Block a user