Fala galera,
Comecei a usar a pouco tempo a API RxTx para leitura de dados da porta serial do computador. Estou desenvolvendo uma aplicação simples que precisa ler dados de uma balança Toledo, dessas de pesar caminhão.
Primeiro fui ate a balanca e conectei o laptop nela atraves do cabo serial, e atraves do Hyperterminal, consegui colher alguns dados que sao enviados.
Importante que observei que esse tipo de balanca fica enviando constantemente a string com o valor da pesagem para o computador, em media 6x por segundo.
Para desenvolver utilizei dois computadores ligados por um cabo serial. Um dos computadores esta simulando a balanca toledo, pois a balanca esta em Vitoria/ES e eu estou no interior de SP, nao tenho como desenvolver o software la. Criei entao um simulador que gera uma String parecida com a gerada pela balanca e fica enviando essa string 6x por segundo.
O Outro computador recebe os dados enviados pelo computador simulador, e faz a leitura da string e os tratamentos necessarios para apresentar o peso.
Bom, para quem conhece javax.comm sabe que existe uma interface chamada SerialPortEventListener, se eu tenho uma classe que implementa essa classe entao tenho que implementar o metodo serialEvent. Esse metodo e disparado sempre que ocorre algum evento na porta serial do computador que esta recebendo os dados.
No meu caso isso esta ocorrendo porem estou com problemas nessa parte.
Para testar o mecanismo criei a seguinte string abcdefghijklmnopqrstuvxyz1234567890 e essa esta sendo enviada 6x por segundo pelo computador simulador.
No receptor existe o seguinte implementacao no metodo serialEvent:
public void serialEvent(SerialPortEvent ev) {
switch (ev.getEventType()) {
case SerialPortEvent.BI:
case SerialPortEvent.OE:
case SerialPortEvent.FE:
case SerialPortEvent.PE:
case SerialPortEvent.CD:
case SerialPortEvent.CTS:
case SerialPortEvent.DSR:
case SerialPortEvent.RI:
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
break;
case SerialPortEvent.DATA_AVAILABLE:
try {
byte[] buffer = new byte[in.available()];
in.read(buffer);
System.out.println("RXTX:" + new String(buffer));
} catch (IOException e) {
e.printStackTrace();
}
}
}
A minha intencao e simplesmente imprimir a mesma string que estou enviando do computador simulador, no console do computador receptor.
E eu imagina que o RxTx iria gerar apenas um unico evento para receber toda a String, mas nao e isso que esta acontecendo.
Por incressa que parivel, olha a resposta que eu estou obtendo no console
[list]
Stable Library
Native lib Version = RXTX-2.1-7
Java lib Version = RXTX-2.1-7
RXTX:efghijklmnopqrstuvxyz1234567890
RXTX:abcdefghijklmnop
RXTX:qrstuvxyz1234567890
RXTX:abcdefghijklmnop
RXTX:qrstuvxyz1234567
RXTX:890
RXTX:abcdefghijklmnop
RXTX:qrstuvxy
RXTX:z1234567890
RXTX:abcdefgh
RXTX:ijklmnopqrstuvxyz1234567890
RXTX:abcdefgh
RXTX:ijklmnopqrstuvxy
RXTX:z1234567890
RXTX:abcdefghijklmnop
RXTX:qrstuvxyz1234567890
RXTX:abcdefghijklmnop
RXTX:qrstuvxyz1234567
RXTX:890
RXTX:abcdefghijklmnop
RXTX:qrstuvxyz1234567890
RXTX:abcdefgh
RXTX:ijklmnopqrstuvxy
RXTX:z1234567890
RXTX:abcdefgh
RXTX:ijklmnop
RXTX:qrstuvxyz1234567890
RXTX:abcdefghijklmnop
RXTX:qrstuvxyz1234567
RXTX:890
RXTX:abcdefghijklmnop
RXTX:qrstuvxyz1234567
RXTX:890
[/list]
Perceba que cada minha com pre-fixo RXTX e um evento que esta sendo tratado pelo programa receptor.
Assim ta muito longe de ser uma solucao pois eu esperava o seguinte resultado.
[list]
Stable Library
Native lib Version = RXTX-2.1-7
Java lib Version = RXTX-2.1-7
RXTX:abcdefghijklmnopqrstuvxyz1234567890
RXTX:abcdefghijklmnopqrstuvxyz1234567890
RXTX:abcdefghijklmnopqrstuvxyz1234567890
RXTX:abcdefghijklmnopqrstuvxyz1234567890
RXTX:abcdefghijklmnopqrstuvxyz1234567890
RXTX:abcdefghijklmnopqrstuvxyz1234567890
RXTX:abcdefghijklmnopqrstuvxyz1234567890
RXTX:abcdefghijklmnopqrstuvxyz1234567890
[/list]
O que eu percebi ate agora e que o Rxtx cria varios eventos para a mesma string, enviando ela em pedacos o que confunde meu codigo.
Alguem saberia me dizer como eu faco, para que o rxtx notifique apenas um evento para cada string???
Se alguem souber e puder colaborar eu agradeco muito.
Abraco