83 lines
1.9 KiB
Dart
83 lines
1.9 KiB
Dart
import 'dart:typed_data';
|
|
|
|
class BootloaderDfuFirmwareMetadata {
|
|
const BootloaderDfuFirmwareMetadata({
|
|
required this.totalLength,
|
|
required this.crc32,
|
|
required this.appStart,
|
|
required this.imageVersion,
|
|
required this.sessionId,
|
|
required this.flags,
|
|
required this.vectorStackPointer,
|
|
required this.vectorReset,
|
|
});
|
|
|
|
final int totalLength;
|
|
final int crc32;
|
|
final int appStart;
|
|
final int imageVersion;
|
|
final int sessionId;
|
|
final int flags;
|
|
final int vectorStackPointer;
|
|
final int vectorReset;
|
|
}
|
|
|
|
class BootloaderDfuPreparedFirmware {
|
|
const BootloaderDfuPreparedFirmware({
|
|
required this.fileName,
|
|
required this.fileBytes,
|
|
required this.metadata,
|
|
this.filePath,
|
|
});
|
|
|
|
final String fileName;
|
|
final String? filePath;
|
|
final Uint8List fileBytes;
|
|
final BootloaderDfuFirmwareMetadata metadata;
|
|
}
|
|
|
|
enum FirmwareSelectionFailureReason {
|
|
canceled,
|
|
malformedSelection,
|
|
unsupportedExtension,
|
|
emptyFile,
|
|
imageTooSmall,
|
|
imageTooLarge,
|
|
invalidVectorTable,
|
|
readFailed,
|
|
}
|
|
|
|
class FirmwareSelectionFailure {
|
|
const FirmwareSelectionFailure({
|
|
required this.reason,
|
|
required this.message,
|
|
});
|
|
|
|
final FirmwareSelectionFailureReason reason;
|
|
final String message;
|
|
}
|
|
|
|
class FirmwareFileSelectionResult {
|
|
const FirmwareFileSelectionResult._({
|
|
this.firmware,
|
|
this.failure,
|
|
});
|
|
|
|
final BootloaderDfuPreparedFirmware? firmware;
|
|
final FirmwareSelectionFailure? failure;
|
|
|
|
bool get isSuccess => firmware != null;
|
|
|
|
bool get isCanceled =>
|
|
failure?.reason == FirmwareSelectionFailureReason.canceled;
|
|
|
|
static FirmwareFileSelectionResult success(
|
|
BootloaderDfuPreparedFirmware firmware) {
|
|
return FirmwareFileSelectionResult._(firmware: firmware);
|
|
}
|
|
|
|
static FirmwareFileSelectionResult failed(FirmwareSelectionFailure failure) {
|
|
return FirmwareFileSelectionResult._(failure: failure);
|
|
}
|
|
}
|