dev: add some logging for dfu
This commit is contained in:
@ -13,11 +13,14 @@ import 'package:abawo_bt_app/widgets/gear_ratio_editor_card.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:nb_utils/nb_utils.dart';
|
||||
|
||||
import '../controller/bluetooth.dart';
|
||||
import '../database/database.dart';
|
||||
|
||||
final _log = Logger('DeviceDetailsPage');
|
||||
|
||||
class DeviceDetailsPage extends ConsumerStatefulWidget {
|
||||
const DeviceDetailsPage({
|
||||
required this.deviceAddress,
|
||||
@ -139,6 +142,10 @@ class _DeviceDetailsPageState extends ConsumerState<DeviceDetailsPage> {
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_log.info(
|
||||
'Disposing device details page for ${widget.deviceAddress}; '
|
||||
'dfuState=${_dfuProgress.state}, isFirmwareUpdateBusy=$_isFirmwareUpdateBusy',
|
||||
);
|
||||
unawaited(_disconnectOnClose());
|
||||
_connectionStatusSubscription?.close();
|
||||
_statusSubscription?.cancel();
|
||||
@ -150,10 +157,12 @@ class _DeviceDetailsPageState extends ConsumerState<DeviceDetailsPage> {
|
||||
|
||||
Future<void> _disconnectOnClose() async {
|
||||
if (_isFirmwareUpdateBusy) {
|
||||
_log.info('Skipping disconnect on close because firmware update is busy');
|
||||
return;
|
||||
}
|
||||
|
||||
if (_hasRequestedDisconnect) {
|
||||
_log.fine('Disconnect on close already requested');
|
||||
return;
|
||||
}
|
||||
|
||||
@ -174,6 +183,13 @@ class _DeviceDetailsPageState extends ConsumerState<DeviceDetailsPage> {
|
||||
|
||||
final (status, connectedDeviceId) = data;
|
||||
final isCurrentDevice = connectedDeviceId == widget.deviceAddress;
|
||||
if (_isFirmwareUpdateBusy || _dfuProgress.state != DfuUpdateState.idle) {
|
||||
_log.info(
|
||||
'Connection update during firmware flow: status=$status, '
|
||||
'connectedDevice=$connectedDeviceId, expected=${widget.deviceAddress}, '
|
||||
'isCurrentDevice=$isCurrentDevice, dfuState=${_dfuProgress.state}',
|
||||
);
|
||||
}
|
||||
|
||||
if (isCurrentDevice && status == ConnectionStatus.connected) {
|
||||
_startStatusStreamingIfNeeded();
|
||||
@ -520,6 +536,11 @@ class _DeviceDetailsPageState extends ConsumerState<DeviceDetailsPage> {
|
||||
if (!mounted) {
|
||||
return;
|
||||
}
|
||||
_log.info(
|
||||
'Firmware progress: state=${progress.state}, '
|
||||
'sent=${progress.sentBytes}/${progress.totalBytes}, '
|
||||
'expectedOffset=${progress.expectedOffset}, error=${progress.errorMessage}',
|
||||
);
|
||||
setState(() {
|
||||
_dfuProgress = progress;
|
||||
if (progress.state == DfuUpdateState.failed &&
|
||||
@ -744,6 +765,7 @@ class _DeviceDetailsPageState extends ConsumerState<DeviceDetailsPage> {
|
||||
|
||||
Future<void> _exitPage() async {
|
||||
if (_isFirmwareUpdateBusy) {
|
||||
_log.warning('Blocked page exit while firmware update is busy');
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(
|
||||
content: Text(
|
||||
@ -753,6 +775,7 @@ class _DeviceDetailsPageState extends ConsumerState<DeviceDetailsPage> {
|
||||
return;
|
||||
}
|
||||
|
||||
_log.info('Exiting device details page to /devices');
|
||||
await _disconnectOnClose();
|
||||
if (!mounted) {
|
||||
return;
|
||||
@ -761,6 +784,8 @@ class _DeviceDetailsPageState extends ConsumerState<DeviceDetailsPage> {
|
||||
}
|
||||
|
||||
void _dismissFirmwareFullscreen() {
|
||||
_log.info(
|
||||
'Dismissing firmware fullscreen from state ${_dfuProgress.state}');
|
||||
setState(() {
|
||||
_dfuProgress = const DfuUpdateProgress(
|
||||
state: DfuUpdateState.idle,
|
||||
|
||||
Reference in New Issue
Block a user