����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