डिवाइस को चालू करने के बाद, इन ट्रेट का इस्तेमाल किया जा सकता है:
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की तलाश करता है, ताकि ओटीए अपडेट की जानकारी मिल सके.टाइम आउट सेट करना: यह 30 सेकंड का टाइम आउट सेट करता है. अगर इस अवधि में, सदस्यता की स्थिति के बारे में कोई अपडेट नहीं मिलता है, तो सदस्यता खत्म हो जाती है.
ओटीए के स्टेटस अपडेट (
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)
}