����14-10 linux/include/termios.h
1 #ifndef _TERMIOS_H
2 #define _TERMIOS_H
3
4 #include <sys/types.h>
5
6 #define TTY_BUF_SIZE 1024 // tty�еĻ��������ȡ�
7
8 /* 0x54 is just a magic number to make these relatively uniqe ('T') */
/* 0x54ֻ��һ��ħ����Ŀ����Ϊ��ʹ��Щ����Ψһ('T') */
9
// tty�豸��ioctl���������ioctl����������ڵ�λ���С�
// ��������TC[*]�����tty�������
// ȡ��Ӧ�ն�termios�ṹ�е���Ϣ(�μ�tcgetattr())��
10 #define TCGETS 0x5401
// ������Ӧ�ն�termios�ṹ�е���Ϣ(�μ�tcsetattr()��TCSANOW)��
11 #define TCSETS 0x5402
// �������ն�termios����Ϣ֮ǰ����Ҫ�ȵȴ�����������������ݴ�����(�ľ�)�������IJ���
// ��Ӱ����������������Ҫʹ��������ʽ(�μ�tcsetattr()��TCSADRAINѡ��)��
12 #define TCSETSW 0x5403
// ������termios����Ϣ֮ǰ����Ҫ�ȵȴ�����������������ݴ����꣬����ˢ��(���)������С�
// �����ã��μ�tcsetattr()��TCSAFLUSHѡ���
13 #define TCSETSF 0x5404
// ȡ��Ӧ�ն�termio�ṹ�е���Ϣ(�μ�tcgetattr())��
14 #define TCGETA 0x5405
// ������Ӧ�ն�termio�ṹ�е���Ϣ(�μ�tcsetattr()��TCSANOWѡ��)��
15 #define TCSETA 0x5406
// �������ն�termio����Ϣ֮ǰ����Ҫ�ȵȴ�����������������ݴ�����(�ľ�)�������IJ���
// ��Ӱ����������������Ҫʹ��������ʽ(�μ�tcsetattr()��TCSADRAINѡ��)��
16 #define TCSETAW 0x5407
// ������termio����Ϣ֮ǰ����Ҫ�ȵȴ�����������������ݴ����꣬����ˢ��(���)������С�
// �����ã��μ�tcsetattr()��TCSAFLUSHѡ���
17 #define TCSETAF 0x5408
// �ȴ�������д������(��)��������ֵ��0������һ��break���μ�tcsendbreak()��tcdrain()����
18 #define TCSBRK 0x5409
// ��ʼ/ֹͣ���ơ��������ֵ��0�����������������1�������¿������������������2��
// ��������룻�����3�������¿�����������루�μ�tcflow()����
19 #define TCXONC 0x540A
// ˢ����д�������û���ͻ����յ���û�ж����ݡ����������0����ˢ��(���)������У����
// ��1����ˢ��������У������2����ˢ�������������У��μ�tcflush()����
20 #define TCFLSH 0x540B
// ��������TIOC[*]�����tty ��������������
// �����ն˴�����·ר��ģʽ��
21 #define TIOCEXCL 0x540C
// ��λ�ն˴�����·ר��ģʽ��
22 #define TIOCNXCL 0x540D
// ����ttyΪ�����նˡ�(TIOCNOTTY - ��ֹttyΪ�����ն�)��
23 #define TIOCSCTTY 0x540E
// ��ȡָ���ն��豸���̵���id���μ�tcgetpgrp()���ó�������������"Terminal IO Control
// Get PGRP "����д����ȡǰ̨������ID��
24 #define TIOCGPGRP 0x540F
// ����ָ���ն��豸���̵���id(�μ�tcsetpgrp())��
25 #define TIOCSPGRP 0x5410
// ������������л�δ�ͳ����ַ�����
26 #define TIOCOUTQ 0x5411
// ģ���ն����롣��������һ��ָ���ַ���ָ����Ϊ����������װ���ַ������ն��ϼ���ġ��û�
// �����ڸÿ����ն��Ͼ��г����û�Ȩ����ж�����Ȩ�ޡ�
27 #define TIOCSTI 0x5412
// ��ȡ�ն��豸���ڴ�С��Ϣ���μ�winsize�ṹ����
28 #define TIOCGWINSZ 0x5413
// �����ն��豸���ڴ�С��Ϣ���μ�winsize�ṹ����
29 #define TIOCSWINSZ 0x5414
// ����modem״̬�������ߵĵ�ǰ״̬����λ��־�����μ�����185-196�У���
30 #define TIOCMGET 0x5415
// ���õ���modem״̬�������ߵ�״̬(true��false)(Individual control line Set)��
31 #define TIOCMBIS 0x5416
// ��λ����modem״̬�������ߵ�״̬(Individual control line clear)��
32 #define TIOCMBIC 0x5417
// ����modem״̬���ߵ�״̬�����ijһ����λ��λ����modem��Ӧ��״̬���߽���Ϊ��Ч��
33 #define TIOCMSET 0x5418
// ��ȡ�����ز�����־(1 - ������0 - �ر�)��
// ���ڱ������ӵ��ն˻������豸�������ز���־�ǿ����ģ�����ʹ��modem��·���ն˻��豸
// ���ǹرյġ�Ϊ����ʹ�������� ioctl���ã�tty��·Ӧ������ O_NDELAY ��ʽ�ģ�����
// open()�Ͳ���ȴ��ز���
34 #define TIOCGSOFTCAR 0x5419
// ���������ز�����־(1 - ������0 - �ر�)��
35 #define TIOCSSOFTCAR 0x541A
// ������������л�δȡ���ַ�����Ŀ��
36 #define FIONREAD 0x541B
37 #define TIOCINQ FIONREAD
38
// ���ڴ�С(Window size)���Խṹ���ڴ��ڻ����п����ڻ�����Ļ��Ӧ�ó���
// ioctls�е�TIOCGWINSZ��TIOCSWINSZ��������ȡ��������Щ��Ϣ��
39 struct winsize {
40 unsigned short ws_row; // �����ַ�������
41 unsigned short ws_col; // �����ַ�������
42 unsigned short ws_xpixel; // ���ڿ��ȣ�����ֵ��
43 unsigned short ws_ypixel; // ���ڸ߶ȣ�����ֵ��
44 };
45
// AT&TϵͳV��termio�ṹ��
46 #define NCC 8 // termio�ṹ�п����ַ�����ij��ȡ�
47 struct termio {
48 unsigned short c_iflag; /* input mode flags */ // ����ģʽ��־��
49 unsigned short c_oflag; /* output mode flags */ // ���ģʽ��־��
50 unsigned short c_cflag; /* control mode flags */ // ����ģʽ��־��
51 unsigned short c_lflag; /* local mode flags */ // ����ģʽ��־��
52 unsigned char c_line; /* line discipline */ // ��·��̣����ʣ���
53 unsigned char c_cc[NCC]; /* control characters */ // �����ַ����顣
54 };
55
// POSIX��termios�ṹ��
56 #define NCCS 17 // termios�ṹ�п����ַ����鳤�ȡ�
57 struct termios {
58 tcflag_t c_iflag; /* input mode flags */ // ����ģʽ��־��
59 tcflag_t c_oflag; /* output mode flags */ // ���ģʽ��־��
60 tcflag_t c_cflag; /* control mode flags */ // ����ģʽ��־��
61 tcflag_t c_lflag; /* local mode flags */ // ����ģʽ��־��
62 cc_t c_line; /* line discipline */ // ��·��̣����ʣ���
63 cc_t c_cc[NCCS]; /* control characters */ // �����ַ����顣
64 };
65
// �����ǿ����ַ�����c_cc[]���������ֵ���������ʼֵ������include/linux/tty.h�С�
// ������Ը�����������е�ֵ�����������_POSIX_VDISABLE��\0������ô������ijһ��ֵ
// ���� _POSIX_VDISABLE ��ֵʱ����ʾ��ֹʹ����������Ӧ�������ַ���
66 /* c_cc characters */ /* c_cc�����е��ַ� */
67 #define VINTR 0 // c_cc[VINTR] = INTR (^C)��\003���ж��ַ���
68 #define VQUIT 1 // c_cc[VQUIT] = QUIT (^\)��\034���˳��ַ���
69 #define VERASE 2 // c_cc[VERASE] = ERASE (^H)��\177�������ַ���
70 #define VKILL 3 // c_cc[VKILL] = KILL (^U)��\025����ֹ�ַ���ɾ���У���
71 #define VEOF 4 // c_cc[VEOF] = EOF (^D)��\004���ļ������ַ���
72 #define VTIME 5 // c_cc[VTIME] = TIME (\0)��\0�� ��ʱ��ֵ(�μ�����˵��)��
73 #define VMIN 6 // c_cc[VMIN] = MIN (\1)��\1�� ��ʱ��ֵ��
74 #define VSWTC 7 // c_cc[VSWTC] = SWTC (\0)��\0�� �����ַ���
75 #define VSTART 8 // c_cc[VSTART] = START (^Q)��\021����ʼ�ַ���
76 #define VSTOP 9 // c_cc[VSTOP] = STOP (^S)��\023��ֹͣ�ַ���
77 #define VSUSP 10 // c_cc[VSUSP] = SUSP (^Z)��\032�������ַ���
78 #define VEOL 11 // c_cc[VEOL] = EOL (\0)��\0�� �н����ַ���
79 #define VREPRINT 12 // c_cc[VREPRINT] = REPRINT (^R)��\022������ʾ�ַ���
80 #define VDISCARD 13 // c_cc[VDISCARD] = DISCARD (^O)��\017�������ַ���
81 #define VWERASE 14 // c_cc[VWERASE] = WERASE (^W)��\027�����ʲ����ַ���
82 #define VLNEXT 15 // c_cc[VLNEXT] = LNEXT (^V)��\026����һ���ַ���
83 #define VEOL2 16 // c_cc[VEOL2] = EOL2 (\0)��\0�� �н����ַ�2��
84
// termios�ṹ����ģʽ�ֶ�c_iflag���ֱ�־�ķ��ų�����
85 /* c_iflag bits */ /* c_iflag����λ */
86 #define IGNBRK 0000001 // ����ʱ����BREAK������
87 #define BRKINT 0000002 // ��BREAKʱ����SIGINT�źš�
88 #define IGNPAR 0000004 // ������żУ��������ַ���
89 #define PARMRK 0000010 // �����żУ�����
90 #define INPCK 0000020 // ����������żУ�顣
91 #define ISTRIP 0000040 // �����ַ���8λ��
92 #define INLCR 0000100 // ����ʱ�����з�NLӳ��ɻس���CR��
93 #define IGNCR 0000200 // ���Իس���CR��
94 #define ICRNL 0000400 // ������ʱ���س���CRӳ��ɻ��з�NL��
95 #define IUCLC 0001000 // ������ʱ����д�ַ�ת����Сд�ַ���
96 #define IXON 0002000 // ������ʼ/ֹͣ��XON/XOFF��������ơ�
97 #define IXANY 0004000 // �����κ��ַ����������
98 #define IXOFF 0010000 // ������ʼ/ֹͣ��XON/XOFF��������ơ�
99 #define IMAXBEL 0020000 // ���������ʱ���塣
100
// termios�ṹ�����ģʽ�ֶ�c_oflag���ֱ�־�ķ��ų�����
101 /* c_oflag bits */ /* c_oflag����λ */
102 #define OPOST 0000001 // ִ�����������
103 #define OLCUC 0000002 // �����ʱ��Сд�ַ�ת���ɴ�д�ַ���
104 #define ONLCR 0000004 // �����ʱ�����з�NLӳ��ɻس�-���з�CR-NL��
105 #define OCRNL 0000010 // �����ʱ���س���CRӳ��ɻ��з�NL��
106 #define ONOCR 0000020 // ��0�в�����س���CR��
107 #define ONLRET 0000040 // ���з�NLִ�лس����Ĺ��ܡ�
108 #define OFILL 0000100 // �ӳ�ʱʹ������ַ�����ʹ��ʱ���ӳ١�
109 #define OFDEL 0000200 // ����ַ���ASCII��DEL�����δ���ã���ʹ��ASCII NULL��
110 #define NLDLY 0000400 // ѡ�����ӳ١�
111 #define NL0 0000000 // �����ӳ�����0��
112 #define NL1 0000400 // �����ӳ�����1��
113 #define CRDLY 0003000 // ѡ��س��ӳ١�
114 #define CR0 0000000 // �س��ӳ�����0��
115 #define CR1 0001000 // �س��ӳ�����1��
116 #define CR2 0002000 // �س��ӳ�����2��
117 #define CR3 0003000 // �س��ӳ�����3��
118 #define TABDLY 0014000 // ѡ��ˮƽ�Ʊ��ӳ١�
119 #define TAB0 0000000 // ˮƽ�Ʊ��ӳ�����0��
120 #define TAB1 0004000 // ˮƽ�Ʊ��ӳ�����1��
121 #define TAB2 0010000 // ˮƽ�Ʊ��ӳ�����2��
122 #define TAB3 0014000 // ˮƽ�Ʊ��ӳ�����3��
123 #define XTABS 0014000 // ���Ʊ���TAB���ɿո�ֵ��ʾ�ո�����
124 #define BSDLY 0020000 // ѡ���˸��ӳ١�
125 #define BS0 0000000 // �˸��ӳ�����0��
126 #define BS1 0020000 // �˸��ӳ�����1��
127 #define VTDLY 0040000 // �����Ʊ��ӳ١�
128 #define VT0 0000000 // �����Ʊ��ӳ�����0��
129 #define VT1 0040000 // �����Ʊ��ӳ�����1��
130 #define FFDLY 0040000 // ѡ��ҳ�ӳ١�
131 #define FF0 0000000 // ��ҳ�ӳ�����0��
132 #define FF1 0040000 // ��ҳ�ӳ�����1��
133
// termios�ṹ�п���ģʽ��־�ֶ�c_cflag��־�ķ��ų�����8����������
134 /* c_cflag bit meaning */ /* c_cflag ����λ�ĺ��� */
135 #define CBAUD 0000017 // ��������λ�����롣
136 #define B0 0000000 /* hang up */ /* �Ҷ���· */
137 #define B50 0000001 // ������ 50��
138 #define B75 0000002 // ������ 75��
139 #define B110 0000003 // ������ 110��
140 #define B134 0000004 // ������ 134��
141 #define B150 0000005 // ������ 150��
142 #define B200 0000006 // ������ 200��
143 #define B300 0000007 // ������ 300��
144 #define B600 0000010 // ������ 600��
145 #define B1200 0000011 // ������ 1200��
146 #define B1800 0000012 // ������ 1800��
147 #define B2400 0000013 // ������ 2400��
148 #define B4800 0000014 // ������ 4800��
149 #define B9600 0000015 // ������ 9600��
150 #define B19200 0000016 // ������ 19200��
151 #define B38400 0000017 // ������ 38400��
152 #define EXTA B19200 // ��չ������A��
153 #define EXTB B38400 // ��չ������B��
154 #define CSIZE 0000060 // �ַ�λ���������롣
155 #define CS5 0000000 // ÿ�ַ�5����λ��
156 #define CS6 0000020 // ÿ�ַ�6����λ��
157 #define CS7 0000040 // ÿ�ַ�7����λ��
158 #define CS8 0000060 // ÿ�ַ�8����λ��
159 #define CSTOPB 0000100 // ��������ֹͣλ��������1����
160 #define CREAD 0000200 // �������ա�
161 #define PARENB 0000400 // �������ʱ������żλ������ʱ������żУ�顣
162 #define PARODD 0001000 // ����/����У������У�顣
163 #define HUPCL 0002000 // �����̹رպ�Ҷϡ�
164 #define CLOCAL 0004000 // ���Ե��ƽ����(modem)������·��
165 #define CIBAUD 03600000 /* input baud rate (not used) */ /* ���벨����(δʹ��) */
166 #define CRTSCTS 020000000000 /* flow control */ /* ������ */
167
// termios�ṹ�б���ģʽ��־�ֶ�c_lflag�ķ��ų�����
168 /* c_lflag bits */ /* c_lflag����λ */
169 #define ISIG 0000001 // ���յ��ַ�INTR��QUIT��SUSP��DSUSP��������Ӧ���źš�
170 #define ICANON 0000002 // �����淶ģʽ����ģʽ����
171 #define XCASE 0000004 // ��������ICANON�����ն��Ǵ�д�ַ��ġ�
172 #define ECHO 0000010 // ���������ַ���
173 #define ECHOE 0000020 // ��������ICANON����ERASE/WERASE������ǰһ�ַ�/���ʡ�
174 #define ECHOK 0000040 // ��������ICANON����KILL�ַ���������ǰ�С�
175 #define ECHONL 0000100 // ��������ICANON����ʹECHOû�п���Ҳ����NL�ַ���
176 #define NOFLSH 0000200 // ������SIGINT��SIGQUIT�ź�ʱ��ˢ������������У���
// ����SIGSUSP�ź�ʱ��ˢ��������С�
177 #define TOSTOP 0000400 // ����SIGTTOU�źŵ���̨���̵Ľ����飬�ú�̨������ͼд
// �Լ��Ŀ����նˡ�
178 #define ECHOCTL 0001000 // ��������ECHO�����TAB��NL��START��STOP�����ASCII
// �����źŽ������Գ���^Xʽ����Xֵ�ǿ��Ʒ�+0x40��
179 #define ECHOPRT 0002000 // ��������ICANON��IECHO�����ַ��ڲ���ʱ����ʾ��
180 #define ECHOKE 0004000 // ��������ICANON����KILLͨ���������ϵ������ַ������ԡ�
181 #define FLUSHO 0010000 // �����ˢ�¡�ͨ������DISCARD�ַ����ñ�־����ת��
182 #define PENDIN 0040000 // ����һ���ַ��Ƕ�ʱ����������е������ַ��������ԡ�
183 #define IEXTEN 0100000 // ����ʵ��ʱ��������봦����
184
185 /* modem lines */ /* modem��·�źŷ��ų��� */
186 #define TIOCM_LE 0x001 // ��·����(Line Enable)��
187 #define TIOCM_DTR 0x002 // �����ն˾���(Data Terminal Ready)��
188 #define TIOCM_RTS 0x004 // ������(Request to Send)��
189 #define TIOCM_ST 0x008 // �������ݷ���(Serial Transfer)��[??]
190 #define TIOCM_SR 0x010 // �������ݽ���(Serial Receive)��[??]
191 #define TIOCM_CTS 0x020 // �������(Clear To Send)��
192 #define TIOCM_CAR 0x040 // �ز����(Carrier Detect)��
193 #define TIOCM_RNG 0x080 // ����ָʾ(Ring indicate)��
194 #define TIOCM_DSR 0x100 // �����豸����(Data Set Ready)��
195 #define TIOCM_CD TIOCM_CAR
196 #define TIOCM_RI TIOCM_RNG
197
198 /* tcflow() and TCXONC use these */ /* tcflow()��TCXONCʹ����Щ���ų��� */
199 #define TCOOFF 0 // �����������"Terminal Control Output OFF"�������
200 #define TCOON 1 // ����������������
201 #define TCIOFF 2 // ϵͳ����һ��STOP�ַ���ʹ�豸ֹͣ��ϵͳ�������ݡ�
202 #define TCION 3 // ϵͳ����һ��START�ַ���ʹ�豸��ʼ��ϵͳ�������ݡ�
203
204 /* tcflush() and TCFLSH use these */ /* tcflush()��TCFLSHʹ����Щ���ų��� */
205 #define TCIFLUSH 0 // ����յ������ݵ�������
206 #define TCOFLUSH 1 // ����д�����ݵ������͡�
207 #define TCIOFLUSH 2 // ����յ������ݵ�����������д�����ݵ������͡�
208
209 /* tcsetattr uses these */ /* tcsetattr()ʹ����Щ���ų��� */
210 #define TCSANOW 0 // �ı�����������
211 #define TCSADRAIN 1 // �ı���������д�����������֮������
212 #define TCSAFLUSH 2 // �ı���������д�����������֮���������н��յ���
// ��û�ж�ȡ�����ݱ�����֮������
213
// ������Щ�����ڱ��뻷���ĺ�����libc.a��ʵ�֣��ں���û�С��ں�����ʵ���У���Щ����ͨ��
// ����ϵͳ����ioctl()��ʵ�֡��й�ioctl()ϵͳ���ã���μ�fs/ioctl.c����
// ����termios_p��ָtermios�ṹ�еĽ��ղ����ʡ�
214 extern speed_t cfgetispeed(struct termios *termios_p);
// ����termios_p��ָtermios�ṹ�еķ��Ͳ����ʡ�
215 extern speed_t cfgetospeed(struct termios *termios_p);
// ��termios_p��ָtermios�ṹ�еĽ��ղ���������Ϊspeed��
216 extern int cfsetispeed(struct termios *termios_p, speed_t speed);
// ��termios_p��ָtermios�ṹ�еķ��Ͳ���������Ϊspeed��
217 extern int cfsetospeed(struct termios *termios_p, speed_t speed);
// �ȴ�fildes��ָ������д������ݱ����ͳ�ȥ��
218 extern int tcdrain(int fildes);
// ����/����fildes��ָ�������ݵĽ��պͷ��͡�
219 extern int tcflow(int fildes, int action);
// ����fildesָ������������д����û�����Լ��������յ�����û�ж�ȡ�����ݡ�
220 extern int tcflush(int fildes, int queue_selector);
// ��ȡ����fildes��Ӧ����IJ����������䱣����termios_p��ָ�ĵط���
221 extern int tcgetattr(int fildes, struct termios *termios_p);
// ����ն�ʹ���첽�������ݴ��䣬����һ��ʱ������������һϵ��0ֵ����λ��
222 extern int tcsendbreak(int fildes, int duration);
// ʹ��termios�ṹָ��termios_p��ָ�����ݣ��������ն���صIJ�����
223 extern int tcsetattr(int fildes, int optional_actions,
224 struct termios *termios_p);
225
226 #endif
227