1. Peer to Peer Router profile
The Peer to Peer Router application is intended to demonstrate multi capabilities of the STM32WBA Bluetooth® LE solution. It acts as:
- GAP Central & GATT Server (Router Service) device to be connected and controlled by Smartphone
- GAP Peripheral & GATT Client device to control up to seven end devices (P2P Server)
The Router service is a Generic Attribute Profile (GATT) based low-energy profile defined by STMicroelectronics with proprietary UUIDs(128 bits) including three characteristics
This wiki page is the description of the Peer to Peer Router project provided within the STM32CubeWBA MCU Package[1]
Overall application diagram |
---|
The table below describes the structure of Router service:
Bluetooth® LE Router Service specification | |||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Router service is composed of three characteristics:
- Write forward characteristic :
- to be used by the smartphone or web bluetooth application to control one of the end device through the P2P router device.
Router service - Write forward characteristic | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
- Notify forward characteristic :
- to be used by the P2P Router application to relay notification from end devices (button pushed) in order to inform smartphone or web bluetooth application
Router service - Notify forward characteristic | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
- Device info characteristic:
- notifies end device information (BD address, Name, ..) to smartphone or web bluetooth application
Router Service - Notify forward characteristic | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Example of flow diagram between STM32WBAs & ST BLE Toolbox smartphone application. |
---|
1.1. Advertising data
At start up, P2P Router application starts advertising with an interval of ??ms. Data advertised are composed of:
- An advertising element containing device name.
- Another advertising element containing manufacturer data encoded following STMicroelectronics BlueST v2 as described below:
P2P Router advertising manufacturer data STMicroelectronics BlueST SDK v2 | |||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
1.2. On board buttons configuration
P2P Router Application Nucleo-WBA buttons configuration | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
2. Requirements
2.1. Software and system requirements
The software required are the following (minimum IDEs version):
- IAR Embedded Workbench for ARM (EWARM) toolchain V9.20.1
- RealView Microcontroller Development Kit (MDK-ARM) toolchain V5.37
- STM32CubeIDE toolchain V1.12.0 [2].
Programmer:
- STM32CubeProgrammer[3] : To flash the board with an already generated binary
2.2. Hardware requirements
NUCLEO-WBA5 [4] is necessary to install the application.
Hardware platform illustration |
---|
|
2.3. Remote interfaces compatible
The STM32CubeWBA P2P Router project is compatible with the following remote interfaces:
- ST BLE ToolBox running on a smartphone or a tablet.
- Web bluetooth interface running into a web browser.
3. STM32WBA P2P Router description
3.1. Project directory
The "BLE_p2pRouter" application is available by downloading STM32CubeWBA MCU Package[5].
Heart Rate project directory |
---|
3.2. Project description
3.2.1. Structure
Software project structure with the most important parts:
P2P Router project structure |
---|
WARNING: Do not modify the files in Middlewares folder |
3.2.2. Application initialization
The different steps of the application initialization are described below:
Heart Rate project initialization |
---|
3.2.3. GAP and GATT initialization and interaction
and The Bluetooth LE P2P Router application initialization is done within app_ble.c
- Initialize the BLE stack - initialize the device as peripheral and central - configure and start advertising - APP_BLE_init()
- Call the services controller initialization SVCCTL_Init() - svc_ctl.c
- Manage the GAP event - SVCCTL_App_Notification()
- HCI_LE_CONNECTION_COMPLETE - provides information of the connection interval, slave latency, supervision timeout
- HCI_LE_CONNECTION_UPDATE_COMPLETE- provides the new information of the connection
- HCI_DISCONNECTION_COMPLETE - informs the application about the link disconnection and the reason
The Services management is done by the service controller, svc_ctl.c
- Initialize the number of registered handler - SVCCTL_Init()
- Manage events - SVCCTL_UserEvtRx()- from the BLE Host Stack and redirect them to the gap event handler - SVCCTL_App_Notification
The application level of P2P Router is done with p2pr_app.c:
- Initialization of P2P Router service - P2PR_Init() - p2pr.c
- Initialization of the context of the application
- Measurement value flags support
- Body sensor location - HRS_BODY_SENSOR_LOCATION_HAND
- Receive notification from the P2P Router service - P2PR_Notification()
- When Heart rate measurement characteristics are enabled by the remote, simulate every 1 s the Heart Rate Measure (HRS_APP_Measurement) and increase the energy expended to transfer to the remote device (collector) - HRS_UpdateValue()
The P2P Router service p2pr.c manages the specification of the service:
- Service Init - P2PR_Init()
- Register P2P Router Event Handler to Service Controller - SVCCTL_RegisterSvcHandler(P2PR_EventHandler);
- Initialize Service UUID – add P2P Router service as Primary services
- Initialize XXX characteristic
- Initialize YYY characteristic
- Manage the GATT event from BLE Stack - P2PR_EventHandler()
- ACI_GATT_WRITE_PERMIT_REQ_VSEVT_CODE
- Reception of a Write Command: HR Control Point Characterictic Value
- Send an aci_gatt_write_response() with an OK or KO status.
- Notify the application to Reset Energy Expended - HRS_Notification(HRS_RESET_ENERGY_EXPENDED_EVT)
- Reception of a Write Command: HR Control Point Characterictic Value
- ACI_GATT_ATTRIBUTE_MODIFIED_VSEVT_CODE
- Reception of an attribute modification - HR Measurement Characteristics Description Value : ENABLE or DISABLE Notification
- Notify application of the Measurement Notification - HRS_Notification(HRS_NOTIFICATION_ENABLED/DISABLED)
- Reception of an attribute modification - HR Measurement Characteristics Description Value : ENABLE or DISABLE Notification
- ACI_GATT_WRITE_PERMIT_REQ_VSEVT_CODE
Client links are managed into file gatt_client_app.c
- Initialize the number of registered handler - SVCCTL_Init()
- Manage events - SVCCTL_UserEvtRx()- from the BLE Host Stack and redirect them to the gap event handler - SVCCTL_App_Notification
Heart Rate Sensor software module interaction |
---|
The application level of the Heart Rate Sensor is done with hrs_app.c:
- Initialization of the context of the application
- Measurement value flags support
- Body sensor location - HRS_BODY_SENSOR_LOCATION_HAND
- Receive notification from the Heart Rate Service - HRS_Notification()
- When Heart rate measurement characteristics are enabled by the remote, simulate every 1 s the Heart Rate Measure (HRSAPP_Measurement) and increase the energy expended to transfer to the remote device (collector) - HRS_UpdateChar()
3.3. Build and install
Follow the steps described in Bluetooth® LE Build and Install Application page, applying them for STM32WBA BLE_HealthThermometer project.
3.4. How to use
Once the BLE Heart Rate application is installed on the STM32WB platform, launch ST BLE Sensor or ST BLE ToolBox smartphone application. Then, scan and connect the device called HRSTM to the application.
Once the Bluetooth® LE connection is established and the notification enabled by the smartphone:
- Heart Rate measurement is provided to remote every 1 s.
- thanks to the timer server and the task manager
BLE Heart Rate application support the pairing procedure
- SW1 allows to clear the security database
- SW2 allows to request pairing
With the WB55.Nucleo board, it is possible to change RF PHY modulation
- SW3 allows to switch to 2 Mbits or 1 Mbits PHY
3.5. UART debug trace
Thanks to the debug log via UART interface, it is possible to trace the application project.
To enable the traces within the project, enable them within app_ble.c as described below:
/**
* When set to 1, the traces are enabled in the BLE services
*/
#define CFG_DEBUG_BLE_TRACE 1
/**
* Enable or Disable traces in application
*/
#define CFG_DEBUG_APP_TRACE 1
Heart Rate Sensor - Initialization phase | Connected Phase |
---|---|
Wireless Firmware version 1.13.0
Wireless Firmware build 5
FUS version 1.2.0
>>== SHCI_SUB_EVT_CODE_READY
>>== WIRELESS_FW_RUNNING
>>== DBGMCU_GetRevisionID= 2001
==>> 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:26:ff:eb
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: hci_le_set_default_phy command
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
Device Information Service (DIS) is added Successfully 000C
Manufacturer Name Characteristic Added Successfully 000D
Model Number String Characteristic Added Successfully 000F
Heart Rate Service (HRS) is added Successfully 0011
Heart Rate Measurement Characteristic Added Successfully 0012
Sensor Location Characteristic Added Successfully 0015
Control Point Characteristic Added Successfully 0017
==>> aci_gap_set_discoverable - Success
==>> Success: Start Fast Advertising
|
>>== HCI_LE_CONNECTION_COMPLETE_SUBEVT_CODE - Connection handle: 0x801
- Connection established with Central: @:72:16:9d:9e:d5:8e
- Connection Interval: 48.75 ms
- Connection latency: 0
- Supervision Timeout: 5000 ms
>>== HCI_LE_CONNECTION_UPDATE_COMPLETE_SUBEVT_CODE
- Connection Interval: 7.50 ms
- Connection latency: 0
- Supervision Timeout: 5000 ms
>>== HCI_LE_CONNECTION_UPDATE_COMPLETE_SUBEVT_CODE
- Connection Interval: 48.75 ms
- Connection latency: 0
- Supervision Timeout: 5000 ms
ACI_GATT_ATTRIBUTE_MODIFIED_VSEVT_CODE HRS_NOTIFICATION_ENABLED
==>> hci_le_read_phy - Success
==>> PHY Param TX= 1, RX= 1
==>> hci_le_set_phy PHY Param TX= 2, RX= 2 - Success
==>> HCI_LE_PHY_UPDATE_COMPLETE_SUBEVT_CODE - status ok
==>> hci_le_read_phy - Success
==>> PHY Param TX= 2, RX= 2
|
4. References