Ir para o conteúdo
Idioma: PT

Como ver o que um aplicativo e uma tag trocam de verdade?

Registre você mesmo: cada comando enviado, cada resposta recebida, com uma marca de tempo, dos dois lados da interface que envolve as chamadas de rádio. O Android também guarda um registro do próprio tráfego do controlador dele, filtrado por padrão. O iOS não oferece nada equivalente, só erros.

O registro que você escreve

O registro que sempre existe é o que o seu código produz. Cada comando em bytes, cada resposta em bytes, a exceção quando há uma, e uma marca de tempo em cada: isso basta para reproduzir uma troca, contar as idas e voltas e ver onde uma tag foi perdida.

Ele fica no mesmo lugar que a página dos testes recomenda, em volta das chamadas que tocam o rádio, o que quer dizer que ele custa um lugar no código em vez de uma linha por ponto de chamada. Mantenha os bytes em hexadecimal e os mantenha inteiros: um registro truncado de uma troca que falha não responde nada.

O registro que o Android guarda

A plataforma guarda o dela. O registro NCI do próprio Android, na pilha NFC de código aberto, guarda os pacotes trocados com o controlador num buffer circular de 256 KB, nas duas direções, cada um com uma marca de tempo, e o serviço o despeja mediante pedido.

Duas propriedades decidem o que há nele. O modo, persist.nfc.snoop_log_mode, é filtrado a menos que seja posto em completo, e uma compilação depurável também derrama o buffer num arquivo sob /data/misc/nfc/logs. Num celular de varejo comum, o que você obtém é portanto uma visão filtrada; uma compilação de desenvolvimento mostra os quadros.

Esse é o tráfego do controlador, não as chamadas do seu aplicativo. Ele responde a uma pergunta diferente, e a útil: se o comando que o seu código acredita ter enviado é o comando que saiu.

O que o iOS dá a você

O Core NFC informa erros, não quadros. A lista é precisa o bastante para diagnosticar, uma conexão perdida, tentativas demais, uma tag que respondeu com erro, um pacote mais longo do que a tag aceita, uma sessão invalidada por baixo da chamada, e a página da invalidação cobre o lado da sessão disso.

Então no iOS o registro que você escreve é a troca inteira, o que é um argumento para escrevê-lo antes de precisar dele.

Ler o que volta

Saiba o que cada protocolo põe numa resposta. Uma APDU termina com dois bytes de estado, e 90 00 é o único que quer dizer concluído, o que a página das APDU tabula. Uma resposta ISO 15693 abre com um byte de sinalizadores cujo bit mais baixo quer dizer erro, seguido de um código, como descreve a página da 15693.

E leia as marcas de tempo, não apenas os bytes. Um intervalo de dezenas de milissegundos entre um comando e o seguinte é o seu próprio código pensando, e é a parte de um toque lento que você consegue corrigir.

Perguntas frequentes

Eu preciso de um analisador de rádio para ver a troca?

Para a maioria dos defeitos não. Um registro dos comandos e das respostas que o seu código envia e recebe os responde, e funciona nas duas plataformas.

O que o registro do Android contém?

Os pacotes trocados com o controlador, num buffer circular, com marca de tempo nas duas direções, filtrados a menos que a propriedade do modo seja posta em completo.

Existe um equivalente no iOS?

Não. O Core NFC dá erros em vez de quadros, então o registro no iOS é o que o aplicativo escreve.

O que o registro deve anotar?

Os bytes enviados, os bytes recebidos, a exceção se houver, e uma marca de tempo em cada linha, inteiros em vez de truncados.