Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Непонятки при работе с com портом


Автор: Bugoga 5.9.2007, 12:17
Есть программка:

Код

#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.
Почему так происходит и как исправить?

Автор: maxim1000 5.9.2007, 12:42
может, у модема эхо включено (когда он повторяет на выходе всё, что приходит к нему на вход)?

Автор: Bugoga 5.9.2007, 12:57
Флаг ECHO разрешает эхо вводимых символов, но я же его снимаю. Если это не то, ток как можно отключить эхо?

Автор: maxim1000 5.9.2007, 14:31
обычно, ATE0 выключает, ATE1 включает

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)