Desenvolvimento

Near Field Communication (a.k.a NFC)

Nós da Jera gostamos da exploração de novas tecnologias, e há um tempo atrás adquirimos equipamentos de leitura e escrita de tags NFC, e eles chegaram. E vieram com algumas tags. Pra quem não sabe, NFC é uma tecnologia sem-fio de tags (ou cartões, chaveiros, whatever) que funcionam, ou ativam, apenas através da aproximação com um dispositivo de leitura. NFC acaba sendo um conjunto de especificações mas sua implementação física é através de RFID.

Um dos equipamentos opera apenas no padrão ISO14443A e as tags precisam estar a pelo menos a 1cm (na prática) próximo ao leitor. Outro equipamento nosso implementa a especificação ISO15693 e opera com outros tipos de tags que permitem um alcance maior (até no máximo 1m ou 1.5m, isso dependendo da potência do equipamento). Esse segundo equipamento é OEM e vem apenas com módulo RF e antena montada numa PCB, e logo, o Andrade, hardware-guy da Jera irá plugar um microcontrolador serial ou fazê-lo voar.

Mas o equipamento que trabalha com ISO14443A vem pronto, é só para plugar na USB de qualquer computador, instalar os drivers do microcontrolador serial e escrever o programa que quiser. Mas nosso leitor RR3036 tem um protocolo especifico para conversar com o controlador, que no nosso caso é um computador, usamos minha máquina mesmo. Mas infelizmente nosso fornecedor só nos forneceu um driver para Windows (DLL) e ainda por cima de código fechado. Fora os e códigos-fontes de programas demo bem mal-escritos que usam tal DLL.

Uso Mac OSX, e quando não estou no Mac, estou em algum Linux, o que fazer? Como tornar o driver multi-plataforma? Um saída foi escreve-lo novamente em Java, e agora, felizmente, nosso fornecedor camarada disponibilizou um documento descrevendo o protocolo. A interface serial do equipamento é via USB e com um driver do controlador serial já basta para que em qualquer ambiente se tenha a porta serial disponível assim que o equipamento é plugado.

O protocolo é relativamente simples de se trabalhar, uma sequência pequena de bytes que vai e outra que vem, a maioria das mensagens (ou comandos) não passam de 10 bytes. Mas NFC exige uma sequência correta de comandos para que você consiga fazer o que deseja. Geralmente, ler ou escrever. Não vou me delongar aqui, mas por exemplo, para fazer a leitura de uma tag é necessário fazer um request, que é um comando que verifica se uma tag esta presente ou não, se houver uma, a próxima ação é enviar um comando de anticollision que extrai o UID da tag no campo indutivo e verifica se não há mais de uma tag no campo (o que é considerado um problema), depois, com a UID da tag, você envia a chave de autenticação, solicita autenticação no bloco desejado e por fim, se todos os comandos anteriores forem bem sucedidos, você pode ler ou escrever no bloco.

Fizemos um pequeno teste e o equipamento já funciona no Mac OSX, e deve funcionar em Linux e Windows também. Podem esperar por parte da Jera alguns demos. O código-fonte atual do driver você pode encontrar no meu repositório no GitHub, esta em desenvolvimento nesse momento e não contempla todos os comandos, mas já é possível ler e escreve em qualquer bloco. Como o equipamento é necessário, se você quiser ver alguma demonstração ou até codar um pouco, nos visite.

Bom, é isso, NFC vem pra ficar (ou já chegou), apesar de não ser tão novo assim, pode ser muito explorado. Aliás, você já deve ter percebido o uso dessas tecnologias aqui no Brasil em uma porção de lugares. Essa tecnologia é muito utilizada como um mecanismo de identificação de acesso. Acesso a ônibus, metro, cinema, teatro, estádios. Mas sabe-se que há um grande e vasto campo para ser explorado, por exemplo, usa-los como meio de pagamento, mecanismo para cartões fidelidade, cartões pessoais “avançados”, transferência de dados P2P, etc. Nem preciso falar de Android, que pelo menos sua API já suporta NFC e é praticamente certo que muitos aparelhos irão vir com essa tecnologia embarcada. O Nexus S já vem e já há também uma porcão de apps prontas, fora claro, o Google Wallet. E você, onde gostaria de ver essa tecnologia?