feat(sdk): upgradeFirmware 下发前校验电量 ≥40%,不足抛 .batteryTooLow

OTA 烧录前主动拉新鲜 getDeviceInfo 取实时电量,<40% 直接以
.batteryTooLow(current:required:) 失败、不发任何字节,防烧录中途断电变砖。
新增常量 minBatteryForUpgrade=40;烧录体抽出私有 performFirmwareTransfer。
README 补可用方法/属性汇总表。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
km2023
2026-05-19 17:19:23 +08:00
parent 4bc8fdb64d
commit a15403ae36
3 changed files with 92 additions and 1 deletions

View File

@@ -39,6 +39,7 @@ public enum DuooomiBleError: LocalizedError {
case permissionDenied
case unsupportedFormat(String)
case firmwareUpgradeUnavailable(String)
case batteryTooLow(current: Int, required: Int)
case brandMismatch(expected: String, actual: String)
public var errorDescription: String? {
@@ -77,6 +78,8 @@ public enum DuooomiBleError: LocalizedError {
return "Unsupported file format: \(ext). Supported: jpeg, png, gif, mp4, webm, webp"
case .firmwareUpgradeUnavailable(let reason):
return "Firmware upgrade unavailable: \(reason)"
case .batteryTooLow(let current, let required):
return "设备电量不足,无法升级 (当前 \(current)%,需 ≥ \(required)%)"
case .brandMismatch(let expected, let actual):
return "不支持该品牌设备 (expected=\(expected), actual=\(actual))"
}