Code Monkey home page Code Monkey logo

nordic_dfu's Introduction

nordic_dfu

style: lint 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,
         );

Resources

nordic_dfu's People

Contributors

dependabot[bot] avatar fabiototh avatar gaellejoubert avatar juliansteenbakker avatar knightro63 avatar rstewart22 avatar seymooreth3myth avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

nordic_dfu's Issues

I can't use it on IOS

This is my platform information:
flutter:3.0.5
XCODE 13.41
ios: IPhone 12 mini (15.5)

It seems to be connected in a loop all the time,like this:

flutter: onDeviceConnecting:FD3E9841-5843-7AFE-9DB1-F83E88479A42
flutter: onDfuProcessStarting:FD3E9841-5843-7AFE-9DB1-F83E88479A42
flutter: onEnablingDfuMode:FD3E9841-5843-7AFE-9DB1-F83E88479A42
flutter: onDeviceConnecting:FD3E9841-5843-7AFE-9DB1-F83E88479A42
flutter: onDfuProcessStarting:FD3E9841-5843-7AFE-9DB1-F83E88479A42
flutter: onEnablingDfuMode:FD3E9841-5843-7AFE-9DB1-F83E88479A42
flutter: onDeviceConnecting:FD3E9841-5843-7AFE-9DB1-F83E88479A42
flutter: onDfuProcessStarting:FD3E9841-5843-7AFE-9DB1-F83E88479A42
flutter: onEnablingDfuMode:FD3E9841-5843-7AFE-9DB1-F83E88479A42

this my code:
await NordicDfu().startDfu(
"FD3E9841-5843-7AFE-9DB1-F83E88479A42", _localPath + '/mcbin.zip',
fileInAsset: false,
iosSpecialParameter:
IosSpecialParameter(alternativeAdvertisingNameEnabled: true),
onProgressChanged: (
deviceAddress,
percent,
speed,
avgSpeed,
currentPart,
partsTotal,
) async {
debugPrint('deviceAddress: $deviceAddress, percent: $percent');

  sendvalue = percent;
  if (sendvalue == 100) {
    await Future.delayed(const Duration(seconds: 3));
    Navigator.pop(context, true);
  }
}, onDeviceConnected: ((str) {
  print("onDeviceConnected:" + str);
}), onDeviceConnecting: ((str) {
  print("onDeviceConnecting:" + str);
}), onDeviceDisconnected: ((str) {
  print("onDeviceDisconnected:" + str);
}), onDeviceDisconnecting: ((str) {
  print("onDeviceDisconnecting:" + str);
}), onDfuAborted: ((str) {
  print("onDfuAborted:"+str);
}), onDfuCompleted: ((str) {
  print("onDfuCompleted:" + str);
}), onDfuProcessStarted: ((str) {
  print("onDfuProcessStarted" + str);
}), onDfuProcessStarting: ((str) {
  print("onDfuProcessStarting:" + str);
}), onEnablingDfuMode: ((str) {
  print("onEnablingDfuMode:" + str);
}), onFirmwareValidating: ((str) {
  print("onFirmwareValidating:" + str);
}), onError: ((address, error, errorType, message) {
  print(address);
  print(error);
  print(errorType);
  print(message);
}));

What should I do now?

Enhancement Request - DFU update using downloaded file

Hi, Thank you for maintaining this package and migrating it to null safety. I have successfully integrated it into my project using a zip file in my flutter project just like the example project and it works as expected.

In my app I'd like to be able to get the zip firmware file from an API download rather than a local file so the user will always have access to the newest firmware.

I can use an HTTP request to get the file contents but this package does not appear to have a method to update the firmware in this manner.

Would this be an enhancement that you can add or could you please point me in the right direction of some workaround?

Thank you!

Android manifest should not restrict maxSdkVersion

I have an issue when i try to upload my app to google console.
I get the 2 errors:

  1. Duplicate declarations of element 'android.permission.ACCESS_FINE_LOCATION' in manifest with different maxSdkVersion.
  2. Duplicate declarations of element 'android.permission.ACCESS_COARSE_LOCATION' in manifest with different maxSdkVersion.

it's true that the official docs state that fine location is no longer needed for BLE scanning but i found that i was not able to get BLE scan results unless i have location (fine) enabled.

I also found that other developers encounter this issue

My android manifest does not restrict max SDK version, but this library does with the following:

<!-- required for API 23 - 30 -->
    <uses-permission-sdk-23
        android:name="android.permission.ACCESS_COARSE_LOCATION"
        android:maxSdkVersion="30" />
    <uses-permission-sdk-23
        android:name="android.permission.ACCESS_FINE_LOCATION"
        android:maxSdkVersion="30" />

the change that is needed:

<uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission-sdk-23 android:name="android.permission.ACCESS_FINE_LOCATION" />

For now, my workaround is to edit this library AndroidManifest so i will be able to upload my app to google console.

`PlatformException` -> Code: 133, DFU FAILED: GATT ERROR

Hi @juliansteenbakker, I am getting this issue every time I try to start DFU for my BLE device. Could you please help?

I/DfuBaseService(12367): DFU service destroyed
E/flutter (12367): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(133, DFU FAILED: GATT ERROR, Address: C3:CE:FE:CF:F5:E9, Error Type: 1, null)
E/flutter (12367): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:652:7)
E/flutter (12367): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:310:18)
E/flutter (12367): <asynchronous suspension>
E/flutter (12367):

Additional info

  1. Library version: 6.0.1
  2. Flutter version: 3.13.0-0.2.pre
  3. Android Version: 13 (API 33)
  4. Android Kotlin Version: 1.8.22

Complete Logs

D/BluetoothAdapter(12367): isLeEnabled(): ON
D/BluetoothLeScanner(12367): onScannerRegistered() - status=0 scannerId=5 mScannerId=0
D/BluetoothAdapter(12367): isLeEnabled(): ON
I/DfuBaseService(12367): DFU service created. Version: 2.3.0
I/DfuBaseService(12367): Starting DFU service in foreground
I/DfuBaseService(12367): Connecting to the device...
D/BluetoothGatt(12367): connect() - device: C3:CE:FE:CF:F5:E9, auto: false
D/BluetoothGatt(12367): registerApp()
D/BluetoothGatt(12367): registerApp() - UUID=832eaa21-d03a-411a-b24d-471893d93208
D/BluetoothGatt(12367): onClientRegistered() - status=0 clientIf=7
D/BluetoothGatt(12367): onClientConnectionState() - status=0 clientIf=7 device=C3:CE:FE:CF:F5:E9
I/DfuBaseService(12367): Connected to GATT server
I/DfuBaseService(12367): Waiting 1600 ms for a possible Service Changed indication...
D/BluetoothGatt(12367): discoverServices() - device: C3:CE:FE:CF:F5:E9
I/DfuBaseService(12367): Attempting to start service discovery... succeed
D/BluetoothGatt(12367): onSearchComplete() = Device=C3:CE:FE:CF:F5:E9 Status=0
I/DfuBaseService(12367): Services discovered
I/DfuImpl (12367): Buttonless service without bond sharing found -> SDK 13 or newer
W/DfuImpl (12367): Device is paired! Use Buttonless DFU with Bond Sharing instead (SDK 14 or newer)
I/DfuImpl (12367): Enabling indications...
D/BluetoothGatt(12367): setCharacteristicNotification() - uuid: 8ec90003-f315-4f60-9fb8-838830daea50 enable: true
I/DfuImpl (12367): Sending Enter Bootloader (Op Code = 1)
I/DfuImpl (12367): Response received (Op Code = 1, Status = 1)
I/DfuBaseService(12367): Disconnecting from the device...
D/BluetoothGatt(12367): cancelOpen() - device: C3:CE:FE:CF:F5:E9
D/BluetoothGatt(12367): onClientConnectionState() - status=0 clientIf=7 device=C3:CE:FE:CF:F5:E9
I/DfuBaseService(12367): Disconnected from GATT server
I/DfuImpl (12367): Device disconnected
W/m.exampleapp.stg(12367): Accessing hidden method Landroid/bluetooth/BluetoothGatt;->refresh()Z (unsupported, reflection, allowed)
D/BluetoothGatt(12367): refresh() - device: C3:CE:FE:CF:F5:E9
I/DfuBaseService(12367): Refreshing result: true
I/DfuBaseService(12367): Cleaning up...
D/BluetoothGatt(12367): cancelOpen() - device: C3:CE:FE:CF:F5:E9
D/BluetoothGatt(12367): close()
D/BluetoothGatt(12367): unregisterApp() - mClientIf=7
I/DfuImpl (12367): Restarting to bootloader mode
D/BluetoothAdapter(12367): isLeEnabled(): ON
D/BluetoothLeScanner(12367): onScannerRegistered() - status=0 scannerId=5 mScannerId=0
D/BluetoothAdapter(12367): isLeEnabled(): ON
I/DfuImpl (12367): Scanning for new address finished with: C3:CE:FE:CF:F5:E9
I/DfuBaseService(12367): Starting DFU service in foreground
I/DfuBaseService(12367): Connecting to the device...
D/BluetoothGatt(12367): connect() - device: C3:CE:FE:CF:F5:E9, auto: false
D/BluetoothGatt(12367): registerApp()
D/BluetoothGatt(12367): registerApp() - UUID=864511eb-3ac0-4b8b-935a-797b07ccb485
D/BluetoothGatt(12367): onClientRegistered() - status=0 clientIf=7
D/BluetoothGatt(12367): onClientConnectionState() - status=0 clientIf=7 device=C3:CE:FE:CF:F5:E9
I/DfuBaseService(12367): Connected to GATT server
I/DfuBaseService(12367): Waiting 1600 ms for a possible Service Changed indication...
D/BluetoothGatt(12367): discoverServices() - device: C3:CE:FE:CF:F5:E9
I/DfuBaseService(12367): Attempting to start service discovery... succeed
D/BluetoothGatt(12367): onConnectionUpdated() - Device=C3:CE:FE:CF:F5:E9 interval=6 latency=0 timeout=500 status=8
D/BluetoothGatt(12367): onConnectionUpdated() - Device=C3:CE:FE:CF:F5:E9 interval=6 latency=0 timeout=500 status=8
D/BluetoothGatt(12367): onClientConnectionState() - status=8 clientIf=6 device=C3:CE:FE:CF:F5:E9
D/FlutterBluePlugin(12367): [onConnectionStateChange] status: 8 newState: 0
D/BluetoothGatt(12367): onClientConnectionState() - status=8 clientIf=7 device=C3:CE:FE:CF:F5:E9
W/DfuBaseService(12367): Target device disconnected with status: 8
I/DfuBaseService(12367): Connection error after: 4087 ms
E/DfuBaseService(12367): An error occurred while connecting to the device: 8
I/DfuBaseService(12367): Attempt: 1
D/BluetoothGatt(12367): refresh() - device: C3:CE:FE:CF:F5:E9
I/DfuBaseService(12367): Refreshing result: true
I/DfuBaseService(12367): Cleaning up...
D/BluetoothGatt(12367): cancelOpen() - device: C3:CE:FE:CF:F5:E9
D/BluetoothGatt(12367): close()
D/BluetoothGatt(12367): unregisterApp() - mClientIf=7
I/DfuBaseService(12367): Restarting the service
I/DfuBaseService(12367): Action received: android.bluetooth.device.action.ACL_DISCONNECTED
I/DfuBaseService(12367): Starting DFU service in foreground
I/DfuBaseService(12367): Connecting to the device...
D/BluetoothGatt(12367): connect() - device: C3:CE:FE:CF:F5:E9, auto: false
D/BluetoothGatt(12367): registerApp()
D/BluetoothGatt(12367): registerApp() - UUID=24d78135-cd9e-4560-b438-004d1494b7f8
D/BluetoothGatt(12367): onClientRegistered() - status=0 clientIf=7
I/TRuntime.CctTransportBackend(12367): Making request to: https://firebaselogging-pa.googleapis.com/v1/firelog/legacy/batchlog
D/TrafficStats(12367): tagSocket(79) with statsTag=0xffffffff, statsUid=-1
D/BluetoothGatt(12367): onClientConnectionState() - status=133 clientIf=7 device=C3:CE:FE:CF:F5:E9
E/DfuBaseService(12367): Connection state change error: 133 newState: 0
I/DfuBaseService(12367): Connection error after: 30025 ms
E/DfuBaseService(12367): Device not reachable. Check if the device with address C3:CE:FE:CF:F5:E9 is in range, is advertising and is connectable
I/DfuBaseService(12367): Attempt: 2
D/BluetoothGatt(12367): refresh() - device: C3:CE:FE:CF:F5:E9
I/DfuBaseService(12367): Refreshing result: true
I/DfuBaseService(12367): Cleaning up...
D/BluetoothGatt(12367): cancelOpen() - device: C3:CE:FE:CF:F5:E9
D/BluetoothGatt(12367): close()
D/BluetoothGatt(12367): unregisterApp() - mClientIf=7
I/DfuBaseService(12367): Restarting the service
I/DfuBaseService(12367): Starting DFU service in foreground
I/DfuBaseService(12367): Connecting to the device...
D/BluetoothGatt(12367): connect() - device: C3:CE:FE:CF:F5:E9, auto: false
D/BluetoothGatt(12367): registerApp()
D/BluetoothGatt(12367): registerApp() - UUID=d2d67250-f09c-426c-bd10-7c280f09bfd3
D/BluetoothGatt(12367): onClientRegistered() - status=0 clientIf=7
I/TRuntime.CctTransportBackend(12367): Status Code: 200
D/BluetoothGatt(12367): onClientConnectionState() - status=133 clientIf=7 device=C3:CE:FE:CF:F5:E9
E/DfuBaseService(12367): Connection state change error: 133 newState: 0
I/DfuBaseService(12367): Connection error after: 30023 ms
E/DfuBaseService(12367): Device not reachable. Check if the device with address C3:CE:FE:CF:F5:E9 is in range, is advertising and is connectable
I/DfuBaseService(12367): Attempt: 3
I/DfuBaseService(12367): Cleaning up...
D/BluetoothGatt(12367): cancelOpen() - device: C3:CE:FE:CF:F5:E9
D/BluetoothGatt(12367): close()
D/BluetoothGatt(12367): unregisterApp() - mClientIf=7
I/DfuBaseService(12367): DFU service destroyed
E/flutter (12367): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(133, DFU FAILED: GATT ERROR, Address: C3:CE:FE:CF:F5:E9, Error Type: 1, null)
E/flutter (12367): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:652:7)
E/flutter (12367): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:310:18)
E/flutter (12367): <asynchronous suspension>
E/flutter (12367): 
D/BluetoothGatt(12367): refresh() - device: C3:CE:FE:CF:F5:E9
D/clearGattCache(12367): CLEAR GATT CACHE: true
D/BluetoothGatt(12367): onClientConnectionState() - status=0 clientIf=6 device=C3:CE:FE:CF:F5:E9
D/FlutterBluePlugin(12367): [onConnectionStateChange] status: 0 newState: 2
D/BluetoothGatt(12367): discoverServices() - device: C3:CE:FE:CF:F5:E9
D/BluetoothGatt(12367): onConnectionUpdated() - Device=C3:CE:FE:CF:F5:E9 interval=6 latency=0 timeout=500 status=0
D/BluetoothGatt(12367): onSearchComplete() = Device=C3:CE:FE:CF:F5:E9 Status=0
D/FlutterBluePlugin(12367): [onServicesDiscovered] count: 5 status: 0

DFU Fails with `201` on iOS

Hi,
After I startDFU i'm getting the following error on iOS while on Android it works fine:

PlatformException(201, FU FAILED: Device failed to connect, Address: B62B1F0B-8421 DC3A-50D1-B511CC27B4E6, Error type 201, null)

Here is the startDFU Code:

Future<void> doDfu(String deviceId) async {
    stateDFU = UpdateProcessStates.UpdateProcessStatesUpdating;
    try {
      var s = await NordicDfu().startDfu(
        deviceId,
        '${widget.path}',
        fileInAsset: false,
        iosSpecialParameter: IosSpecialParameter(
          forceScanningForNewAddressInLegacyDfu: true,
        ),
        onDeviceDisconnecting: (string) {
          debugPrint('deviceAddress: $string');
        },
        onProgressChanged: (
          deviceAddress,
          percent,
          speed,
          avgSpeed,
          currentPart,
          partsTotal,
        ) {
          print('deviceAddress: $deviceAddress, percent: $percent');
          setState(() {
            progress = percent;
          });
        },
      );

      print(s);

      stateDFU = UpdateProcessStates.UpdateProcessStatesDone;
    } catch (e, s) {
      stateDFU = UpdateProcessStates.UpdateProcessStatesFailed;
      print(e.toString());
    }
  }

