Comunicação Serial em JAVA - Uma análise - DI

Propaganda
COMUNICAÇÃO SERIAL EM JAVA – Uma análise
comparativa entre a Java Communication API e a RXTX
Native Library
Lenardo C. e Silva, Marlon L. R. Silva¹
Grupo de Engenharia de Software – Universidade do Estado do Rio Grande do Norte
(UERN) – Mossoró – RN - Brasil
{lenardocs,marlon.lamartine}@gmail.com
Abstract. This report aims to perform a comparative analysis between the
Java Communication API (Application Programming Interface) and RXTX
Native Library, to communication serial/parallel, describing their main
characteristics and trade-offs involved, in order to facilitate the correct choice
on the part of Java developers in each of its designs for Hardware / Software.
Resumo. Este relatório tem como objetivo realizar uma análise comparativa
entre a Java Communication API (Interface de Programação de Aplicação) e
a biblioteca nativa RXTX, destinadas a comunicação serial/paralela,
descrevendo suas principais características e trade-offs associados, de forma
a facilitar a escolha correta por parte dos desenvolvedores Java em cada um
de seus projetos de Hardware/Software.
1. Introdução
Dispositivos microprocessadores e micro-controladores contêm recursos de
comunicação que propiciam a correspondência de dados entre dois sistemas. Dentre as
diversas formas de comunicação existentes para permuta de dados entre tais dispositivos,
há dois padrões que, em geral, estão disponíveis, no caso o padrão RS-232 (cuja
comunicação dar-se por meio de uma porta serial) e o padrão IEEE-1284 (destinado a
comunicação paralela). A comunicação entre dois sistemas ou equipamentos de
hardware exige o conhecimento mínimo de algumas áreas, como eletrônica digital,
interfaces e padrões de comunicação, bem como de uma linguagem de programação com
os devidos recursos disponíveis.
Neste contexto, a linguagem Java vem se tornando muito comum entre os
programadores, por ser uma linguagem de alto nível, com recursos avançados em termos
de funcionalidades e segurança. Ela foi criada para se tornar funcional em diferentes
plataformas, tal como os Sistemas Operacionais Windows e o Unix, mais precisamente
na sua versão mais popular o Linux1.
1
RABELLO, L. M.; Programa em Linguagem JAVA para comunicação Serial. São Carlos, SP. 2009. 7p. (Embrapa. Comunicado
Técnico).
Esta pesquisa está vinculada a um projeto submetido e aprovado no EDITAL N°
001/2010-DP/PROPEG/UERN destinado a seleção de projetos e discentes
bolsistas/voluntários para o Programa de Bolsas de Iniciação Científica – PIBIC. No
entanto, a aprovação foi realocada na cota de bolsas PIBITI CNPq (Bolsa de Iniciação
em Desenvolvimento Tecnológico e Inovação). O foco da pesquisa é desenvolver um
driver ou binding (elemento de ligação) – utilizando a linguagem de programação Java –
para comunicação serial que possibilite ao RFID Starter Kit realizar a comunicação com
aplicações Java, dispensando o uso de bibliotecas nativas (específicas de sistemas
operacionais) tornando-o mais flexível e portável. Vale salientar que o kit em questão,
trata-se de um kit didático para estudo e aprendizado da tecnologia RFID (Radio
Frequency IDentification), permitindo o desenvolvimento de aplicações nos mais
variados cenários, dentre eles controle de acesso, rastreamento de objetos, controle de
patrimônio e gerenciamento de inventário. Devido à escassez de documentação referente
às soluções disponíveis em linguagem Java, além de dúvidas em comparação ao
desempenho dos padrões de comunicação anteriormente mencionados, tornou-se
necessário fazer uma comparação entre elas, criando assim uma referência sobre a
temática para outros desenvolvedores, propiciando e incentivando o desenvolvimento de
novas aplicações.
2. JAVA COMMUNICATIONS API
2.1. Definição
A Java Communications API, usualmente conhecida como JavaComm API, não é uma
parte do núcleo do JDK (Java Development Kit), é uma expansão que facilita o
desenvolvimento de aplicações com acesso ao hardware, utilizando os padrões RS-232
(portas seriais) e IEEE-1284 (portas paralelas). Esta permite que aplicações
desenvolvidas em linguagem de programação JAVA se comuniquem com diversos
dispositivos computacionais através de Sistemas Embarcados, bem como outros hosts
que necessitem dos dados de tais aplicações. Dentre algumas destas tecnologias pode-se
mencionar os Smart Cards, dispositivos de serviços de escritórios (e.g. fax e modems),
assim como equipamentos terminais e robóticos.
O projeto JavaComm foi desenvolvido pela Sun Microsystems (Sun), a mesma
criadora da linguagem de programação Java, por conseqüência pode ser considerada
como a biblioteca oficial de comunicação serial JAVA.
Infelizmente, há alguns anos a JavaComm teve seu projeto estagnado pela Sun, o
que a tornou esquecida por seus desenvolvedores, embora, seja realizada periodicamente
correções de erros não triviais. As últimas atualizações da JavaComm estão disponíveis
para os Sistemas Operacionais Solaris SPARC, Solaris x86 e Linux x86.
Cada uma das implementações disponíveis pela Sun funciona com a linha de
produtos Cliente da Ray Sun, incluindo uma extensão que faz o mapeamento das portas,
permitindo uma manipulação para especificar a localização das portas, sua visibilidade,
nomes, e em alguns casos documentação 2.
2
Site Oficial da Sun-Oracle <http://java.sun.com>
2.2. Características da JavaComm API
De acordo com (SITE OFICIAL SUN-ORACLE) a JavaComm API possui propriedades
específicas para manipulação da comunicação serial/paralela, sendo elas:

