This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

iOS Low Power limitation !

Hello,

I developed a BLE based application using nRF51822 softdevice S110.

This application is very low consumption. The device connects every 60 seconds, and can send an alert if you press a button.

# Define MIN_CONN_INTERVAL MSEC_TO_UNITS (200 UNIT_1_25_MS) 
# Define MAX_CONN_INTERVAL MSEC_TO_UNITS (250 UNIT_1_25_MS)
# define SLAVE_LATENCY 300 
# Define CONN_SUP_TIMEOUT MSEC_TO_UNITS (32000 UNIT_10_MS)

When I test with Master Control Panel, everything works fine.

Now I am looking to the connected device to an iOS app and I realize that iOS does not accept my settings interval connection!

Apple further limits the usable connection intervals in their Bluetooth Accessory Design Guidelines to be at least between 20 and 40 ms and slave latency <= 4.

What solutions considered?

Once the bond made and saved, I thought forced a system_off ... Then I thought to add a timer to 60 seconds to make another adverting and ping the presence in the iOS app. Then when I need to send the button pressed, I run a adverting and I send a warning in IAS profile,and then system_off.

What do you think?

Best regards, Gaétan

  • Beware that Apple doesn't restrict the connection interval to max 40 ms, they just say that the maximum requested should always be at least 20 ms higher than the minimum requested. They do however say that the time between two data exchanges (sometimes called the effective connection interval) should be at most 2 s (first point in their list).

    You can therefore perfectly fine have a connection interval of 2 s, if you don't have any slave latency, or a connection interval of 500 ms and 3 in slave latency.

    If you need higher intervals, this is something I'd recommend you to submit as a Radar.

    You could of course choose to just disconnect the link, and reconnect every minute, but that will possibly give quite noticeable latency when the user press a button, which may or may not be ok. If you go down this route, you should make sure to disconnect the link properly before going to sleep. Also remember that you must be in system on to have the RTC running.

Related