Version 6.1.0 causes `Error while dexing`

With version 6.0.1, my app works perfectly fine, but after upgrading to version 6.1.0, I'm not able to launch the app and I'm seeing the following error(s) in my logs:

e: file:///Users/shubhamsingh/.pub-cache/hosted/pub.dev/nordic_dfu-6.1.0/android/src/main/kotlin/dev/steenbakker/nordicdfu/NordicDfuPlugin.kt:102:18 Unresolved reference: ResourceUtils
e: file:///Users/shubhamsingh/.pub-cache/hosted/pub.dev/nordic_dfu-6.1.0/android/src/main/kotlin/dev/steenbakker/nordicdfu/NordicDfuPlugin.kt:192:48 Unresolved reference: DfuService
ERROR:D8: com.android.tools.r8.kotlin.H

FAILURE: Build completed with 2 failures.

1: Task failed with an exception.
-----------
* What went wrong:
Execution failed for task ':nordic_dfu:compileDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction
   > Compilation error. See log for more details

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
==============================================================================

2: Task failed with an exception.
-----------
* What went wrong:
Execution failed for task ':app:mergeExtDexStagingDebug'.
> Could not resolve all files for configuration ':app:stagingDebugRuntimeClasspath'.
   > Failed to transform kotlin-stdlib-1.9.0.jar (org.jetbrains.kotlin:kotlin-stdlib:1.9.0) to match attributes {artifactType=android-dex, asm-transformed-variant=NONE, dexing-enable-desugaring=true, dexing-enable-jacoco-instrumentation=false, dexing-is-debuggable=true, dexing-min-sdk=21, org.gradle.category=library, org.gradle.libraryelements=jar, org.gradle.status=release, org.gradle.usage=java-runtime}.
      > Execution failed for DexingWithClasspathTransform: /Users/shubhamsingh/.gradle/caches/transforms-3/b6d42f18effa0ab4939cd991444ac54f/transformed/jetified-kotlin-stdlib-1.9.0.jar.
         > Error while dexing.

I believe specifically these lines are the cause:

e: file:///Users/shubhamsingh/.pub-cache/hosted/pub.dev/nordic_dfu-6.1.0/android/src/main/kotlin/dev/steenbakker/nordicdfu/NordicDfuPlugin.kt:102:18 Unresolved reference: ResourceUtils
e: file:///Users/shubhamsingh/.pub-cache/hosted/pub.dev/nordic_dfu-6.1.0/android/src/main/kotlin/dev/steenbakker/nordicdfu/NordicDfuPlugin.kt:192:48 Unresolved reference: DfuService

Could you please help with this @juliansteenbakker?

DFU CHARACTERISTICS NOT FOUND

Hi, I'm having a problem with something, the package it seems.
I try to do the ota and it always fails with DFU FAILED: DFU CHARACTERISTICS NOT FOUND on both iOS and Android.
It works through nrf connect.
I can see the service being discovered by other ble packages.
No idea what might be wrong.

(I have tried setting enableUnsafeExperimentalButtonlessServiceInSecureDfu to true)

Updating the firmware is not working at all

I'm trying to update the firmware version of my Movesense sensors in my Flutter App, here's what i'm doing:

      @override
      Future<void> startDeviceFirmwareUpdate(String deviceId, String serial, int value) async {
    final Map<String, int> contract = {};
    contract["NewState"] = value;
    await MdsAsync.put(Mds.createRequestUri(serial, "/System/Mode"), jsonEncode(contract));
    
      NordicDfu().startDfu(
        deviceId,
        'assets/dfu.zip',
        fileInAsset: true,
        onDeviceDisconnecting: (string) {
          print('deviceAddress: $string');
        },
        onDeviceConnected: (address) {
          print("device is connected");
        },
        onDeviceConnecting: (address) {
          print("Device is connecting");
        },
        forceDfu: true,
        onError: (address, error, errorType, message) {
          print(" error  $error, errorType: $errorType, message: $message");
        },
        onProgressChanged: (
          deviceAddress,
          percent,
          speed,
          avgSpeed,
          currentPart,
          partsTotal,
        ) {
          print('deviceAddress: $deviceAddress, percent: $percent');
        },
      );
    
  }

calling the function :

      void connectMovesenseBleDeviceById({
    required BleDevice device,
    required VoidCallback onConnect,
    required VoidCallback onDisconnect,
     }) 
     bleDataSource.connectMovesenseDeviceById(
          device.id,
          onConnnect: (serial) async {
            final metaData = await bleDataSource.getMovesenseSensorInfo(device.serial);
            final deviceAppData = await bleDataSource.getMovesenseSensorAppInfo(device.serial);
            device.metaData = metaData;
            device.appData = deviceAppData;
            // HERE'S where I'm calling it ===>
            bleDataSource.startDeviceFirmwareUpdate(device.id, device.serial, 12);
            if (device.metaData!.isCompatible && device.appData!.isCompatible) {
              onConnect();
              bleDeviceLocalDataSource.persistBleDevice(bleDeviceModel: device as BleDeviceModel);
            }
            if (!_connectedDevicesStreamController.isClosed)
              _connectedDevicesStreamController
                  .add(device.copyWith(status: BleDeviceConnectionStatus.connected) as BleDeviceModel);
          },
          onDisconnect: () {
            onDisconnect();
            if (!_connectedDevicesStreamController.isClosed)
              _connectedDevicesStreamController
                  .add(device.copyWith(status: BleDeviceConnectionStatus.disconnected) as BleDeviceModel);
          },
          onError: () {
            //TODO: add translations and exception
            throw BluetoothException('Error occured when pairing the device');
          },
        );
      }

My problem here is that after putting the device into update mode, it disconnects from the phone, AND the NordicDfu().startDfu() doesn't print anything, i can't tell if the state of the device.
meaning I can't update it successfully. how can I achieve my goal?

sending information from kotlin to flutter

I am currently using your plugin locally and trying to integrate it into an app that I am currently developing. The DFU update is working and I can read print statements that I inserted into the kotlin code in the debug console. However, unlike when I run the example app, the progressListener messages are not observable in the debug console and print statements that I put in the setMethodCallHandler are not being executed. I put print statements around invokeMethod in NordicDfuPlugin.kt and the debug console detects it. I am not sure if this is a thread issue. I am currently testing using an Android 12 phone and VSCode.

Is it possible to help me with this? Thank you very much!

Error on build app

Hello, when I try to run the production build, I get the following error:

FAILURE: Build failed with an exception.

What went wrong:
Execution failed for task ':nordic_dfu:compileReleaseJavaWithJavac'.
error: invalid source release: 17

The version of Flutter we are using is the following, using FVM:

[✓] Flutter (Channel stable, 3.0.5, on macOS 13.4.1 22F770820d darwin-arm, locale it-IT)

How can I resolve this issue? Because when I remove your plugin, it works correctly 😅

DefaultDfuProgressListenerAdapter callbacks will not called on Android 11

On my Android 11 (Google Pixel 3a) DefaultDfuProgressListenerAdapter will not called.

      final dfuListener = DefaultDfuProgressListenerAdapter(
        onProgressChangedHandle: (
          deviceAddress,
          percent,
          speed,
          avgSpeed,
          currentPart,
          partsTotal,
        ) {
          dfuPercent = (percent ?? 0);
          log(
            'startOta: progressValue: $dfuPercent for device: $id',
            name: runtimeType.toString(),
            time: DateTime.now(),
          );
          addProgress(2 / 3 + (dfuPercent / 100) / 3);
        },
        onDfuProcessStartedHandle: (address) {
          log(
            "startOta: onDfuProcessStartedHandle for device: $id",
            name: runtimeType.toString(),
            time: DateTime.now(),
          );
        },
        onDeviceConnectedHandle: (address) {
          log(
            "startOta: onDeviceConnectedHandle for device: $id",
            name: runtimeType.toString(),
            time: DateTime.now(),
          );
        },
        onDfuCompletedHandle: (address) async {
          log(
            "startOta: onComplete for device: $id",
            name: runtimeType.toString(),
            time: DateTime.now(),
          );
          bluetoothUtil.isFirmwareUpdating = false;
          await SharedPrefUtils.setIsFirmware(false);
          downloadProgressStream.close();
        },
        onErrorHandle: (
          deviceAddress,
          error,
          errorType,
          message,
        ) {
          log(
            'startOta: onErrorHandle: $message for device: $id',
            name: runtimeType.toString(),
            time: DateTime.now(),
          );
          downloadProgressStream.addError(Exception(message));
        },
      );
      await NordicDfu.startDfu(
        id,
        path,
        progressListener: dfuListener,
      );