Enumeração das portas (mapeamento de portas configuráveis pelo administrador e
pelo usuário);

Configuração da porta (taxa de transmissão, velocidade, bits de parada, paridade);

Acesso ao padrão EIA 232 (Electronic Industries Association) e sinais de pino: DTR
(Data Terminal Ready), CD (Carrier Detect), CTS (Clear To Send), RTS (Request
To Send) e DSR (Data Set Ready);

Transferência de dados através de portas seriais (RS-232) e paralelas (IEEE-1284);

Opções para controle de fluxo do hardware e software;

Opção para a notificação de eventos assíncronos:
2.3. JavaComm API no Windows
Para quem utiliza a JavaComm API no Windows, encontra uma pequena desvantagem.
A Sun não disponibiliza mais a versão 2.0 do JavaComm, a única que funciona em
plataforma win32, nem mesmo o download dessa versão a Sun disponibiliza em seu Web
Site. A versão 3.0, que é a atual, é a única que a Sun disponibiliza e dá suporte. Segundo
alguns fóruns de Java na internet, a versão 3.0 pode funcionar em plataforma win32, mas
fica a cargo do usuário desenvolver ou adaptar um driver para seu funcionamento
correto.
2.4. JavaComm API no Linux
A JavaComm API para Linux é um conjunto de drivers oficiais da Sun, para interface
serial: chamada de API Comm. Esses drivers permitem ao usuário usar portas seriais,
bem como portas paralelas em outro Sistema Operacional.
Como a JCL (JavaComm Linux) atualmente está incluída dentro do pacote da
RXTX, eventualmente ela suporta qualquer sistema operacional suportado pela mesma.
Do mesmo modo que no Windows, para quem utiliza JavaComm API no Linux
também encontra uma desvantagem, não existe versão para Linux de 64 bits. Além disso,
em testes realizados, a versão para Linux possui um bug (erro) em relação à j2sdk1.5,
que até o momento apresenta alguns casos onde a porta serial padrão não funciona.
3. RXTX NATIVE LIBRARY
A RXTX é uma biblioteca nativa que fornece comunicação serial e paralela (com
possibilidade de comunicação via Universal Serial Bus – USB) para o JDK. A Sun e as
demais empresas envolvidas no desenvolvimento da linguagem Java apóiam a
disponibilização de diversas APIs e bibliotecas para facilitar a comunicação entre
diversos dispositivos computacionais e suas aplicações, como é o caso da RXTX.
Esta biblioteca é baseada na JavaComm API. Suas características são
semelhantes com a vantagem sobre esta de que ela é portável para Linux, Windows e
Mac, enquanto que a JavaComm ultimamente é que está ingressando o processo de
desenvolvimento para múltiplas plataformas.
3.1. Características da RXTX NATIVE LIBRARY
Segundo o (SITE OFICIAL DO RXTX) algumas características do RXTX são:
- Transferência de dados através de portas seriais (RS-232) e paralelas (IEEE-1284);
- Permite comunicação serial half-duplex;
- Especifica portas disponíveis no PC (computador);
- Aplicação de Event Listeners para inicializar as estruturas nativas ao abrir uma porta;
- Opção para notificações de eventos;
4. Resultados da Análise Comparativa
Para escolhermos a melhor entre as duas, definiremos os pontos principais ao qual vamos
nos basear para fazermos a análise. O primeiro seria a viabilidade, é um fator importante
que leva em conta o desempenho em relação às aplicações em diversos sistemas
operacionais. O segundo seria o suporte às atualizações, que traz novidades aos
desenvolvedores que podem facilitar no desenvolvimento dos projetos. E por fim a
documentação, que acompanha os desenvolvedores na consulta dos métodos e
parâmetros utilizados no projeto.
JavaComm
RXTX
Viabilidade
Embora esteja sendo implementada para
outras plataformas, a JavaComm foi
inicialmente criada para Windows, sua
execução torna-se baixa devido a
incompatibilidade das plataformas. Além de
inumeráveis bugs encontrados em diversas
aplicações relatadas.
Ao contrário da JavaComm, a RXTX
foi criada justamente para independer
de plataformas, inclusive ser adaptada
para
Windows,
tornando-se
amplamente viável.
Suporte a
atualizações
A JavaComm não recebe apoio da sua
criadora, no caso a Sun, isso significa que
atualizações para esta API não estão nos
projetos futuros da empresa.
Como a RXTX foi criada por usuários
que necessitavam (e ainda necessitam)
da sua utilização, as chances dessa API
receber inovações são grandes.
Documentação
Embora a JavaComm esteja sem muitas
atualizações, encontrar informações sobre
ela na internet é relativamente fácil, embora
de forma inadequada e em algumas vezes
repetidas.
Ao contrário da JavaComm que foi
praticamente esquecida, mas fácil de
encontrar informações, a RXTX tem
documentação escassa, encontrando
alguma informação somente em blogs
ou fóruns a respeito.
Tabela 1. Comparação entre as duas API’s tendo em vista três características: Viabilidade,
Suporte a Atualizações e Documentação.
5. Conclusão
Após realizar esta pesquisa e analisar os principais trade-offs em relação aos recursos de
Java disponíveis para a comunicação serial/paralela com dispositivos computacionais,
levando em consideração às informações dos próprios desenvolvedores dos dois padrões
de comunicação em Java, pôde-se concluir que a biblioteca nativa RXTX é, atualmente, a
melhor alternativa a ser utilizada. Isto porque, embora sua documentação seja um pouco
escassa, dificultando o seu entendimento, esta é uma otimização da própria JavaComm
API, ou seja, herdando suas características, com a exceção de que a RXTX está mais
propícia a atualizações e os algoritmos contidos no próprio pacote são mais robustos.
Além disso, hoje em dia, há uma tendência a abandonar a JavaComm API, devido
ao apoio limitado da Sun (proprietária Oracle) e da documentação desatualizada. Em
contrapartida, percebe-se o uso crescente da RXTX Native Library por ter uma
comunidade desenvolvedora atuante e em contínua expansão.
6. Referências
RABELLO, L. M.; Programa em Linguagem JAVA para comunicação Serial. São
Carlos, SP. 2009. 7p. (Embrapa. Comunicado Técnico).
SILVA, R. V. R., Utilizando a API RXTX para manipulação da serial. Maringá.
2007. Disponível em: <http://www.devmedia.com.br/post-6722-Utilizando-a-APIRXTX-para-manipulacao-da-serial-Parte-I.html> Acessado em: 21 ago. 2010.
Wiki RXTX. Disponível em: <http://rxtx.qbang.org/wiki/index.php/Main_Page>
Acessado em: 20 ago. 2010.
SANTIAGO, M. de O.; API de comunicação SERIAL da SUN (JAVACOMM).
2007.
Dinsponível
em:
<http://www.devmedia.com.br/post-4169-API-decomunicacao-SERIAL-da-SUN--Javacomm.html> Acessado em: 02 set. 2010.
ORACLE – Sun Developer Network. Java Communications API. Disponível em:
<www.oracle.com/technetwork/java/index-jsp-141752.html> Acessado em: 21 ago.
2010.
HESTER,
K.;
CommAPI
for
Linux.
1998.
Disponível
em:
<http://www.geeksville.com/~kevinh/linuxcomm.html> Acessado em: 21 ago. 2010.
Serial
Programming/Serial
Java.
2010.
Disponível
em:
<http://en.wikibooks.org/wiki/Serial_Programming/Serial_Java> Acessado em: 02 set.
2010.
Download