Ler dados da porta serial

5 respostas
G

Olá amigos,

Estou com o seguinte desafio a ser feito. Um amigo fez um programa em C++ que lê em um determinado intervalo de tempo, 8 bytes que estão sendo recebidos pela porta serial e faz uma verificação se esse dados chegou corretamente. Abaixo envio o código:

/* >> Definicoes: << */
#define	COM1	0x3f8	// COM 1
#define COM2	0x2f8	// COM 2
#define LCR		(COM+3)	// Line Control Register
#define LSR 	(COM+5)	// Line Status Register
#define OK 0			// Recepcao OK!
#define SR 1			// Sem recepcao

 /* >> Loop infinito: << */
 while (1)
 {
   /* >> Recepcao dos Octetos: << */
   #define cont Var1
   StatusSerial = SR;	// Inicializa Status Serial
   for (cont=0;cont<200;cont++)// Recepcao dos Octetos
   { delay (2);				// Aguarda 2mSeg
	   if (inportb (LSR) & 1)    // Testa recepcao
	   { Octeto[0] = inportb (COM);// Carrega Octeto 1
		 for (cont=0;cont<100;cont++)//
		 { delay (1);				  // Aguarda 1mSeg
		   if (inportb (LSR) & 1)	  // Testa recepcao
		   { Octeto[1] = inportb (COM);  // Carrega Octeto 2
			 for (cont=0;cont<100;cont++)//
			 { delay (1);				  // Aguarda 1mSeg
			   if (inportb (LSR) & 1)		  // Testa recepcao
			   { Octeto[2] = inportb (COM);  // Carrega Octeto 3
				 for (cont=0;cont<100;cont++)//
				 { delay (1);
				   if (inportb (LSR) & 1)		  // Testa recepcao
				   { Octeto[3] = inportb (COM);  // Carrega Octeto 4
					 for (cont=0;cont<100;cont++)//
					 { delay (1);
					   if (inportb (LSR) & 1)		  // Testa recepcao
					   { Octeto[4] = inportb (COM);  // Carrega Octeto 5
						 for (cont=0;cont<100;cont++)//
						 { delay (1);
						   if (inportb (LSR) & 1)		  // Testa recepcao
						   { Octeto[5] = inportb (COM);  // Carrega Octeto 6
							 for (cont=0;cont<100;cont++)//
							 { delay (1);
							   if (inportb (LSR) & 1)		  // Testa recepcao
							   { Octeto[6] = inportb (COM);  // Carrega Octeto 7
								 for (cont=0;cont<100;cont++)//
								 { delay (1);
								   if (inportb (LSR) & 1)		// Testa recepcao
								   { Octeto[7] = inportb (COM);// Carrega Octeto 8
									 cont = 200;				// Sai do for
									 StatusSerial = OK;			// Recepcao OK
								   };
								 };
							   };
							 };
						   };
						 };
					   };
					 };
				   };
				 };
			   };
			 };
		   };
		 };
	   }
	   else StatusSerial = SR;	// Sem recepcao (400mSeg)
   };// Final do for Octeto 1

O que ocorre é que ele me solicitou que eu fizesse esse mesmo programa em Java. O programa já está todo estruturado, ou seja, testando a comunicação com a Serial, abrindo a porta Serial, etc… O que falta é fazer esse mesmo procedimento em Java.

Fiquei sabendo que utlizar JNI seria uma boa, mas não sei nem por onde começar pra utilizar JNI.

Gostaria de uma ajuda de vocês pra saber como posso fazer isso em JAVA, e se alguém puder implementar isso em JNI eu ficaria agradecido, ou pelo menos me indicar o caminho das pedras.

Para o caso de alguém querer enviar algum arquivo, meu email é [email removido].

Um abraço!

George.

5 Respostas

rogeriop80

Cara,

Da uma olhada na javacomm.

[]´s

keller

Ve se este Tutorial ajuda… :wink:

Luca

Olá

Este programa em C só funciona nas versões Pokemon do Windows, ou seja, aquelas versões tipo 98 e ME que só servem para um ou outro joguinho daqueles bem simples.

Com o Windows NT, 2000 ou XP não se pode acessar a porta serial diretamente. Portanto este programinha não é lá um exemplo muito feliz.

[]s
Luca

G

Já que não posso usar este tipo de estrutura do programa em todas as versões do Windows, então fica claro que para esse meu programa específico não poderei utilizar JNI, correto?

Já estou utlizando a Javacomm e estou pensando em utilizar Threads para a leitura dos bytes. O que vocês acham?

Abraços!!!

George.

Luca

Olá

É claro que poderia usar JNI para chamar algum device driver de terceiros. Mas com javax.comm você não precisa de JNI para usar a porta serial pois já tem o device driver necessário.

[]s
Luca

Criado 4 de janeiro de 2005
Ultima resposta 4 de jan. de 2005
Respostas 5
Participantes 4