4.1.1.3 Bluetooth®LE Scanning Extended Advertisements

This section explains the scanning of Extended Advertisements (ADV_EXT_IND, ADV_AUX_IND) on the PIC32WM-BW1 Curiosity board. For a successful scan of Extended Advertisement user needs to have a broadcaster transmitting these Advertisements. In BLE, a central or observer always starts with scanning.

Using the “scan_ext_adv” application example in combination with “ext_adv” example will enable users to test features like long range (Coded PHY) and sending data (1M, 2M, Coded PHY) over extended advertisements

Users can choose to either run the precompiled Application Example hex file provided on the PIC32WM-BW1 Curiosity Board or follow the steps to develop the application from scratch.

Hardware Requirement

Table 4-3. Hardware Prerequisites
S. No. Tool Quantity
1PIC32WM-BW1 Curiosity Board2
2USB Type-C cable2

Software Requirement

  • To install Tera Term tool, refer to the Tera Term web page listed in the Reference Documentation from Related Links.

Programming the Precompiled Hex File or Application Example

Using MPLAB® X IPE:

  1. Central Device – Precompiled .hex file is located in : <Harmony Content Path>\wireless_apps_pic32_bw1\apps\ble\central\scan_ext_adv\hex folder.
  2. Peripheral Device – Precompiled .hex file is located in <Harmony Content Path>\wireless_apps_pic32_bw1\apps\ble\peripheral\peripheral_ext_adv\hex” folder
  3. For detailed steps, refer to Programming a Device in MPLAB® IPE in Reference Documentation from Related Links.
    Note: Ensure to choose the correct Device and Tool information.

Using MPLAB® X IDE:

  1. Perform the following the steps mentioned in Running a Precompiled Example. For more information, refer to Running a Precompiled Application Example from Related Links.
  2. Central Device – Open and program the application scan_ext_adv.X located in <Harmony Content Path>\wireless_apps_pic32_bw1\apps\ble\central\scan_ext_adv\firmware.
  3. Peripheral Device – Open and program the application ext_adv.X located in “<Harmony Content Path>\wireless_apps_pic32_bw1\apps\ble\peripheral\peripheral_ext_adv\firmware”.
  4. For more details on finding the Harmony content path, refer to Installing the MCC Plugin from Related Links.

Testing

  1. Users must use two PIC32WM-BW1 Curiosity boards programmed with Extended Advertisement and Scanning Extended Advertisement applications.
  2. Board 1 – PIC32WM-BW1 Curiosity Board Programmed with “ext_adv” application. Open TeraTerm and configure as mentioned below:

    Terminal Settings

    • Baud Rate/Speed – 115200
    • Parity – None
    • Data Bits – 8
    • Stop Bits – 1
    • Flow Control – None
  3. Reset the board, Upon reset, “Ext Adv Enable” message is displayed on the Tera Term. The board behaves as a broadcaster and is sending extended advertisements (ADV_AUX_IND, ADV_EXT_IND).
  4. Board 2 – PIC32WM-BW1 Curiosity Board Programmed with “Scan Ext Adv”. Open TeraTerm and configure as mentioned below:

    Terminal Settings

    • Baud Rate/Speed – 115200
    • Parity – None
    • Data Bits – 8
    • Stop Bits – 1
    • Flow Control – None
  5. Reset the board. Upon reset, “ExtAdv Scan Enable Success” message is displayed on the Tera Term. Scanning of CODED PHY (125 kbps) is enabled by default in the application.
  6. “Microchip” message will be displayed as soon as the PIC32WM-BW1 module performs an extended advertisement scan.
  7. The advertiser’s data may take up to 120 seconds to arrive and the Green LED toggles when the observer device receives these extended advertisement.
Figure 4-18. Tera Term

Project Graph

This section explains how MCC Project graph must look like and component configurations.
  1. Verify if the Project Graph window has all the expected configuration as illustrated in the following figure.
Figure 4-19. Project Graph

Verifying Scan Configuration

  1. Click on the BLE Stack component in project graph, to open component configuration and configure as illustrated in the following figure.
    Figure 4-20. BLE Stack Configuration

Configuring LED

  1. Click on the System component in project graph, open Configuration Options and enable the following configurations.
  2. Code will be added to GPIO_Initialize() available in Source Files\config\default\peripheral\gpio\plib_gpio.c.
    Figure 4-21. System Component Configuration

Files and Routines Automatically Generated by the MCC

After generating the program source from MCC interface by clicking Generate Code, the BLE configuration can be found in the following project directories
Figure 4-22. Project Files
The OSAL, RF System, BLE System initialization routine executed during program initialization can be found in the project files. This initialization routine is automatically generated by the MCC.
Figure 4-23. initialization.c
The BLE stack initialization routine excuted during application initialization can be found in project files. This initialization routine is automatically generated by the MCC. This call initializes and configures the GAP, GATT, SMP, L2CAP and BLE middleware layers.
Figure 4-24. app_ble.c
Table 4-4. Source Files
Source FilesUsage
app.cApplication State machine, includes calls for Initialization of all BLE stack (GAP,GATT, SMP, L2CAP) related component configurations

app_ble\app_ble.c

Source Code for the BLE stack related component configurations, code related to function calls from app.c

app_ble\app_ble_handler.c

GAP, GATT, SMP and L2CAP Event handlers
app_user_edits.cUser code change instruction
Note: app.c is auto generated and has a state machine based application code sample. Users can use this template to develop their application.

Header Files

  • ble_gap.h(Header Files\config\default\ble\lib\include\) - This header file contains BLE GAP functions and is automatically included in the app.c file

Function Calls

MCC generates and adds the code to initialize the BLE Stack GAP, GATT, L2CAP and SMP in APP_BleStackInit() function

  • APP_BleStackInit() is the API that will be called inside the applications initial state APP_STATE_INIT in app.c

User Application Development

  1. Include

    • Include the user action. For more information, refer to User Action from Related Links.
    • definitions.h in all the files where UART will be used to print debug information
    Note: definitions.h is not specific to just UART peripheral, instead it must be included in all application source files where peripheral functionality will be exercised
  2. Enabling Scanning of Extended Advertisement

    // Enable Scanning the Ext Adv 
    uint16_t ret;
    BLE_GAP_ExtScanningEnable_T extScan;
    extScan.duration = 0x0;
    extScan.enable =  true;
    extScan.filterDuplicates = BLE_GAP_SCAN_FD_DISABLE;
    extScan.period = 0x0000;
    ret = BLE_GAP_SetExtScanningEnable(BLE_GAP_SCAN_MODE_OBSERVER, &extScan );
    if (ret == MBA_RES_SUCCESS)
    SERCOM0_USART_Write((uint8_t *)"ExtAdv Scan Enable Success\r\n", 28);
    Figure 4-25. app.ble.c
  3. Scanning Results

    • BLE_GAP_EVT_EXT_ADV_REPORT event is generated upon finding advertisements on legacy channels in app_ble_handler.c.

      // GPIO will toggle if it can scan any EXT ADV PDU near based on BLE_GAP_SCAN_PHY chosen
      GPIOB_REGS->GPIO_PORTINV = 0x08;
      // length value of 19 is chosen as a filter as ext_adv example sends 19 bytes of data
      // user can modify filter mechanism based on their requirements
      if (p_event->eventField.evtExtAdvReport.length == 19)
      {
      SERCOM0_USART_Write((uint8_t *)"\r\n", 2);
      SERCOM0_USART_Write(&p_event->eventField.evtExtAdvReport.advData[5], 9);
      }
    Figure 4-26. app_ble_handler.c