分享

linux termios.h

 浪子小新 2018-07-17

  1. #ifndef _TERMIOS_H
  2. #define _TERMIOS_H
  3. #define TTY_BUF_SIZE 1024 //tty缓冲区长度
  4. /*
  5. *0x54只是一个魔数,目的是位来使这些常数唯一
  6. *tty设备的ioctl调用命令集合,iosctl将命令编码在低位字中
  7. *下面TC的含义是tty控制命令
  8. */
  9. //取相应终端termios结构中的信息
  10. #define TCGETS 0x5401
  11. //设置应终端termios结构中的信息
  12. #define TCSETS 0x5402
  13. //在设置终端termios的信息前,需要先等待输出队列中所有处理完,对于修改参数回影响输出的情况
  14. //就绪要使用这种形式
  15. #define TCSETSW 0x5403
  16. //在设置termios信息前,需要先等待输出队列中所有数据处理完,并且刷新输入队列
  17. #define TCSETSF 0x5404
  18. //取相应终端termios对应的信息
  19. #define TCGETA 0x5405
  20. //设置相应终端termios对应的信息
  21. #define TCSETA 0x5406
  22. //在设置终端termios的信息前,需要先等待输出队列中所有处理完,对于修改参数回影响输出的情况
  23. //就绪要使用这种形式(参见tcsetattr TCSADRAIN选项)
  24. #define TCSETAW 0x5407
  25. //在设置termios信息前,需要先等待输出队列中所有数据处理完,并且刷新输入队列
  26. //(参见tcsetattr TCSAFLUSH)
  27. #define TCSETAF 0x5408
  28. //等待输出队列处理完毕(空),如果参数值是0,则发送一个brank
  29. #define TCSBRK 0x5409
  30. //开始/停止控制,参数为0则挂起,为1,则重新开启挂起出处,是2则挂起,为3则重新开启挂起的输入
  31. #define TCXONC 0x540A
  32. //刷新已写输出但还没有发送或已收但换没有读数据。参数为0,则刷新输入队列;为1,刷新输出队列
  33. //为2,刷新输入输出队列
  34. #define TCFLSH 0x540B
  35. //下面TIO含义是tty输入输出控制命令
  36. //设置终端串行线路专用模式
  37. #define TIOCEXCL 0x540C
  38. //复位终端串行线路专用模式
  39. #define TIONXCL 0x540D
  40. //设置tty为控制终端
  41. #define TIOCSCTTY 0x540E
  42. //读取指定终端设备进程的组id
  43. #define TIOCGPGRP 0x540F
  44. //设置指定终端设备进程的组id
  45. #define TIOCSPGRP 0x5410
  46. //返回输出队列中还未送出的字符数
  47. #define TIOCOUTQ 0x5411
  48. //模拟终端输入,该命令以一个指向字符的指针作为参数,并假装该字符是在终端上键入的,用户必须
  49. //在该控制终端上具有超级用户权限或具有读权限
  50. #define TIOCSTI 0x5412
  51. //读取终端设备窗口大小信息
  52. #define TIOCGWINSZ 0x5413
  53. //设置终端设备窗口大小信息
  54. #define TIOCSWINSZ 0x5414
  55. //返回modem状态控制引线的当前状态比特位标志集
  56. #define TIOCMGET 0x5415
  57. //设置单个modem状态控制引线的状态
  58. #define TIOCMBIS 0x5416
  59. //复位单个modem状态控制引线的状态
  60. #define TIOCMBIX 0x5417
  61. //设置modem状态引线的状态。如果某一比特位置位,则modem对应的状态引线将置位有效
  62. #define TIOCMSET 0x5418
  63. /*读取软件载波检测标志(0-关闭,1-开启)。对于本地连接的终端或其他设备,软件载波标志是开启的
  64. *对于使用modem线路的终端或设备则是关闭的。为了能使用这两个ioctl调用,tty线路应该是以
  65. *O_NDELRY方式打开的,这样open就不回等待载波
  66. */
  67. #define TIOCGSOFTCAR 0x5419
  68. //设置软件载波检测标志
  69. #define TIOCSSOFTCAR 0x541A
  70. //返回输入队列还位取走字符的数目
  71. #define TIOCINQ 0X541B
  72. struct winsize
  73. {
  74. unsigned short ws_row; //窗口字符行数
  75. unsigned short ws_col; //窗口字符列数
  76. unsigned short ws_xpixel;//窗口宽度,像素值
  77. unsigned short ws_ypixel;//窗口高度,像素值
  78. };
  79. #define NCC 8 //termios结构中控制字符数组的长度
  80. struct termio
  81. {
  82. unsigned short c_iflag; //输入模式标志
  83. unsigned short c_oflag; //输出模式标志
  84. unsigned short c_cflag; //控制模式标志
  85. unsigned short c_lflag; //本地模式标志
  86. unsigned char c_line ; //线路规程(速率)
  87. }; unsigned char c_cc[NCC]; //控制字符数组
  88. #define NCCS 17 //termios结构中控制字符数组的长度
  89. struct termios
  90. {
  91. unsigned long c_iflag; //输入模式标志
  92. unsigned long c_oflag; //输出模式标志
  93. unsigned long c_cflag; //控制模式标志
  94. unsigned long c_lflag; //本地模式标志
  95. unsigned char c_line; //线路规程(速率)
  96. unsigned char c_cc[NCCS];//控制字符数组
  97. };
  98. //c_cc数组对应字符索引值
  99. #define VINTR 0 //c_cc[VINTR]=INTR (^C) \003 中断字符
  100. #define VQUIT 1 //c_cc[VQUIT]=QUIT (^\) \034 退出字符
  101. #define VERASE 2 //c_cc[VERASE]=ERASE (^H) \0177 擦除字符
  102. #define VKILL 3 //c_cc[VKILL]=KILL (^U) \025 终止字符
  103. #define VEOF 4 //c_cc[VEOF]=EOF (^D) \004 文件结束字符
  104. #define VTIME 5 //c_cc[VTIME]=TIME (\0) \0 定时器值
  105. #define VMIN 6 //c_cc[VMIN]= MIN (\1) \1 定时器值
  106. #define VSWTC 7 //c_cc[VSWTC]= SWTC (\0) \0 交换字符
  107. #define VSTART 8 //c_cc[VSTART]=START (^Q) \021 开始字符
  108. #define VSTOP 9 //c_cc[VSTOP]=STOP (^S) \023 停止字符
  109. #define VSUSP 10 //c_cc[VSUSP]=SUSP (^Z) \032 挂起字符
  110. #define VEOL 11 //c_cc[VEOL]=EOL (\0) \0 行结束字符
  111. #define VREPRINT 12 //c_cc[VREPRINT]=REPRINT (^R) \022 重显示字符
  112. #define VDISCARD 13 //c_cc[VDISCARD]=DISCARD (^O) \017 丢弃字符
  113. #define VWERASE 14 //c_cc[VWERASE]=WERASE (^W) \027 单词擦除字符
  114. #define VLNEXT 15 //c_cc[VLNEXT]=LNEXT (^V) \026 下一行字符
  115. #define VEOL2 16 //c_cc[VEOL2]=EOL2 (\0) \0 行结束2
  116. //termios结构输入模式字段c_iflag标志符号常数
  117. #define IGNBRK 0000001 //输入时回略break条件
  118. #define BRKINT 0000002 //在break时产生sigint信号
  119. #define IGNPAR 0000004 //胡恶劣奇哦校验出错的字符
  120. #define PARMRK 0000010 //标记奇哦校验错
  121. #define INPCK 0000020 //允许输入奇哦校验
  122. #define ISTRIP 0000040 //屏蔽字符第8位
  123. #define INLCR 0000100 //输入时将换行符NL映射成回车符CR
  124. #define IGNCR 0000200 //忽略回车符CR
  125. #define ICRNL 0000400 //在输入时将回车符CR映射成换行符NL
  126. #define ICULC 0001000 //在输入时将大写字符转换成小写字符
  127. #define IXON 0002000 //允许开始/停止输出控制
  128. #define IXANY 0004000 //允许任何字符重启输出
  129. #define IXOFF 0010000 //允许开始/停止输入控制
  130. #define IMAXBEL 0020000 //输入队列满时响铃
  131. /termios结构中输出模式字段c_oflag何种标志
  132. #define OPOST 0000001 //执行输出处理
  133. #define OLCUC 0000002 //在输出时将小写字符转换成大写字符
  134. #define ONLCR 0000004 //在输出时将换行符NL映射成回车换行符CR-NL
  135. #define OCRNL 0000010 //子输出时将回车符CR映射成换行符NL
  136. #define ONOCR 0000020 //在0列不输出回车符CR
  137. #define ONLRET 0000040 //换行符NL在执行回车符的功能
  138. #define OFILL 0000100 //延迟时使用填充字符而不使用时间延迟
  139. #define OFDEL 0000200 //填充字符是ASCII码DEL,如果未设置,使用ASCII NULL
  140. #define NLDLY 0000400 //选择换行延迟
  141. #define NL0 0000000 //换行延迟类型0
  142. #define NL1 0000400 //换行延迟类型1
  143. #define CRDLY 0003000 //选择回车延迟
  144. #define CR0 0000000 //回车延迟类型0
  145. #define CR1 0001000 //回车延迟类型1
  146. #define CR2 0002000 //回车延迟类型2
  147. #define CR3 0003000 //回车延迟类型3
  148. #define TABDLY 0014000 //选择水平制表延迟
  149. #define TAB0 0000000 //水平制表延迟类型0
  150. #define TAB1 0004000 //水平制表延迟类型1
  151. #define TAB2 0010000 //水平制表延迟类型2
  152. #define TAB3 0014000 //水平制表延迟类型3
  153. #define XTABS 0014000 //将制表符TAB换成空格,该值表示空格数
  154. #define BSDLY 0020000 //选择退格延迟
  155. #define BS0 0000000 //退格延迟类型0
  156. #define BS1 0020000 //退格延迟类型1
  157. #define VTDLY 0040000 //纵向制表延迟
  158. #define VT0 0000000 //纵向制表延迟类型0
  159. #define VT1 0040000 //纵向制表延迟类型1
  160. #define FFDLY 0040000 //选择换页延迟
  161. #define FF0 0000000 //换页延迟类型0
  162. #define FF1 0040000 //换页延迟类型1
  163. //termios结构中控制模式字段c_cfag符号
  164. #define CBAUD 0000000 //传输速率屏蔽码
  165. #define B0 0000000 //挂断线路
  166. #define B50 0000000 //波特率50
  167. #define B75 0000000 //波特率75
  168. #define B110 0000000 //波特率110
  169. #define B134 0000000 //波特率134
  170. #define B150 0000000 //波特率150
  171. #define B200 0000000 //波特率200
  172. #define B300 0000000 //波特率300
  173. #define B600 0000000 //波特率600
  174. #define B1200 0000000 //波特率1200
  175. #define B1800 0000000 //波特率1800
  176. #define B2400 0000000 //波特率2400
  177. #define B4800 0000000 //波特率4800
  178. #define B9600 0000000 //波特率9600
  179. #define B19200 0000000 //波特率1920
  180. #define B38400 0000000 //波特率38400
  181. #define EXTA B19200 //扩展波特率A
  182. #define EXTB B38400 //扩展波特率B
  183. #define CSIZE 0000060 //字符位宽度屏蔽码
  184. #define CS5 0000000 //每字符5比特位
  185. #define CS6 0000020 //每字符6比特位
  186. #define CS7 0000040 //每字符7比特位
  187. #define CS8 0000060 //每字符8比特位
  188. #define CSTOPB 0000100 //设置两个停止位
  189. #define CREAD 0000200 //允许接收
  190. #define CPARENB 0000400 //开始输出时产生奇哦位,输入时进行奇哦校验
  191. #define CPARODD 0001000 //输入/输入校验是奇校验
  192. #define HUPCL 0002000 //最后进程关闭后挂断
  193. #define CLOCAL 0004000 //忽略调制解调器
  194. #define CLBAUD 0360000 //输入波特率被
  195. #define CRTSCTS 02000000000 //流控制
  196. #define PARENB CPARENB
  197. #define PARODD CPARODD
  198. //termios结构是哦那个本地模式标志字段c_lflag
  199. #define ISIG 0000001 //当接收到字符INTR,QUIT,SUSP,DSUSP产生相应信号
  200. #define ICANON 0000002 //开始规范模式
  201. #define XCASE 0000004 //若设置来ICANON,终端是大写字符
  202. #define ECHO 0000010 //回显输入字符
  203. #define ECHOE 0000020 //若设置了ICANON,则erase/werase将擦除前一字符/单词
  204. #define ECHOK 0000040 //若设置了ICANON,则kill字符旧爱那个擦除当前行
  205. #define ECHONL 0000100 //若设置了ICANON,则即使咩有ECHO也回显NL字符
  206. #define NOFLSH 0000200 //当生成SIGINT忽然SIGQUIT信号时不刷新输入输出队列,当
  207. //生成SIGSUSP信号后,刷新输入队列
  208. #define TOSTOP 0000400 //发送SIGTOU信号到后台进程的进程组,该后台进程试图写自己
  209. //自己的控制终端
  210. #define ECHOCTL 0001000 //若设置了ECHO,则除来TAB,NL,START,STOP以外的ASCII
  211. //控制信号将被回显成象‘^X’样子,X是控制符+0x40
  212. #define ECHORPT 0002000 //若设置来IECHO,ICANON则字符在擦除时将显示
  213. #define ECHOKE 0004000 //若设置了ICANON,则kill通过擦除行上所有字符被回显
  214. #define FLUSHO 0010000 //输出被刷新,通过键入DISCARD字符,该标志被反转
  215. #define PENDIN 0040000 //当下一个字符是读时,输入队列中的所有字符将被重显
  216. #define IEXTEN 0100000 //开启实现时定义的输入处理
  217. //modem线路信号符号常数
  218. #define TIOCM_LE 0x001 //线路允许
  219. #define TIOCM_DTR 0x002 //数据终端就绪
  220. #define TIOCM_RTS 0x004 //请求发送
  221. #define TIOCM_ST 0x008 //串行数据发送
  222. #define TIOCM_SR 0x010 //串行数据接收
  223. #define TIOCM_CTS 0x020 //清除发送
  224. #define TIOCM_CAR 0x040 //载波检测
  225. #define TIOCM_RNG 0x080 //响玲指示
  226. #define TIOCM_DSR 0x100 //数据设备就绪
  227. #define TIOCM_CD TIOCM_CAR//
  228. #define TIOCM_R1 TIOCM_RNG//
  229. //tcfow()和TCXONCSHIYONG
  230. #define TCOOFF 0 //挂起输出
  231. #define TCOON 1 //重启被挂起的输出
  232. #define TCIOFF 2 //系统传输一个stop字符,使设备停止向系统传输数据
  233. #define TCION 3 //系统传输一个start字符,使设备开始向系统传输数据
  234. //tcflush()和TCFLSH使用
  235. #define TCIFLUSH 0 //请接收到的数据但不读
  236. #define TCOFLUSH 1 //清已写的数据但不传送
  237. #define TCIOFLUSH 2 //清接收到的数据但不读,清已写的数据但不传送
  238. //tcsetattr()使用
  239. #define TCSANOW 0 //改变立即发生
  240. #define TCSADRAIN 1 //改变在所有已写的输出被传输之后发生
  241. #define TCSAFLUSH 2 //改变在所有已写的输出被传输之后并且在所有接收到
  242. //还没有读取的数据被丢弃之后发生
  243. typedef int speed_t; //波特率数值类型
  244. //返回termios_p所指termios结构中的接收波特率
  245. extern speed_t cfgetispeed(struct termios *termios_p);
  246. //返回termios_p所指termios结构中的发送波特率
  247. extern speed_t cfgetospeed(struct termios *termios_p);
  248. //将termios_p所指termios结构中的接收波特率设置为speed
  249. extern int cfsetispeed(struct termios*termios_p,speed_t speed);
  250. //将termios_p所指termios结构中的发送波特率设置为speed
  251. extern int cfsetospeed(struct termios *termios_p,speed_t speed);
  252. //等待fildes所指对象已写输出数据被传送出去
  253. extern int tcdrain(int fildes);
  254. //挂起/重启fildes所指对象数据的接收和发送
  255. extern int tcflow(int fildes,int action);
  256. //丢弃fildes指定对象 所有已写但还没传送以及所有已收到但还没有读取的数据
  257. extern int tcflush(int fildes,int queue_selector);
  258. //获取与句柄fildes对应对象的参数,并将其保存在termios_p所指的地方
  259. extern int tcgetattr(int fildes,struct termios *termios_p);
  260. //如果终端使用异步串行数据传输,则在一定时间内连续传输一系列0值比特位
  261. extern int tcsendbreak(int fildes,int duration);
  262. //使用termios结构指针termios_p所指的数据,设置与终相关的参数
  263. extern int tcsetattr(int fildes,int optional_actions,struct termios *termios_p);
  264. #endif

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多