1. Peer to Peer Router profile
The Peer to Peer Router application is intended to demonstrate multi link capabilities of the STM32WBA Bluetooth® LE solution. It acts as:
- GAP Central & GATT Server (Router Service) device to be connected and controlled by a smartphone or a web page interface
- 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 approximatively 80-100ms.
Data advertised are composed as following:
Advertising packet | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Manufacturer data are encoded following STMicroelectronics BlueST v2 as described below:
Advertising manufacturer data STMicroelectronics BlueST SDK v2 | |||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
1.2. On board buttons configuration
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].
P2P Router 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 information of new 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 by calling P2PR_Init() - p2pr.c
- Initialization context of application applicative part:
- Creation of some tasks
- Setup data tables holding links status
- Receive notification from the P2P Router service - P2PR_Notification()
The P2P Router service p2pr.c manages the specification of the service:
- Service applicative part initialization - P2PR_Init()
- Register P2P Router Event Handler to Service Controller - SVCCTL_RegisterSvcHandler(P2PR_EventHandler)
- Initialize service, add P2P Router service as primary service
- Initialize write forward (WRITEFWD) characteristic
- Initialize notif forward (NOTIFFWD) characteristic
- Initialize device info (DEVINFO) characteristic
- Manage the GATT event from BLE Stack - P2PR_EventHandler()
- ACI_GATT_ATTRIBUTE_MODIFIED_VSEVT_CODE
- Reception of an attribute modification packet
- Update notification state for characteristics supporting it
- Transfer packet to applicative part by calling P2PR_Notification() function
- Reception of an attribute modification packet
- ACI_GATT_ATTRIBUTE_MODIFIED_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 GATT client event handler - Event_Handler
Software module interaction |
---|
3.3. Build and install
Follow the steps described in Bluetooth® LE Build and Install Application page, applying them for STM32WBA BLE_p2pRouter project.
3.4. How to use
Once the BLE P2P Router application is installed on STM32WBA platform, launch ST BLE ToolBox smartphone or web Bluetooth® application.
Then, scan and connect to device called p2pR_XX (where XX is replaced by the last byte of the BD address)
Once the Bluetooth® LE connection is established and notifications are enabled by the smartphone:
- Pressing button 1 will allows to add an additional end device to P2P Router network by following steps:
- Scan is started (blue LED turned on), reports are analysed, looking for a P2P Server application running around
- Scan is stopped once a valid end device is found or scan timeout appends (blue LED turned off).
- A valid end device is detected thanks to FW_ID present in advertising manufacturer data.
- A connection is initiated and once done:
- MTU configuration is exchanged - aci_gatt_exchange_config()
- Services discovery is started - aci_gatt_disc_all_primary_services()
- Then characteristics are discovered - aci_gatt_disc_all_char_of_service()
- Then descriptors are discovered - aci_gatt_disc_all_char_desc()
- For characteristics supporting notifications, there are enabled.
P2P Router application maintain tables containing information on connected end device referenced by a device index.
This device index can be from 0 to 13, see details below:
Table name a_P2PR_device_... |
status[ ] | connHdl[ ] | bd_addr[ ] | char_write_level[ ] | char_notif_level[ ] | name[ ] | name_len[ ] |
---|---|---|---|---|---|---|---|
description | 0x00: None 0x01: Found 0x02: Connecting 0x03: Discovering 0x04: Connected 0x05: Link lost |
Connection handle |
Bluetooth® Device Address |
Level of write characteristic |
Level of notification characteristic |
Advertising name as a string |
Advertising name string length |
|} Updates of this table are sent to the remote interface by sending notifications on device info characteristic (format described in chapter 1).
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