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