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     pub c_cc: [cc_t; NCCS]
17 }
18 
19 pub const NCCS: usize = 19;
20 
21 // c_cc characters
22 pub const VINTR:    usize = 0;
23 pub const VQUIT:    usize = 1;
24 pub const VERASE:   usize = 2;
25 pub const VKILL:    usize = 3;
26 pub const VEOF:     usize = 4;
27 pub const VEOL:     usize = 5;
28 pub const VEOL2:    usize = 6;
29 pub const VMIN:     usize = 4;
30 pub const VTIME:    usize = 5;
31 pub const VSWTCH:   usize = 7;
32 pub const VSTART:   usize = 8;
33 pub const VSTOP:    usize = 9;
34 pub const VSUSP:    usize = 10;
35 pub const VDSUSP:   usize = 11;
36 pub const VREPRINT: usize = 12;
37 pub const VDISCARD: usize = 13;
38 pub const VWERASE:  usize = 14;
39 pub const VLNEXT:   usize = 15;
40 pub const VSTATUS:  usize = 16;
41 pub const VERASE2:  usize = 17;
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 DOSMODE: tcflag_t = 0o100000;
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 XTABS:   tcflag_t = 0o014000;
83 pub const BSDLY:   tcflag_t = 0o020000;
84 pub const BS0:     tcflag_t = 0o000000;
85 pub const BS1:     tcflag_t = 0o020000;
86 pub const VTDLY:   tcflag_t = 0o040000;
87 pub const VT0:     tcflag_t = 0o000000;
88 pub const VT1:     tcflag_t = 0o040000;
89 pub const FFDLY:   tcflag_t = 0o100000;
90 pub const FF0:     tcflag_t = 0o000000;
91 pub const FF1:     tcflag_t = 0o100000;
92 pub const PAGEOUT: tcflag_t = 0o200000;
93 pub const WRAP:    tcflag_t = 0o400000;
94 
95 // c_cflag bits
96 pub const CBAUD:     tcflag_t = 0o000017;
97 pub const CSIZE:     tcflag_t = 0o000060;
98 pub const CS5:       tcflag_t = 0o000000;
99 pub const CS6:       tcflag_t = 0o000020;
100 pub const CS7:       tcflag_t = 0o000040;
101 pub const CS8:       tcflag_t = 0o000060;
102 pub const CSTOPB:    tcflag_t = 0o000100;
103 pub const CREAD:     tcflag_t = 0o000200;
104 pub const PARENB:    tcflag_t = 0o000400;
105 pub const PARODD:    tcflag_t = 0o001000;
106 pub const HUPCL:     tcflag_t = 0o002000;
107 pub const CLOCAL:    tcflag_t = 0o004000;
108 pub const RCV1EN:    tcflag_t = 0o010000;
109 pub const XMT1EN:    tcflag_t = 0o020000;
110 pub const LOBLK:     tcflag_t = 0o040000;
111 pub const XCLUDE:    tcflag_t = 0o100000;
112 pub const CRTSXOFF:  tcflag_t = 0o10000000000;
113 pub const CRTSCTS:   tcflag_t = 0o20000000000;
114 pub const CIBAUD:    tcflag_t = 0o3600000;
115 pub const PAREXT:    tcflag_t = 0o4000000;
116 pub const CBAUDEXT:  tcflag_t = 0o10000000;
117 pub const CIBAUDEXT: tcflag_t = 0o20000000;
118 
119 // c_lflag bits
120 pub const ISIG:    tcflag_t = 0o000001;
121 pub const ICANON:  tcflag_t = 0o000002;
122 pub const XCASE:   tcflag_t = 0o000004;
123 pub const ECHO:    tcflag_t = 0o000010;
124 pub const ECHOE:   tcflag_t = 0o000020;
125 pub const ECHOK:   tcflag_t = 0o000040;
126 pub const ECHONL:  tcflag_t = 0o000100;
127 pub const NOFLSH:  tcflag_t = 0o000200;
128 pub const TOSTOP:  tcflag_t = 0o000400;
129 pub const ECHOCTL: tcflag_t = 0o001000;
130 pub const ECHOPRT: tcflag_t = 0o002000;
131 pub const ECHOKE:  tcflag_t = 0o004000;
132 pub const DEFECHO: tcflag_t = 0o010000;
133 pub const FLUSHO:  tcflag_t = 0o020000;
134 pub const PENDIN:  tcflag_t = 0o040000;
135 pub const IEXTEN:  tcflag_t = 0o100000;
136 
137 // baud rates
138 pub const B0:      speed_t = 0;
139 pub const B50:     speed_t = 1;
140 pub const B75:     speed_t = 2;
141 pub const B110:    speed_t = 3;
142 pub const B134:    speed_t = 4;
143 pub const B150:    speed_t = 5;
144 pub const B200:    speed_t = 6;
145 pub const B300:    speed_t = 7;
146 pub const B600:    speed_t = 8;
147 pub const B1200:   speed_t = 9;
148 pub const B1800:   speed_t = 10;
149 pub const B2400:   speed_t = 11;
150 pub const B4800:   speed_t = 12;
151 pub const B9600:   speed_t = 13;
152 pub const B19200:  speed_t = 14;
153 pub const B38400:  speed_t = 15;
154 pub const EXTA:    speed_t = B19200;
155 pub const EXTB:    speed_t = B38400;
156 pub const B57600:  speed_t = 16;
157 pub const B76800:  speed_t = 17;
158 pub const B115200: speed_t = 18;
159 pub const B153600: speed_t = 19;
160 pub const B230400: speed_t = 20;
161 pub const B307200: speed_t = 21;
162 pub const B460800: speed_t = 22;
163 pub const B921600: speed_t = 23;
164 
165 // tcflow()
166 pub const TCOOFF: c_int = 0;
167 pub const TCOON:  c_int = 1;
168 pub const TCIOFF: c_int = 2;
169 pub const TCION:  c_int = 3;
170 
171 // tcflush()
172 pub const TCIFLUSH:  c_int = 0;
173 pub const TCOFLUSH:  c_int = 1;
174 pub const TCIOFLUSH: c_int = 2;
175 
176 // tcsetattr()
177 pub const TCSANOW:   c_int = 0x540E;
178 pub const TCSADRAIN: c_int = 0x540F;
179 pub const TCSAFLUSH: c_int = 0x5410;
180