import Foundation /// SDK 状态变化回调协议,替代 Combine @Published 观察。 /// 所有方法在主线程调用。 public protocol DuooomiBleSDKDelegate: AnyObject { /// 蓝牙连接状态变化 func sdk(_ sdk: DuooomiBleSDK, didChangeState state: ConnectionState) /// 扫描到的设备列表更新 func sdk(_ sdk: DuooomiBleSDK, didUpdateDevices devices: [DiscoveredDevice]) /// 已连接设备变化 func sdk(_ sdk: DuooomiBleSDK, didConnectDevice device: DiscoveredDevice?) /// 设备信息更新 func sdk(_ sdk: DuooomiBleSDK, didUpdateDeviceInfo info: DeviceInfo?) /// 固件版本更新 func sdk(_ sdk: DuooomiBleSDK, didUpdateVersion version: String) /// 激活状态变化 func sdk(_ sdk: DuooomiBleSDK, didChangeActivation isActivated: Bool) /// 传输进度更新 (0-100) func sdk(_ sdk: DuooomiBleSDK, didUpdateProgress progress: Int) /// 错误发生 func sdk(_ sdk: DuooomiBleSDK, didEncounterError error: String?) /// 升级记录变化(任何 `UpgradeRecord` 的新增 / 状态更新都会触发)。 /// 用来观察 `tryReportPendingUpgrade` 的对账上报结果: /// - `record.reported = true, outcome = .success` → 上报成功且版本命中 /// - `record.reported = true, outcome = .versionMismatch` → 上报成功但版本不匹配 /// - `record.reported = true, outcome = nil` → 30 天 TTL 过期未上报 /// - `record.reported = false` → 还在尝试 / HTTP 失败,下次再试 func sdk(_ sdk: DuooomiBleSDK, didUpdateUpgradeRecords records: [UpgradeRecord]) } /// 所有 delegate 方法提供默认空实现,调用方只需实现关心的方法。 public extension DuooomiBleSDKDelegate { func sdk(_ sdk: DuooomiBleSDK, didChangeState state: ConnectionState) {} func sdk(_ sdk: DuooomiBleSDK, didUpdateDevices devices: [DiscoveredDevice]) {} func sdk(_ sdk: DuooomiBleSDK, didConnectDevice device: DiscoveredDevice?) {} func sdk(_ sdk: DuooomiBleSDK, didUpdateDeviceInfo info: DeviceInfo?) {} func sdk(_ sdk: DuooomiBleSDK, didUpdateVersion version: String) {} func sdk(_ sdk: DuooomiBleSDK, didChangeActivation isActivated: Bool) {} func sdk(_ sdk: DuooomiBleSDK, didUpdateProgress progress: Int) {} func sdk(_ sdk: DuooomiBleSDK, didEncounterError error: String?) {} func sdk(_ sdk: DuooomiBleSDK, didUpdateUpgradeRecords records: [UpgradeRecord]) {} }