Launching lib/main.dart on Pixel 3a in debug mode...
✓  Built build/app/outputs/flutter-apk/app-debug.apk.
W/FlutterActivityAndFragmentDelegate(11187): A splash screen was provided to Flutter, but this is deprecated. See flutter.dev/go/android-splash-migration for migration steps.
W/System  (11187): Ignoring header If-None-Match because its value was null.
Connecting to VM Service at ws://127.0.0.1:62530/6_vz42wy764=/ws
D/FRCPlugin(11187): Sending fetchTimeout: 60
D/FRCPlugin(11187): Sending fetchTimeout: 10
W/System  (11187): Ignoring header If-None-Match because its value was null.
D/FRCPlugin(11187): Sending fetchTimeout: 10
I/FLTFireBGExecutor(11187): Creating background FlutterEngine instance, with args: [--start-paused, --enable-dart-profiling]
I/FLTFireMsgService(11187): FlutterFirebaseMessagingBackgroundService started!
[log] [JOB]031a8e7a081e4c817319251ef8b42d00:triggered by opened_app
[log] [JOB]031a8e7a081e4c817319251ef8b42d00:triggered by opened_app
[log] [JOB]031a8e7a081e4c817319251ef8b42d00:triggered by opened_app
[log] [JOB]031a8e7a081e4c817319251ef8b42d00:triggered by opened_app
D/TransportRuntime.CctTransportBackend(11187): Making request to: https://firebaselogging-pa.googleapis.com/v1/firelog/legacy/batchlog
I/TransportRuntime.CctTransportBackend(11187): Status Code: 200
I/TransportRuntime.CctTransportBackend(11187): Content-Type: application/json; charset=UTF-8
I/TransportRuntime.CctTransportBackend(11187): Content-Encoding: gzip
I/flutter (11187): unhandled element filter; Picture key: AssetBundlePictureKey(bundle: PlatformAssetBundle#da405(), name: "packages/healy_ui/lib/assets/icons/Icons_Arrows_Right.svg", colorFilter: null)
I/AssistStructure(11187): Flattened final assist data: 644 bytes, containing 1 windows, 4 views
W/IInputConnectionWrapper(11187): beginBatchEdit on inactive InputConnection
W/IInputConnectionWrapper(11187): getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper(11187): getTextAfterCursor on inactive InputConnection
W/IInputConnectionWrapper(11187): getSelectedText on inactive InputConnection
W/IInputConnectionWrapper(11187): endBatchEdit on inactive InputConnection
W/IInputConnectionWrapper(11187): beginBatchEdit on inactive InputConnection
W/IInputConnectionWrapper(11187): endBatchEdit on inactive InputConnection
W/IInputConnectionWrapper(11187): beginBatchEdit on inactive InputConnection
W/IInputConnectionWrapper(11187): endBatchEdit on inactive InputConnection
[log] [JOB]031a8e7a081e4c817319251ef8b42d00:triggered by opened_app
[log] [JOB]031a8e7a081e4c817319251ef8b42d00:triggered by opened_app
[log] [JOB]031a8e7a081e4c817319251ef8b42d00:triggered by opened_app
[log] [JOB]031a8e7a081e4c817319251ef8b42d00:triggered by opened_app
W/System  (11187): Ignoring header X-Firebase-Locale because its value was null.
W/System  (11187): Ignoring header X-Firebase-Locale because its value was null.
D/FirebaseAuth(11187): Notifying id token listeners about user ( a77355bb4fc1ec1c ).
D/FirebaseAuth(11187): Notifying auth state listeners about user ( a77355bb4fc1ec1c ).
W/DynamiteModule(11187): Local module descriptor class for com.google.android.gms.providerinstaller.dynamite not found.
I/DynamiteModule(11187): Considering local module com.google.android.gms.providerinstaller.dynamite:0 and remote module com.google.android.gms.providerinstaller.dynamite:0
W/ProviderInstaller(11187): Failed to load providerinstaller module: No acceptable module found. Local version is 0 and remote version is 0.
I/orld.healywatc(11187): The ClassLoaderContext is a special shared library.
I/orld.healywatc(11187): The ClassLoaderContext is a special shared library.
W/ProviderInstaller(11187): Failed to report request stats: com.google.android.gms.common.security.ProviderInstallerImpl.reportRequestStats [class android.content.Context, long]
V/NativeCrypto(11187): Registering com/google/android/gms/org/conscrypt/NativeCrypto's 294 native methods...
W/orld.healywatc(11187): Accessing hidden method Ljava/security/spec/ECParameterSpec;->getCurveName()Ljava/lang/String; (greylist, reflection, allowed)
I/ProviderInstaller(11187): Installed default security provider GmsCore_OpenSSL
W/orld.healywatc(11187): Accessing hidden field Ljava/net/Socket;->impl:Ljava/net/SocketImpl; (greylist, reflection, allowed)
W/orld.healywatc(11187): Accessing hidden method Ldalvik/system/CloseGuard;->get()Ldalvik/system/CloseGuard; (greylist,core-platform-api, linking, allowed)
W/orld.healywatc(11187): Accessing hidden method Ldalvik/system/CloseGuard;->open(Ljava/lang/String;)V (greylist,core-platform-api, linking, allowed)
W/orld.healywatc(11187): Accessing hidden method Ljava/security/spec/ECParameterSpec;->setCurveName(Ljava/lang/String;)V (greylist, reflection, allowed)
W/orld.healywatc(11187): Accessing hidden method Ldalvik/system/BlockGuard;->getThreadPolicy()Ldalvik/system/BlockGuard$Policy; (greylist,core-platform-api, linking, allowed)
W/orld.healywatc(11187): Accessing hidden method Ldalvik/system/BlockGuard$Policy;->onNetwork()V (greylist, linking, allowed)
I/orld.healywatc(11187): Background concurrent copying GC freed 925539(30MB) AllocSpace objects, 100(4876KB) LOS objects, 66% free, 20MB/60MB, paused 71us total 256.252ms
I/orld.healywatc(11187): Background young concurrent copying GC freed 1086707(30MB) AllocSpace objects, 0(0B) LOS objects, 48% free, 31MB/60MB, paused 50us total 170.909ms
I/orld.healywatc(11187): Background concurrent copying GC freed 799089(33MB) AllocSpace objects, 3(204KB) LOS objects, 61% free, 30MB/78MB, paused 64us total 207.491ms
I/orld.healywatc(11187): Background young concurrent copying GC freed 1426310(39MB) AllocSpace objects, 7(2060KB) LOS objects, 29% free, 54MB/78MB, paused 408us total 128.159ms
I/Choreographer(11187): Skipped 64 frames!  The application may be doing too much work on its main thread.
D/TransportRuntime.SQLiteEventStore(11187): Storing event with priority=DEFAULT, name=FIREPERF for destination cct
D/TransportRuntime.JobInfoScheduler(11187): Scheduling upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy1wYS5nb29nbGVhcGlzLmNvbS92MS9maXJlbG9nL2xlZ2FjeS9iYXRjaGxvZ1xBSXphU3lDY2traUg4aTJaQVJ3T3MxTEV6RktsZDE1YU9HOG96S28=) with jobId=1584476890 in 30000ms(Backend next call timestamp 1638953741160). Attempt 1
D/TransportRuntime.SQLiteEventStore(11187): Storing event with priority=DEFAULT, name=FIREPERF for destination cct
D/TransportRuntime.JobInfoScheduler(11187): Upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy1wYS5nb29nbGVhcGlzLmNvbS92MS9maXJlbG9nL2xlZ2FjeS9iYXRjaGxvZ1xBSXphU3lDY2traUg4aTJaQVJ3T3MxTEV6RktsZDE1YU9HOG96S28=) is already scheduled. Returning...
[HealyWatchSDK - BluetoothConnectionUtil] init
I/flutter (11187): BleStatus.unknown
I/flutter (11187): BleStatus.unauthorized
[log] [JOB]031a8e7a081e4c817319251ef8b42d00:triggered by opened_app
[log] [JOB]031a8e7a081e4c817319251ef8b42d00:triggered by opened_app
[log] [JOB]031a8e7a081e4c817319251ef8b42d00:triggered by opened_app
[log] [JOB]031a8e7a081e4c817319251ef8b42d00:triggered by opened_app
I/flutter (11187): BleStatus.ready
[HealyWatchSDK - BluetoothConnectionUtil] toConnectExistId
I/flutter (11187): isFirmware null
[HealyWatchSDK - BluetoothConnectionUtil] startScan with filter: healy watch and serviceIds: []
D/BluetoothAdapter(11187): isLeEnabled(): ON
D/BluetoothLeScanner(11187): onScannerRegistered() - status=0 scannerId=9 mScannerId=0
[HealyWatchSDK - BluetoothConnectionUtil] startScan found device: E0:6F:7C:E8:B3:32
D/TransportRuntime.CctTransportBackend(11187): Making request to: https://firebaselogging-pa.googleapis.com/v1/firelog/legacy/batchlog
I/TransportRuntime.CctTransportBackend(11187): Status Code: 200
I/TransportRuntime.CctTransportBackend(11187): Content-Type: application/json; charset=UTF-8
I/TransportRuntime.CctTransportBackend(11187): Content-Encoding: gzip
[HealyWatchSDK - BluetoothConnectionUtil] startScan found device: E0:6F:7C:E8:B3:32
[log] UpdatedScanResultsState: [Instance of 'DeviceSelectionModel']
[log] emit: DeviceLoadingState
[HealyWatchSDK - BluetoothConnectionUtil] stopScan
D/BluetoothAdapter(11187): isLeEnabled(): ON
[HealyWatchSDK - BluetoothConnectionUtil] connectWithDevice E0:6F:7C:E8:B3:32
[HealyWatchSDK - BluetoothConnectionUtil] reconnectDevice to device id: E0:6F:7C:E8:B3:32 name: Healy Watch-B332 with autoReconnect false
[HealyWatchSDK - BluetoothConnectionUtil] connect to device: id: E0:6F:7C:E8:B3:32 name: Healy Watch-B332
[HealyWatchSDK - BluetoothConnectionUtil] connect set connection subscription
[log] emit: DeviceConnectedState
D/TransportRuntime.SQLiteEventStore(11187): Storing event with priority=DEFAULT, name=FIREPERF for destination cct
D/TransportRuntime.JobInfoScheduler(11187): Scheduling upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy1wYS5nb29nbGVhcGlzLmNvbS92MS9maXJlbG9nL2xlZ2FjeS9iYXRjaGxvZ1xBSXphU3lDY2traUg4aTJaQVJ3T3MxTEV6RktsZDE1YU9HOG96S28=) with jobId=1584476890 in 30000ms(Backend next call timestamp 1638953836801). Attempt 1
D/BluetoothGatt(11187): connect() - device: E0:6F:7C:E8:B3:32, auto: false
D/BluetoothGatt(11187): registerApp()
D/BluetoothGatt(11187): registerApp() - UUID=08e88fe0-7948-4c1e-97f0-2e3abc0b68dd
D/BluetoothGatt(11187): onClientRegistered() - status=0 clientIf=9
[HealyWatchSDK - BluetoothConnectionUtil] connect connection state for device id: E0:6F:7C:E8:B3:32 name: Healy Watch-B332 : DeviceConnectionState.connecting
[log] connectionStateToUiState: DeviceConnectionState.connecting
[log] emit: DeviceLoadingState
D/BluetoothGatt(11187): onClientConnectionState() - status=0 clientIf=9 device=E0:6F:7C:E8:B3:32
[HealyWatchSDK - BluetoothConnectionUtil] connect connection state for device id: E0:6F:7C:E8:B3:32 name: Healy Watch-B332 : DeviceConnectionState.connected
[HealyWatchSDK - BluetoothConnectionUtil] connect connected device id: E0:6F:7C:E8:B3:32 name: Healy Watch-B332 successfully
[SharedPrefUtils] setConnectedDevice: id: E0:6F:7C:E8:B3:32 name: Healy Watch-B332
[HealyWatchSDK - BluetoothConnectionUtil] enableNotification for device E0:6F:7C:E8:B3:32
[log] connectionStateToUiState: DeviceConnectionState.connected
D/BluetoothGatt(11187): discoverServices() - device: E0:6F:7C:E8:B3:32
[log] emit: DeviceConnectedState
D/BluetoothGatt(11187): onPhyUpdate() - status=0 address=E0:6F:7C:E8:B3:32 txPhy=2 rxPhy=2
D/BluetoothGatt(11187): onConnectionUpdated() - Device=E0:6F:7C:E8:B3:32 interval=6 latency=0 timeout=500 status=0
D/BluetoothGatt(11187): onSearchComplete() = Device=E0:6F:7C:E8:B3:32 Status=0
D/BluetoothGatt(11187): setCharacteristicNotification() - uuid: 0000fff7-0000-1000-8000-00805f9b34fb enable: true
I/flutter (11187): write: 03 00 00 00 00 00 80 00 00 00 00 00 00 00 00 83
I/flutter (11187): write: 27 00 00 00 00 00 00 00 00 00 00 00 00 00 00 27
I/flutter (11187): notifyData 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03
D/BluetoothGatt(11187): onConnectionUpdated() - Device=E0:6F:7C:E8:B3:32 interval=36 latency=0 timeout=500 status=0
I/flutter (11187): notifyData 27 01 01 04 03 21 06 18 4a 19 29 00 02 08 aa 04 14 cd 25 fe
I/flutter (11187): write: 01 21 12 08 09 56 53 00 00 00 00 00 00 00 00 ee
I/flutter (11187): notifyData 01 a0 00 00 00 00 00 00 00 00 00 00 00 00 00 a1
[log] initBluetoothFunctions
[log] fetchHealyWatchSettings
W/FA      (11187): Invalid screen class length for screen view. Length: 0
[FirmwareUpdateCubit] Check if firmware update available
[FirmwareUpdateCubit] Found new firmware version 1.1.4.3
[log] "https://firebasestorage.googleapis.com/v0/b/healy-watch.appspot.com/o/firmware%2FJ1929_V1143_20210618_UI_FW.zip?alt=media&token=ef3eb6e1-0aa9-4d1e-bc95-d81e5cacc2c6"
[log] [JOB]702fa8d4cdbd3a0192d366fdcdee62bc:triggered by timer_trigger
I/flutter (11187): write: 09 01 00 00 00 00 00 00 00 00 00 00 00 00 00 0a
I/flutter (11187): notifyData 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[FirmwareUpdateCubit] Check if firmware update available
[FirmwareUpdateCubit] Found new firmware version 1.1.4.3
[log] "https://firebasestorage.googleapis.com/v0/b/healy-watch.appspot.com/o/firmware%2FJ1929_V1143_20210618_UI_FW.zip?alt=media&token=ef3eb6e1-0aa9-4d1e-bc95-d81e5cacc2c6"
[log] fetchHealyWatchSettings
[FirmwareUpdateCubit] Check if firmware update available
[FirmwareUpdateCubit] Found new firmware version 1.1.4.3
[log] "https://firebasestorage.googleapis.com/v0/b/healy-watch.appspot.com/o/firmware%2FJ1929_V1143_20210618_UI_FW.zip?alt=media&token=ef3eb6e1-0aa9-4d1e-bc95-d81e5cacc2c6"
[HealyWatchSDKImplementation] downloadLatestFirmwareUpdate - start
[HealyWatchSDKImplementation] Firmware update will be saved here: /data/user/0/net.healyworld.healywatch/app_flutter
I/flutter (11187): write: 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 13
I/flutter (11187): write: 27 00 00 00 00 00 00 00 00 00 00 00 00 00 00 27
I/flutter (11187): notifyData 13 52 00 39 65 ee 39 28 00 00 00 00 00 00 00 52
I/flutter (11187): notifyData 27 01 01 04 03 21 06 18 4a 19 29 00 02 08 aa 04 14 cd 25 fe
I/flutter (11187): write: 62 00 00 00 00 00 00 00 00 00 00 00 00 00 00 62
I/flutter (11187): notifyData 62 a1 00 00 00 92 00 00 00 00 00 00 00 00 00 95
I/flutter (11187): write: 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 22
I/flutter (11187): notifyData 22 e0 6f 7c e8 b3 32 00 01 00 00 00 00 00 00 bb
I/flutter (11187): write: 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 13
I/flutter (11187): notifyData 13 52 00 39 62 ee 39 28 00 00 00 00 00 00 00 4f
I/flutter (11187): write: 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04
I/flutter (11187): notifyData 04 01 00 00 01 01 00 00 00 3c 00 0f 01 02 06 01
[log] Downloading Firmware update: 0.000504622156560544
I/flutter (11187): write: 2b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2b
[log] Downloading Firmware update: 0.004109934672709973
[log] Downloading Firmware update: 0.007715247188859402
[log] Downloading Firmware update: 0.011320559705008832
[log] Downloading Firmware update: 0.01492587222115826
[log] Downloading Firmware update: 0.01853118473730769
[log] Downloading Firmware update: 0.022136497253457118
[log] Downloading Firmware update: 0.025741809769606546
[log] Downloading Firmware update: 0.029347122285755974
[log] Downloading Firmware update: 0.032952434801905406
[log] Downloading Firmware update: 0.036557747318054834
[log] Downloading Firmware update: 0.04016305983420426
[log] Downloading Firmware update: 0.04376837235035369
[log] Downloading Firmware update: 0.04550415097322159
[log] Downloading Firmware update: 0.049109463489371015
[log] Downloading Firmware update: 0.05271477600552044
[log] Downloading Firmware update: 0.05632008852166987
[log] Downloading Firmware update: 0.0599254010378193
I/flutter (11187): notifyData 2b 02 00 00 23 59 7f 3c 00 00 00 00 00 00 00 64
[log] Downloading Firmware update: 0.06353071355396873
[log] Downloading Firmware update: 0.06713602607011816
[log] Downloading Firmware update: 0.07074133858626759
[log] Downloading Firmware update: 0.07434665110241702
[log] Downloading Firmware update: 0.07795196361856645
[log] Downloading Firmware update: 0.08155727613471588
[log] Downloading Firmware update: 0.0851625886508653
[log] Downloading Firmware update: 0.08876790116701473
[log] Downloading Firmware update: 0.09237321368316416
[log] Downloading Firmware update: 0.0953097498472454
[log] Downloading Firmware update: 0.09891506236339483
[log] Downloading Firmware update: 0.10252037487954425
[log] Downloading Firmware update: 0.10612568739569368
[log] Downloading Firmware update: 0.10973099991184311
[log] Downloading Firmware update: 0.11333631242799255
[log] Downloading Firmware update: 0.11694162494414198
[log] Downloading Firmware update: 0.12054693746029141
[log] Downloading Firmware update: 0.12415224997644084
[log] Downloading Firmware update: 0.12775756249259027
[log] Downloading Firmware update: 0.1313628750087397
[log] Downloading Firmware update: 0.13496818752488912
[log] Downloading Firmware update: 0.13857350004103855
[log] Downloading Firmware update: 0.14217881255718798
[log] Downloading Firmware update: 0.14511534872126922
[log] Downloading Firmware update: 0.14872066123741864
[log] Downloading Firmware update: 0.15232597375356807
[log] Downloading Firmware update: 0.1559312862697175
[log] Downloading Firmware update: 0.15953659878586693
[log] Downloading Firmware update: 0.16314191130201636
[log] Downloading Firmware update: 0.16674722381816579
[log] Downloading Firmware update: 0.1703525363343152
[log] Downloading Firmware update: 0.17395784885046464
[log] Downloading Firmware update: 0.17756316136661407
[log] Downloading Firmware update: 0.1811684738827635
[log] Downloading Firmware update: 0.18477378639891293
[log] Downloading Firmware update: 0.18837909891506235
[log] Downloading Firmware update: 0.19198441143121178
[log] Downloading Firmware update: 0.1948844688851802
[log] Downloading Firmware update: 0.19848978140132964
[log] Downloading Firmware update: 0.20209509391747907
[log] Downloading Firmware update: 0.2057004064336285
[log] Downloading Firmware update: 0.20930571894977792
[log] Downloading Firmware update: 0.21291103146592735
[log] Downloading Firmware update: 0.21651634398207678
[log] Downloading Firmware update: 0.2201216564982262
[log] Downloading Firmware update: 0.22372696901437567
[log] Downloading Firmware update: 0.2273322815305251
[log] Downloading Firmware update: 0.23093759404667452
[log] Downloading Firmware update: 0.23454290656282395
[log] Downloading Firmware update: 0.23814821907897338
[log] Downloading Firmware update: 0.2417535315951228
[log] Downloading Firmware update: 0.24469006775920404
[log] Downloading Firmware update: 0.24829538027535347
[log] Downloading Firmware update: 0.2519006927915029
[log] Downloading Firmware update: 0.25550600530765233
[log] Downloading Firmware update: 0.25911131782380176
[log] Downloading Firmware update: 0.2627166303399512
[log] Downloading Firmware update: 0.2663219428561006
[log] Downloading Firmware update: 0.26992725537225004
[log] Downloading Firmware update: 0.27353256788839947
[log] Downloading Firmware update: 0.2771378804045489
[log] Downloading Firmware update: 0.2807431929206983
[log] Downloading Firmware update: 0.28434850543684775
[log] Downloading Firmware update: 0.2879538179529972
[log] Downloading Firmware update: 0.2915591304691466
[log] Downloading Firmware update: 0.29449566663322785
[log] Downloading Firmware update: 0.2981009791493773
[log] Downloading Firmware update: 0.3017062916655267
[log] Downloading Firmware update: 0.30531160418167613
[log] Downloading Firmware update: 0.30891691669782556
[log] Downloading Firmware update: 0.312522229213975
[log] Downloading Firmware update: 0.3161275417301244
[log] Downloading Firmware update: 0.31973285424627385
[log] Downloading Firmware update: 0.3233381667624233
[log] Downloading Firmware update: 0.3269434792785727
[log] Downloading Firmware update: 0.33054879179472213
[log] Downloading Firmware update: 0.33415410431087156
[log] Downloading Firmware update: 0.337759416827021
[log] Downloading Firmware update: 0.3413647293431704
[log] Downloading Firmware update: 0.34430126550725165
[log] Downloading Firmware update: 0.3479065780234011
[log] Downloading Firmware update: 0.3515118905395505
[log] Downloading Firmware update: 0.35511720305569994
[log] Downloading Firmware update: 0.35872251557184937
[log] Downloading Firmware update: 0.3623278280879988
[log] Downloading Firmware update: 0.3659331406041482
[log] Downloading Firmware update: 0.36953845312029765
[log] Downloading Firmware update: 0.3731437656364471
[log] Downloading Firmware update: 0.3767490781525965
[log] Downloading Firmware update: 0.38035439066874593
[log] Downloading Firmware update: 0.38395970318489536
[log] Downloading Firmware update: 0.3875650157010448
[log] Downloading Firmware update: 0.3911703282171942
[log] Downloading Firmware update: 0.39410686438127546
[log] Downloading Firmware update: 0.3977121768974249
[log] Downloading Firmware update: 0.4013174894135743
[log] Downloading Firmware update: 0.40492280192972374
[log] Downloading Firmware update: 0.40852811444587317
[log] Downloading Firmware update: 0.4121334269620226
[log] Downloading Firmware update: 0.415738739478172
[log] Downloading Firmware update: 0.41934405199432145
[log] Downloading Firmware update: 0.4229493645104709
[log] Downloading Firmware update: 0.42655467702662037
[log] Downloading Firmware update: 0.4301599895427698
[log] Downloading Firmware update: 0.4337653020589192
[log] Downloading Firmware update: 0.43737061457506865
[log] Downloading Firmware update: 0.4409759270912181
[log] Downloading Firmware update: 0.4439124632552993
[log] Downloading Firmware update: 0.44751777577144874
[log] Downloading Firmware update: 0.4511230882875982
[log] Downloading Firmware update: 0.4547284008037476
[log] Downloading Firmware update: 0.45833371331989703
[log] Downloading Firmware update: 0.46193902583604646
[log] Downloading Firmware update: 0.4655443383521959
[log] Downloading Firmware update: 0.4691496508683453
[log] Downloading Firmware update: 0.47275496338449474
[log] Downloading Firmware update: 0.47636027590064417
[log] Downloading Firmware update: 0.4799655884167936
[log] Downloading Firmware update: 0.483570900932943
[log] Downloading Firmware update: 0.48717621344909245
[log] Downloading Firmware update: 0.4907815259652419
[log] Downloading Firmware update: 0.4943868384813913
[log] Downloading Firmware update: 0.49799215099754074
[log] Downloading Firmware update: 0.5015974635136902
[log] Downloading Firmware update: 0.5052027760298395
[log] Downloading Firmware update: 0.508808088545989
[log] Downloading Firmware update: 0.5124134010621384
[log] Downloading Firmware update: 0.5160187135782879
[log] Downloading Firmware update: 0.5196240260944373
[log] Downloading Firmware update: 0.5232293386105867
[log] Downloading Firmware update: 0.5268346511267361
[log] Downloading Firmware update: 0.5304399636428856
[log] Downloading Firmware update: 0.534045276159035
[log] Downloading Firmware update: 0.5376505886751844
[log] Downloading Firmware update: 0.5412559011913338
[log] Downloading Firmware update: 0.5435236610033469
[log] Downloading Firmware update: 0.5471289735194963
[log] Downloading Firmware update: 0.5507342860356458
[log] Downloading Firmware update: 0.5543395985517952
[log] Downloading Firmware update: 0.5579449110679446
[log] Downloading Firmware update: 0.5615502235840941
[log] Downloading Firmware update: 0.5651555361002435
[log] Downloading Firmware update: 0.568760848616393
[log] Downloading Firmware update: 0.5723661611325424
[log] Downloading Firmware update: 0.5759714736486918
[log] Downloading Firmware update: 0.5795767861648412
[log] Downloading Firmware update: 0.5831820986809907
[log] Downloading Firmware update: 0.5867874111971401
[log] Downloading Firmware update: 0.5903927237132895
[log] Downloading Firmware update: 0.5933292598773707
[log] Downloading Firmware update: 0.5969345723935202
[log] Downloading Firmware update: 0.6005398849096696
[log] Downloading Firmware update: 0.6041451974258191
[log] Downloading Firmware update: 0.6077505099419684
[log] Downloading Firmware update: 0.6113558224581179
[log] Downloading Firmware update: 0.6149611349742673
[log] Downloading Firmware update: 0.6185664474904168
[log] Downloading Firmware update: 0.6221717600065662
[log] Downloading Firmware update: 0.6257770725227156
[log] Downloading Firmware update: 0.629382385038865
[log] Downloading Firmware update: 0.6329876975550145
[log] Downloading Firmware update: 0.6365930100711639
[log] Downloading Firmware update: 0.6401983225873134
[log] Downloading Firmware update: 0.6438036351034627
[log] Downloading Firmware update: 0.6474089476196122
[log] Downloading Firmware update: 0.6510142601357616
[log] Downloading Firmware update: 0.6546195726519111
[log] Downloading Firmware update: 0.6582248851680604
[log] Downloading Firmware update: 0.6618301976842099
[log] Downloading Firmware update: 0.6654355102003593
[log] Downloading Firmware update: 0.6690408227165088
[log] Downloading Firmware update: 0.6726461352326581
[log] Downloading Firmware update: 0.6762514477488076
[log] Downloading Firmware update: 0.679856760264957
[log] Downloading Firmware update: 0.6834620727811065
[log] Downloading Firmware update: 0.6870673852972559
[log] Downloading Firmware update: 0.6906726978134053
[log] Downloading Firmware update: 0.6929404576254183
[log] Downloading Firmware update: 0.6965457701415678
[log] Downloading Firmware update: 0.7001510826577172
[log] Downloading Firmware update: 0.7037563951738667
[log] Downloading Firmware update: 0.707361707690016
[log] Downloading Firmware update: 0.7109670202061655
[log] Downloading Firmware update: 0.7145723327223149
[log] Downloading Firmware update: 0.7181776452384644
[log] Downloading Firmware update: 0.7217829577546138
[log] Downloading Firmware update: 0.7253882702707632
[log] Downloading Firmware update: 0.7289935827869126
[log] Downloading Firmware update: 0.7325988953030621
[log] Downloading Firmware update: 0.7362042078192115
[log] Downloading Firmware update: 0.739809520335361
[log] Downloading Firmware update: 0.7427460564994421
[log] Downloading Firmware update: 0.7463513690155916
[log] Downloading Firmware update: 0.749956681531741
[log] Downloading Firmware update: 0.7535619940478905
[log] Downloading Firmware update: 0.7571673065640399
[log] Downloading Firmware update: 0.7607726190801893
[log] Downloading Firmware update: 0.7643779315963387
[log] Downloading Firmware update: 0.7679832441124882
[log] Downloading Firmware update: 0.7715885566286376
[log] Downloading Firmware update: 0.775193869144787
[log] Downloading Firmware update: 0.7787991816609364
[log] Downloading Firmware update: 0.7824044941770859
[log] Downloading Firmware update: 0.7860098066932353
[log] Downloading Firmware update: 0.7896151192093848
[log] Downloading Firmware update: 0.7932204317255341
[log] Downloading Firmware update: 0.7968257442416836
[log] Downloading Firmware update: 0.800431056757833
[log] Downloading Firmware update: 0.8040363692739825
[log] Downloading Firmware update: 0.8076416817901318
[log] Downloading Firmware update: 0.8112469943062813
[log] Downloading Firmware update: 0.8148523068224307
[log] Downloading Firmware update: 0.8184576193385802
[log] Downloading Firmware update: 0.8220629318547296
[log] Downloading Firmware update: 0.825668244370879
[log] Downloading Firmware update: 0.8292735568870285
[log] Downloading Firmware update: 0.8328788694031779
[log] Downloading Firmware update: 0.8364841819193274
[log] Downloading Firmware update: 0.8400894944354768
[log] Downloading Firmware update: 0.8423572542474899
[log] Downloading Firmware update: 0.8459625667636392
[log] Downloading Firmware update: 0.8495678792797887
[log] Downloading Firmware update: 0.8531731917959381
[log] Downloading Firmware update: 0.8567785043120876
[log] Downloading Firmware update: 0.860383816828237
[log] Downloading Firmware update: 0.8639891293443864
[log] Downloading Firmware update: 0.8675944418605358
[log] Downloading Firmware update: 0.8711997543766853
[log] Downloading Firmware update: 0.8748050668928347
[log] Downloading Firmware update: 0.8784103794089841
[log] Downloading Firmware update: 0.8820156919251335
[log] Downloading Firmware update: 0.885621004441283
[log] Downloading Firmware update: 0.8892263169574324
[log] Downloading Firmware update: 0.8928316294735819
[log] Downloading Firmware update: 0.8964369419897312
[log] Downloading Firmware update: 0.9000422545058807
[log] Downloading Firmware update: 0.9036475670220301
[log] Downloading Firmware update: 0.9072528795381796
[log] Downloading Firmware update: 0.9108581920543289
[log] Downloading Firmware update: 0.9144635045704784
[log] Downloading Firmware update: 0.9180688170866278
[log] Downloading Firmware update: 0.9216741296027773
[log] Downloading Firmware update: 0.9252794421189267
[log] Downloading Firmware update: 0.9288847546350761
[log] Downloading Firmware update: 0.9324900671512255
[log] Downloading Firmware update: 0.936095379667375
[log] Downloading Firmware update: 0.9397006921835244
[log] Downloading Firmware update: 0.9419684519955375
[log] Downloading Firmware update: 0.9455737645116868
[log] Downloading Firmware update: 0.9491790770278363
[log] Downloading Firmware update: 0.9527843895439857
[log] Downloading Firmware update: 0.9563897020601352
[log] Downloading Firmware update: 0.9599950145762846
[log] Downloading Firmware update: 0.963600327092434
[log] Downloading Firmware update: 0.9672056396085834
[log] Downloading Firmware update: 0.9708109521247329
[log] Downloading Firmware update: 0.9744162646408823
[log] Downloading Firmware update: 0.9780215771570318
[log] Downloading Firmware update: 0.9816268896731811
[log] Downloading Firmware update: 0.9852322021893306
[log] Downloading Firmware update: 0.98883751470548
[log] Downloading Firmware update: 0.9924428272216295
[log] Downloading Firmware update: 0.9960481397377788
[log] Downloading Firmware update: 0.9996534522539283
[log] Downloading Firmware update: 1.0
[HealyWatchSDKImplementation] _unZipFirmwareUpdateFile - start
[HealyWatchSDKImplementation] _unZipFirmwareUpdateFile - unzip file color565.bin
[HealyWatchSDKImplementation] _unZipFirmwareUpdateFile - unzip file color565MD5.txt
[HealyWatchSDKImplementation] _unZipFirmwareUpdateFile - unzip file firmware.zip
[HealyWatchSDKImplementation] startDfuMode - start
[HealyWatchSDKImplementation] enterDfuMode - start
[HealyWatchSDKImplementation] enterDfuMode - end
[HealyWatchSDKImplementation] downloadLatestFirmwareUpdate - end
I/flutter (11187): write: 47 00 00 00 00 00 00 00 00 00 00 00 00 00 00 47
I/flutter (11187): notifyData 47 00 00 00 00 00 00 00 00 00 00 00 00 00 00 47
[HealyWatchSDK - BluetoothConnectionUtil] startScan with filter: dfu and serviceIds: []
D/BluetoothAdapter(11187): isLeEnabled(): ON
D/BluetoothLeScanner(11187): onScannerRegistered() - status=0 scannerId=10 mScannerId=0
[HealyWatchSDK - BluetoothConnectionUtil] startScan found device: E0:6F:7C:E8:B3:33
[HealyWatchSDK - BluetoothConnectionUtil] stopScan
[HealyWatchSDKImplementation] found DFU device E0:6F:7C:E8:B3:33
D/BluetoothAdapter(11187): isLeEnabled(): ON
[HealyWatchSDKImplementation] startOta - start for device: E0:6F:7C:E8:B3:33
I/DfuBaseService(11187): DFU service created. Version: 1.12.0
I/DfuBaseService(11187): Starting DFU service in foreground
I/DfuBaseService(11187): Connecting to the device...
D/BluetoothGatt(11187): connect() - device: E0:6F:7C:E8:B3:33, auto: false
D/BluetoothGatt(11187): registerApp()
D/BluetoothGatt(11187): registerApp() - UUID=2f0c209e-ec1f-47b2-b2c7-dbe8ac795999
D/BluetoothGatt(11187): onClientRegistered() - status=0 clientIf=10
D/BluetoothGatt(11187): onClientConnectionState() - status=0 clientIf=10 device=E0:6F:7C:E8:B3:33
I/DfuBaseService(11187): Connected to GATT server
I/DfuBaseService(11187): Action received: android.bluetooth.device.action.ACL_CONNECTED
D/BluetoothGatt(11187): discoverServices() - device: E0:6F:7C:E8:B3:33
I/DfuBaseService(11187): Attempting to start service discovery... succeed
D/BluetoothGatt(11187): onClientConnectionState() - status=8 clientIf=9 device=E0:6F:7C:E8:B3:32
D/BluetoothGatt(11187): close()
D/BluetoothGatt(11187): unregisterApp() - mClientIf=9
[HealyWatchSDK - BluetoothConnectionUtil] connect connection state for device id: E0:6F:7C:E8:B3:32 name: Healy Watch-B332 : DeviceConnectionState.disconnected
[HealyWatchSDK - BluetoothConnectionUtil] connect connected device id: E0:6F:7C:E8:B3:32 name: Healy Watch-B332 failure
D/BluetoothGatt(11187): setCharacteristicNotification() - uuid: 0000fff7-0000-1000-8000-00805f9b34fb enable: false
[log] connectionStateToUiState: DeviceConnectionState.disconnected
[log] emit: DeviceDisconnectedState
[HealyWatchSDK - BluetoothConnectionUtil] reconnectDevice to device id: E0:6F:7C:E8:B3:32 name: Healy Watch-B332 with autoReconnect true
[log] connectionStateStream DeviceConnectionState.disconnected
[log] connectionStateToUiState: DeviceConnectionState.disconnected
[log] emit: DeviceDisconnectedState
[log] connectionStateToUiState: DeviceConnectionState.disconnecting
[log] emit: DeviceDisconnectedState
[log] connectionStateStream DeviceConnectionState.disconnecting
[log] connectionStateToUiState: DeviceConnectionState.disconnected
[log] emit: DeviceDisconnectedState
[log] connectionStateStream DeviceConnectionState.disconnected
[log] connectionStateToUiState: DeviceConnectionState.disconnected
[log] emit: DeviceDisconnectedState
D/BluetoothGatt(11187): onPhyUpdate() - status=0 address=E0:6F:7C:E8:B3:33 txPhy=2 rxPhy=2
D/BluetoothGatt(11187): onSearchComplete() = Device=E0:6F:7C:E8:B3:33 Status=0
I/DfuBaseService(11187): Services discovered
W/DfuImpl (11187): Secure DFU bootloader found
D/BluetoothGatt(11187): onConnectionUpdated() - Device=E0:6F:7C:E8:B3:33 interval=12 latency=0 timeout=600 status=0
I/DfuImpl (11187): Requesting MTU = 517
D/BluetoothGatt(11187): configureMTU() - device: E0:6F:7C:E8:B3:33 mtu: 517
D/BluetoothGatt(11187): onConfigureMTU() - Device=E0:6F:7C:E8:B3:33 mtu=247 status=0
I/DfuImpl (11187): MTU changed to: 247
I/DfuImpl (11187): Enabling notifications...
D/BluetoothGatt(11187): setCharacteristicNotification() - uuid: 8ec90001-f315-4f60-9fb8-838830daea50 enable: true
I/DfuImpl (11187): Setting object to Command (Op Code = 6, Type = 1)
I/DfuImpl (11187): Command object info received (Max size = 256, Offset = 0, CRC = 00000000)
I/DfuImpl (11187): Sending the number of packets before notifications (Op Code = 2, Value = 0)
I/DfuImpl (11187): Creating Init packet object (Op Code = 1, Type = 1, Size = 135)
I/DfuImpl (11187): Sending 135 bytes of init packet...
I/DfuImpl (11187): Sending init packet (Value = 12-84-01-0A-3E-08-01-12-3A-08-01-10-34-1A-02-AF-01-20-00-28-00-30-00-38-88-D4-12-42-24-08-03-12-20-76-FD-37-B4-28-08-AF-83-BA-F6-AE-CC-EA-62-E2-7E-AB-CE-B9-08-3D-FE-16-F9-97-E5-70-5A-7C-8E-B4-C5-48-00-10-00-1A-40-D9-4D-CB-D9-49-3F-7A-E2-82-A5-65-66-91-82-B3-EE-FE-D2-9B-14-A6-A5-5B-8F-77-5A-A0-D3-22-AA-D9-AF-AD-59-CA-84-4B-D3-4B-2D-6F-22-AC-FC-68-25-2E-05-86-DA-29-13-6A-64-07-F5-D0-1B-9E-57-BE-39-71-A3)
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 135, CRC = 35BC2909)
I/DfuImpl (11187): Executing init packet (Op Code = 4)
I/DfuImpl (11187): Setting object to Data (Op Code = 6, Type = 2)
I/DfuImpl (11187): Data object info received (Max size = 4096, Offset = 0, CRC = 00000000)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (1/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 4096, CRC = 57A9E87C)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (2/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 8192, CRC = 744AEA9F)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (3/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 12288, CRC = D2754D22)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (4/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 16384, CRC = 163EDDCE)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (5/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 20480, CRC = E49F9579)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (6/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 24576, CRC = 23D0F328)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (7/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 28672, CRC = 3F806B62)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (8/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 32768, CRC = FD64BD59)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (9/75)
D/TransportRuntime.CctTransportBackend(11187): Making request to: https://firebaselogging-pa.googleapis.com/v1/firelog/legacy/batchlog
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 36864, CRC = FB009F83)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (10/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 40960, CRC = 08638743)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (11/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/TransportRuntime.CctTransportBackend(11187): Status Code: 200
I/TransportRuntime.CctTransportBackend(11187): Content-Type: application/json; charset=UTF-8
I/TransportRuntime.CctTransportBackend(11187): Content-Encoding: gzip
I/DfuImpl (11187): Checksum received (Offset = 45056, CRC = FA048374)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (12/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 49152, CRC = B374A5F2)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (13/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 53248, CRC = FB11DAE6)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (14/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 57344, CRC = 7072415B)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (15/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 61440, CRC = 04FDB472)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (16/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 65536, CRC = 77AE4C9E)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (17/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 69632, CRC = E0EB6D15)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (18/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 73728, CRC = 7B6C5ACF)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (19/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 77824, CRC = 29D8F80E)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (20/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 81920, CRC = 3D96D1D3)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (21/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 86016, CRC = 8C128545)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (22/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 90112, CRC = 7B92C124)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (23/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 94208, CRC = 8ECF7407)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (24/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 98304, CRC = DE74851E)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (25/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 102400, CRC = F7844F18)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (26/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 106496, CRC = 600E75F5)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (27/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 110592, CRC = 0CF36913)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (28/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 114688, CRC = 0CBC8998)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (29/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 118784, CRC = BCE62EAB)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (30/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 122880, CRC = 5284C119)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (31/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 126976, CRC = C5936A7B)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (32/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 131072, CRC = 77B48629)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (33/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 135168, CRC = E0E7136C)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (34/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 139264, CRC = 44CC4ECD)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (35/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 143360, CRC = 3F537BD2)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (36/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 147456, CRC = C00C029F)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (37/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 151552, CRC = 2D919F4F)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (38/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 155648, CRC = 4222B799)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (39/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 159744, CRC = 616C40DD)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (40/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 163840, CRC = 3EE4EC39)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (41/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 167936, CRC = 9681F4E5)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (42/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 172032, CRC = 8C262260)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (43/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 176128, CRC = 241A2C1E)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (44/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 180224, CRC = 54BA5EDB)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (45/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 184320, CRC = A5448E4C)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (46/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 188416, CRC = C202CAF7)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (47/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 192512, CRC = 255D8EF8)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (48/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 196608, CRC = 26A636D2)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (49/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 200704, CRC = 2913BDA5)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (50/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 204800, CRC = 7B8D9F93)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (51/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 208896, CRC = E7D2BBF3)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (52/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 212992, CRC = A44F2A49)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (53/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 217088, CRC = 8EE8662D)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (54/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 221184, CRC = FB3CE6B7)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (55/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 225280, CRC = A1F6D3BB)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (56/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 229376, CRC = 6B615CB4)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (57/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 233472, CRC = EEAA4C1D)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (58/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 237568, CRC = 0DA8E04D)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (59/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 241664, CRC = 01E27042)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (60/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 245760, CRC = 27928358)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (61/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 249856, CRC = 9E1BC0EE)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (62/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 253952, CRC = 7D96FF72)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (63/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 258048, CRC = 3D8C985E)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (64/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 262144, CRC = 036F58B9)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (65/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 266240, CRC = B8C74386)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (66/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 270336, CRC = 757AC89F)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (67/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 274432, CRC = 23E498C9)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (68/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 278528, CRC = 5EF5C4F8)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (69/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 282624, CRC = E6EAB098)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (70/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 286720, CRC = A23F3352)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (71/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 290816, CRC = 070201BB)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (72/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 294912, CRC = 9EBECBF1)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (73/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 299008, CRC = AC8B68EE)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (74/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 303104, CRC = 5F46D996)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Creating Data object (Op Code = 1, Type = 2, Size = 2568) (75/75)
I/DfuImpl (11187): Uploading firmware...
I/DfuImpl (11187): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (11187): Checksum received (Offset = 305672, CRC = 9F81657F)
I/DfuImpl (11187): Executing data object (Op Code = 4)
I/DfuImpl (11187): Transfer of 305672 bytes has taken 71960 ms
D/BluetoothGatt(11187): onClientConnectionState() - status=19 clientIf=10 device=E0:6F:7C:E8:B3:33
W/DfuBaseService(11187): Target device disconnected with status: 19
W/orld.healywatc(11187): Accessing hidden method Landroid/bluetooth/BluetoothGatt;->refresh()Z (greylist, reflection, allowed)
D/BluetoothGatt(11187): refresh() - device: E0:6F:7C:E8:B3:33
I/DfuBaseService(11187): Refreshing result: true
I/DfuBaseService(11187): Cleaning up...
D/BluetoothGatt(11187): cancelOpen() - device: E0:6F:7C:E8:B3:33
D/BluetoothGatt(11187): close()
D/BluetoothGatt(11187): unregisterApp() - mClientIf=10
I/DfuBaseService(11187): Action received: android.bluetooth.device.action.ACL_DISCONNECTED
I/DfuBaseService(11187): DFU service destroyed
D/TransportRuntime.SQLiteEventStore(11187): Storing event with priority=DEFAULT, name=FIREPERF for destination cct
D/TransportRuntime.JobInfoScheduler(11187): Scheduling upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy1wYS5nb29nbGVhcGlzLmNvbS92MS9maXJlbG9nL2xlZ2FjeS9iYXRjaGxvZ1xBSXphU3lDY2traUg4aTJaQVJ3T3MxTEV6RktsZDE1YU9HOG96S28=) with jobId=1584476890 in 30000ms(Backend next call timestamp 1638953876639). Attempt 1
D/TransportRuntime.SQLiteEventStore(11187): Storing event with priority=DEFAULT, name=FIREPERF for destination cct
D/TransportRuntime.JobInfoScheduler(11187): Upload for context TransportContext(cct, DEFAULT, MSRodHRwczovL2ZpcmViYXNlbG9nZ2luZy1wYS5nb29nbGVhcGlzLmNvbS92MS9maXJlbG9nL2xlZ2FjeS9iYXRjaGxvZ1xBSXphU3lDY2traUg4aTJaQVJ3T3MxTEV6RktsZDE1YU9HOG96S28=) is already scheduled. Returning...
[log] [JOB]702fa8d4cdbd3a0192d366fdcdee62bc:triggered by timer_trigger
D/TransportRuntime.CctTransportBackend(11187): Making request to: https://firebaselogging-pa.googleapis.com/v1/firelog/legacy/batchlog
I/TransportRuntime.CctTransportBackend(11187): Status Code: 200
I/TransportRuntime.CctTransportBackend(11187): Content-Type: application/json; charset=UTF-8
I/TransportRuntime.CctTransportBackend(11187): Content-Encoding: gzip
[log] [JOB]702fa8d4cdbd3a0192d366fdcdee62bc:triggered by timer_trigger

