Problemas com a javacomm

Bom, to fazendo uns testes aqui da javacomm, usando a porta paralela… tomei por base o tutorial da guj e todos os outros tutoriais que encontrei na net…
eu encontro a porta normalmente, conecto nela, normalmente… entao pego a OutputStream para enviar uma palavra pra porta… quando do o write() no buferr… a palavra é enviada pra porta… mas o programa PARA! simplesmente nao passa da linha que ta o write()…

ja tentei setar varios tipos de configuracao e nada… da o wirte… manda a palavra pra porta, certo… mas para… nao da erro nem nada… simplesmente para…

o que pode ser? alguem tem ideia?

valeu

Hum, portas paralelas têm um problema (ou uma “feature…”) que é o seguinte: existe um sinal de sincronismo (não sei qual é direito, faz duzentos anos que não mexo com portas paralelas - sou do tempo que a gente fazia um spooler manualmente com o DOS…) que se não estiver ativado (por exemplo, com uma impressora conectada e on-line), você não consegue enviar dados para a porta paralela - até faz sentido, porque como é que você vai mandar alguma coisa para uma porta onde não há nada esperando para receber?
Não sei o que você tem espetado na sua porta paralela. Pode ser que o tal sinal não esteja conectado corretamente no cabo. Por via das dúvidas, veja se “dir > prn” (isso se você estiver num Command Prompt do Windows) consegue imprimir alguma coisa.

Olá

Vc não disse nada sobre seu programa e menos ainda sobre o sistema operacional. Imagino que usa um sistema operacional de verdade e não um windows pokemon daqueles que se conseguia acessar as portas diretamente (Win98). Além do que o thingol disse, especulo também o seguinte: se seu programa está esperando a resposta do status da porta paralela ou se pretende configura-la como bi-direcional só com javax.comm você não obterá sucesso. Neste caso precisará usar um device driver. Há devices drivers free por aí que podem ser adptados para cada necessidade, mas se você usa uma determinada impressora então procure seu fabricante.

Googlando vc acha coisas interessantes como:[list]
http://www.beyondlogic.org/index.html
http://www.lvr.com/parport.htm


http://www.portaparalela.hpg.ig.com.br/hard.htm
http://www.eletronica.org/modules.php?name=News&file=article&sid=142[/list]
[]s
Luca

eu fiz os teste no Win98… e meu programa nao precisa de nenhuma leitura da porta… somente escrever mesmo…
mas faz sentido ele PARAR a execucao no momento que estou escrevendo no OUTPUTSTREAM? nem peguei o inputstream…
eu testei varios tipos de configuracao da porta… pra nao esperar dados nem nada… mas todos param no write()

Olá

Continuamos sem saber nada sobre sue problema. Como vamos avaliar se falta um flush ou outra coisa qualquer. Coloque o código (entre tags Code e /Code)

[]s
Luca

hum… to na faculdade… deixa eu ver se tenho o codigo aqui…

	public static void iniciaPorta(String porta) {
		if (cp == null) {
			endPorta = porta;
			obterID();
		}
	}

	private static void obterID() {
		try {
			cp = CommPortIdentifier.getPortIdentifier(endPorta);
			if (cp == null) {
				System.out.println("A " + endPorta + " nao existe!" );
				exists = false; 
			}
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("A " + endPorta + " nao existe!" );
		}
	}

	public static void abrirPorta() { 
		try { 
			porta = (ParallelPort)cp.open("Porta", 1000);
			portaOK = true; 
			System.out.println("Porta aberta com sucesso!"); 
		} catch (Exception e) {
			e.printStackTrace();
			portaOK = false; 
			System.out.println("Erro ao abrir a porta!");
		}
	}

	public static void enviar(String msg) { 
		try { 
			saida = porta.getOutputStream(); 
		} catch (Exception e) { 
			e.printStackTrace(); 
		} 
		try { 
			System.out.println("Enviando : " + msg ); 
			saida.write(msg.getBytes()); 
			Thread.sleep(100); 
			saida.flush(); 
		} catch (Exception e) { 
			e.printStackTrace();
			System.out.println("Houve um erro durante o envio. "); 
		}
	}

ele para exatamente nessa linha: saida.write(msg.getBytes());

ja tentei enviar somente 1 byte… 1 int… usar DataOutputStream… tudo da na mesma… para no write()

ja tentei setar alguns parametros no “cp”, e nada tb

axel,

windows98 realmente pode ser um problema nao? muitas apis do java as vezes nao tem compatibilidade com win98. de uma lida por ai. e tente no linux, simplesmente rodar.

acho q a javacomm funciona no win98… mas no winxp aqui em casa da o mesmo problema
vou testar no linux depois

mais algumas ideias?

axel, encontrei um código que envia tambem envia dados pela paralela e nele, a pessoa que o criou guardou a informação em um buffer para depois enviá - la. Para encontrar esse código, vá no site da Sun e digite no Search “parallel port” + java + “chapter 11”.

mesmo assim rodrigo, sera que ele nao vai deixar a thread em espera como ta acontecendo? isso que eh muito estranho

eu concordo com o Paulo, Rodrigo…
eu pensei nessa solução tambem, enviar tudo de uma vez… mas isto me traria outros problemas…
e mesmo assim, ta muito estranho… nao faz sentido ele parar a thread enqto eu to ESCREVENDO num buffer :cry:

até os programas exemplos que vieram na javacomm estao travando no write…
aqui é winxp… alguem ja usou javacomm no winxp?
nao ta enviando NADA pra porta… nem nos exemplos que vieram nela… e ainda trava no write()

to sem ideia… :cry:

deu certo!!!

cara, é exatamente isso que o thingol falou… a javacomm joga pro driver do windows… e o windows espera um sinal da porta indicando que a “impressora esta online”
exatamente como o thingol disse…
o unico trabalho foi descobrir que pino era… e descobrimos que é o pino 11 (o BUSY), foi só mudar o nivel dele (pra 0) que ele parou de travar no write…

vou fazer mais testes aqui, mas parece que agora esta ok

valeuuuuu a todos!!

Cara posta seu código aqui com a solução para ajudar quem ainda está com este problema como eu :lol:

[]s

codigo? nao zerei o pino via codigo nao hehe
foi a mao mesmo…
mas quero dizer que nao funcionou… eu me enganei
realmente se colocar 0 no BUSY (mecanicamente mesmo, nada de soft)
ele nao trava no write… mas tb a porta nao recebe nada… nao chega nada nela

nao adiantou nada :confused: