亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? vsxxxaa.c

?? Serial mouse driver for Linux
?? C
?? 第 1 頁 / 共 2 頁
字號:
	/*	 * Get button state. It's bits <4..1> of byte 0.	 */	left	= (buf[0] & 0x02)? 1: 0;	middle	= (buf[0] & 0x04)? 1: 0;	right	= (buf[0] & 0x08)? 1: 0;	touch	= (buf[0] & 0x10)? 1: 0;	vsxxxaa_drop_bytes (mouse, 5);	DBG (KERN_INFO "%s on %s: x=%d, y=%d, buttons=%s%s%s%s\n",			mouse->name, mouse->phys, x, y,			left? "L": "l", middle? "M": "m",			right? "R": "r", touch? "T": "t");	/*	 * Report what we've found so far...	 */	input_report_key (dev, BTN_LEFT, left);	input_report_key (dev, BTN_MIDDLE, middle);	input_report_key (dev, BTN_RIGHT, right);	input_report_key (dev, BTN_TOUCH, touch);	input_report_abs (dev, ABS_X, x);	input_report_abs (dev, ABS_Y, y);	input_sync (dev);}static voidvsxxxaa_handle_POR_packet (struct vsxxxaa *mouse){	struct input_dev *dev = mouse->dev;	unsigned char *buf = mouse->buf;	int left, middle, right;	unsigned char error;	/*	 * Check for Power-On-Reset packets. These are sent out	 * after plugging the mouse in, or when explicitely	 * requested by sending 'T'.	 *	 * [0]:	1	0	1	0	R3	R2	R1	R0	 * [1]:	0	M2	M1	M0	D3	D2	D1	D0	 * [2]:	0	E6	E5	E4	E3	E2	E1	E0	 * [3]:	0	0	0	0	0	Left	Middle	Right	 *	 * M: manufacturer location code	 * R: revision code	 * E: Error code. If it's in the range of 0x00..0x1f, only some	 *    minor problem occured. Errors >= 0x20 are considered bad	 *    and the device may not work properly...	 * D: <0010> == mouse, <0100> == tablet	 */	mouse->version = buf[0] & 0x0f;	mouse->country = (buf[1] >> 4) & 0x07;	mouse->type = buf[1] & 0x0f;	error = buf[2] & 0x7f;	/*	 * Get button state. It's the low three bits	 * (for three buttons) of byte 0. Maybe even the bit <3>	 * has some meaning if a tablet is attached.	 */	left	= (buf[0] & 0x04)? 1: 0;	middle	= (buf[0] & 0x02)? 1: 0;	right	= (buf[0] & 0x01)? 1: 0;	vsxxxaa_drop_bytes (mouse, 4);	vsxxxaa_detection_done (mouse);	if (error <= 0x1f) {		/* No (serious) error. Report buttons */		input_report_key (dev, BTN_LEFT, left);		input_report_key (dev, BTN_MIDDLE, middle);		input_report_key (dev, BTN_RIGHT, right);		input_report_key (dev, BTN_TOUCH, 0);		input_sync (dev);		if (error != 0)			printk (KERN_INFO "Your %s on %s reports error=0x%02x\n",					mouse->name, mouse->phys, error);	}	/*	 * If the mouse was hot-plugged, we need to force differential mode	 * now... However, give it a second to recover from it's reset.	 */	printk (KERN_NOTICE "%s on %s: Forceing standard packet format, "			"incremental streaming mode and 72 samples/sec\n",			mouse->name, mouse->phys);	mouse->serio->write (mouse->serio, 'S');	/* Standard format */	mdelay (50);	mouse->serio->write (mouse->serio, 'R');	/* Incremental */	mdelay (50);	mouse->serio->write (mouse->serio, 'L');	/* 72 samples/sec */}static voidvsxxxaa_parse_buffer (struct vsxxxaa *mouse){	unsigned char *buf = mouse->buf;	int stray_bytes;	/*	 * Parse buffer to death...	 */	do {		/*		 * Out of sync? Throw away what we don't understand. Each		 * packet starts with a byte whose bit 7 is set. Unhandled		 * packets (ie. which we don't know about or simply b0rk3d		 * data...) will get shifted out of the buffer after some		 * activity on the mouse.		 */		while (mouse->count > 0 && !IS_HDR_BYTE(buf[0])) {			printk (KERN_ERR "%s on %s: Dropping a byte to regain "					"sync with mouse data stream...\n",					mouse->name, mouse->phys);			vsxxxaa_drop_bytes (mouse, 1);		}		/*		 * Check for packets we know about.		 */		if (vsxxxaa_smells_like_packet (mouse, VSXXXAA_PACKET_REL, 3)) {			/* Check for broken packet */			stray_bytes = vsxxxaa_check_packet (mouse, 3);			if (stray_bytes > 0) {				printk (KERN_ERR "Dropping %d bytes now...\n",						stray_bytes);				vsxxxaa_drop_bytes (mouse, stray_bytes);				continue;			}			vsxxxaa_handle_REL_packet (mouse);			continue; /* More to parse? */		}		if (vsxxxaa_smells_like_packet (mouse, VSXXXAA_PACKET_ABS, 5)) {			/* Check for broken packet */			stray_bytes = vsxxxaa_check_packet (mouse, 5);			if (stray_bytes > 0) {				printk (KERN_ERR "Dropping %d bytes now...\n",						stray_bytes);				vsxxxaa_drop_bytes (mouse, stray_bytes);				continue;			}			vsxxxaa_handle_ABS_packet (mouse);			continue; /* More to parse? */		}		if (vsxxxaa_smells_like_packet (mouse, VSXXXAA_PACKET_POR, 4)) {			/* Check for broken packet */			stray_bytes = vsxxxaa_check_packet (mouse, 4);			if (stray_bytes > 0) {				printk (KERN_ERR "Dropping %d bytes now...\n",						stray_bytes);				vsxxxaa_drop_bytes (mouse, stray_bytes);				continue;			}			vsxxxaa_handle_POR_packet (mouse);			continue; /* More to parse? */		}		break; /* No REL, ABS or POR packet found */	} while (1);}static irqreturn_tvsxxxaa_interrupt (struct serio *serio, unsigned char data, unsigned int flags){	struct vsxxxaa *mouse = serio_get_drvdata (serio);	vsxxxaa_queue_byte (mouse, data);	vsxxxaa_parse_buffer (mouse);	return IRQ_HANDLED;}static voidvsxxxaa_disconnect (struct serio *serio){	struct vsxxxaa *mouse = serio_get_drvdata (serio);	serio_close (serio);	serio_set_drvdata (serio, NULL);	input_unregister_device (mouse->dev);	kfree (mouse);}static intvsxxxaa_connect (struct serio *serio, struct serio_driver *drv){	struct vsxxxaa *mouse;	struct input_dev *input_dev;	int err = -ENOMEM;	mouse = kzalloc (sizeof (struct vsxxxaa), GFP_KERNEL);	input_dev = input_allocate_device ();	if (!mouse || !input_dev)		goto fail;	mouse->dev = input_dev;	mouse->serio = serio;	strlcat (mouse->name, "DEC VSXXX-AA/-GA mouse or VSXXX-AB digitizer",		 sizeof (mouse->name));	snprintf (mouse->phys, sizeof (mouse->phys), "%s/input0", serio->phys);	input_dev->name = mouse->name;	input_dev->phys = mouse->phys;	input_dev->id.bustype = BUS_RS232;	input_dev->cdev.dev = &serio->dev;	input_dev->private = mouse;	set_bit (EV_KEY, input_dev->evbit);		/* We have buttons */	set_bit (EV_REL, input_dev->evbit);	set_bit (EV_ABS, input_dev->evbit);	set_bit (BTN_LEFT, input_dev->keybit);		/* We have 3 buttons */	set_bit (BTN_MIDDLE, input_dev->keybit);	set_bit (BTN_RIGHT, input_dev->keybit);	set_bit (BTN_TOUCH, input_dev->keybit);		/* ...and Tablet */	set_bit (REL_X, input_dev->relbit);	set_bit (REL_Y, input_dev->relbit);	input_set_abs_params (input_dev, ABS_X, 0, 1023, 0, 0);	input_set_abs_params (input_dev, ABS_Y, 0, 1023, 0, 0);	serio_set_drvdata (serio, mouse);	err = serio_open (serio, drv);	if (err)		goto fail;	/*	 * Request selftest. Standard packet format and differential	 * mode will be requested after the device ID'ed successfully.	 */	serio->write (serio, 'T'); /* Test */	input_register_device (input_dev);	return 0; fail:	serio_set_drvdata (serio, NULL);	input_free_device (input_dev);	kfree (mouse);	return err;}static struct serio_device_id vsxxaa_serio_ids[] = {	{		.type	= SERIO_RS232,		.proto	= SERIO_VSXXXAA,		.id	= SERIO_ANY,		.extra	= SERIO_ANY,	},	{ 0 }};MODULE_DEVICE_TABLE(serio, vsxxaa_serio_ids);static struct serio_driver vsxxxaa_drv = {	.driver		= {		.name	= "vsxxxaa",	},	.description	= DRIVER_DESC,	.id_table	= vsxxaa_serio_ids,	.connect	= vsxxxaa_connect,	.interrupt	= vsxxxaa_interrupt,	.disconnect	= vsxxxaa_disconnect,};static int __initvsxxxaa_init (void){	serio_register_driver(&vsxxxaa_drv);	return 0;}static void __exitvsxxxaa_exit (void){	serio_unregister_driver(&vsxxxaa_drv);}module_init (vsxxxaa_init);module_exit (vsxxxaa_exit);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜桃视频免费观看一区| 高清不卡一二三区| 久久av资源站| 国内精品国产成人国产三级粉色 | 精品乱人伦小说| 国产欧美日韩精品一区| 一区二区激情小说| 久久超级碰视频| 成人蜜臀av电影| 在线播放国产精品二区一二区四区| 日韩精品一区二区三区在线播放| 国产清纯美女被跳蛋高潮一区二区久久w| 国产精品久久一级| 日韩电影在线看| 国产精品一线二线三线| 九九在线精品视频| 欧美日韩激情一区二区三区| 4hu四虎永久在线影院成人| 国产亚洲精品7777| 日韩av电影免费观看高清完整版 | 欧美在线观看一二区| 欧美不卡一区二区三区四区| 国产精品传媒视频| 精品一区二区三区的国产在线播放 | 懂色av中文一区二区三区| 欧美午夜免费电影| 日本一区二区三区四区在线视频| 视频一区二区三区在线| 91九色02白丝porn| 成人看片黄a免费看在线| 6080午夜不卡| 亚洲一区二区成人在线观看| 国产99一区视频免费| 欧美精品一区二区三区在线| 亚洲高清视频的网址| 色综合天天做天天爱| 国产精品网站在线播放| 国产一区二区三区四区五区美女| 欧美一级在线免费| 日本亚洲天堂网| 色爱区综合激月婷婷| 日韩欧美国产麻豆| 亚洲一本大道在线| 一本色道久久综合狠狠躁的推荐| 国产婷婷色一区二区三区| 蜜桃av一区二区| 欧美日韩你懂的| 亚洲精品成人精品456| 99精品欧美一区| 国产精品国产a| 成人av电影免费在线播放| 国产午夜精品久久久久久久| 久久se这里有精品| 日韩欧美国产一区在线观看| 美腿丝袜一区二区三区| 欧美一区二区三区视频| 亚洲一区二区美女| 91 com成人网| 日韩成人免费看| 欧美精品日韩一区| 日韩av电影免费观看高清完整版在线观看| 欧美日韩国产免费一区二区| 亚洲va欧美va人人爽| 欧美精品 日韩| 久久综合综合久久综合| 2022国产精品视频| 国产成人精品一区二区三区四区 | 91福利资源站| 亚洲综合色丁香婷婷六月图片| 91亚洲男人天堂| 亚洲高清三级视频| 日韩免费看网站| 高潮精品一区videoshd| 亚洲视频网在线直播| 色999日韩国产欧美一区二区| 亚洲自拍欧美精品| 日韩欧美一级二级三级| 国产综合色精品一区二区三区| 欧美xxx久久| 国产不卡一区视频| 玉足女爽爽91| 精品国产乱码久久久久久免费| 国产一区在线看| 亚洲天堂中文字幕| 91精品欧美久久久久久动漫| 免费久久精品视频| 国产精品久久久久久久午夜片| 欧洲精品在线观看| 国产老肥熟一区二区三区| 亚洲人精品午夜| 欧美一级免费大片| 99久久精品99国产精品 | 极品少妇xxxx精品少妇| 中文字幕日韩精品一区| 日韩免费高清av| 欧美色区777第一页| 91在线视频官网| 风间由美一区二区三区在线观看| 日韩国产成人精品| 亚洲综合激情网| 一区精品在线播放| 国产欧美日韩精品一区| 精品美女被调教视频大全网站| 欧美疯狂性受xxxxx喷水图片| 91高清视频在线| 在线观看精品一区| 99国产精品国产精品久久| 国产一区美女在线| 精品中文字幕一区二区| 日本午夜精品视频在线观看| 日日夜夜免费精品视频| 亚洲成人av一区二区三区| 午夜激情久久久| 午夜视频一区二区三区| 丝袜美腿亚洲综合| 日韩va欧美va亚洲va久久| 午夜天堂影视香蕉久久| 日韩成人av影视| 久久国产精品色| 国产剧情一区在线| av毛片久久久久**hd| 色综合一个色综合| 欧美中文字幕一区二区三区亚洲| 欧美性感一区二区三区| 欧美精品日日鲁夜夜添| 欧美大片免费久久精品三p| 精品剧情v国产在线观看在线| 日韩欧美www| 久久久91精品国产一区二区精品| 欧美精品一区二| 久久久99精品久久| 最新国产の精品合集bt伙计| 亚洲国产成人私人影院tom| 亚洲三级在线播放| 亚洲精品乱码久久久久久日本蜜臀| 中文字幕一区二区三区四区不卡| 久久亚洲一区二区三区明星换脸| 欧美一个色资源| 91精品国产日韩91久久久久久| 欧美性猛交一区二区三区精品| 色婷婷av一区二区三区大白胸| 在线视频欧美区| 欧美日韩精品高清| 欧美mv和日韩mv国产网站| 久久综合久久综合九色| 欧美一级免费观看| 日韩一区二区三区精品视频| xfplay精品久久| 国产精品网站在线观看| 国产精品久久久久久久午夜片 | 7777女厕盗摄久久久| 宅男噜噜噜66一区二区66| 日韩欧美另类在线| 国产女主播视频一区二区| 亚洲国产高清在线观看视频| 亚洲精品欧美在线| 亚洲成人av电影在线| 激情综合色综合久久综合| 国产盗摄精品一区二区三区在线 | 91同城在线观看| 欧美精品电影在线播放| 欧美r级电影在线观看| 国产精品久久久久影院| 亚洲自拍偷拍图区| 成人a免费在线看| 欧美日韩国产乱码电影| 久久亚洲精品小早川怜子| 欧美高清一级片在线观看| 亚洲国产精品一区二区www在线| 爽爽淫人综合网网站| 国内欧美视频一区二区| 欧美视频中文字幕| 欧美国产精品一区二区三区| 亚洲一区二区五区| eeuss鲁片一区二区三区| 制服.丝袜.亚洲.另类.中文| 国产精品少妇自拍| 午夜精品福利视频网站| 日本丶国产丶欧美色综合| 日韩精品一区二区三区老鸭窝| 亚洲欧洲日本在线| 精品综合久久久久久8888| 欧美喷水一区二区| 国产精品久久久久国产精品日日 | 日本视频在线一区| 不卡一卡二卡三乱码免费网站| 678五月天丁香亚洲综合网| 中文字幕免费不卡| 国产成人免费视频一区| 日韩欧美国产一区二区在线播放| 亚洲精品亚洲人成人网| 国产丶欧美丶日本不卡视频| 久久无码av三级| 日韩精品亚洲专区| 欧美视频一区二区三区| 一二三四社区欧美黄| 91影院在线观看| 国产精品家庭影院| 国产精品一区二区久激情瑜伽| 久久毛片高清国产|