Aborting dfu mid-update doesn't immediately disconnect from peripheral

Using version 6.4.1+hotfix
Using an Android device with a connection to a ble peripheral

Running into an issue:

  • NordicDfu().abortDfu() called mid update as a user would like to cancel the update
  • onDfuAborted callback received, so the update has successfully aborted and is no longer sending packets
  • Dfu maintains it's ble connection for about a minute before finally disconnecting

Am I correct in assuming that the ble connection should be severed immediately after a successful abort, or is the behavior I'm seeing intentional?

Problems in disconnected situations due to distance during update

During the update process, we intentionally widened the distance and created an update not possible situation.
The message "Disconnecting..." remains on the top of the cell phone and appears to be waiting indefinitely.
At this time, when you exit the app, it ends together.
NordicDFU seems to fall into an infinite loop while disconnecting from a Bluetooth device, is there a solution?
I used the latest version of 6.0.1.
Screenshot

Nothing happens when calling startDfu

Hey,
I'm trying to implement the plugin in the most basic way but I get no logs and my callbacks are not called.
What might be the problem?

This is my implementation:

if (selectedDfuPath == null) {
                          Fluttertoast.showToast(msg: 'no file selected');
                          return;
                        }
                        String? address = device.getMacAddress();
                        if (address == null) {
                          Fluttertoast.showToast(msg: 'mac address is null');
                          return;
                        }
                        NordicDfu().startDfu(
                          address,
                          selectedDfuPath!,
                          onProgressChanged: (String address,
                              int percent,
                              double speed,
                              double avgSpeed,
                              int currentPart,
                              int totalParts) {
                            setState(() {
                              dfuProgress = percent;
                            });
                          },
                          onDfuCompleted: (String address) =>
                              Fluttertoast.showToast(
                                  msg: 'completed dfu: $address'),
                          onError: (String address, int error, int errorType,
                                  String message) =>
                              Fluttertoast.showToast(
                                  toastLength: Toast.LENGTH_LONG,
                                  msg:
                                      'ERROR:\naddress: $address\nerror: $error\nerror type: $errorType\nmessage: $message'),
                        );

