mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-04-10 15:44:32 +00:00
larger database, use single buffer for read/write of all values
This commit is contained in:
parent
783245dd07
commit
4538153dfc
@ -192,17 +192,48 @@ static void app_run(){
|
||||
update_client = 0;
|
||||
}
|
||||
|
||||
static const char alphabet[] = "abcdefghijklmnopqrstuvwxyz";
|
||||
|
||||
#define ATT_VALUE_MAX_LEN 32
|
||||
static uint8_t att_value[ATT_VALUE_MAX_LEN];
|
||||
static uint16_t att_value_len = 0;
|
||||
|
||||
|
||||
// ATT Client Read Callback for Dynamic Data
|
||||
// - if buffer == NULL, don't copy data, just return size of value
|
||||
// - if buffer != NULL, copy data and return number bytes copied
|
||||
// @param offset defines start of attribute value
|
||||
static uint16_t att_read_callback(uint16_t handle, uint16_t offset, uint8_t * buffer, uint16_t buffer_size){
|
||||
// assert offset <= att_value_len
|
||||
if (offset > att_value_len) {
|
||||
return 0;
|
||||
}
|
||||
uint16_t bytes_to_copy = att_value_len - offset;
|
||||
if (!buffer) return bytes_to_copy;
|
||||
if (bytes_to_copy > buffer_size){
|
||||
bytes_to_copy = buffer_size;
|
||||
}
|
||||
memcpy(buffer, &att_value[offset], bytes_to_copy);
|
||||
return bytes_to_copy;
|
||||
}
|
||||
|
||||
// write requests
|
||||
static int att_write_callback(uint16_t handle, uint16_t transaction_mode, uint16_t offset, uint8_t *buffer, uint16_t buffer_size, signature_t * signature){
|
||||
printf("WRITE Callback, handle %04x\n", handle);
|
||||
printf("Value: ");
|
||||
hexdump(buffer, buffer_size);
|
||||
if (buffer_size > ATT_VALUE_MAX_LEN){
|
||||
buffer_size = ATT_VALUE_MAX_LEN;
|
||||
}
|
||||
memcpy(att_value, buffer, buffer_size);
|
||||
att_value_len = buffer_size;
|
||||
|
||||
switch(handle){
|
||||
case 0x0010:
|
||||
client_configuration = buffer[0];
|
||||
printf("Client Configuration set to %u\n", client_configuration);
|
||||
break;
|
||||
default:
|
||||
printf("Value: ");
|
||||
hexdump(buffer, buffer_size);
|
||||
break;
|
||||
}
|
||||
return 1;
|
||||
@ -387,7 +418,9 @@ void setup(void){
|
||||
// sm_set_encryption_key_size_range(7,15);
|
||||
|
||||
// setup ATT server
|
||||
att_server_init(profile_data, NULL, att_write_callback);
|
||||
att_server_init(profile_data, att_read_callback, att_write_callback);
|
||||
memcpy(att_value, alphabet, sizeof(alphabet));
|
||||
att_value_len = sizeof(alphabet);
|
||||
att_server_register_packet_handler(app_packet_handler);
|
||||
}
|
||||
|
||||
|
@ -5,36 +5,78 @@ CHARACTERISTIC, GAP_APPEARANCE, READ, 00 00
|
||||
PRIMARY_SERVICE, GATT_SERVICE
|
||||
CHARACTERISTIC, GATT_SERVICE_CHANGED, READ,
|
||||
|
||||
SECONDARY_SERVICE, FF10
|
||||
CHARACTERISTIC, FF11, READ | WRITE | DYNAMIC,
|
||||
|
||||
SECONDARY_SERVICE, FFFF
|
||||
INCLUDE_SERVICE, FF10
|
||||
|
||||
SECONDARY_SERVICE, FFFC
|
||||
CHARACTERISTIC, FFFD, READ | WRITE | DYNAMIC,
|
||||
CHARACTERISTIC, FFFE, READ | WRITE | DYNAMIC,
|
||||
|
||||
SECONDARY_SERVICE, FFFA
|
||||
CHARACTERISTIC, FFFB, READ | WRITE | DYNAMIC,
|
||||
|
||||
SECONDARY_SERVICE, FFF9
|
||||
INCLUDE_SERVICE, FFFA
|
||||
|
||||
SECONDARY_SERVICE, FFF7
|
||||
INCLUDE_SERVICE, FFF9
|
||||
CHARACTERISTIC, FFF8, READ | WRITE | DYNAMIC,
|
||||
|
||||
// SECONDARY_SERVICE, FF10
|
||||
// CHARACTERISTIC, FF11, READ | WRITE | DYNAMIC,
|
||||
//
|
||||
// SECONDARY_SERVICE, FFFF
|
||||
// INCLUDE_SERVICE, FF10
|
||||
//
|
||||
// SECONDARY_SERVICE, FFFC
|
||||
// CHARACTERISTIC, FFFD, READ | WRITE | DYNAMIC,
|
||||
// CHARACTERISTIC, FFFE, READ | WRITE | DYNAMIC,
|
||||
//
|
||||
// SECONDARY_SERVICE, FFFA
|
||||
// CHARACTERISTIC, FFFB, READ | WRITE | DYNAMIC,
|
||||
//
|
||||
// SECONDARY_SERVICE, FFF9
|
||||
// INCLUDE_SERVICE, FFFA
|
||||
//
|
||||
// SECONDARY_SERVICE, FFF7
|
||||
// INCLUDE_SERVICE, FFF9
|
||||
// CHARACTERISTIC, FFF8, READ | WRITE | DYNAMIC,
|
||||
//
|
||||
SECONDARY_SERVICE, FFF4
|
||||
INCLUDE_SERVICE, FFF7
|
||||
INCLUDE_SERVICE, FFFC
|
||||
INCLUDE_SERVICE, FFFF
|
||||
// INCLUDE_SERVICE, FFF7
|
||||
// INCLUDE_SERVICE, FFFC
|
||||
// INCLUDE_SERVICE, FFFF
|
||||
CHARACTERISTIC, FFF5, READ | WRITE | DYNAMIC,
|
||||
CHARACTERISTIC, FFF6, READ | WRITE | DYNAMIC,
|
||||
//
|
||||
// PRIMARY_SERVICE, FFF0
|
||||
// INCLUDE_SERVICE, FFF4
|
||||
// CHARACTERISTIC, FFF1, READ | WRITE | DYNAMIC | AUTHORIZATION_REQUIRED | ENCRYPTION_KEY_SIZE_7 | AUTHENTICATION_REQUIRED,
|
||||
// CHARACTERISTIC, FFF2, READ | WRITE | DYNAMIC,
|
||||
// CHARACTERISTIC, FFF3, READ | INDICATE | CLIENT_CONFIGURATION,
|
||||
// CHARACTERISTIC, 00001234-0000-1000-8000-00805F9B34FB, READ | WRITE | DYNAMIC,
|
||||
|
||||
// Primary Service with 16-bit UUID, included service
|
||||
PRIMARY_SERVICE, F000
|
||||
INCLUDE_SERVICE, FFF4
|
||||
// Characteristics 16 and 128 bit with different authoriztion/authentication/encryption requirements and read/write flags
|
||||
// - no requirements
|
||||
CHARACTERISTIC, F100, READ | WRITE | DYNAMIC,
|
||||
CHARACTERISTIC, 0000F101-0000-1000-8000-00805F9B34FB, READ | WRITE | DYNAMIC,
|
||||
// - neither read nor writable
|
||||
CHARACTERISTIC, F102, DYNAMIC,
|
||||
CHARACTERISTIC, 0000F103-0000-1000-8000-00805F9B34FB, DYNAMIC,
|
||||
// - authorization required
|
||||
CHARACTERISTIC, F104, READ | WRITE | DYNAMIC | AUTHORIZATION_REQUIRED,
|
||||
CHARACTERISTIC, 0000F105-0000-1000-8000-00805F9B34FB, READ | WRITE | DYNAMIC | AUTHORIZATION_REQUIRED,
|
||||
// - authenthication required
|
||||
CHARACTERISTIC, F106, READ | WRITE | DYNAMIC | AUTHENTICATION_REQUIRED,
|
||||
CHARACTERISTIC, 0000F107-0000-1000-8000-00805F9B34FB, READ | WRITE | DYNAMIC | AUTHENTICATION_REQUIRED,
|
||||
// - encryptiont with 128 bit key required
|
||||
CHARACTERISTIC, F108, READ | WRITE | DYNAMIC | ENCRYPTION_KEY_SIZE_7,
|
||||
CHARACTERISTIC, 0000F109-0000-1000-8000-00805F9B34FB, READ | WRITE | DYNAMIC | ENCRYPTION_KEY_SIZE_16,
|
||||
|
||||
// Primary Service with 128-bit UUID, included service
|
||||
PRIMARY_SERVICE, 0000F001-0000-1000-8000-00805F9B34FB
|
||||
INCLUDE_SERVICE, FFF4
|
||||
// Characteristics 16 and 128 bit with different authoriztion/authentication/encryption requirements and read/write flags
|
||||
// - no requirements
|
||||
CHARACTERISTIC, F200, READ | WRITE | DYNAMIC,
|
||||
CHARACTERISTIC, 0000F201-0000-1000-8000-00805F9B34FB, READ | WRITE | DYNAMIC,
|
||||
// - neither read nor writable
|
||||
CHARACTERISTIC, F202, DYNAMIC,
|
||||
CHARACTERISTIC, 0000F203-0000-1000-8000-00805F9B34FB, DYNAMIC,
|
||||
// - authorization required
|
||||
CHARACTERISTIC, F204, READ | WRITE | DYNAMIC | AUTHORIZATION_REQUIRED,
|
||||
CHARACTERISTIC, 0000F205-0000-1000-8000-00805F9B34FB, READ | WRITE | DYNAMIC | AUTHORIZATION_REQUIRED,
|
||||
// - authenthication required
|
||||
CHARACTERISTIC, F206, READ | WRITE | DYNAMIC | AUTHENTICATION_REQUIRED,
|
||||
CHARACTERISTIC, 0000F207-0000-1000-8000-00805F9B34FB, READ | WRITE | DYNAMIC | AUTHENTICATION_REQUIRED,
|
||||
// - encryptiont with 128 bit key required
|
||||
CHARACTERISTIC, F208, READ | WRITE | DYNAMIC | ENCRYPTION_KEY_SIZE_7,
|
||||
CHARACTERISTIC, 0000F209-0000-1000-8000-00805F9B34FB, READ | WRITE | DYNAMIC | ENCRYPTION_KEY_SIZE_16,
|
||||
|
||||
|
||||
PRIMARY_SERVICE, FFF0
|
||||
INCLUDE_SERVICE, FFF4
|
||||
CHARACTERISTIC, FFF1, READ | WRITE | DYNAMIC | AUTHORIZATION_REQUIRED | ENCRYPTION_KEY_SIZE_7 | AUTHENTICATION_REQUIRED,
|
||||
CHARACTERISTIC, FFF2, READ | WRITE | DYNAMIC,
|
||||
CHARACTERISTIC, FFF3, READ | INDICATE | CLIENT_CONFIGURATION,
|
||||
CHARACTERISTIC, 00001234-0000-1000-8000-00805F9B34FB, READ | WRITE | DYNAMIC,
|
||||
|
Loading…
x
Reference in New Issue
Block a user