mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-23 19:20:51 +00:00
gatt_server_test: test indicate
This commit is contained in:
parent
ea6d7f25d9
commit
782c1ae95b
@ -24,6 +24,10 @@
|
||||
#include "bluetooth_gatt.h"
|
||||
|
||||
static uint8_t battery_level = 100;
|
||||
static const uint8_t uuid128_with_bluetooth_base[] = { 0x00, 0x00, 0xBB, 0xBB, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB};
|
||||
static const uint8_t uuid128_no_bluetooth_base[] = { 0xFB, 0x34, 0x9B, 0x5F, 0x80, 0x00, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00, 0xAA, 0xAA, 0x00, 0x00 };
|
||||
|
||||
void l2cap_can_send_fixed_channel_packet_now_set_status(uint8_t status);
|
||||
|
||||
static uint16_t att_read_callback(hci_con_handle_t connection_handle, uint16_t att_handle, uint16_t offset, uint8_t * buffer, uint16_t buffer_size){
|
||||
UNUSED(connection_handle);
|
||||
@ -46,6 +50,7 @@ static int att_write_callback(hci_con_handle_t connection_handle, uint16_t att_h
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
TEST_GROUP(ATT_SERVER){
|
||||
|
||||
void setup(void){
|
||||
@ -54,7 +59,7 @@ TEST_GROUP(ATT_SERVER){
|
||||
// 0x180F
|
||||
att_db_util_add_service_uuid16(ORG_BLUETOOTH_SERVICE_BATTERY_SERVICE);
|
||||
// 0x2A19
|
||||
att_db_util_add_characteristic_uuid16(ORG_BLUETOOTH_CHARACTERISTIC_BATTERY_LEVEL, ATT_PROPERTY_WRITE | ATT_PROPERTY_READ | ATT_PROPERTY_NOTIFY, ATT_SECURITY_NONE, ATT_SECURITY_NONE, &battery_level, 1);
|
||||
att_db_util_add_characteristic_uuid16(ORG_BLUETOOTH_CHARACTERISTIC_BATTERY_LEVEL, ATT_PROPERTY_WRITE | ATT_PROPERTY_READ | ATT_PROPERTY_INDICATE, ATT_SECURITY_NONE, ATT_SECURITY_NONE, &battery_level, 1);
|
||||
// 0x2A1B
|
||||
att_db_util_add_characteristic_uuid16(ORG_BLUETOOTH_CHARACTERISTIC_BATTERY_LEVEL_STATE, ATT_PROPERTY_NOTIFY, ATT_SECURITY_NONE, ATT_SECURITY_NONE, &battery_level, 1);
|
||||
// 0x2A1A
|
||||
@ -63,15 +68,14 @@ TEST_GROUP(ATT_SERVER){
|
||||
att_db_util_add_characteristic_uuid16(ORG_BLUETOOTH_CHARACTERISTIC_BLOOD_PRESSURE_FEATURE, ATT_PROPERTY_DYNAMIC | ATT_PROPERTY_READ | ATT_PROPERTY_NOTIFY, ATT_SECURITY_NONE, ATT_SECURITY_NONE, &battery_level, 1);
|
||||
// 0x2A35
|
||||
att_db_util_add_characteristic_uuid16(ORG_BLUETOOTH_CHARACTERISTIC_BLOOD_PRESSURE_MEASUREMENT, ATT_PROPERTY_WRITE | ATT_PROPERTY_DYNAMIC, ATT_SECURITY_AUTHENTICATED, ATT_SECURITY_AUTHENTICATED, &battery_level, 1);
|
||||
|
||||
|
||||
att_db_util_add_characteristic_uuid128(uuid128_no_bluetooth_base, ATT_PROPERTY_WRITE | ATT_PROPERTY_DYNAMIC | ATT_PROPERTY_NOTIFY, ATT_SECURITY_NONE, ATT_SECURITY_NONE, &battery_level, 1);
|
||||
// 0x2A38
|
||||
att_db_util_add_characteristic_uuid16(ORG_BLUETOOTH_CHARACTERISTIC_BODY_SENSOR_LOCATION, ATT_PROPERTY_WRITE | ATT_PROPERTY_DYNAMIC | ATT_PROPERTY_NOTIFY, ATT_SECURITY_NONE, ATT_SECURITY_NONE, &battery_level, 1);
|
||||
|
||||
const uint8_t uuid128[] = {0x00, 0x00, 0xFF, 0x11, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB};
|
||||
att_db_util_add_characteristic_uuid128(uuid128, ATT_PROPERTY_WRITE | ATT_PROPERTY_DYNAMIC | ATT_PROPERTY_NOTIFY, ATT_SECURITY_NONE, ATT_SECURITY_NONE, &battery_level, 1);
|
||||
|
||||
// 0x2AA7
|
||||
att_db_util_add_characteristic_uuid16(ORG_BLUETOOTH_CHARACTERISTIC_CGM_MEASUREMENT, ATT_PROPERTY_WRITE_WITHOUT_RESPONSE | ATT_PROPERTY_DYNAMIC | ATT_PROPERTY_NOTIFY, ATT_SECURITY_AUTHENTICATED, ATT_SECURITY_AUTHENTICATED, &battery_level, 1);
|
||||
|
||||
att_db_util_add_characteristic_uuid128(uuid128_with_bluetooth_base, ATT_PROPERTY_WRITE | ATT_PROPERTY_DYNAMIC | ATT_PROPERTY_NOTIFY, ATT_SECURITY_NONE, ATT_SECURITY_NONE, &battery_level, 1);
|
||||
// 0x2AAB
|
||||
att_db_util_add_characteristic_uuid16(ORG_BLUETOOTH_CHARACTERISTIC_CGM_SESSION_RUN_TIME, ATT_PROPERTY_WRITE_WITHOUT_RESPONSE | ATT_PROPERTY_DYNAMIC | ATT_PROPERTY_NOTIFY, ATT_SECURITY_NONE, ATT_SECURITY_NONE, &battery_level, 1);
|
||||
|
||||
@ -80,8 +84,65 @@ TEST_GROUP(ATT_SERVER){
|
||||
}
|
||||
};
|
||||
|
||||
TEST(ATT_SERVER, test){
|
||||
|
||||
TEST(ATT_SERVER, gatt_server_get_value_handle_for_characteristic_with_uuid16){
|
||||
// att_dump_attributes();
|
||||
uint16_t value_handle;
|
||||
|
||||
// start handle > value handle
|
||||
value_handle = gatt_server_get_value_handle_for_characteristic_with_uuid16(0xf000, 0xffff, ORG_BLUETOOTH_CHARACTERISTIC_BATTERY_LEVEL);
|
||||
CHECK_EQUAL(0, value_handle);
|
||||
|
||||
// end handle < value handle
|
||||
value_handle = gatt_server_get_value_handle_for_characteristic_with_uuid16(0, 0x02, ORG_BLUETOOTH_CHARACTERISTIC_BATTERY_LEVEL);
|
||||
CHECK_EQUAL(0, value_handle);
|
||||
|
||||
// search value handle for unknown UUID
|
||||
value_handle = gatt_server_get_value_handle_for_characteristic_with_uuid16(0, 0xffff, 0xffff);
|
||||
CHECK_EQUAL(0, value_handle);
|
||||
|
||||
value_handle = gatt_server_get_value_handle_for_characteristic_with_uuid16(0, 0xffff, 0);
|
||||
CHECK_EQUAL(0, value_handle);
|
||||
|
||||
// search value handle after one with uuid128_no_bluetooth_base
|
||||
value_handle = gatt_server_get_value_handle_for_characteristic_with_uuid16(0, 0xffff, ORG_BLUETOOTH_CHARACTERISTIC_BODY_SENSOR_LOCATION);
|
||||
CHECK_EQUAL(0x0014, value_handle);
|
||||
|
||||
// search value handle after one with uuid128_with_bluetooth_base
|
||||
value_handle = gatt_server_get_value_handle_for_characteristic_with_uuid16(0, 0xffff, ORG_BLUETOOTH_CHARACTERISTIC_CGM_SESSION_RUN_TIME);
|
||||
CHECK_EQUAL(0x001a, value_handle);
|
||||
|
||||
// search value handle registered with bluetooth_base
|
||||
value_handle = gatt_server_get_value_handle_for_characteristic_with_uuid16(0, 0xffff, 0xbbbb);
|
||||
CHECK_EQUAL(0x0017, value_handle);
|
||||
|
||||
// correct read
|
||||
value_handle = gatt_server_get_value_handle_for_characteristic_with_uuid16(0, 0xffff, ORG_BLUETOOTH_CHARACTERISTIC_BATTERY_LEVEL);
|
||||
CHECK_EQUAL(0x03, value_handle);
|
||||
}
|
||||
|
||||
|
||||
TEST(ATT_SERVER, att_server_indicate){
|
||||
static uint8_t value[] = {0x55};
|
||||
uint16_t value_handle = gatt_server_get_value_handle_for_characteristic_with_uuid16(0, 0xffff, ORG_BLUETOOTH_CHARACTERISTIC_BATTERY_LEVEL);
|
||||
uint8_t status;
|
||||
|
||||
// invalid conneciton handle
|
||||
status = att_server_indicate(0x50, value_handle, &value[0], 0);
|
||||
CHECK_EQUAL(ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER, status);
|
||||
|
||||
// L2CAP cannot send
|
||||
l2cap_can_send_fixed_channel_packet_now_set_status(0);
|
||||
status = att_server_indicate(0x00, value_handle, &value[0], 0);
|
||||
CHECK_EQUAL(BTSTACK_ACL_BUFFERS_FULL, status);
|
||||
l2cap_can_send_fixed_channel_packet_now_set_status(1);
|
||||
|
||||
// correct command
|
||||
status = att_server_indicate(0x00, value_handle, &value[0], 0);
|
||||
CHECK_EQUAL(ERROR_CODE_SUCCESS, status);
|
||||
|
||||
// already in progress
|
||||
status = att_server_indicate(0x00, value_handle, &value[0], 0);
|
||||
CHECK_EQUAL(ATT_HANDLE_VALUE_INDICATION_IN_PROGRESS, status);
|
||||
}
|
||||
|
||||
|
||||
|
@ -125,8 +125,14 @@ int l2cap_reserve_packet_buffer(void){
|
||||
void l2cap_release_packet_buffer(void){
|
||||
}
|
||||
|
||||
static uint8_t l2cap_can_send_fixed_channel_packet_now_status = 1;
|
||||
|
||||
void l2cap_can_send_fixed_channel_packet_now_set_status(uint8_t status){
|
||||
l2cap_can_send_fixed_channel_packet_now_status = status;
|
||||
}
|
||||
|
||||
int l2cap_can_send_fixed_channel_packet_now(uint16_t handle, uint16_t channel_id){
|
||||
return 1;
|
||||
return l2cap_can_send_fixed_channel_packet_now_status;
|
||||
}
|
||||
|
||||
void l2cap_request_can_send_fix_channel_now_event(uint16_t handle, uint16_t channel_id){
|
||||
@ -190,6 +196,7 @@ hci_connection_t * hci_connection_for_bd_addr_and_type(bd_addr_t addr, bd_addr_t
|
||||
return NULL;
|
||||
}
|
||||
hci_connection_t * hci_connection_for_handle(hci_con_handle_t con_handle){
|
||||
if (con_handle != 0) return NULL;
|
||||
return &hci_connection;
|
||||
}
|
||||
void hci_connections_get_iterator(btstack_linked_list_iterator_t *it){
|
||||
|
Loading…
x
Reference in New Issue
Block a user