1 /* USER CODE BEGIN Header */ 2 /** 3 ****************************************************************************** 4 * @file aci_gatt_nwk.h 5 * @author MCD Application Team 6 * @brief Adaptation layer from GATT native interface to GATT network 7 * processor interface 8 ****************************************************************************** 9 * @attention 10 * 11 * Copyright (c) 2024 STMicroelectronics. 12 * All rights reserved. 13 * 14 * This software is licensed under terms that can be found in the LICENSE file 15 * in the root directory of this software component. 16 * If no LICENSE file comes with this software, it is provided AS-IS. 17 * 18 ****************************************************************************** 19 */ 20 /* USER CODE END Header */ 21 22 #ifndef ACI_GATT_NWK_H 23 #define ACI_GATT_NWK_H 24 25 /****************************************************************************** 26 * Includes 27 *****************************************************************************/ 28 #include "app_conf.h" 29 30 /****************************************************************************** 31 * CONSTANT SYMBOLS 32 *****************************************************************************/ 33 #define ACI_GATT_WR_MAX_NUM_OF_LINK (CFG_BLE_NUM_RADIO_TASKS) 34 35 /** 36 * If this bit is set, then Attribute Modified Event is generated 37 */ 38 #define GATT_SERVER_ATTR_WRITE (0x01U) 39 40 #define GATT_DESCR_ACCESS_PERM_NONE (0x00U) 41 #define GATT_DESCR_ACCESS_PERM_READ (0x01U) 42 #define GATT_DESCR_ACCESS_PERM_WRITE (0x02U) 43 #define GATT_DESCR_ACCESS_PERM_WRITE_NO_RESP (0x04U) 44 #define GATT_DESCR_ACCESS_PERM_SIGNED_WRITE (0x08U) 45 46 #define GATT_AUTHOR_OP_TYPE_READ (0x00U) 47 #define GATT_AUTHOR_OP_TYPE_WRITE (0x10U) 48 #define GATT_AUTHOR_OP_TYPE_WRITE_CMD (0x11U) 49 #define GATT_AUTHOR_OP_TYPE_PREP_WRITE (0x12U) 50 51 #define L2C_CID_ATTRIBUTE_PROTOCOL (4U) 52 53 /****************************************************************************** 54 * TYPES 55 *****************************************************************************/ 56 /** Documentation for C union Service_UUID_t */ 57 typedef union Service_UUID_t_s 58 { 59 /** 16-bit UUID 60 */ 61 uint16_t Service_UUID_16; 62 /** 128-bit UUID 63 */ 64 uint8_t Service_UUID_128[16]; 65 } Service_UUID_t; 66 /** Documentation for C union Char_UUID_t */ 67 typedef union Char_UUID_t_s 68 { 69 /** 16-bit UUID 70 */ 71 uint16_t Char_UUID_16; 72 /** 128-bit UUID 73 */ 74 uint8_t Char_UUID_128[16]; 75 } Char_UUID_t; 76 /** Documentation for C union Char_Desc_Uuid_t */ 77 typedef union Char_Desc_Uuid_t_s 78 { 79 /** 16-bit UUID 80 */ 81 uint16_t Char_UUID_16; 82 /** 128-bit UUID 83 */ 84 uint8_t Char_UUID_128[16]; 85 } Char_Desc_Uuid_t; 86 /****************************************************************************** 87 * FUNCTION PROTOTYPES 88 *****************************************************************************/ 89 90 /** 91 * @brief Initialize ACI GATT nwk component 92 * 93 * @param pwrq_size[in] The size of the buffer assigned to PWRQ module. 94 * 95 * @return void 96 * 97 */ 98 void ACI_gatt_nwk_init(uint16_t pwrq_size); 99 100 /** 101 * @brief Reset ACI GATT nwk component, erasing any allocated attributes and values. 102 * 103 * @return void 104 * 105 */ 106 void ACI_gatt_nwk_reset(void); 107 108 /** 109 * @brief Procedure Complete Event handler. This function is used to release the 110 * locket value buffer. 111 * 112 * @param Connection_Handle[in] The connection handle for which the Procedure 113 * Complete event is issued. 114 * @param CID[in] The channel ID. 115 * @param Error_Code[in] The returned error coded. 116 * 117 * @return void 118 * 119 */ 120 void ACI_gatt_nwk_proc_complete(uint16_t Connection_Handle, uint16_t CID, uint8_t Error_Code); 121 122 /** 123 * @brief Disconnection Event handler. This function is used to release the 124 * allocated resources for the given connection handle. 125 * 126 * @param Connection_Handle[in] The connection handle 127 * @param CID[in] The channel ID. 128 * 129 * @return void 130 * 131 */ 132 void ACI_gatt_nwk_disconnection(uint16_t Connection_Handle, uint16_t CID); 133 134 /** 135 * @brief Add a service to GATT Server. When a service is created in the server, the host needs to 136 * reserve the handle ranges for this service using Max_Attribute_Records parameter. This 137 * parameter specifies the maximum number of attribute records that can be added to this 138 * service (including the service attribute, include attribute, characteristic attribute, 139 * characteristic value attribute and characteristic descriptor attribute). Handle of the created 140 * service is returned in command complete event. Service declaration is taken from the service pool. 141 * The attributes for characteristics and descriptors are allocated from the attribute pool. 142 * @param Service_UUID_Type UUID type. 143 * Values: 144 * - 0x01: 16-bit UUID 145 * - 0x02: 128-bit UUID 146 * @param Service_UUID See @ref Service_UUID_t 147 * @param Service_Type Service type. 148 * Values: 149 * - 0x01: Primary Service 150 * - 0x02: Secondary Service 151 * @param Max_Attribute_Records Maximum number of attribute records that can be added to this service 152 * @param[out] Service_Handle Handle of the Service. 153 * When this service is added, a handle is allocated by the server for this service. 154 * Server also allocates a range of handles for this service from serviceHandle to <serviceHandle + max_attr_records - 1> 155 * @retval Value indicating success or error code. 156 */ 157 tBleStatus aci_gatt_srv_add_service_nwk(uint8_t Service_UUID_Type, 158 Service_UUID_t *Service_UUID, 159 uint8_t Service_Type, 160 uint8_t Max_Attribute_Records, 161 uint16_t *Service_Handle); 162 /** 163 * @brief Include a service given by Included_Handle to another 164 * service given by Service_Handle. Attribute server creates an INCLUDE definition 165 * attribute and return the handle of this attribute in Included_handle. 166 * @param Service_Handle Handle of the Service to which another service has to be included. 167 * Values: 168 * - 0x0001 ... 0xFFFF 169 * @param Included_Service_Handle Attribute Handle of the Service which has to be included in service 170 * Values: 171 * - 0x0001 ... 0xFFFF 172 * @param[out] Include_Handle Handle of the include declaration 173 * @retval Value indicating success or error code. 174 */ 175 tBleStatus aci_gatt_srv_include_service_nwk(uint16_t Service_Handle, 176 uint16_t Included_Service_Handle, 177 uint16_t *Include_Handle); 178 /** 179 * @brief Add a characteristic to a service. 180 * @param Service_Handle Handle of the Service to which the characteristic will be added 181 * Values: 182 * - 0x0001 ... 0xFFFF 183 * @param Char_UUID_Type UUID type. 184 * Values: 185 * - 0x01: 16-bit UUID 186 * - 0x02: 128-bit UUID 187 * @param Char_UUID See @ref Char_UUID_t 188 * @param Char_Value_Length Maximum length of the characteristic value. 189 * Values: 190 * - 0 ... 512 191 * @param Char_Properties Characteristic Properties (Volume 3, Part G, section 3.3.1.1 of Bluetooth Specification 4.1) 192 * Flags: 193 * - 0x00: CHAR_PROP_NONE 194 * - 0x01: CHAR_PROP_BROADCAST (Broadcast) 195 * - 0x02: CHAR_PROP_READ (Read) 196 * - 0x04: CHAR_PROP_WRITE_WITHOUT_RESP (Write w/o resp) 197 * - 0x08: CHAR_PROP_WRITE (Write) 198 * - 0x10: CHAR_PROP_NOTIFY (Notify) 199 * - 0x20: CHAR_PROP_INDICATE (Indicate) 200 * - 0x40: CHAR_PROP_SIGNED_WRITE (Authenticated Signed Writes) 201 * - 0x80: CHAR_PROP_EXT (Extended Properties) 202 * @param Security_Permissions Security permission flags. 203 * Flags: 204 * - 0x00: None 205 * - 0x01: AUTHEN_READ (Need authentication to read) 206 * - 0x04: ENCRY_READ (Need encryption to read) 207 * - 0x08: AUTHEN_WRITE (need authentication to write) 208 * - 0x20: ENCRY_WRITE (need encryption to write) 209 * @param GATT_Evt_Mask GATT event mask. 210 * Flags: 211 * - 0x00: GATT_DONT_NOTIFY_EVENTS 212 * - 0x01: GATT_NOTIFY_ATTRIBUTE_WRITE 213 * - 0x02: GATT_NOTIFY_WRITE_REQ_AND_WAIT_FOR_APPL_RESP 214 * - 0x04: GATT_NOTIFY_READ_REQ_AND_WAIT_FOR_APPL_RESP 215 * @param Enc_Key_Size Minimum encryption key size required to read the characteristic. 216 * Values: 217 * - 0x07 ... 0x10 218 * @param Is_Variable Specify if the characteristic value has a fixed length or 219 * a variable length. 220 * Values: 221 * - 0x00: Fixed length 222 * - 0x01: Variable length 223 * @param[out] Char_Handle Handle of the Characteristic that has been added. 224 * It is the handle of the characteristic declaration. 225 * The attribute that holds the characteristic value is allocated at the next handle, 226 * followed by the Client Characteristic Configuration descriptor if the characteristic 227 * has CHAR_PROP_NOTIFY or CHAR_PROP_INDICATE properties. 228 * @retval Value indicating success or error code. 229 */ 230 tBleStatus aci_gatt_srv_add_char_nwk(uint16_t Service_Handle, 231 uint8_t Char_UUID_Type, 232 Char_UUID_t *Char_UUID, 233 uint16_t Char_Value_Length, 234 uint8_t Char_Properties, 235 uint8_t Security_Permissions, 236 uint8_t GATT_Evt_Mask, 237 uint8_t Enc_Key_Size, 238 uint8_t Is_Variable, 239 uint16_t *Char_Handle); 240 241 /** 242 * @brief Add a characteristic descriptor to a characteristic. 243 * @param Char_Handle Handle of the characteristic to which description has to be added 244 * Values: 245 * - 0x0001 ... 0xFFFF 246 * @param Char_Desc_Uuid_Type UUID type. 247 * Values: 248 * - 0x01: 16-bit UUID 249 * - 0x02: 128-bit UUID 250 * @param Char_Desc_Uuid See @ref Char_Desc_Uuid_t 251 * @param Char_Desc_Value_Max_Len The maximum length of the descriptor value 252 * Values: 253 * - 0 ... 512 254 * @param Char_Desc_Value_Length Current Length of the characteristic descriptor value 255 * Values: 256 * - 0 ... 512 257 * @param Char_Desc_Value Value of the characteristic description 258 * @param Security_Permissions Security permission flags. 259 * Flags: 260 * - 0x00: None 261 * - 0x01: AUTHEN_READ (Need authentication to read) 262 * - 0x04: ENCRY_READ (Need encryption to read) 263 * - 0x08: AUTHEN_WRITE (need authentication to write) 264 * - 0x20: ENCRY_WRITE (need encryption to write) 265 * @param Access_Permissions Access permission 266 * Flags: 267 * - 0x00: None 268 * - 0x01: READ 269 * - 0x02: WRITE 270 * - 0x04: WRITE_WO_RESP 271 * - 0x08: SIGNED_WRITE 272 * @param GATT_Evt_Mask GATT event mask. 273 * Flags: 274 * - 0x00: GATT_DONT_NOTIFY_EVENTS 275 * - 0x01: GATT_NOTIFY_ATTRIBUTE_WRITE 276 * - 0x02: GATT_NOTIFY_WRITE_REQ_AND_WAIT_FOR_APPL_RESP 277 * - 0x04: GATT_NOTIFY_READ_REQ_AND_WAIT_FOR_APPL_RESP 278 * @param Enc_Key_Size Minimum encryption key size required to read the characteristic. 279 * Values: 280 * - 0x07 ... 0x10 281 * @param Is_Variable Specify if the characteristic value has a fixed length or 282 * a variable length. 283 * Values: 284 * - 0x00: Fixed length 285 * - 0x01: Variable length 286 * @param[out] Char_Desc_Handle Handle of the characteristic descriptor 287 * Values: 288 * - 0x0001 ... 0xFFFF 289 * @retval Value indicating success or error code. 290 */ 291 tBleStatus aci_gatt_srv_add_char_desc_nwk(uint16_t Char_Handle, 292 uint8_t Char_Desc_Uuid_Type, 293 Char_Desc_Uuid_t *Char_Desc_Uuid, 294 uint16_t Char_Desc_Value_Max_Len, 295 uint16_t Char_Desc_Value_Length, 296 uint8_t Char_Desc_Value[], 297 uint8_t Security_Permissions, 298 uint8_t Access_Permissions, 299 uint8_t GATT_Evt_Mask, 300 uint8_t Enc_Key_Size, 301 uint8_t Is_Variable, 302 uint16_t *Char_Desc_Handle); 303 304 /** 305 * @brief Update an attribute value. 306 * 307 * @param Attr_Handle Handle of the attribute 308 * Values: 309 * - 0x0001 ... 0xFFFF 310 * @param Val_Offset The offset from which the attribute value has to be updated. 311 * If this is set to 0 and the attribute value is of variable length, then the length of the attribute will be set to the Char_Value_Length. 312 * If the Val_Offset is set to a value greater than 0, then the length of the attribute will be set to the maximum length as 313 * specified for the attribute while adding the characteristic. 314 * Values: 315 * - 0 ... 511 316 * @param Value_Length Length of the attribute value in octets 317 * @param Value Attribute value 318 * @retval Value indicating success or error code. 319 */ 320 tBleStatus aci_gatt_srv_write_handle_value_nwk(uint16_t Attr_Handle, 321 uint16_t Val_Offset, 322 uint16_t Value_Length, 323 uint8_t Value[]); 324 /** 325 * @brief Delete the specified characteristic from the service. 326 * @param Char_Handle Handle of the characteristic which has to be deleted 327 * Values: 328 * - 0x0001 ... 0xFFFF 329 * @retval Value indicating success or error code. 330 */ 331 tBleStatus aci_gatt_srv_rm_char_nwk(uint16_t Char_Handle); 332 /** 333 * @brief Delete the specified service from the GATT server database. 334 * @param Serv_Handle Handle of the service to be deleted 335 * Values: 336 * - 0x0001 ... 0xFFFF 337 * @retval Value indicating success or error code. 338 */ 339 tBleStatus aci_gatt_srv_rm_service_nwk(uint16_t Serv_Handle); 340 /** 341 * @brief Delete the Include definition from the service. 342 * @param Include_Handle Handle of the included service which has to be deleted 343 * Values: 344 * - 0x0001 ... 0xFFFF 345 * @retval Value indicating success or error code. 346 */ 347 tBleStatus aci_gatt_srv_rm_include_service_nwk(uint16_t Include_Handle); 348 349 /** 350 * @brief This command sets the security permission for the attribute handle specified. Currently the 351 * setting of security permission is allowed only for client configuration descriptor. 352 * @param Attr_Handle Handle of the attribute whose security permission has to be modified 353 * Values: 354 * - 0x0001 ... 0xFFFF 355 * @param Security_Permissions Security permission flags. 356 * Flags: 357 * - 0x00: None 358 * - 0x01: AUTHEN_READ (Need authentication to read) 359 * - 0x04: ENCRY_READ (Need encryption to read) 360 * - 0x08: AUTHEN_WRITE (need authentication to write) 361 * - 0x20: ENCRY_WRITE (need encryption to write) 362 * @retval Value indicating success or error code. 363 */ 364 tBleStatus aci_gatt_srv_set_security_permission_nwk(uint16_t Attr_Handle, 365 uint8_t Security_Permissions); 366 /** 367 * @brief Reads the value of the attribute handle specified from the local GATT database. 368 * @param Attr_Handle Handle of the attribute to read 369 * Values: 370 * - 0x0001 ... 0xFFFF 371 * @param Offset Offset from which the value needs to be read 372 * Values: 373 * - 0 ... 511 374 * @param Value_Length_Requested Maximum number of octets to be returned as attribute value 375 * Values: 376 * - 0 ... 512 377 * @param[out] Length Length of the attribute value 378 * @param[out] Value_Length Length in octets of the Value parameter 379 * @param[out] Value Attribute value 380 * @retval Value indicating success or error code. 381 */ 382 tBleStatus aci_gatt_srv_read_handle_value_nwk(uint16_t Attr_Handle, 383 uint16_t Offset, 384 uint16_t Value_Length_Requested, 385 uint16_t *Length, 386 uint16_t *Value_Length, 387 uint8_t Value[]); 388 389 /** 390 * @brief Reads the value for that kind of attributes that have different values 391 * for each connection, e.g. the Client Characteristic Configuration Descriptors. 392 * @param Connection_Handle Connection handle for which the attribute value will be read. 393 * @param Attr_Handle Handle of the attribute to read 394 * Values: 395 * - 0x0001 ... 0xFFFF 396 * @param[out] Value_Length Length in octets of the Value parameter. 397 * @param[out] Value Where value is stored. The length of the Value buffer should 398 * be at least equal to 16 octets. 399 * @retval Value indicating success or error code. 400 */ 401 tBleStatus aci_gatt_srv_read_multiple_instance_handle_value_nwk(uint16_t Connection_Handle, 402 uint16_t Attr_Handle, 403 uint16_t *Value_Length, 404 uint8_t Value[]); 405 /** 406 * @brief This command sets the access permission for the attribute handle specified. 407 * @param Attr_Handle Handle of the attribute whose security permission has to be modified 408 * Values: 409 * - 0x0001 ... 0xFFFF 410 * @param Access_Permissions Access permission 411 * Values: 412 * - 0x00: None 413 * - 0x01: READ 414 * - 0x02: WRITE 415 * - 0x04: WRITE_NO_RESP 416 * - 0x08: SIGNED_WRITE 417 * @retval Value indicating success or error code. 418 */ 419 tBleStatus aci_gatt_srv_set_access_permission_nwk(uint16_t Attr_Handle, 420 uint8_t Access_Permissions); 421 422 /** 423 * @brief 424 * @param Conn_Handle Connection handle to be used to identify the connection with the peer device. 425 * Values: 426 * - 0x0000 ... 0x0EFF 427 * @param Item_Index 428 * @param[out] Attr_Handle 429 * @param[out] Value_Offset 430 * @param[out] Value_Length Length in octets of the Value parameter 431 * @param[out] Value Attribute value 432 * @retval Value indicating success or error code. 433 */ 434 tBleStatus aci_gatt_srv_read_prepare_queue_nwk(uint16_t Conn_Handle, 435 uint8_t Item_Index, 436 uint16_t *Attr_Handle, 437 uint16_t *Value_Offset, 438 uint16_t *Value_Length, 439 uint8_t Value[]); 440 /** 441 * @brief Start the procedure to write an attribute value. 442 * When the procedure is completed, a @ref aci_gatt_clt_proc_complete_event event is generated. 443 * During the procedure, @ref aci_att_clt_prepare_write_resp_event and @ref aci_att_clt_exec_write_resp_event 444 * events are raised. 445 * @param Connection_Handle Connection handle that identifies the connection. 446 * Values: 447 * - 0x0000 ... 0x0EFF 448 * @param Attr_Handle Handle of the attribute to be written 449 * Values: 450 * - 0x0001 ... 0xFFFF 451 * @param Attribute_Val_Length Length of the value to be written 452 * @param Attribute_Val Value to be written 453 * @retval Value indicating success or error code. 454 */ 455 tBleStatus aci_gatt_clt_write_nwk(uint16_t Connection_Handle, 456 uint16_t CID, 457 uint16_t Attr_Handle, 458 uint16_t Attribute_Val_Length, 459 uint8_t Attribute_Val[]); 460 /** 461 * @brief Start the procedure to write a long attribute value. 462 * When the procedure is completed, a @ref aci_gatt_clt_proc_complete_event event is generated. 463 * During the procedure, @ref aci_att_clt_prepare_write_resp_event and @ref aci_att_clt_exec_write_resp_event 464 * events are raised. 465 * @param Connection_Handle Connection handle that identifies the connection. 466 * Values: 467 * - 0x0000 ... 0x0EFF 468 * @param Attr_Handle Handle of the attribute to be written 469 * Values: 470 * - 0x0001 ... 0xFFFF 471 * @param Val_Offset Offset at which the attribute has to be written 472 * Values: 473 * - 0 ... 511 474 * @param Attribute_Val_Length Length of the value to be written 475 * @param Attribute_Val Value to be written 476 * @retval Value indicating success or error code. 477 */ 478 tBleStatus aci_gatt_clt_write_long_nwk(uint16_t Connection_Handle, 479 uint16_t CID, 480 uint16_t Attr_Handle, 481 uint16_t Val_Offset, 482 uint16_t Attribute_Val_Length, 483 uint8_t Attribute_Val[]); 484 /** 485 * @brief Start the procedure to write a characteristic reliably. 486 * When the procedure is completed, a @ref aci_gatt_clt_proc_complete_event event is generated. 487 * During the procedure, @ref aci_att_clt_prepare_write_resp_event and @ref aci_att_clt_exec_write_resp_event 488 * events are raised. 489 * @param Connection_Handle Connection handle that identifies the connection. 490 * Values: 491 * - 0x0000 ... 0x0EFF 492 * @param Attr_Handle Handle of the attribute to be written 493 * Values: 494 * - 0x0001 ... 0xFFFF 495 * @param Val_Offset Offset at which the attribute has to be written 496 * Values: 497 * - 0 ... 511 498 * @param Attribute_Val_Length Length of the value to be written 499 * @param Attribute_Val Value to be written 500 * @retval Value indicating success or error code. 501 */ 502 tBleStatus aci_gatt_clt_write_char_reliable_nwk(uint16_t Connection_Handle, 503 uint16_t CID, 504 uint16_t Attr_Handle, 505 uint16_t Val_Offset, 506 uint16_t Attribute_Val_Length, 507 uint8_t Attribute_Val[]); 508 509 /** 510 * @brief 511 * @param Conn_Handle Connection handle to be used to identify the connection with the peer device. 512 * Values: 513 * - 0x0000 ... 0x0EFF 514 * @param Attr_Handle Offset from which the value needs to be read or write 515 * Values: 516 * - 0 ... 511 517 * @param Operation_Type 518 * Values: 519 * - 0x00: Read 520 * - 0x10: Write Request 521 * - 0x11: Write Command or Signed Write Command 522 * - 0x12: Prepare Write Request 523 * @param Error_Code Offset from which the value needs to be read or write 524 * Values: 525 * - 0 ... 511 526 * @param Data_Offset Offset from which the value needs to be read or write 527 * Values: 528 * - 0 ... 511 529 * @param Data_Length Length of Data field 530 * @param Data The data that the client has requested to write 531 * @retval Value indicating success or error code. 532 */ 533 tBleStatus aci_gatt_srv_authorize_resp_nwk(uint16_t Conn_Handle, 534 uint16_t CID, 535 uint16_t Attr_Handle, 536 uint8_t Operation_Type, 537 uint8_t Error_Code, 538 uint16_t Data_Offset, 539 uint16_t Data_Length, 540 uint8_t Data[]); 541 542 /** 543 * @brief This event is generated if authorization is needed to access the attribute value. 544 * @ref aci_gatt_srv_authorize_resp_nwk command must be sent in response to this event. 545 * @param Conn_Handle Connection handle to be used to identify the connection with the peer device. 546 * Values: 547 * - 0x0000 ... 0x0EFF 548 * @param Attr_Handle 549 * @param Operation_Type 550 * Values: 551 * - 0x00: Read 552 * - 0x10: Write Request 553 * - 0x11: Write Command or Signed Write Command 554 * - 0x12: Prepare Write Request 555 * @param Attr_Val_Offset Offset from which the value needs to be read or write 556 * Values: 557 * - 0 ... 511 558 * @param Data_Length Length of Data field 559 * @param Data The data that the client has requested to write 560 * @retval None 561 */ 562 void aci_gatt_srv_authorize_nwk_event(uint16_t Conn_Handle, 563 uint16_t CID, 564 uint16_t Attr_Handle, 565 uint8_t Operation_Type, 566 uint16_t Attr_Val_Offset, 567 uint8_t Data_Length, 568 uint8_t Data[]); 569 570 /** 571 * @brief Response to aci_att_srv_exec_write_req_event. 572 * @param Conn_Handle Connection handle that identifies the connection. 573 * Values: 574 * - 0x0000 ... 0x0EFF 575 * @param Exec If 1, allow execution of queued writes. If 0 flush all queued 576 * writes for the given connection handle. 577 * Values: 578 * - 0x00: FLUSH 579 * - 0x01: EXECUTE 580 * @retval Value indicating success or error code. 581 */ 582 tBleStatus aci_gatt_srv_exec_write_resp_nwk(uint16_t Conn_Handle, 583 uint16_t CID, 584 uint8_t Exec); 585 586 #endif 587