serial programming using terios
Ted Reynard
ted.reynard at yahoo.com
Sun Mar 17 08:37:50 UTC 2013
Hi fellas
I'm trying to connect to a CISCO router by a program which I developed using termios.
First I configure the local TTY to right settings :
struct termios old = {0};
/*get current TTY settings*/
if (tcgetattr(STDIN_FILENO, &old) < 0)
perror("tcsetattr()");
old.c_iflag &= ~(ISTRIP|ICRNL);
old.c_oflag &= ~OPOST;
old.c_lflag &= ~(ICANON|IEXTEN|ECHO|ECHONL);
old.c_cc[VMIN] = 1;
old.c_cc[VTIME] = 0;
if (tcsetattr(0, TCSANOW/*TCSAFLUSH*/, &old) < 0)
perror("tcsetattr ICANON");
And then the TTY which users want to use
struct termios dev;
static int port=atoi(argv[1]);
int fd = open_port(port);
fcntl(fd, F_SETFL, FNDELAY);
tcgetattr(mainfd, &dev);
cfsetspeed(&dev, speed);
dev.c_cflag |= (CLOCAL | CREAD);
dev.c_cflag &= ~PARENB;
dev.c_cflag |= CSTOPB;
dev.c_cflag &= ~CSIZE;
dev.c_cflag |= CS8;
dev.c_cflag &= ~CRTSCTS;
dev.c_iflag &= ~(ISTRIP|ICRNL);
dev.c_oflag &= ~OPOST;
dev.c_lflag &= ~(ICANON|ISIG|IEXTEN|ECHO);
dev.c_cc[VMIN] = 1;
dev.c_cc[VTIME] = 0;
And I have two threads to handle read and write simultaneously. The problem is I have to add at least 2 seconds delay
after writing user input to the port, otherwise the output would not be what I expect. Without this sleep
command, every character I type, the output is shown with next character; not at time :
Router>
Router>abc // While I typed "abcd". If I continue with typing "e", then the output will be "abcd" and so on ...
Am I missing something?
More information about the freebsd-questions
mailing list