nordic_dfu

style: very good analysis pub package mobile_scanner GitHub Sponsors

Fork from flutter_nordic_dfu and updated with latest dependencies, now with macOS support from version 6.0.0.

This library allows you to do a Device Firmware Update (DFU) of your nrf51 or nrf52 chip from Nordic Semiconductor. It works for Android, iOS, and MacOS.

This is the implementation of the reference "react-native-nordic-dfu"

For more info about the DFU process, see: Resources

Run example

  1. Add your dfu zip file to example/assets/file.zip

  2. Run example project

  3. Scan device

  4. Start dfu

Usage

You can pass an absolute file path or asset file to NordicDfu

Use absolute file path
await NordicDfu().startDfu(
            'EB:75:AD:E3:CA:CF', '/file/to/zip/path/file.zip'
         );
// With callback
await NordicDfu().startDfu(
      'EB:75:AD:E3:CA:CF',
      'assets/file.zip',
      fileInAsset: true,
      onProgressChanged: (
        deviceAddress,
        percent,
        speed,
        avgSpeed,
        currentPart,
        partsTotal,
      ) {
        print('deviceAddress: $deviceAddress, percent: $percent');
      },
    );
Use asset file path
/// just set [fileInAsset] true
await NordicDfu().startDfu(
            'EB:75:AD:E3:CA:CF', 'assets/file.zip',
            fileInAsset: true,
         );

Parallel DFU

Available from version 7.0.0

Concurrent DFU Processes

  • DFU operations can run simultaneously on multiple devices.
  • Callbacks are triggered correctly and independently for each device.

Interface change

  • Updated abortDfu method to include an optional address parameter:
    • If an address is provided: The DFU process for the specified device will be aborted. (iOS only)
    • If no address is provided: All active DFU processes will be aborted.
  • Added error handling for abortDfu:
    • FlutterError("INVALID_ADDRESS") is thrown if the provided address does not match any active DFU process.
    • FlutterError("NO_ACTIVE_DFU") is thrown if no address is provided and there are no active DFU processes.

iOS

  • ✅ Devices update in parallel.
  • ✅ Callbacks set in startDfu are called independently for each device.
  • ✅ All active DFU processes can be aborted using the abortDfu method without an address.
  • ✅ DFU processes can be individually aborted using the abortDfu method with an address.

Android

  • ✅ Devices update in parallel (set limit of 8).
  • ✅ Callbacks set in startDfu are called independently for each device.
  • ✅ All active DFU processes can be aborted using the abortDfu method without an address.
  • ❌ DFU processes cannot be individually aborted using the abortDfu method with an address due to current limitations in the underlying Android-DFU-Library.

Resources

Libraries

nordic_dfu