串口编程/termio
外观
< 串口编程
此页面或部分是一个未开发的草稿或提纲。 你可以帮助 发展这项工作,或者你可以在 项目室 寻求帮助。 |
<termio.h>(注意缺少 's') 是较旧的 System V 终端 I/O API。它已被<termios.h>在现代系统上取代。它在许多系统中仍然被使用,例如嵌入式 Unix 系统或基于 Unix System V 的系统。通常,现代系统也仍然提供旧的 API。
对串行设备的所有设置都是通过 ioctl(2) 系统调用完成的,而不是通过<termios.h>.
本节是一个存根。 你可以通过 扩展它 来帮助维基教科书。 |
- INTR (默认 Ctrl-C 或 ASCII ETX)
- QUIT (默认 Ctrl-\ 或 ASCII ES)
- ERASE (默认退格键或 ASCII BS)
- KILL (Ctrl-U 或 ASCII NAK)
- EOF (Ctrl-D 或 ASCII EOT)
- NL (ASCII LF)
- EOL (ASCII LF)
- STOP (Ctrl-S 或 ASCII DC3)
- START (Ctrl-Q 或 ASCII DC1)
本节是一个存根。 你可以通过 扩展它 来帮助维基教科书。 |
使用 termio 控制串行(终端)I/O 的主要命令都使用以下形式的 ioctl() 调用
ioctl(int fileDescriptor, int termioCommand, struct termio *arg);
以下命令使用此 ioctl() 形式
- TCGETA
- 获取当前参数
#include <termio.h> : . struct termio params; ioctl(fileDescriptor, TCGETA, ¶ms);
- TCSETA
- 立即设置参数
- TCSETAW
- 在输出为空时设置参数(等待更改,直到所有缓冲数据都被发送)。
- TCSETAF
- 等待输出为空,然后刷新输入,然后设置参数。
该struct termio参数在所有上述ioctl(2)命令中使用,如下所示
本节是一个存根。 你可以通过 扩展它 来帮助维基教科书。 |
- struct termio
/* * Classic struct termio. More modern Unix versions * contain additional information. Unix versions who * support termio and termios often use the same * structure for termio and termios, so termio * contains the full termios data on this systems. */ #define NCC 8 struct termio { int c_iflag; /* input modes */ int c_oflag; /* output modes */ int c_cflag; /* control modes */ int c_lflag; /* local modes */ char c_cc[NCC]; /* control chars */ };
- struct termio 中的 c_cc 数组
- struct termio 中的 c_iflag 输入模式标志
- IGNBRK
- BRKINT
- IGNPAR
- PARMRK
- INPCK
- ISTRIP
- INLCR
- IGNCR
- ICRNL
- IUCLC
- IXON
- IXANY
- IXOFF
- struct termio 中的 c_oflag 输出模式标志
- OPOST
- OLCUC
- ONLCR
- OCRNL
- ONOCR
- ONLRET
- OFILL
- OFDEL
- NLDLY
- NL0
- NL1
- CRDLY
- CR0
- CR1
- CR2
- CR3
- TABDLY
- TAB0
- TAB1
- TAB2
- TAB3
- BSDLY
- BS0
- BS1
- VTDLY
- VT0
- VT1
- FFDLY
- FF0
- FF1
- struct termio 中的 c_cflag
- B0, B50, B75, B110, B134, B150, B300, B600, B1200, B1800, B2400, B4800, B9600, B19200, B38400 用于选择波特率
- CSIZE
- CS5, CS6, CS7, CS8 用于设置数据位长度,介于 5..8 之间
- CSTOPB
- CREAD
- PARENB 用于启用奇偶校验
- PARODD 用于选择奇校验
- HUPCL
- CLOCAL
- struct termio 中的 c_lflag
- ISIG
- ICANON
- XCASE
- ECHO
- ECHOE
- ECHOK
- ECHONL
- NOFLSH
附加命令使用以下形式的 ioctl() 调用
ioctl(int fileDescriptor, int termioCommand, int arg);
以下 termio 命令使用此形式
- TCSBRK
- 等待输出为空(清空)。可选地,当发生这种情况时,可以发送一个断开连接。事实上,这是最常见的应用
#include <termio.h>
/* Convenience macros for the waitBreak cmd argument */ #define WAIT_N_BREAK 0 #define WAIT_ONLY 1
/* * Function for waiting until output is empty and opt. sending a break */ tcWaitBreak(int fileDescriptor, int cmd) { ioctl(fileDescriptor, TCSBRK, cmd); }
/* * Send break when output is empty */ tcBreak(int fileDescriptor) { tcWaitBreak(fileDescriptor, WAIT_N_BREAK); }
- TCXONC
- 启动或停止输出。
#include <termio.h>
/* Convenience macros for the start/stop cmd argument */ #define STOP 0 #define START 1
/* * Function for starting /stopping output */ tcStartStop(int fileDescriptor, int cmd) { ioctl(fileDescriptor, TCXONC, cmd); }
/* * stop output */ tcStop(int fileDescriptor) { tcStartStop(fileDescriptor, STOP); }
/* * start output */ tcStart(int fileDescriptor) { tcStartStop(fileDescriptor, START); }
- TCFLSH
- 刷新输入、输出或两个队列。
#include <termio.h>
/* Convenience macros for the flush cmd argument */ #define FLUSH_IN 0 #define FLUSH_OUT 1 #define FLUSH_BOTH 2
/* * Function for flushing a terminal/serial device */ tcFlush(int fileDescriptor, int cmd) { ioctl(fileDescriptor, TCFLSH, cmd); }
请仅在书籍标题页中添加 {{alphabetical}}
。