bt_gatt_server_receive()
Description
Function to receive data from the GATT client. Characteristic UUID and user reference are used for identification. Data can be read only once.
Syntax
bt_gatt_server_receive(data[]);
Parameters
Variable | Input |
|---|---|
| Data buffer where the newly written characteristic value resides. Refer below for the data structure. The data header is specified to be 18 bytes, meaning that the buffer size needs to be a minimum of 19 bytes to successfully read a single data byte. The maximum allowable data size is 220 bytes. |
Returns
Return value | Return explanation |
SCRIPT_OPERATION_FAILED | Invalid data buffer. |
SCRIPT_NO_ACCESS | Bluetooth GATT server is not initialized. |
Data length | In case of success, function will return the number of bytes received in the buffer. |
Data will follow this format:
Example 1 (No user reference was assigned):
GATT server callback data: 00 02 6E 40 00 03 B5 A3 F3 93 E0 A9 E5 0E 24 DC CA 9E 00 10
- User-defined reference
- UUID Type (0x00 - 16 bit UUID, 0x01 - 32 bit UUID, 0x02 - 128 bit UUID)
- UUID
- Data
Example 2 (User reference was assigned) :
GATT server callback data: 05 02 6E 40 00 04 B5 A3 F3 93 E0 A9 E5 0E 24 DC CA 9E 74 65 73 74
- User-defined reference
- UUID Type (0x00 - 16 bit UUID, 0x01 - 32 bit UUID, 0x02 - 128 bit UUID)
- UUID
- Data
Function call example
#include <io>
#include <read>
#include <float>
#include <string>
#include <core>
#include <write>
#include <define>
#include <socket>
#include <bluetooth>
new service_uuid[UUID_LENGTH_128_BIT] = [0x08, 0x07, 0x06, 0x05, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB];
new chrc_uuid_1[UUID_LENGTH_128_BIT] = [0x05, 0x12, 0x96, 0x99, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB];
new chrc_uuid_2[UUID_LENGTH_128_BIT] = [0x05, 0x12, 0x96, 0x99, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB];
new chrc_handle_2 = 5;
new gatt_rx_data[64];
forward public callback (event);
public callback (event)
{
switch(event)
{
case BT_GATT_SERVER_RX:
{
new data_len = bt_gatt_server_receive(gatt_rx_data);
if (gatt_rx_data[GATT_RX_HEADER_USER_REF_POS] == chrc_handle_2)
{
chrc_2_rx(data_len);
}
}
}
return 0;
}
chrc_2_rx(msg_len)
{
/* Handle characteristic write code start */
/* Handle characteristic write code end */
}
main()
{
bt_init();
bt_gatt_server_init();
bt_gatt_service_create(service_uuid);
bt_gatt_chrc_create(chrc_uuid_1, GATT_CHRC_PROP_WRITE, 0, 0);
bt_gatt_chrc_create(chrc_uuid_2, GATT_CHRC_PROP_WRITE, 0, chrc_handle_2);
for(;;)
{
Delay(100);
}
}