ayuda programacion serial linux

necesito orientacion por parte de alguien que haya programado transmision por puerto serie en linux en lo posible algun codigo de ejemplo o sugerencias

gracias

Reply to
+mArkO+
Loading thread data ...
+mArkO+ escribió:

Yo he hecho alguna cosa, pero hasta el lunes no tengo acceso al fuente. Si para entonces no te han contestado pondré lo que tengo.

--
Saludos
Miguel Giménez
Reply to
Miguel Gimenez
+mArkO+ escribió:

Aqui tienes un trozo que lee una cadena del puerto serie y la muestra en pantalla. Está sacado de un programa más grande y no he probado a compilarlo. La parte de transmisión es bastante más fácil, pero no la tengo a mano. Si quieres hacer polling puedes quitar la parte de señales, pero el programa consumirá más recursos.

#include #include #include #include #include #include #include #include #include #include

void signal_handler_IO (int status);

volatile int data_ready = 0;

int main(int argc, char **argv) { int fd; char Port[] = "/dev/ttyS0", Buffer[256]; struct sigaction saio;

/* Open the device to be non-blocking (read will return immediatly) */ fd = open(Port, O_RDWR | O_NOCTTY | O_NONBLOCK); if (fd < 0) return(1);

/* Install the signal handler before making the device asynchronous */ saio.sa_handler = signal_handler_IO; sigemptyset(&saio.sa_mask); saio.sa_flags = 0; saio.sa_restorer = NULL; sigaction(SIGIO, &saio, NULL);

/* Allow the process to receive SIGIO */ fcntl(fd, F_SETOWN, getpid());

/* Make the file descriptor asynchronous */ fcntl(fd, F_SETFL, FASYNC);

/* Save current port settings */ tcgetattr(fd, &oldtio);

/* Set new port settings for canonical input processing */ newtio.c_cflag = CRTSCTS | CS8 | CLOCAL | CREAD | PARENB; newtio.c_iflag = IGNPAR | ICRNL; newtio.c_oflag = 0; newtio.c_lflag = ICANON; newtio.c_cc[VMIN] = 1; newtio.c_cc[VTIME] = 0; cfsetispeed(&newtio, B9600); cfsetospeed(&newtio, B9600); tcflush(fd, TCIFLUSH); tcsetattr(fd, TCSANOW, &newtio);

/* Wait for any signal */ pause();

if (data_ready) { read(fd, Buffer, sizeof(Buffer)); printf(Buffer); }

/* Restore old port settings */ tcsetattr(fd, TCSANOW, &oldtio);

/* Close the port */ close(fd);

return(0); }

void signal_handler_IO (int status) { data_ready = 1; }

--
Saludos
Miguel Giménez
Reply to
Miguel Gimenez

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.