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     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 VERASE2:  usize = 7;
32 pub const VINTR:    usize = 8;
33 pub const VQUIT:    usize = 9;
34 pub const VSUSP:    usize = 10;
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 
42 // c_iflag bits
43 pub const IGNBRK:  tcflag_t = 0x00000001;
44 pub const BRKINT:  tcflag_t = 0x00000002;
45 pub const IGNPAR:  tcflag_t = 0x00000004;
46 pub const PARMRK:  tcflag_t = 0x00000008;
47 pub const INPCK:   tcflag_t = 0x00000010;
48 pub const ISTRIP:  tcflag_t = 0x00000020;
49 pub const INLCR:   tcflag_t = 0x00000040;
50 pub const IGNCR:   tcflag_t = 0x00000080;
51 pub const ICRNL:   tcflag_t = 0x00000100;
52 pub const IXON:    tcflag_t = 0x00000200;
53 pub const IXOFF:   tcflag_t = 0x00000400;
54 pub const IXANY:   tcflag_t = 0x00000800;
55 pub const IMAXBEL: tcflag_t = 0x00002000;
56 
57 // c_oflag bits
58 pub const OPOST:  tcflag_t = 0x00000001;
59 pub const ONLCR:  tcflag_t = 0x00000002;
60 pub const TAB3:   tcflag_t = 0x00000004;
61 pub const OXTABS: tcflag_t = TAB3;
62 pub const ONOEOT: tcflag_t = 0x00000008;
63 pub const OCRNL:  tcflag_t = 0x00000010;
64 pub const ONOCR:  tcflag_t = 0x00000040;
65 pub const ONLRET: tcflag_t = 0x00000080;
66 
67 // c_cflag bits
68 pub const CIGNORE:    tcflag_t = 0x00000001;
69 pub const CSIZE:      tcflag_t = 0x00000300;
70 pub const CS5:        tcflag_t = 0x00000000;
71 pub const CS6:        tcflag_t = 0x00000100;
72 pub const CS7:        tcflag_t = 0x00000200;
73 pub const CS8:        tcflag_t = 0x00000300;
74 pub const CSTOPB:     tcflag_t = 0x00000400;
75 pub const CREAD:      tcflag_t = 0x00000800;
76 pub const PARENB:     tcflag_t = 0x00001000;
77 pub const PARODD:     tcflag_t = 0x00002000;
78 pub const HUPCL:      tcflag_t = 0x00004000;
79 pub const CLOCAL:     tcflag_t = 0x00008000;
80 pub const CRTSCTS:    tcflag_t = 0x00010000;
81 pub const CRTS_IFLOW: tcflag_t = CRTSCTS;
82 pub const CCTS_OFLOW: tcflag_t = CRTSCTS;
83 pub const MDMBUF:     tcflag_t = 0x00100000;
84 
85 // c_lflag bits
86 pub const ECHOKE:     tcflag_t = 0x00000001;
87 pub const ECHOE:      tcflag_t = 0x00000002;
88 pub const ECHOK:      tcflag_t = 0x00000004;
89 pub const ECHO:       tcflag_t = 0x00000008;
90 pub const ECHONL:     tcflag_t = 0x00000010;
91 pub const ECHOPRT:    tcflag_t = 0x00000020;
92 pub const ECHOCTL:    tcflag_t = 0x00000040;
93 pub const ISIG:       tcflag_t = 0x00000080;
94 pub const ICANON:     tcflag_t = 0x00000100;
95 pub const ALTWERASE:  tcflag_t = 0x00000200;
96 pub const IEXTEN:     tcflag_t = 0x00000400;
97 pub const EXTPROC:    tcflag_t = 0x00000800;
98 pub const TOSTOP:     tcflag_t = 0x00400000;
99 pub const FLUSHO:     tcflag_t = 0x00800000;
100 pub const NOKERNINFO: tcflag_t = 0x02000000;
101 pub const PENDIN:     tcflag_t = 0x20000000;
102 pub const NOFLSH:     tcflag_t = 0x80000000;
103 
104 // baud rates
105 pub const B0:      speed_t = 0;
106 pub const B50:     speed_t = 50;
107 pub const B75:     speed_t = 75;
108 pub const B110:    speed_t = 110;
109 pub const B134:    speed_t = 134;
110 pub const B150:    speed_t = 150;
111 pub const B200:    speed_t = 200;
112 pub const B300:    speed_t = 300;
113 pub const B600:    speed_t = 600;
114 pub const B1200:   speed_t = 1200;
115 pub const B1800:   speed_t = 1800;
116 pub const B2400:   speed_t = 2400;
117 pub const B4800:   speed_t = 4800;
118 pub const B9600:   speed_t = 9600;
119 pub const B19200:  speed_t = 19200;
120 pub const B38400:  speed_t = 38400;
121 pub const B7200:   speed_t = 7200;
122 pub const B14400:  speed_t = 14400;
123 pub const B28800:  speed_t = 28800;
124 pub const B57600:  speed_t = 57600;
125 pub const B76800:  speed_t = 76800;
126 pub const B115200: speed_t = 115200;
127 pub const B230400: speed_t = 230400;
128 pub const EXTA:    speed_t = 19200;
129 pub const EXTB:    speed_t = 38400;
130 
131 // tcflow()
132 pub const TCOOFF: c_int = 1;
133 pub const TCOON:  c_int = 2;
134 pub const TCIOFF: c_int = 3;
135 pub const TCION:  c_int = 4;
136 
137 // tcflush()
138 pub const TCIFLUSH:  c_int = 1;
139 pub const TCOFLUSH:  c_int = 2;
140 pub const TCIOFLUSH: c_int = 3;
141 
142 // tcsetattr()
143 pub const TCSANOW:   c_int = 0;
144 pub const TCSADRAIN: c_int = 1;
145 pub const TCSAFLUSH: c_int = 2;
146 pub const TCSASOFT:  c_int = 0x10;
147