1. Enhanced ATT feature
New Enhanced Attribute Protocol (EATT) capabilities and benefits:
• EATT modifies the sequential transaction model, making concurrent ATT
transactions possible when conducted over distinct enhanced ATT bearers.
• EATT uses the L2CAP Enhanced Connection-Oriented Channels mode. This
L2CAP mode provides flow control so that EATT can be regarded as reliable.
• MTU values at the ATT layer and L2CAP layer have been made independently
configurable, and this may reduce latency experienced by some applications that
share the BLE stack with other applications.
This is a BLE 5.2 standard feature: it is implemented for STM32WB and STM32WBA.
1.1. how to implement on STM32WB
1.2. how to implement on STM32WBA
• Issue: the Enhanced ATT feature “can provide an improved user experience on devices where there are multiple applications using the BLE stack”. • Solution: we have introduced a new static GATT mode: • BLE_OPTIONS_ENHANCED_ATT This mode along with new commands and events implements the Enhanced ATT feature (see next slides). • Implemented: in tag 111 only for “full extended” stack (included as “enabled” in WB cube release 1.15, and as “certified” in release 1.16)
2. STM32WBA data throughput client example description
2.1. Project directory
The BLE_DataThroughput_Client application is available by downloading STM32CubeWBA MCU Package[1]
Refer to How to Build a BLE Project wiki page for project directory information.
2.2. Project description
2.2.1. Structure
Software project structure with the most important parts:
Data throughput client project structure |
---|
WARNING: Do not modify the files in Middlewares folder |
2.2.2. Application initialization
The different steps of the application initialization are described below:
Data throughput client project initialization |
---|
2.2.3. GAP and GATT initialization and interaction
Data throughput client software module interaction |
---|
and The Bluetooth LE Data Throughput Client application initialization is done within app_ble.c
- Start the Bluetooth® Low Energy stack:
- Initialize the device as central.
- Configure and start scanning.
- Call the services controller initialization SVCCTL_Init() - svc_ctl.c
- Manage the GAP event - SVCCTL_App_Notification()
- EVT_LE_CONN_COMPLETE - provides information of the connection interval, slave latency, supervision timeout
- EVT_LE_CONN_UPDATE_COMPLETE - provides the new information of the connection
- EVT_DISCONN_COMPLETE - informs the application about the link disconnection and the reason
- EVT_ENCRYPT_CHANGE - informs the application weather the link is encrypted
- Connecting to the device with MANUFACTURER SPECIFIC DATA equals to CFG_DEV_ID_DT_SERVER
The Services management is done by the service controller, svc_ctl.c
- Initialize the number of registered handler - SVCCTL_SvcInit()
- Manage events - SVCCTL_UserEvtRx()- from the Bluetooth® Low Energy Host Stack and redirect them to the gap event handler - SVCCTL_App_Notification
The application level of Data Throughput Client is done with gatt_client_app.c:
- Register Data Throughput Client Event Handle to Service Controller - SVCCTL_RegisterCltHandler(Event_Handler)
- Initialization of the context of the application
- Discovers service: GATT_CLIENT_APP_Procedure_Gatt(PROC_GATT_DISC_ALL_PRIMARY_SERVICES)
- Discovers characteristics: GATT_CLIENT_APP_Procedure_Gatt(PROC_GATT_DISC_ALL_CHARS)
- Discovers client descriptor characteristics: GATT_CLIENT_APP_Procedure_Gatt(PROC_GATT_DISC_ALL_DESCS)
- Enables notifications: GATT_CLIENT_APP_Procedure_Gatt(PROC_GATT_ENABLE_ALL_NOTIFICATIONS)
- Manage the GATT event from Bluetooth® Low Energy Stack - Event_Handler()
- ACI_GATT_ATTRIBUTE_MODIFIED_VSEVT_CODE
- Reception of an attribute modification - DT_SERV_TX Value : Notification of data sent by the server
- Reception of an attribute modification - DT_SERV_THROUGH Value : Throughput value calculated corresponding of DT_SERV_RX_VALUE sent back to the client
- ACI_GATT_ATTRIBUTE_MODIFIED_VSEVT_CODE
2.3. How to use
Install the Bluetooth®LE Data Throughput Client application on one STM32WBA platform.
Install the Bluetooth®LE Data Throughput Server application on other STM32WBA platform.
- Pressing B1 while not connected scans and connects to the data throughput server device, enables all notifications.
- Pressing B1 while connected allows to start/stop sending data through write w/o response
The Bluetooth® LE Data Throughput Client application supports the pairing procedure.
- Pressing B2 while not connected allows to clear the security database.
- Pressing B2 while connected allows to request pairing.
With the WBA5x.Nucleo board, it is also possible to change RF PHY modulation
- Pressing B3 while connected allows to switch between 2 Mbits and 1 Mbits PHY
2.4. UART debug trace
Data Throughput Client - Initialization phase | Push B1 then Connected Phase |
---|---|
==>> Start Ble_Hci_Gap_Gatt_Init function Success: hci_reset command Success: aci_hal_write_config_data command - CONFIG_DATA_PUBADDR_OFFSET Public Bluetooth Address: 00:80:e1:2a:7e:6e Success: aci_hal_write_config_data command - CONFIG_DATA_IR_OFFSET Success: aci_hal_write_config_data command - CONFIG_DATA_ER_OFFSET Success: aci_hal_set_tx_power_level command Success: aci_gatt_init command Success: aci_gap_init command Success: aci_gatt_update_char_value - Appearance Success: aci_gap_set_io_capability command Success: aci_gap_set_authentication_requirement command Success: aci_gap_configure_whitelist command ==>> End Ble_Hci_Gap_Gatt_Init function -- DT CLIENT INITIALIZED |
** START GENERAL DISCOVERY (SCAN) ** --- ST MANUFACTURER data BlueSTv2 -- DT server not detected --- ST MANUFACTURER data BlueSTv2 -- DT server detected, db addr 0x00:80:E1:2A:7E:9D >>== ACI_GAP_PROC_COMPLETE_VSEVT_CODE -- GAP_GENERAL_DISCOVERY_PROC completed Create connection to P2Pserver index 0 wait for event HCI_LE_CONNECTION_COMPLETE_SUBEVT_CODE >>== ACI_GAP_PROC_COMPLETE_VSEVT_CODE >>== HCI_LE_CONNECTION_COMPLETE_SUBEVT_CODE - Connection handle: 0x0001 - Connection established with @:00:80:e1:2a:7e:9d - Connection Interval: 7.50 ms - Connection latency: 0 - Supervision Timeout: 5000 ms GATT services discovery MTU exchanged size = 255 Success: set data length command ACI_ATT_READ_BY_GROUP_TYPE_RESP_VSEVT_CODE - ConnHdl=0x0001 1/2 short UUID=0x1801, handle [0x0001 - 0x0004], GENERIC_ATTRIBUTE_SERVICE_UUID found 2/2 short UUID=0x1800, handle [0x0005 - 0x000B], GAP_SERVICE_UUID found ACI_ATT_READ_BY_GROUP_TYPE_RESP_VSEVT_CODE - ConnHdl=0x0001 1/1 short UUID=0xFE80, handle [0x000C - 0x0014], GENERIC_ATTRIBUTE_SERVICE_UUID found PROC_GATT_DISC_ALL_PRIMARY_SERVICES services discovered successfully DISCOVER_ALL_CHARS ConnHdl=0x0001 ALLServiceHandle[0x0001 - 0x0014] ACI_ATT_READ_BY_TYPE_RESP_VSEVT_CODE - ConnHdl=0x0001 ConnHdl=0x0001, number of value pair = 4 1/4 short UUID=0x2A05, Properties=0x0020, CharHandle [0x0002 - 0x0003], GATT SERVICE_CHANGED_CHARACTERISTIC_UUID charac found 2/4 short UUID=0x2A00, Properties=0x000A, CharHandle [0x0006 - 0x0007], GAP DEVICE_NAME charac found 3/4 short UUID=0x2A01, Properties=0x0002, CharHandle [0x0008 - 0x0009], GAP APPEARANCE charac found 4/4 short UUID=0x2A04, Properties=0x0002, CharHandle [0x000A - 0x000B] ACI_ATT_READ_BY_TYPE_RESP_VSEVT_CODE - ConnHdl=0x0001 ConnHdl=0x0001, number of value pair = 3 1/3 short UUID=0xFE81, Properties=0x0010, CharHandle [0x000D - 0x000E], GATT TX_CHARACTERISTIC_UUID charac found 2/3 short UUID=0xFE82, Properties=0x0006, CharHandle [0x0010 - 0x0011], GATT RX_CHARACTERISTIC_UUID charac found 3/3 short UUID=0xFE83, Properties=0x0010, CharHandle [0x0012 - 0x0013], GATT THROUGHPUT_CHARACTERISTIC_UUID charac found All characteristics discovered successfully DISCOVER_ALL_CHAR_DESCS [0x0001 - 0x0014] ACI_ATT_FIND_INFO_RESP_VSEVT_CODE - ConnHdl=0x0001 reset - UUID & handle - CHARACTERISTIC_UUID=0x2803 CharStartHandle=0x0002 UUID=0x2A05, handle=0x0003, found GATT SERVICE_CHANGED_CHARACTERISTIC_UUID Descriptor UUID=0x2902, handle=0x0002-0x0003-0x0004, Service Changed found PRIMARY_SERVICE_UUID=0x2800 handle=0x0005 reset - UUID & handle - CHARACTERISTIC_UUID=0x2803 CharStartHandle=0x0006 UUID=0x2A00, handle=0x0007, found GAP DEVICE_NAME_UUID reset - UUID & handle - CHARACTERISTIC_UUID=0x2803 CharStartHandle=0x0008 UUID=0x2A01, handle=0x0009, found GAP APPEARANCE_UUID reset - UUID & handle - CHARACTERISTIC_UUID=0x2803 CharStartHandle=0x000A UUID=0x2A04, handle=0x000B PRIMARY_SERVICE_UUID=0x2800 handle=0x000C reset - UUID & handle - CHARACTERISTIC_UUID=0x2803 CharStartHandle=0x000D ACI_ATT_FIND_INFO_RESP_VSEVT_CODE - ConnHdl=0x0001 UUID=0xFE81, handle=0x000E ACI_ATT_FIND_INFO_RESP_VSEVT_CODE - ConnHdl=0x0001 Descriptor UUID=0x2902, handle=0x000D-0x000E-0x000F, DTTX Client descriptor found reset - UUID & handle - CHARACTERISTIC_UUID=0x2803 CharStartHandle=0x0010 ACI_ATT_FIND_INFO_RESP_VSEVT_CODE - ConnHdl=0x0001 UUID=0xFE82, handle=0x0011 ACI_ATT_FIND_INFO_RESP_VSEVT_CODE - ConnHdl=0x0001 reset - UUID & handle - CHARACTERISTIC_UUID=0x2803 CharStartHandle=0x0012 ACI_ATT_FIND_INFO_RESP_VSEVT_CODE - ConnHdl=0x0001 UUID=0xFE83, handle=0x0013 ACI_ATT_FIND_INFO_RESP_VSEVT_CODE - ConnHdl=0x0001 Descriptor UUID=0x2902, handle=0x0012-0x0013-0x0014, DTThroughput Client descriptor found All characteristic descriptors discovered successfully ServiceChangedCharDescHdl =0x0004 DTTXDescHdl =0x000F DTThroughputDescHdl =0x0014 All notifications enabled successfully ** CONNECTION UPDATE ** >>== HCI_LE_CONNECTION_UPDATE_COMPLETE_SUBEVT_CODE - Connection Interval: 50.00 ms - Connection latency: 0 - Supervision Timeout: 10000 ms |
Data Throughput Sensor - push B1 Notifies data | Data Throughput Client - Receives data |
Success: aci_gatt_update_char_value THROUGH_CHAR command Success: aci_gatt_update_char_value TX_CHAR command Success: aci_gatt_update_char_value TX_CHAR command Success: aci_gatt_update_char_value TX_CHAR command Success: aci_gatt_update_char_value TX_CHAR command Success: aci_gatt_update_char_value TX_CHAR command Success: aci_gatt_update_char_value TX_CHAR command Success: aci_gatt_update_char_value TX_CHAR command Success: aci_gatt_update_char_value TX_CHAR command Success: aci_gatt_update_char_value TX_CHAR command Success: aci_gatt_update_char_value TX_CHAR command Success: aci_gatt_update_char_value TX_CHAR command Success: aci_gatt_update_char_value TX_CHAR command Success: aci_gatt_update_char_value TX_CHAR command Success: aci_gatt_update_char_value TX_CHAR command Success: aci_gatt_update_char_value TX_CHAR command Success: aci_gatt_update_char_value TX_CHAR command Success: aci_gatt_update_char_value TX_CHAR command Success: aci_gatt_update_char_value TX_CHAR command Success: aci_gatt_update_char_value TX_CHAR command Success: aci_gatt_update_char_value TX_CHAR command Success: aci_gatt_update_char_value TX_CHAR command Success: aci_gatt_update_char_value TX_CHAR command Success: aci_gatt_update_char_value TX_CHAR command Success: aci_gatt_update_char_value TX_CHAR command |
DataThroughput = 33840 bytes/s lost = 256 ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E ACI_GATT_NOTIFICATION_VSEVT_CODE - ConnHdl=0x0001, Attribute_Handle=0x000E DataThroughput = 33840 bytes/s lost = 0 |