Voici les traits qui peuvent être utilisés une fois l'appareil mis en service :
Trait OtaSoftwareUpdateRequestor
Ce trait fournit une interface permettant de surveiller une mise à jour logicielle OTA sur la caméra. Une fois la caméra mise en service, elle lance la mise à jour et indique son état à l'application. Une fois que l'application reçoit l'état indiquant que la mise à jour logicielle est terminée, la caméra peut commencer à diffuser en direct.
L'exemple de code et l'explication suivants montrent comment utiliser le trait.
withTimeout(OTA_TIMEOUT_MS) {
device.type(OtaRequestorDevice)
.mapNotNull { it?.trait(OtaSoftwareUpdateRequestor) }
.distinctUntilChanged()
.transformWhile { trait ->
emit(trait)
!isTerminalState(trait.updateState)
}
.collect { trait ->
updateState = trait.updateState
updateStateProgress = trait.updateStateProgress
}
}
Timeout :
withTimeoutapplique une durée maximale (OTA_TIMEOUT_MS) au processus de surveillance. Si la mise à jour ne se termine pas dans ce délai, elle expire.Observer les changements de caractéristiques : l'opérateur
.distinctUntilChanged()garantit que le code suivant de la chaîne ne réagit que lorsque l'état de la caractéristique change réellement, ce qui est plus efficace que l'interrogation constante.Traitement jusqu'à la fin : l'opérateur
.transformWhilecontinue de traiter les mises à jour tant que l'OTAupdateStaten'est pas dans un état final (comme "réussie" ou "échec").Collecte de l'état : pour chaque changement d'état, le bloc
.collectest exécuté pour mettre à jour les variablesupdateStateetupdateStateProgressavec les dernières valeurs du trait.
Pour en savoir plus, consultez la documentation de référence sur le trait OtaSoftwareUpdateRequestor.
Trait ConfigurationDone
Ce trait n'est pas nécessaire pour l'activation de la caméra, mais il permet à l'application de suivre le moment où l'appareil est entièrement configuré et utilisable en définissant l'attribut AppConfigurationComplete sur true.
Ce trait doit être utilisé après le trait OtaSoftwareUpdateRequestor.
device.trait(ConfigurationDone).first().update { setAppConfigurationComplete(true) }