att_db: add att_read_callback helpers for 1,2,4 byte unsigned little endian and blob data

This commit is contained in:
Matthias Ringwald 2017-09-23 10:20:52 +02:00
parent d63739c96d
commit bfd413f038
2 changed files with 74 additions and 1 deletions

View File

@ -1248,3 +1248,31 @@ uint16_t gatt_server_get_client_configuration_handle_for_characteristic_with_uui
return 0;
}
// att_read_callback helpers
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){
if (buffer){
uint16_t bytes_to_copy = btstack_min(blob_size - offset, buffer_size);
memcpy(buffer, &blob[offset], bytes_to_copy);
return bytes_to_copy;
} else {
return blob_size;
}
}
uint16_t att_read_callback_handle_little_endian_32(uint32_t value, uint16_t offset, uint8_t * buffer, uint16_t buffer_size){
uint8_t value_buffer[4];
little_endian_store_32(value_buffer, 0, value);
return att_read_callback_handle_blob(value_buffer, sizeof(value_buffer), offset, buffer, buffer_size);
}
uint16_t att_read_callback_handle_little_endian_16(uint16_t value, uint16_t offset, uint8_t * buffer, uint16_t buffer_size){
uint8_t value_buffer[2];
little_endian_store_16(value_buffer, 0, value);
return att_read_callback_handle_blob(value_buffer, sizeof(value_buffer), offset, buffer, buffer_size);
}
uint16_t att_read_callback_handle_byte(uint8_t value, uint16_t offset, uint8_t * buffer, uint16_t buffer_size){
uint8_t value_buffer[1];
value_buffer[0] = value;
return att_read_callback_handle_blob(value_buffer, sizeof(value_buffer), offset, buffer, buffer_size);
}

View File

@ -177,7 +177,52 @@ void att_clear_transaction_queue(att_connection_t * att_connection);
void att_register_service_handler(att_service_handler_t * handler);
// experimental client API
// att_read_callback helpers for a various data types
/*
* @brief Handle read of blob like data for att_read_callback
* @param blob of data
* @param blob_size of blob
* @param offset from att_read_callback
* @param buffer from att_read_callback
* @param buffer_size from att_read_callback
* @returns value size for buffer == 0 and num bytes copied otherwise
*/
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);
/*
* @brief Handle read of little endian unsigned 32 bit value for att_read_callback
* @param value
* @param offset from att_read_callback
* @param buffer from att_read_callback
* @param buffer_size from att_read_callback
* @returns value size for buffer == 0 and num bytes copied otherwise
*/
uint16_t att_read_callback_handle_little_endian_32(uint32_t value, uint16_t offset, uint8_t * buffer, uint16_t buffer_size);
/*
* @brief Handle read of little endian unsigned 16 bit value for att_read_callback
* @param value
* @param offset from att_read_callback
* @param buffer from att_read_callback
* @param buffer_size from att_read_callback
* @returns value size for buffer == 0 and num bytes copied otherwise
*/
uint16_t att_read_callback_handle_little_endian_16(uint16_t value, uint16_t offset, uint8_t * buffer, uint16_t buffer_size);
/*
* @brief Handle read of single byte for att_read_callback
* @param blob of data
* @param blob_size of blob
* @param offset from att_read_callback
* @param buffer from att_read_callback
* @param buffer_size from att_read_callback
* @returns value size for buffer == 0 and num bytes copied otherwise
*/
uint16_t att_read_callback_handle_byte(uint8_t value, uint16_t offset, uint8_t * buffer, uint16_t buffer_size);
// experimental client API
uint16_t att_uuid_for_handle(uint16_t attribute_handle);