| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210 |
- /******************************************************************************
- *
- * Copyright (C) 1999-2012 Broadcom Corporation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************/
- #ifndef GATT_API_H
- #define GATT_API_H
- #include "bt_target.h"
- #include "gattdefs.h"
- #include "btm_ble_api.h"
- /*****************************************************************************
- ** Constants
- *****************************************************************************/
- /* Success code and error codes */
- #define GATT_SUCCESS 0x00
- #define GATT_INVALID_HANDLE 0x01
- #define GATT_READ_NOT_PERMIT 0x02
- #define GATT_WRITE_NOT_PERMIT 0x03
- #define GATT_INVALID_PDU 0x04
- #define GATT_INSUF_AUTHENTICATION 0x05
- #define GATT_REQ_NOT_SUPPORTED 0x06
- #define GATT_INVALID_OFFSET 0x07
- #define GATT_INSUF_AUTHORIZATION 0x08
- #define GATT_PREPARE_Q_FULL 0x09
- #define GATT_NOT_FOUND 0x0a
- #define GATT_NOT_LONG 0x0b
- #define GATT_INSUF_KEY_SIZE 0x0c
- #define GATT_INVALID_ATTR_LEN 0x0d
- #define GATT_ERR_UNLIKELY 0x0e
- #define GATT_INSUF_ENCRYPTION 0x0f
- #define GATT_UNSUPPORT_GRP_TYPE 0x10
- #define GATT_INSUF_RESOURCE 0x11
- #define GATT_ILLEGAL_PARAMETER 0x87
- #define GATT_NO_RESOURCES 0x80
- #define GATT_INTERNAL_ERROR 0x81
- #define GATT_WRONG_STATE 0x82
- #define GATT_DB_FULL 0x83
- #define GATT_BUSY 0x84
- #define GATT_ERROR 0x85
- #define GATT_CMD_STARTED 0x86
- #define GATT_PENDING 0x88
- #define GATT_AUTH_FAIL 0x89
- #define GATT_MORE 0x8a
- #define GATT_INVALID_CFG 0x8b
- #define GATT_SERVICE_STARTED 0x8c
- #define GATT_ENCRYPED_MITM GATT_SUCCESS
- #define GATT_ENCRYPED_NO_MITM 0x8d
- #define GATT_NOT_ENCRYPTED 0x8e
- #define GATT_CONGESTED 0x8f
- #define GATT_STACK_RSP 0x90
- #define GATT_APP_RSP 0x91
- //Error caused by customer application or stack bug
- #define GATT_ESP_ERROR 0X9f
- /* 0xE0 ~ 0xFC reserved for future use */
- #define GATT_CCC_CFG_ERR 0xFD /* Client Characteristic Configuration Descriptor Improperly Configured */
- #define GATT_PRC_IN_PROGRESS 0xFE /* Procedure Already in progress */
- #define GATT_OUT_OF_RANGE 0xFF /* Attribute value out of range */
- typedef UINT8 tGATT_STATUS;
- #define GATT_RSP_ERROR 0x01
- #define GATT_REQ_MTU 0x02
- #define GATT_RSP_MTU 0x03
- #define GATT_REQ_FIND_INFO 0x04
- #define GATT_RSP_FIND_INFO 0x05
- #define GATT_REQ_FIND_TYPE_VALUE 0x06
- #define GATT_RSP_FIND_TYPE_VALUE 0x07
- #define GATT_REQ_READ_BY_TYPE 0x08
- #define GATT_RSP_READ_BY_TYPE 0x09
- #define GATT_REQ_READ 0x0A
- #define GATT_RSP_READ 0x0B
- #define GATT_REQ_READ_BLOB 0x0C
- #define GATT_RSP_READ_BLOB 0x0D
- #define GATT_REQ_READ_MULTI 0x0E
- #define GATT_RSP_READ_MULTI 0x0F
- #define GATT_REQ_READ_BY_GRP_TYPE 0x10
- #define GATT_RSP_READ_BY_GRP_TYPE 0x11
- #define GATT_REQ_WRITE 0x12 /* 0001-0010 (write)*/
- #define GATT_RSP_WRITE 0x13
- #define GATT_CMD_WRITE 0x52 /* changed in V4.0 01001-0010(write cmd)*/
- #define GATT_REQ_PREPARE_WRITE 0x16
- #define GATT_RSP_PREPARE_WRITE 0x17
- #define GATT_REQ_EXEC_WRITE 0x18
- #define GATT_RSP_EXEC_WRITE 0x19
- #define GATT_HANDLE_VALUE_NOTIF 0x1B
- #define GATT_HANDLE_VALUE_IND 0x1D
- #define GATT_HANDLE_VALUE_CONF 0x1E
- #define GATT_SIGN_CMD_WRITE 0xD2 /* changed in V4.0 1101-0010 (signed write) see write cmd above*/
- #define GATT_OP_CODE_MAX GATT_HANDLE_VALUE_CONF + 1 /* 0x1E = 30 + 1 = 31*/
- #define GATT_HANDLE_IS_VALID(x) ((x) != 0)
- #define GATT_CONN_UNKNOWN 0
- #define GATT_CONN_L2C_FAILURE 1 /* general L2cap failure */
- #define GATT_CONN_TIMEOUT HCI_ERR_CONNECTION_TOUT /* 0x08 connection timeout */
- #define GATT_CONN_TERMINATE_PEER_USER HCI_ERR_PEER_USER /* 0x13 connection terminate by peer user */
- #define GATT_CONN_TERMINATE_LOCAL_HOST HCI_ERR_CONN_CAUSE_LOCAL_HOST /* 0x16 connectionterminated by local host */
- #define GATT_CONN_FAIL_ESTABLISH HCI_ERR_CONN_FAILED_ESTABLISHMENT/* 0x03E connection fail to establish */
- #define GATT_CONN_LMP_TIMEOUT HCI_ERR_LMP_RESPONSE_TIMEOUT /* 0x22 connection fail for LMP response tout */
- #define GATT_CONN_CANCEL L2CAP_CONN_CANCEL /* 0x0100 L2CAP connection cancelled */
- typedef UINT16 tGATT_DISCONN_REASON;
- /* MAX GATT MTU size
- */
- #ifndef GATT_MAX_MTU_SIZE
- #define GATT_MAX_MTU_SIZE 517
- #endif
- /* max legth of an attribute value
- */
- #ifndef GATT_MAX_ATTR_LEN
- #define GATT_MAX_ATTR_LEN 600
- #endif
- /* default GATT MTU size over LE link
- */
- #define GATT_DEF_BLE_MTU_SIZE 23
- /* invalid connection ID
- */
- #define GATT_INVALID_CONN_ID 0xFFFF
- #ifndef GATT_CL_MAX_LCB
- #define GATT_CL_MAX_LCB 12 // 22
- #endif
- #ifndef GATT_MAX_SCCB
- #define GATT_MAX_SCCB 10
- #endif
- /* GATT notification caching timer, default to be three seconds
- */
- #ifndef GATTC_NOTIF_TIMEOUT
- #define GATTC_NOTIF_TIMEOUT 3
- #endif
- /*****************************************************************************
- ** GATT Structure Definition
- *****************************************************************************/
- /* Attribute permissions
- */
- #define GATT_PERM_READ (1 << 0) /* bit 0 */
- #define GATT_PERM_READ_ENCRYPTED (1 << 1) /* bit 1 */
- #define GATT_PERM_READ_ENC_MITM (1 << 2) /* bit 2 */
- #define GATT_PERM_WRITE (1 << 4) /* bit 4 */
- #define GATT_PERM_WRITE_ENCRYPTED (1 << 5) /* bit 5 */
- #define GATT_PERM_WRITE_ENC_MITM (1 << 6) /* bit 6 */
- #define GATT_PERM_WRITE_SIGNED (1 << 7) /* bit 7 */
- #define GATT_PERM_WRITE_SIGNED_MITM (1 << 8) /* bit 8 */
- typedef UINT16 tGATT_PERM;
- #define GATT_ENCRYPT_KEY_SIZE_MASK (0xF000) /* the MS nibble of tGATT_PERM; key size 7=0; size 16=9 */
- #define GATT_READ_ALLOWED (GATT_PERM_READ | GATT_PERM_READ_ENCRYPTED | GATT_PERM_READ_ENC_MITM)
- #define GATT_READ_AUTH_REQUIRED (GATT_PERM_READ_ENCRYPTED)
- #define GATT_READ_MITM_REQUIRED (GATT_PERM_READ_ENC_MITM)
- #define GATT_READ_ENCRYPTED_REQUIRED (GATT_PERM_READ_ENCRYPTED | GATT_PERM_READ_ENC_MITM)
- #define GATT_WRITE_ALLOWED (GATT_PERM_WRITE | GATT_PERM_WRITE_ENCRYPTED | GATT_PERM_WRITE_ENC_MITM | \
- GATT_PERM_WRITE_SIGNED | GATT_PERM_WRITE_SIGNED_MITM)
- #define GATT_WRITE_AUTH_REQUIRED (GATT_PERM_WRITE_ENCRYPTED | GATT_PERM_WRITE_SIGNED)
- #define GATT_WRITE_MITM_REQUIRED (GATT_PERM_WRITE_ENC_MITM | GATT_PERM_WRITE_SIGNED_MITM)
- #define GATT_WRITE_ENCRYPTED_PERM (GATT_PERM_WRITE_ENCRYPTED | GATT_PERM_WRITE_ENC_MITM)
- #define GATT_WRITE_SIGNED_PERM (GATT_PERM_WRITE_SIGNED | GATT_PERM_WRITE_SIGNED_MITM)
- /* Characteristic properties
- */
- #define GATT_CHAR_PROP_BIT_BROADCAST (1 << 0)
- #define GATT_CHAR_PROP_BIT_READ (1 << 1)
- #define GATT_CHAR_PROP_BIT_WRITE_NR (1 << 2)
- #define GATT_CHAR_PROP_BIT_WRITE (1 << 3)
- #define GATT_CHAR_PROP_BIT_NOTIFY (1 << 4)
- #define GATT_CHAR_PROP_BIT_INDICATE (1 << 5)
- #define GATT_CHAR_PROP_BIT_AUTH (1 << 6)
- #define GATT_CHAR_PROP_BIT_EXT_PROP (1 << 7)
- typedef UINT8 tGATT_CHAR_PROP;
- /* Format of the value of a characteristic. enumeration type
- */
- enum {
- GATT_FORMAT_RES, /* rfu */
- GATT_FORMAT_BOOL, /* 0x01 boolean */
- GATT_FORMAT_2BITS, /* 0x02 2 bit */
- GATT_FORMAT_NIBBLE, /* 0x03 nibble */
- GATT_FORMAT_UINT8, /* 0x04 uint8 */
- GATT_FORMAT_UINT12, /* 0x05 uint12 */
- GATT_FORMAT_UINT16, /* 0x06 uint16 */
- GATT_FORMAT_UINT24, /* 0x07 uint24 */
- GATT_FORMAT_UINT32, /* 0x08 uint32 */
- GATT_FORMAT_UINT48, /* 0x09 uint48 */
- GATT_FORMAT_UINT64, /* 0x0a uint64 */
- GATT_FORMAT_UINT128, /* 0x0B uint128 */
- GATT_FORMAT_SINT8, /* 0x0C signed 8 bit integer */
- GATT_FORMAT_SINT12, /* 0x0D signed 12 bit integer */
- GATT_FORMAT_SINT16, /* 0x0E signed 16 bit integer */
- GATT_FORMAT_SINT24, /* 0x0F signed 24 bit integer */
- GATT_FORMAT_SINT32, /* 0x10 signed 32 bit integer */
- GATT_FORMAT_SINT48, /* 0x11 signed 48 bit integer */
- GATT_FORMAT_SINT64, /* 0x12 signed 64 bit integer */
- GATT_FORMAT_SINT128, /* 0x13 signed 128 bit integer */
- GATT_FORMAT_FLOAT32, /* 0x14 float 32 */
- GATT_FORMAT_FLOAT64, /* 0x15 float 64*/
- GATT_FORMAT_SFLOAT, /* 0x16 IEEE-11073 16 bit SFLOAT */
- GATT_FORMAT_FLOAT, /* 0x17 IEEE-11073 32 bit SFLOAT */
- GATT_FORMAT_DUINT16, /* 0x18 IEEE-20601 format */
- GATT_FORMAT_UTF8S, /* 0x19 UTF-8 string */
- GATT_FORMAT_UTF16S, /* 0x1a UTF-16 string */
- GATT_FORMAT_STRUCT, /* 0x1b Opaque structure*/
- GATT_FORMAT_MAX /* 0x1c or above reserved */
- };
- typedef UINT8 tGATT_FORMAT;
- /* Characteristic Presentation Format Descriptor value
- */
- typedef struct {
- UINT16 unit; /* as UUIUD defined by SIG */
- UINT16 descr; /* as UUID as defined by SIG */
- tGATT_FORMAT format;
- INT8 exp;
- UINT8 name_spc; /* The name space of the description */
- } tGATT_CHAR_PRES;
- /* Characteristic Report reference Descriptor format
- */
- typedef struct {
- UINT8 rpt_id; /* report ID */
- UINT8 rpt_type; /* report type */
- } tGATT_CHAR_RPT_REF;
- #define GATT_VALID_RANGE_MAX_SIZE 16
- typedef struct {
- UINT8 format;
- UINT16 len;
- UINT8 lower_range[GATT_VALID_RANGE_MAX_SIZE]; /* in little endian format */
- UINT8 upper_range[GATT_VALID_RANGE_MAX_SIZE];
- } tGATT_VALID_RANGE;
- /* Characteristic Aggregate Format attribute value
- */
- #define GATT_AGGR_HANDLE_NUM_MAX 10
- typedef struct {
- UINT8 num_handle;
- UINT16 handle_list[GATT_AGGR_HANDLE_NUM_MAX];
- } tGATT_CHAR_AGGRE;
- /* Characteristic descriptor: Extended Properties value
- */
- #define GATT_CHAR_BIT_REL_WRITE 0x0001 /* permits reliable writes of the Characteristic Value */
- #define GATT_CHAR_BIT_WRITE_AUX 0x0002 /* permits writes to the characteristic descriptor */
- /* characteristic descriptor: client configuration value
- */
- #define GATT_CLT_CONFIG_NONE 0x0000
- #define GATT_CLT_CONFIG_NOTIFICATION 0x0001
- #define GATT_CLT_CONFIG_INDICATION 0x0002
- typedef UINT16 tGATT_CLT_CHAR_CONFIG;
- /* characteristic descriptor: server configuration value
- */
- #define GATT_SVR_CONFIG_NONE 0x0000
- #define GATT_SVR_CONFIG_BROADCAST 0x0001
- typedef UINT16 tGATT_SVR_CHAR_CONFIG;
- /* Characteristic descriptor: Extended Properties value
- */
- #define GATT_CHAR_BIT_REL_WRITE 0x0001 /* permits reliable writes of the Characteristic Value */
- #define GATT_CHAR_BIT_WRITE_AUX 0x0002 /* permits writes to the characteristic descriptor */
- /* authentication requirement
- */
- #define GATT_AUTH_REQ_NONE 0
- #define GATT_AUTH_REQ_NO_MITM 1 /* unauthenticated encryption */
- #define GATT_AUTH_REQ_MITM 2 /* authenticated encryption */
- #define GATT_AUTH_REQ_SIGNED_NO_MITM 3
- #define GATT_AUTH_REQ_SIGNED_MITM 4
- typedef UINT8 tGATT_AUTH_REQ;
- /* Attribute Value structure
- */
- typedef struct {
- UINT16 conn_id;
- UINT16 handle; /* attribute handle */
- UINT16 offset; /* attribute value offset, if no offfset is needed for the command, ignore it */
- UINT16 len; /* length of attribute value */
- tGATT_AUTH_REQ auth_req; /* authentication request */
- UINT8 value[GATT_MAX_ATTR_LEN]; /* the actual attribute value */
- } tGATT_VALUE;
- typedef struct{
- UINT16 attr_max_len;
- UINT16 attr_len;
- UINT8 *attr_val;
- }tGATT_ATTR_VAL;
- typedef struct{
- uint8_t auto_rsp;
- }tGATTS_ATTR_CONTROL;
- /* Mask for gatt server attribute */
- #define GATT_ATTR_VALUE_ALLOCATED 0x01
- typedef UINT8 tGATT_ATTR_MASK;
- /* Union of the event data which is used in the server respond API to carry the server response information
- */
- typedef union {
- /* data type member event */
- tGATT_VALUE attr_value; /* READ, HANDLE_VALUE_IND, PREPARE_WRITE */
- /* READ_BLOB, READ_BY_TYPE */
- UINT16 handle; /* WRITE, WRITE_BLOB */
- } tGATTS_RSP;
- /* Transports for the primary service */
- #define GATT_TRANSPORT_LE BT_TRANSPORT_LE
- #define GATT_TRANSPORT_BR_EDR BT_TRANSPORT_BR_EDR
- #define GATT_TRANSPORT_LE_BR_EDR (BT_TRANSPORT_LE|BT_TRANSPORT_BR_EDR)
- typedef UINT8 tGATT_TRANSPORT;
- #define GATT_PREP_WRITE_CANCEL 0x00
- #define GATT_PREP_WRITE_EXEC 0x01
- typedef UINT8 tGATT_EXEC_FLAG;
- /* read request always based on UUID */
- typedef struct {
- UINT16 handle;
- UINT16 offset;
- BOOLEAN is_long;
- BOOLEAN need_rsp;
- } tGATT_READ_REQ;
- /* write request data */
- typedef struct {
- UINT16 handle; /* attribute handle */
- UINT16 offset; /* attribute value offset, if no offfset is needed for the command, ignore it */
- UINT16 len; /* length of attribute value */
- UINT8 value[GATT_MAX_ATTR_LEN]; /* the actual attribute value */
- BOOLEAN need_rsp; /* need write response */
- BOOLEAN is_prep; /* is prepare write */
- } tGATT_WRITE_REQ;
- /* callback data for server access request from client */
- typedef union {
- tGATT_READ_REQ read_req; /* read request, read by Type, read blob */
- tGATT_WRITE_REQ write_req; /* write */
- /* prepare write */
- /* write blob */
- UINT16 handle; /* handle value confirmation */
- UINT16 mtu; /* MTU exchange request */
- tGATT_EXEC_FLAG exec_write; /* execute write */
- } tGATTS_DATA;
- typedef UINT8 tGATT_SERV_IF; /* GATT Service Interface */
- enum {
- GATTS_REQ_TYPE_READ = 1, /* Attribute read request */
- GATTS_REQ_TYPE_WRITE, /* Attribute write request */
- GATTS_REQ_TYPE_WRITE_EXEC, /* Execute write */
- GATTS_REQ_TYPE_MTU, /* MTU exchange information */
- GATTS_REQ_TYPE_CONF /* handle value confirmation */
- };
- typedef UINT8 tGATTS_REQ_TYPE;
- /* Client Used Data Structure
- */
- /* definition of different discovery types */
- enum {
- GATT_DISC_SRVC_ALL = 1, /* discover all services */
- GATT_DISC_SRVC_BY_UUID, /* discover service of a special type */
- GATT_DISC_INC_SRVC, /* discover the included service within a service */
- GATT_DISC_CHAR, /* discover characteristics of a service with/without type requirement */
- GATT_DISC_CHAR_DSCPT, /* discover characteristic descriptors of a character */
- GATT_DISC_MAX /* maximnun discover type */
- };
- typedef UINT8 tGATT_DISC_TYPE;
- /* Discover parameters of different discovery types
- */
- typedef struct {
- tBT_UUID service;
- UINT16 s_handle;
- UINT16 e_handle;
- } tGATT_DISC_PARAM;
- /* GATT read type enumeration
- */
- enum {
- GATT_READ_BY_TYPE = 1,
- GATT_READ_BY_HANDLE,
- GATT_READ_MULTIPLE,
- GATT_READ_CHAR_VALUE,
- GATT_READ_PARTIAL,
- GATT_READ_MAX
- };
- typedef UINT8 tGATT_READ_TYPE;
- /* Read By Type Request (GATT_READ_BY_TYPE) Data
- */
- typedef struct {
- tGATT_AUTH_REQ auth_req;
- UINT16 s_handle;
- UINT16 e_handle;
- tBT_UUID uuid;
- } tGATT_READ_BY_TYPE;
- /* GATT_READ_MULTIPLE request data
- */
- #define GATT_MAX_READ_MULTI_HANDLES 10 /* Max attributes to read in one request */
- typedef struct {
- tGATT_AUTH_REQ auth_req;
- UINT16 num_handles; /* number of handles to read */
- UINT16 handles[GATT_MAX_READ_MULTI_HANDLES]; /* handles list to be read */
- } tGATT_READ_MULTI;
- /* Read By Handle Request (GATT_READ_BY_HANDLE) data */
- typedef struct {
- tGATT_AUTH_REQ auth_req;
- UINT16 handle;
- } tGATT_READ_BY_HANDLE;
- /* READ_BT_HANDLE_Request data */
- typedef struct {
- tGATT_AUTH_REQ auth_req;
- UINT16 handle;
- UINT16 offset;
- } tGATT_READ_PARTIAL;
- /* Read Request Data
- */
- typedef union {
- tGATT_READ_BY_TYPE service;
- tGATT_READ_BY_TYPE char_type; /* characterisitc type */
- tGATT_READ_MULTI read_multiple;
- tGATT_READ_BY_HANDLE by_handle;
- tGATT_READ_PARTIAL partial;
- } tGATT_READ_PARAM;
- /* GATT write type enumeration */
- enum {
- GATT_WRITE_NO_RSP = 1,
- GATT_WRITE ,
- GATT_WRITE_PREPARE
- };
- typedef UINT8 tGATT_WRITE_TYPE;
- /* Client Operation Complete Callback Data
- */
- typedef union {
- tGATT_VALUE att_value;
- UINT16 mtu;
- UINT16 handle;
- } tGATT_CL_COMPLETE;
- /* GATT client operation type, used in client callback function
- */
- #define GATTC_OPTYPE_NONE 0
- #define GATTC_OPTYPE_DISCOVERY 1
- #define GATTC_OPTYPE_READ 2
- #define GATTC_OPTYPE_WRITE 3
- #define GATTC_OPTYPE_EXE_WRITE 4
- #define GATTC_OPTYPE_CONFIG 5
- #define GATTC_OPTYPE_NOTIFICATION 6
- #define GATTC_OPTYPE_INDICATION 7
- typedef UINT8 tGATTC_OPTYPE;
- /* characteristic declaration
- */
- typedef struct {
- tGATT_CHAR_PROP char_prop; /* characterisitc properties */
- UINT16 val_handle; /* characteristic value attribute handle */
- tBT_UUID char_uuid; /* characteristic UUID type */
- } tGATT_CHAR_DCLR_VAL;
- /* primary service group data
- */
- typedef struct {
- UINT16 e_handle; /* ending handle of the group */
- tBT_UUID service_type; /* group type */
- } tGATT_GROUP_VALUE;
- /* included service attribute value
- */
- typedef struct {
- tBT_UUID service_type; /* included service UUID */
- UINT16 s_handle; /* starting handle */
- UINT16 e_handle; /* ending handle */
- } tGATT_INCL_SRVC;
- typedef union {
- tGATT_INCL_SRVC incl_service; /* include service value */
- tGATT_GROUP_VALUE group_value; /* Service UUID type.
- This field is used with GATT_DISC_SRVC_ALL
- or GATT_DISC_SRVC_BY_UUID
- type of discovery result callback. */
- UINT16 handle; /* When used with GATT_DISC_INC_SRVC type discovery result,
- it is the included service starting handle.*/
- tGATT_CHAR_DCLR_VAL dclr_value; /* Characteristic declaration value.
- This field is used with GATT_DISC_CHAR type discovery.*/
- } tGATT_DISC_VALUE;
- /* discover result record
- */
- typedef struct {
- tBT_UUID type;
- UINT16 handle;
- tGATT_DISC_VALUE value;
- } tGATT_DISC_RES;
- #define GATT_LINK_IDLE_TIMEOUT_WHEN_NO_APP 0 /* start a idle timer for this duration
- when no application need to use the link */
- #define GATT_LINK_NO_IDLE_TIMEOUT 0xFFFF
- #define GATT_INVALID_ACL_HANDLE 0xFFFF
- /* discover result callback function */
- typedef void (tGATT_DISC_RES_CB) (UINT16 conn_id, tGATT_DISC_TYPE disc_type,
- tGATT_DISC_RES *p_data);
- /* discover complete callback function */
- typedef void (tGATT_DISC_CMPL_CB) (UINT16 conn_id, tGATT_DISC_TYPE disc_type, tGATT_STATUS status);
- /* Define a callback function for when read/write/disc/config operation is completed. */
- typedef void (tGATT_CMPL_CBACK) (UINT16 conn_id, tGATTC_OPTYPE op, tGATT_STATUS status,
- tGATT_CL_COMPLETE *p_data);
- /* Define a callback function when an initialized connection is established. */
- typedef void (tGATT_CONN_CBACK) (tGATT_IF gatt_if, BD_ADDR bda, UINT16 conn_id, BOOLEAN connected,
- tGATT_DISCONN_REASON reason, tBT_TRANSPORT transport);
- /* attribute request callback for ATT server */
- typedef void (tGATT_REQ_CBACK )(UINT16 conn_id, UINT32 trans_id, tGATTS_REQ_TYPE type,
- tGATTS_DATA *p_data);
- /* channel congestion/uncongestion callback */
- typedef void (tGATT_CONGESTION_CBACK )(UINT16 conn_id, BOOLEAN congested);
- /* Define a callback function when encryption is established. */
- typedef void (tGATT_ENC_CMPL_CB)(tGATT_IF gatt_if, BD_ADDR bda);
- /* Define the structure that applications use to register with
- ** GATT. This structure includes callback functions. All functions
- ** MUST be provided.
- */
- typedef struct {
- tGATT_CONN_CBACK *p_conn_cb;
- tGATT_CMPL_CBACK *p_cmpl_cb;
- tGATT_DISC_RES_CB *p_disc_res_cb;
- tGATT_DISC_CMPL_CB *p_disc_cmpl_cb;
- tGATT_REQ_CBACK *p_req_cb;
- tGATT_ENC_CMPL_CB *p_enc_cmpl_cb;
- tGATT_CONGESTION_CBACK *p_congestion_cb;
- } tGATT_CBACK;
- /*********************** Start Handle Management Definitions **********************
- */
- typedef struct {
- tBT_UUID app_uuid128;
- tBT_UUID svc_uuid;
- UINT16 svc_inst;
- UINT16 s_handle;
- UINT16 e_handle;
- BOOLEAN is_primary; /* primary service or secondary */
- } tGATTS_HNDL_RANGE;
- #define GATTS_SRV_CHG_CMD_ADD_CLIENT 1
- #define GATTS_SRV_CHG_CMD_UPDATE_CLIENT 2
- #define GATTS_SRV_CHG_CMD_REMOVE_CLIENT 3
- #define GATTS_SRV_CHG_CMD_READ_NUM_CLENTS 4
- #define GATTS_SRV_CHG_CMD_READ_CLENT 5
- typedef UINT8 tGATTS_SRV_CHG_CMD;
- typedef struct {
- BD_ADDR bda;
- BOOLEAN srv_changed;
- } tGATTS_SRV_CHG;
- typedef union {
- tGATTS_SRV_CHG srv_chg;
- UINT8 client_read_index; /* only used for sequential reading client srv chg info */
- } tGATTS_SRV_CHG_REQ;
- typedef union {
- tGATTS_SRV_CHG srv_chg;
- UINT8 num_clients;
- } tGATTS_SRV_CHG_RSP;
- typedef struct {
- tGATTS_HNDL_RANGE *p_new_srv_start;
- } tGATTS_PENDING_NEW_SRV_START;
- /* Attibute server handle ranges NV storage callback functions
- */
- typedef void (tGATTS_NV_SAVE_CBACK)(BOOLEAN is_saved, tGATTS_HNDL_RANGE *p_hndl_range);
- typedef BOOLEAN (tGATTS_NV_SRV_CHG_CBACK)(tGATTS_SRV_CHG_CMD cmd, tGATTS_SRV_CHG_REQ *p_req,
- tGATTS_SRV_CHG_RSP *p_rsp);
- typedef struct {
- tGATTS_NV_SAVE_CBACK *p_nv_save_callback;
- tGATTS_NV_SRV_CHG_CBACK *p_srv_chg_callback;
- } tGATT_APPL_INFO;
- /*
- *********************** End Handle Management Definitions **********************/
- /*****************************************************************************
- ** External Function Declarations
- *****************************************************************************/
- #ifdef __cplusplus
- extern "C"
- {
- #endif
- /*******************************************************************************
- **
- ** Function GATT_SetTraceLevel
- **
- ** Description This function sets the trace level. If called with
- ** a value of 0xFF, it simply returns the current trace level.
- **
- ** Returns The new or current trace level
- **
- *******************************************************************************/
- extern UINT8 GATT_SetTraceLevel (UINT8 new_level);
- /*******************************************************************************/
- /* GATT Profile API Functions */
- /*******************************************************************************/
- /* GATT Profile Server Functions */
- /*******************************************************************************/
- /*******************************************************************************
- **
- ** Function GATTS_AddHandleRange
- **
- ** Description This function add the allocated handles range for the specifed
- ** application UUID, service UUID and service instance
- **
- ** Parameter p_hndl_range: pointer to allocated handles information
- **
- ** Returns TRUE if handle range is added sucessfully; otherwise FALSE.
- **
- *******************************************************************************/
- extern BOOLEAN GATTS_AddHandleRange(tGATTS_HNDL_RANGE *p_hndl_range);
- /*******************************************************************************
- **
- ** Function GATTS_NVRegister
- **
- ** Description Application manager calls this function to register for
- ** NV save callback function. There can be one and only one
- ** NV save callback function.
- **
- ** Parameter p_cb_info : callback informaiton
- **
- ** Returns TRUE if registered OK, else FALSE
- **
- *******************************************************************************/
- extern BOOLEAN GATTS_NVRegister (tGATT_APPL_INFO *p_cb_info);
- /*******************************************************************************
- **
- ** Function GATTS_CreateService
- **
- ** Description This function is called to reserve a block of handles for a service.
- **
- ** *** It should be called only once per service instance ***
- **
- ** Parameter gatt_if : application if
- ** p_svc_uuid : service UUID
- ** svc_inst : instance of the service inside the application
- ** num_handles : number of handles needed by the service.
- ** is_pri : is a primary service or not.
- **
- ** Returns service handle if sucessful, otherwise 0.
- **
- *******************************************************************************/
- extern UINT16 GATTS_CreateService (tGATT_IF gatt_if, tBT_UUID *p_svc_uuid,
- UINT16 svc_inst, UINT16 num_handles, BOOLEAN is_pri);
- /*******************************************************************************
- **
- ** Function GATTS_AddIncludeService
- **
- ** Description This function is called to add an included service.
- **
- ** Parameter service_handle : To which service this included service is added to.
- ** include_svc_handle : included service handle.
- **
- ** Returns included service attribute handle. If 0, add included service
- ** fail.
- **
- *******************************************************************************/
- extern UINT16 GATTS_AddIncludeService (UINT16 service_handle,
- UINT16 include_svc_handle);
- /*******************************************************************************
- **
- ** Function GATTS_AddCharacteristic
- **
- ** Description This function is called to add a characteristic into a service.
- ** It will add a characteristic declaration and characteristic
- ** value declaration into the service database identified by the
- ** service handle.
- **
- ** Parameter service_handle : To which service this included service is added to.
- ** char_uuid : Characteristic UUID.
- ** perm : Characteristic value declaration attribute permission.
- ** property : Characteristic Properties
- **
- ** Returns Characteristic value declaration attribute handle. 0 if add
- ** characteristic failed.
- **
- *******************************************************************************/
- extern UINT16 GATTS_AddCharacteristic (UINT16 service_handle, tBT_UUID *p_char_uuid,
- tGATT_PERM perm, tGATT_CHAR_PROP property,
- tGATT_ATTR_VAL *attr_val, tGATTS_ATTR_CONTROL *control);
- /*******************************************************************************
- **
- ** Function GATTS_AddCharDescriptor
- **
- ** Description This function is called to add a characteristic descriptor
- ** into a service database. Add descriptor should follow add char
- ** to which it belongs, and next add char should be done only
- ** after all add descriptors for the previous char.
- **
- ** Parameter service_handle : To which service this characteristic descriptor
- ** is added to.
- ** perm : Characteristic value declaration attribute
- ** permission.
- ** p_descr_uuid : Characteristic descriptor UUID.
- **
- ** Returns Characteristic descriptor attribute handle. 0 if add
- ** characteristic descriptor failed.
- **
- *******************************************************************************/
- extern UINT16 GATTS_AddCharDescriptor (UINT16 service_handle, tGATT_PERM perm,
- tBT_UUID *p_descr_uuid, tGATT_ATTR_VAL *attr_val,
- tGATTS_ATTR_CONTROL *control);
- /*******************************************************************************
- **
- ** Function GATTS_DeleteService
- **
- ** Description This function is called to delete a service.
- **
- ** Parameter gatt_if : application interface
- ** p_svc_uuid : service UUID
- ** svc_inst : instance of the service inside the application
- **
- ** Returns TRUE if operation succeed, FALSE if handle block was not found.
- **
- *******************************************************************************/
- extern BOOLEAN GATTS_DeleteService (tGATT_IF gatt_if, tBT_UUID *p_svc_uuid,
- UINT16 svc_inst);
- /*******************************************************************************
- **
- ** Function GATTS_StartService
- **
- ** Description This function is called to start a service with GATT
- **
- ** Parameter gatt_if : service handle.
- ** p_cback : application service callback functions.
- ** sup_transport : supported transport(s) for this primary service
- **
- ** return GATT_SUCCESS if sucessfully started; otherwise error code.
- **
- *******************************************************************************/
- extern tGATT_STATUS GATTS_StartService (tGATT_IF gatt_if, UINT16 service_handle,
- tGATT_TRANSPORT sup_transport);
- /*******************************************************************************
- **
- ** Function GATTS_StopService
- **
- ** Description This function is called to stop a service
- **
- ** Parameter service_handle : this is the start handle of a service
- **
- ** Returns None.
- **
- *******************************************************************************/
- extern void GATTS_StopService (UINT16 service_handle);
- /*******************************************************************************
- **
- ** Function GATTs_HandleValueIndication
- **
- ** Description This function sends a handle value indication to a client.
- **
- ** Parameter conn_id: connection identifier.
- ** attr_handle: Attribute handle of this handle value indication.
- ** val_len: Length of the indicated attribute value.
- ** p_val: Pointer to the indicated attribute value data.
- **
- ** Returns GATT_SUCCESS if sucessfully sent or queued; otherwise error code.
- **
- *******************************************************************************/
- extern tGATT_STATUS GATTS_HandleValueIndication (UINT16 conn_id,
- UINT16 attr_handle,
- UINT16 val_len, UINT8 *p_val);
- /*******************************************************************************
- **
- ** Function GATTS_HandleValueNotification
- **
- ** Description This function sends a handle value notification to a client.
- **
- ** Parameter conn_id: connection identifier.
- ** attr_handle: Attribute handle of this handle value indication.
- ** val_len: Length of the indicated attribute value.
- ** p_val: Pointer to the indicated attribute value data.
- **
- ** Returns GATT_SUCCESS if sucessfully sent; otherwise error code.
- **
- *******************************************************************************/
- extern tGATT_STATUS GATTS_HandleValueNotification (UINT16 conn_id, UINT16 attr_handle,
- UINT16 val_len, UINT8 *p_val);
- /*******************************************************************************
- **
- ** Function GATTS_SendRsp
- **
- ** Description This function sends the server response to client.
- **
- ** Parameter conn_id: connection identifier.
- ** trans_id: transaction id
- ** status: response status
- ** p_msg: pointer to message parameters structure.
- **
- ** Returns GATT_SUCCESS if sucessfully sent; otherwise error code.
- **
- *******************************************************************************/
- extern tGATT_STATUS GATTS_SendRsp (UINT16 conn_id, UINT32 trans_id,
- tGATT_STATUS status, tGATTS_RSP *p_msg);
- /*******************************************************************************
- **
- ** Function GATTS_SetAttributeValue
- **
- ** Description This function sends to set the attribute value .
- **
- ** Parameter attr_handle:the attribute handle
- ** length: the attribute length
- ** value: the value to be set to the attribute in the database
- **
- ** Returns GATT_SUCCESS if sucessfully sent; otherwise error code.
- **
- *******************************************************************************/
- tGATT_STATUS GATTS_SetAttributeValue(UINT16 attr_handle, UINT16 length, UINT8 *value);
- /*******************************************************************************
- **
- ** Function GATTS_GetAttributeValue
- **
- ** Description This function sends to set the attribute value .
- **
- ** Parameter attr_handle: the attribute handle
- ** length:the attribute value length in the database
- ** value: the attribute value out put
- **
- ** Returns GATT_SUCCESS if sucessfully sent; otherwise error code.
- **
- *******************************************************************************/
- tGATT_STATUS GATTS_GetAttributeValue(UINT16 attr_handle, UINT16 *length, UINT8 **value);
- /*******************************************************************************/
- /* GATT Profile Client Functions */
- /*******************************************************************************/
- /*******************************************************************************
- **
- ** Function GATTC_ConfigureMTU
- **
- ** Description This function is called to configure the ATT MTU size for
- ** a connection on an LE transport.
- **
- ** Parameters conn_id: connection identifier.
- ** mtu - attribute MTU size..
- **
- ** Returns GATT_SUCCESS if command started successfully.
- **
- *******************************************************************************/
- extern tGATT_STATUS GATTC_ConfigureMTU (UINT16 conn_id, UINT16 mtu);
- /*******************************************************************************
- **
- ** Function GATTC_Discover
- **
- ** Description This function is called to do a discovery procedure on ATT server.
- **
- ** Parameters conn_id: connection identifier.
- ** disc_type:discovery type.
- ** p_param: parameters of discovery requirement.
- **
- ** Returns GATT_SUCCESS if command received/sent successfully.
- **
- *******************************************************************************/
- extern tGATT_STATUS GATTC_Discover (UINT16 conn_id,
- tGATT_DISC_TYPE disc_type,
- tGATT_DISC_PARAM *p_param );
- /*******************************************************************************
- **
- ** Function GATTC_Read
- **
- ** Description This function is called to read the value of an attribute from
- ** the server.
- **
- ** Parameters conn_id: connection identifier.
- ** type - attribute read type.
- ** p_read - read operation parameters.
- **
- ** Returns GATT_SUCCESS if command started successfully.
- **
- *******************************************************************************/
- extern tGATT_STATUS GATTC_Read (UINT16 conn_id, tGATT_READ_TYPE type,
- tGATT_READ_PARAM *p_read);
- /*******************************************************************************
- **
- ** Function GATTC_Write
- **
- ** Description This function is called to read the value of an attribute from
- ** the server.
- **
- ** Parameters conn_id: connection identifier.
- ** type - attribute write type.
- ** p_write - write operation parameters.
- **
- ** Returns GATT_SUCCESS if command started successfully.
- **
- *******************************************************************************/
- extern tGATT_STATUS GATTC_Write (UINT16 conn_id, tGATT_WRITE_TYPE type,
- tGATT_VALUE *p_write);
- /*******************************************************************************
- **
- ** Function GATTC_ExecuteWrite
- **
- ** Description This function is called to send an Execute write request to
- ** the server.
- **
- ** Parameters conn_id: connection identifier.
- ** is_execute - to execute or cancel the prepare write requet(s)
- **
- ** Returns GATT_SUCCESS if command started successfully.
- **
- *******************************************************************************/
- extern tGATT_STATUS GATTC_ExecuteWrite (UINT16 conn_id, BOOLEAN is_execute);
- /*******************************************************************************
- **
- ** Function GATTC_SendHandleValueConfirm
- **
- ** Description This function is called to send a handle value confirmation
- ** as response to a handle value notification from server.
- **
- ** Parameters conn_id: connection identifier.
- ** handle: the handle of the attribute confirmation.
- **
- ** Returns GATT_SUCCESS if command started successfully.
- **
- *******************************************************************************/
- extern tGATT_STATUS GATTC_SendHandleValueConfirm (UINT16 conn_id, UINT16 handle);
- /*******************************************************************************
- **
- ** Function GATT_SetIdleTimeout
- **
- ** Description This function (common to both client and server) sets the idle
- ** timeout for a tansport connection
- **
- ** Parameter bd_addr: target device bd address.
- ** idle_tout: timeout value in seconds.
- ** transport: trasnport option.
- **
- ** Returns void
- **
- *******************************************************************************/
- extern void GATT_SetIdleTimeout (BD_ADDR bd_addr, UINT16 idle_tout,
- tGATT_TRANSPORT transport);
- /*******************************************************************************
- **
- ** Function GATT_Register
- **
- ** Description This function is called to register an application
- ** with GATT
- **
- ** Parameter p_app_uuid128: Application UUID
- ** p_cb_info: callback functions.
- **
- ** Returns 0 for error, otherwise the index of the client registered with GATT
- **
- *******************************************************************************/
- extern tGATT_IF GATT_Register (tBT_UUID *p_app_uuid128, tGATT_CBACK *p_cb_info);
- /*******************************************************************************
- **
- ** Function GATT_Deregister
- **
- ** Description This function deregistered the application from GATT.
- **
- ** Parameters gatt_if: applicaiton interface.
- **
- ** Returns None.
- **
- *******************************************************************************/
- extern void GATT_Deregister (tGATT_IF gatt_if);
- /*******************************************************************************
- **
- ** Function GATT_StartIf
- **
- ** Description This function is called after registration to start receiving
- ** callbacks for registered interface. Function may call back
- ** with connection status and queued notifications
- **
- ** Parameter gatt_if: applicaiton interface.
- **
- ** Returns None
- **
- *******************************************************************************/
- extern void GATT_StartIf (tGATT_IF gatt_if);
- /*******************************************************************************
- **
- ** Function GATT_Connect
- **
- ** Description This function initiate a connecttion to a remote device on GATT
- ** channel.
- **
- ** Parameters gatt_if: applicaiton interface
- ** bd_addr: peer device address.
- ** is_direct: is a direct conenection or a background auto connection
- ** transport : Physical transport for GATT connection (BR/EDR or LE)
- **
- ** Returns TRUE if connection started; FALSE if connection start failure.
- **
- *******************************************************************************/
- extern BOOLEAN GATT_Connect (tGATT_IF gatt_if, BD_ADDR bd_addr,
- BOOLEAN is_direct, tBT_TRANSPORT transport);
- /*******************************************************************************
- **
- ** Function GATT_CancelConnect
- **
- ** Description This function terminate the connection initaition to a remote
- ** device on GATT channel.
- **
- ** Parameters gatt_if: client interface. If 0 used as unconditionally disconnect,
- ** typically used for direct connection cancellation.
- ** bd_addr: peer device address.
- ** is_direct: is a direct conenection or a background auto connection
- **
- ** Returns TRUE if connection started; FALSE if connection start failure.
- **
- *******************************************************************************/
- extern BOOLEAN GATT_CancelConnect (tGATT_IF gatt_if, BD_ADDR bd_addr,
- BOOLEAN is_direct);
- /*******************************************************************************
- **
- ** Function GATT_Disconnect
- **
- ** Description This function disconnect the GATT channel for this registered
- ** application.
- **
- ** Parameters conn_id: connection identifier.
- **
- ** Returns GATT_SUCCESS if disconnected.
- **
- *******************************************************************************/
- extern tGATT_STATUS GATT_Disconnect (UINT16 conn_id);
- /*******************************************************************************
- **
- ** Function GATT_GetConnectionInfor
- **
- ** Description This function use conn_id to find its associated BD address and applciation
- ** interface
- **
- ** Parameters conn_id: connection id (input)
- ** p_gatt_if: applicaiton interface (output)
- ** bd_addr: peer device address. (output)
- ** transport : physical transport of the GATT connection (BR/EDR or LE)
- **
- ** Returns TRUE the ligical link information is found for conn_id
- **
- *******************************************************************************/
- extern BOOLEAN GATT_GetConnectionInfor(UINT16 conn_id, tGATT_IF *p_gatt_if,
- BD_ADDR bd_addr, tBT_TRANSPORT *p_transport);
- /*******************************************************************************
- **
- ** Function GATT_GetConnIdIfConnected
- **
- ** Description This function find the conn_id if the logical link for BD address
- ** and applciation interface is connected
- **
- ** Parameters gatt_if: applicaiton interface (input)
- ** bd_addr: peer device address. (input)
- ** p_conn_id: connection id (output)
- ** transport : physical transport of the GATT connection (BR/EDR or LE)
- **
- ** Returns TRUE the ligical link is connected
- **
- *******************************************************************************/
- extern BOOLEAN GATT_GetConnIdIfConnected(tGATT_IF gatt_if, BD_ADDR bd_addr,
- UINT16 *p_conn_id, tBT_TRANSPORT transport);
- /*******************************************************************************
- **
- ** Function GATT_Listen
- **
- ** Description This function start or stop LE advertisement and listen for
- ** connection.
- **
- ** Parameters gatt_if: applicaiton interface
- ** p_bd_addr: listen for specific address connection, or NULL for
- ** listen to all device connection.
- ** start: is a direct conenection or a background auto connection
- **
- ** Returns TRUE if advertisement is started; FALSE if adv start failure.
- **
- *******************************************************************************/
- extern BOOLEAN GATT_Listen (tGATT_IF gatt_if, BOOLEAN start, BD_ADDR_PTR bd_addr);
- /*******************************************************************************
- **
- ** Function GATT_ConfigServiceChangeCCC
- **
- ** Description Configure service change indication on remote device
- **
- ** Returns None.
- **
- *******************************************************************************/
- extern void GATT_ConfigServiceChangeCCC (BD_ADDR remote_bda, BOOLEAN enable,
- tBT_TRANSPORT transport);
- #ifdef __cplusplus
- }
- #endif
- #endif /* GATT_API_H */
|