# [Puerto Serial] no puedo leer de /dev/ttyS1 (abierto)

## gisus_eu

Hola, 

soy novato en linux , estoy intentando leer del puerto serial ttyS1

el equipo al que me conecto me envia informacion pero no estoy recibiendo esa informacion

estoy trabajando sobre un gentoo linux en C

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <termios.h>

#include <stdio.h>

#define BAUDRATE B19200

#define MODEMDEVICE "/dev/ttyS1"

#define FALSE 0

#define TRUE 1

volatile int STOP=FALSE;

main()

{

   int fd,c, res;

   struct termios oldtio,newtio;

   char buf[255];

   fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY );

   if (fd <0) {  perror(MODEMDEVICE); exit(-1);  }

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

   bzero(newtio, sizeof(newtio)); /* limpiamos struct para recibir los nuevos parametros del puerto */

   newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;

   newtio.c_iflag = IGNPAR | ICRNL;

   newtio.c_oflag = 0;

   newtio.c_lflag = ICANON;

   newtio.c_cc[VINTR]    = 0;     /* Ctrl-c */

   newtio.c_cc[VQUIT]    = 0;     /* Ctrl-\ */

   newtio.c_cc[VERASE]   = 0;     /* del */

   newtio.c_cc[VKILL]    = 0;     /* @ */

   newtio.c_cc[VEOF]     = 4;     /* Ctrl-d */

   newtio.c_cc[VTIME]    = 0;     /* temporizador entre caracter, no usado */

   newtio.c_cc[VMIN]     = 1;     /* bloqu.lectura hasta llegada de caracter. 1 */

   newtio.c_cc[VSWTC]    = 0;     /* '\0' */

   newtio.c_cc[VSTART]   = 0;     /* Ctrl-q */

   newtio.c_cc[VSTOP]    = 0;     /* Ctrl-s */

   newtio.c_cc[VSUSP]    = 0;     /* Ctrl-z */

   newtio.c_cc[VEOL]     = 0;     /* '\0' */

   newtio.c_cc[VREPRINT] = 0;     /* Ctrl-r */

   newtio.c_cc[VDISCARD] = 0;     /* Ctrl-u */

   newtio.c_cc[VWERASE]  = 0;     /* Ctrl-w */

   newtio.c_cc[VLNEXT]   = 0;     /* Ctrl-v */

   newtio.c_cc[VEOL2]    = 0;     /* '\0' */

   tcflush(fd, TCIFLUSH);

   tcsetattr(fd,TCSANOW,&newtio);

   while (STOP==FALSE) {     /* bucle hasta condicion de terminar */

                          res = read(fd,buf,255);

                          buf[res]=0;             /* envio de fin de cadena, a fin de poder usar printf */

                          printf(":%s:%d\n", buf, res);

                          if (buf[0]=='z') STOP=TRUE;

                       }

   tcsetattr(fd,TCSANOW,&oldtio);

}

----------

## Stolz

¿tienes activado el soporto para puerto serie en el Kernel?

¿Tienes permiso de lectura en el dispositivo que quieres leer?

Saludozzzzz

----------

## gisus_eu

 *Stolz wrote:*   

> ¿tienes activado el soporto para puerto serie en el Kernel?
> 
> ¿Tienes permiso de lectura en el dispositivo que quieres leer?
> 
> Saludozzzzz

 

Si tengo permisos de lectura y escritura , pero como verifico si tengo activado el soporte 

para puerto serial en el kernel ??

----------

## esteban_conde

ejecuta make menuconfig y navega por este orden:  device drivers -->charcter devices -->serial drivers

----------

## Stolz

Si tienes permisos es porque el dispositivo existe. Si el dispositivo existe, es porque tienes activado soporte.

Saludozzzzzzzz

----------

## gisus_eu

 *Stolz wrote:*   

> Si tienes permisos es porque el dispositivo existe. Si el dispositivo existe, es porque tienes activado soporte.
> 
> Saludozzzzzzzz

 

Aun sigo intentando, le estoy dando vueltas a este tema paro aun no  logro resolver este problema

algun consejo por donde atacar el problema??

----------

## alexlm78

Perdon pero se me ha hecho u poco difil entender tu codigo.

```
#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <termios.h>

#include <stdio.h>

#define BAUDRATE B19200

#define MODEMDEVICE "/dev/ttyS1"

#define FALSE 0

#define TRUE 1

volatile int STOP=FALSE;

int main( int argc, char *argv[] )

{

   int fd,c, res;

   struct termios oldtio,newtio;

   char buf[255];

   fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY );

   if (fd <0) { perror(MODEMDEVICE); exit(-1); }

   /* almacenamos la configuracion actual del puerto */

   tcgetattr(fd,&oldtio);

   

   /* limpiamos struct para recibir los nuevos parametros del puerto */

   bzero(newtio, sizeof(newtio)); 

   newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;

   newtio.c_iflag = IGNPAR | ICRNL;

   newtio.c_oflag = 0;

   newtio.c_lflag = ICANON;

   newtio.c_cc[VINTR] = 0;     /* Ctrl-c */

   newtio.c_cc[VQUIT] = 0;     /* Ctrl-\ */

   newtio.c_cc[VERASE] = 0;        /* del */

   newtio.c_cc[VKILL] = 0;      /* @ */

   newtio.c_cc[VEOF] = 4;        /* Ctrl-d */

   newtio.c_cc[VTIME] = 0;    /* temporizador entre caracter, no usado */

   newtio.c_cc[VMIN] = 1;       /* bloqu.lectura hasta llegada de caracter. 1 */

   newtio.c_cc[VSWTC] = 0;    /* '\0' */

   newtio.c_cc[VSTART] = 0;    /* Ctrl-q */

   newtio.c_cc[VSTOP] = 0;    /* Ctrl-s */

   newtio.c_cc[VSUSP] = 0;    /* Ctrl-z */

   newtio.c_cc[VEOL] = 0;       /* '\0' */

   newtio.c_cc[VREPRINT] = 0;    /* Ctrl-r */

   newtio.c_cc[VDISCARD] = 0;    /* Ctrl-u */

   newtio.c_cc[VWERASE] = 0;    /* Ctrl-w */

   newtio.c_cc[VLNEXT] = 0;    /* Ctrl-v */

   newtio.c_cc[VEOL2] = 0;      /* '\0' */

   

   tcflush(fd, TCIFLUSH);

   tcsetattr(fd,TCSANOW,&newtio);

   

   while (STOP==FALSE) /* bucle hasta condicion de terminar */

   { 

      res = read(fd,buf,255);

      buf[res]=0;    /* envio de fin de cadena, a fin de poder usar printf */

      printf(":%s:%d\n", buf, res);

      if (buf[0]=='z') STOP=TRUE;

   }

   tcsetattr(fd,TCSANOW,&oldtio);

   return 0;

}
```

Ahora si le buscamos solucion.

P.D.     Sorry soy medio tajante en esto del estilo de programacion.    :Cool:   :Laughing: 

P.D.2.  Perdon por las leves modificaciones   :Shocked: 

----------

## gisus_eu

 *alexlm78 wrote:*   

> Perdon pero se me ha hecho u poco difil entender tu codigo.
> 
> ```
> #include <sys/types.h>
> 
> ...

 

ok, normal estoy abierto a las observaciones si son para mejorar  :Very Happy: 

bueno estoy dandole vueltas a este tema pero aun no logro recibir data, el aplicativo

queda esperando la llegada de un caracter pero no recibe nada, y el dispositivo ocn el que estoy trabajando

esta enviando constantemente informacion.

----------

