Caso você deseje validar se a maquininha selecionada para realizar uma transação é um terminal Zoop você pode utilizar o método assíncrono
**void checkTerminalCompatibility** (JSONObject joZoopTerminal, ZoopTerminalKeyValidatorListener listener)
disponível na classe **TerminalListManager**.
A seguir, descrevemos os 2 parâmetros do método **checkTerminalCompatibility**:
**"joZoopTerminal"** - dados da maquininha no formato **JSONObject** com a qual se abrirá comunicação para validar se é um terminal Zoop
**"listener"** - interface **ZoopTerminalKeyValidatorListener** que receberá o resultado do processo de validação da maquininha através de 2 _callbacks_ que deverão ser implementados. São eles:
**void compatibilityResult** (TypeTerminalKeyEnum var1, JSONObject var2)
**void compatibilityError** (TypeTerminalKeyErrorEnum var1, String var2)
Detalharemos cada um dos _callbacks_ em sequência.
**Interface ZoopTerminalKeyValidatorListener**
**compatibilityResult**
Este callback é acionado quando o SDK conseguiu chegar a um diagnóstico em relação a validação do terminal. Ele possui 2 parâmetros. O primeiro é um **"enum"**, retornado pelo SDK avisando o tipo de compatibilidade da maquininha em questão. Esse parâmetro pode assumir os seguintes valores:
**TypeTerminalKeyEnum.KEY_COMPATIBLE** - O terminal é compatível. Pode transacionar com as bandeiras suportadas pela Zoop
**TypeTerminalKeyEnum.KEY_PARTIALLY_COMPATIBLE** - O terminal é parcialmente compatível. Tem chave não Zoop. Portanto, não podemos garantir que suporta todas as bandeiras do tipo acima
**TypeTerminalKeyEnum.KEY_INCOMPATIBLE** - O terminal é incompatível
**TypeTerminalKeyEnum.UNKNOWN** - O terminal não é conhecido
O segundo parâmetro é um **JSONObject** contendo as bandeiras suportadas pela maquininha.
**compatibilityError**
Este callback é acionado quando o SDK **não** conseguiu chegar a um diagnóstico em relação a validação do terminal. Seu único parâmetro é um **enum** retornado pelo SDK avisando o tipo de erro encontrado ao tentar descobrir a compatibilidade da maquininha em questão. Esse parâmetro pode assumir os seguintes valores:
**TypeTerminalKeyErrorEnum.TERMINAL_NOT_AVAILABLE** - O terminal não está ativo ou está bloqueado
**TypeTerminalKeyErrorEnum.CONNECTION_BLUETOOTH_ERROR** - O dispositivo móvel não conseguiu se conectar ao terminal
**TypeTerminalKeyErrorEnum.PROCESS_VALIDATOR_CANCELLED** - O processo foi cancelado corretamente
**TypeTerminalKeyErrorEnum.ERROR_UNEXPECTED** - Ocorreu um erro inesperado
Persistência de dados
Uma vez que o procedimento nos informa se o terminal é ou não compatível, esta informação será salva localmente no dispositivo. Tal informação será utilizada em futuras consultas evitando assim uma nova conexão com o terminal e otimizando o tempo de execução.
**Interrompendo o processo**
Também disponibilizamos o método **void interruptCurrentThreadThatCheckTerminalCompatibility()** para realizar a interrupção de um processo de validação. É importante evitar realizar vários processo de validação simultâneos, já que cada conexão com terminal deve ser fechada corretamente. Por isso recomenda-se antes de iniciar um novo processo, realizar o cancelamento do processo em andamento através do método citado acima, e esperar o até o final do ciclo, i.e., ao receber a notificação **TypeTerminalKeyErrorEnum.PROCESS_VALIDATOR_CANCELLED**.