#ifndef _NT_TERMIOS_H_
#define _NT_TERMIOS_H_
#include "nt_abi.h"
/* tty friendly guids */
#define TTY_PTM_GUID {0x21b51c45,0x3388,0x4dd9,{0x82,0x9a,0x5b,0x67,0x4e,0x3e,0x31,0x55}}
#define TTY_PTS_GUID {0xa038ed3e,0x7bcc,0x4a53,{0xb2,0x94,0x01,0xdf,0x87,0xf6,0x94,0x70}}
#define TTY_DBG_GUID {0x5ad03536,0xde3c,0x451a,{0xa4,0x32,0xf6,0xfd,0x95,0x97,0x5c,0x52}}
/* cc_chars */
#define TTY_NCCS 32
#define TTY_VINTR 0x00
#define TTY_VQUIT 0x01
#define TTY_VERASE 0x02
#define TTY_VKILL 0x03
#define TTY_VEOF 0x04
#define TTY_VTIME 0x05
#define TTY_VMIN 0x06
#define TTY_VSWTC 0x07
#define TTY_VSTART 0x08
#define TTY_VSTOP 0x09
#define TTY_VSUSP 0x0a
#define TTY_VEOL 0x0b
#define TTY_VREPRINT 0x0c
#define TTY_VDISCARD 0x0d
#define TTY_VWERASE 0x0e
#define TTY_VLNEXT 0x0f
#define TTY_VEOL2 0x10
/* c_iflag bits */
#define TTY_IGNBRK 0000001
#define TTY_BRKINT 0000002
#define TTY_IGNPAR 0000004
#define TTY_PARMRK 0000010
#define TTY_INPCK 0000020
#define TTY_ISTRIP 0000040
#define TTY_INLCR 0000100
#define TTY_IGNCR 0000200
#define TTY_ICRNL 0000400
#define TTY_IUCLC 0001000
#define TTY_IXON 0002000
#define TTY_IXANY 0004000
#define TTY_IXOFF 0010000
#define TTY_IMAXBEL 0020000
#define TTY_IUTF8 0040000
/* c_oflag bits */
#define TTY_OPOST 0000001
#define TTY_OLCUC 0000002
#define TTY_ONLCR 0000004
#define TTY_OCRNL 0000010
#define TTY_ONOCR 0000020
#define TTY_ONLRET 0000040
#define TTY_OFILL 0000100
#define TTY_OFDEL 0000200
#define TTY_NLDLY 0000400
#define TTY_NL0 0000000
#define TTY_NL1 0000400
#define TTY_CRDLY 0003000
#define TTY_CR0 0000000
#define TTY_CR1 0001000
#define TTY_CR2 0002000
#define TTY_CR3 0003000
#define TTY_TABDLY 0014000
#define TTY_TAB0 0000000
#define TTY_TAB1 0004000
#define TTY_TAB2 0010000
#define TTY_TAB3 0014000
#define TTY_BSDLY 0020000
#define TTY_BS0 0000000
#define TTY_BS1 0020000
#define TTY_FFDLY 0100000
#define TTY_FF0 0000000
#define TTY_FF1 0100000
#define TTY_VTDLY 0040000
#define TTY_VT0 0000000
#define TTY_VT1 0040000
/* c_lflag bits */
#define TTY_ISIG 0000001
#define TTY_ICANON 0000002
#define TTY_ECHO 0000010
#define TTY_ECHOE 0000020
#define TTY_ECHOK 0000040
#define TTY_ECHONL 0000100
#define TTY_NOFLSH 0000200
#define TTY_TOSTOP 0000400
#define TTY_IEXTEN 0100000
#define TTY_ECHOCTL 0001000
#define TTY_ECHOPRT 0002000
#define TTY_ECHOKE 0004000
#define TTY_FLUSHO 0010000
#define TTY_PENDIN 0040000
/* c_cflag bits */
#define TTY_CBAUD 0010017
#define TTY_CSIZE 0000060
#define TTY_CS5 0000000
#define TTY_CS6 0000020
#define TTY_CS7 0000040
#define TTY_CS8 0000060
#define TTY_CSTOPB 0000100
#define TTY_CREAD 0000200
#define TTY_PARENB 0000400
#define TTY_PARODD 0001000
#define TTY_HUPCL 0002000
#define TTY_CLOCAL 0004000
/* control flow */
#define TTY_TCOOFF 0
#define TTY_TCOON 1
#define TTY_TCIOFF 2
#define TTY_TCION 3
/* flush */
#define TTY_TCIFLUSH 0
#define TTY_TCOFLUSH 1
#define TTY_TCIOFLUSH 2
/* tty ioctl */
#define TTY_TCSANOW 0
#define TTY_TCSADRAIN 1
#define TTY_TCSAFLUSH 2
/* tty ioctl codes */
#define TTY_TCGETS 0x5401
#define TTY_TCSETS 0x5402
#define TTY_TCSETSW 0x5403
#define TTY_TCSETSF 0x5404
#define TTY_TCGETA 0x5405
#define TTY_TCSETA 0x5406
#define TTY_TCSETAW 0x5407
#define TTY_TCSETAF 0x5408
#define TTY_TCSBRK 0x5409
#define TTY_TCXONC 0x540A
#define TTY_TCFLSH 0x540B
#define TTY_TIOCEXCL 0x540C
#define TTY_TIOCNXCL 0x540D
#define TTY_TIOCSCTTY 0x540E
#define TTY_TIOCGPGRP 0x540F
#define TTY_TIOCSPGRP 0x5410
#define TTY_TIOCOUTQ 0x5411
#define TTY_TIOCSTI 0x5412
#define TTY_TIOCGWINSZ 0x5413
#define TTY_TIOCSWINSZ 0x5414
#define TTY_TIOCMGET 0x5415
#define TTY_TIOCMBIS 0x5416
#define TTY_TIOCMBIC 0x5417
#define TTY_TIOCMSET 0x5418
#define TTY_TIOCGSOFTCAR 0x5419
#define TTY_TIOCSSOFTCAR 0x541A
#define TTY_FIONREAD 0x541B
#define TTY_TIOCINQ FIONREAD
#define TTY_TIOCLINUX 0x541C
#define TTY_TIOCCONS 0x541D
#define TTY_TIOCGSERIAL 0x541E
#define TTY_TIOCSSERIAL 0x541F
#define TTY_TIOCPKT 0x5420
#define TTY_FIONBIO 0x5421
#define TTY_TIOCNOTTY 0x5422
#define TTY_TIOCSETD 0x5423
#define TTY_TIOCGETD 0x5424
#define TTY_TCSBRKP 0x5425
#define TTY_TIOCTTYGSTRUCT 0x5426
#define TTY_TIOCSBRK 0x5427
#define TTY_TIOCCBRK 0x5428
#define TTY_TIOCGSID 0x5429
#define TTY_TIOCGPTN 0x5430
#define TTY_TIOCSPTLCK 0x5431
#define TTY_TCGETX 0x5432
#define TTY_TCSETX 0x5433
#define TTY_TCSETXF 0x5434
#define TTY_TCSETXW 0x5435
/* packet mode */
#define TTY_TIOCPKT_DATA 0x00
#define TTY_TIOCPKT_FLUSHREAD 0x01
#define TTY_TIOCPKT_FLUSHWRITE 0x02
#define TTY_TIOCPKT_STOP 0x04
#define TTY_TIOCPKT_START 0x08
#define TTY_TIOCPKT_NOSTOP 0x10
#define TTY_TIOCPKT_DOSTOP 0x20
#define TTY_TIOCPKT_IOCTL 0x40
/* transmitter empty */
#define TTY_TIOCSER_TEMT 0x01
/* baud rate... :-) */
#define TTY_B0 0000000
#define TTY_B50 0000001
#define TTY_B75 0000002
#define TTY_B110 0000003
#define TTY_B134 0000004
#define TTY_B150 0000005
#define TTY_B200 0000006
#define TTY_B300 0000007
#define TTY_B600 0000010
#define TTY_B1200 0000011
#define TTY_B1800 0000012
#define TTY_B2400 0000013
#define TTY_B4800 0000014
#define TTY_B9600 0000015
#define TTY_B19200 0000016
#define TTY_B38400 0000017
#define TTY_B57600 0010001
#define TTY_B115200 0010002
#define TTY_B230400 0010003
#define TTY_B460800 0010004
#define TTY_B500000 0010005
#define TTY_B576000 0010006
#define TTY_B921600 0010007
#define TTY_B1000000 0010010
#define TTY_B1152000 0010011
#define TTY_B1500000 0010012
#define TTY_B2000000 0010013
#define TTY_B2500000 0010014
#define TTY_B3000000 0010015
#define TTY_B3500000 0010016
#define TTY_B4000000 0010017
/* special characters */
#define TTY_CTRL_AT 0x00
#define TTY_CTRL_A 0x01
#define TTY_CTRL_B 0x02
#define TTY_CTRL_C 0x03
#define TTY_CTRL_D 0x04
#define TTY_CTRL_E 0x05
#define TTY_CTRL_F 0x06
#define TTY_CTRL_G 0x07
#define TTY_CTRL_H 0x08
#define TTY_CTRL_I 0x09
#define TTY_CTRL_J 0x0a
#define TTY_CTRL_K 0x0b
#define TTY_CTRL_L 0x0c
#define TTY_CTRL_M 0x0d
#define TTY_CTRL_N 0x0e
#define TTY_CTRL_O 0x0f
#define TTY_CTRL_P 0x10
#define TTY_CTRL_Q 0x11
#define TTY_CTRL_R 0x12
#define TTY_CTRL_S 0x13
#define TTY_CTRL_T 0x14
#define TTY_CTRL_U 0x15
#define TTY_CTRL_V 0x16
#define TTY_CTRL_W 0x17
#define TTY_CTRL_X 0x18
#define TTY_CTRL_Y 0x19
#define TTY_CTRL_Z 0x1a
#define TTY_CTRL_LBRACKET 0x1b
#define TTY_CTRL_BSLASH 0x1c
#define TTY_CTRL_RBRACKET 0x1d
#define TTY_CTRL_CTRL 0x1e
#define TTY_CTRL_USCORE 0x1f
#define TTY_CTRL_QMARK 0x7f
/* tty properties */
struct tty_termios {
uint32_t c_iflag;
uint32_t c_oflag;
uint32_t c_cflag;
uint32_t c_lflag;
unsigned char c_line;
unsigned char c_cc[TTY_NCCS];
uint32_t __c_ispeed;
uint32_t __c_ospeed;
};
/* tty window properties */
struct tty_winsize {
uint16_t ws_row;
uint16_t ws_col;
uint16_t ws_xpixel;
uint16_t ws_ypixel;
};
struct tty_winbuffer {
uint16_t wb_row;
uint16_t wb_col;
uint16_t wb_prev_row;
uint16_t wb_prev_col;
};
struct tty_winpos {
uint16_t wp_x;
uint16_t wp_y;
uint16_t wp_prev_x;
uint16_t wp_prev_y;
};
struct tty_winprops {
struct tty_winsize winsize;
struct tty_winbuffer winbuffer;
struct tty_winpos winpos;
};
#endif