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

IOS nrfConnect issue with DFU

I am using nrf connect app on ios , the device is getitng on device mode but it is not showing DFU button on it , but it is working when using android app of it

And when doing dfu using ios liberary on react rative app, we are getting this error

DFU state: CONNECTING
98d3db5e-35d2-4003-9…-fc749e7a9a6c:92442 DFU state: DFU_FAILED
98d3db5e-35d2-4003-9…5-fc749e7a9a6c:5221 Error: DFU Service not found
at createErrorFromErrorData (98d3db5e-35d2-4003-9…5-fc749e7a9a6c:4204)
at 98d3db5e-35d2-4003-9…5-fc749e7a9a6c:4156
at MessageQueue.__invokeCallback (98d3db5e-35d2-4003-9…5-fc749e7a9a6c:4702)
at 98d3db5e-35d2-4003-9…5-fc749e7a9a6c:4433
at MessageQueue.__guard (98d3db5e-35d2-4003-9…5-fc749e7a9a6c:4606)
at MessageQueue.invokeCallbackAndReturnFlushedQueue (98d3db5e-35d2-4003-9…5-fc749e7a9a6c:4432)
at debuggerWorker.js:80
Parents Reply
  • Hi vivek,

    iOS devices may cache the GATT table based on the address of the peripheral to avoid performing the Service Discovery procedure on every connection. Instead it just assumes that the peripheral will have the same order of services as the last time. So when  you are modifying the GATT table of the peripheral by adding/removing a service, then the iOS device will still think its the same GATT table as before. THis is why the DFU service is not shown. 

    This can be solved by issuing a Service Changed indication, see GATTS Service Changed.

    After adding the Nordic DFU service to the GATT table you need to call sd_ble_gatts_service_changed to inform the central that the GATT table has changed.

    Best regards

    Bjørn 

Children
Related