我正在尝试使用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/