Foros del Web » Programación para mayores de 30 ;) » C/C++ »

No puedo leer desde el puerto serie

Estas en el tema de No puedo leer desde el puerto serie en el foro de C/C++ en Foros del Web. Hola a todos, Hace poco postee una pregunta sobre como escribir en el puerto serie a traves de C. Esto ya lo logre, mi problema ...
  #1 (permalink)  
Antiguo 03/04/2007, 10:25
Avatar de edi87  
Fecha de Ingreso: mayo-2004
Ubicación: Argentina
Mensajes: 113
Antigüedad: 20 años
Puntos: 0
Exclamación No puedo leer desde el puerto serie

Hola a todos,

Hace poco postee una pregunta sobre como escribir en el puerto serie a traves de C.
Esto ya lo logre, mi problema ahora es el siguiente:

Tengo conectada una interface al puerto serie de mi pc. Al enviarle determinados datos a esta interface, esta me los devuelve para confirmarme que llegaron. El problema es que no puedo leer esos datos. Aqui les dejo el codigo q uso para hacer todo esto (resumido):

Espero puedan ayudarme!, Saludos y gracias!

Código:
int main(int argc, char *argv[]) {
	fd = open(INTERFACE_DEVICE, O_RDWR | O_NOCTTY | O_NDELAY);
	if (fd == -1) {
		printf("Unable to open device %s... ABORTING (10)\n", INTERFACE_DEVICE);
		return 1;
	} else {
		printf("Succesfully connected to device...\n");
		fcntl(fd, F_SETFL, 0);
	}
	
	initport(fd);
	printf("Baud: %d\n", getbaud(fd));

	char sCmd[254];
	int p1, p2, p3, p4;
	
	p1 = atoi(argv[1]);
	p2 = atoi(argv[2]);
	p3 = atoi(argv[3]);
	if(atoi(argv[4])) p4 = atoi(argv[4]);
	
	sCmd[0] = p1;
	sCmd[1] = p2;
	sCmd[2] = p3;
	if(p4) sCmd[3] = p4;
	
	if (!writeport(fd, sCmd)) {
		printf("Write failed... ABORTING (11)\n");
		close(fd);
		return 1;
	}else printf("Sending: %d-%d-%d-%d\n", p1, p2, p3, p4);
	
	usleep(100000);
	char sResult[254];
	//fcntl(fd, F_SETFL, FNDELAY); // don't block serial read

	if (!readport(fd,sResult)) {
		printf("read failed\n");
		close(fd);
		return 1;
	}
	
	printf("readport=%s\n", sResult);
	close(fd);
	return 0;
}

int readport(int fd, char *result) {
	int iIn = read(fd, result, 254);
	result[iIn-1] = 0x00;
	if (iIn < 0) {
		if (errno == EAGAIN) {
			printf("SERIAL EAGAIN ERROR %s \n",strerror(errno));
			return 0;
		} else {
			printf("SERIAL read error %d %s\n", errno, strerror(errno));
			return 0;
		}
	}                    
	return 1;
}
La interface viene con un programa de ejemplo escrito en VB, utiliza el ocx MSComm.
Tambien trae un txt donde explica que hay q desactivar la opcion de buffers desde windows... esto que necesito hacer yo es bajo linux, sera que tengo q configurar esto tambien en linux? y como seria?
__________________
IntoXicadoS -- Rock Argentina
"Cuando estes triste ponete a pensar, la solucion en vos esta..."

edi!

Última edición por edi87; 03/04/2007 a las 10:28 Razón: Olvide de comentar...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:48.