⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 termios.h

📁 嵌入式系统设计与实例开发实验教材二源码 多线程应用程序设计 串行端口程序设计 AD接口实验 CAN总线通信实验 GPS通信实验 Linux内核移植与编译实验 IC卡读写实验 SD驱动使
💻 H
字号:
#ifndef _ALPHA_TERMIOS_H#define _ALPHA_TERMIOS_H#include <asm/ioctls.h>#include <asm/termbits.h>struct sgttyb {	char	sg_ispeed;	char	sg_ospeed;	char	sg_erase;	char	sg_kill;	short	sg_flags;};struct tchars {	char	t_intrc;	char	t_quitc;	char	t_startc;	char	t_stopc;	char	t_eofc;	char	t_brkc;};struct ltchars {	char	t_suspc;	char	t_dsuspc;	char	t_rprntc;	char	t_flushc;	char	t_werasc;	char	t_lnextc;};struct winsize {	unsigned short ws_row;	unsigned short ws_col;	unsigned short ws_xpixel;	unsigned short ws_ypixel;};#define NCC 8struct termio {	unsigned short c_iflag;		/* input mode flags */	unsigned short c_oflag;		/* output mode flags */	unsigned short c_cflag;		/* control mode flags */	unsigned short c_lflag;		/* local mode flags */	unsigned char c_line;		/* line discipline */	unsigned char c_cc[NCC];	/* control characters */};/* * c_cc characters in the termio structure.  Oh, how I love being * backwardly compatible.  Notice that character 4 and 5 are * interpreted differently depending on whether ICANON is set in * c_lflag.  If it's set, they are used as _VEOF and _VEOL, otherwise * as _VMIN and V_TIME.  This is for compatibility with OSF/1 (which * is compatible with sysV)... */#define _VINTR	0#define _VQUIT	1#define _VERASE	2#define _VKILL	3#define _VEOF	4#define _VMIN	4#define _VEOL	5#define _VTIME	5#define _VEOL2	6#define _VSWTC	7/* line disciplines */#define N_TTY		0#define N_SLIP		1#define N_MOUSE		2#define N_PPP		3#define N_STRIP		4#define N_AX25		5#define N_X25		6	/* X.25 async */#define N_6PACK		7#define N_MASC		8	/* Reserved for Mobitex module <kaz@cafe.net> */#define N_R3964		9	/* Reserved for Simatic R3964 module */#define N_PROFIBUS_FDL	10	/* Reserved for Profibus <Dave@mvhi.com> */#define N_IRDA		11	/* Linux IrDa - http://irda.sourceforge.net/ */#define N_SMSBLOCK	12	/* SMS block mode - for talking to GSM data cards about SMS messages */#define N_HDLC		13	/* synchronous HDLC */#define N_SYNC_PPP	14#define N_HCI		15  /* Bluetooth HCI UART */#ifdef __KERNEL__/*	eof=^D		eol=\0		eol2=\0		erase=del	werase=^W	kill=^U		reprint=^R	sxtc=\0	intr=^C		quit=^\		susp=^Z		<OSF/1 VDSUSP>	start=^Q	stop=^S		lnext=^V	discard=^U	vmin=\1		vtime=\0*/#define INIT_C_CC "\004\000\000\177\027\025\022\000\003\034\032\000\021\023\026\025\001\000"/* * Translate a "termio" structure into a "termios". Ugh. */#define user_termio_to_kernel_termios(a_termios, u_termio)			\({										\	struct termios *k_termios = (a_termios);				\	struct termio k_termio;							\	int canon, ret;								\										\	ret = copy_from_user(&k_termio, u_termio, sizeof(k_termio));		\	if (!ret) {								\		/* Overwrite only the low bits.  */				\		*(unsigned short *)&k_termios->c_iflag = k_termio.c_iflag;	\		*(unsigned short *)&k_termios->c_oflag = k_termio.c_oflag;	\		*(unsigned short *)&k_termios->c_cflag = k_termio.c_cflag;	\		*(unsigned short *)&k_termios->c_lflag = k_termio.c_lflag;	\		canon = k_termio.c_lflag & ICANON;				\										\		k_termios->c_cc[VINTR]  = k_termio.c_cc[_VINTR];		\		k_termios->c_cc[VQUIT]  = k_termio.c_cc[_VQUIT];		\		k_termios->c_cc[VERASE] = k_termio.c_cc[_VERASE];		\		k_termios->c_cc[VKILL]  = k_termio.c_cc[_VKILL];		\		k_termios->c_cc[VEOL2]  = k_termio.c_cc[_VEOL2];		\		k_termios->c_cc[VSWTC]  = k_termio.c_cc[_VSWTC];		\		k_termios->c_cc[canon ? VEOF : VMIN]  = k_termio.c_cc[_VEOF];	\		k_termios->c_cc[canon ? VEOL : VTIME] = k_termio.c_cc[_VEOL];	\	}									\	ret;									\})/* * Translate a "termios" structure into a "termio". Ugh. * * Note the "fun" _VMIN overloading. */#define kernel_termios_to_user_termio(u_termio, a_termios)		\({									\	struct termios *k_termios = (a_termios);			\	struct termio k_termio;						\	int canon;							\									\	k_termio.c_iflag = k_termios->c_iflag;				\	k_termio.c_oflag = k_termios->c_oflag;				\	k_termio.c_cflag = k_termios->c_cflag;				\	canon = (k_termio.c_lflag = k_termios->c_lflag) & ICANON;	\									\	k_termio.c_line = k_termios->c_line;				\	k_termio.c_cc[_VINTR]  = k_termios->c_cc[VINTR];		\	k_termio.c_cc[_VQUIT]  = k_termios->c_cc[VQUIT];		\	k_termio.c_cc[_VERASE] = k_termios->c_cc[VERASE];		\	k_termio.c_cc[_VKILL]  = k_termios->c_cc[VKILL];		\	k_termio.c_cc[_VEOF]   = k_termios->c_cc[canon ? VEOF : VMIN];	\	k_termio.c_cc[_VEOL]   = k_termios->c_cc[canon ? VEOL : VTIME];	\	k_termio.c_cc[_VEOL2]  = k_termios->c_cc[VEOL2];		\	k_termio.c_cc[_VSWTC]  = k_termios->c_cc[VSWTC];		\									\	copy_to_user(u_termio, &k_termio, sizeof(k_termio));		\})#define user_termios_to_kernel_termios(k, u) \	copy_from_user(k, u, sizeof(struct termios))#define kernel_termios_to_user_termios(u, k) \	copy_to_user(u, k, sizeof(struct termios))#endif	/* __KERNEL__ */#endif	/* _ALPHA_TERMIOS_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -