Microchip® Advanced Software Framework

att_db.c File Reference
#include <stdio.h>
#include <string.h>
#include "ble/att_db.h"
#include "ble/core.h"
#include "bluetooth.h"
#include "btstack_debug.h"
#include "btstack_util.h"

Data Structures

struct  att_iterator
 

Macros

#define __BTSTACK_FILE__   "att_db.c"
 

Typedefs

typedef struct att_iterator att_iterator_t
 

Functions

void att_clear_transaction_queue (att_connection_t *att_connection)
 
static int att_copy_value (att_iterator_t *it, uint16_t offset, uint8_t *buffer, uint16_t buffer_size, hci_con_handle_t con_handle)
 
void att_dump_attributes (void)
 
static int att_find_handle (att_iterator_t *it, uint16_t handle)
 
uint16_t att_handle_request (att_connection_t *att_connection, uint8_t *request_buffer, uint16_t request_len, uint8_t *response_buffer)
 
static void att_iterator_fetch_next (att_iterator_t *it)
 
static int att_iterator_has_next (att_iterator_t *it)
 
static void att_iterator_init (att_iterator_t *it)
 
static int att_iterator_match_uuid (att_iterator_t *it, uint8_t *uuid, uint16_t uuid_len)
 
static int att_iterator_match_uuid16 (att_iterator_t *it, uint16_t uuid)
 
static void att_notify_write_callbacks (att_connection_t *att_connection, uint16_t transaction_mode)
 
uint16_t att_prepare_handle_value_indication (att_connection_t *att_connection, uint16_t handle, uint8_t *value, uint16_t value_len, uint8_t *response_buffer)
 
uint16_t att_prepare_handle_value_notification (att_connection_t *att_connection, uint16_t handle, uint8_t *value, uint16_t value_len, uint8_t *response_buffer)
 
static void att_prepare_write_reset (void)
 
static void att_prepare_write_update_errors (uint8_t error_code, uint16_t handle)
 
static att_read_callback_t att_read_callback_for_handle (uint16_t handle)
 
uint16_t att_read_callback_handle_blob (const uint8_t *blob, uint16_t blob_size, uint16_t offset, uint8_t *buffer, uint16_t buffer_size)
 
uint16_t att_read_callback_handle_byte (uint8_t value, uint16_t offset, uint8_t *buffer, uint16_t buffer_size)
 
uint16_t att_read_callback_handle_little_endian_16 (uint16_t value, uint16_t offset, uint8_t *buffer, uint16_t buffer_size)
 
uint16_t att_read_callback_handle_little_endian_32 (uint32_t value, uint16_t offset, uint8_t *buffer, uint16_t buffer_size)
 
void att_register_service_handler (att_service_handler_t *handler)
 register read/write callbacks for specific handle range More...
 
static att_service_handler_tatt_service_handler_for_handle (uint16_t handle)
 
void att_set_db (uint8_t const *db)
 
void att_set_read_callback (att_read_callback_t callback)
 
void att_set_write_callback (att_write_callback_t callback)
 
static void att_update_value_len (att_iterator_t *it, hci_con_handle_t con_handle)
 
uint16_t att_uuid_for_handle (uint16_t attribute_handle)
 
static uint8_t att_validate_prepared_write (att_connection_t *att_connection)
 
static uint8_t att_validate_security (att_connection_t *att_connection, att_iterator_t *it)
 
static att_write_callback_t att_write_callback_for_handle (uint16_t handle)
 
uint16_t gatt_server_get_client_configuration_handle_for_characteristic_with_uuid16 (uint16_t start_handle, uint16_t end_handle, uint16_t uuid16)
 
int gatt_server_get_get_handle_range_for_service_with_uuid16 (uint16_t uuid16, uint16_t *start_handle, uint16_t *end_handle)
 
uint16_t gatt_server_get_value_handle_for_characteristic_with_uuid16 (uint16_t start_handle, uint16_t end_handle, uint16_t uuid16)
 
