Серийное программирование (аппаратное рукопожатие)

1

Я пытаюсь запрограммировать последовательную связь, используя аппаратное рукопожатие в Linux, используя C/С++. Сигналами, которые реализуют рукопожатие, являются CTS (Clear to send) и RTS (Запрос на отправку). В настоящее время моя функция для установки сигнала CTS выглядит следующим образом:

int setCTS(int fd, int value) {
    int status;
    ioctl(fd, TIOCMGET, &status); // get the current port status
    if (value)
        status |= TIOCM_CTS; // rise the CTS bit
    else
        status &= ~TIOCM_CTS; // drop the CTS bit
    ioctl(fd, TIOCMSET, $status); // set the modified status
    return 0;
}

где fd - дескриптор файла для порта, а значение - значение, которое должно быть установлено для сигнала. Чтобы закодировать эту функцию, я основываюсь на http://www.easysw.com/~mike/serial/serial.html#5_1.

Проблема в том, что gcc не распознает константы, используемые в примере. Любые предложения?

- Обновление -

Я нашел ответ. Глядя на другой пример, sys/ioctl.h объявляет константы.

  • 0
    Я нахожу, что grep полезен для ответов на подобные вопросы - просто ищите все файлы в пути включения.
Теги:
serial-port

1 ответ

3
Лучший ответ

Это может быть неприменимо для вашего конкретного приложения, но я думал, что отправлю его здесь, если он поможет вам или кому-то другому.

В большинстве систем с termios вы можете установить флаг CRTSCTS в члене ->c_cflags структуры termios, который вы передаете на tcsetattr, и иметь ядро ​​или аппаратное обеспечение RTS/CTS контроль потока для вас.

(Это не POSIX, но он как на BSD, так и на SystemV, так что он почти везде - включая Linux).

  • 0
    Я второй это. Вы действительно хотите позволить линейной дисциплине справляться с регулированием CTS / RTS вверх и вниз для вашего приложения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню