Estas são as características que podem ser usadas depois que o dispositivo é comissionado:
Trait OtaSoftwareUpdateRequestor
Essa característica fornece uma interface para monitorar uma atualização de software OTA no dispositivo de câmera. Depois de ativada, a câmera inicia a atualização e informa o estado dela ao app. Quando o app recebe o status de que a atualização de software foi concluída, a câmera pode começar a transmissão ao vivo.
O exemplo de código e a explicação a seguir demonstram como o traço pode ser usado.
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
}
}
Tempo limite:
withTimeoutimpõe uma duração máxima (OTA_TIMEOUT_MS) para o processo de monitoramento. Se a atualização não for concluída nesse período, ela vai expirar.Observar mudanças de traços: o operador
.distinctUntilChanged()garante que o código subsequente na cadeia só reaja quando o estado do traço realmente mudar, o que torna esse processo mais eficiente do que a sondagem constante.Processamento até a conclusão: o operador
.transformWhilecontinua processando atualizações enquanto o OTAupdateStatenão estiver em um estado terminal (como sucesso ou falha).Coleta de status: para cada mudança de estado, o bloco
.collecté executado para atualizar as variáveisupdateStateeupdateStateProgresscom os valores mais recentes do traço.
Para mais informações, consulte a
referência de traço OtaSoftwareUpdateRequestor.
Trait ConfigurationDone
Essa característica não é necessária para a ativação da câmera, mas permite que o app
rastreie quando o dispositivo está totalmente configurado e pronto para uso definindo o atributo
AppConfigurationComplete como true.
Esse traço deve ser usado depois do traço OtaSoftwareUpdateRequestor.
device.trait(ConfigurationDone).first().update { setAppConfigurationComplete(true) }