static uint16_t handle_exchange_mtu_request (att_connection_t *att_connection, uint8_t *request_buffer, uint16_t request_len, uint8_t *response_buffer)
 
static uint16_t handle_execute_write_request (att_connection_t *att_connection, uint8_t *request_buffer, uint16_t request_len, uint8_t *response_buffer, uint16_t response_buffer_size)
 
static uint16_t handle_find_by_type_value_request (att_connection_t *att_connection, uint8_t *request_buffer, uint16_t request_len, uint8_t *response_buffer, uint16_t response_buffer_size)
 
static uint16_t handle_find_by_type_value_request2 (att_connection_t *att_connection, uint8_t *response_buffer, uint16_t response_buffer_size, uint16_t start_handle, uint16_t end_handle, uint16_t attribute_type, uint16_t attribute_len, uint8_t *attribute_value)
 
static uint16_t handle_find_information_request (att_connection_t *att_connection, uint8_t *request_buffer, uint16_t request_len, uint8_t *response_buffer, uint16_t response_buffer_size)
 
static uint16_t handle_find_information_request2 (att_connection_t *att_connection, uint8_t *response_buffer, uint16_t response_buffer_size, uint16_t start_handle, uint16_t end_handle)
 
static uint16_t handle_prepare_write_request (att_connection_t *att_connection, uint8_t *request_buffer, uint16_t request_len, uint8_t *response_buffer, uint16_t response_buffer_size)
 
static uint16_t handle_read_blob_request (att_connection_t *att_connection, uint8_t *request_buffer, uint16_t request_len, uint8_t *response_buffer, uint16_t response_buffer_size)
 
static uint16_t handle_read_blob_request2 (att_connection_t *att_connection, uint8_t *response_buffer, uint16_t response_buffer_size, uint16_t handle, uint16_t value_offset)
 
static uint16_t handle_read_by_group_type_request (att_connection_t *att_connection, uint8_t *request_buffer, uint16_t request_len, uint8_t *response_buffer, uint16_t response_buffer_size)
 
static uint16_t handle_read_by_group_type_request2 (att_connection_t *att_connection, uint8_t *response_buffer, uint16_t response_buffer_size, uint16_t start_handle, uint16_t end_handle, uint16_t attribute_type_len, uint8_t *attribute_type)
 
static uint16_t handle_read_by_type_request (att_connection_t *att_connection, uint8_t *request_buffer, uint16_t request_len, uint8_t *response_buffer, uint16_t response_buffer_size)
 
static uint16_t handle_read_by_type_request2 (att_connection_t *att_connection, uint8_t *response_buffer, uint16_t response_buffer_size, uint16_t start_handle, uint16_t end_handle, uint16_t attribute_type_len, uint8_t *attribute_type)
 
static uint16_t handle_read_multiple_request (att_connection_t *att_connection, uint8_t *request_buffer, uint16_t request_len, uint8_t *response_buffer, uint16_t response_buffer_size)
 
static uint16_t handle_read_multiple_request2 (att_connection_t *att_connection, uint8_t *response_buffer, uint16_t response_buffer_size, uint16_t num_handles, uint8_t *handles)
 
static uint16_t handle_read_request (att_connection_t *att_connection, uint8_t *request_buffer, uint16_t request_len, uint8_t *response_buffer, uint16_t response_buffer_size)
 
static uint16_t handle_read_request2 (att_connection_t *att_connection, uint8_t *response_buffer, uint16_t response_buffer_size, uint16_t handle)
 
static void handle_write_command (att_connection_t *att_connection, uint8_t *request_buffer, uint16_t request_len, uint8_t *response_buffer, uint16_t response_buffer_size)
 
static uint16_t handle_write_request (att_connection_t *att_connection, uint8_t *request_buffer, uint16_t request_len, uint8_t *response_buffer, uint16_t response_buffer_size)
 
static int is_Bluetooth_Base_UUID (uint8_t const *uuid)
 
static uint16_t prepare_handle_value (att_connection_t *att_connection, uint16_t handle, uint8_t *value, uint16_t value_len, uint8_t *response_buffer)
 
