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