Concurrent BIS and PAwR when using PAST

Dear Team, 

Is it possible to run BIS and PAwR concurrently while using PAST for synchronization? 
I am using the nRF52840 DK and NCS 2.8.

I managed to start two periodic advertising trains (BIS and PAwR) concurrently without any issues (both are working as expected). However, when I attempt to create a connection to a peer device (for PAST) afterwards, it fails with error 0x0C (command disallowed).

After some debugging, I may have found the cause of this problem. To support PAwR, the configuration CONFIG_BT_PER_ADV_RSP is required. This configuration extends the struct bt_le_per_adv_param with fields related to PAwR. When setting the parameters for my periodic advertisements used for BIS, I initially set those values to zero, as I do not need them (which works without problems). However, when doing so I cannot connect with any device anymore. If I set those values to meaningful numbers, I can successfully establish a connection again, but I can no longer create a BIG (as I now have two PAwR trains).

Note: The advertising does not need to be started to resolve this issue; it is sufficient to set the parameters using bt_le_per_adv_set_param() and set the PAwR related fileds of bt_le_per_adv_param to zero.

This issue can be recreated by using the existing zephyr sample (zephyr/samples/bluetooth): periodic_adv_rsp & periodic_sync_rsp.

Just change the periodic advertising parameters in main.c of the periodic_adv_rsp sample to: 

static const struct bt_le_per_adv_param per_adv_params = {
  .interval_min = 0xFF,
  .interval_max = 0xFF,
  .options = 0,
  .num_subevents = 0,
  .subevent_interval = 0,
  .response_slot_delay = 0,
  .response_slot_spacing = 0,
  .num_response_slots = 0,
};

As result, a connection cannot be established anymore: 

*** Booting nRF Connect SDK v2.8.0-a2386bfc8401 ***
*** Using Zephyr OS v3.7.99-0bc3393fb112 ***
Starting Periodic Advertising Demo
[00:00:00.000,671] <inf> bt_sdc_hci_driver: SoftDevice Controller build revision: 
                                            fe 2c f9 6a 7f 36 22 2e  a0 79 c0 40 be 2c 03 20 |.,.j.6". .y.@.,. 
                                            40 c2 f3 32                                      |@..2             
[00:00:00.003,021] <inf> bt_hci_core: HW Platform: Nordic Semiconductor (0x0002)
[00:00:00.003,051] <inf> bt_hci_core: HW Variant: nRF52x (0x0002)
[00:00:00.003,082] <inf> bt_hci_core: Firmware: Standard Bluetooth controller (0x00) Version 254.63788 Build 573996906
[00:00:00.003,997] <inf> bt_hci_core: Identity: E7:C1:B9:C8:AB:0B (random)
[00:00:00.004,058] <inf> bt_hci_core: HCI: version 6.0 (0x0e) revision 0x104e, manufacturer 0x0059
[00:00:00.004,089] <inf> bt_hci_core: LMP: version 6.0 (0x0e) subver 0x104e
Start Periodic Advertising
Start Extended Advertising
Scanning successfully started
[00:00:00.219,116] <wrn> bt_hci_core: opcode 0x2043 status 0x0c 
Create conn to ø$ failed (4294967283)

Thanks, 

Rainer

Parents Reply
  • Hi Runar,
    Thank you for addressing this issue.

    No, the BIG is created from a standard PADVB (I have set the num_subevents=0), and there are no issues during its creation. However, after creating the BIG (when setting num_subevents=0 and CONFIG_BT_PER_ADV_RSP=y), I am unable to establish a connection to another device, as mentioned in the example above.

    For context, I currently have one PAwR and one BIS running without any problems. My goal is to connect to a peer device to send synchronization information via PAST.

    Regards,
    Rainer

Children
  • Hi and thanks for the clarification 

    Our softdevice team has looked into it made this workaround for you which should fix the issue for you while they investigate a bit. 

    diff --
    git a/samples/bluetooth/periodic_adv_rsp/src/main.c b/samples/bluetooth/periodic_adv_rsp/src/main.c
    index 37d04306246..f42d651facc 100644
    --- a/samples/bluetooth/periodic_adv_rsp/src/main.c
    +++ b/samples/bluetooth/periodic_adv_rsp/src/main.c
    @@ -10,6 +10,8 @@
     #include <zephyr/bluetooth/gatt.h>
     #include <zephyr/bluetooth/hci.h>
     
    +#include <sdc_hci_vs.h>
    +
     #define NUM_RSP_SLOTS 5
     #define NUM_SUBEVENTS 5
     #define PACKET_SIZE   5
    @@ -27,11 +29,11 @@ static const struct bt_le_per_adv_param per_adv_params = {
            .interval_min = 0xFF,
            .interval_max = 0xFF,
            .options = 0,
    -       .num_subevents = NUM_SUBEVENTS,
    -       .subevent_interval = 0x30,
    -       .response_slot_delay = 0x5,
    -       .response_slot_spacing = 0x50,
    -       .num_response_slots = NUM_RSP_SLOTS,
    +       .num_subevents = 0,
    +       .subevent_interval = 0,
    +       .response_slot_delay = 0,
    +       .response_slot_spacing = 0,
    +       .num_response_slots = 0,
     };
     
     static struct bt_le_per_adv_subevent_data_params subevent_data_params[NUM_SUBEVENTS];
    @@ -264,6 +266,14 @@ int main(void)
                    return 0;
            }
     
    +
    +       sdc_hci_cmd_vs_allow_parallel_connection_establishments_t parallel_params = {.enable = 1};
    +       err = sdc_hci_cmd_vs_allow_parallel_connection_establishments(&parallel_params);
    +       if (err) {
    +               printk("Failed to allow parallel connection establishment (err %d)\n", err);
    +               return 0;
    +       }
    +
            /* Create a non-connectable advertising set */
            err = bt_le_ext_adv_create(BT_LE_EXT_ADV_NCONN, &adv_cb, &pawr_adv);
            if (err) {
     

    Regards

    Runar

  • Thank you! This fix worked for me.
    Will this issue be addressed in a future update?

  • Just an update on the fix: It will be merged into the NCS in the next nrfxlib-update so I would presume in maybe a release or two of NCS(not counting the one from last night). 

    Regards

    Runar

Related