Unhandled Exception: PlatformException(6, DFU FAILED: Operation failed, Address: 6D5C4F40-C754-57D4-9D6A-DE57DC88B15F, Error type 6, null)

Plugin version: 6.1.0
Flutter version: 3.10.4 • channel stable

I can update the firmware using nRF iOS app but not with my Flutter iOS app.

In nRF iOS app I had to set the following parameters to successfully do the DFU:

  • Allow Resuming DFU: true
  • PRN(s): 5
  • Data Object Preparation: 0.3s
  • Enable Alternative Advertising Mode: true
  • Force DFU: true
  • Enable Experimental Buttonless DFU: false

In my Flutter app I have the following function that tries to replicate mostly the above parameters:

Future<void> startDFU() async
  {
    await NordicDfu().startDfu(
      widget.deviceID,
      'assets/20230727.zip',
      numberOfPackets: 5, //I assume this is same as PNR(s)
      forceDfu: true, 
      onProgressChanged: (
          deviceAddress,
          percent,
          speed,
          avgSpeed,
          currentPart,
          partsTotal,
          ) {
        print('deviceAddress: $deviceAddress, percent: $percent');
      },
    fileInAsset: true,
        onDfuCompleted: handleDfuCompleted,
        onDfuAborted: handleDfuAborted,
        onDfuProcessStarted: (String deviceAddress) =>
            print("DFU PROCESS STARTED"),
        onDeviceConnected: (String deviceAddress) =>
            print("DEVICE CONNECTED"),
        onDeviceConnecting: (String deviceAddress) =>
            print("DEVICE CONNECTING"),
        onDeviceDisconnected: (String deviceAddress) =>
            print("DEVICE DISCONNECTED"),
        onDeviceDisconnecting: handleDeviceDisconnecting,
        onDfuProcessStarting: (String deviceAddress) =>
            print("DFU PROCESS STARTING"),
        onEnablingDfuMode: (String deviceAddress) =>
            print("ENABLING DFU MODE"),
        onFirmwareValidating: (String deviceAddress) =>
            print("FIRMWARE VALIDATING"),
        onError: handleError,);
  }

XCode logs:

