1 /* 2 * Copyright (C) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 /** 17 * @file att.h 18 * 19 * @brief Declares extern interface, including register interface, callback interface etc. 20 * 21 */ 22 23 #ifndef ATT_H 24 #define ATT_H 25 26 #include <stdint.h> 27 #include "btstack.h" 28 #include "buffer.h" 29 #ifdef __cplusplus 30 extern "C" { 31 #endif 32 33 // Transport type 34 #define BT_TRANSPORT_INVALID 0 35 #define BT_TRANSPORT_BR_EDR 1 36 #define BT_TRANSPORT_LE 2 37 38 // client callback event id 39 #define ATT_ERROR_RESPONSE_ID 0x0101 40 #define ATT_EXCHANGE_MTU_RESPONSE_ID 0x0103 41 #define ATT_FIND_INFORMATION_RESPONSE_ID 0x0105 42 #define ATT_FIND_BY_TYPE_VALUE_RESPONSE_ID 0x0107 43 #define ATT_READ_BY_TYPE_RESPONSE_ID 0x0109 44 #define ATT_READ_RESPONSE_ID 0x010B 45 #define ATT_READ_BLOB_RESPONSE_ID 0x010D 46 #define ATT_READ_MULTIPLE_RESPONSE_ID 0x010F 47 #define ATT_READ_BY_GROUP_TYPE_RESPONSE_ID 0x0202 48 #define ATT_WRITE_RESPONSE_ID 0x0204 49 #define ATT_PREPARE_WRITE_RESPONSE_ID 0x0208 50 #define ATT_EXECUTE_WRITE_RESPONSE_ID 0x020A 51 #define ATT_HANDLE_VALUE_NOTIFICATION_ID 0x020B 52 #define ATT_HANDLE_VALUE_INDICATION_ID 0x020C 53 #define ATT_TRANSACTION_TIME_OUT_ID 0x020E 54 55 // server callback event id 56 #define ATT_EXCHANGE_MTU_REQUEST_ID 0x0102 57 #define ATT_FIND_INFORMATION_REQUEST_ID 0x0104 58 #define ATT_FIND_BY_TYPE_VALUE_REQUEST_ID 0x0106 59 #define ATT_READ_BY_TYPE_REQUEST_ID 0x0108 60 #define ATT_READ_REQUEST_ID 0x010A 61 #define ATT_READ_BLOB_REQUEST_ID 0x010C 62 #define ATT_READ_MULTIPLE_REQUEST_ID 0x010E 63 #define ATT_READ_BY_GROUP_TYPE_REQUEST_ID 0x0201 64 #define ATT_WRITE_REQUEST_ID 0x0203 65 #define ATT_WRITE_COMMAND_ID 0x0205 66 #define ATT_SIGNED_WRITE_COMMAND_ID 0x0206 67 #define ATT_PREPARE_WRITE_REQUEST_ID 0x0207 68 #define ATT_EXECUTE_WRITE_REQUEST_ID 0x0209 69 #define ATT_HANDLE_VALUE_CONFIRMATION_ID 0x020D 70 #define ATT_UNKNOW_OPCODE_ID 0x020F 71 72 // error response code 73 #define ATT_INVALID_HANDLE 0x01 74 #define ATT_READ_NOT_PERMITTED 0x02 75 #define ATT_WRITE_NOT_PERMITTED 0x03 76 #define ATT_INVALID_PDU 0x04 77 #define ATT_INSUFFICIENT_AUTHENTICATION 0x05 78 #define ATT_REQUEST_NOT_SUPPORTED 0x06 79 #define ATT_INVALID_OFFSET 0x07 80 #define ATT_INSUFFICIENT_AUTHORIZATION 0x08 81 #define ATT_PREPARE_QUEUE_FULL 0x09 82 #define ATT_ATTRIBUTE_NOT_FOUND 0x0A 83 #define ATT_ATTRIBUTE_NOT_LONG 0x0B 84 #define ATT_INSUFFICIENT_ENCRYPTION_KEY_SIZE 0x0C 85 #define ATT_INVALID_ATTRIBUTE_VALUE_LENGTH 0x0D 86 #define ATT_UNLIKELY_ERROR 0x0E 87 #define ATT_INSUFFICIENT_ENCRYPTION 0x0F 88 #define ATT_UNSUPPORTED_GROUP_TYPE 0x10 89 #define ATT_INSUFFICIENT_RESOURECES 0x11 90 #define ATT_WRITE_REQUEST_REJECTED 0xFC 91 #define ATT_CLIENT_CHARACTERISTIC_CONFIGURATION_DESCRIPTOR_IMPROPERLY_CONFIGURED 0xFD 92 #define ATT_PROCEDURE_ALREADY_IN_PROGRESS 0xFE 93 #define ATT_OUT_OF_RANGE 0xFF 94 95 // opcode 96 #define ERROR_RESPONSE 0x01 97 #define EXCHANGE_MTU_REQUEST 0x02 98 #define EXCHANGE_MTU_RESPONSE 0x03 99 #define FIND_INFORMATION_REQUEST 0x04 100 #define FIND_INFORMATION_RESPONSE 0x05 101 #define FIND_BY_TYPE_VALUE_REQUEST 0x06 102 #define FIND_BY_TYPE_VALUE_RESPONSE 0x07 103 #define READ_BY_TYPE_REQUEST 0x08 104 #define READ_BY_TYPE_RESPONSE 0x09 105 #define READ_REQUEST 0x0A 106 #define READ_RESPONSE 0x0B 107 #define READ_BLOB_REQUEST 0x0C 108 #define READ_BLOB_RESPONSE 0x0D 109 #define READ_MULTIPLE_REQUEST 0x0E 110 #define READ_MULTIPLE_RESPONSE 0x0F 111 #define READ_BY_GROUP_TYPE_REQUEST 0x10 112 #define READ_BY_GROUP_TYPE_RESPONSE 0x11 113 #define WRITE_REQUEST 0x12 114 #define WRITE_RESPONSE 0x13 115 #define WRITE_COMMAND 0x52 116 #define SIGNED_WRITE_COMMAND 0xD2 117 #define PREPARE_WRITE_REQUEST 0x16 118 #define PREPARE_WRITE_RESPONSE 0x17 119 #define EXECUTE_WRITE_REQUEST 0x18 120 #define EXECUTE_WRITE_RESPONSE 0x19 121 #define HANDLE_VALUE_NOTIFICATION 0x1B 122 #define HANDLE_VALUE_INDICATION 0x1D 123 #define HANDLE_VALUE_CONFIRMATION 0x1E 124 #define READ_MULTIPLE_VARIABLE_RESPONSE 0x21 125 #define MULTIPLE_HANDLE_VALUE_NOTIFICATION 0x23 126 127 // gap security authentication result code 128 #define SECURITY_AUTHENTICATION_SUCCESS 0x45 129 #define SECURITY_AUTHENTICATION_FAIL 0x46 130 131 // bredr connect callback result code 132 #define BREDR_CONNECT_SUCCESS 0x49 133 #define BREDR_CONNECT_FAIL 0x50 134 135 // le connect callback result code 136 #define LE_CONNECT_SUCCESS 0x51 137 #define LE_CONNECT_FAIL 0x52 138 139 // le disconnect result code 140 #define LE_DISCONNECT_SUCCESS 0x53 141 #define LE_DISCONNECT_FAIL 0x54 142 143 // bredr disconnect callback result code 144 #define INITIATIVECONNECT_DISCONNECT_SUCCESS 0x55 145 #define INITIATIVECONNECT_DISCONNECT_FAIL 0x56 146 #define PASSIVECONNECT_DISCONNECT_SUCCESS 0x57 147 #define PASSIVECONNECT_DISCONNECT_FAIL 0x58 148 #define DISCONNECT_ABNORMAL 0x59 149 150 // bredr connect response result 151 #define BREDR_CONNECT_ACCEPT 0x00 152 #define BREDR_CONNECT_REJECTED 0x04 153 154 // att connect timeout 155 #define ATT_CONNECT_TIMEOUT 0x0060 156 157 typedef struct { 158 uint16_t attHandle; 159 BtUuid uuid; 160 } AttHandleUuid; 161 162 typedef struct { 163 uint16_t attHandle; 164 uint16_t groupEndHandle; 165 } AttHandleInfo; 166 167 typedef struct { 168 uint8_t properties; 169 uint16_t attributeHandle; 170 BtUuid *uuid; 171 } AttSpecificAttributeValue; 172 173 typedef struct { 174 uint16_t attHandle; 175 } AttHandleValue; 176 177 typedef struct { 178 uint16_t attHandle; 179 uint16_t groupEndHandle; 180 uint8_t *attributeValue; 181 } AttReadGoupAttributeData; 182 183 typedef struct { 184 uint16_t mtuSize; 185 } AttExchangeMTUType; 186 187 typedef struct { 188 uint16_t startHandle; 189 uint16_t endHandle; 190 } AttHandleRange; 191 192 typedef struct { 193 uint8_t reqOpcode; 194 uint16_t attHandleInError; 195 uint8_t errorCode; 196 } AttError; 197 198 typedef struct { 199 AttHandleUuid *handleUuidPairs; 200 uint16_t pairNum; 201 uint8_t format; 202 } AttFindInformationRsp; 203 204 typedef struct { 205 AttHandleRange handleRange; 206 uint16_t attType; 207 } AttFindByTypeValueReq; 208 209 typedef struct { 210 AttHandleInfo *handleInfoList; 211 uint16_t listNum; 212 } AttFindByTypeValueRsp; 213 214 typedef union { 215 AttHandleRange findInformationRequest; 216 AttFindInformationRsp findInforRsponse; 217 AttFindByTypeValueReq findByTypeValueRequest; 218 AttFindByTypeValueRsp findByTypeValueResponse; 219 } AttFind; 220 221 typedef struct { 222 AttHandleRange handleRange; 223 BtUuid *uuid; 224 } AttReadByTypeReq; 225 226 typedef struct { 227 AttHandleValue attHandle; 228 uint8_t *attributeValue; 229 } AttReadByTypeRspDataList; 230 231 typedef struct { 232 AttReadByTypeRspDataList *valueList; 233 uint16_t valueNum; 234 uint8_t len; 235 } AttReadByTypeRsp; 236 237 typedef struct { 238 uint16_t attHandle; 239 } AttReadReq; 240 241 typedef struct { 242 uint16_t attHandle; 243 uint16_t offset; 244 } AttReadBlobReqPrepareWriteValue; 245 246 typedef struct { 247 uint16_t *setHandles; 248 } AttReadMultipleReq; 249 250 typedef struct { 251 uint8_t *setValues; 252 } AttReadMultipleRes; 253 254 typedef struct { 255 AttHandleRange handleRange; 256 BtUuid *uuid; 257 } AttReadGroupReq; 258 259 typedef struct { 260 uint8_t length; 261 uint16_t num; 262 AttReadGoupAttributeData *attributeData; 263 } AttReadGroupRes; 264 265 typedef union { 266 AttReadByTypeReq readHandleRangeUuid; 267 AttReadByTypeRsp readHandleListNum; 268 AttReadReq readHandle; 269 AttReadBlobReqPrepareWriteValue readBlob; 270 AttReadMultipleReq readMultRequest; 271 AttReadMultipleRes readMultResponse; 272 AttReadGroupReq readGroupRequest; 273 AttReadGroupRes readGroupResponse; 274 } AttRead; 275 276 typedef enum { 277 SIGNATURE_OK, 278 SIGNATURE_ERR_EXECUTION, 279 SIGNATURE_ERR_COUNTER, 280 SIGNATURE_ERR_ALGORITHM, 281 GAP_REJECT, 282 } AttSignedWriteCommandResult; 283 284 typedef struct { 285 AttHandleValue attHandleValueObj; 286 uint8_t authSignature[12]; 287 uint16_t authSignatureLen; 288 AttSignedWriteCommandResult result; 289 } AttSignedWriteComm; 290 291 typedef struct { 292 AttHandleValue handleValue; 293 uint16_t offset; 294 } AttPrepareWrite; 295 296 typedef struct { 297 uint8_t flag; 298 } AttExecuteWrite; 299 300 typedef union { 301 AttHandleValue writeRequest; 302 AttHandleValue writeCommand; 303 AttHandleValue confirmation; 304 AttSignedWriteComm signedWriteCommand; 305 AttPrepareWrite prepareWrite; 306 AttExecuteWrite excuteWrite; 307 } AttWrite; 308 309 typedef struct { 310 uint8_t status; 311 uint8_t role; 312 BtAddr addr; 313 } AttLeConnectCallback; 314 315 typedef struct { 316 uint8_t status; 317 uint8_t reason; 318 } AttLeDisconnectCallback; 319 320 typedef struct { 321 BtAddr addr; 322 uint8_t status; 323 uint16_t mtu; 324 } AttBredrConnectCallback; 325 326 typedef struct { 327 uint8_t reason; 328 } AttBredrDisconnectCallback; 329 330 typedef struct { 331 uint16_t connIntervalMin; 332 uint16_t connIntervalMax; 333 uint16_t connLatency; 334 uint16_t supervisionTimeout; 335 } AttLeConnect; 336 337 typedef struct { 338 uint16_t mtu; 339 uint16_t flushTimeout; 340 uint8_t mode; 341 } AttBredrConnect; 342 343 typedef union { 344 AttLeConnect leConnParaVar; 345 AttBredrConnect bredrConnParaVar; 346 } AttConnect; 347 348 typedef union AttEventData { 349 AttError attErrorResponse; 350 AttExchangeMTUType attExchangeMtuRequest; 351 AttExchangeMTUType attExchangeMtuResponse; 352 AttFind attFindInformationRequest; 353 AttFind attFindInformationResponse; 354 AttFind attFindByTypeValueRequest; 355 AttFind attFindByTypeValueResponse; 356 AttRead attReadByTypeRequest; 357 AttRead attReadByTypeResponse; 358 AttRead attReadRequest; 359 AttRead attReadResponse; 360 AttRead attReadBlobRequest; 361 AttRead attReadBlobResponse; 362 AttRead attReadMultipleRequest; 363 AttRead attReadMultipleResponse; 364 AttRead attReadByGroupTypeRequest; 365 AttRead attReadByGroupTypeResponse; 366 AttWrite attWriteRequest; 367 AttWrite attWriteResponse; 368 AttWrite attWriteCommand; 369 AttWrite attSignedWriteCommand; 370 AttWrite attPreprareWriteRequest; 371 AttWrite attPrepareWriteResponse; 372 AttWrite attExecuteWriteRequest; 373 AttWrite attExecuteWriteResponse; 374 AttHandleValue attNotification; 375 AttHandleValue attIndication; 376 AttHandleValue attHandleValueConfirmation; 377 AttWrite attTimeOut; 378 } AttEventData; 379 380 typedef struct { 381 void (*attLEConnectCompleted)(uint16_t connectHandle, AttLeConnectCallback *data, void *context); 382 void (*attLEDisconnectCompleted)(uint16_t connectHandle, AttLeDisconnectCallback *data, void *context); 383 void (*attBREDRConnectCompleted)(uint16_t connectHandle, AttBredrConnectCallback *data, void *context); 384 void (*attBREDRDisconnectCompleted)(uint16_t connectHandle, AttBredrDisconnectCallback *data, void *context); 385 void (*attBREDRConnectInd)(uint16_t connectHandle, void *context); 386 } AttConnectCallback; 387 388 typedef void (*attCallback)(uint16_t connectHandle, uint16_t event, void *eventData, Buffer *buffer, void *context); 389 typedef void (*attSendDataCallback)(uint16_t retGattConnectHandle, int result, void *context); 390 391 typedef struct { 392 attSendDataCallback attSendDataCB; 393 void *context; 394 } AttClientSendDataCallback; 395 396 typedef struct { 397 attSendDataCallback attSendDataCB; 398 void *context; 399 } AttServerSendDataCallback; 400 401 /** 402 * @brief Gatt register the client data callback to att. 403 * 404 * @param1 dataCallback Indicates the pointer to callback. 405 * @param2 context Indicates the pointer to context. 406 */ 407 void BTSTACK_API ATT_ClientDataRegister(attCallback dataCallback, void *context); 408 409 /** 410 * @brief Gatt deregister the client data callback to att. 411 * 412 */ 413 void BTSTACK_API ATT_ClientDataDeregister(); 414 415 /** 416 * @brief Gatt register the server data callback to att. 417 * 418 * @param1 dataCallback Indicates the pointer to callback. 419 * @param2 context Indicates the pointer to context. 420 */ 421 void BTSTACK_API ATT_ServerDataRegister(attCallback dataCallback, void *context); 422 423 /** 424 * @brief Gatt deregister the server data callback to att. 425 * 426 */ 427 void BTSTACK_API ATT_ServerDataDeregister(); 428 429 /** 430 * @brief Gatt register the connection callback to att. 431 * 432 * @param1 connectBack Indicates the struct to callback. 433 * @param2 context Indicates the pointer to context. 434 */ 435 void BTSTACK_API ATT_ConnectRegister(AttConnectCallback connectBack, void *context); 436 437 /** 438 * @brief Gatt deregister the connection callback to att. 439 * 440 */ 441 void BTSTACK_API ATT_ConnectDeregister(); 442 443 /** 444 * @brief Gatt client register the send data callback to att. 445 * 446 * @param1 attSendDataCB Indicates pointer of attSendDataCallback. 447 * @param2 context Indicates the pointer to context. 448 */ 449 void BTSTACK_API ATT_ClientSendDataRegister(attSendDataCallback attSendDataCB, void *context); 450 451 /** 452 * @brief Gatt client deregister the send data callback to att. 453 */ 454 void BTSTACK_API ATT_ClientSendDataDeRegister(); 455 456 /** 457 * @brief Gatt server register the send data callback to att. 458 * 459 * @param1 AttSendDataCB Indicates pointer of attSendDataCallback. 460 * @param2 context Indicates the pointer to context. 461 */ 462 void BTSTACK_API ATT_ServerSendDataRegister(attSendDataCallback AttSendDataCB, void *context); 463 464 /** 465 * @brief Gatt server deregister the send data callback to att. 466 */ 467 void BTSTACK_API ATT_ServerSendDataDeRegister(); 468 469 /** 470 * @brief Send a connect request. 471 * 472 * @param1 transportType Indicates the connect type. 473 * @param2 connParaPtr Indicates the pointer to const connect parameter. 474 * @param3 btAddress Indicates the pointer to const address. 475 * @param4 bredrconnectHandle Indicates the pointer to connecthandle be outputted. 476 */ 477 void BTSTACK_API ATT_ConnectReq( 478 uint8_t transportType, const AttConnect *connParaPtr, const BtAddr *btAddress, const uint16_t *bredrconnectHandle); 479 480 /** 481 * @brief Send a connect response. 482 * 483 * @param1 connectHandle Indicates the connect handle. 484 * @param2 result Indicates the variable of result. 485 * @param3 status Indicates the result of status. 486 * @param4 cfg Indicates the pointer to const connect parameter. 487 */ 488 void BTSTACK_API ATT_ConnectRsp(uint16_t connectHandle, uint16_t result, uint16_t status, const AttConnect *cfg); 489 490 /** 491 * @brief Send a disconnect request. 492 * 493 * @param connectHandle Indicates the connect handle. 494 */ 495 void BTSTACK_API ATT_DisconnectReq(uint16_t connectHandle); 496 497 /** 498 * @brief Send an error response. 499 * 500 * @param1 connectHandle Indicates the connect handle. 501 * @param2 ATTErrorPtr Indicates the pointer to const error response parameter. 502 */ 503 void BTSTACK_API ATT_ErrorResponse(uint16_t connectHandle, const AttError *ATTErrorPtr); 504 505 /** 506 * @brief Send an exchange MTU request . 507 * 508 * @param1 connectHandle Indicates the connect handle. 509 * @param2 clientRxMTU Indicates the client receive MTU size. 510 */ 511 void BTSTACK_API ATT_ExchangeMTURequest(uint16_t connectHandle, uint16_t clientRxMTU); 512 513 /** 514 * @brief Send an exchange MTU response. 515 * 516 * @param1 connectHandle Indicates the connect handle. 517 * @param2 serverRxMTU Indicates the attribute server receive MTU size. 518 */ 519 void BTSTACK_API ATT_ExchangeMTUResponse(uint16_t connectHandle, uint16_t serverRxMTU); 520 521 /** 522 * @brief Send a find Information request. 523 * 524 * @param1 connectHandle Indicates the connect handle. 525 * @param2 startHandle Indicates the first requested handle number. 526 * @param3 endHandle Indicates the last requested handle number. 527 */ 528 void BTSTACK_API ATT_FindInformationRequest(uint16_t connectHandle, uint16_t startHandle, uint16_t endHandle); 529 530 /** 531 * @brief Send a find Information response. 532 * 533 * @param1 connectHandle Indicates the connect handle. 534 * @param2 format Indicates the format of the information data. 535 * @param3 handleUUIDPairs Indicates the pointer to const information data. 536 * @param4 pairNum Indicates the paris number of the Information Data. 537 */ 538 void BTSTACK_API ATT_FindInformationResponse( 539 uint16_t connectHandle, uint8_t format, AttHandleUuid *handleUUIDPairs, uint16_t pairNum); 540 541 /** 542 * @brief Send a find by type value request. 543 * 544 * @param1 connectHandle Indicates the connect handle. 545 * @param2 attFindByTypePtreve Indicates the pointer to const the parameter of AttFindByTypeValueReq. 546 * @param3 attValue Indicates the pointer to attribute value to find. 547 */ 548 void BTSTACK_API ATT_FindByTypeValueRequest( 549 uint16_t connectHandle, const AttFindByTypeValueReq *attFindByTypePtreve, const Buffer *attValue); 550 551 /** 552 * @brief Send a find by type value response. 553 * 554 * @param1 connectHandle Indicates the connect handle. 555 * @param2 handleInfoList Indicates the pointer to const a list of 1 or more Handle Information. 556 * @param3 listNum Indicates the number of handles information list. 557 */ 558 void BTSTACK_API ATT_FindByTypeValueResponse( 559 uint16_t connectHandle, const AttHandleInfo *handleInfoList, uint16_t listNum); 560 561 /** 562 * @brief Send a read by type request. 563 * 564 * @param1 connectHandle Indicates the connect handle. 565 * @param2 startHandle Indicates the first requested handle number. 566 * @param3 endHandle Indicates the last requested handle number. 567 * @param4 uuid Indicates the pointer to const 2 or 16 octet UUID. 568 */ 569 void BTSTACK_API ATT_ReadByTypeRequest( 570 uint16_t connectHandle, uint16_t startHandle, uint16_t endHandle, const BtUuid *uuid); 571 572 /** 573 * @brief Send a read by type response. 574 * 575 * @param1 connectHandle Indicates the connect handle. 576 * @param2 length Indicates the size of each attribute handlevalue pair. 577 * @param3 valueList Indicates the pointer to const a list of attribute data. 578 * @param4 attrValueNum Indicates the value of attribute value number. 579 */ 580 void BTSTACK_API ATT_ReadByTypeResponse( 581 uint16_t connectHandle, uint8_t length, const AttReadByTypeRspDataList *valueList, uint16_t attrValueNum); 582 583 /** 584 * @brief Send a read request. 585 * 586 * @param1 connectHandle Indicates the connect handle. 587 * @param2 attHandle Indicates the handle of the attribute to be read. 588 */ 589 void BTSTACK_API ATT_ReadRequest(uint16_t connectHandle, uint16_t attHandle); 590 591 /** 592 * @brief Send a read response. 593 * 594 * @param1 connectHandle Indicates the connect handle. 595 * @param2 attValue Indicates the pointer to the value of the attribute with the handle given. 596 */ 597 void BTSTACK_API ATT_ReadResponse(uint16_t connectHandle, const Buffer *attValue); 598 599 /** 600 * @brief Send a read blob request. 601 * 602 * @param1 connectHandle Indicates the connect handle. 603 * @param2 attHandle Indicates the handle of the attribute to be read. 604 * @param3 offset Indicates the offset of the first octet to be read. 605 */ 606 void BTSTACK_API ATT_ReadBlobRequest(uint16_t connectHandle, uint16_t attHandle, uint16_t offset); 607 608 /** 609 * @brief Send a read blob response. 610 * 611 * @param1 connectHandle Indicates the connect handle. 612 * @param2 attReadBlobResObj Indicates the pointer to part of the value of the attribute with the handle given. 613 */ 614 void BTSTACK_API ATT_ReadBlobResponse(uint16_t connectHandle, const Buffer *attReadBlobResObj); 615 616 /** 617 * @brief Send a read multiple request. 618 * 619 * @param1 connectHandle Indicates the connect handle. 620 * @param2 handleList Indicates the pointer to a set of two or more attribute handles. 621 */ 622 void BTSTACK_API ATT_ReadMultipleRequest(uint16_t connectHandle, const Buffer *handleList); 623 624 /** 625 * @brief Send a read multiple response. 626 * 627 * @param1 connectHandle Indicates the connect handle. 628 * @param2 valueList Indicates the pointer to a set of two or more values. 629 */ 630 void BTSTACK_API ATT_ReadMultipleResponse(uint16_t connectHandle, const Buffer *valueList); 631 632 /** 633 * @brief Send a read by group type request. 634 * 635 * @param1 connectHandle Indicates the connect handle. 636 * @param2 startHandle Indicates the first requested handle number. 637 * @param3 endHandle Indicates the last requested handle number. 638 * @param4 uuid Indicates the pointer to 2 or 16 octet UUID. 639 */ 640 void BTSTACK_API ATT_ReadByGroupTypeRequest( 641 uint16_t connectHandle, uint16_t startHandle, uint16_t endHandle, const BtUuid *uuid); 642 643 /** 644 * @brief Send a read by group type response. 645 * 646 * @param1 connectHandle Indicates the connect handle. 647 * @param2 length Indicates the size of each attribute data. 648 * @param3 serviceList Indicates the pointer to const a list of attribute data. 649 * @param4 serviceNum Indicates the number of attribute data. 650 */ 651 void BTSTACK_API ATT_ReadByGroupTypeResponse( 652 uint16_t connectHandle, uint8_t length, const AttReadGoupAttributeData *serviceList, uint16_t serviceNum); 653 654 /** 655 * @brief Send a write request. 656 * 657 * @param1 connectHandle Indicates the connect handle. 658 * @param2 attHandle Indicates the handle of the attribute to be written. 659 * @param3 attValue Indicates the pointer to the value to be written to the attribute. 660 */ 661 void BTSTACK_API ATT_WriteRequest(uint16_t connectHandle, uint16_t attHandle, const Buffer *attValue); 662 663 /** 664 * @brief Send a write response. 665 * 666 * @param connectHandle Indicates the connect handle. 667 */ 668 void BTSTACK_API ATT_WriteResponse(uint16_t connectHandle); 669 670 /** 671 * @brief Send a write command. 672 * 673 * @param1 connectHandle Indicates the connect handle. 674 * @param2 attHandle Indicates the handle of the attribute to be set. 675 * @param3 attValue Indicates the pointer to the value of be written to the attribute. 676 */ 677 void BTSTACK_API ATT_WriteCommand(uint16_t connectHandle, uint16_t attHandle, const Buffer *attValue); 678 679 /** 680 * @brief Send a signed write command. 681 * 682 * @param1 connectHandle Indicates the connect handle. 683 * @param2 attHandle Indicates the the handle of the attribute to be set. 684 * @param3 attValue Indicates the pointer to the value to be written to the attribute. 685 */ 686 void BTSTACK_API ATT_SignedWriteCommand(uint16_t connectHandle, uint16_t attHandle, const Buffer *attValue); 687 688 /** 689 * @brief Send a prepare write request. 690 * 691 * @param1 connectHandle Indicates the connect handle. 692 * @param2 attReadBlobObj Indicates the value of the struct AttReadBlobReqPrepareWriteValue. 693 * @param3 attValue Indicates the pointer to the value of the attribute to be written. 694 */ 695 void BTSTACK_API ATT_PrepareWriteRequest( 696 uint16_t connectHandle, AttReadBlobReqPrepareWriteValue attReadBlobObj, const Buffer *attValue); 697 698 /** 699 * @brief Send a prepare write response. 700 * 701 * @param1 connectHandle Indicates the connect handle. 702 * @param2 attReadBlobObj Indicates the value of the struct AttReadBlobReqPrepareWriteValue. 703 * @param3 attValue Indicates the pointer to the value of the attribute to be written. 704 */ 705 void BTSTACK_API ATT_PrepareWriteResponse( 706 uint16_t connectHandle, AttReadBlobReqPrepareWriteValue attReadBlobObj, const Buffer *attValue); 707 708 /** 709 * @brief Send a execute write request. 710 * 711 * @param1 connectHandle Indicates the connect handle. 712 * @param2 flag Indicates the value of flags. 713 */ 714 void BTSTACK_API ATT_ExecuteWriteRequest(uint16_t connectHandle, uint8_t flag); 715 716 /** 717 * @brief Send a execute write response. 718 * 719 * @param connectHandle Indicates the connect handle. 720 */ 721 void BTSTACK_API ATT_ExecuteWriteResponse(uint16_t connectHandle); 722 723 /** 724 * @brief Send a handle value notification. 725 * 726 * @param1 connectHandle Indicates the connect handle. 727 * @param2 attHandle Indicates the handle of the attribute. 728 * @param3 attValue Indicates the pointer to the current value of the attribute. 729 */ 730 void BTSTACK_API ATT_HandleValueNotification(uint16_t connectHandle, uint16_t attHandle, const Buffer *attValue); 731 732 /** 733 * @brief Send a handle value indication. 734 * 735 * @param1 connectHandle Indicates the connect handle. 736 * @param2 attHandle Indicates the handle of the attribute. 737 * @param3 attValue Indicates the pointer to the current value of the attribute. 738 */ 739 void BTSTACK_API ATT_HandleValueIndication(uint16_t connectHandle, uint16_t attHandle, const Buffer *attValue); 740 741 /** 742 * @brief Send a handle value confirmation. 743 * 744 * @param connectHandle Indicates the connect handle. 745 */ 746 void BTSTACK_API ATT_HandleValueConfirmation(uint16_t connectHandle); 747 748 /** 749 * @brief Cancel Le ACL connection 750 * 751 * @return Returns BT_SUCCESS if the operation is successful, otherwise the operation fails. 752 */ 753 int BTSTACK_API ATT_LeConnectCancel(const BtAddr *addr); 754 755 #ifdef __cplusplus 756 } 757 #endif 758 759 #endif // ATT_H 760