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