1. Acesso à porta paralela no Java!
Em continuação ao artigo anterior, continuaremos a falar sobre o acesso à porta paralela no windows, só que ao contrário do que foi abordado anteriormente, explicitaremos maneiras de como operar dispositivos externos atravéz da porta paralela por meio da liguagem Java.
Foram encontradas 3(três) formas para realizarmos este acesso, foram elas:
Apesar de terem sido encontradas as 3 (três) formas de acesso, iremos falar apenas de 2(duas) delas: a parport e a jnpout32. A Commapi do java foi colocada como curiosidade, apenas para sabermos que existe, nada mais. Não iremos nos aprofundar nela, contudo está disposto na secção Links deste artigo, o endereço para que seja feito o download dos arquivos que a compôe, bem como um link para sua api. 2. Os pacotes de acesso: Parport e JnpOut32 Como o Java é uma linguagem de alto nivel, logo a sua comunicação com harware se torna uma tarefa extremamente prejudicada e sua implementação altamente complexa, esta é uma das razões de nossa relutânciare em explicar o funcionamento da JavaCommapi. Para que fosse possível a comunicação entre o codigo Java escrito com o hardware de comunicação paralela, os autores do parport e do jnpout32, utilizaram-se da interessante propriedade JNI( Java Native Interface) do java. O JNI permite que o código escrito em Java utilize funções desenvolvidas em outras linguagens, tornando possível, dessa forma, o acesso da linguagem Java ao hardware, por intermedio de uma serie de funções de ligação escritas e compiladas em linguagens de mais baixo nivel e que por consequinte tem o seu acesso ao hardware facilitado e melhor otimizado, nos casos estudados os autores utilizaram-se da linguagem C/C++ . Vale ressaltar que, a utilização do JNI, apesar de fornecer o acesso direto ao hardware por meio de funções nativas, o que nos possibilita o controle de dispositivos externos e outras aplicabilidades, faz com que o codigo Java perca um dos pilares de sua implementação, e uma de suas principais características como linguagem de vanguarda, que é a sua portabilidade. A chamada de funções de outras linguagens, no codigo Java é possível utilizando os arquivos DLL, previamente criados contendo às funções que serão nescessárias para os acesso ao hardware, e carregando–o dentro do codigo Java a ser desenvolvido. Ambos os pacotes de acesso já vieram com essas chamadas inclusas nas bibliotecas anexas aos arquivos para download. 2.1. Parport Para que o método, criado por, Juan Gabriel Del Cid Portillo funcione é necessário que se faça o download do pacote parport. Após o download e descompactação do arquivo parport é preciso que sejam seguidas algumas etapas antes de realizarmos os primeiros teste. Como o arquivo de acesso do parport está em formato DLL é impressindível que o parport.dll, que acompanha o pacote, seja colocado nos folders BIN da sua JDK e de seu JRE. Apenas adicionar o parport.dll aos folders correnpondentes não é bastante. Para tanto utilizaremos mais uma vez o Userport para realizarmos a liberação da porta paralela no SO Windows. O uso do Userport já foi discutido no post anterior. Realizada todas estas etapas é só criar o seu codigo conforme o set de instruções que vem acompanhando o pacote parport e exemplificados nos samples que o acompanham. 2.1.1. Codigo para teste /** * Título : AcessoParalelaJavaParport.java * Descrição : Codigo para teste de escrita da porta paralela - Artigo II * Copyright : Copyright(c) 2008 * @return * @autor : Thomaz Prado * @Empresa: Engenharia Mecatrônica - FTC: Faculdade de Tecnologia e Ciências * * @outros: mecatrons.blogspot.com * @versão: 0.9v */ package ArtigoII; //Controi package ArtigoII import javax.swing.JOptionPane; import parport.ParallelPort; //Importa as classes do package ParallelPort. public class ArtigoParalelaJavaParport { public static void main(String[] args) { int LPT1 = 0x378; //Define porta a ser usada int dadoEnviado =0; //Inicia o valor da variavel dadoEnviado ParallelPort porta=new ParallelPort(LPT1); //Acessa registro de dados 0x378. System.out.println("Iniciado!!"); while(dadoEnviado<64)> porta.write(dadoEnviado); //Escreve o valor alocado em dadoEnvia na porta paralela dadoEnviado++; //Incremeta valor de dado envia try { Thread.sleep(200); //Delay 200ms System.out.println("Valor enviado = "+ dadoEnviado); } catch (Exception e) { JOptionPane.showMessageDialog(null, e);} } porta.write(0); //Escreve valor 0 na porta paralela System.out.println("Finalizado!!"); }// Fim do Main(); }// Fim da classe principal. JaVa RoX ;) Durante os testes relizados com o codigo proposto acima, bem com os teste realizados com os Samples presentes no package parport, foi notado uma inconsistência, na verdade uma intabilidade no uso do parport. Não era incomum durante a execução do codigo a geração do seguinte erro:
Como forma de suprir esta instabilidade, foi realizado diversos teste, inclusive em estações de trabalho diferentes, aliados a longas buscas por usuários que já haviam passado por esta estapa e que porventura já haveriam de superado-a. Para nossa surpresa o numero de usuários com o mesmo tipo de instabilidade era cada vez mais crescente a cada busca e cada vez menos soluções duradouras e viáveis eram propostas.
Foi neste horizonte pertubador que, felizmente, encontramos o método JnpOut32, criado pelo Douglas Beattie Jr., que se apresentou estável e com uma estrutura de programção mais clara e fácil de ser compreendida. O metodo está descrito no tópico abaixo.
2.2. JnpOut32
Como o pacote JnpOut32, tambem é acessado por meio de uma arquivo DLL, jnpout32pkg.dll, faz-se nescessário que este também seja adicionado em alguns folders externos, mas diferentemente do parport.dll, para que o jnpout32pkg.dll possa ser acessado basta que este seja adiconado ao Windows\System32.
Finalizando este procedimento o metodo JnpOut32 já está pronto para ser chamado no codigo Java. Basta declarar algumas funções dentro do codigo fonte a ser desenvolvido para finalizar a utilização.
2.2.1. Codigo para teste
/**
* Título : AcessoParalelaJavaJnpOut32.java
* Descrição : Codigo para teste de escrita da porta paralela - Artigo II
* Copyright : Copyright(c) 2008
* @return
* @autor : Thomaz Prado
* @Empresa: Engenharia Mecatrônica - FTC: Faculdade de Tecnologia e Ciências
*
* @outros: mecatrons.blogspot.com
* @versão: 0.9v
*/
package ArtigoII; // Constroi um package ArtigoII
import javax.swing.JOptionPane;
import jnpout32.*; // Importa o package jnpout32, sistema nervoso do controle da paralela
public class AcessoParalelaJavaJnpOut32 {
static short dadoEnvia; //Declara
static short LPT1; //Variaveis
static pPort lpt; // do sistema.
static void do_read()
{
// Ler a porta paralela
dadoEnvia = (short) lpt.input(LPT1);
// Envia algumas menssagens ao console
System.out.println("Porta lida: " + Integer.toHexString(LPT1) +
" = " + Integer.toHexString(dadoEnvia));
}
static void do_write()
{
//Escreve na porta paralela
lpt.output(LPT1,dadoEnvia);
}
public static void main(String[] args) {
lpt = new pPort();
System.out.println("Iniciado!!");
LPT1=0x378; //Declara qual endereço iremos usar nest caso x378
dadoEnvia=0x0; //Inicia a variavel dadoEnvia
while(dadoEnvia<16){>
do_write(); //Escreve na porta 0x378 e no valor atual de dadoEnvia
//Neste caso estamos iniciando com 0
try {
System.out.println("Valor enviado = "+ dadoEnvia);
Thread.sleep(250); //Delay ms
} catch (Exception e) { JOptionPane.showMessageDialog(null, e);}
dadoEnvia++; //incrementa dadoEnvia
}
// Ler qual porta esta sendo uasada
do_read();
dadoEnvia = 0x0; // dadoEnvia novamente com atributo 0, finalizando.
do_write(); // Ler 0 do dadoEnvia e escreve na porta
System.out.println("Finalizado!!");
} // Fim do main();
}// Fim classe principal. JaVa RoX ;)
2.2.2. Considerações sobre o JnpOut32
Durante os testes realizados não foram observados quaisquer tipo de instabiliade durante a execução dos aplicativos desenvolvidos. O uso do Userport para a liberação da porta paralela neste caso se mostrou facultativo, uma vez que, testados os mais diversos codigos desenvolvidos em várias estações de trabalho, não foi notada à necessidade de uso do userport, contudo ele não é indipenssável e já nos mostrou a sua importância incontáveis vezes.
3. Considerações Finais
· Todos os códigos foram escritos em linguagem Java JDK 6.0
o Compilados em Eclipse SDK e Jcreator LE
o Windows XP SP2
· Próximos artigos propóstos
o Hardware de teste para a porta paralela
4. Links (concluir e revisar)
2 comentários:
Voce pode disponibilizar o download do parport ? estou procurando faz tempo e nao acho =/
vlw
Parabéns pelo artigo!
A varios meses tento fazer o acesso a porta paralela pelo Java mais sem sucesso.
Não conseguia resolver aquele erro do parport, mas com o jnpout32 ficou redondinho.
Obrigado
Postar um comentário