D: [Callback] Central Manager did update state to: Powered ON
V: Connecting to Balumero-LT23XXXX...
D: centralManager.connect(peripheral, options: nil)
flutter: DEVICE CONNECTING
D: [Callback] Central Manager did connect peripheral
I: Connected to Balumero-LT23XXXX
V: Discovering services...
D: peripheral.discoverServices(nil)
I: Services discovered
V: Starting Legacy DFU...
I: Connected to Balumero-LT23XXXX
I: Services discovered
V: Legacy DFU Service found
V: Discovering characteristics in DFU Service...
D: peripheral.discoverCharacteristics(nil, for: 00001530-1212-EFDE-1523-785FEABCD123)
I: DFU characteristics discovered
V: Reading DFU Version number...
D: peripheral.readValue(00001534-1212-EFDE-1523-785FEABCD123)
flutter: DFU PROCESS STARTING
I: Read Response received from 00001534-1212-EFDE-1523-785FEABCD123, value (0x): 0100
A: Version number read: 0.1
V: Enabling notifications for 00001531-1212-EFDE-1523-785FEABCD123...
D: peripheral.setNotifyValue(true, for: 00001531-1212-EFDE-1523-785FEABCD123)
V: Notifications enabled for 00001531-1212-EFDE-1523-785FEABCD123
A: DFU Control Point notifications enabled
W: Application with buttonless update found
V: Writing to characteristic 00001531-1212-EFDE-1523-785FEABCD123...
D: peripheral.writeValue(0x0104, for: 00001531-1212-EFDE-1523-785FEABCD123, type: .withResponse)
flutter: ENABLING DFU MODE
D: [Callback] Central Manager did disconnect peripheral
I: Disconnected by the remote device
V: Connecting to Balumero-LT23XXXX...
D: centralManager.connect(peripheral, options: nil)
flutter: Disconnected from 6D5C4F40-C754-57D4-9D6A-DE57DC88B15F
D: [Callback] Central Manager did connect peripheral
I: Connected to Balumero-LT23XXXX
V: Discovering services...
D: peripheral.discoverServices([00001530-1212-EFDE-1523-785FEABCD123])
I: Services discovered
V: Legacy DFU Service found
V: Discovering characteristics in DFU Service...
D: peripheral.discoverCharacteristics(nil, for: 00001530-1212-EFDE-1523-785FEABCD123)
I: DFU characteristics discovered
V: Reading DFU Version number...
D: peripheral.readValue(00001534-1212-EFDE-1523-785FEABCD123)
I: Read Response received from 00001534-1212-EFDE-1523-785FEABCD123, value (0x): 0800
A: Version number read: 0.8
V: Enabling notifications for 00001531-1212-EFDE-1523-785FEABCD123...
D: peripheral.setNotifyValue(true, for: 00001531-1212-EFDE-1523-785FEABCD123)
flutter: DFU PROCESS STARTING
V: Notifications enabled for 00001531-1212-EFDE-1523-785FEABCD123
A: DFU Control Point notifications enabled
V: Writing to characteristic 00001531-1212-EFDE-1523-785FEABCD123...
D: peripheral.writeValue(0x0104, for: 00001531-1212-EFDE-1523-785FEABCD123, type: .withResponse)
V: Writing image sizes (0b, 0b, 161024b) to characteristic 00001532-1212-EFDE-1523-785FEABCD123...
D: peripheral.writeValue(0x000000000000000000750200, for: 00001532-1212-EFDE-1523-785FEABCD123, type: .withoutResponse)
I: Data written to 00001531-1212-EFDE-1523-785FEABCD123
A: Start DFU (Op Code = 1, Upload Mode = 4) request sent
I: Notification received from 00001531-1212-EFDE-1523-785FEABCD123, value (0x): 100101
A: Response (Op Code = Start DFU, Status = Success) received
A: Writing Initialize DFU Parameters (Op Code = 2, Type = Begin)...
V: Writing to characteristic 00001531-1212-EFDE-1523-785FEABCD123...
D: peripheral.writeValue(0x0200, for: 00001531-1212-EFDE-1523-785FEABCD123, type: .withResponse)
V: Writing to characteristic 00001532-1212-EFDE-1523-785FEABCD123...
D: peripheral.writeValue(0x5200ffffffffffff0100b6000f71, for: 00001532-1212-EFDE-1523-785FEABCD123, type: .withoutResponse)
V: Writing to characteristic 00001531-1212-EFDE-1523-785FEABCD123...
D: peripheral.writeValue(0x0201, for: 00001531-1212-EFDE-1523-785FEABCD123, type: .withResponse)
I: Data written to 00001531-1212-EFDE-1523-785FEABCD123
I: Data written to 00001531-1212-EFDE-1523-785FEABCD123
I: Notification received from 00001531-1212-EFDE-1523-785FEABCD123, value (0x): 100201
A: Response (Op Code = Initialize DFU Parameters, Status = Success) received
A: Initialize DFU Parameters completed
V: Writing to characteristic 00001531-1212-EFDE-1523-785FEABCD123...
D: peripheral.writeValue(0x080c00, for: 00001531-1212-EFDE-1523-785FEABCD123, type: .withResponse)
I: Data written to 00001531-1212-EFDE-1523-785FEABCD123
A: Packet Receipt Notif Req (Op Code = 8, Value = 12) request sent
V: Writing to characteristic 00001531-1212-EFDE-1523-785FEABCD123...
D: peripheral.writeValue(0x03, for: 00001531-1212-EFDE-1523-785FEABCD123, type: .withResponse)
I: Data written to 00001531-1212-EFDE-1523-785FEABCD123
A: Uploading firmware...
V: Sending firmware to DFU Packet characteristic...
flutter: deviceAddress: 6D5C4F40-C754-57D4-9D6A-DE57DC88B15F, percent: 0
I: Notification received from 00001531-1212-EFDE-1523-785FEABCD123, value (0x): 100306
A: Response (Op Code = Receive Firmware Image, Status = Operation failed) received
E: Error 6: Operation failed
V: Writing to characteristic 00001531-1212-EFDE-1523-785FEABCD123...
D: peripheral.writeValue(0x06, for: 00001531-1212-EFDE-1523-785FEABCD123, type: .withResponse)
D: [Callback] Central Manager did disconnect peripheral
I: Disconnected by the remote device
flutter: ERROR: Operation failed
[VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(6, DFU FAILED: Operation failed, Address: 6D5C4F40-C754-57D4-9D6A-DE57DC88B15F, Error type 6, null)
#0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:652:7)
#1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:310:18)
<asynchronous suspension>
#2      _SettingsState.startDFU (package:my_flutter_reactive_ble/settings.dart:106:5)
<asynchronous suspension>
#3      _SettingsState.build.<anonymous closure> (package:my_flutter_reactive_ble/settings.dart:82:5)
<asynchronous suspension>

From the logs, everything looks fine until when DFU actually starts to upload and then it throws exception at 0%.

DFU FAILED: Operation failed, Address: E1D80815-4F69-EA07-D3F0-F49FDEFF95BA, Error type 94

Hello,

I started getting following error on iOS:

Error = PlatformException(94, DFU FAILED: Operation failed, Address: E1D80815-4F69-EA07-D3F0-F49FDEFF95BA, Error type 94, null)
#0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:653)
#1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:296)

#2 _DeviceUpdateScreenState.doDfu (package:otadfu/ui/exui/updatedevicescreen.dart:142)

Thank you very much!

Is there any plan to add `Windows` support?

I want to build it for Windows application which can use OTA firmware update.

Is there any plan to add Windows support?

Or, what should I do for implementing DFU via ble in Windows.

Starting DFU does nothing after update failed

Hello,

I got a problem using this library. When I am launching NordicDfu().startDfu(...) and then unplug the Nordic board, I am unable to relaunch DFU update until I completely kill and restart the application...

Here is the code used to launch DFU:

import 'package:flutter/material.dart';
import 'package:flutter_blue/flutter_blue.dart';
import 'package:nordic_dfu/nordic_dfu.dart';
import 'package:poc_ble/DevicePage/BottomSelectUpdate.dart';
import 'package:poc_ble/Logger/CustomLogger.dart';

class BottomLaunchUpdate extends StatefulWidget {
  const BottomLaunchUpdate(
      {Key? key, required this.deviceId, required this.firmware})
      : super(key: key);
  final DeviceIdentifier deviceId;
  final UpdateFirmwareType firmware;

  @override
  State<BottomLaunchUpdate> createState() => _BottomLaunchUpdateState();
}

class _BottomLaunchUpdateState extends State<BottomLaunchUpdate> {
  final FlutterBlue flutterBlue = FlutterBlue.instance;
  int _progress = 0;
  bool _isDfuFinished = true;
  bool _dfuHasError = false;

  String getFilePath() {
    customLogger.d("GETTING FILE PATH for ${widget.firmware}");
    switch (widget.firmware) {
      case UpdateFirmwareType.blinky1:
        return "assets/app_dfu_package_blinky1_SDK17.zip";
      case UpdateFirmwareType.blinky2:
        return "assets/app_dfu_package_blinky2_SDK17.zip";
      default:
        return "assets/app_dfu_package_blinky1_SDK17.zip";
    }
  }

  @override
  void dispose() {
    super.dispose();

    if (!_isDfuFinished) {
      NordicDfu().abortDfu();
      flutterBlue.connectedDevices.then((value) {
        value.forEach((element) {
          element.disconnect();
        });
      });
    }
  }

  void sendFirmware() async {
    customLogger.d("LAUNCHING DFU UPDATE");

    setState(() {
      _isDfuFinished = false;
    });

    try {
      final s = await NordicDfu().startDfu(
          widget.deviceId.id.toString(), getFilePath(),
          fileInAsset: true,
          onDfuCompleted: handleDfuCompleted,
          onDfuAborted: handleDfuAborted,
          onProgressChanged: handleProgressChanged,
          onDfuProcessStarted: (String deviceAddress) =>
              customLogger.d("DFU PROCESS STARTED"),
          onDeviceConnected: (String deviceAddress) =>
              customLogger.d("DEVICE CONNECTED"),
          onDeviceConnecting: (String deviceAddress) =>
              customLogger.d("DEVICE CONNECTING"),
          onDeviceDisconnected: (String deviceAddress) =>
              customLogger.d("DEVICE DISCONNECTED"),
          onDeviceDisconnecting: handleDeviceDisconnecting,
          onDfuProcessStarting: (String deviceAddress) =>
              customLogger.d("DFU PROCESS STARTING"),
          onEnablingDfuMode: (String deviceAddress) =>
              customLogger.d("ENABLING DFU MODE"),
          onFirmwareValidating: (String deviceAddress) =>
              customLogger.d("FIRMWARE VALIDATING"),
          onError: handleError);

      customLogger.d("DFU STARTED: $s");
      setState(() {
        _isDfuFinished = true;
      });
    } catch (e) {
      customLogger.e("ERROR: $e");
      setState(() {
        _dfuHasError = true;
      });
    }
  }

  void handleDfuCompleted(String deviceAddress) {
    customLogger.d("DFU COMPLETED");
    setState(() {
      _isDfuFinished = true;
    });
    Navigator.pop(context);
  }

  void handleProgressChanged(String deviceAddress, int percent, double speed,
      double avgSpeed, int currentPart, int partsTotal) {
    customLogger.d("PROGRESS CHANGED");
    setState(() {
      _progress = percent;
    });
  }

  void handleError(
      String deviceAddress, int error, int errorType, String message) {
    customLogger.e("ERROR: $message");
    setState(() {
      _dfuHasError = true;
    });
  }

  void handleDeviceDisconnecting(String deviceAddress) {
    customLogger.d("DEVICE DISCONNECTING");
    setState(() {
      _dfuHasError = true;
    });
  }

  void handleDfuAborted(String deviceAddress) {
    customLogger.d("DFU ABORTED");
    setState(() {
      _dfuHasError = true;
    });
  }

  @override
  Widget build(BuildContext context) {
    if (_dfuHasError) return const Text("Got an error during DFU");
    return Column(
      children: !_isDfuFinished
          ? [
              const Text("Updating...", style: TextStyle(fontSize: 30)),
              const SizedBox(height: 20),
              LinearProgressIndicator(value: _progress / 100),
              const SizedBox(height: 20),
              Text("$_progress %"),
            ]
          : [
              ElevatedButton(
                onPressed: sendFirmware,
                child: const Text("Update"),
              ),
            ],
    );
  }
}

Can I have some more information of what I can do to solve this? Thanks!

Dfu device find by Name instead of ID

Hey can we do something like Start Dfu for a device with a custom Name , actually what happens is My Device id changes when it enters to Bootloader mode , so only thing i can do is change its name when enter to bootloader ,
and scan for all available device , get the device with that name , grab its id , and pass that id to this package

But can we do something like this with this package , like we can pass another parameter of custom name and deviceId ( OrignalId before Entering to Bootloader), later things can be handled by this package

basically in Android i can achive this by another Approach ,
for Example my device advertising in android
with id D5:59:39:3B:B3:59
and when its in Bootloader. its advertising with ID : D5:59:39:3B:B3:5A

so basically adding 1 to the orignal Hexadecimal d559393bb359 + 1 => d559393bb35a
which is working fine , but for ios , no idea how to achieve this ,
like in case of IOS ,
Device ID : 6D8D8DC9-BA02-430F-4DC7-572E057D801B
DFU ID : 8100EEB2-F871-239E-80C2-03C03F613E58
Any Idead how can we detect in this case , or by adding 1 to DeviceID somehow can get us DfuID ??

Android very slow

Hello,

Library is great, thank you!
But Android is very slow. Any chance to requestConnectionPriority that will speed it 5 times?

Thank you very much

`rebootTime` -> Integer cannot be cast to Long

With version 6.1.0, I'm facing the following error:

E/MethodChannel#dev.steenbakker.nordic_dfu/method(31160): Failed to handle method call
E/MethodChannel#dev.steenbakker.nordic_dfu/method(31160): java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
E/MethodChannel#dev.steenbakker.nordic_dfu/method(31160): 	at dev.steenbakker.nordicdfu.NordicDfuPlugin.initiateDfu(NordicDfuPlugin.kt:88)
E/MethodChannel#dev.steenbakker.nordic_dfu/method(31160): 	at dev.steenbakker.nordicdfu.NordicDfuPlugin.onMethodCall(NordicDfuPlugin.kt:52)
E/MethodChannel#dev.steenbakker.nordic_dfu/method(31160): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:258)
E/MethodChannel#dev.steenbakker.nordic_dfu/method(31160): 	at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:295)
E/MethodChannel#dev.steenbakker.nordic_dfu/method(31160): 	at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0$io-flutter-embedding-engine-dart-DartMessenger(DartMessenger.java:322)
E/MethodChannel#dev.steenbakker.nordic_dfu/method(31160): 	at io.flutter.embedding.engine.dart.DartMessenger$$ExternalSyntheticLambda0.run(Unknown Source:12)
E/MethodChannel#dev.steenbakker.nordic_dfu/method(31160): 	at android.os.Handler.handleCallback(Handler.java:942)
E/MethodChannel#dev.steenbakker.nordic_dfu/method(31160): 	at android.os.Handler.dispatchMessage(Handler.java:99)
E/MethodChannel#dev.steenbakker.nordic_dfu/method(31160): 	at android.os.Looper.loopOnce(Looper.java:201)
E/MethodChannel#dev.steenbakker.nordic_dfu/method(31160): 	at android.os.Looper.loop(Looper.java:288)
E/MethodChannel#dev.steenbakker.nordic_dfu/method(31160): 	at android.app.ActivityThread.main(ActivityThread.java:7959)
E/MethodChannel#dev.steenbakker.nordic_dfu/method(31160): 	at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#dev.steenbakker.nordic_dfu/method(31160): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
E/MethodChannel#dev.steenbakker.nordic_dfu/method(31160): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:942)
E/flutter (31160): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(error, java.lang.Integer cannot be cast to java.lang.Long, null, java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
E/flutter (31160): 	at dev.steenbakker.nordicdfu.NordicDfuPlugin.initiateDfu(NordicDfuPlugin.kt:88)
E/flutter (31160): 	at dev.steenbakker.nordicdfu.NordicDfuPlugin.onMethodCall(NordicDfuPlugin.kt:52)
E/flutter (31160): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:258)
E/flutter (31160): 	at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:295)
E/flutter (31160): 	at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0$io-flutter-embedding-engine-dart-DartMessenger(DartMessenger.java:322)
E/flutter (31160): 	at io.flutter.embedding.engine.dart.DartMessenger$$ExternalSyntheticLambda0.run(Unknown Source:12)
E/flutter (31160): 	at android.os.Handler.handleCallback(Handler.java:942)
E/flutter (31160): 	at android.os.Handler.dispatchMessage(Handler.java:99)
E/flutter (31160): 	at android.os.Looper.loopOnce(Looper.java:201)
E/flutter (31160): 	at android.os.Looper.loop(Looper.java:288)
E/flutter (31160): 	at android.app.ActivityThread.main(ActivityThread.java:7959)
E/flutter (31160): 	at java.lang.reflect.Method.invoke(Native Method)
E/flutter (31160): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
E/flutter (31160): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:942)
E/flutter (31160): )
E/flutter (31160): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:652:7)
E/flutter (31160): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:310:18)
E/flutter (31160): <asynchronous suspension>
E/flutter (31160): 

Looks like this line needs to be replaced:

val rebootTime = call.argument<Long>("rebootTime")

With this one:

val rebootTime = call.argument<Int>("rebootTime")?.toLong()

Could you please have a look @juliansteenbakker?

[Request] MTU negotiation

Hi, thank you for supporting and updating this library!
Is it possible to have the option to negotiate an MTU when performing the Device FIrmware Update?

DFU Never Finishes

I am having an issue with the nordic dfu service finishing. I have been using the flutter_nordic_dfu package for a while now with great success but since Android 12 has been released I have had to move to nordic_dfu. The dfu starts and in my on progress listener, I am printing out the percent. It will print out from 1% to 100% but then does nothing. My progress indicator shows that it has large jumps from 0 to 30 to 50 to 80 then 100 then stays at 100. The time it takes from 0% to 100% is only about 10 seconds when normally it would take about a minute and 30 seconds. After a couple of minutes at 100% the app will crash.

I am testing on a Google Pixel 6 with Android 12 and a Samsung Tab A with Android 11 and getting the same results.
I can put this same code on an iPhone and it performs like it should and always has.

Can you give me an idea why this might be happening and how i could fix it.

Thank you.

iOS App report [Unhandled Exception: PlatformException(DEVICE_ADDRESS_ERROR, Device address conver to uuid failed, Device uuid EE:01:06:81:63:3E convert to uuid failed, null】 Error

1.This is the remote device related information in iOS&Android

iOS print:DiscoveredDevice(id: 62CCCBCA-5C14-2CEA-8DCA-F8E91FB993C8, name: DZ29_633E, serviceData: {7364: []}, serviceUuids: [], manufacturerData: [105, 108, 2, 21, 238, 1, 6, 129, 99, 62], rssi: -61, connectable: Connectable.available)
Android print:DiscoveredDevice(id: EE:01:06:81:63:3E, name: DZ29_633E, serviceData: {00007300-0000-1000-8000-00805f9b34fb: []}, serviceUuids: [], manufacturerData: [105, 108, 2, 21, 238, 1, 6, 129, 99, 62], rssi: -65, connectable: Connectable.available)

manufacturerData -> macid: 69:6C:02:15:EE:01:06:81:63:3E. We chose the last six!

2.This is what I use in flutter
await NordicDfu().startDfu(
'EE:01:06:81:63:3E',
'assets/a.zip',
fileInAsset: true,
onProgressChanged: (
deviceAddress,
percent,
speed,
avgSpeed,
currentPart,
partsTotal,
) {
Logs.prints('deviceAddress: $deviceAddress, percent: $percent speed = $speed avgSpeed = $avgSpeed currentPart = $currentPart partsTotal = $partsTotal');
},
);
2.This is an error message in ios
Unhandled Exception: PlatformException(DEVICE_ADDRESS_ERROR, Device address conver to uuid failed, Device uuid EE:01:06:81:63:3E convert to uuid failed, null)

3.This is Android working properly

Uploading firmware...
deviceAddress: EE:01:06:81:63:3F, percent: 1 speed = 2.194244623184204 avgSpeed = 2.194244623184204 currentPart = 1 partsTotal = 1
deviceAddress: EE:01:06:81:63:3F, percent: 2 speed = 20.76595687866211 avgSpeed = 3.6417911052703857 currentPart = 1 partsTotal = 1
deviceAddress: EE:01:06:81:63:3F, percent: 3 speed = 75.07691955566406 avgSpeed = 5.149350643157959 currentPart = 1 partsTotal = 1

Last version won't build for IOS

I tried to update the package to 5.1.0.
No issue on Android, but IOS won't build.
I get the following print :

Could not build the precompiled application for the device.

Swift Compiler Error (Xcode): Initializer for conditional binding must have

Optional type, not 'DFUFirmware'

/Users/gaellejoubert/Documents/flutter/.pub-cache/hosted/pub.dartlang.org/nordic

_dfu-5.1.0/ios/Classes/SwiftNordicDfuPlugin.swift:105:14



Swift Compiler Error (Xcode): Call can throw, but it is not marked with 'try'

and the error is not handled

/Users/gaellejoubert/Documents/flutter/.pub-cache/hosted/pub.dartlang.org/nordic

_dfu-5.1.0/ios/Classes/SwiftNordicDfuPlugin.swift:105:29

I tried Flutter clean, I also tried to edit a bit the source code, but I know nothing about swift ...
Anybody has the same issue ?

Constant DFU_FIRMWARE_NOT_FOUND error

I'm running the most up-to-date versions of flutter as well as versions of this package.

I'm making my call like this:

 onPressed: () async {
                              final notifier =
                                  ref.read(firmwareNotifierProvider.notifier);
                              final path = await notifier.getFirmwarePath(
                                  latestFirmware.downloadUrl ?? '');
                              print('Firmware path: $path');
                              print('Device remoteId: ${uiState.remoteId}');
                              await NordicDfu().startDfu(
                                uiState.remoteId,
                                path,
                              );
                            },

Where path is set by downloading a .zip file from Firebase and placing it in a temp directory:

Future<String> getFirmwarePath(String url) async {
    // Get the temporary directory
    Directory tempDir = await getTemporaryDirectory();
    // Define the local file path
    String filePath = '${tempDir.path}/file.zip';

    // Use Dio to download the file
    Dio dio = Dio();
    await dio.download(url, filePath);

    if (await File(filePath).exists()) {
      print('Download successful, file is where it should be.');
      return filePath;
    } else {
      throw Exception("Download failed, file's not in the temp directory.");
    }
  }

I received a path back and it appears that half works correctly. The problem is when calling the .startDfu() it fails 10/10 times. I receive this error:

flutter: ----------------FIREBASE CRASHLYTICS----------------
flutter: PlatformException(DFU_FIRMWARE_NOT_FOUND, Could not dfu zip file, null, null)
flutter: 
#0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:651:7)
#1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:334:18)
<asynchronous suspension>
#2      KeypadDetailsBluetooth.build.<anonymous closure>.<anonymous closure> (package:*project name removed*/features/admin/displays/keypad_settings.dart:319:31)
<asynchronous suspension>
flutter: ----------------------------------------------------

The content of my .zip file is a .bin file named app_update.bin and a manifest file called manifest.json I've tried just passing the .bin file and that fails too. I've tried putting my zip file into assets and going that route and it still fails. I've tried using my .zip file with NRF connect and it works flawlessly. I'm not sure why this is happening here because the error message isn't explicit enough in what it is trying to portray.

Any help is much appreciated.

Connect SDK w/o nrfutils ?

Can I use this library for firmware with nrf connect sdk?

When I build the firmware, a -zip is available, but the file does not work:

D/CompatibilityChangeReporter(17466): Compat change id reported: 160794467; UID 10485; state: ENABLED
W/DfuArchiveInputStream(17466): Manifest failed to be parsed. Did you add 
W/DfuArchiveInputStream(17466): -keep class no.nordicsemi.android.dfu.** { *; }
W/DfuArchiveInputStream(17466): to your proguard rules?
E/DfuBaseService(17466): An exception occurred while calculating file size
E/DfuBaseService(17466): java.io.IOException: The ZIP file must contain an Application, a Soft Device and/or a Bootloader.
E/DfuBaseService(17466): 	at no.nordicsemi.android.dfu.internal.ArchiveInputStream.<init>(ArchiveInputStream.java:279)
E/DfuBaseService(17466): 	at no.nordicsemi.android.dfu.DfuBaseService.openInputStream(DfuBaseService.java:1470)
E/DfuBaseService(17466): 	at no.nordicsemi.android.dfu.DfuBaseService.onHandleIntent(DfuBaseService.java:1206)
E/DfuBaseService(17466): 	at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:77)
E/DfuBaseService(17466): 	at android.os.Handler.dispatchMessage(Handler.java:107)
E/DfuBaseService(17466): 	at android.os.Looper.loopOnce(Looper.java:232)
E/DfuBaseService(17466): 	at android.os.Looper.loop(Looper.java:317)
E/DfuBaseService(17466): 	at android.os.HandlerThread.run(HandlerThread.java:68)

nrf utils is not working on Win11 (At least not on mine)

No implementation found for method startDfu on channel dev.steenbakker.nordic_dfu/method

ElevatedButton(
onPressed: () async {

                  FlutterDocumentPickerParams params =
                  FlutterDocumentPickerParams(
                    allowedFileExtensions: ['zip'],
                  );

                  path =
                  (await FlutterDocumentPicker.openDocument(
                      params: params)
                      .onError((error, stackTrace) {
                        print("the error is $error");
                    return null;
                  }))!;
                  if (path.isNotEmpty) {
                    print('File path : $path');
                    try{
                      await NordicDfu().startDfu(
                        widget.connectedDevice.remoteId.toString(),
                        path,
                        fileInAsset: true,
                        onProgressChanged: (
                            deviceAddress,
                            percent,
                            speed,
                            avgSpeed,
                            currentPart,
                            partsTotal,
                            ) {
                          print('deviceAddress: $deviceAddress, percent: $percent');
                        },
                      );
                    }catch (e){
                      print("e");
                    }
                  } else {
                    // User canceled the picker
                  }
                },

                child: const Text("Select"),
              )

This is my code this is showing the error No implementation found for method startDfu on channel dev.steenbakker.nordic_dfu/method

DFU Transfert is working but No callback is never called.

I'm using the DFU, and the transfert works fine.
The only problem is : the call back are NEVER called, which means my app has NO WAY of nowing if/when the transfert is done.
With the prints, I see that it's going fine, but I'm wondering how Can I get these infos on my app ...

I use a Samsung A3 with Android 8, but I tried as well with a Pixel 4A 5G with Android 12 and I have the same issue.
I use Flutter 3.

Here is how I start the DFU :

await NordicDfu().startDfu(deviceID, file, fileInAsset: true,
    onDfuCompleted: (e){print("[DFU] Completed, $e");},
    onDeviceDisconnected: (e){print("[DFU] DIsconnected, $e");},
    onError: (e,a,b,c){print("[DFU] ERROR $e, $a, $b, $c");},
    onDfuAborted: (e){print("[DFU] Aborted $e");},
    onProgressChanged:(
        deviceAddress, percent, speed, avgSpeed, currentPart, partsTotal) {
          progressListener.progress(percent);
          print('[DFU] $percent%');
    });

All my prints I never done.
I still know it is working thanks to the console output :

I/DfuImpl ( 9193): Restarting to bootloader mode
I/DfuBaseService( 9193): Starting DFU service in foreground
D/Notification( 9193): allPendingIntents
D/BluetoothGatt( 9193): onClientConnectionState() - status=19 clientIf=8 device=EC:DB:86:00:02:FD
I/DfuBaseService( 9193): Action received: android.bluetooth.device.action.ACL_DISCONNECTED
D/BluetoothManager( 9193): getConnectionState()
D/BluetoothManager( 9193): getConnectedDevices
D/BluetoothGatt( 9193): close()
D/BluetoothGatt( 9193): unregisterApp() - mClientIf=8
[log] [2022-07-26 16:08:05.186651] [UPDATE] BLE Connection State : DeviceConnectionState.disconnected 
I/flutter ( 9193): EC.DB.86.FF.FE.00.02.FD. : NOT DETECTED - TIMEOUT : 29
D/Notification( 9193): allPendingIntents
I/DfuBaseService( 9193): Connecting to the device...
D/BluetoothGatt( 9193): connect() - device: EC:DB:86:00:02:FD, auto: false
D/BluetoothAdapter( 9193): isSecureModeEnabled
D/BluetoothGatt( 9193): registerApp()
D/BluetoothGatt( 9193): registerApp() - UUID=4519263b-5371-4b25-b983-e472d7812c35
D/BluetoothGatt( 9193): onClientRegistered() - status=0 clientIf=8
I/DfuBaseService( 9193): Action received: android.bluetooth.device.action.ACL_CONNECTED
D/BluetoothGatt( 9193): onClientConnectionState() - status=0 clientIf=8 device=EC:DB:86:00:02:FD
I/DfuBaseService( 9193): Connected to GATT server
I/DfuBaseService( 9193): Waiting 1600 ms for a possible Service Changed indication...
D/BluetoothGatt( 9193): discoverServices() - device: EC:DB:86:00:02:FD
I/DfuBaseService( 9193): Attempting to start service discovery... succeed
D/BluetoothGatt( 9193): onConnectionUpdated() - Device=EC:DB:86:00:02:FD interval=12 latency=0 timeout=600 status=0
D/BluetoothGatt( 9193): onConnectionUpdated() - Device=EC:DB:86:00:02:FD interval=6 latency=0 timeout=500 status=0
D/BluetoothGatt( 9193): onConnectionUpdated() - Device=EC:DB:86:00:02:FD interval=12 latency=0 timeout=600 status=0
D/BluetoothGatt( 9193): onSearchComplete() = Device=EC:DB:86:00:02:FD Status=0
I/DfuBaseService( 9193): Services discovered
I/DfuImpl ( 9193): Reading Service Changed CCCD value...
I/DfuImpl ( 9193): Service Changed indications enabled
W/DfuImpl ( 9193): Secure DFU bootloader found
D/Notification( 9193): allPendingIntents
I/DfuImpl ( 9193): Requesting MTU = 517
D/BluetoothGatt( 9193): configureMTU() - device: EC:DB:86:00:02:FD mtu: 517
D/BluetoothGatt( 9193): onConfigureMTU() - Device=EC:DB:86:00:02:FD mtu=247 status=0
I/DfuImpl ( 9193): MTU changed to: 247
I/DfuImpl ( 9193): Enabling notifications...
D/BluetoothGatt( 9193): setCharacteristicNotification() - uuid: 8ec90001-f315-4f60-9fb8-838830daea50 enable: true
I/DfuImpl ( 9193): Setting object to Command (Op Code = 6, Type = 1)
I/flutter ( 9193): EC.DB.86.FF.FE.00.02.FD. : NOT DETECTED - TIMEOUT : 34
I/DfuImpl ( 9193): Command object info received (Max size = 512, Offset = 0, CRC = 00000000)
I/DfuImpl ( 9193): Sending the number of packets before notifications (Op Code = 2, Value = 0)
I/DfuImpl ( 9193): Creating Init packet object (Op Code = 1, Type = 1, Size = 141)
I/DfuImpl ( 9193): Sending 141 bytes of init packet...
I/DfuImpl ( 9193): Sending init packet (Value = 12-8A-01-0A-44-08-01-12-40-08-16-10-34-1A-02-CB-01-20-00-28-00-30-00-38-A0-DC-02-42-24-08-03-12-20-32-4D-B1-3D-47-FB-31-69-22-CE-5A-CB-C6-03-FE-A4-F2-AE-67-B4-40-8C-C4-69-25-13-E0-E5-36-17-7E-72-48-00-52-04-08-01-12-00-10-00-1A-40-E5-4D-08-75-85-93-86-FE-1E-D7-16-2B-40-AF-8C-E6-30-C7-BC-77-1D-8A-26-FD-00-E1-43-0A-F6-AB-36-BC-2F-37-C8-00-E2-17-4E-55-C7-2F-E2-74-C9-D5-94-55-43-0C-A4-8E-EA-33-B7-8A-39-FA-AE-20-83-3A-E8-27)
I/DfuImpl ( 9193): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl ( 9193): Checksum received (Offset = 141, CRC = A6003BA7)
I/DfuImpl ( 9193): Executing init packet (Op Code = 4)
I/DfuImpl ( 9193): Setting object to Data (Op Code = 6, Type = 2)
I/DfuImpl ( 9193): Data object info received (Max size = 4096, Offset = 0, CRC = 00000000)
D/Notification( 9193): allPendingIntents
I/DfuImpl ( 9193): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (1/11)
I/DfuImpl ( 9193): Uploading firmware...
D/Notification( 9193): allPendingIntents
I/DfuImpl ( 9193): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl ( 9193): Checksum received (Offset = 4096, CRC = 4F57613A)
I/DfuImpl ( 9193): Executing data object (Op Code = 4)
I/DfuImpl ( 9193): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (2/11)
I/DfuImpl ( 9193): Uploading firmware...
D/Notification( 9193): allPendingIntents
I/DfuImpl ( 9193): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl ( 9193): Checksum received (Offset = 8192, CRC = 3312A7EC)
I/DfuImpl ( 9193): Executing data object (Op Code = 4)
I/DfuImpl ( 9193): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (3/11)
I/DfuImpl ( 9193): Uploading firmware...
D/Notification( 9193): allPendingIntents
I/DfuImpl ( 9193): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl ( 9193): Checksum received (Offset = 12288, CRC = DE363E1A)
I/DfuImpl ( 9193): Executing data object (Op Code = 4)
I/DfuImpl ( 9193): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (4/11)
I/DfuImpl ( 9193): Uploading firmware...
D/Notification( 9193): allPendingIntents
I/DfuImpl ( 9193): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl ( 9193): Checksum received (Offset = 16384, CRC = 31149A0C)
I/DfuImpl ( 9193): Executing data object (Op Code = 4)
I/DfuImpl ( 9193): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (5/11)
I/DfuImpl ( 9193): Uploading firmware...
D/Notification( 9193): allPendingIntents
I/DfuImpl ( 9193): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl ( 9193): Checksum received (Offset = 20480, CRC = 975DC3B6)
I/DfuImpl ( 9193): Executing data object (Op Code = 4)
I/DfuImpl ( 9193): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (6/11)
I/flutter ( 9193): EC.DB.86.FF.FE.00.02.FD. : NOT DETECTED - TIMEOUT : 39
I/DfuImpl ( 9193): Uploading firmware...
D/Notification( 9193): allPendingIntents
I/DfuImpl ( 9193): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl ( 9193): Checksum received (Offset = 24576, CRC = AD3299FC)
I/DfuImpl ( 9193): Executing data object (Op Code = 4)
I/DfuImpl ( 9193): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (7/11)
I/DfuImpl ( 9193): Uploading firmware...
D/Notification( 9193): allPendingIntents
I/zygote  ( 9193): Do partial code cache collection, code=121KB, data=89KB
I/zygote  ( 9193): After code cache collection, code=121KB, data=89KB
I/zygote  ( 9193): Increasing code cache capacity to 512KB
I/DfuImpl ( 9193): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl ( 9193): Checksum received (Offset = 28672, CRC = 466A89E0)
I/DfuImpl ( 9193): Executing data object (Op Code = 4)
I/DfuImpl ( 9193): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (8/11)
I/DfuImpl ( 9193): Uploading firmware...
D/Notification( 9193): allPendingIntents
I/DfuImpl ( 9193): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl ( 9193): Checksum received (Offset = 32768, CRC = D8375EC4)
I/DfuImpl ( 9193): Executing data object (Op Code = 4)
I/DfuImpl ( 9193): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (9/11)
I/DfuImpl ( 9193): Uploading firmware...
D/Notification( 9193): allPendingIntents
I/DfuImpl ( 9193): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl ( 9193): Checksum received (Offset = 36864, CRC = A75FC947)
I/DfuImpl ( 9193): Executing data object (Op Code = 4)
I/DfuImpl ( 9193): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (10/11)
I/DfuImpl ( 9193): Uploading firmware...
D/Notification( 9193): allPendingIntents
I/DfuImpl ( 9193): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl ( 9193): Checksum received (Offset = 40960, CRC = CB0B8CB1)
I/DfuImpl ( 9193): Executing data object (Op Code = 4)
I/DfuImpl ( 9193): Creating Data object (Op Code = 1, Type = 2, Size = 3616) (11/11)
I/DfuImpl ( 9193): Uploading firmware...
D/Notification( 9193): allPendingIntents
I/DfuImpl ( 9193): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl ( 9193): Checksum received (Offset = 44576, CRC = 77EA64B6)
I/DfuImpl ( 9193): Executing data object (Op Code = 4)
I/flutter ( 9193): EC.DB.86.FF.FE.00.02.FD. : NOT DETECTED - TIMEOUT : 44
I/DfuImpl ( 9193): Transfer of 44576 bytes has taken 9637 ms
D/Notification( 9193): allPendingIntents
D/BluetoothGatt( 9193): onClientConnectionState() - status=19 clientIf=8 device=EC:DB:86:00:02:FD
W/DfuBaseService( 9193): Target device disconnected with status: 19
I/DfuBaseService( 9193): Cleaning up...
D/BluetoothGatt( 9193): cancelOpen() - device: EC:DB:86:00:02:FD
I/DfuBaseService( 9193): Action received: android.bluetooth.device.action.ACL_DISCONNECTED
D/BluetoothGatt( 9193): close()
D/BluetoothGatt( 9193): unregisterApp() - mClientIf=8
D/Notification( 9193): allPendingIntents
I/DfuBaseService( 9193): DFU service destroyed

Does any one has any idea to get the call back to work, or even just a workout to get info on how the transfert is going on ? I thought of rerouting the console output, but no idea on how to do that...
Thanks a lot !

Need implementation for `setRebootTime(long)` method

In order to resolve this issue, we need to implement the function setRebootTime(long) in this library. Using this function, we will be able to delay the device reboot by the provided milliseconds.

Here is the code for the above-said function in the official Android-DFU-Library:

https://github.com/NordicSemiconductor/Android-DFU-Library/blob/b37200033f5d3fe412994e05dd20dd57e14acfe5/lib/dfu/src/main/java/no/nordicsemi/android/dfu/DfuServiceInitiator.java#L299-L302

The expectation is to have a parameter inside both AndroidSpecialParameter and IosSpecialParameter class as follows:

firmwareUpdater.startDfu(
    androidSpecialParameter: AndroidSpecialParameter(
        rebootTime: 1000, // Time (int) in millis
    ),
    iosSpecialParameter: IosSpecialParameter(
        rebootTime: 1000, // Time (int) in millis
    ),
);

Could you please help with this @juliansteenbakker?

Infinite loop on DFU

Hello,

I've been trying to use flutter_nordic_dfu to DFU my NRF52 device without any success.
I tried your library and I'm getting the same result:

When running a simple DFU using a Firmware homemade.
The firmware DFU is working fine with NRF Connect, but I need to turn Alternative Advertising Mode off.

5E5B33DD-07EC-020F-639B-4FCB80E3763A onDfuProcessStarting
5E5B33DD-07EC-020F-639B-4FCB80E3763A onEnablingDfuMode
5E5B33DD-07EC-020F-639B-4FCB80E3763A onDeviceConnecting
5E5B33DD-07EC-020F-639B-4FCB80E3763A onDfuProcessStarting
5E5B33DD-07EC-020F-639B-4FCB80E3763A onEnablingDfuMode
5E5B33DD-07EC-020F-639B-4FCB80E3763A onDeviceConnecting
5E5B33DD-07EC-020F-639B-4FCB80E3763A onDfuProcessStarting
5E5B33DD-07EC-020F-639B-4FCB80E3763A onEnablingDfuMode
5E5B33DD-07EC-020F-639B-4FCB80E3763A onDeviceConnecting
5E5B33DD-07EC-020F-639B-4FCB80E3763A onDfuProcessStarting
5E5B33DD-07EC-020F-639B-4FCB80E3763A onEnablingDfuMode

For an unknown reason it's just looping on this. Any idea why ?

dfu isn't starting or starting late

nordic dfu app can update the device but this library cant update. Logs below. These events keep happening consistently, resulting in either not starting or starting late. i added reboot time but it didnt work

D/BluetoothLeScanner(32012): could not find callback wrapper
D/BluetoothAdapter(32012): isLeEnabled(): ON
D/BluetoothLeScanner(32012): onScannerRegistered() - status=6 scannerId=-1 mScannerId=0
D/BluetoothAdapter(32012): isLeEnabled(): ON
D/BluetoothLeScanner(32012): could not find callback wrapper
D/BluetoothAdapter(32012): isLeEnabled(): ON
D/BluetoothLeScanner(32012): onScannerRegistered() - status=6 scannerId=-1 mScannerId=0
D/BluetoothGatt(32012): onClientConnectionState() - status=0 clientIf=8 device=DE:F2:E6:5C:E3:83
I/DfuBaseService(32012): Connected to GATT server
D/BluetoothGatt(32012): discoverServices() - device: DE:F2:E6:5C:E3:83
I/DfuBaseService(32012): Action received: android.bluetooth.device.action.ACL_CONNECTED
I/DfuBaseService(32012): Attempting to start service discovery... succeed
D/BluetoothGatt(32012): onConfigureMTU() - Device=DE:F2:E6:5C:E3:83 mtu=30 status=0
W/BluetoothGatt(32012): Unhandled exception in callback
/BluetoothGatt(32012): Unhandled exception in callback
W/BluetoothGatt(32012): java.lang.NullPointerException: Attempt to invoke virtual method 'void no.nordicsemi.android.dfu.DfuBaseService.sendLogBroadcast(int, java.lang.String)' on a null object reference
W/BluetoothGatt(32012): at no.nordicsemi.android.dfu.BaseDfuImpl$BaseBluetoothGattCallback.onMtuChanged(BaseDfuImpl.java:211)
W/BluetoothGatt(32012): at no.nordicsemi.android.dfu.DfuBaseService$5.onMtuChanged(DfuBaseService.java:1007)
W/BluetoothGatt(32012): at android.bluetooth.BluetoothGatt$1$13.run(BluetoothGatt.java:770)
W/BluetoothGatt(32012): at android.bluetooth.BluetoothGatt.runOrQueueCallback(BluetoothGatt.java:948)
W/BluetoothGatt(32012): at android.bluetooth.BluetoothGatt.-$$Nest$mrunOrQueueCallback(Unknown Source:0)
W/BluetoothGatt(32012): at android.bluetooth.BluetoothGatt$1.onConfigureMTU(BluetoothGatt.java:765)
W/BluetoothGatt(32012): at android.bluetooth.IBluetoothGattCallback$Stub.onTransact(IBluetoothGattCallback.java:353)
W/BluetoothGatt(32012): at android.os.Binder.execTransactInternal(Binder.java:1290)
W/BluetoothGatt(32012): at android.os.Binder.execTransact(Binder.java:1249)
D/BluetoothAdapter(32012): isLeEnabled(): ON
D/BluetoothLeScanner(32012): could not find callback wrapper
D/BluetoothAdapter(32012): isLeEnabled(): ON
D/BluetoothLeScanner(32012): onScannerRegistered() - status=6 scannerId=-1 mScannerId=0
D/BluetoothGatt(32012): onConnectionUpdated() - Device=DE:F2:E6:5C:E3:83 interval=6 latency=0 timeout=500 status=0
D/BluetoothGatt(32012): onSearchComplete() = Device=DE:F2:E6:5C:E3:83 Status=0
I/DfuBaseService(32012): Services discovered
I/DfuImpl (32012): Buttonless service without bond sharing found -> SDK 13 or newer
I/DfuImpl (32012): Enabling indications...
D/BluetoothGatt(32012): setCharacteristicNotification() - uuid: 8ec90003-f315-4f60-9fb8-838830daea50 enable: true
I/DfuImpl (32012): Sending Enter Bootloader (Op Code = 1)
I/DfuImpl (32012): Response received (Op Code = 1, Status = 1)
I/DfuBaseService(32012): Disconnecting from the device...
D/BluetoothGatt(32012): cancelOpen() - device: DE:F2:E6:5C:E3:83

Unable to track progress

This code is working fine on the device. Also, the OTA was successful. But I can not catch the progress coming in the console. Please let me now how to catch that. Thanks in advance.

Implementation

 var res =  await NordicDfu()
          .startDfu(
            device.id.id,
            otaController.otaFilePath,
            fileInAsset: false,
            onProgressChanged: (deviceAddress, percent, speed, avgSpeed, currentPart, partsTotal) {
              print(
                  'deviceAddress : $deviceAddress, percent: $percent, speed: $speed, avgSpeed: $avgSpeed, currentPart: $currentPart, partsTotal: $partsTotal');
            },
            onDeviceConnected: (address) {
              print('onDeviceConnected : $address');
            },
            onDeviceConnecting: (address) {
              print('onDeviceConnecting : $address');
            },
            onDeviceDisconnected: (address) {
              print('onDeviceDisconnected : $address');
            },
            onDfuAborted: (address) {
              print('onDfuAborted : $address');
            },
            onError: (address, error, errorType, message) {
              print('Error Occures: address: $address, error: $error, errorType: $errorType, message:$message');
            },
            onDfuCompleted: (address) {
              print('onDfuComplete: $address');
            },
            onFirmwareValidating: (address) {
              print('onFirmwareValidating: $address');
            },
            onEnablingDfuMode: (address) {
              print('onEnablingDfuMode: $address');
            },
            onDfuProcessStarted: (address) {
              print('onDfuProcessStarted: $address');
            },
            onDeviceDisconnecting: (address) {
              print('onDeviceDisconnecting: $address');
            },
            onDfuProcessStarting: (address) {
              print('onDfuProcessStarting: $address');
            },
          );

In console I am getting this

I/flutter (28926): DFU FOUND OTA FILE PATH :: /storage/emulated/0/Android/data/com.example.app/files/OTA/app_dfu_package_3.2.4.zip
I/DfuBaseService(28926): DFU service created. Version: 2.0.3
I/BluetoothAdapter(28926): BluetoothAdapter() : com.example.app
I/DfuBaseService(28926): Starting DFU service in foreground
D/CompatibilityChangeReporter(28926): Compat change id reported: 160794467; UID 11156; state: ENABLED
I/DfuBaseService(28926): Connecting to the device...
I/BluetoothAdapter(28926): STATE_ON
D/BluetoothGatt(28926): connect() - device: CA:89:A0:BD:AB:5B, auto: false
I/BluetoothAdapter(28926): isSecureModeEnabled
D/BluetoothGatt(28926): registerApp()
D/BluetoothGatt(28926): registerApp() - UUID=e949a72f-c290-4e87-93e0-9a40bb11a1ad
D/BluetoothGatt(28926): onClientRegistered() - status=0 clientIf=9
D/BluetoothGatt(28926): onClientConnectionState() - status=0 clientIf=9 device=CA:89:A0:BD:AB:5B
I/DfuBaseService(28926): Connected to GATT server
D/BluetoothGatt(28926): discoverServices() - device: CA:89:A0:BD:AB:5B
I/DfuBaseService(28926): Attempting to start service discovery... succeed
I/DfuBaseService(28926): Action received: android.bluetooth.device.action.ACL_CONNECTED
D/BluetoothGatt(28926): onConnectionUpdated() - Device=CA:89:A0:BD:AB:5B interval=12 latency=0 timeout=600 status=0
D/BluetoothGatt(28926): onConnectionUpdated() - Device=CA:89:A0:BD:AB:5B interval=6 latency=0 timeout=500 status=0
D/BluetoothGatt(28926): onSearchComplete() = Device=CA:89:A0:BD:AB:5B Status=0
I/DfuBaseService(28926): Services discovered
W/DfuImpl (28926): Secure DFU bootloader found
D/BluetoothGatt(28926): onConnectionUpdated() - Device=CA:89:A0:BD:AB:5B interval=12 latency=0 timeout=600 status=0
I/DfuImpl (28926): Requesting MTU = 517
D/BluetoothGatt(28926): configureMTU() - device: CA:89:A0:BD:AB:5B mtu: 517
D/BluetoothGatt(28926): onConfigureMTU() - Device=CA:89:A0:BD:AB:5B mtu=247 status=0
I/DfuImpl (28926): MTU changed to: 247
I/DfuImpl (28926): Enabling notifications...
D/BluetoothGatt(28926): setCharacteristicNotification() - uuid: 8ec90001-f315-4f60-9fb8-838830daea50 enable: true
I/DfuImpl (28926): Setting object to Command (Op Code = 6, Type = 1)
I/DfuImpl (28926): Command object info received (Max size = 256, Offset = 0, CRC = 00000000)
I/DfuImpl (28926): Sending the number of packets before notifications (Op Code = 2, Value = 0)
I/DfuImpl (28926): Creating Init packet object (Op Code = 1, Type = 1, Size = 143)
I/DfuImpl (28926): Sending 143 bytes of init packet...
I/DfuImpl (28926): Sending init packet (Value = 12-8C-01-0A-46-08-01-12-42-08-C3-ED-01-10-34-1A-02-A8-01-20-00-28-00-30-00-38-F8-99-12-42-24-08-03-12-20-A1-06-8A-80-3C-8F-DF-30-A7-FC-C8-CD-A4-0F-7C-16-4E-2C-E7-24-CD-E2-EB-C3-68-AD-53-6A-1B-1D-5C-4B-48-00-52-04-08-01-12-00-10-00-1A-40-78-A4-DC-AF-F1-0B-44-A2-79-04-52-14-91-3F-E8-94-F0-AD-40-3F-7E-63-E1-3D-DC-92-00-B4-FC-DD-AC-07-CD-16-78-C2-15-07-30-97-98-B9-8E-A0-46-D2-3A-D6-90-79-36-90-28-F3-C1-00-DA-45-9A-EF-6D-6A-F0-3A)
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 143, CRC = C074A5B2)
I/DfuImpl (28926): Executing init packet (Op Code = 4)
I/DfuImpl (28926): Setting object to Data (Op Code = 6, Type = 2)
I/DfuImpl (28926): Data object info received (Max size = 4096, Offset = 0, CRC = 00000000)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (1/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 4096, CRC = 8C976DF7)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (2/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 8192, CRC = 59626881)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (3/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 12288, CRC = EDFFE118)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (4/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 16384, CRC = 66ADB855)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (5/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 20480, CRC = 6D565A8F)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (6/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 24576, CRC = 4428AB62)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (7/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 28672, CRC = DCE26946)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (8/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 32768, CRC = A0F35F3B)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (9/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 36864, CRC = 018E3EB9)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (10/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 40960, CRC = 953310EF)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (11/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 45056, CRC = 9B4FF22E)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (12/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 49152, CRC = CE23463A)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (13/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 53248, CRC = ECD8CF24)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (14/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 57344, CRC = D2340A68)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (15/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 61440, CRC = F46AC2C7)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (16/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 65536, CRC = 9A4F2BA4)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (17/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 69632, CRC = 03F00513)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (18/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 73728, CRC = 67A332BA)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (19/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 77824, CRC = 7C005C60)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (20/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 81920, CRC = 919B34D9)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (21/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 86016, CRC = 876642EF)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (22/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 90112, CRC = A030D62C)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (23/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 94208, CRC = D9241EB4)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (24/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 98304, CRC = D514FAA1)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (25/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 102400, CRC = 557FE1A5)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (26/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 106496, CRC = 7B0B374D)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (27/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 110592, CRC = 6061A093)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (28/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 114688, CRC = AB46F905)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (29/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 118784, CRC = 703B5BDB)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (30/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 122880, CRC = 109B0AF8)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (31/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 126976, CRC = 5A8F50FB)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (32/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 131072, CRC = E5D95CEF)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (33/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 135168, CRC = 10F99FA5)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (34/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 139264, CRC = 23B51AC7)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (35/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 143360, CRC = 4F2DA326)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (36/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 147456, CRC = 45DBE4C3)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (37/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 151552, CRC = DCFE25E0)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (38/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 155648, CRC = 44D4901E)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (39/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 159744, CRC = 31010E26)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (40/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 163840, CRC = D26D693B)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (41/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 167936, CRC = 876FF46C)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (42/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 172032, CRC = 237803B3)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (43/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 176128, CRC = B4687875)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (44/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 180224, CRC = F9ADCC0F)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (45/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 184320, CRC = 7505B81F)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (46/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 188416, CRC = 55DA27C7)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (47/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 192512, CRC = 28FAAE31)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (48/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 196608, CRC = 9A038892)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (49/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 200704, CRC = CE1B0054)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (50/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 204800, CRC = 8DE67C7D)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (51/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 208896, CRC = 8C9F29F3)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (52/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 212992, CRC = 0539BEA5)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (53/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 217088, CRC = 9207871A)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (54/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 221184, CRC = 6AC53882)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (55/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 225280, CRC = 284AE259)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (56/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 229376, CRC = 12045D42)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (57/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 233472, CRC = 1B1705B5)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (58/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 237568, CRC = 59A401A4)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (59/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 241664, CRC = 9ABD1448)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (60/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 245760, CRC = 06B8415E)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (61/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 249856, CRC = A7B8F2B5)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (62/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 253952, CRC = 392F9D3D)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (63/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 258048, CRC = 9E9662BA)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (64/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 262144, CRC = 85168FBC)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (65/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 266240, CRC = CED5DB50)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (66/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 270336, CRC = 5A4FAAAC)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (67/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 274432, CRC = EF3A2987)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (68/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 278528, CRC = B4B5F84F)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (69/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 282624, CRC = B8DE6D0C)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (70/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 286720, CRC = 6875FD2D)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (71/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 290816, CRC = 19E4AFA6)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 4096) (72/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 294912, CRC = 1BCFCDA5)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Creating Data object (Op Code = 1, Type = 2, Size = 3320) (73/73)
I/DfuImpl (28926): Uploading firmware...
I/DfuImpl (28926): Sending Calculate Checksum command (Op Code = 3)
I/DfuImpl (28926): Checksum received (Offset = 298232, CRC = 988C64C1)
I/DfuImpl (28926): Executing data object (Op Code = 4)
I/DfuImpl (28926): Transfer of 298232 bytes has taken 66776 ms
D/BluetoothGatt(28926): onClientConnectionState() - status=0 clientIf=9 device=CA:89:A0:BD:AB:5B
I/DfuBaseService(28926): Disconnected from GATT server
W/(28926): Accessing hidden method Landroid/bluetooth/BluetoothGatt;->refresh()Z (unsupported, reflection, allowed)
D/BluetoothGatt(28926): refresh() - device: CA:89:A0:BD:AB:5B
I/DfuBaseService(28926): Refreshing result: true
I/DfuBaseService(28926): Cleaning up...
D/BluetoothGatt(28926): cancelOpen() - device: CA:89:A0:BD:AB:5B
D/BluetoothGatt(28926): close()
D/BluetoothGatt(28926): unregisterApp() - mClientIf=9
I/DfuBaseService(28926): Action received: android.bluetooth.device.action.ACL_DISCONNECTED
I/DfuBaseService(28926): DFU service destroyed

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.