ক্যামেরা অনবোর্ডিংয়ের জন্য কমিশন করার পরে থাকা ট্রেইট

   iOS-এর জন্য স্যাম্পেল অ্যাপে প্রয়োগ করা হয়েছে   

ডিভাইস চালু করার পরে যেসব বৈশিষ্ট্য ব্যবহার করা যেতে পারে সেগুলি হল:

OtaSoftwareUpdateRequestorTrait

এই বৈশিষ্ট্য ক্যামেরা ডিভাইসে OTA সফ্টওয়্যার আপডেট মনিটর করার জন্য একটি ইন্টারফেস প্রদান করে। কমিশন করা হয়ে গেলে, ক্যামেরা আপডেট শুরু করে এবং অ্যাপে এর স্ট্যাটাস রিপোর্ট করে। অ্যাপ সফ্টওয়্যার আপডেট সম্পূর্ণ হওয়ার স্ট্যাটাস পেয়ে গেলে, ক্যামেরা লাইভস্ট্রিম শুরু করতে পারে।

নিম্নলিখিত স্যাম্পেল কোড ও ব্যাখ্যা থেকে বোঝা যায় যে কীভাবে এই বৈশিষ্ট্য ব্যবহার করা যেতে পারে।

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)
  • ডিভাইস ট্রেটে সাবস্ক্রাইব করা: এটি ডিভাইসের ট্রেটে সাবস্ক্রাইব করে, বিশেষ করে OtaSoftwareUpdateRequestorTrait খোঁজে যাতে OTA আপডেট সংক্রান্ত তথ্য শুনতে পারে।

  • টাইমআউট সেট করা: এটি ৩০ সেকেন্ডের টাইমআউট সেট করে। সেই সময়ের মধ্যে ট্রেইট থেকে কোনও আপডেট না পেলে, সাবস্ক্রিপশন শেষ হয়ে যায়।

  • OTA স্ট্যাটাস আপডেট (receiveValue) ম্যানেজ করা: যখন OtaSoftwareUpdateRequestorTrait নতুন স্ট্যাটাস প্রদান করে, তখন এই ব্লক এক্সিকিউট করা হয়। এটি বর্তমান অবস্থা এবং OTA আপডেটের অগ্রগতি লগ করে। তারপর এটি এই নতুন তথ্য দেখানোর জন্য অ্যাপ্লিকেশনের ইন্টার্নাল স্ট্যাটাস (step) আপডেট করে।

  • হ্যান্ডলিং সম্পূর্ণ করা (sink): সাবস্ক্রিপশন শেষ হলে এই ব্লকটি এক্সিকিউট করা হয় এবং সম্পূর্ণ হওয়ার বিষয়টি লগ করে। প্রসেসটি ডাউনলোড করার অবস্থায় থাকলে, অ্যাপ্লিকেশনটি পরবর্তী ধাপে (.settings) এগিয়ে যায়।

  • সাবস্ক্রিপশন লাইফসাইকেল ম্যানেজ করা: .store(in: &cancellables) লাইন নিশ্চিত করে যে সাবস্ক্রিপশন সঠিকভাবে ম্যানেজ করা হয়েছে এবং যে অবজেক্টের মালিকানা আছে সেটি ডিলোক্যাট করা হলে বাতিল করা হয়েছে।

আরও তথ্যের জন্য, OtaSoftwareUpdateRequestorTrait ট্রেইট রেফারেন্স দেখুন।

ConfigurationDoneTrait

ক্যামেরা অ্যাক্টিভেট করার জন্য এই অ্যাট্রিবিউট প্রয়োজন হয় না, তবে এটি অ্যাপকে ডিভাইস সম্পূর্ণ সেট-আপ করা এবং ব্যবহারযোগ্য হওয়ার সময় ট্র্যাক করার অনুমতি দেয়, AppConfigurationComplete অ্যাট্রিবিউট true-এ সেট করার মাধ্যমে। এই বৈশিষ্ট্য OtaSoftwareUpdateRequestorTrait-এর পরে ব্যবহার করা উচিত।

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