URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3517
[ Назад ]

Исходное сообщение
"сново о наболевшем (com-порт и модем)"

Отправлено ovilon , 26-Окт-04 14:36 
как правильно читать данные с ком-порта
- открываю порт:
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

==================================
хотелось бы читать только ответ или хотябы ответ с полседней командой. Может можно как нибудь сбрасывать буфер модема или как то еще побороть это?


Содержание

Сообщения в этом обсуждении
"сново о наболевшем (com-порт и модем)"
Отправлено hatta , 26-Окт-04 16:51 
Так ведь это, у мамеда свое собственное эхо имеется, которое отключается командой ATE0



"сново о наболевшем (com-порт и модем)"
Отправлено ovilon , 27-Окт-04 10:36 
>Так ведь это, у мамеда свое собственное эхо имеется, которое отключается командой
>ATE0


ладно эхо то я отключу, но тогда c момеде при посылке например AT\r я считаю OK. после этого если пошлю ATDP11111 то из модема считаю
OK
CONECT
а я бы хотел как нибуть считывать только то что еще не прочел