串口编程(硬件握手)

时间:2009-08-14 19:01:19

标签: c++ c linux serial-port

我正在尝试使用C / C ++在linux中使用硬件握手来编程串行通信。实现握手的信号是CTS(清除发送)和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声明了常量。

1 个答案:

答案 0 :(得分:3)

这可能不适用于您的特定应用,但我想我会在此发布,以防它或其他人搜索。

在大多数使用termios的系统上,您可以在CRTSCTS结构的->c_cflags成员中设置termios标记,并传递给tcsetattr,让内核或硬件为您执行RTS / CTS流控制。

(它不是POSIX,但它适用于BSD和SystemV派生系统,所以它几乎无处不在 - 包括Linux)。