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 }