1 #![allow(non_camel_case_types)]
2 
3 use libc::{c_int,c_uchar,c_ulong};
4 
5 pub type tcflag_t = c_ulong;
6 pub type cc_t = c_uchar;
7 pub type speed_t = c_ulong;
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     c_ispeed: speed_t,
18     c_ospeed: speed_t
19 }
20 
21 pub const NCCS: usize = 20;
22 
23 // c_cc characters
24 pub const VEOF:     usize = 0;
25 pub const VEOL:     usize = 1;
26 pub const VEOL2:    usize = 2;
27 pub const VERASE:   usize = 3;
28 pub const VWERASE:  usize = 4;
29 pub const VKILL:    usize = 5;
30 pub const VREPRINT: usize = 6;
31 pub const VINTR:    usize = 8;
32 pub const VQUIT:    usize = 9;
33 pub const VSUSP:    usize = 10;
34 pub const VDSUSP:   usize = 11;
35 pub const VSTART:   usize = 12;
36 pub const VSTOP:    usize = 13;
37 pub const VLNEXT:   usize = 14;
38 pub const VDISCARD: usize = 15;
39 pub const VMIN:     usize = 16;
40 pub const VTIME:    usize = 17;
41 pub const VSTATUS:  usize = 18;
42 
43 // c_iflag bits
44 pub const IGNBRK:  tcflag_t = 0x00000001;
45 pub const BRKINT:  tcflag_t = 0x00000002;
46 pub const IGNPAR:  tcflag_t = 0x00000004;
47 pub const PARMRK:  tcflag_t = 0x00000008;
48 pub const INPCK:   tcflag_t = 0x00000010;
49 pub const ISTRIP:  tcflag_t = 0x00000020;
50 pub const INLCR:   tcflag_t = 0x00000040;
51 pub const IGNCR:   tcflag_t = 0x00000080;
52 pub const ICRNL:   tcflag_t = 0x00000100;
53 pub const IXON:    tcflag_t = 0x00000200;
54 pub const IXOFF:   tcflag_t = 0x00000400;
55 pub const IXANY:   tcflag_t = 0x00000800;
56 pub const IMAXBEL: tcflag_t = 0x00002000;
57 pub const IUTF8:   tcflag_t = 0x00004000;
58 
59 // c_oflag bits
60 pub const OPOST:  tcflag_t = 0x00000001;
61 pub const ONLCR:  tcflag_t = 0x00000002;
62 pub const OXTABS: tcflag_t = 0x00000004;
63 pub const ONOEOT: tcflag_t = 0x00000008;
64 pub const OCRNL:  tcflag_t = 0x00000010;
65 pub const ONOCR:  tcflag_t = 0x00000020;
66 pub const ONLRET: tcflag_t = 0x00000040;
67 pub const OFILL:  tcflag_t = 0x00000080;
68 pub const NLDLY:  tcflag_t = 0x00000300;
69 pub const TABDLY: tcflag_t = 0x00000c04;
70 pub const CRDLY:  tcflag_t = 0x00003000;
71 pub const FFDLY:  tcflag_t = 0x00004000;
72 pub const BSDLY:  tcflag_t = 0x00008000;
73 pub const VTDLY:  tcflag_t = 0x00010000;
74 pub const OFDEL:  tcflag_t = 0x00020000;
75 pub const NL0:    tcflag_t = 0x00000000;
76 pub const NL1:    tcflag_t = 0x00000100;
77 pub const NL2:    tcflag_t = 0x00000200;
78 pub const NL3:    tcflag_t = 0x00000300;
79 pub const TAB0:   tcflag_t = 0x00000000;
80 pub const TAB1:   tcflag_t = 0x00000400;
81 pub const TAB2:   tcflag_t = 0x00000800;
82 pub const TAB3:   tcflag_t = 0x00000004;
83 pub const CR0:    tcflag_t = 0x00000000;
84 pub const CR1:    tcflag_t = 0x00001000;
85 pub const CR2:    tcflag_t = 0x00002000;
86 pub const CR3:    tcflag_t = 0x00003000;
87 pub const FF0:    tcflag_t = 0x00000000;
88 pub const FF1:    tcflag_t = 0x00004000;
89 pub const BS0:    tcflag_t = 0x00000000;
90 pub const BS1:    tcflag_t = 0x00008000;
91 pub const VT0:    tcflag_t = 0x00000000;
92 pub const VT1:    tcflag_t = 0x00010000;
93 
94 // c_cflag bits
95 pub const CIGNORE:    tcflag_t = 0x00000001;
96 pub const CSIZE:      tcflag_t = 0x00000300;
97 pub const CS5:        tcflag_t = 0x00000000;
98 pub const CS6:        tcflag_t = 0x00000100;
99 pub const CS7:        tcflag_t = 0x00000200;
100 pub const CS8:        tcflag_t = 0x00000300;
101 pub const CSTOPB:     tcflag_t = 0x00000400;
102 pub const CREAD:      tcflag_t = 0x00000800;
103 pub const PARENB:     tcflag_t = 0x00001000;
104 pub const PARODD:     tcflag_t = 0x00002000;
105 pub const HUPCL:      tcflag_t = 0x00004000;
106 pub const CLOCAL:     tcflag_t = 0x00008000;
107 pub const CCTS_OFLOW: tcflag_t = 0x00010000;
108 pub const CRTSCTS:    tcflag_t = CCTS_OFLOW | CRTS_IFLOW;
109 pub const CRTS_IFLOW: tcflag_t = 0x00020000;
110 pub const CDTR_IFLOW: tcflag_t = 0x00040000;
111 pub const CDSR_OFLOW: tcflag_t = 0x00080000;
112 pub const CCAR_OFLOW: tcflag_t = 0x00100000;
113 pub const MDMBUF:     tcflag_t = 0x00100000;
114 
115 // c_lflag bits
116 pub const ECHOKE:     tcflag_t = 0x00000001;
117 pub const ECHOE:      tcflag_t = 0x00000002;
118 pub const ECHOK:      tcflag_t = 0x00000004;
119 pub const ECHO:       tcflag_t = 0x00000008;
120 pub const ECHONL:     tcflag_t = 0x00000010;
121 pub const ECHOPRT:    tcflag_t = 0x00000020;
122 pub const ECHOCTL:    tcflag_t = 0x00000040;
123 pub const ISIG:       tcflag_t = 0x00000080;
124 pub const ICANON:     tcflag_t = 0x00000100;
125 pub const ALTWERASE:  tcflag_t = 0x00000200;
126 pub const IEXTEN:     tcflag_t = 0x00000400;
127 pub const EXTPROC:    tcflag_t = 0x00000800;
128 pub const TOSTOP:     tcflag_t = 0x00400000;
129 pub const FLUSHO:     tcflag_t = 0x00800000;
130 pub const NOKERNINFO: tcflag_t = 0x02000000;
131 pub const PENDIN:     tcflag_t = 0x20000000;
132 pub const NOFLSH:     tcflag_t = 0x80000000;
133 
134 // baud speeds
135 pub const B0:      speed_t = 0;
136 pub const B50:     speed_t = 50;
137 pub const B75:     speed_t = 75;
138 pub const B110:    speed_t = 110;
139 pub const B134:    speed_t = 134;
140 pub const B150:    speed_t = 150;
141 pub const B200:    speed_t = 200;
142 pub const B300:    speed_t = 300;
143 pub const B600:    speed_t = 600;
144 pub const B1200:   speed_t = 1200;
145 pub const B1800:   speed_t = 1800;
146 pub const B2400:   speed_t = 2400;
147 pub const B4800:   speed_t = 4800;
148 pub const B9600:   speed_t = 9600;
149 pub const B19200:  speed_t = 19200;
150 pub const B38400:  speed_t = 38400;
151 pub const B7200:   speed_t = 7200;
152 pub const B14400:  speed_t = 14400;
153 pub const B28800:  speed_t = 28800;
154 pub const B57600:  speed_t = 57600;
155 pub const B76800:  speed_t = 76800;
156 pub const B115200: speed_t = 115200;
157 pub const B230400: speed_t = 230400;
158 pub const EXTA:    speed_t = 19200;
159 pub const EXTB:    speed_t = 38400;
160 
161 // tcflow()
162 pub const TCOOFF:    c_int = 1;
163 pub const TCOON:     c_int = 2;
164 pub const TCIOFF:    c_int = 3;
165 pub const TCION:     c_int = 4;
166 
167 // tcflush()
168 pub const TCIFLUSH:  c_int = 1;
169 pub const TCOFLUSH:  c_int = 2;
170 pub const TCIOFLUSH: c_int = 3;
171 
172 // tcsetattr()
173 pub const TCSANOW:   c_int = 0;
174 pub const TCSADRAIN: c_int = 1;
175 pub const TCSAFLUSH: c_int = 2;
176 pub const TCSASOFT:  c_int = 0x10;
177