как правильно читать данные с ком-порта
- открываю порт:
fd = open(dev, O_RDWR | O_NOCTTY | O_NONBLOCK);-ставлю флаги:
tcgetattr(fd, &options);
options.c_iflag &= ~(IGNBRK | IGNCR | INLCR | ICRNL | IUCLC | IXANY | IXON | IXOFF | INPCK | ISTRIP);
options.c_iflag |= BRKINT | IGNPAR;
options.c_oflag &= ~OPOST;
options.c_lflag = ~(ICANON | ISIG | ECHO | ECHONL | ECHOE | ECHOK);
options.c_cflag |= CS8 | CREAD | HUPCL | CRTSCTS;
options.c_cc[VMIN] = 0;
options.c_cc[VTIME] = 10;
cfsetospeed(&options, B38400);
cfsetispeed(&options, B38400);
tcsetattr(fd, TCSANOW, &options);- чтение и запись:
int GetBlock (char *block, int len) {
int i;
i = read (fd, block, len);
return i;
}void PutBlock (char *block) {
int len;
len = strlen (block);
write (fd, block, len);
}- теперь если пытаюсь записать комманду "AT\r", то из порта считываю "AT\rOK", за тем если например запишу в порт "ATDT11111", то из порта уже считывается что то похожеена это:
AT
OK
ATDP11111
CONECT==================================
хотелось бы читать только ответ или хотябы ответ с полседней командой. Может можно как нибудь сбрасывать буфер модема или как то еще побороть это?
Так ведь это, у мамеда свое собственное эхо имеется, которое отключается командой ATE0
>Так ведь это, у мамеда свое собственное эхо имеется, которое отключается командой
>ATE0
ладно эхо то я отключу, но тогда c момеде при посылке например AT\r я считаю OK. после этого если пошлю ATDP11111 то из модема считаю
OK
CONECT
а я бы хотел как нибуть считывать только то что еще не прочел