diff --git a/README.md b/README.md index 904e4d0..3bee6c3 100644 --- a/README.md +++ b/README.md @@ -107,6 +107,28 @@ sdk.unbind(userId: "user-id") { result in /* ... */ } sdk.deleteFile(key: "file-key") { result in /* ... */ } ``` +#### 播放模式(Play Mode) + +> ⚠️ **前置条件 — 必须先绑定。** `setPlayMode` 复用 `BIND_DEVICE` (0x0F) 命令通道,固件设计上要求设备先和该 `userId` 完成 `bind`(即 SDK `isActivated == true`)才能切播放模式。SDK 在客户端做了守卫:未绑定时直接 fail,不会发命令。请在 UI 上禁用切换按钮,直到 `didChangeActivation(true)` 回调到达。 + +```swift +// 0 = 单播(播完一次停)/ 1 = 循环播放 +sdk.setPlayMode(.loop, userId: "user-id") { result in + switch result { + case .success: + // 成功后 SDK 自动刷新 deviceInfo, + // 通过 didUpdateDeviceInfo 回调拿到最新 info.loop + break + case .failure(let error): + print("setPlayMode failed: \(error)") + } +} +``` + +**注意事项:** +- `bind` / `unbind` / `setPlayMode` 共享 `0x0F` / `0x12` 响应通道,**不要并发调用** +- 旧固件可能不支持 `loop` 字段 —— 此时 `DeviceInfo.loop` 为 `nil`,调用 `setPlayMode` 设备可能回 `success=0` + ### 文件传输 ```swift @@ -174,6 +196,12 @@ public struct FirmwareInfo { let status: String? // DRAFT / PUBLISHED } +// PlayMode — 播放模式 +public enum PlayMode: Int { + case single = 0 // 单播 + case loop = 1 // 循环播放 +} + // DeviceInfo — getDeviceInfo 返回 public struct DeviceInfo { let name: String // 设备名 @@ -182,6 +210,7 @@ public struct DeviceInfo { let powerlevel: Int // 电量百分比 let allspace: UInt64 // 总存储(字节) let freespace: UInt64 // 可用存储(字节) + let loop: PlayMode? // 播放模式(旧固件无此字段时为 nil) } // BindingResponse — bind 返回