LINUX.ORG.RU

Работа с com портом


0

0

Есть программка:

============================================================= #include <stdio.h> #include <termios.h> #include <errno.h> #include <fcntl.h> #include <strings.h> #include <string.h>

#define BAUDRATE B19200

int main (void) { int fd; struct termios oldtio, newtio; char buffer[255]; char *bufptr; int n; int nbytes; int tries;

fd = open ("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY); if (fd < 0) { perror ("open_port: Unable to open /dev/ttyS0 - "); exit (-1); } else fcntl (fd, F_SETFL, 0);

tcgetattr (fd, &oldtio);

bzero (&newtio, sizeof (newtio));

cfsetospeed (&newtio, B19200); cfsetispeed (&newtio, B19200); newtio.c_cflag |= (CRTSCTS | CLOCAL | CREAD); newtio.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); newtio.c_oflag &= ~OPOST; newtio.c_cflag &= ~PARENB; newtio.c_cflag &= ~CSTOPB; newtio.c_cflag &= ~CSIZE; newtio.c_cflag |= CS8; newtio.c_iflag &= ~(IXON | IXOFF | IXANY); newtio.c_cc[VMIN] = 0; newtio.c_cc[VTIME] = 10;

tcsetattr (fd, TCSANOW, &newtio);

for (tries = 0; tries < 3; tries++) { if (write (fd, "AT\r", 3) < 3) { perror ("write: "); continue; }

bufptr = buffer; while ((nbytes = read (fd, bufptr, buffer + sizeof (buffer) - bufptr - 1)) > 0) { bufptr += nbytes; if (bufptr[-1] == '\n' || bufptr[-1] == '\r') break; }

*bufptr = '\0'; printf ("%s", buffer); if (strncmp (buffer, "OK", 2) == 0) printf ("Modem OK\n"); else printf ("Modem not OK\n"); } } ======================================================================

Она пишет в модем команду AT и читает вывод. В buffer, если все пучком, должно положится "OK" и вывестись строка "Modem OK". Но почемуто в бефереоказавается еще и слово AT. Содержимое буфера: AT\r\nOK\r\n. Почему так происходит и как исправить?

anonymous
Ответ на: комментарий от Svoloch

> newtio.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);

Так вот это действие как раз и снимает флаг ECHO

anonymous
()

Модем возвращает все, что в него было записано. Чтобы этого не было надо дать ему команду ate0.

Но, ИМХО, правильней игнорировать это в программе, чтобы не завязываться на определенные настройки модема.

kpanic ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.