डिवाइस को चालू करने के बाद, इन ट्रेट का इस्तेमाल किया जा सकता है:
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) को मैनेज करना: जब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)
}