我正在尝试使用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是端口的文件描述符,value是要为信号设置的值。为了编写此函数,我基于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)。

关于c++ - 串行编程(硬件握手),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1279592/

10-13 05:31