Восстановление последовательного порта в Linux - PullRequest
1 голос
/ 23 ноября 2011

Я пытался связаться через последовательный порт с ПЛК, управляющим механическим затвором, для задачи в отрасли.Не имея большого опыта в этой теме и спеша, я не осознавал важность сохранения старых настроек и их восстановления при выходе из программы.После изменения некоторых полей в структуре termios я больше не мог читать что-либо из порта даже после использования точно такой же функции открытия порта, которую я использую для другого порта (ttyD0), который прекрасно работает для этих настроек.Любые предложения, как я могу восстановить ttyD1 обратно в рабочее состояние?

Код, используемый для открытия порта, выглядит следующим образом:

int OpenPort()
{
    fd = open("/dev/ttyD0", O_RDWR | O_NOCTTY);

    if (fd < 0)
    {
        cerr << "open error " << errno << strerror(errno) << endl;
    }
    else
    {
        struct termios my_termios;
        fcntl(fd, F_SETFL, 0);
        tcgetattr(fd, &my_termios);
        //bzero(&my_termios, sizeof(my_termios));
        tcflush(fd, TCIFLUSH);      
        my_termios.c_cflag = B115200 | CS8 | CREAD | CLOCAL | HUPCL;
        //my_termios.c_lflag = ICANON;
        //cfsetospeed(&my_termios, B115200);
        tcsetattr(fd, TCSANOW, &my_termios); 
    }
    return fd;
}

1 Ответ

0 голосов
/ 23 ноября 2011

Просто скопируйте структуру, которую вы получили от первого tcgetattr, и передайте ее tcsetattr при выходе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...