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

Service Changed characteristic requirement for iOS

Hi,

According to your IOS-Pods-DFU-Library GitHub repo:  https://github.com/NordicSemiconductor/IOS-Pods-DFU-Library#service-changed-characteristic

In order the DFU to work with iOS, the target device MUST have the Service Changed characteristic with Indicate property in the Generic Attribute service. Without this characteristic iOS will assume that services of this device will never change and will not invalidate them after switching to DFU bootloader mode.

Based upon the literature I reviewed, the [#define IS_SRVC_CHANGED_CHARACT_PRESENT 1] flag in main.c is a specific

requirement for iOS DFUs.  In addition, upon review of their latest v 12.3.0 SDK [nRF5_SDK_12.3.0_d7731ad], this flag is present in many of their BLE SDK examples; but

Interestingly enough, not specifically dfu.

So my question is, do we need to set this flag when running DFU updates. For example when using thenRF Tool Box app you provide?

see: https://itunes.apple.com/us/app/nrf-toolbox/id820906058?mt=8

Or is this flag only required to be set when running an initial boot loader.

According to our FW Engineer, we are able to run updates on iOS with no SDK changes. So, I want to gain further clarity from you.

Parents
  • Hi,

    Yes, the service changed characteristic is a requirement for DFU to work with iOS. You will need this flag set if you want to change your services on a later stage. 

    The reason this flag is not set in the DFU example. is that a workaround have been implemented to foolproof it, so that when people forget to set this flag it is still possible to change your services. So you should set this flag for DFU to work with iOS devices.

Reply
  • Hi,

    Yes, the service changed characteristic is a requirement for DFU to work with iOS. You will need this flag set if you want to change your services on a later stage. 

    The reason this flag is not set in the DFU example. is that a workaround have been implemented to foolproof it, so that when people forget to set this flag it is still possible to change your services. So you should set this flag for DFU to work with iOS devices.

Children
Related