lectura del puerto serial con C

J.M.
16 de Mayo del 2008
Hola a todos. Estoy realizando un pequeño programa en C para leer del puerto serial (el programa tiene que funcionar en linux).

Para hacer el programa estoy utilizando la libreria termios.h la cual permite que le configures los parametros del puerto serial para que pueda leer correctamente.

Aquí os dejo el codigo:

Código:

struct termios parametros, oldtio;

//fflush(stdout);
if ((idf_serial=open(PUERTO_SERIAL, O_RDONLY | O_NOCTTY ))==-1) // abrimos la conexion al puerto seria
{
perror(PUERTO_SERIAL);
}
else fcntl(idf_serial, F_SETFL, 0); // hace que la funcion "read" devuelva un 0 si no hay datos para leer

// CONFIGURACION DEL PUERTO SERIAL

/* almacenamos la configuracion actual del puerto */
tcgetattr(idf_serial,&oldtio);

/* limpiamos struct para recibir los nuevos parametros del puerto */
bzero(&parametros, sizeof(parametros));
/*
BAUDRATE: Fija la tasa bps. Podria tambien usar cfsetispeed y cfsetospeed.
IXOFF : para activar el control de flujo de entrada por Software
CS8 : 8n1 (8bit,no paridad,1 bit de parada)
CLOCAL : conexion local, sin control de modem
CREAD : activa recepcion de caracteres
*/
parametros.c_cflag = BAUDRATE|IXOFF|CS8|CLOCAL|CREAD;

tcflush(idf_serial,TCIFLUSH); // Descarta los datos recibidos que no se han leido
tcsetattr( idf_serial, TCSANOW, &parametros ); //almacenamos la configuracion de las opciones



El problema que tengo es que no se como indicarle que no hay bit de paridad y ademas no se si tengo bien hecha la asignacion de parametros. Ademas cuando ejecuto el programa me lee caracteres que no reconoce y si muestro el numero que es el caracter me salen numeros negativos, es decir que no pertenecen a la tabla ASCII. Shock

Espero que alguién pueda ayudarme.

saludos.