static uint16_t setup_error (uint8_t *response_buffer, uint16_t request, uint16_t handle, uint8_t error_code)
 
static uint16_t setup_error_atribute_not_found (uint8_t *response_buffer, uint16_t request, uint16_t start_handle)
 
static uint16_t setup_error_invalid_handle (uint8_t *response_buffer, uint16_t request, uint16_t handle)
 
static uint16_t setup_error_invalid_offset (uint8_t *response_buffer, uint16_t request, uint16_t handle)
 
static uint16_t setup_error_read_not_permitted (uint8_t *response_buffer, uint16_t request, uint16_t start_handle)
 
static uint16_t setup_error_write_not_permitted (uint8_t *response_buffer, uint16_t request, uint16_t start_handle)
 
static uint16_t uuid16_from_uuid (uint16_t uuid_len, uint8_t *uuid)
 

Variables

static uint8_t const * att_db = NULL
 
static uint8_t att_prepare_write_error_code = 0
 
static uint16_t att_prepare_write_error_handle = 0x0000
 
static att_read_callback_t att_read_callback = NULL
 
static att_write_callback_t att_write_callback = NULL
 
static const uint8_t bluetooth_base_uuid [] = { 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
 
static btstack_linked_list_t service_handlers
 

#define __BTSTACK_FILE__   "att_db.c"

typedef struct att_iterator att_iterator_t

void att_clear_transaction_queue ( att_connection_t att_connection)
uint16_t att_prepare_handle_value_indication ( att_connection_t att_connection,
uint16_t  handle,
uint8_t *  value,
uint16_t  value_len,
uint8_t *  response_buffer 
)
uint16_t att_prepare_handle_value_notification ( att_connection_t att_connection,
uint16_t  handle,
uint8_t *  value,
uint16_t  value_len,
uint8_t *  response_buffer 
)
static void att_prepare_write_reset ( void  )
static
static void att_prepare_write_update_errors ( uint8_t  error_code,
uint16_t  handle 
)
static
static att_read_callback_t att_read_callback_for_handle ( uint16_t  handle)
static
uint16_t att_read_callback_handle_blob ( const uint8_t *  blob,
uint16_t  blob_size,
uint16_t  offset,
uint8_t *  buffer,
uint16_t  buffer_size 
)
uint16_t att_read_callback_handle_byte ( uint8_t  value,
uint16_t  offset,
uint8_t *  buffer,
uint16_t  buffer_size 
)
uint16_t att_read_callback_handle_little_endian_16 ( uint16_t  value,
uint16_t  offset,
uint8_t *  buffer,
uint16_t  buffer_size 
)
uint16_t att_read_callback_handle_little_endian_32 ( uint32_t  value,
uint16_t  offset,
uint8_t *  buffer,
uint16_t  buffer_size 
)
void att_register_service_handler ( att_service_handler_t handler)
void att_set_db ( uint8_t const *  db)

References att_db.

Referenced by att_server_init().

void att_set_read_callback ( att_read_callback_t  callback)

References att_read_callback, and callback.

Referenced by att_server_init().

void att_set_write_callback ( att_write_callback_t  callback)

References att_write_callback, and callback.

Referenced by att_server_init().

uint16_t att_uuid_for_handle ( uint16_t  attribute_handle)
uint16_t gatt_server_get_client_configuration_handle_for_characteristic_with_uuid16 ( uint16_t  start_handle,
uint16_t  end_handle,
uint16_t  uuid16 
)
uint16_t gatt_server_get_value_handle_for_characteristic_with_uuid16 ( uint16_t  start_handle,
uint16_t  end_handle,
uint16_t  uuid16 
)
static uint16_t handle_exchange_mtu_request ( att_connection_t att_connection,
uint8_t *  request_buffer,
uint16_t  request_len,
uint8_t *  response_buffer 
)
static
static uint16_t handle_execute_write_request ( att_connection_t att_connection,
uint8_t *  request_buffer,
uint16_t  request_len,
uint8_t *  response_buffer,
uint16_t  response_buffer_size 
)
static
static uint16_t handle_find_by_type_value_request ( att_connection_t att_connection,
uint8_t *  request_buffer,
uint16_t  request_len,
uint8_t *  response_buffer,
uint16_t  response_buffer_size 
)
static
static uint16_t handle_find_by_type_value_request2 ( att_connection_t att_connection,
uint8_t *  response_buffer,
uint16_t  response_buffer_size,
uint16_t  start_handle,
uint16_t  end_handle,
uint16_t  attribute_type,
uint16_t  attribute_len,
uint8_t *  attribute_value 
)
static
static uint16_t handle_find_information_request ( att_connection_t att_connection,
uint8_t *  request_buffer,
uint16_t  request_len,
uint8_t *  response_buffer,
uint16_t  response_buffer_size 
)
static
static uint16_t handle_find_information_request2 ( att_connection_t att_connection,
uint8_t *  response_buffer,
uint16_t  response_buffer_size,
uint16_t  start_handle,
uint16_t  end_handle 
)
static
static uint16_t handle_read_blob_request ( att_connection_t att_connection,
uint8_t *  request_buffer,
uint16_t  request_len,
uint8_t *  response_buffer,
uint16_t  response_buffer_size 
)
static
static uint16_t handle_read_by_group_type_request ( att_connection_t att_connection,
uint8_t *  request_buffer,
uint16_t  request_len,
uint8_t *  response_buffer,
uint16_t  response_buffer_size 
)
static
static uint16_t handle_read_by_type_request ( att_connection_t att_connection,
uint8_t *  request_buffer,
uint16_t  request_len,
uint8_t *  response_buffer,
uint16_t  response_buffer_size 
)
static
static uint16_t handle_read_multiple_request ( att_connection_t att_connection,
uint8_t *  request_buffer,
uint16_t  request_len,
uint8_t *  response_buffer,
uint16_t  response_buffer_size 
)
static
static uint16_t handle_read_request ( att_connection_t att_connection,
uint8_t *  request_buffer,
uint16_t  request_len,
uint8_t *  response_buffer,
uint16_t  response_buffer_size 
)
static
static void handle_write_command ( att_connection_t att_connection,
uint8_t *  request_buffer,
uint16_t  request_len,
uint8_t *  response_buffer,
uint16_t  response_buffer_size 
)
static
static uint16_t handle_write_request ( att_connection_t att_connection,
uint8_t *  request_buffer,
uint16_t  request_len,
uint8_t *  response_buffer,
uint16_t  response_buffer_size 
)
static
static int is_Bluetooth_Base_UUID ( uint8_t const *  uuid)
static
static uint16_t prepare_handle_value ( att_connection_t att_connection,
uint16_t  handle,
uint8_t *  value,
uint16_t  value_len,
uint8_t *  response_buffer 
)
static
static uint16_t setup_error_atribute_not_found ( uint8_t *  response_buffer,
uint16_t  request,
uint16_t  start_handle 
)
inlinestatic
static uint16_t setup_error_invalid_offset ( uint8_t *  response_buffer,
uint16_t  request,
uint16_t  handle 
)
inlinestatic
static uint16_t setup_error_read_not_permitted ( uint8_t *  response_buffer,
uint16_t  request,
uint16_t  start_handle 
)
inlinestatic
static uint16_t setup_error_write_not_permitted ( uint8_t *  response_buffer,
uint16_t  request,
uint16_t  start_handle 
)
inlinestatic
static uint16_t uuid16_from_uuid ( uint16_t  uuid_len,
uint8_t *  uuid 
)
static

uint8_t const* att_db = NULL
static

Referenced by att_iterator_init(), and att_set_db().

uint8_t att_prepare_write_error_code = 0
static
uint16_t att_prepare_write_error_handle = 0x0000
static
att_read_callback_t att_read_callback = NULL
static
const uint8_t bluetooth_base_uuid[] = { 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
static

Referenced by is_Bluetooth_Base_UUID().

btstack_linked_list_t service_handlers
static