Terminar comunicação RXTX Linux

4 respostas
homisinho

Olá a todos, estou voltando a fazer alguns testes.
Criei um sistema que faz comunicação serial, o mesmo funciona perfeito no windows, agora preciso fazer o mesmo funcionar no linux. Estou depurando e descobri qual é o problema, mas queria saber o pq isso ocorre.

public void serialEvent(SerialPortEvent ev){
        StringBuffer bufferLeitura = new StringBuffer();
        int novoDado = 0;        

        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:
                //Novo algoritmo de leitura.
                while(novoDado != -1){
                    try{
                        novoDado = entrada.read();
                        if(novoDado == -1){
                            break;
                        }
                        if('\r' == (char)novoDado){
                            bufferLeitura.append('\n');
                        }else{
                            bufferLeitura.append((char)novoDado);
                        }
                    }catch(Exception ioe){
                        System.out.println("Erro de leitura serial: " + ioe);
                    }
                }
                setResposta(new String(bufferLeitura));
                System.out.println(getResposta());
            break;
        }
    }

Esta é a função que recebe os dados, no windows depurando, eu sempre recebo um -1 quando chega no final
da comunicação "automáicamente", no caso do linux eu n recebo esse -1 automaticamente, e como eu estou me comunicando com um hardware especifico, ele sempre manda a mesma coisa.
Alguem poderia me dizer pq isso ocorre? o que eu posso fazer?

Testei no ubuntu e no debian.

Desde já obrigado.

4 Respostas

fabianofrizzo

Cara da uma olhadinha nesse Projeto aqui…

Baixa os fontes e da uma olhada…

Lembro que quando estava mechendo funcionava tanto no linux quanto no Windows…
Ele está parado ja faz um tempinho… Estou sem tempo para mecher no projeto :frowning:

Mas qualquer duvida é só falar

B

o jeito mais simples seria você ver oq está recebendo como último byte no linux e adicionar isso na sua lógica.

homisinho

O problema é que realmente ele n recebe nada como ultimo byte.
Pra solucionar por enquanto eu coloquei outro teste, no caso eu sei quantos bytes eu tenho que receber. E fiz um laço ate esse numero de bytes.

Mas deve ter outra solução.

Digamos que eu esteja esperando o envio de 6 bytes, são feitas as 6 interações e quando chega na sétima o sistema trava, notem que eu tratei “exception” mas não é lançada nenhuma. O sistema simplesmente cancelava o metodo e ia pro final do mesmo.

Alguem já deve ter passado por isso!!!

T

A documentação de getInputStream diz que você deveria ter setado o timeout e o threshold, senão ele vai ficar esperando indefinidamente. Acho que os valores de timeout são diferentes no Windows e no Linux.

Criado 2 de dezembro de 2008
Ultima resposta 5 de dez. de 2008
Respostas 4
Participantes 4