Características pós-comissionamento para integração de câmeras

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: withTimeout impõ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 .transformWhile continua processando atualizações enquanto o OTA updateState nã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áveis updateState e updateStateProgress com 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) }