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

Os traits que podem ser usados depois que o dispositivo é provisionado são:

Trait OtaSoftwareUpdateRequestor

Esse trait fornece uma interface para monitorar uma atualização de software OTA no dispositivo da câmera. Depois de provisionada, 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 transmitir ao vivo.

O exemplo de código e a explicação a seguir demonstram como o trait 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 dentro desse período, ela vai expirar.

  • Observação das mudanças de trait: o operador .distinctUntilChanged() garante que o código subsequente na cadeia só reaja quando o estado do trait mudar de verdade, o que o torna mais eficiente do que a pesquisa constante.

  • Processamento até a conclusão: o operador .transformWhile continua processando atualizações enquanto o updateState da OTA não for 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 trait.

Para mais informações, consulte a referência do trait OtaSoftwareUpdateRequestor.

Trait ConfigurationDone

Esse trait não é necessário para a ativação da câmera, mas permite que o app acompanhe quando o dispositivo estiver totalmente configurado e utilizável, definindo o atributo AppConfigurationComplete como true. Esse trait precisa ser usado depois do trait OtaSoftwareUpdateRequestor.

device.trait(ConfigurationDone).first().update { setAppConfigurationComplete(true) }