Transmet tous les caractères tapés sur la liaison série et affiche les caractères reçus.
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <assert.h>
#include <string.h>
#include <unistd.h>
#include <termios.h>
#include <sysio/delay.h>
#include <sysio/serial.h>
#define BAUDRATE 9600
#define DATABITS SERIAL_DATABIT_8
#define PARITY SERIAL_PARITY_NONE
#define STOPBITS SERIAL_STOPBIT_ONE
#define FLOW SERIAL_FLOW_NONE
static FILE * serial_port;
int
main (int argc, char **argv) {
int c;
int fd;
struct termios ts, ts_save;
const char * cDev;
xSerialIos xIosSet = { .
baud = BAUDRATE, .dbits = DATABITS, .parity = PARITY,
.sbits = STOPBITS, .flow = FLOW
};
if (argc < 2) {
printf ("Usage: %s serial_port [baud]\n", argv[0]);
exit (EXIT_FAILURE);
}
cDev = argv[1];
if (argc > 2) {
xIosSet.
baud = atoi (argv[2]);
}
perror ("open");
exit (EXIT_FAILURE);
}
serial_port = fdopen (fd, "r+");
tcgetattr (STDIN_FILENO, &ts);
ts_save = ts;
ts.c_lflag &= ~ (ICANON | ECHO | ISIG);
ts.c_cc[VMIN] = 0;
ts.c_cc[VTIME] = 0;
tcsetattr (STDIN_FILENO, TCSANOW, &ts);
printf (
"Serial port %s %s\nPress Ctrl+C to abort ...\n", cDev,
sSerialAttrStr (fd));
for (;;) {
c = fgetc (serial_port);
if (c != EOF) {
if (isprint (c) || (c == '\n') || (c == '\r')) {
putchar (c);
}
else {
printf ("[%02X]", c);
}
}
c = getchar();
if (c != EOF) {
if (c == 3) {
break;
}
fputc (c, serial_port);
}
}
tcsetattr (STDIN_FILENO, TCSANOW, &ts_save);
if (fclose (serial_port) < 0) {
perror ("fclose");
exit (EXIT_FAILURE);
}
printf ("\neverything was closed.\nHave a nice day !\n");
exit (EXIT_SUCCESS);
return 0;
}