Я пытаюсь запрограммировать последовательную связь, используя аппаратное рукопожатие в 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
объявляет константы.
Это может быть неприменимо для вашего конкретного приложения, но я думал, что отправлю его здесь, если он поможет вам или кому-то другому.
В большинстве систем с termios
вы можете установить флаг CRTSCTS
в члене ->c_cflags
структуры termios
, который вы передаете на tcsetattr
, и иметь ядро или аппаратное обеспечение RTS/CTS контроль потока для вас.
(Это не POSIX, но он как на BSD, так и на SystemV, так что он почти везде - включая Linux).