Hello - We're designing a new app for our product in Flutter. I was writing the proof of concept for the firmware updates, but I hit a roadblock with a Mcu Mgr Error: 25 (group: 1)
error. In our previous apps we're using no.nordicsemi.android:mcumgr-ble:2.4.0
and it appears that this library is using no.nordicsemi.android:mcumgr-ble:1.8.2
(I'm also using whatever the latest version is on iOS as well). We have no problems with our production Android and iOS apps as those work great. So, I believe this error is just due to the outdated dependency being used. If so, are there any plans on upgrading this repo to use the latest version? If not, then do you have any plans on upgrading this soon or do I need to fork this and update it? Maybe I'm completely wrong and the v1.8.2 should be fine and it's another issue? Below is additional information if it's needed.
- We are currently using nRF Connect SDK v2.6.1 (we are going to be upgrading to the latest v3.0.x soon).
- We use Direct-XIP
Here are the Kconfig options:
CONFIG_MCUMGR=y CONFIG_MCUMGR_TRANSPORT_BT=y CONFIG_MCUMGR_TRANSPORT_BT_AUTHEN=n CONFIG_MCUMGR_TRANSPORT_BT_REASSEMBLY=y CONFIG_MCUMGR_TRANSPORT_BT_CONN_PARAM_CONTROL=y CONFIG_MCUMGR_TRANSPORT_NETBUF_COUNT=6 CONFIG_MCUMGR_TRANSPORT_WORKQUEUE_STACK_SIZE=4608 CONFIG_MCUMGR_GRP_IMG=y CONFIG_MCUMGR_GRP_IMG_STATUS_HOOKS=y CONFIG_MCUMGR_GRP_IMG_UPLOAD_CHECK_HOOK=y CONFIG_MCUMGR_MGMT_NOTIFICATION_HOOKS=y CONFIG_IMG_MANAGER=y CONFIG_BOOTLOADER_MCUBOOT=y CONFIG_NCS_SAMPLE_MCUMGR_BT_OTA_DFU=y CONFIG_NCS_SAMPLE_MCUMGR_BT_OTA_DFU_SPEEDUP=y CONFIG_MCUBOOT_BOOTLOADER_MODE_DIRECT_XIP=y
Here are the MCU boot config options:
CONFIG_BOOT_DIRECT_XIP=y
CONFIG_MCUBOOT_LOG_LEVEL_DBG=y
CONFIG_BOOT_SIGNATURE_TYPE_ECDSA_P256=y
CONFIG_LOG=y
CONFIG_LOG_PRINTK=y
CONFIG_LOG_MODE_IMMEDIATE=y
CONFIG_PRINTK=y
CONFIG_SERIAL=y
CONFIG_CONSOLE=y
CONFIG_PINCTRL=y
CONFIG_UART_CONSOLE=y
CONFIG_USE_SEGGER_RTT=n
CONFIG_DISABLE_FLASH_PATCH=y
Here is an example generated manifest.json:
{
"format-version": 0,
"time": 1748541413,
"files": [
{
"type": "application",
"board": "csi_evb034",
"soc": "nRF52840_QIAA",
"load_address": 49664,
"version_MCUBOOT+XIP": "6.0.13+0",
"slot": "0",
"size": 352032,
"file": "app_update.bin",
"modtime": 1748541402
},
{
"type": "application",
"board": "csi_evb034",
"soc": "nRF52840_QIAA",
"load_address": 545280,
"version_MCUBOOT+XIP": "6.0.13+0",
"slot": "1",
"size": 352031,
"file": "mcuboot_secondary_app_update.bin",
"modtime": 1748541413
}
],
"name": "EVB-034_Firmware",
"firmware": {
"zephyr": {
"revision": "d565737e7459ea129910e72cdab484ec0fee3d54-dirty"
},
"nrf": {
"revision": "eef645c4a31201df353fdff5447262d7675fa1c1"
}
}
}
Here is the proof-of-concept code I used to run the firmware update:
import 'dart:async';
import 'package:bluq_core/cs_core_lib.dart';
import 'package:bluq_core_ota/update_manager/cs_ota_firmware_manager.dart';
import 'package:mcumgr_flutter/mcumgr_flutter.dart';
import 'package:mcumgr_flutter/models/firmware_upgrade_mode.dart';
class CsOtaUpdateManager {
static final CsOtaUpdateManager _instance = CsOtaUpdateManager._internal();
factory CsOtaUpdateManager() => _instance;
CsOtaUpdateManager._internal();
Future<void> startUpdate(String deviceId, String assetPath) async {
final manager = await FirmwareUpdateManagerFactory().getUpdateManager(deviceId);
try {
manager.setup();
final images = await CsOtaFirmwareManager().loadFirmwareImages(assetPath);
if (images.isEmpty) {
CsLog.e('No firmware images found in the provided asset path.');
return;
}
manager.updateStateStream!.listen(
(event) {
if (event == FirmwareUpgradeState.success) {
CsLog.i('Update Success');
} else {
CsLog.i('Update State: $event');
}
},
onDone: () async => {await manager.kill()},
onError: (error) async => {CsLog.e('Update state stream error: $error'), await manager.kill()},
);
manager.progressStream.listen(
(event) => CsLog.i('Firmware update progress: ${event.bytesSent}/${event.imageSize} bytes'),
);
manager.logger.logMessageStream.listen((log) => CsLog.i(log.message));
await _updateWithFallback(manager, images);
} catch (e) {
CsLog.e('Error starting OTA update: $e');
}
}
Future<void> _updateWithFallback(FirmwareUpdateManager manager, List<Image> images) async {
const defaultConfig = FirmwareUpgradeConfiguration(
pipelineDepth: 4,
estimatedSwapTime: Duration(seconds: 10),
firmwareUpgradeMode: FirmwareUpgradeMode.uploadOnly, // Required for Direct-XIP mode
);
try {
manager.update(images, configuration: defaultConfig);
} catch (e) {
CsLog.w('Update failed with pipelineDepth 4, retrying with pipelineDepth 1 [Error: $e]');
// Note that this fallback is a workaround for devices, like most tested iPhones, that may not support a
// pipeline depth that's greater than 1. The default value for the pipeline depth is 1, so it's not shown here,
// but that's what the workaround is changing.
const fallbackConfig = FirmwareUpgradeConfiguration(
estimatedSwapTime: Duration(seconds: 10),
firmwareUpgradeMode: FirmwareUpgradeMode.uploadOnly,
);
try {
manager.update(images, configuration: fallbackConfig);
} catch (e) {
CsLog.e('Firmware update failed after fallback [Error: $e]');
}
}
}
}
Here is a full log of the update:
D/BluetoothGatt( 3840): connect() - device: XX:XX:XX:XX:FA:A7, auto: false
D/BluetoothGatt( 3840): registerApp()
D/BluetoothGatt( 3840): registerApp() - UUID=1ad2d93b-7fc4-4232-b79f-391a5ef0c7b2
D/BluetoothGatt( 3840): onClientRegistered() - status=0 clientIf=9
D/BluetoothGatt( 3840): onClientConnectionState() - status=0 clientIf=9 connected=true device=XX:XX:XX:XX:FA:A7
D/BluetoothGatt( 3840): onConfigureMTU() - Device=XX:XX:XX:XX:FA:A7 mtu=498 status=0
I/flutter ( 3840): ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): │ #0 CsLog.i (package:bluq_core/core/cs_log.dart:24:13)
I/flutter ( 3840): │ #1 CsOtaUpdateManager.startUpdate.<anonymous closure> (package:bluq_core_ota/update_manager/cs_ota_update_manager.dart:42:61)
I/flutter ( 3840): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
I/flutter ( 3840): │ 💡 Connected to CB:A2:C0:0A:FA:A7
I/flutter ( 3840): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): │ #0 CsLog.i (package:bluq_core/core/cs_log.dart:24:13)
I/flutter ( 3840): │ #1 CsOtaUpdateManager.startUpdate.<anonymous closure> (package:bluq_core_ota/update_manager/cs_ota_update_manager.dart:42:61)
I/flutter ( 3840): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
I/flutter ( 3840): │ 💡 MTU changed to: 498
I/flutter ( 3840): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
D/BluetoothGatt( 3840): discoverServices() - device: XX:XX:XX:XX:FA:A7
D/BluetoothGatt( 3840): onSearchComplete() = Device=XX:XX:XX:XX:FA:A7 Status=0
D/BluetoothGatt( 3840): setCharacteristicNotification() - uuid: da2e7828-fbce-4e01-ae9e-261174997c48 enable: true
I/flutter ( 3840): ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): │ #0 CsLog.i (package:bluq_core/core/cs_log.dart:24:13)
I/flutter ( 3840): │ #1 CsOtaUpdateManager.startUpdate.<anonymous closure> (package:bluq_core_ota/update_manager/cs_ota_update_manager.dart:42:61)
I/flutter ( 3840): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
I/flutter ( 3840): │ 💡 Services discovered
I/flutter ( 3840): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): │ #0 CsLog.i (package:bluq_core/core/cs_log.dart:24:13)
I/flutter ( 3840): │ #1 CsOtaUpdateManager.startUpdate.<anonymous closure> (package:bluq_core_ota/update_manager/cs_ota_update_manager.dart:42:61)
I/flutter ( 3840): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
I/flutter ( 3840): │ 💡 Data written to descr. 00002902-0000-1000-8000-00805f9b34fb
I/flutter ( 3840): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): │ #0 CsLog.i (package:bluq_core/core/cs_log.dart:24:13)
I/flutter ( 3840): │ #1 CsOtaUpdateManager.startUpdate.<anonymous closure> (package:bluq_core_ota/update_manager/cs_ota_update_manager.dart:42:61)
I/flutter ( 3840): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
I/flutter ( 3840): │ 💡 Data written to da2e7828-fbce-4e01-ae9e-261174997c48
I/flutter ( 3840): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): │ #0 CsLog.i (package:bluq_core/core/cs_log.dart:24:13)
I/flutter ( 3840): │ #1 CsOtaUpdateManager.startUpdate.<anonymous closure> (package:bluq_core_ota/update_manager/cs_ota_update_manager.dart:42:61)
I/flutter ( 3840): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
I/flutter ( 3840): │ 💡 Notification received from da2e7828-fbce-4e01-ae9e-261174997c48, value: (0x) 01-00-00-19-00-00-FF-06-BF-68-62-75-66-5F-73-69-7A-65-19-09-AB-69-62-75-66-5F-63-6F-75-6E-74-06-FF
I/flutter ( 3840): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): │ #0 CsLog.i (package:bluq_core/core/cs_log.dart:24:13)
I/flutter ( 3840): │ #1 CsOtaUpdateManager.startUpdate.<anonymous closure> (package:bluq_core_ota/update_manager/cs_ota_update_manager.dart:42:61)
I/flutter ( 3840): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
I/flutter ( 3840): │ 💡 Wait for value changed complete
I/flutter ( 3840): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): │ #0 CsLog.i (package:bluq_core/core/cs_log.dart:24:13)
I/flutter ( 3840): │ #1 CsOtaUpdateManager.startUpdate.<anonymous closure> (package:bluq_core_ota/update_manager/cs_ota_update_manager.dart:42:61)
I/flutter ( 3840): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄%E2%94%84┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄%E2%94%84┄┄┄┄┄┄┄┄┄
I/flutter ( 3840): │ 💡 Received Header (Version: 0, Op: 1, Flags: 0, Len: 25, Group: 0, Seq: 255, Command: 6) CBOR {"buf_size":2475,"buf_count":6}
I/flutter ( 3840): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): │ #0 CsLog.i (package:bluq_core/core/cs_log.dart:24:13)
I/flutter ( 3840): │ #1 CsOtaUpdateManager.startUpdate.<anonymous closure> (package:bluq_core_ota/update_manager/cs_ota_update_manager.dart:42:61)
I/flutter ( 3840): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
I/flutter ( 3840): │ 💡 SMP reassembly supported with buffer size: 2475 bytes and count: 6
I/flutter ( 3840): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): │ #0 CsLog.i (package:bluq_core/core/cs_log.dart:24:13)
I/flutter ( 3840): │ #1 CsOtaUpdateManager.startUpdate.<anonymous closure> (package:bluq_core_ota/update_manager/cs_ota_update_manager.dart:42:61)
I/flutter ( 3840): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
I/flutter ( 3840): │ 💡 Sending (10 bytes) Header (Version: 1, Op: 0, Flags: 0, Len: 2, Group: 0, Seq: 0, Command: 8) CBOR {}
I/flutter ( 3840): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): │ #0 CsLog.i (package:bluq_core/core/cs_log.dart:24:13)
I/flutter ( 3840): │ #1 CsOtaUpdateManager.startUpdate.<anonymous closure> (package:bluq_core_ota/update_manager/cs_ota_update_manager.dart:42:61)
I/flutter ( 3840): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
I/flutter ( 3840): │ 💡 Data written to da2e7828-fbce-4e01-ae9e-261174997c48
I/flutter ( 3840): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): │ #0 CsLog.i (package:bluq_core/core/cs_log.dart:24:13)
I/flutter ( 3840): │ #1 CsOtaUpdateManager.startUpdate.<anonymous closure> (package:bluq_core_ota/update_manager/cs_ota_update_manager.dart:42:61)
I/flutter ( 3840): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
I/flutter ( 3840): │ 💡 Notification received from da2e7828-fbce-4e01-ae9e-261174997c48, value: (0x) 09-00-00-15-00-00-00-08-BF-6A-62-6F-6F-74-6C-6F-61-64-65-72-67-4D-43-55-62-6F-6F-74-FF
I/flutter ( 3840): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): │ #0 CsLog.i (package:bluq_core/core/cs_log.dart:24:13)
I/flutter ( 3840): │ #1 CsOtaUpdateManager.startUpdate.<anonymous closure> (package:bluq_core_ota/update_manager/cs_ota_update_manager.dart:42:61)
I/flutter ( 3840): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
I/flutter ( 3840): │ 💡 Received Header (Version: 1, Op: 1, Flags: 0, Len: 21, Group: 0, Seq: 0, Command: 8) CBOR {"bootloader":"MCUboot"}
I/flutter ( 3840): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): │ #0 CsLog.i (package:bluq_core/core/cs_log.dart:24:13)
I/flutter ( 3840): │ #1 CsOtaUpdateManager.startUpdate.<anonymous closure> (package:bluq_core_ota/update_manager/cs_ota_update_manager.dart:42:61)
I/flutter ( 3840): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
I/flutter ( 3840): │ 💡 Sending (21 bytes) Header (Version: 1, Op: 0, Flags: 0, Len: 13, Group: 0, Seq: 1, Command: 8) CBOR {"query":"mode"}
I/flutter ( 3840): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): │ #0 CsLog.i (package:bluq_core/core/cs_log.dart:24:13)
I/flutter ( 3840): │ #1 CsOtaUpdateManager.startUpdate.<anonymous closure> (package:bluq_core_ota/update_manager/cs_ota_update_manager.dart:42:61)
I/flutter ( 3840): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
I/flutter ( 3840): │ 💡 Data written to da2e7828-fbce-4e01-ae9e-261174997c48
I/flutter ( 3840): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): ┌───────────────────────────────────────────────────────────────────────────────────────────────%E2%94%80───────────────────────
I/flutter ( 3840): │ #0 CsLog.i (package:bluq_core/core/cs_log.dart:24:13)
I/flutter ( 3840): │ #1 CsOtaUpdateManager.startUpdate.<anonymous closure> (package:bluq_core_ota/update_manager/cs_ota_update_manager.dart:42:61)
I/flutter ( 3840): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
I/flutter ( 3840): │ 💡 Notification received from da2e7828-fbce-4e01-ae9e-261174997c48, value: (0x) 09-00-00-08-00-00-01-08-BF-64-6D-6F-64-65-04-FF
I/flutter ( 3840): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): │ #0 CsLog.i (package:bluq_core/core/cs_log.dart:24:13)
I/flutter ( 3840): │ #1 CsOtaUpdateManager.startUpdate.<anonymous closure> (package:bluq_core_ota/update_manager/cs_ota_update_manager.dart:42:61)
I/flutter ( 3840): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
I/flutter ( 3840): │ 💡 Received Header (Version: 1, Op: 1, Flags: 0, Len: 8, Group: 0, Seq: 1, Command: 8) CBOR {"mode":4}
I/flutter ( 3840): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): │ #0 CsLog.i (package:bluq_core/core/cs_log.dart:24:13)
I/flutter ( 3840): │ #1 CsOtaUpdateManager.startUpdate.<anonymous closure> (package:bluq_core_ota/update_manager/cs_ota_update_manager.dart:42:61)
I/flutter ( 3840): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
I/flutter ( 3840): │ 💡 Sending (10 bytes) Header (Version: 1, Op: 0, Flags: 0, Len: 2, Group: 1, Seq: 2, Command: 0) CBOR {}
I/flutter ( 3840): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): │ #0 CsLog.i (package:bluq_core/core/cs_log.dart:24:13)
I/flutter ( 3840): │ #1 CsOtaUpdateManager.startUpdate.<anonymous closure> (package:bluq_core_ota/update_manager/cs_ota_update_manager.dart:42:61)
I/flutter ( 3840): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
I/flutter ( 3840): │ 💡 Data written to da2e7828-fbce-4e01-ae9e-261174997c48
I/flutter ( 3840): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2
D/BluetoothGatt( 3840): onConnectionUpdated() - Device=XX:XX:XX:XX:FA:A7 interval=9 latency=0 timeout=42 status=0
I/flutter ( 3840): ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): │ #0 CsLog.i (package:bluq_core/core/cs_log.dart:24:13)
I/flutter ( 3840): │ #1 CsOtaUpdateManager.startUpdate.<anonymous closure> (package:bluq_core_ota/update_manager/cs_ota_update_manager.dart:42:61)
I/flutter ( 3840): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
I/flutter ( 3840): │ 💡 Notification received from da2e7828-fbce-4e01-ae9e-261174997c48, value: (0x) 09-00-00-87-00-01-02-00-BF-66-69-6D-61-67-65-73-9F-BF-64-73-6C-6F-74-00-67-76-65-72-73-69-6F-6E-66-36-2E-30-2E-31-32-64-68-61-73-68-58-20-75-99-23-CE-3A-75-29-CD-6B-B4-53-EB-1F-0B-77-DF-D3-17-2E-B9-14-9D-68-35-76-69-B8-64-2F-31-4A-73-68-62-6F-6F-74-61-62-6C-65-F5-67-70-65-6E-64-69-6E-67-F4-69-63-6F-6E-66-69-72-6D-65-64-F5-66-61-63-74-69-76-65-F5-69-70-65-72-6D-61-6E-65-6E-74-F4-FF-FF-6B-73-70-6C-69-74-53-74-61-74-75-73-00-FF
I/flutter ( 3840): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): │ #0 CsLog.i (package:bluq_core/core/cs_log.dart:24:13)
I/flutter ( 3840): │ #1 CsOtaUpdateManager.startUpdate.<anonymous closure> (package:bluq_core_ota/update_manager/cs_ota_update_manager.dart:42:61)
I/flutter ( 3840): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
I/flutter ( 3840): │ 💡 Received Header (Version: 1, Op: 1, Flags: 0, Len: 135, Group: 1, Seq: 2, Command: 0) CBOR {"images":[{"slot":0,"version":"6.0.12","hash":"dZkjzjp1Kc1rtFPrHwt339MXLrkUnWg1dmm4ZC8xSnM=","bootable":true,"pending":false,"confirmed":true,"active":true,"permanent":false}],"splitStatus":0}
I/flutter ( 3840): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): │ #0 CsLog.i (package:bluq_core/core/cs_log.dart:24:13)
I/flutter ( 3840): │ #1 CsOtaUpdateManager.startUpdate.<anonymous closure> (package:bluq_core_ota/update_manager/cs_ota_update_manager.dart:42:61)
I/flutter ( 3840): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
I/flutter ( 3840): │ 💡 Connection parameters updated (interval: 11.25ms, latency: 0, timeout: 420ms)
I/flutter ( 3840): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): │ #0 CsLog.i (package:bluq_core/core/cs_log.dart:24:13)
I/flutter ( 3840): │ #1 CsOtaUpdateManager.startUpdate.<anonymous closure> (package:bluq_core_ota/update_manager/cs_ota_update_manager.dart:31:19)
I/flutter ( 3840): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
I/flutter ( 3840): │ 💡 Update State: Upload
I/flutter ( 3840): └──────%E2%94%80─────────────────────────────────────────────────────────────────────────────────────────────────%E2%94%80──────────────
I/flutter ( 3840): ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): │ #0 CsLog.e (package:bluq_core/core/cs_log.dart:63:13)
I/flutter ( 3840): │ #1 CsOtaUpdateManager.startUpdate.<anonymous closure> (package:bluq_core_ota/update_manager/cs_ota_update_manager.dart:35:42)
I/flutter ( 3840): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
I/flutter ( 3840): │ ⛔ Update state stream error: Mcu Mgr Error: 25 (group: 1)
I/flutter ( 3840): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
D/BluetoothGatt( 3840): cancelOpen() - device: XX:XX:XX:XX:FA:A7
D/BluetoothGatt( 3840): onClientConnectionState() - status=0 clientIf=9 connected=false device=XX:XX:XX:XX:FA:A7
D/BluetoothGatt( 3840): close()
D/BluetoothGatt( 3840): unregisterApp() - mClientIf=9
I/flutter ( 3840): ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter ( 3840): │ #0 CsLog.i (package:bluq_core/core/cs_log.dart:24:13)
I/flutter ( 3840): │ #1 CsOtaUpdateManager.startUpdate.<anonymous closure> (package:bluq_core_ota/update_manager/cs_ota_update_manager.dart:42:61)
I/flutter ( 3840): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
I/flutter ( 3840): │ 💡 Disconnected
I/flutter ( 3840): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Please let me know if there is anything else needed. Greatly appreciate any assistance on this.