Extended advertising and ios


I have a few questions related to extended advertising. I am trying to receive extended advertisement sent from an nRF52832 with an ios device. The Softdevice used is s132 7.0.1 and I am using an iPhone Xr which supports extended adv for scanning advertisement. However, I am unable to see any ext adv on this device. I am testing both with the nRF Connect app as well as a custom app built for this purpose.

From the BLE specification I have understood that the ADV_EXT_IND packet on the primary advertising channel needs to use LE 1M and for ios specifically the AUX_ADV_IND packets on the secondary advertising channel needs to use LE 2M. Hence, I am using the following settings:

    init.config.ble_adv_primary_phy      = BLE_GAP_PHY_1MBPS;
    init.config.ble_adv_secondary_phy    = BLE_GAP_PHY_2MBPS;
When I am instead using a nRF52840dk board and scan for advertisements I get the adv_report in the picture below. As you can see the primary_ph and secondary_ph looks fine but the aux_phy has the value 0x00. I would have expected this one to be 0x02 since the aux_pointer should indicate where to find the AUX_ADV_IND on the secondary_channel?

Also, the aux_offset needs to be less than or equal to 10ms for ios devices, the aux_offset has the value 10979 with the unit being 100 us this would equal 1.0979s. Way more than 10ms. Can this aux_offset be modified from the application or is it controlled by the Softdevice?

I have also tested the Running Speed and Cadence Application peripheral example from the SDK which uses extended adv as default. When runnning this on nRF52840dk I can see adv packets on an Android phone supporting ext adv but not on ios. If I disable extended adv in the example adv packets are received as expected also on the ios device. Do you have the possibility to verify if this example project works with ios?

Questions from the text above:

1) In the adv_report why is the aux_phy = 0x00 even when secondary_phy = 0x02
2) The aux_offset is 1.0979s ios needs this to be less than 10ms how can I ensure this?
3) Could you verify that ble_app_rscs works with ios devices?

Thank you,

  • Hi Tim,

    I was not aware of any iOS specific requirements/recommendations for the advertising extension feature, nor was I able to find anything about it in the "Apple accessory design guidelines" document. Is there some other document or webpage that mentions these requirements?

    I tested the speed and cadence example in addition to a modified version of the beacon example and I was able to discover data on the secondary channel in both cases. However, this was with an iPhone 11 pro max (ios 14.6) as I don't have an Xr here that I can test with.

    Beacon example with adv. extension:


    1) In the adv_report why is the aux_phy = 0x00 even when secondary_phy = 0x02
    2) The aux_offset is 1.0979s ios needs this to be less than 10ms how can I ensure this?

     These values don't appear to be valid. According to the API documentation, the "aux_pointer" member is only set when .type.status is set to BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA (is BLE_GAP_ADV_DATA_STATUS_COMPLETE in your screenshot).

    Best regards,