कैमरे को चालू करने के बाद की जाने वाली कार्रवाइयों के लिए उपलब्ध ट्रेट

डिवाइस को चालू करने के बाद, इन ट्रेट का इस्तेमाल किया जा सकता है:

OtaSoftwareUpdateRequestorTrait

इस ट्रेट की मदद से, कैमरा डिवाइस पर सॉफ़्टवेयर के ओटीए अपडेट को मॉनिटर किया जा सकता है. कमीशन किए जाने के बाद, कैमरा अपडेट शुरू करता है और ऐप्लिकेशन को इसकी स्थिति के बारे में बताता है. जब ऐप्लिकेशन को यह सूचना मिलती है कि सॉफ़्टवेयर अपडेट पूरा हो गया है, तब कैमरा लाइव स्ट्रीमिंग शुरू कर सकता है.

यहां दिए गए सैंपल कोड और जानकारी से पता चलता है कि इस ट्रेट का इस्तेमाल कैसे किया जा सकता है.

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 की तलाश करता है, ताकि ओटीए अपडेट की जानकारी मिल सके.

  • टाइमआउट सेट करना: इससे 30 सेकंड का टाइमआउट सेट हो जाता है. अगर इस दौरान, ट्रेट से कोई अपडेट नहीं मिलता है, तो सदस्यता खत्म हो जाती है.

  • ओटीए अपडेट की स्थिति से जुड़े अपडेट मैनेज करना (receiveValue): जब receiveValue कोई नई स्थिति दिखाता है, तब इस ब्लॉक को लागू किया जाता है.OtaSoftwareUpdateRequestorTrait यह कुकी, ओटीए अपडेट की मौजूदा स्थिति और प्रोग्रेस को लॉग करती है. इसके बाद, यह ऐप्लिकेशन की इंटरनल स्थिति (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)
}