feat:sdk 增加判断是否有新固件可用

This commit is contained in:
km2023
2026-04-13 18:41:46 +08:00
parent ba0a80e921
commit 920c24456a
3 changed files with 28 additions and 5 deletions

View File

@@ -61,15 +61,21 @@ let sdk = DuooomiBleSDK(config: .init(
| 方法 | 返回 | 说明 |
|------|------|------|
| `fetchLatestFirmware(identifier:status:)` | `FirmwareInfo?` | 查询最新固件nil 表示无可用版本 |
| `hasNewerFirmware(deviceVersion:serverVersion:)` | `Bool` | 对比版本号末尾10位时间戳判断是否有新版本。参数无效返回 false |
| `upgradeFirmware(fileUrl: String)` | `Void` | OTA 传输固件包到设备 |
```swift
// 1.
let info = try await sdk.fetchLatestFirmware()
// 2. OTA
if let info {
// 2.
let needUpdate = sdk.hasNewerFirmware(
deviceVersion: sdk.version, //
serverVersion: info?.version //
)
// 3. OTA
try await sdk.upgradeFirmware(fileUrl: info.fileUrl)
}
```
### 可观察状态

View File

@@ -385,6 +385,21 @@ public final class DuooomiBleSDK: ObservableObject {
return try await firmwareService.fetchLatest(identifier: identifier, status: status)
}
///
/// 10
/// - Parameters:
/// - deviceVersion:
/// - serverVersion:
/// - Returns: true false
public func hasNewerFirmware(deviceVersion: String?, serverVersion: String?) -> Bool {
guard let device = deviceVersion, let server = serverVersion,
device.count >= 10, server.count >= 10 else { return false }
let deviceTs = device.suffix(10)
let serverTs = server.suffix(10)
guard let d = Int(deviceTs), let s = Int(serverTs) else { return false }
return s > d
}
/// OTA
/// - Parameter fileUrl: `fetchLatestFirmware()`
/// - Throws:

View File

@@ -200,6 +200,7 @@ struct WrapperTestView: View {
if let info = firmwareInfo {
VStack(alignment: .leading, spacing: 6) {
LabeledContent("Latest", value: info.version)
LabeledContent("Has Update", value: sdk.hasNewerFirmware(deviceVersion: sdk.version, serverVersion: info.version) ? "Yes" : "No")
if let size = info.fileSize {
let bytes = Int(size) ?? 0
LabeledContent("Size", value: ByteCountFormatter.string(fromByteCount: Int64(bytes), countStyle: .file))
@@ -429,7 +430,8 @@ struct WrapperTestView: View {
let info = try await sdk.fetchLatestFirmware(identifier: brand, status: firmwareStatus)
firmwareInfo = info
if let info {
log("firmware latest: \(info.version)", level: .success)
let hasUpdate = sdk.hasNewerFirmware(deviceVersion: sdk.version, serverVersion: info.version)
log("firmware latest: \(info.version), hasUpdate=\(hasUpdate)", level: .success)
} else {
log("no firmware available", level: .info)
}