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

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

?? mtouch.c

?? QQ2440板子上
?? C
字號:
/* * MicroTouch (3M) serial touchscreen driver * * Copyright (c) 2004 Vojtech Pavlik *//* * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 as published by * the Free Software Foundation. *//* * 2005/02/19 Dan Streetman <ddstreet@ieee.org> *   Copied elo.c and edited for MicroTouch protocol */#include <linux/errno.h>#include <linux/kernel.h>#include <linux/module.h>#include <linux/slab.h>#include <linux/input.h>#include <linux/serio.h>#include <linux/init.h>#define DRIVER_DESC	"MicroTouch serial touchscreen driver"MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>");MODULE_DESCRIPTION(DRIVER_DESC);MODULE_LICENSE("GPL");/* * Definitions & global arrays. */#define MTOUCH_FORMAT_TABLET_STATUS_BIT 0x80#define MTOUCH_FORMAT_TABLET_TOUCH_BIT 0x40#define MTOUCH_FORMAT_TABLET_LENGTH 5#define MTOUCH_RESPONSE_BEGIN_BYTE 0x01#define MTOUCH_RESPONSE_END_BYTE 0x0d/* todo: check specs for max length of all responses */#define MTOUCH_MAX_LENGTH 16#define MTOUCH_MIN_XC 0#define MTOUCH_MAX_XC 0x3fff#define MTOUCH_MIN_YC 0#define MTOUCH_MAX_YC 0x3fff#define MTOUCH_GET_XC(data) (((data[2])<<7) | data[1])#define MTOUCH_GET_YC(data) (((data[4])<<7) | data[3])#define MTOUCH_GET_TOUCHED(data) (MTOUCH_FORMAT_TABLET_TOUCH_BIT & data[0])static char *mtouch_name = "MicroTouch Serial TouchScreen";/* * Per-touchscreen data. */struct mtouch {	struct input_dev dev;	struct serio *serio;	int idx;	unsigned char data[MTOUCH_MAX_LENGTH];	char phys[32];};static void mtouch_process_format_tablet(struct mtouch *mtouch, struct pt_regs *regs){	struct input_dev *dev = &mtouch->dev;	if (MTOUCH_FORMAT_TABLET_LENGTH == ++mtouch->idx) {		input_regs(dev, regs);		input_report_abs(dev, ABS_X, MTOUCH_GET_XC(mtouch->data));		input_report_abs(dev, ABS_Y, MTOUCH_MAX_YC - MTOUCH_GET_YC(mtouch->data));		input_report_key(dev, BTN_TOUCH, MTOUCH_GET_TOUCHED(mtouch->data));		input_sync(dev);		mtouch->idx = 0;	}}static void mtouch_process_response(struct mtouch *mtouch, struct pt_regs *regs){	if (MTOUCH_RESPONSE_END_BYTE == mtouch->data[mtouch->idx++]) {		/* FIXME - process response */		mtouch->idx = 0;	} else if (MTOUCH_MAX_LENGTH == mtouch->idx) {		printk(KERN_ERR "mtouch.c: too many response bytes\n");		mtouch->idx = 0;	}}static irqreturn_t mtouch_interrupt(struct serio *serio,		unsigned char data, unsigned int flags, struct pt_regs *regs){	struct mtouch* mtouch = serio_get_drvdata(serio);	mtouch->data[mtouch->idx] = data;	if (MTOUCH_FORMAT_TABLET_STATUS_BIT & mtouch->data[0])		mtouch_process_format_tablet(mtouch, regs);	else if (MTOUCH_RESPONSE_BEGIN_BYTE == mtouch->data[0])		mtouch_process_response(mtouch, regs);	else		printk(KERN_DEBUG "mtouch.c: unknown/unsynchronized data from device, byte %x\n",mtouch->data[0]);	return IRQ_HANDLED;}/* * mtouch_disconnect() is the opposite of mtouch_connect() */static void mtouch_disconnect(struct serio *serio){	struct mtouch* mtouch = serio_get_drvdata(serio);	input_unregister_device(&mtouch->dev);	serio_close(serio);	serio_set_drvdata(serio, NULL);	kfree(mtouch);}/* * mtouch_connect() is the routine that is called when someone adds a * new serio device that supports MicroTouch (Format Tablet) protocol and registers it as * an input device. */static int mtouch_connect(struct serio *serio, struct serio_driver *drv){	struct mtouch *mtouch;	int err;	if (!(mtouch = kmalloc(sizeof(*mtouch), GFP_KERNEL)))		return -ENOMEM;	memset(mtouch, 0, sizeof(*mtouch));	init_input_dev(&mtouch->dev);	mtouch->dev.evbit[0] = BIT(EV_KEY) | BIT(EV_ABS);	mtouch->dev.keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH);	input_set_abs_params(&mtouch->dev, ABS_X, MTOUCH_MIN_XC, MTOUCH_MAX_XC, 0, 0);	input_set_abs_params(&mtouch->dev, ABS_Y, MTOUCH_MIN_YC, MTOUCH_MAX_YC, 0, 0);	mtouch->serio = serio;	sprintf(mtouch->phys, "%s/input0", serio->phys);	mtouch->dev.private = mtouch;	mtouch->dev.name = mtouch_name;	mtouch->dev.phys = mtouch->phys;	mtouch->dev.id.bustype = BUS_RS232;	mtouch->dev.id.vendor = SERIO_MICROTOUCH;	mtouch->dev.id.product = 0;	mtouch->dev.id.version = 0x0100;	serio_set_drvdata(serio, mtouch);	err = serio_open(serio, drv);	if (err) {		serio_set_drvdata(serio, NULL);		kfree(mtouch);		return err;	}	input_register_device(&mtouch->dev);	printk(KERN_INFO "input: %s on %s\n", mtouch->dev.name, serio->phys);	return 0;}/* * The serio driver structure. */static struct serio_device_id mtouch_serio_ids[] = {	{		.type	= SERIO_RS232,		.proto	= SERIO_MICROTOUCH,		.id	= SERIO_ANY,		.extra	= SERIO_ANY,	},	{ 0 }};MODULE_DEVICE_TABLE(serio, mtouch_serio_ids);static struct serio_driver mtouch_drv = {	.driver		= {		.name	= "mtouch",	},	.description	= DRIVER_DESC,	.id_table	= mtouch_serio_ids,	.interrupt	= mtouch_interrupt,	.connect	= mtouch_connect,	.disconnect	= mtouch_disconnect,};/* * The functions for inserting/removing us as a module. */static int __init mtouch_init(void){	serio_register_driver(&mtouch_drv);	return 0;}static void __exit mtouch_exit(void){	serio_unregister_driver(&mtouch_drv);}module_init(mtouch_init);module_exit(mtouch_exit);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产麻豆视频精品| 国产人伦精品一区二区| 久久久久久久综合| 日韩电影在线观看一区| 欧美羞羞免费网站| 亚洲国产一二三| 欧美精品乱码久久久久久按摩| 中文字幕一区不卡| 欧美伊人久久大香线蕉综合69| 中文子幕无线码一区tr| 国产精品456| 久久免费美女视频| av毛片久久久久**hd| ...av二区三区久久精品| 高潮精品一区videoshd| 亚洲免费在线看| 欧美视频一区二区三区| 人人超碰91尤物精品国产| 久久网站热最新地址| 粉嫩一区二区三区在线看| 又紧又大又爽精品一区二区| 在线观看91av| 成年人午夜久久久| 偷拍日韩校园综合在线| 久久久久久久久久美女| 欧美天堂一区二区三区| 亚洲大片精品永久免费| 国产日产精品1区| 国产欧美日韩另类一区| 欧美草草影院在线视频| 国产超碰在线一区| 日本中文字幕一区二区有限公司| 精品国产精品网麻豆系列| 色婷婷激情综合| 激情综合色播激情啊| 亚洲国产日韩综合久久精品| 国产精品女上位| 精品福利av导航| 欧美日韩大陆一区二区| 色狠狠一区二区| 成人av综合在线| 成人黄页在线观看| 成人激情动漫在线观看| 国产剧情一区二区三区| 国产一区在线不卡| 免费成人在线观看| 久久精品久久综合| 日韩黄色一级片| 日本不卡免费在线视频| 亚洲老妇xxxxxx| 亚洲精品一二三四区| 一区二区三区中文字幕精品精品| 1000精品久久久久久久久| 国产精品乱码一区二区三区软件| 久久综合九色综合97婷婷女人| 精品噜噜噜噜久久久久久久久试看| 欧美精品123区| 精品欧美一区二区久久| 久久久精品免费网站| 国产精品你懂的在线欣赏| 亚洲黄色尤物视频| 全国精品久久少妇| 国产精品99久| 色综合久久综合网97色综合| 91猫先生在线| 精品久久久久久久久久久久包黑料 | 欧美精品aⅴ在线视频| 日韩一二在线观看| 亚洲欧洲国产日韩| 日韩精品乱码av一区二区| 国产综合色精品一区二区三区| av不卡一区二区三区| 91精品国产综合久久精品麻豆 | 欧美亚洲综合色| 欧美变态tickling挠脚心| 中文一区一区三区高中清不卡| 中文字幕中文在线不卡住| 日韩电影在线免费观看| 成人午夜在线免费| 日韩久久久精品| 香蕉乱码成人久久天堂爱免费| 国产乱码一区二区三区| 岛国一区二区三区| 精品福利一二区| 日韩高清不卡一区二区三区| 91在线视频免费91| 久久麻豆一区二区| 蜜臀va亚洲va欧美va天堂| 在线视频中文字幕一区二区| 国产日韩精品久久久| 久久国产日韩欧美精品| 欧美日韩极品在线观看一区| 中文字幕一区二区三区蜜月| 国内成人自拍视频| 日韩欧美成人一区| 久久av资源站| 久久久精品免费免费| 国产在线观看一区二区| 日韩精品综合一本久道在线视频| 亚洲国产精品一区二区尤物区| 欧洲精品一区二区| 亚洲影院在线观看| 欧美高清视频不卡网| 偷窥少妇高潮呻吟av久久免费| 欧美日韩午夜在线| 日本欧美加勒比视频| 欧美刺激午夜性久久久久久久| 精品一区二区三区免费视频| 日韩欧美一区二区视频| 国产真实乱偷精品视频免| 日韩欧美亚洲另类制服综合在线| 麻豆91免费看| 欧美精彩视频一区二区三区| 成人免费视频国产在线观看| 国产精品久久久久影院亚瑟| 色天天综合久久久久综合片| 亚洲一区二区三区免费视频| 日韩欧美国产一区二区三区| 天天色天天爱天天射综合| 久久女同精品一区二区| 99国产一区二区三精品乱码| 亚欧色一区w666天堂| 精品乱人伦一区二区三区| 91美女片黄在线观看91美女| 天天综合色天天综合色h| 久久久99精品免费观看| 欧美综合一区二区| 国产一区二区成人久久免费影院| 亚洲欧洲国产日本综合| 精品日本一线二线三线不卡| 色综合久久精品| 国产精品亚洲成人| 亚洲国产精品天堂| 亚洲欧洲日韩在线| 欧美国产禁国产网站cc| 日韩一区二区三区精品视频| 91网站最新地址| 国产成人免费视频精品含羞草妖精 | 99国产一区二区三精品乱码| 久久91精品久久久久久秒播| 亚洲18色成人| 亚洲第一电影网| 亚洲综合色区另类av| 成人欧美一区二区三区白人| 精品卡一卡二卡三卡四在线| 欧美一区二区黄| 欧美一级爆毛片| 欧美成人三级在线| 日韩一区和二区| 精品久久久久久久久久久久包黑料| 欧美日韩一区二区三区在线| 欧美性大战久久久| 制服丝袜激情欧洲亚洲| 777午夜精品视频在线播放| 欧美日韩国产在线观看| 欧美美女一区二区三区| 欧美一卡在线观看| 精品成a人在线观看| 国产色一区二区| 国产精品色一区二区三区| 亚洲欧美偷拍三级| 午夜视频一区二区三区| 久久伊99综合婷婷久久伊| 国产女人18毛片水真多成人如厕 | 欧美综合色免费| 欧美一级一区二区| 中文乱码免费一区二区| 亚洲精品国产a| 国产呦精品一区二区三区网站 | 亚洲一区欧美一区| 久久精品国产久精国产爱| 国产精品99久久久久久似苏梦涵 | 亚洲精品国产a| 精品一区二区日韩| 91久久国产最好的精华液| 欧美一区二区三区在| 国产精品久久久久久久久久久免费看| 中文字幕亚洲成人| 国产一区二区在线看| 欧美丝袜丝交足nylons图片| 国产亚洲欧美在线| 天天综合网天天综合色| 99久久精品99国产精品| 精品久久久久久久久久久久包黑料| 一区二区三区在线播放| 国产精品一区二区你懂的| 56国语精品自产拍在线观看| 中文字幕一区二区三区色视频| 韩国午夜理伦三级不卡影院| 欧美体内she精视频| 亚洲影院久久精品| 色综合天天综合色综合av | 色呦呦日韩精品| 中文字幕在线不卡国产视频| 狠狠色丁香久久婷婷综合_中| 欧美性猛片xxxx免费看久爱| 国产精品久久久久久户外露出 | 日韩高清在线电影| 欧美性猛片xxxx免费看久爱| 一区二区久久久久|