1 /****************************************************************************** 2 * 3 * Copyright 2003-2013 Broadcom Corporation 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at: 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 ******************************************************************************/ 18 19 /****************************************************************************** 20 * 21 * This is the public interface file for BTA GATT. 22 * 23 ******************************************************************************/ 24 25 #ifndef BTA_GATT_API_H 26 #define BTA_GATT_API_H 27 28 #include "bta_api.h" 29 #include "gatt_api.h" 30 31 #include <base/callback_forward.h> 32 #include <vector> 33 34 #ifndef BTA_GATT_DEBUG 35 #define BTA_GATT_DEBUG false 36 #endif 37 38 /***************************************************************************** 39 * Constants and data types 40 ****************************************************************************/ 41 /************************** 42 * Common Definitions 43 **************************/ 44 /* GATT ID */ 45 typedef struct { 46 bluetooth::Uuid uuid; /* uuid of the attribute */ 47 uint8_t inst_id; /* instance ID */ 48 } __attribute__((packed)) tBTA_GATT_ID; 49 50 /* Client callback function events */ 51 #define BTA_GATTC_DEREG_EVT 1 /* GATT client deregistered event */ 52 #define BTA_GATTC_OPEN_EVT 2 /* GATTC open request status event */ 53 #define BTA_GATTC_CLOSE_EVT 5 /* GATTC close request status event */ 54 #define BTA_GATTC_SEARCH_CMPL_EVT 6 /* GATT discovery complete event */ 55 #define BTA_GATTC_SEARCH_RES_EVT 7 /* GATT discovery result event */ 56 #define BTA_GATTC_NOTIF_EVT 10 /* GATT attribute notification event */ 57 #define BTA_GATTC_EXEC_EVT 12 /* execute write complete event */ 58 #define BTA_GATTC_ACL_EVT 13 /* ACL up event */ 59 #define BTA_GATTC_CANCEL_OPEN_EVT 14 /* cancel open event */ 60 #define BTA_GATTC_SRVC_CHG_EVT 15 /* service change event */ 61 #define BTA_GATTC_ENC_CMPL_CB_EVT 17 /* encryption complete callback event */ 62 #define BTA_GATTC_CFG_MTU_EVT 18 /* configure MTU complete event */ 63 #define BTA_GATTC_CONGEST_EVT 24 /* Congestion event */ 64 #define BTA_GATTC_PHY_UPDATE_EVT 25 /* PHY change event */ 65 #define BTA_GATTC_CONN_UPDATE_EVT 26 /* Connection parameters update event */ 66 67 typedef uint8_t tBTA_GATTC_EVT; 68 69 typedef struct { 70 uint16_t unit; /* as UUIUD defined by SIG */ 71 uint16_t descr; /* as UUID as defined by SIG */ 72 tGATT_FORMAT format; 73 int8_t exp; 74 uint8_t name_spc; /* The name space of the description */ 75 } tBTA_GATT_CHAR_PRES; 76 77 /* Characteristic Aggregate Format attribute value 78 */ 79 #define BTA_GATT_AGGR_HANDLE_NUM_MAX 10 80 typedef struct { 81 uint8_t num_handle; 82 uint16_t handle_list[BTA_GATT_AGGR_HANDLE_NUM_MAX]; 83 } tBTA_GATT_CHAR_AGGRE; 84 85 typedef struct { 86 uint16_t len; 87 uint8_t* p_value; 88 } tBTA_GATT_UNFMT; 89 90 #define BTA_GATT_CONN_NONE 0x0101 /* 0x0101 no connection to cancel */ 91 typedef uint16_t tBTA_GATT_REASON; 92 93 #define BTA_GATTC_MULTI_MAX GATT_MAX_READ_MULTI_HANDLES 94 95 typedef struct { 96 uint8_t num_attr; 97 uint16_t handles[BTA_GATTC_MULTI_MAX]; 98 } tBTA_GATTC_MULTI; 99 100 enum { 101 BTA_GATTC_ATTR_TYPE_INCL_SRVC, 102 BTA_GATTC_ATTR_TYPE_CHAR, 103 BTA_GATTC_ATTR_TYPE_CHAR_DESCR, 104 BTA_GATTC_ATTR_TYPE_SRVC 105 }; 106 typedef uint8_t tBTA_GATTC_ATTR_TYPE; 107 108 typedef struct { 109 bluetooth::Uuid uuid; 110 uint16_t s_handle; 111 uint16_t e_handle; /* used for service only */ 112 uint8_t attr_type; 113 uint8_t id; 114 uint8_t prop; /* used when attribute type is characteristic */ 115 bool is_primary; /* used when attribute type is service */ 116 uint16_t incl_srvc_handle; /* used when attribute type is included service */ 117 } tBTA_GATTC_NV_ATTR; 118 119 /* callback data structure */ 120 typedef struct { 121 tGATT_STATUS status; 122 tGATT_IF client_if; 123 } tBTA_GATTC_REG; 124 125 typedef struct { 126 uint16_t conn_id; 127 tGATT_STATUS status; 128 uint16_t handle; 129 uint16_t len; 130 uint8_t value[GATT_MAX_ATTR_LEN]; 131 } tBTA_GATTC_READ; 132 133 typedef struct { 134 uint16_t conn_id; 135 tGATT_STATUS status; 136 uint16_t handle; 137 } tBTA_GATTC_WRITE; 138 139 typedef struct { 140 uint16_t conn_id; 141 tGATT_STATUS status; 142 } tBTA_GATTC_EXEC_CMPL; 143 144 typedef struct { 145 uint16_t conn_id; 146 tGATT_STATUS status; 147 } tBTA_GATTC_SEARCH_CMPL; 148 149 typedef struct { 150 uint16_t conn_id; 151 tBTA_GATT_ID service_uuid; 152 } tBTA_GATTC_SRVC_RES; 153 154 typedef struct { 155 uint16_t conn_id; 156 tGATT_STATUS status; 157 uint16_t mtu; 158 } tBTA_GATTC_CFG_MTU; 159 160 typedef struct { 161 tGATT_STATUS status; 162 uint16_t conn_id; 163 tGATT_IF client_if; 164 RawAddress remote_bda; 165 tBTA_TRANSPORT transport; 166 uint16_t mtu; 167 } tBTA_GATTC_OPEN; 168 169 typedef struct { 170 tGATT_STATUS status; 171 uint16_t conn_id; 172 tGATT_IF client_if; 173 RawAddress remote_bda; 174 tBTA_GATT_REASON reason; /* disconnect reason code, not useful when connect 175 event is reported */ 176 } tBTA_GATTC_CLOSE; 177 178 typedef struct { 179 uint16_t conn_id; 180 RawAddress bda; 181 uint16_t handle; 182 uint16_t len; 183 uint8_t value[GATT_MAX_ATTR_LEN]; 184 bool is_notify; 185 } tBTA_GATTC_NOTIFY; 186 187 typedef struct { 188 uint16_t conn_id; 189 bool congested; /* congestion indicator */ 190 } tBTA_GATTC_CONGEST; 191 192 typedef struct { 193 tGATT_STATUS status; 194 tGATT_IF client_if; 195 uint16_t conn_id; 196 RawAddress remote_bda; 197 } tBTA_GATTC_OPEN_CLOSE; 198 199 typedef struct { 200 tGATT_IF client_if; 201 RawAddress remote_bda; 202 } tBTA_GATTC_ENC_CMPL_CB; 203 204 typedef struct { 205 tGATT_IF server_if; 206 uint16_t conn_id; 207 uint8_t tx_phy; 208 uint8_t rx_phy; 209 tGATT_STATUS status; 210 } tBTA_GATTC_PHY_UPDATE; 211 212 typedef struct { 213 tGATT_IF server_if; 214 uint16_t conn_id; 215 uint16_t interval; 216 uint16_t latency; 217 uint16_t timeout; 218 tGATT_STATUS status; 219 } tBTA_GATTC_CONN_UPDATE; 220 221 typedef union { 222 tGATT_STATUS status; 223 224 tBTA_GATTC_SEARCH_CMPL search_cmpl; /* discovery complete */ 225 tBTA_GATTC_SRVC_RES srvc_res; /* discovery result */ 226 tBTA_GATTC_REG reg_oper; /* registration data */ 227 tBTA_GATTC_OPEN open; 228 tBTA_GATTC_CLOSE close; 229 tBTA_GATTC_READ read; /* read attribute/descriptor data */ 230 tBTA_GATTC_WRITE write; /* write complete data */ 231 tBTA_GATTC_EXEC_CMPL exec_cmpl; /* execute complete */ 232 tBTA_GATTC_NOTIFY notify; /* notification/indication event data */ 233 tBTA_GATTC_ENC_CMPL_CB enc_cmpl; 234 RawAddress remote_bda; /* service change event */ 235 tBTA_GATTC_CFG_MTU cfg_mtu; /* configure MTU operation */ 236 tBTA_GATTC_CONGEST congest; 237 tBTA_GATTC_PHY_UPDATE phy_update; 238 tBTA_GATTC_CONN_UPDATE conn_update; 239 } tBTA_GATTC; 240 241 /* GATTC enable callback function */ 242 typedef void(tBTA_GATTC_ENB_CBACK)(tGATT_STATUS status); 243 244 /* Client callback function */ 245 typedef void(tBTA_GATTC_CBACK)(tBTA_GATTC_EVT event, tBTA_GATTC* p_data); 246 247 /* GATT Server Data Structure */ 248 /* Server callback function events */ 249 #define BTA_GATTS_REG_EVT 0 250 #define BTA_GATTS_READ_CHARACTERISTIC_EVT \ 251 GATTS_REQ_TYPE_READ_CHARACTERISTIC /* 1 */ 252 #define BTA_GATTS_READ_DESCRIPTOR_EVT GATTS_REQ_TYPE_READ_DESCRIPTOR /* 2 */ 253 #define BTA_GATTS_WRITE_CHARACTERISTIC_EVT \ 254 GATTS_REQ_TYPE_WRITE_CHARACTERISTIC /* 3 */ 255 #define BTA_GATTS_WRITE_DESCRIPTOR_EVT GATTS_REQ_TYPE_WRITE_DESCRIPTOR /* 4 */ 256 #define BTA_GATTS_EXEC_WRITE_EVT GATTS_REQ_TYPE_WRITE_EXEC /* 5 */ 257 #define BTA_GATTS_MTU_EVT GATTS_REQ_TYPE_MTU /* 6 */ 258 #define BTA_GATTS_CONF_EVT GATTS_REQ_TYPE_CONF /* 7 */ 259 #define BTA_GATTS_DEREG_EVT 8 260 #define BTA_GATTS_DELELTE_EVT 11 261 #define BTA_GATTS_STOP_EVT 13 262 #define BTA_GATTS_CONNECT_EVT 14 263 #define BTA_GATTS_DISCONNECT_EVT 15 264 #define BTA_GATTS_OPEN_EVT 16 265 #define BTA_GATTS_CANCEL_OPEN_EVT 17 266 #define BTA_GATTS_CLOSE_EVT 18 267 #define BTA_GATTS_CONGEST_EVT 20 268 #define BTA_GATTS_PHY_UPDATE_EVT 21 269 #define BTA_GATTS_CONN_UPDATE_EVT 22 270 271 typedef uint8_t tBTA_GATTS_EVT; 272 273 #define BTA_GATTS_INVALID_APP 0xff 274 275 #define BTA_GATTS_INVALID_IF 0 276 277 #ifndef BTA_GATTC_CHAR_DESCR_MAX 278 #define BTA_GATTC_CHAR_DESCR_MAX 7 279 #endif 280 281 /*********************** NV callback Data Definitions ********************** 282 */ 283 typedef struct { 284 bluetooth::Uuid app_uuid128; 285 bluetooth::Uuid svc_uuid; 286 uint16_t svc_inst; 287 uint16_t s_handle; 288 uint16_t e_handle; 289 bool is_primary; /* primary service or secondary */ 290 } tBTA_GATTS_HNDL_RANGE; 291 292 typedef struct { 293 tGATT_STATUS status; 294 RawAddress remote_bda; 295 uint32_t trans_id; 296 uint16_t conn_id; 297 tGATTS_DATA* p_data; 298 } tBTA_GATTS_REQ; 299 300 typedef struct { 301 tGATT_IF server_if; 302 tGATT_STATUS status; 303 bluetooth::Uuid uuid; 304 } tBTA_GATTS_REG_OPER; 305 306 typedef struct { 307 tGATT_IF server_if; 308 uint16_t service_id; 309 uint16_t svc_instance; 310 bool is_primary; 311 tGATT_STATUS status; 312 bluetooth::Uuid uuid; 313 } tBTA_GATTS_CREATE; 314 315 typedef struct { 316 tGATT_IF server_if; 317 uint16_t service_id; 318 tGATT_STATUS status; 319 } tBTA_GATTS_SRVC_OPER; 320 321 typedef struct { 322 tGATT_IF server_if; 323 RawAddress remote_bda; 324 uint16_t conn_id; 325 tBTA_GATT_REASON reason; /* report disconnect reason */ 326 tGATT_TRANSPORT transport; 327 } tBTA_GATTS_CONN; 328 329 typedef struct { 330 uint16_t conn_id; 331 bool congested; /* report channel congestion indicator */ 332 } tBTA_GATTS_CONGEST; 333 334 typedef struct { 335 uint16_t conn_id; /* connection ID */ 336 tGATT_STATUS status; /* notification/indication status */ 337 } tBTA_GATTS_CONF; 338 339 typedef struct { 340 tGATT_IF server_if; 341 uint16_t conn_id; 342 uint8_t tx_phy; 343 uint8_t rx_phy; 344 tGATT_STATUS status; 345 } tBTA_GATTS_PHY_UPDATE; 346 347 typedef struct { 348 tGATT_IF server_if; 349 uint16_t conn_id; 350 uint16_t interval; 351 uint16_t latency; 352 uint16_t timeout; 353 tGATT_STATUS status; 354 } tBTA_GATTS_CONN_UPDATE; 355 356 /* GATTS callback data */ 357 typedef union { 358 tBTA_GATTS_REG_OPER reg_oper; 359 tBTA_GATTS_CREATE create; 360 tBTA_GATTS_SRVC_OPER srvc_oper; 361 tGATT_STATUS status; /* BTA_GATTS_LISTEN_EVT */ 362 tBTA_GATTS_REQ req_data; 363 tBTA_GATTS_CONN conn; /* BTA_GATTS_CONN_EVT */ 364 tBTA_GATTS_CONGEST congest; /* BTA_GATTS_CONGEST_EVT callback data */ 365 tBTA_GATTS_CONF confirm; /* BTA_GATTS_CONF_EVT callback data */ 366 tBTA_GATTS_PHY_UPDATE phy_update; /* BTA_GATTS_PHY_UPDATE_EVT callback data */ 367 tBTA_GATTS_CONN_UPDATE 368 conn_update; /* BTA_GATTS_CONN_UPDATE_EVT callback data */ 369 } tBTA_GATTS; 370 371 /* GATTS enable callback function */ 372 typedef void(tBTA_GATTS_ENB_CBACK)(tGATT_STATUS status); 373 374 /* Server callback function */ 375 typedef void(tBTA_GATTS_CBACK)(tBTA_GATTS_EVT event, tBTA_GATTS* p_data); 376 377 struct tBTA_GATTC_CHARACTERISTIC; 378 struct tBTA_GATTC_DESCRIPTOR; 379 struct tBTA_GATTC_INCLUDED_SVC; 380 381 struct tBTA_GATTC_SERVICE { 382 bluetooth::Uuid uuid; 383 bool is_primary; 384 uint16_t handle; 385 uint16_t s_handle; 386 uint16_t e_handle; 387 std::vector<tBTA_GATTC_CHARACTERISTIC> characteristics; 388 std::vector<tBTA_GATTC_INCLUDED_SVC> included_svc; 389 }; 390 391 struct tBTA_GATTC_CHARACTERISTIC { 392 bluetooth::Uuid uuid; 393 // this is used only during discovery, and not persisted in cache 394 uint16_t declaration_handle; 395 uint16_t value_handle; 396 tGATT_CHAR_PROP properties; 397 std::vector<tBTA_GATTC_DESCRIPTOR> descriptors; 398 }; 399 400 struct tBTA_GATTC_DESCRIPTOR { 401 bluetooth::Uuid uuid; 402 uint16_t handle; 403 }; 404 405 struct tBTA_GATTC_INCLUDED_SVC { 406 bluetooth::Uuid uuid; 407 uint16_t handle; 408 tBTA_GATTC_SERVICE* owning_service; /* owning service*/ 409 tBTA_GATTC_SERVICE* included_service; 410 }; 411 412 /***************************************************************************** 413 * External Function Declarations 414 ****************************************************************************/ 415 416 /************************** 417 * Client Functions 418 **************************/ 419 420 /******************************************************************************* 421 * 422 * Function BTA_GATTC_Disable 423 * 424 * Description This function is called to disable the GATTC module 425 * 426 * Parameters None. 427 * 428 * Returns None 429 * 430 ******************************************************************************/ 431 extern void BTA_GATTC_Disable(void); 432 433 using BtaAppRegisterCallback = 434 base::Callback<void(uint8_t /* app_id */, uint8_t /* status */)>; 435 436 /** 437 * This function is called to register application callbacks with BTA GATTC 438 *module. 439 * p_client_cb - pointer to the application callback function. 440 **/ 441 extern void BTA_GATTC_AppRegister(tBTA_GATTC_CBACK* p_client_cb, 442 BtaAppRegisterCallback cb); 443 444 /******************************************************************************* 445 * 446 * Function BTA_GATTC_AppDeregister 447 * 448 * Description This function is called to deregister an application 449 * from BTA GATTC module. 450 * 451 * Parameters client_if - client interface identifier. 452 * 453 * Returns None 454 * 455 ******************************************************************************/ 456 extern void BTA_GATTC_AppDeregister(tGATT_IF client_if); 457 458 /******************************************************************************* 459 * 460 * Function BTA_GATTC_Open 461 * 462 * Description Open a direct connection or add a background auto connection 463 * bd address 464 * 465 * Parameters client_if: server interface. 466 * remote_bda: remote device BD address. 467 * is_direct: direct connection or background auto connection 468 * initiating_phys: LE PHY to use, optional 469 * 470 ******************************************************************************/ 471 extern void BTA_GATTC_Open(tGATT_IF client_if, const RawAddress& remote_bda, 472 bool is_direct, tGATT_TRANSPORT transport, 473 bool opportunistic); 474 extern void BTA_GATTC_Open(tGATT_IF client_if, const RawAddress& remote_bda, 475 bool is_direct, tGATT_TRANSPORT transport, 476 bool opportunistic, uint8_t initiating_phys); 477 478 /******************************************************************************* 479 * 480 * Function BTA_GATTC_CancelOpen 481 * 482 * Description Open a direct connection or add a background auto connection 483 * bd address 484 * 485 * Parameters client_if: server interface. 486 * remote_bda: remote device BD address. 487 * is_direct: direct connection or background auto connection 488 * 489 * Returns void 490 * 491 ******************************************************************************/ 492 extern void BTA_GATTC_CancelOpen(tGATT_IF client_if, 493 const RawAddress& remote_bda, bool is_direct); 494 495 /******************************************************************************* 496 * 497 * Function BTA_GATTC_Close 498 * 499 * Description Close a connection to a GATT server. 500 * 501 * Parameters conn_id: connectino ID to be closed. 502 * 503 * Returns void 504 * 505 ******************************************************************************/ 506 extern void BTA_GATTC_Close(uint16_t conn_id); 507 508 /******************************************************************************* 509 * 510 * Function BTA_GATTC_ServiceSearchRequest 511 * 512 * Description This function is called to request a GATT service discovery 513 * on a GATT server. This function report service search result 514 * by a callback event, and followed by a service search 515 * complete event. 516 * 517 * Parameters conn_id: connection ID. 518 * p_srvc_uuid: a UUID of the service application is interested 519 * in. If Null, discover for all services. 520 * 521 * Returns None 522 * 523 ******************************************************************************/ 524 extern void BTA_GATTC_ServiceSearchRequest(uint16_t conn_id, 525 bluetooth::Uuid* p_srvc_uuid); 526 527 /** 528 * This function is called to send "Find service by UUID" request. Used only for 529 * PTS tests. 530 */ 531 extern void BTA_GATTC_DiscoverServiceByUuid(uint16_t conn_id, 532 const bluetooth::Uuid& p_srvc_uuid); 533 534 /******************************************************************************* 535 * 536 * Function BTA_GATTC_GetServices 537 * 538 * Description This function is called to find the services on the given 539 * server. 540 * 541 * Parameters conn_id: connection ID which identify the server. 542 * 543 * Returns returns list of tBTA_GATTC_SERVICE or NULL. 544 * 545 ******************************************************************************/ 546 extern const std::vector<tBTA_GATTC_SERVICE>* BTA_GATTC_GetServices( 547 uint16_t conn_id); 548 549 /******************************************************************************* 550 * 551 * Function BTA_GATTC_GetCharacteristic 552 * 553 * Description This function is called to find the characteristic on the 554 * given server. 555 * 556 * Parameters conn_id: connection ID which identify the server. 557 * handle: characteristic handle 558 * 559 * Returns returns pointer to tBTA_GATTC_CHARACTERISTIC or NULL. 560 * 561 ******************************************************************************/ 562 extern const tBTA_GATTC_CHARACTERISTIC* BTA_GATTC_GetCharacteristic( 563 uint16_t conn_id, uint16_t handle); 564 565 /******************************************************************************* 566 * 567 * Function BTA_GATTC_GetDescriptor 568 * 569 * Description This function is called to find the characteristic on the 570 * given server. 571 * 572 * Parameters conn_id: connection ID which identify the server. 573 * handle: descriptor handle 574 * 575 * Returns returns pointer to tBTA_GATTC_DESCRIPTOR or NULL. 576 * 577 ******************************************************************************/ 578 extern const tBTA_GATTC_DESCRIPTOR* BTA_GATTC_GetDescriptor(uint16_t conn_id, 579 uint16_t handle); 580 581 /* Return characteristic that owns descriptor with handle equal to |handle|, or 582 * NULL */ 583 extern const tBTA_GATTC_CHARACTERISTIC* BTA_GATTC_GetOwningCharacteristic( 584 uint16_t conn_id, uint16_t handle); 585 586 /* Return service that owns descriptor or characteristic with handle equal to 587 * |handle|, or NULL */ 588 extern const tBTA_GATTC_SERVICE* BTA_GATTC_GetOwningService(uint16_t conn_id, 589 uint16_t handle); 590 591 /******************************************************************************* 592 * 593 * Function BTA_GATTC_GetGattDb 594 * 595 * Description This function is called to get gatt db. 596 * 597 * Parameters conn_id: connection ID which identify the server. 598 * db: output parameter which will contain gatt db copy. 599 * Caller is responsible for freeing it. 600 * count: number of elements in db. 601 * 602 ******************************************************************************/ 603 extern void BTA_GATTC_GetGattDb(uint16_t conn_id, uint16_t start_handle, 604 uint16_t end_handle, btgatt_db_element_t** db, 605 int* count); 606 607 typedef void (*GATT_READ_OP_CB)(uint16_t conn_id, tGATT_STATUS status, 608 uint16_t handle, uint16_t len, uint8_t* value, 609 void* data); 610 typedef void (*GATT_WRITE_OP_CB)(uint16_t conn_id, tGATT_STATUS status, 611 uint16_t handle, void* data); 612 613 /******************************************************************************* 614 * 615 * Function BTA_GATTC_ReadCharacteristic 616 * 617 * Description This function is called to read a characteristics value 618 * 619 * Parameters conn_id - connectino ID. 620 * handle - characteritic handle to read. 621 * 622 * Returns None 623 * 624 ******************************************************************************/ 625 void BTA_GATTC_ReadCharacteristic(uint16_t conn_id, uint16_t handle, 626 tGATT_AUTH_REQ auth_req, 627 GATT_READ_OP_CB callback, void* cb_data); 628 629 /** 630 * This function is called to read a value of characteristic with uuid equal to 631 * |uuid| 632 */ 633 void BTA_GATTC_ReadUsingCharUuid(uint16_t conn_id, const bluetooth::Uuid& uuid, 634 uint16_t s_handle, uint16_t e_handle, 635 tGATT_AUTH_REQ auth_req, 636 GATT_READ_OP_CB callback, void* cb_data); 637 638 /******************************************************************************* 639 * 640 * Function BTA_GATTC_ReadCharDescr 641 * 642 * Description This function is called to read a descriptor value. 643 * 644 * Parameters conn_id - connection ID. 645 * handle - descriptor handle to read. 646 * 647 * Returns None 648 * 649 ******************************************************************************/ 650 void BTA_GATTC_ReadCharDescr(uint16_t conn_id, uint16_t handle, 651 tGATT_AUTH_REQ auth_req, GATT_READ_OP_CB callback, 652 void* cb_data); 653 654 /******************************************************************************* 655 * 656 * Function BTA_GATTC_WriteCharValue 657 * 658 * Description This function is called to write characteristic value. 659 * 660 * Parameters conn_id - connection ID. 661 * handle - characteristic handle to write. 662 * write_type - type of write. 663 * value - the value to be written. 664 * 665 * Returns None 666 * 667 ******************************************************************************/ 668 void BTA_GATTC_WriteCharValue(uint16_t conn_id, uint16_t handle, 669 tGATT_WRITE_TYPE write_type, 670 std::vector<uint8_t> value, 671 tGATT_AUTH_REQ auth_req, 672 GATT_WRITE_OP_CB callback, void* cb_data); 673 674 /******************************************************************************* 675 * 676 * Function BTA_GATTC_WriteCharDescr 677 * 678 * Description This function is called to write descriptor value. 679 * 680 * Parameters conn_id - connection ID 681 * handle - descriptor handle to write. 682 * value - the value to be written. 683 * 684 * Returns None 685 * 686 ******************************************************************************/ 687 void BTA_GATTC_WriteCharDescr(uint16_t conn_id, uint16_t handle, 688 std::vector<uint8_t> value, 689 tGATT_AUTH_REQ auth_req, 690 GATT_WRITE_OP_CB callback, void* cb_data); 691 692 /******************************************************************************* 693 * 694 * Function BTA_GATTC_SendIndConfirm 695 * 696 * Description This function is called to send handle value confirmation. 697 * 698 * Parameters conn_id - connection ID. 699 * handle - characteristic handle to confirm. 700 * 701 * Returns None 702 * 703 ******************************************************************************/ 704 extern void BTA_GATTC_SendIndConfirm(uint16_t conn_id, uint16_t handle); 705 706 /******************************************************************************* 707 * 708 * Function BTA_GATTC_RegisterForNotifications 709 * 710 * Description This function is called to register for notification of a 711 * service. 712 * 713 * Parameters client_if - client interface. 714 * remote_bda - target GATT server. 715 * handle - GATT characteristic handle. 716 * 717 * Returns OK if registration succeed, otherwise failed. 718 * 719 ******************************************************************************/ 720 extern tGATT_STATUS BTA_GATTC_RegisterForNotifications( 721 tGATT_IF client_if, const RawAddress& remote_bda, uint16_t handle); 722 723 /******************************************************************************* 724 * 725 * Function BTA_GATTC_DeregisterForNotifications 726 * 727 * Description This function is called to de-register for notification of a 728 * service. 729 * 730 * Parameters client_if - client interface. 731 * remote_bda - target GATT server. 732 * handle - GATT characteristic handle. 733 * 734 * Returns OK if deregistration succeed, otherwise failed. 735 * 736 ******************************************************************************/ 737 extern tGATT_STATUS BTA_GATTC_DeregisterForNotifications( 738 tGATT_IF client_if, const RawAddress& remote_bda, uint16_t handle); 739 740 /******************************************************************************* 741 * 742 * Function BTA_GATTC_PrepareWrite 743 * 744 * Description This function is called to prepare write a characteristic 745 * value. 746 * 747 * Parameters conn_id - connection ID. 748 * handle - GATT characteritic handle. 749 * offset - offset of the write value. 750 * value - the value to be written. 751 * 752 * Returns None 753 * 754 ******************************************************************************/ 755 extern void BTA_GATTC_PrepareWrite(uint16_t conn_id, uint16_t handle, 756 uint16_t offset, std::vector<uint8_t> value, 757 tGATT_AUTH_REQ auth_req, 758 GATT_WRITE_OP_CB callback, void* cb_data); 759 760 /******************************************************************************* 761 * 762 * Function BTA_GATTC_ExecuteWrite 763 * 764 * Description This function is called to execute write a prepare write 765 * sequence. 766 * 767 * Parameters conn_id - connection ID. 768 * is_execute - execute or cancel. 769 * 770 * Returns None 771 * 772 ******************************************************************************/ 773 extern void BTA_GATTC_ExecuteWrite(uint16_t conn_id, bool is_execute); 774 775 /******************************************************************************* 776 * 777 * Function BTA_GATTC_ReadMultiple 778 * 779 * Description This function is called to read multiple characteristic or 780 * characteristic descriptors. 781 * 782 * Parameters conn_id - connectino ID. 783 * p_read_multi - read multiple parameters. 784 * 785 * Returns None 786 * 787 ******************************************************************************/ 788 extern void BTA_GATTC_ReadMultiple(uint16_t conn_id, 789 tBTA_GATTC_MULTI* p_read_multi, 790 tGATT_AUTH_REQ auth_req); 791 792 /******************************************************************************* 793 * 794 * Function BTA_GATTC_Refresh 795 * 796 * Description Refresh the server cache of the remote device 797 * 798 * Parameters remote_bda: remote device BD address. 799 * 800 * Returns void 801 * 802 ******************************************************************************/ 803 extern void BTA_GATTC_Refresh(const RawAddress& remote_bda); 804 805 /******************************************************************************* 806 * 807 * Function BTA_GATTC_ConfigureMTU 808 * 809 * Description Configure the MTU size in the GATT channel. This can be done 810 * only once per connection. 811 * 812 * Parameters conn_id: connection ID. 813 * mtu: desired MTU size to use. 814 * 815 * Returns void 816 * 817 ******************************************************************************/ 818 extern void BTA_GATTC_ConfigureMTU(uint16_t conn_id, uint16_t mtu); 819 820 /******************************************************************************* 821 * BTA GATT Server API 822 ******************************************************************************/ 823 824 /******************************************************************************* 825 * 826 * Function BTA_GATTS_Init 827 * 828 * Description This function is called to initalize GATTS module 829 * 830 * Parameters None 831 * 832 * Returns None 833 * 834 ******************************************************************************/ 835 extern void BTA_GATTS_Init(); 836 837 /******************************************************************************* 838 * 839 * Function BTA_GATTS_Disable 840 * 841 * Description This function is called to disable GATTS module 842 * 843 * Parameters None. 844 * 845 * Returns None 846 * 847 ******************************************************************************/ 848 extern void BTA_GATTS_Disable(void); 849 850 /******************************************************************************* 851 * 852 * Function BTA_GATTS_AppRegister 853 * 854 * Description This function is called to register application callbacks 855 * with BTA GATTS module. 856 * 857 * Parameters p_app_uuid - applicaiton UUID 858 * p_cback - pointer to the application callback function. 859 * 860 * Returns None 861 * 862 ******************************************************************************/ 863 extern void BTA_GATTS_AppRegister(const bluetooth::Uuid& app_uuid, 864 tBTA_GATTS_CBACK* p_cback); 865 866 /******************************************************************************* 867 * 868 * Function BTA_GATTS_AppDeregister 869 * 870 * Description De-register with BTA GATT Server. 871 * 872 * Parameters server_if: server interface 873 * 874 * Returns void 875 * 876 ******************************************************************************/ 877 extern void BTA_GATTS_AppDeregister(tGATT_IF server_if); 878 879 /******************************************************************************* 880 * 881 * Function BTA_GATTS_AddService 882 * 883 * Description Add the given |service| and all included elements to the 884 * GATT database. a |BTA_GATTS_ADD_SRVC_EVT| is triggered to 885 * report the status and attribute handles. 886 * 887 * Parameters server_if: server interface. 888 * service: pointer to vector describing service. 889 * 890 * Returns Returns |GATT_SUCCESS| on success or |GATT_ERROR| if the 891 * service cannot be added. 892 * 893 ******************************************************************************/ 894 typedef base::Callback<void(uint8_t status, int server_if, 895 std::vector<btgatt_db_element_t> service)> 896 BTA_GATTS_AddServiceCb; 897 898 extern void BTA_GATTS_AddService(tGATT_IF server_if, 899 std::vector<btgatt_db_element_t> service, 900 BTA_GATTS_AddServiceCb cb); 901 902 /******************************************************************************* 903 * 904 * Function BTA_GATTS_DeleteService 905 * 906 * Description This function is called to delete a service. When this is 907 * done, a callback event BTA_GATTS_DELETE_EVT is report with 908 * the status. 909 * 910 * Parameters service_id: service_id to be deleted. 911 * 912 * Returns returns none. 913 * 914 ******************************************************************************/ 915 extern void BTA_GATTS_DeleteService(uint16_t service_id); 916 917 /******************************************************************************* 918 * 919 * Function BTA_GATTS_StopService 920 * 921 * Description This function is called to stop a service. 922 * 923 * Parameters service_id - service to be topped. 924 * 925 * Returns None 926 * 927 ******************************************************************************/ 928 extern void BTA_GATTS_StopService(uint16_t service_id); 929 930 /******************************************************************************* 931 * 932 * Function BTA_GATTS_HandleValueIndication 933 * 934 * Description This function is called to read a characteristics 935 * descriptor. 936 * 937 * Parameters conn_id - connection identifier. 938 * attr_id - attribute ID to indicate. 939 * value - data to indicate. 940 * need_confirm - if this indication expects a confirmation or 941 * not. 942 * 943 * Returns None 944 * 945 ******************************************************************************/ 946 extern void BTA_GATTS_HandleValueIndication(uint16_t conn_id, uint16_t attr_id, 947 std::vector<uint8_t> value, 948 bool need_confirm); 949 950 /******************************************************************************* 951 * 952 * Function BTA_GATTS_SendRsp 953 * 954 * Description This function is called to send a response to a request. 955 * 956 * Parameters conn_id - connection identifier. 957 * trans_id - transaction ID. 958 * status - response status 959 * p_msg - response data. 960 * 961 * Returns None 962 * 963 ******************************************************************************/ 964 extern void BTA_GATTS_SendRsp(uint16_t conn_id, uint32_t trans_id, 965 tGATT_STATUS status, tGATTS_RSP* p_msg); 966 967 /******************************************************************************* 968 * 969 * Function BTA_GATTS_Open 970 * 971 * Description Open a direct open connection or add a background auto 972 * connection bd address 973 * 974 * Parameters server_if: server interface. 975 * remote_bda: remote device BD address. 976 * is_direct: direct connection or background auto connection 977 * 978 * Returns void 979 * 980 ******************************************************************************/ 981 extern void BTA_GATTS_Open(tGATT_IF server_if, const RawAddress& remote_bda, 982 bool is_direct, tGATT_TRANSPORT transport); 983 984 /******************************************************************************* 985 * 986 * Function BTA_GATTS_CancelOpen 987 * 988 * Description Cancel a direct open connection or remove a background auto 989 * connection bd address 990 * 991 * Parameters server_if: server interface. 992 * remote_bda: remote device BD address. 993 * is_direct: direct connection or background auto connection 994 * 995 * Returns void 996 * 997 ******************************************************************************/ 998 extern void BTA_GATTS_CancelOpen(tGATT_IF server_if, 999 const RawAddress& remote_bda, bool is_direct); 1000 1001 /******************************************************************************* 1002 * 1003 * Function BTA_GATTS_Close 1004 * 1005 * Description Close a connection a remote device. 1006 * 1007 * Parameters conn_id: connectino ID to be closed. 1008 * 1009 * Returns void 1010 * 1011 ******************************************************************************/ 1012 extern void BTA_GATTS_Close(uint16_t conn_id); 1013 1014 #endif /* BTA_GATT_API_H */ 1015