import Foundation /// SDK 全局配置,在初始化时一次性传入。 public struct DuooomiBleConfig { /// API 服务地址 public let apiHost: URL /// API 鉴权 key(Loomart x-api-key) public let apiKey: String /// 设备品牌名(所有 RPC 必带 `x-owner` header) public let brand: String /// CDN 资源地址(末尾带 `/`) public let cdnHost: String /// ANI 转换宽度(像素) public let aniWidth: Int /// ANI 转换高度(像素) public let aniHeight: Int /// ANI 转换帧率 public let aniFps: String /// 扫描时按设备蓝牙广播名前缀过滤(大小写不敏感)。**必填**,由集成方约定固件广播名前缀。 public let scanNamePrefix: String /// 协议帧之间的发送间隔(毫秒)。合法区间 `[0, 500]`,越界仅 warn,使用点会 clamp。 /// 集成方一般无需调整;调高用于排查接收端丢帧/拥塞。默认 35。 public let frameIntervalMs: Int /// SDK 日志等级。默认 `.off`,对外发布完全静默;排查时改 `.warn` 或 `.debug`。 /// Release 构建因 `#if DEBUG` 条件编译,任何 level 都不会输出。 public let logLevel: BleLogLevel public init( apiHost: URL = URL(string: "https://api.duooomi.com")!, apiKey: String, brand: String, cdnHost: String = "https://cdn.bowong.cc/", aniWidth: Int = 360, aniHeight: Int = 360, aniFps: String = "24", scanNamePrefix: String, frameIntervalMs: Int = 35, logLevel: BleLogLevel = .off ) { self.apiHost = apiHost self.apiKey = apiKey self.brand = brand self.cdnHost = cdnHost.hasSuffix("/") ? cdnHost : cdnHost + "/" self.aniWidth = aniWidth self.aniHeight = aniHeight self.aniFps = aniFps self.scanNamePrefix = scanNamePrefix self.frameIntervalMs = frameIntervalMs self.logLevel = logLevel } }