1 /**
2 * D header file for POSIX.
3 *
4 * License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
5 */
6
7 module core.sys.posix.sys.ttycom;
8
9 import core.sys.posix.sys.ioccom;
10 import core.sys.posix.termios;
11 import core.sys.posix.sys.time;
12
13 version (OSX)
14 version = Darwin;
15 else version (iOS)
16 version = Darwin;
17 else version (TVOS)
18 version = Darwin;
19 else version (WatchOS)
20 version = Darwin;
21
version(Posix)22 version (Posix):
23
24 nothrow @nogc:
25 @system:
26
27 version (Darwin)
28 {
29 struct winsize {
30 ushort ws_row; // rows, in characters
31 ushort ws_col; // columns, in characters
32 ushort ws_xpixel; // horizontal size, pixels
33 ushort ws_ypixel; // vertical size, pixels
34 }
35
36 // Serial/TTY ioctl's
37 enum uint TIOCMODG = _IOR!(int)('t', 3); // get modem control state
38 enum uint TIOCMODS = _IOW!(int)('t', 4); // set modem control state
39 enum uint TIOCM_LE = 0x001; // line enable
40 enum uint TIOCM_DTR = 0x002; // data terminal ready
41 enum uint TIOCM_RTS = 0x004; // request to send
42 enum uint TIOCM_ST = 0x008; // secondary transmit
43 enum uint TIOCM_SR = 0x010; // secondary receive
44 enum uint TIOCM_CTS = 0x020; // clear to send
45 enum uint TIOCM_CAR = 0x040; // carrier detect
46 enum uint TIOCM_CD = TIOCM_CAR;
47 enum uint TIOCM_RNG = 0x080; // ring
48 enum uint TIOCM_RI = TIOCM_RNG;
49 enum uint TIOCM_DSR = 0x100; // data set ready
50 // 8-10 compat
51 enum uint TIOCEXCL = _IO('t', 13); // set exclusive use of tty
52 enum uint TIOCNXCL = _IO('t', 14); // reset exclusive use of tty
53 // 15 unused
54 enum uint TIOCFLUSH = _IOW!(int)('t', 16); // flush buffers
55 // 17-18 compat
56 enum uint TIOCGETA = _IOR!(termios)('t', 19); // get termios struct
57 enum uint TIOCSETA = _IOW!(termios)('t', 20); // set termios struct
58 enum uint TIOCSETAW = _IOW!(termios)('t', 21); // drain output, set
59 enum uint TIOCSETAF = _IOW!(termios)('t', 22); // drn out, fls in, set
60 enum uint TIOCGETD = _IOR!(int)('t', 26); // get line discipline
61 enum uint TIOCSETD = _IOW!(int)('t', 27); // set line discipline
62 enum uint TIOCIXON = _IO('t', 129); // internal input VSTART
63 enum uint TIOCIXOFF = _IO('t', 128); // internal input VSTOP
64 // 127-124 compat
65 enum uint TIOCSBRK = _IO('t', 123); // set break bit
66 enum uint TIOCCBRK = _IO('t', 122); // clear break bit
67 enum uint TIOCSDTR = _IO('t', 121); // set data terminal ready
68 enum uint TIOCCDTR = _IO('t', 120); // clear data terminal ready
69 enum uint TIOCGPGRP = _IOR!(int)('t', 119); // get pgrp of tty
70 enum uint TIOCSPGRP = _IOW!(int)('t', 118); // set pgrp of tty
71 // 117-116 compat
72 enum uint TIOCOUTQ = _IOR!(int)('t', 115); // output queue size
73 enum uint TIOCSTI = _IOW!(char)('t', 114);// simulate terminal input
74 enum uint TIOCNOTTY = _IO('t', 113); // void tty association
75 enum uint TIOCPKT = _IOW!(int)('t', 112); // pty: set/clear packet mode
76 enum uint TIOCPKT_DATA = 0x00; // data packet
77 enum uint TIOCPKT_FLUSHREAD = 0x01; // flush packet
78 enum uint TIOCPKT_FLUSHWRITE = 0x02; // flush packet
79 enum uint TIOCPKT_STOP = 0x04; // stop output
80 enum uint TIOCPKT_START = 0x08; // start output
81 enum uint TIOCPKT_NOSTOP = 0x10; // no more ^S, ^Q
82 enum uint TIOCPKT_DOSTOP = 0x20; // now do ^S ^Q
83 enum uint TIOCPKT_IOCTL = 0x40; // state change of pty driver
84 enum uint TIOCSTOP = _IO('t', 111); // stop output, like ^S
85 enum uint TIOCSTART = _IO('t', 110); // start output, like ^Q
86 enum uint TIOCMSET = _IOW!(int)('t', 109); // set all modem bits
87 enum uint TIOCMBIS = _IOW!(int)('t', 108); // bis modem bits
88 enum uint TIOCMBIC = _IOW!(int)('t', 107); // bic modem bits
89 enum uint TIOCMGET = _IOR!(int)('t', 106); // get all modem bits
90 enum uint TIOCREMOTE = _IOW!(int)('t', 105); // remote input editing
91 enum uint TIOCGWINSZ = _IOR!(winsize)('t', 104); // get window size
92 enum uint TIOCSWINSZ = _IOW!(winsize)('t', 103); // set window size
93 enum uint TIOCUCNTL = _IOW!(int)('t', 102); // pty: set/clr usr cntl mode
94 enum uint TIOCSTAT = _IO('t', 101); // simulate ^T status message
95 enum uint UIOCCMD(n) = _IO('u', n); // usr cntl op "n"
96 enum uint TIOCSCONS = _IO('t', 99); // 4.2 compatibility
97 enum uint TIOCCONS = _IOW!(int)('t', 98); // become virtual console
98 enum uint TIOCSCTTY = _IO('t', 97); // become controlling tty
99 enum uint TIOCEXT = _IOW!(int)('t', 96); // pty: external processing
100 enum uint TIOCSIG = _IO('t', 95); // pty: generate signal
101 enum uint TIOCDRAIN = _IO('t', 94); // wait till output drained
102 enum uint TIOCMSDTRWAIT = _IOW!(int)('t', 91); // modem: set wait on close
103 enum uint TIOCMGDTRWAIT = _IOR!(int)('t', 90); // modem: get wait on close
104 enum uint TIOCTIMESTAMP = _IOR!(timeval)('t', 89); // enable/get timestamp
105 // of last input event
106 enum uint TIOCDCDTIMESTAMP = _IOR!(timeval)('t', 88); // enable/get timestamp
107 // of last DCd rise
108 enum uint TIOCSDRAINWAIT = _IOW!(int)('t', 87); // set ttywait timeout
109 enum uint TIOCGDRAINWAIT = _IOR!(int)('t', 86); // get ttywait timeout
110 enum uint TIOCDSIMICROCODE = _IO('t', 85); // download microcode to
111 // DSI Softmodem
112 enum uint TIOCPTYGRANT = _IO('t', 84); // grantpt(3)
113 enum uint TIOCPTYGNAME = _IOC(IOC_OUT, 't', 83, 128); // ptsname(3)
114 enum uint TIOCPTYUNLK = _IO('t', 82); // unlockpt(3)
115
116 enum uint TTYDISC = 0; // termios tty line discipline
117 enum uint TABLDISC = 3; // tablet discipline
118 enum uint SLIPDISC = 4; // serial IP discipline
119 enum uint PPPDISC = 5; // PPP discipline
120 }
version(FreeBSD)121 else version (FreeBSD)
122 {
123 struct winsize {
124 ushort ws_row; // rows, in characters
125 ushort ws_col; // columns, in characters
126 ushort ws_xpixel; // horizontal size, pixels
127 ushort ws_ypixel; // vertical size, pixels
128 }
129
130 // Serial/TTY ioctl's
131 // 0-2 compat
132 // 3-7 unused
133 // 8-10 compat
134 // 11-12 unused
135 enum uint TIOCEXCL = _IO('t', 13); // set exclusive use of tty
136 enum uint TIOCNXCL = _IO('t', 14); // reset exclusive use of tty
137 enum uint TIOCGPTN = _IOR!(int)('t', 15); // get pts number
138 enum uint TIOCFLUSH = _IOW!(int)('t', 16); // flush buffers
139 // 17-18 compat
140 enum uint TIOCGETA = _IOR!(termios)('t', 19); // get termios struct
141 enum uint TIOCSETA = _IOW!(termios)('t', 20); // set termios struct
142 enum uint TIOCSETAW = _IOW!(termios)('t', 21); // drain output, set
143 enum uint TIOCSETAF = _IOW!(termios)('t', 22); // drn out, fls in, set
144 // 23-25 unused
145 enum uint TIOCGETD = _IOR!(int)('t', 26); // get line discipline
146 enum uint TIOCSETD = _IOW!(int)('t', 27); // set line discipline
147 enum uint TIOCPTMASTER = _IO('t', 28); // pts master validation
148 // 29-85 unused
149 enum uint TIOCGDRAINWAIT = _IOR!(int)('t', 86); // get ttywait timeout
150 enum uint TIOCSDRAINWAIT = _IOW!(int)('t', 87); // set ttywait timeout
151 // 88 unused
152 // 89-91 conflicts: tun and tap
153 enum uint TIOCTIMESTAMP = _IOR!(timeval)('t', 89); // enable/get timestamp of last input event
154 enum uint TIOCMGDTRWAIT = _IOR!(int)('t', 90); // modem: get wait on close
155 enum uint TIOCMSDTRWAIT = _IOW!(int)('t', 91); // modem: set wait on close
156 // 92-93 tun and tap
157 // 94-97 conflicts: tun and tap
158 enum uint TIOCDRAIN = _IO('t', 94); // wait till output drained
159 enum uint TIOCSIG = _IOWINT('t', 95); // pty: generate signal
160 enum uint TIOCEXT = _IOW!(int)('t', 96); // pty: external processing
161 enum uint TIOCSCTTY = _IO('t', 97); // become controlling tty
162 enum uint TIOCCONS = _IOW!(int)('t', 98); // become virtual console
163 enum uint TIOCGSID = _IOR!(int)('t', 99); // get session id
164 // 100 unused
165 enum uint TIOCSTAT = _IO('t', 101); // simulate ^T status message
166 enum uint TIOCUCNTL = _IOW!(int)('t', 102); // pty: set/clr usr cntl mode
167 enum uint UIOCCMD(n) = _IO('u', n); // usr cntl op "n"
168 enum uint TIOCSWINSZ = _IOW!(winsize)('t', 103); // set window size
169 enum uint TIOCGWINSZ = _IOR!(winsize)('t', 104); // get window size
170 // 105 unused
171 enum uint TIOCMGET = _IOR!(int)('t', 106); // get all modem bits
172 enum uint TIOCM_LE = 0x01; // line enable
173 enum uint TIOCM_DTR = 0x02; // data terminal ready
174 enum uint TIOCM_RTS = 0x04; // request to send
175 enum uint TIOCM_ST = 0x08; // secondary transmit
176 enum uint TIOCM_SR = 0x10; // secondary receive
177 enum uint TIOCM_CTS = 0x20; // clear to send
178 enum uint TIOCM_DCD = 0x40; // data carrier detect
179 enum uint TIOCM_RI = 0x80; // ring indicate
180 enum uint TIOCM_DSR = 0x100; // data set ready
181 enum uint TIOCM_CD = TIOCM_DCD;
182 enum uint TIOCM_CAR = TIOCM_DCD;
183 enum uint TIOCM_RNG = TIOCM_RI;
184 enum uint TIOCMBIC = _IOW!(int)('t', 107); // bic modem bits
185 enum uint TIOCMBIS = _IOW!(int)('t', 108); // bis modem bits
186 enum uint TIOCMSET = _IOW!(int)('t', 109); // set all modem bits
187 enum uint TIOCSTART = _IO('t', 110); // start output like ^Q
188 enum uint TIOCSTOP = _IO('t', 111); // stop output like ^S
189 enum uint TIOCPKT = _IOW!(int)('t', 112); // pty: set/clr packet mode
190 enum uint TIOCPKT_DATA = 0x00; // data packet
191 enum uint TIOCPKT_FLUSHREAD = 0x01; // flush packet
192 enum uint TIOCPKT_FLUSHWRITE = 0x02; // flush packet
193 enum uint TIOCPKT_STOP = 0x04; // stop output
194 enum uint TIOCPKT_START = 0x08; // start output
195 enum uint TIOCPKT_NOSTOP = 0x10; // no more ^S, ^Q
196 enum uint TIOCPKT_DOSTOP = 0x20; // now do ^S, ^Q
197 enum uint TIOCPKT_IOCTL = 0x40; // state change of pty driver
198 enum uint TIOCNOTTY = _IO('t', 113); // void tty association
199 enum uint TIOCSTI = _IOW!(char)('t', 114); // simulate terminal input
200 enum uint TIOCOUTQ = _IOR!(int)('t', 115); // output queue size
201 // 116-117 compat
202 enum uint TIOCSPGRP = _IOW!(int)('t', 118); // set pgrp of tty
203 enum uint TIOCGPGRP = _IOR!(int)('t', 119); // get pgrp of tty
204
205 enum uint TIOCCDTR = _IO('t', 120); // clear data terminal ready
206 enum uint TIOCSDTR = _IO('t', 121); // set data terminal ready
207 enum uint TIOCCBRK = _IO('t', 122); // clear break bit
208 enum uint TIOCSBRK = _IO('t', 123); // set break bit
209 // 124-127 compat
210
211 enum uint TTYDISC = 0; // termios tty line discipline
212 enum uint SLIPDISC = 4; // serial IP discipline
213 enum uint PPPDISC = 5; // PPP discipline
214 enum uint NETGRAPHDISC = 6; // Netgraph tty node discipline
215 enum uint H4DISC = 7; // Netgraph Blutooth H4 discipline
216 }
version(OpenBSD)217 else version (OpenBSD)
218 {
219 struct winsize {
220 ushort ws_row; // rows, in characters
221 ushort ws_col; // columns, in characters
222 ushort ws_xpixel; // horizontal size, pixels
223 ushort ws_ypixel; // vertical size, pixels
224 }
225
226 struct tstamps {
227 int ts_set; // TIOCM_CAR and/or TIOCM_CTS
228 int ts_clr;
229 }
230
231 // Serial/TTY ioctl's
232 // 0-2 compat
233 // 3-7 unused
234 // 8-10 compat
235 // 11-12 unused
236 enum uint TIOCEXCL = _IO('t', 13); // set exclusive use of tty
237 enum uint TIOCNXCL = _IO('t', 14); // reset exclusive use of tty
238 enum uint TIOCFLUSH = _IOW!(int)('t', 16); // flush buffers
239 // 17-18 compat
240 enum uint TIOCGETA = _IOR!(termios)('t', 19); // get termios struct
241 enum uint TIOCSETA = _IOW!(termios)('t', 20); // set termios struct
242 enum uint TIOCSETAW = _IOW!(termios)('t', 21); // drain output, set
243 enum uint TIOCSETAF = _IOW!(termios)('t', 22); // drn out, fls in, set
244 // 23-25 unused
245 enum uint TIOCGETD = _IOR!(int)('t', 26); // get line discipline
246 enum uint TIOCSETD = _IOW!(int)('t', 27); // set line discipline
247 enum uint TIOCSETVERAUTH = _IOW!(int)('t', 28); // set verified auth
248 enum uint TIOCCLRVERAUTH = _IO('t', 29); // clear verified auth
249 enum uint TIOCCHKVERAUTH = _IO('t', 30); // check verified auth
250 // 31-89 unused
251 enum uint TIOCSTSTAMP = _IOW!(tstamps)('t', 90); // timestamp reasons
252 enum uint TIOCGTSTAMP = _IOR!(timeval)('t', 91); // get timestamp
253 // 92-93 device flags
254 enum uint TIOCSFLAGS = _IOW!(int)('t', 92); // set device flags
255 enum uint TIOCGFLAGS = _IOR!(int)('t', 93); // get device flags
256 // 94-97 conflicts: tun and tap
257 enum uint TIOCDRAIN = _IO('t', 94); // wait till output drained
258 enum uint TIOCSIG = _IOW!(int)('t', 95); // pty: generate signal
259 enum uint TIOCEXT = _IOW!(int)('t', 96); // pty: external processing
260 enum uint TIOCSCTTY = _IO('t', 97); // become controlling tty
261 enum uint TIOCCONS = _IOW!(int)('t', 98); // become virtual console
262 enum uint TIOCGSID = _IOR!(int)('t', 99); // get session id
263 // 100 unused
264 enum uint TIOCSTAT = _IO('t', 101); // simulate ^T status message
265 enum uint TIOCUCNTL = _IOW!(int)('t', 102); // pty: set/clr usr cntl mode
266 enum uint UIOCCMD(n) = _IO('u', n); // usr cntl op "n"
267 enum uint TIOCSWINSZ = _IOW!(winsize)('t', 103); // set window size
268 enum uint TIOCGWINSZ = _IOR!(winsize)('t', 104); // get window size
269 enum uint TIOCREMOTE = _IOW!(int)('t', 105); // remote input editing
270 enum uint TIOCMGET = _IOR!(int)('t', 106); // get all modem bits
271 enum uint TIOCM_LE = 0x01; // line enable
272 enum uint TIOCM_DTR = 0x02; // data terminal ready
273 enum uint TIOCM_RTS = 0x04; // request to send
274 enum uint TIOCM_ST = 0x08; // secondary transmit
275 enum uint TIOCM_SR = 0x10; // secondary receive
276 enum uint TIOCM_CTS = 0x20; // clear to send
277 enum uint TIOCM_CAR = 0x40; // carrier detect
278 enum uint TIOCM_RNG = 0x80; // ring
279 enum uint TIOCM_DSR = 0x100; // data set ready
280 enum uint TIOCM_CD = TIOCM_CAR;
281 enum uint TIOCM_RI = TIOCM_RNG;
282 enum uint TIOCMBIC = _IOW!(int)('t', 107); // bic modem bits
283 enum uint TIOCMBIS = _IOW!(int)('t', 108); // bis modem bits
284 enum uint TIOCMSET = _IOW!(int)('t', 109); // set all modem bits
285 enum uint TIOCSTART = _IO('t', 110); // start output like ^Q
286 enum uint TIOCSTOP = _IO('t', 111); // stop output like ^S
287 enum uint TIOCPKT = _IOW!(int)('t', 112); // pty: set/clr packet mode
288 enum uint TIOCPKT_DATA = 0x00; // data packet
289 enum uint TIOCPKT_FLUSHREAD = 0x01; // flush packet
290 enum uint TIOCPKT_FLUSHWRITE = 0x02; // flush packet
291 enum uint TIOCPKT_STOP = 0x04; // stop output
292 enum uint TIOCPKT_START = 0x08; // start output
293 enum uint TIOCPKT_NOSTOP = 0x10; // no more ^S, ^Q
294 enum uint TIOCPKT_DOSTOP = 0x20; // now do ^S, ^Q
295 enum uint TIOCPKT_IOCTL = 0x40; // state change of pty driver
296 enum uint TIOCNOTTY = _IO('t', 113); // void tty association
297 // 114 unused
298 enum uint TIOCOUTQ = _IOR!(int)('t', 115); // output queue size
299 // 116-117 compat
300 enum uint TIOCSPGRP = _IOW!(int)('t', 118); // set pgrp of tty
301 enum uint TIOCGPGRP = _IOR!(int)('t', 119); // get pgrp of tty
302
303 enum uint TIOCCDTR = _IO('t', 120); // clear data terminal ready
304 enum uint TIOCSDTR = _IO('t', 121); // set data terminal ready
305 enum uint TIOCCBRK = _IO('t', 122); // clear break bit
306 enum uint TIOCSBRK = _IO('t', 123); // set break bit
307 // 124-127 compat
308
309 enum uint TTYDISC = 0; // termios tty line discipline
310 enum uint TABLDISC = 3; // tablet description
311 enum uint SLIPDISC = 4; // serial IP discipline
312 enum uint PPPDISC = 5; // PPP discipline
313 enum uint STRIPDISC = 6; // metricom wireless IP discipline
314 enum uint NMEADISC = 7; // NMEA0183 discipline
315 enum uint MSTSDISC = 8; // Meinberg time string discipline
316 enum uint ENDRUNDISC = 9; // Endrun time format discipline
317 }
318