1 #![allow(non_camel_case_types)]
2 
3 use libc::{c_int,c_uint,c_uchar};
4 
5 pub type cc_t = c_uchar;
6 pub type speed_t = c_uint;
7 pub type tcflag_t = c_uint;
8 
9 #[derive(Debug,Copy,Clone,Eq,PartialEq)]
10 #[repr(C)]
11 pub struct termios {
12     pub c_iflag: tcflag_t,
13     pub c_oflag: tcflag_t,
14     pub c_cflag: tcflag_t,
15     pub c_lflag: tcflag_t,
16     c_line: cc_t,
17     pub c_cc: [cc_t; NCCS]
18 }
19 
20 pub const NCCS: usize = 19;
21 
22 // c_cc characters
23 pub const VINTR:    usize = 0;
24 pub const VQUIT:    usize = 1;
25 pub const VERASE:   usize = 2;
26 pub const VKILL:    usize = 3;
27 pub const VEOF:     usize = 4;
28 pub const VTIME:    usize = 5;
29 pub const VMIN:     usize = 6;
30 pub const VSWTC:    usize = 7;
31 pub const VSTART:   usize = 8;
32 pub const VSTOP:    usize = 9;
33 pub const VSUSP:    usize = 10;
34 pub const VEOL:     usize = 11;
35 pub const VREPRINT: usize = 12;
36 pub const VDISCARD: usize = 13;
37 pub const VWERASE:  usize = 14;
38 pub const VLNEXT:   usize = 15;
39 pub const VEOL2:    usize = 16;
40 
41 // c_iflag bits
42 pub const IGNBRK:  tcflag_t = 0o000001;
43 pub const BRKINT:  tcflag_t = 0o000002;
44 pub const IGNPAR:  tcflag_t = 0o000004;
45 pub const PARMRK:  tcflag_t = 0o000010;
46 pub const INPCK:   tcflag_t = 0o000020;
47 pub const ISTRIP:  tcflag_t = 0o000040;
48 pub const INLCR:   tcflag_t = 0o000100;
49 pub const IGNCR:   tcflag_t = 0o000200;
50 pub const ICRNL:   tcflag_t = 0o000400;
51 pub const IUCLC:   tcflag_t = 0o001000;
52 pub const IXON:    tcflag_t = 0o002000;
53 pub const IXANY:   tcflag_t = 0o004000;
54 pub const IXOFF:   tcflag_t = 0o010000;
55 pub const IMAXBEL: tcflag_t = 0o020000;
56 pub const IUTF8:   tcflag_t = 0o040000;
57 
58 // c_oflag bits
59 pub const OPOST:  tcflag_t = 0o000001;
60 pub const OLCUC:  tcflag_t = 0o000002;
61 pub const ONLCR:  tcflag_t = 0o000004;
62 pub const OCRNL:  tcflag_t = 0o000010;
63 pub const ONOCR:  tcflag_t = 0o000020;
64 pub const ONLRET: tcflag_t = 0o000040;
65 pub const OFILL:  tcflag_t = 0o000100;
66 pub const OFDEL:  tcflag_t = 0o000200;
67 pub const NLDLY:  tcflag_t = 0o000400;
68 pub const NL0:    tcflag_t = 0o000000;
69 pub const NL1:    tcflag_t = 0o000400;
70 pub const CRDLY:  tcflag_t = 0o003000;
71 pub const CR0:    tcflag_t = 0o000000;
72 pub const CR1:    tcflag_t = 0o001000;
73 pub const CR2:    tcflag_t = 0o002000;
74 pub const CR3:    tcflag_t = 0o003000;
75 pub const TABDLY: tcflag_t = 0o014000;
76 pub const TAB0:   tcflag_t = 0o000000;
77 pub const TAB1:   tcflag_t = 0o004000;
78 pub const TAB2:   tcflag_t = 0o010000;
79 pub const TAB3:   tcflag_t = 0o014000;
80 pub const BSDLY:  tcflag_t = 0o020000;
81 pub const BS0:    tcflag_t = 0o000000;
82 pub const BS1:    tcflag_t = 0o020000;
83 pub const FFDLY:  tcflag_t = 0o100000;
84 pub const FF0:    tcflag_t = 0o000000;
85 pub const FF1:    tcflag_t = 0o100000;
86 pub const VTDLY:  tcflag_t = 0o040000;
87 pub const VT0:    tcflag_t = 0o000000;
88 pub const VT1:    tcflag_t = 0o040000;
89 pub const XTABS:  tcflag_t = 0o014000;
90 
91 // c_cflag bits
92 pub const CBAUD:    tcflag_t = 0o010017;
93 pub const CSIZE:    tcflag_t = 0o000060;
94 pub const CS5:      tcflag_t = 0o000000;
95 pub const CS6:      tcflag_t = 0o000020;
96 pub const CS7:      tcflag_t = 0o000040;
97 pub const CS8:      tcflag_t = 0o000060;
98 pub const CSTOPB:   tcflag_t = 0o000100;
99 pub const CREAD:    tcflag_t = 0o000200;
100 pub const PARENB:   tcflag_t = 0o000400;
101 pub const PARODD:   tcflag_t = 0o001000;
102 pub const HUPCL:    tcflag_t = 0o002000;
103 pub const CLOCAL:   tcflag_t = 0o004000;
104 pub const CBAUDEX:  tcflag_t = 0o010000;
105 pub const CIBAUD:   tcflag_t = 0o02003600000;
106 pub const CMSPAR:   tcflag_t = 0o10000000000;
107 pub const CRTSCTS:  tcflag_t = 0o20000000000;
108 
109 // c_lflag bits
110 pub const ISIG:    tcflag_t = 0o000001;
111 pub const ICANON:  tcflag_t = 0o000002;
112 pub const XCASE:   tcflag_t = 0o000004;
113 pub const ECHO:    tcflag_t = 0o000010;
114 pub const ECHOE:   tcflag_t = 0o000020;
115 pub const ECHOK:   tcflag_t = 0o000040;
116 pub const ECHONL:  tcflag_t = 0o000100;
117 pub const NOFLSH:  tcflag_t = 0o000200;
118 pub const TOSTOP:  tcflag_t = 0o000400;
119 pub const ECHOCTL: tcflag_t = 0o001000;
120 pub const ECHOPRT: tcflag_t = 0o002000;
121 pub const ECHOKE:  tcflag_t = 0o004000;
122 pub const FLUSHO:  tcflag_t = 0o010000;
123 pub const PENDIN:  tcflag_t = 0o040000;
124 pub const IEXTEN:  tcflag_t = 0o100000;
125 pub const EXTPROC: tcflag_t = 0o200000;
126 
127 // baud rates
128 pub const B0:       speed_t = 0o000000;
129 pub const B50:      speed_t = 0o000001;
130 pub const B75:      speed_t = 0o000002;
131 pub const B110:     speed_t = 0o000003;
132 pub const B134:     speed_t = 0o000004;
133 pub const B150:     speed_t = 0o000005;
134 pub const B200:     speed_t = 0o000006;
135 pub const B300:     speed_t = 0o000007;
136 pub const B600:     speed_t = 0o000010;
137 pub const B1200:    speed_t = 0o000011;
138 pub const B1800:    speed_t = 0o000012;
139 pub const B2400:    speed_t = 0o000013;
140 pub const B4800:    speed_t = 0o000014;
141 pub const B9600:    speed_t = 0o000015;
142 pub const B19200:   speed_t = 0o000016;
143 pub const B38400:   speed_t = 0o000017;
144 pub const EXTA:     speed_t = B19200;
145 pub const EXTB:     speed_t = B38400;
146 pub const B57600:   speed_t = 0o010001;
147 pub const B115200:  speed_t = 0o010002;
148 pub const B230400:  speed_t = 0o010003;
149 pub const B460800:  speed_t = 0o010004;
150 pub const B500000:  speed_t = 0o010005;
151 pub const B576000:  speed_t = 0o010006;
152 pub const B921600:  speed_t = 0o010007;
153 pub const B1000000: speed_t = 0o010010;
154 pub const B1152000: speed_t = 0o010011;
155 pub const B1500000: speed_t = 0o010012;
156 pub const B2000000: speed_t = 0o010013;
157 pub const B2500000: speed_t = 0o010014;
158 pub const B3000000: speed_t = 0o010015;
159 pub const B3500000: speed_t = 0o010016;
160 pub const B4000000: speed_t = 0o010017;
161 
162 // tcflow()
163 pub const TCOOFF: c_int = 0;
164 pub const TCOON:  c_int = 1;
165 pub const TCIOFF: c_int = 2;
166 pub const TCION:  c_int = 3;
167 
168 // tcflush()
169 pub const TCIFLUSH:  c_int = 0;
170 pub const TCOFLUSH:  c_int = 1;
171 pub const TCIOFLUSH: c_int = 2;
172 
173 // tcsetattr()
174 pub const TCSANOW:   c_int = 0;
175 pub const TCSADRAIN: c_int = 1;
176 pub const TCSAFLUSH: c_int = 2;
177