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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? touchpanel.c

?? 最常用的嵌入式LINUX字符設(shè)備驅(qū)動:觸摸屏和小鍵盤驅(qū)動。觸摸屏使用SPI接口
?? C
?? 第 1 頁 / 共 2 頁
字號:
/************************************************************文檔類型: 原代碼 項目編號: 文檔編號: 修訂版本: v1.0生成日期: 2001.11.9文檔作者: 張繼周,何雄倫審    核: ************************************************************相關(guān)文檔: uClinux的觸摸屏驅(qū)動程序 文檔編號      說明 ************************************************************修訂版本: v1.1修訂說明: 增加了對觸摸屏坐標(biāo)的校驗功能生成日期: 2002.3.28文檔作者: 何雄倫審    核: ************************************************************修訂版本: v1.1修訂說明: 增加了將DX,DY,SCX,SCY值寫到FLASH生成日期: 2002.5.23文檔作者: 周澤明審    核: ************************************************************/#include <linux/kernel.h>#include <asm/MC68VZ328.h>#include <asm/segment.h>#include <linux/types.h>#include <linux/fs.h>#include <linux/mm.h>#include <linux/errno.h>#include <linux/sched.h>#include <linux/tqueue.h>#include <linux/interrupt.h>/* 觸摸屏的兩種狀態(tài):PEN_DOWN為筆按下狀態(tài);PEN_UP為筆沒有按下狀態(tài) */#define PEN_DOWN	1#define PEN_UP		2/* 時鐘中斷的間隔,每隔固定的時間片就檢查筆的狀態(tài)(按下或沒按下) */#define DELAY		20/*The size of keyboard input buffer.*/#define MAX_BUF_COUNT 5000/* 觸摸屏設(shè)備號 */unsigned int touch_major = 98;/* 筆狀態(tài)變量,默認(rèn)沒按下 */static unsigned char flag = PEN_UP;/* 觸摸屏的數(shù)據(jù)緩沖區(qū)(循環(huán)隊列) */static unsigned char pen_buf[MAX_BUF_COUNT];static int pstart,pend,count;/* The touch pannel wait queque */static struct wait_queque *touch_wait;/* 觸摸屏當(dāng)前筆的位置和上次按下的位置 */static struct pos {	unsigned short x;	unsigned short y;}pre_pos,cur_pos;// [Added++] by Aavan, 2002/09/05int gOldX = 0;int gOldY = 0;int gX = 0;int gY = 0;// [Added--]// 由于觸摸屏的抖動問題,使用一個濾波器對坐標(biāo)值濾波struct {	unsigned int x[5];	unsigned int y[5];	unsigned short count;}filter;// 存放手寫字的軌跡struct trackbuf{	unsigned char track[20000];	unsigned int endpos;	unsigned int pointcount;	// flag == 0:一個字的軌跡還未結(jié)束;flag == 1:一個字的軌跡結(jié)束了;	unsigned char flag;}pointbuf;// 手寫輸入鍵盤在屏幕上的位置;當(dāng)筆落在這個范圍內(nèi)的時候,// 作為鼠標(biāo);在這個范圍以外,作為手寫軌跡struct keyboard{	unsigned int x;	unsigned int y;	unsigned int x1;	unsigned int y1;}boardrect;// 0:送軌跡;1:不送軌跡static unsigned char sendtrack;// 0:沒進入了輸入鍵盤;1:進入了鍵盤static unsigned char keyflag = 0;// 0:觸筆模擬鼠標(biāo);1:觸筆正進行坐標(biāo)校驗;2:觸筆正進行手寫輸入static unsigned char collateflag = 0;// 判斷當(dāng)前要定位的位置,0:左上角;1:右下角static unsigned char collatepos = 0;unsigned int DX = 151;//179;	// LCD左上角位置在觸摸屏上的X坐標(biāo)unsigned int DY = 119;//183;	// LCD左上角位置在觸摸屏上的Y坐標(biāo)unsigned int DX1;	// LCD右下角位置在觸摸屏上的X坐標(biāo)unsigned int DY1;	// LCD右下角位置在觸摸屏上的Y坐標(biāo)float SCX = 0.185f;//0.189f;	// SCX = 320/(DX1-DX)float SCY = 0.135f;//0.149f;	// SCY = 240/(DY1-DY)// 設(shè)備文件正在使用標(biāo)志static unsigned char useflag = 0;// LCD顯示緩存指針static unsigned char *videobuf;// 定義顯示緩存尺寸#define VIDEOLEN	38400// 定義一行象素的尺寸#define LINELEN		160// 備份顯示緩存static unsigned char videobackup[VIDEOLEN];static unsigned int writedelay = 0;// 定義手寫輸入字軌跡的灰度值static unsigned char greyvalue = 0xff;static unsigned char notmask[2] = { 0x0f, 0xf0};static char shift[2] = {4,0};// 在FLASH中保存SCX,SCY,DX,DY的值,打開設(shè)備時讀入這些值,// 在每次校正時重新把這幾個值寫到FLASH中保存,并在前五個字節(jié)里// 寫入"FLASH"作為標(biāo)志.從FLASH中讀這幾個值,如果前五個字節(jié)不是// "FLASH",表示SCX,SCY,DX,DY的值還沒有燒到FLASH中,就使用缺省的值.// format: "FLASH",DX,DY,SCX,SCY.#define FLASHBLKID 	0#define OFFSET		0#define INTLEN		sizeof(unsigned int)#define FLOATLEN	sizeof(float)#define LENGTH		(5+2*INTLEN+2*FLOATLEN)// this value used to save port d datastatic unsigned char pddata;extern int freadflash(const int fd,const int off,unsigned char *buf,const unsigned int len);extern int fwriteflash(const int fd,const int off,unsigned char *buf,const unsigned int len);/************************************************************函數(shù)原型: static void drawpixel(unsigned int x, unsigned int y)功    能: Draw a pixel to LCD.輸入?yún)?shù): x,y:location the pixel.返 回 值: NULL.************************************************************/unsigned char *addr;#define drawpixel(x,y)	{					\	addr = videobuf;					\	addr += (x>>1) + (y << 7) + (y << 5);			\	*addr = greyvalue;					\	addr += LINELEN;					\	*addr = greyvalue;					\}static int xdelta;			/* width of rectangle around line */static int ydelta;			/* height of rectangle around line */static int xinc;			/* increment for moving x coordinate */static int yinc;			/* increment for moving y coordinate */static int rem;			/* current remainder */	static void drawline(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2){	xdelta = x2 - x1;	ydelta = y2 - y1;	if (xdelta < 0) xdelta = -xdelta;	if (ydelta < 0) ydelta = -ydelta;	xinc = (x2 > x1) ? 1 : -1;	yinc = (y2 > y1) ? 1 : -1;		drawpixel(x1,y1);	if (xdelta >= ydelta)	{		rem = xdelta >> 1;		for(;;)		{			x1 += xinc;			rem += ydelta;			if (rem >= xdelta)			{				rem -= xdelta;				y1 += yinc;			}			drawpixel(x1,y1);			if(x1 == x2)				break;		}	}	else	{		rem = ydelta >> 1;		for(;;)		{			y1 += yinc;			rem += xdelta;			if (rem >= ydelta)			{				rem -= ydelta;				x1 += xinc;			}			drawpixel(x1,y1);			if(y1 == y2)				break;		}	}}/************************************************************函數(shù)原型: static int touch_read(struct inode *node, struct file *fp,		    unsigned char *ubuf, int ucount);功    能: Read the data of touch panel.輸入?yún)?shù): unsigned char *ubuf:the input data buffer point,the buffer save		data of x and y value and pen status(down or up) of touch		panel.	  int ucount:it must be 5.返 回 值: if readed successful then return 5,if the user buffer error then		return -1,and no data to read then return 0.************************************************************/static int touch_read(struct inode *node, struct file *fp,		    unsigned char *ubuf, int ucount){	if (verify_area(VERIFY_WRITE, ubuf, 5) == -EFAULT)		return -1;		if (count == 0)		return 0;	put_user(pen_buf[pend],ubuf);	put_user(pen_buf[pend+1],ubuf+1);	put_user(pen_buf[pend+2],ubuf+2);	put_user(pen_buf[pend+3],ubuf+3);	put_user(pen_buf[pend+4],ubuf+4);	count --;	pend +=5 ;		if (pend >= MAX_BUF_COUNT) pend = 0;	return 5;}/************************************************************函數(shù)原型: static int touch_open(struct inode *node, struct file *fp);功    能: this function open the touch panel.輸入?yún)?shù): struct inode *node:not used.	  struct file *fp:not used.返 回 值: it always open successful,so it return 0.************************************************************/static int touch_open(struct inode *node, struct file *fp){	unsigned char *save,*p,*q;	int i;/*	save = kmalloc(LENGTH,GFP_KERNEL);	if (NULL == save)		printk("kmalloc failure.\n");	else	{		p = save;		if (freadflash(FLASHBLKID ,OFFSET,save,LENGTH))			printk("read flash error!\n");		else if ( (0x46 == *p++) && (0x4c == *p++) &&			 (0x41 == *p++) && (0x53 == *p++) &&			 (0x48 == *p++) )			{				q = (unsigned char*)&DX;				for (i=0;i<INTLEN;i++)					*q++ = *p++;				q = (unsigned char*)&DY;				for (i=0;i<INTLEN;i++)					*q++ = *p++;				q = (unsigned char*)&SCX;				for (i=0;i<FLOATLEN;i++)					*q++ = *p++;				q = (unsigned char*)&SCY;				for (i=0;i<FLOATLEN;i++)					*q++ = *p++;						printk("read flast -- DX = %d\n",DX);				printk("read flast -- DY = %d\n",DY);				printk("read flast -- SCX = %d\n",(unsigned int)(SCX*1000));				printk("read flast -- SCY = %d\n",(unsigned int)(SCY*1000));			}		kfree(save);	}*/	if (useflag == 0)	{		// 如果驅(qū)動是第一次打開,則作為鼠標(biāo)打開		pstart = 0;		pend = 0;		count = 0;				useflag = 1;	}	// 不是第一次打開,作為手寫輸入	return 0;}/************************************************************函數(shù)原型: touch_close(struct inode *node, struct file *fp);功    能: this function close the touch panel.輸入?yún)?shù): all arguments don't used.返 回 值: it has no any return value.************************************************************/static void touch_close(struct inode *node, struct file *fp){	useflag = 0;}static int touch_select(struct inode *inode,struct file *file,int mode,select_table *table){	if (mode == SEL_IN)	{		if (count)		{			return 1;		}		select_wait(&touch_wait,table);	}	return 0;}static unsigned char resourchflag = 0;// This function added by xionglun.he 2002.3.28static int touch_ioctl(struct inode *inode,struct file *filp,unsigned int cmd,unsigned long arg){	struct trackbuf *pbuf;	struct keyboard *prect;	unsigned char *save,*p,*q;	int i;		switch (cmd)	{	case 1:		// 開始校驗		collateflag = 1;		pre_pos.x = 0;		pre_pos.y = 0;		cur_pos.x = 0;		cur_pos.y = 0;		if (arg == 0)			collatepos = 0;		else			collatepos = 1;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产乱码久久蜜臀| 五月婷婷欧美视频| 一区二区三区四区乱视频| 91在线小视频| 极品瑜伽女神91| www.久久精品| 欧美日韩国产一区二区三区地区| 欧美一区二区三区四区视频| 中文av一区二区| 洋洋av久久久久久久一区| 美女一区二区三区在线观看| 成人app软件下载大全免费| 欧美日韩视频第一区| 久久久久久免费网| 亚洲乱码国产乱码精品精可以看 | 免费看日韩精品| 中文子幕无线码一区tr| 日本欧美大码aⅴ在线播放| 国产99一区视频免费| 一本久久综合亚洲鲁鲁五月天| 日韩一区二区在线看片| 亚洲青青青在线视频| 久久精品国产一区二区| 91一区二区三区在线观看| 日韩精品一区二区三区中文精品 | 国产成人一级电影| 欧美性猛交xxxxxxxx| 久久影院午夜论| 亚洲一区二区在线播放相泽| 国产精品综合久久| 欧美亚洲综合在线| 国产精品久久久一本精品| 日本午夜精品视频在线观看 | 亚洲欧美日韩国产综合在线| 美脚の诱脚舐め脚责91| 日本丰满少妇一区二区三区| 久久精品人人做人人爽97| 视频一区视频二区中文字幕| av在线不卡电影| 26uuu另类欧美亚洲曰本| 亚洲国产成人av好男人在线观看| 东方欧美亚洲色图在线| 欧美一级视频精品观看| 亚洲乱码中文字幕综合| 成人永久免费视频| 日韩精品一区二区三区老鸭窝| 亚洲综合男人的天堂| 成人av电影免费在线播放| 日韩欧美国产不卡| 天天综合天天综合色| 波多野结衣一区二区三区 | 国产一区二区免费在线| 欧美日韩亚洲国产综合| 亚洲婷婷国产精品电影人久久| 国产中文字幕一区| 欧美va亚洲va在线观看蝴蝶网| 亚洲二区在线视频| 色999日韩国产欧美一区二区| 国产精品每日更新| 国产mv日韩mv欧美| 久久精品视频一区| 国产精品一品二品| 久久综合九色综合久久久精品综合| 日本成人在线看| 91精品国产欧美一区二区18 | 在线精品视频免费观看| 国产精品久久久久久久久搜平片 | 久久天堂av综合合色蜜桃网| 热久久一区二区| 在线不卡中文字幕播放| 亚洲成人www| 69堂国产成人免费视频| 亚洲chinese男男1069| 欧美三级资源在线| 香蕉成人啪国产精品视频综合网| 欧美熟乱第一页| 婷婷一区二区三区| 欧美一区二区精品在线| 免费人成黄页网站在线一区二区| 在线播放中文一区| 欧美aaaaa成人免费观看视频| 91精品黄色片免费大全| 久久国产精品99精品国产 | 国产成a人无v码亚洲福利| 久久久蜜桃精品| 国产传媒欧美日韩成人| 欧美高清在线一区| 99精品久久免费看蜜臀剧情介绍| 亚洲人成精品久久久久| 在线观看精品一区| 日本不卡的三区四区五区| 欧美mv日韩mv国产网站| 国产麻豆成人精品| 国产精品久久久久久久久免费桃花| 91美女在线看| 五月激情综合网| 日韩无一区二区| 国产精品一区一区三区| 国产精品卡一卡二卡三| 91成人在线观看喷潮| 日韩国产在线一| 精品国产一二三| 成人精品高清在线| 亚洲午夜视频在线| 日韩免费观看高清完整版| 国产一区二区三区蝌蚪| 亚洲免费观看高清| 欧美一区二区日韩| 成人涩涩免费视频| 亚洲成人在线观看视频| 精品国产一区二区三区忘忧草 | 久久久久久久综合色一本| 成人中文字幕合集| 亚洲国产视频直播| 久久综合久久鬼色| 色狠狠桃花综合| 精品一区中文字幕| 自拍偷拍国产精品| 日韩精品中文字幕一区| 成人做爰69片免费看网站| 亚洲图片欧美色图| 久久久久久久久久电影| 色狠狠色噜噜噜综合网| 狠狠色丁香婷综合久久| 亚洲欧美日韩系列| 欧美精品一区二区三区一线天视频| 99视频一区二区三区| 日本一不卡视频| 亚洲婷婷综合色高清在线| 欧美videos大乳护士334| 色婷婷av久久久久久久| 精一区二区三区| 亚洲永久免费av| 欧美韩国一区二区| 这里是久久伊人| 色悠悠久久综合| 国产乱子伦视频一区二区三区| 樱花影视一区二区| 欧美国产禁国产网站cc| 日韩欧美激情在线| 在线视频欧美区| 成人免费视频一区| 九九九久久久精品| 婷婷开心久久网| 亚洲乱码国产乱码精品精98午夜| 精品播放一区二区| 欧美二区三区91| 色老综合老女人久久久| 国产jizzjizz一区二区| 精品综合免费视频观看| 丝袜亚洲另类欧美综合| 亚洲另类春色国产| 国产精品进线69影院| 精品国产一区二区精华| 正在播放一区二区| 在线免费观看视频一区| 成人激情文学综合网| 国产一区视频网站| 日本中文字幕一区二区视频 | 欧美影视一区二区三区| 成人午夜激情片| 国产精品资源站在线| 捆绑紧缚一区二区三区视频| 亚洲福利视频导航| 一区二区三区四区国产精品| 国产精品久久久久久户外露出 | 国产精品一区二区久久精品爱涩| 喷白浆一区二区| 日韩精品午夜视频| 亚洲综合视频网| 中文字幕一区免费在线观看| 国产亚洲成av人在线观看导航| 精品国产免费久久| 精品国产乱码91久久久久久网站| 欧美电影在线免费观看| 6080日韩午夜伦伦午夜伦| 欧美性一区二区| 欧美视频在线观看一区二区| 在线观看av不卡| 色婷婷国产精品| 在线一区二区三区| 在线观看日韩电影| 欧美视频你懂的| 欧美亚洲自拍偷拍| 欧美人伦禁忌dvd放荡欲情| 欧美猛男gaygay网站| 欧美人动与zoxxxx乱| 91精品国产欧美一区二区18| 欧美一区二区三区不卡| 日韩精品一区二区三区视频在线观看 | 欧美亚洲一区二区在线| 欧美三级在线播放| 欧美一级理论片| 日韩欧美成人午夜| 久久久777精品电影网影网| 久久精品一区八戒影视| 中文在线资源观看网站视频免费不卡| 中文字幕精品在线不卡| 亚洲精选视频免费看| 亚洲电影一级黄|