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?