Bluetooth: Event Trigger

The Bluetooth® Event Trigger sample showcases the Event Trigger feature. It is a proprietary extension of the Bluetooth® protocol which can be used to schedule sampling, GPIO toggling, or other SW- or HW-based user activities in synchronization with individual Bluetooth LE role instances, such as a central or peripheral link.

Requirements

The sample supports the following development kits:

Hardware platforms

PCA

Board name

Build target

nRF5340 DK

PCA10095

nrf5340dk_nrf5340

nrf5340dk_nrf5340_cpunet

nRF52 DK

PCA10040

nrf52dk_nrf52832

nrf52dk_nrf52832

nRF52840 DK

PCA10056

nrf52840dk_nrf52840

nrf52840dk_nrf52840

You can use any two of the development kits mentioned above and mix different development kits.

Additionally, the sample requires a connection to a computer with a serial terminal for each of the development kits.

Note that the Event Trigger feature involves triggering a (D)PPI task directly from the SoftDevice Controller link layer, and therefore it is expected that the application and SoftDevice Controller are running on the same core.

Building and running

This sample can be found under samples/bluetooth/connection_event_trigger in the nRF Connect SDK folder structure.

To build the sample with Visual Studio Code, follow the steps listed on the How to build an application page in the nRF Connect for VS Code extension documentation. See Configuring and building an application for other building scenarios, Programming an application for programming steps, and Testing and optimization for general information about testing and debugging in the nRF Connect SDK.

Testing

After programming the sample to both development kits, test it by performing the following steps:

  1. Connect to both kits with a terminal emulator (for example, nRF Connect Serial Terminal). See Testing and optimization for the required settings and steps.

  2. Reset both kits.

    You will be prompted:

    Choose device role - type c (central) or p (peripheral):
    
  3. In one of the terminal emulators, type c to start the application on the connected board in the central (tester) role.

  4. In the other terminal emulator, type p to start the application in the peripheral (peer) role.

  5. Observe that the kits establish a connection.

    Each kit outputs the following information:

    Press any key to switch to a 10ms connection interval and set up connection event trigger
    
  6. Press a key in either terminal.

  7. Observe that the link switches from a 100 ms connection interval to a 10 ms connection interval.

  8. The event trigger is configured to generate a software interrupt at each connection event for the link.

    During these software interrupts, a timestamp is recorded.

  9. Observe that these timestamps are printed in the terminal.

    The delta between triggers generally matches the connection interval. However, if the controller is not able to schedule a radio event for a given point in time, the event trigger will also be dropped.

  10. Observe that the central switches back to a 100 ms connection interval.

Sample output

The sample displays the data in the following format:

*** Booting nRF Connect SDK v3.4.99-ncs1-4802-g41e34920abf4 ***
Starting Connection Event Trigger Example.
I: SoftDevice Controller build revision:
I: ba cb 53 9c e2 c9 de b6 |..S.....
I: 82 1d 9c b3 eb de c5 1f |........
I: 22 d8 45 99             |".E.
I: HW Platform: Nordic Semiconductor (0x0002)
I: HW Variant: nRF52x (0x0002)
I: Firmware: Standard Bluetooth controller (0x00) Version 186.21451 Build 3737772700
I: Identity: DA:1A:7B:0E:CC:5E (random)
I: HCI: version 5.4 (0x0d) revision 0x1174, manufacturer 0x0059
I: LMP: version 5.4 (0x0d) subver 0x1174
Choose device role - type c (central) or p (peripheral):
Peripheral. Starting advertising
Advertising successfully started
Connected: FB:8F:24:2D:84:79 (random)
Connection established.
Press any key to switch to a 10ms connection interval and set up connection event trigger:
Successfully configured connection event trigger
Connection parameters updated. New interval: 10 ms
Successfully configured connection event trigger
Printing connection event trigger log.
+-------------+----------------+----------------------------------+
| Trigger no. | Timestamp (us) | Time since previous trigger (us) |
|           1 |   199381378 us |                          9979 us |
|           2 |   199391388 us |                         10010 us |
|           3 |   199401398 us |                         10010 us |
|           4 |   199411377 us |                          9979 us |
|           5 |   199421387 us |                         10010 us |
|           6 |   199431396 us |                         10009 us |
|           7 |   199441376 us |                          9980 us |
|           8 |   199451385 us |                         10009 us |
|           9 |   199461395 us |                         10010 us |
|          10 |   199471375 us |                          9980 us |
|          11 |   199481384 us |                         10009 us |
|          12 |   199491394 us |                         10010 us |
|          13 |   199501373 us |                          9979 us |
|          14 |   199511383 us |                         10010 us |
|          15 |   199521393 us |                         10010 us |
|          16 |   199531372 us |                          9979 us |
|          17 |   199541382 us |                         10010 us |
|          18 |   199551392 us |                         10010 us |
|          19 |   199561371 us |                          9979 us |
|          20 |   199571381 us |                         10010 us |
|          21 |   199581390 us |                         10009 us |
|          22 |   199591370 us |                          9980 us |
|          23 |   199601379 us |                         10009 us |
|          24 |   199611389 us |                         10010 us |
|          25 |   199621399 us |                         10010 us |
|          26 |   199631378 us |                          9979 us |
|          27 |   199641388 us |                         10010 us |
|          28 |   199651398 us |                         10010 us |
|          29 |   199661377 us |                          9979 us |
|          30 |   199671387 us |                         10010 us |
|          31 |   199681519 us |                         10132 us |
|          32 |   199691376 us |                          9857 us |
|          33 |   199701385 us |                         10009 us |
|          34 |   199711395 us |                         10010 us |
|          35 |   199721375 us |                          9980 us |
|          36 |   199731384 us |                         10009 us |
|          37 |   199741394 us |                         10010 us |
|          38 |   199751373 us |                          9979 us |
|          39 |   199761383 us |                         10010 us |
|          40 |   199771393 us |                         10010 us |
|          41 |   199781372 us |                          9979 us |
|          42 |   199791382 us |                         10010 us |
|          43 |   199801392 us |                         10010 us |
|          44 |   199811371 us |                          9979 us |
|          45 |   199821381 us |                         10010 us |
|          46 |   199831390 us |                         10009 us |
|          47 |   199841400 us |                         10010 us |
|          48 |   199851379 us |                          9979 us |
|          49 |   199861389 us |                         10010 us |
+-------------+----------------+----------------------------------+

Dependencies

This sample uses the following sdk-nrfxlib libraries:

In addition, it uses the following Zephyr libraries:

  • include/console.h

  • Kernel Services:

    • include/kernel.h

  • include/sys/printk.h

  • include/zephyr/types.h

  • Bluetooth APIs:

    • include/bluetooth/bluetooth.h

    • include/bluetooth/conn.h

    • include/bluetooth/hci.h

    • include/bluetooth/uuid.h

    • include/bluetooth/scan.h