2009-08-14 37 views
1

我試圖編程使用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聲明常量。

+0

我發現grep對於回答這些問題很有用 - 只需搜索包含路徑中的所有文件即可。 – 2009-08-14 19:21:35

回答

3

這可能不適用於您的特定應用程序,但我認爲我會在此發佈它以防萬一您或其他人搜索。

在大多數系統與termios,您可以設置CRTSCTS標誌,你傳遞給tcsetattrtermios結構的->c_cflags成員,並有內核或硬件爲你做的RTS/CTS流量控制。 (它不是POSIX,但它在BSD和SystemV派生系統上,因此它幾乎在任何地方都可以使用,包括Linux)。

+0

我第二個這個。 你真的很想讓行紀律爲你的應用程序處理CTS/RTS的節流。 – codeDr 2009-08-26 21:52:06