(RESOLVIDO) RXTX não comunica com Emulador Bematech mp2100

Tenho tentado comunicar com o emulador bematech de impressora fiscal com a api RXTX ou JAVAComm , ambas não tive sucesso .
O que está acontecendo , eu escrevo e leio na porta normalmente com outra aplicação que tenho feita em delphi que envia meus comandos para meu app que estou fazendo em java e os dois comunicam entre si normalmente , porem quando eu mando uma comando simples da minha aplicação em java de uma Leitura X para o emulador , nada acontece no simulador , porém quando eu mando abrir a porta , no meu outro aplicativo em delphi , a leitura x é impressa no emulador , se eu mandar o mesmo comando da minha aplicação em delphi para o emulador , comunica normalmente, talvez algum de vocês tenha passado pela mesma situação e talvez encontraram uma solução.
Na minha opinião , creio eu que seja um bug na RXTX api ou no programa que uso para criar o par de portas seriais virtuais . segue abaico meu método. Grato desde ja !


import gnu.io.CommPortIdentifier;
import gnu.io.NoSuchPortException;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import gnu.io.UnsupportedCommOperationException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.TooManyListenersException;


public class Main  {
	InputStream in ;
	OutputStream out = null ;
	SerialPort port = null ;
	CommPortIdentifier ci ;

	public static void main(String[] args) {

		Main ma = new Main();
		ma.montaPack();

	}

public void montaPack(){

		byte[] pacote = new byte[7] ;

		pacote[0] = 0x02;
		pacote[1] = 0x04;
		pacote[2] = 0x00 ;
		pacote[3] = 0x1B ;
		pacote[4] = 0x06 ;
		pacote[5] = 0x21;
		pacote[6] = 0x00;

		byte a = 0x00;

		try {
			ci = CommPortIdentifier.getPortIdentifier("COM5");
			port =  (SerialPort) ci.open("MontaPack", 2000);
			port.setSerialPortParams(9600,
					SerialPort.DATABITS_8,
					SerialPort.STOPBITS_1,
					SerialPort.PARITY_NONE);
			
			port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
//			port.disableReceiveThreshold();
//			port.disableReceiveTimeout();
//			port.setInputBufferSize(1);
//			port.setOutputBufferSize(1);
//			port.enableReceiveFraming(1);
//			port.disableReceiveFraming();
			
			out = port.getOutputStream();
			
			out.write(pacote);
			out.flush();
			
			out.close();
			port.close();
		} catch (NoSuchPortException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (PortInUseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();		
		} catch (UnsupportedCommOperationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 

	}

}

Use um port monitor para ver como os dados estão sendo enviados na porta. Java é difefrente de pascal e c++ no endianess.

http://free-serial-port-monitor.hhd-software.qarchive.org/

[quote=juliocbq]Use um port monitor para ver como os dados estão sendo enviados na porta. Java é difefrente de pascal e c++ no endianess.

http://free-serial-port-monitor.hhd-software.qarchive.org/[/quote]

ja fiz teste com ele monitorando , nele chega os comandos normalmente , porém o emulador não executa o comando.
só executa após abrir a porta em outra aplicação.

[quote=viniciusalvess][quote=juliocbq]Use um port monitor para ver como os dados estão sendo enviados na porta. Java é difefrente de pascal e c++ no endianess.

http://free-serial-port-monitor.hhd-software.qarchive.org/[/quote]

ja fiz teste com ele monitorando , nele chega os comandos normalmente , porém o emulador não executa o comando.
só executa após abrir a porta em outra aplicação.[/quote]

A porta tem que estar aberta mesmo. Certifique-se que a aplicação java realmente abre a porta correta e depois analise com o port monitor tanto a saida com o delphi quanto a com java.

Depois de um longo tempo de exaustivo testes e muita pesquisa no nosso amigo google , descobri que tem muita gente com Win 7 x64 , “Meu Caso”. Que a rxtx não funciona , mesmo a versão compilada no CLOUDHOPPER (http://www.cloudhopper.com/opensource/rxtx/) não funciona na versão do WIN 7 64 bits , vou instalar uma maquina virtual aqui com xp 32 bits para fazer mais testes , deixo vocês atualizados depois.

Mais uma informação , quando eu seto essas propriedades:


port.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN | SerialPort.FLOWCONTROL_RTSCTS_OUT);
port.setRTS(true);

No manual me fala flow control da impressora , quando eu coloco o respectivo flowControlMode. a leitua x sai normal , porém depois de eu rodar a aplecação no eclipse 2 vezes .
Tanto no Windows 7 64 bits quanto no win XP 32 , rodando no virtual box.
alguem tem alguma ideia do que pode ser .

Debugando no eclipse o emulador emite a Leitura X normalmente , porém se eu rodar a aplicação normalmente tenho que executa a aaplicação duas vezes para que o emulador da impressora emita uma Leitura X , alguem tem ideia se pode ser um bug do eclipse , ou se é pelo fato de estar utilizando win 7 64 bits ?

Após vários testes está ai o porque do emulador não imprimir.

apos escrever (out.write(byte[] comando))

setRts(true);
setDtr(true);

no setDtr(true); que a mágica acontece … vlw por quem tentou ajudar !