Các đặc điểm sau khi thiết lập để thiết lập camera

Các đặc điểm có thể dùng sau khi thiết bị được thiết lập là:

OtaSoftwareUpdateRequestorTrait

Đặc điểm này cung cấp một giao diện để theo dõi bản cập nhật phần mềm OTA trên thiết bị camera. Sau khi được thiết lập, camera sẽ bắt đầu quá trình cập nhật và báo cáo trạng thái của quá trình này cho ứng dụng. Sau khi ứng dụng nhận được trạng thái cho biết quá trình cập nhật phần mềm đã hoàn tất, camera có thể bắt đầu phát trực tiếp.

Đoạn mã mẫu và nội dung giải thích sau đây minh hoạ cách sử dụng đặc điểm này.

device.types.subscribe(OtaRequestorDeviceType.self)
  .receive(on: DispatchQueue.main)
  .compactMap { $0.traits[Matter.OtaSoftwareUpdateRequestorTrait.self] }
  .removeDuplicates()
  .timeout(.seconds(30), scheduler: DispatchQueue.main)
  .sink { [weak self] completion in
    guard let self else { return }
    Logger.debug("OTA trait subscription completed unexpectedly: \(completion).")
    if case .otaDownload = self.step {
      Logger.debug("Advancing to settings step due to OTA trait subscription completion")
      self.step = .settings
    }
  } receiveValue: { [weak self] otaTrait in
    Logger.debug(
      "OTA update is in progress, state: \(otaTrait.attributes.updateState), progress: \(otaTrait.attributes.updateStateProgress ?? 0)"
    )

    self.step = .otaDownload(
      state: otaTrait.attributes.updateState ?? .querying,
      progress: Double(otaTrait.attributes.updateStateProgress ?? 0) / 100.0)
    }
  }
  .store(in: &cancellables)
  • Đăng ký các đặc điểm của thiết bị: Thao tác này đăng ký các đặc điểm của thiết bị, cụ thể là tìm OtaSoftwareUpdateRequestorTrait để nghe thông tin cập nhật OTA.

  • Đặt thời gian chờ: Thao tác này sẽ đặt thời gian chờ là 30 giây. Nếu không nhận được thông tin cập nhật nào từ đặc điểm trong khoảng thời gian đó, thì gói thuê bao sẽ kết thúc.

  • Xử lý thông tin cập nhật trạng thái OTA (receiveValue): Khi OtaSoftwareUpdateRequestorTrait cung cấp trạng thái mới, khối này sẽ được thực thi. Thao tác này ghi nhật ký trạng thái hiện tại và tiến trình của bản cập nhật OTA. Sau đó, nó sẽ cập nhật trạng thái nội bộ (step) của ứng dụng để phản ánh thông tin mới này.

  • Xử lý việc hoàn tất (sink): Khối này được thực thi khi gói thuê bao kết thúc và ghi lại trạng thái hoàn tất. Nếu quy trình đang ở trạng thái tải xuống, thì trạng thái ứng dụng sẽ chuyển sang bước tiếp theo (.settings).

  • Quản lý vòng đời của gói thuê bao: Dòng .store(in: &cancellables) đảm bảo rằng gói thuê bao được quản lý và huỷ đúng cách khi đối tượng sở hữu gói thuê bao đó được giải phóng.

Để biết thêm thông tin, hãy tham khảo tài liệu tham khảo về đặc điểm OtaSoftwareUpdateRequestorTrait.

ConfigurationDoneTrait

Đặc điểm này không bắt buộc để kích hoạt camera, nhưng cho phép ứng dụng theo dõi thời điểm thiết bị được thiết lập đầy đủ và có thể sử dụng bằng cách đặt thuộc tính AppConfigurationComplete thành true. Bạn nên sử dụng đặc điểm này sau OtaSoftwareUpdateRequestorTrait.

let configDoneTrait = try await device.types.get(OtaRequestorDeviceType.self)?.traits[Google.ConfigurationDoneTrait.self]
_ = try await configDoneTrait?.update {
  $0.setAppConfigurationComplete(true)
}