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

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

?? hwdriver.c

?? 手寫識別芯片EPH1100的驅(qū)動源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
		unsigned char buf[8],ptr[8];
	
		memcpy(buf,RotateMode,8);
		buf[3]=0x20;
		buf[7]=GenerateCRC(buf,8);

		memcpy(ptr,buf,8);
		ptr[3]=0xff;
		ptr[7]=GenerateCRC(ptr,8);
		WriteAndWait(buf,ptr);
	}*/
	return 0;
}
#if 1
unsigned char SetAbortInking(void)
{
	unsigned char buf[8],ptr[8];
	
	memcpy(buf,AbortInking,8);
	buf[7]=GenerateCRC(buf,8);
	
	memcpy(ptr,buf,8);
	ptr[3]=0xff;
	ptr[7]=GenerateCRC(ptr,8);
	return WriteAndWait(buf,ptr);
}
#endif

#if 0
unsigned char SetRotateMode(void)
{
	unsigned char buf[8],ptr[8];
	
	memcpy(buf,RotateMode,8);
	buf[7]=GenerateCRC(buf,8);

	memcpy(ptr,buf,8);
	ptr[3]=0xff;
	ptr[7]=GenerateCRC(ptr,8);
	return WriteAndWait(buf,ptr);
}
#endif

#if 0
unsigned char SetCalibration(void)
{
	unsigned char buf[8],ptr[8];
	
	memcpy(buf,Calibration,8);
	buf[7]=GenerateCRC(buf,8);

	memcpy(ptr,buf,8);
	ptr[7]=GenerateCRC(ptr,8);
	return WriteAndWait(buf,ptr);
}
#endif
#if 0
void TakeInkingxy(void)
{
	unsigned char x,y;
	if(g_eph.RecBuf[3]!=0xff||g_eph.RecBuf[4]!=0xff)
	{		
		g_nTouchPanelY =g_eph.RecBuf[4]; 
		g_nTouchPanelX =g_eph.RecBuf[3];
		if((g_eph.RecBuf[4])>=g_nTouchPanelYBase)
			y = (g_eph.RecBuf[4])-g_nTouchPanelYBase;
		else
			y = 0;
		if((g_eph.RecBuf[3])>=g_nTouchPanelXBase)			
			x = (g_eph.RecBuf[3])-g_nTouchPanelXBase;
		else
			x = 0;	
		x = x*132/g_nTouchPanelXDiv;
		y = y*132/g_nTouchPanelYDiv;
		g_nTouchKeyY = y;
		g_nTouchKeyX = x;
	}
}
#endif
#if 0
void TakeCharAray(void)
{
	ReceiveCommannd();
}
#endif
unsigned char SetHostReady(void)		//use wakeup g_eph
{
	unsigned char buf[8];
	
	memcpy(buf,HostReady,8);
	buf[7]=GenerateCRC(buf,8);
	return WriteAndWait(buf,buf);
}
#if 1
unsigned char SetWakeup(void)		//use wakeup g_eph
{
	unsigned char buf[8];
	
	memcpy(buf,AckWakeup,8);
	buf[7]=GenerateCRC(buf,8);

	SendCommand(buf);
	SysDeadDelay(12);
	return 1;
}
#endif
unsigned char WaitingInkData(void)
{
  	unsigned char PacketType,rec;

	if(g_eph.RecLen==0)
		return 0;
	rec = ReceiveCommannd();
	if(g_eph.RecBuf[0]==0)
	{
		SetHostReady();
		return 0;
	}
	if(g_eph.RecBuf[0]==0)
		return 0;
	if(rec){
	PacketType = g_eph.RecBuf[1];
	switch(PacketType)
	{ 
		case PACKET_COMMAND_POINT://在屏上移動RecBuf[1] = 0x16
		{ 
			g_eph.wmID=UDM_INK_DATA;
		}
		break;
		case PACKET_COMMAND_CALIBRATE://校正數(shù)據(jù)RecBuf[1] = 0x44
			g_eph.wmID=UDM_CALIBRATE_DATA;
	  		break;
		case PACKET_COMMAND_TOUCH://點(diǎn)擊了一下屏RecBuf[1] = 0x17
		    g_eph.wmID=UDM_TOUCH_DATA;
			break; 
		case PACKET_COMMAND_CANDIDATES://手寫識別RecBuf[1] = 0x18
			g_eph.wmID=UDM_RECOG_RESULT;
			break;
	}
		return 1;
	}
	return 0;	
}

static int ReadDataxy[2] = {0,0};
static void tp_handler ()
{

	ReceiveCommannd();
	if(g_eph.RecBuf[0]==0)
	{
		SetHostReady();
		return ;
	}

#ifdef PVR_PLATFORM
	if (!quasar_irq_pending(0))
		return;	
	quasar_clear_irq(0);
#else
	*PIO_1_INT_STATUS_REG = ((1 << 1 ) <<16) | 0xffff;
#endif

	return;
	
}

void init_irq(void)
{

	quasar_enable_irq(0,0);

}

void tp_enable()
{
	int status;
#ifdef PVR_PLATFORM
	quasar_enable_irq(0,0);
#else
	status = *INT_TYPE_REG;     
	*INT_TYPE_REG = status | (PIO1_INT);
#endif	

}

void tp_disable()
{
	int status;
	// disable
#ifdef PVR_PLATFORM
	quasar_disable_irq(0);
#else
	status = *INT_TYPE_REG;     
	*INT_TYPE_REG = status & ~(PIO1_INT);
#endif
}
static int tp_open(struct inode *inode, struct file *filp)
{
	MOD_INC_USE_COUNT;
	return 0;
}

static int tp_release(struct inode *inode, struct file *filp)
{
	MOD_DEC_USE_COUNT;
	return 0;
}

unsigned long tp_read_scancode(void)
{
	unsigned long ReceivedData = 0;
	unsigned char i;
	if (g_eph.RecBuf[0] == 0)
		return 0;
	
	ReceivedData = g_eph.RecBuf[0];
	for (i=1; i<8; ==i)
		ReceivedData = (ReceivedData << 8) |g_eph.RecBuf[i];

	return ReceivedData;
}
	
static int tp_ioctl(struct inode *i_node, struct file *filp,unsigned int cmd, unsigned long arg)
{
	unsigned long rc=0;
	switch (cmd) 
	{
/*	
	case TP_EN:
		TP_Touch_enable();
		break;
	case TP_DIS:
		TP_Touch_Disable();
		break;		
*/	case READ_TP_VALUE:
		rc=tp_read_scancode();
		break;
	default:
		printk("tp_ioctl: unknow cmd = %d\n",cmd);
		break;
	}
	
	return rc;
}

struct file_operations tp_fops = {		
	open:    tp_open,
	ioctl:   tp_ioctl,
	release: tp_release
};
static void tpff_release (){
	free_irq (22, NULL);
}
devfs_handle_t tp_register(void)
{
	devfs_handle_t de;
	unsigned int maj,min;

	// register char driver.
	// Try devfs first - if kernel doesnt support devfs, devfs_register
	// returns NULL

#ifdef CONFIG_DEVFS_FS
	if((de=devfs_register(NULL, RMTP_DEVICE_NAME,
			      DEVFS_FL_DEFAULT, RMTP_MAJOR, 0,
			      S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP,
			      &tp_fops, NULL)))
	{
		devfs_get_maj_min(de, &maj, &min);
		printk("init_module: device (%d:%d) registered in devfs\n",
			  maj, min);
	} 
	
#else
	
#error You must enable devfs in your kernel
#endif
#ifdef PVR_PLATFORM
	if (request_irq (22,tp_handler, 0,"Touchpanel", NULL)!= 0) 
   	{
		printk ("request interrupt %d failed", 22);
		tpff_release ();
	//	return 0;
  	}
#else
	if (request_irq (UART1_INT,tp_handler, 0,"Touchpanel", NULL )!= 0) 
   	{
		printk ("request interrupt %d failed", 22);
		tpff_release ();
	//	return 0;
  	}
#endif
	return de;
}


// use the PIO interrupt to change the state in the state machine
int init_module ()
{
	EXPORT_NO_SYMBOLS;
	printk("******************************\n");
	printk ("tp: init_TouchPenel_module\n");
	printk("******************************\n");
	InitUart();
	InitEph1100();
	
	// Set type to FIQ (pio0 irq used for remote control)
#ifdef PVR_PLATFORM
	init_irq();
#else
	status = *INT_TYPE_REG;       
	*INT_TYPE_REG = status | PIO1_INT;		
#endif	

	printk("TIMER0_CNTL_REG = %x,TIMER0_LOAD_REG = %x\n ",*TIMER0_CNTL_REG,*TIMER0_LOAD_REG);
		
	if(tp_register())
		printk("Touchpanel:  sucessfully registered\n");
	else 
		printk("Touchpanel: Unable to register device\n");

	printk("Touchpanel: init_module done\n");
	return 0;
}


void cleanup_module (void)
{
	printk ("tp: cleanup\n");
	install_fiq_handler(NULL);

}

unsigned char Eph100Main(void)
{
//	unsigned char ephtime = 0;
	while(1){
	if(WaitingInkData())
	{
		if(g_eph.wmID != UDM_TOUCH_DATA)
			QuickTouch = 0;
		switch(g_eph.wmID)
		{
			case UDM_INK_DATA:
				g_eph.wmID=UDM_THD_NULL;
				if((g_eph.RecBuf[3]!=0xff&&g_eph.RecBuf[4]!=0)||(g_eph.RecBuf[3]!=0xff&&g_eph.RecBuf[4]!=0xff))
				{	
					unsigned char x,y;
					y = (g_eph.RecBuf[4])-g_nTouchPanelYBase;
					x = (g_eph.RecBuf[3])-g_nTouchPanelXBase;
					x = x*132/g_nTouchPanelXDiv;
					y = y*132/g_nTouchPanelYDiv;
					g_nTouchKeyX = x;
					g_nTouchKeyY = y;		
				}
				else
				{
					g_nTouchKeyX = 0;
					g_nTouchKeyY = 0;
				}
				break;
			case UDM_TOUCH_DATA:		//select result and key button只點(diǎn)了一下屏
				g_eph.wmID = UDM_THD_NULL;
				if(g_eph.RecBuf[3]==0xff&&g_eph.RecBuf[4]==0xff)
				{
					if(!QuickTouch)
						return 0;
					QuickTouch = 0;
					return PEN_UP;
				}
				else
				{
					unsigned char x,y;
//					if(g_eph.RecBuf[3]>(g_nTouchPanelX-3)&&g_eph.RecBuf[3]<(g_nTouchPanelX+3)&&g_eph.RecBuf[4]>(g_nTouchPanelY-3)&&g_eph.RecBuf[4]<(g_nTouchPanelY+3))
//						return PEN_MOVE;
//					else
					{		
						if(QuickTouch)
						{	
//							QuickTouch = 0;
//							return PEN_UP;
							return 0;
						}	
						QuickTouch = 1;
						g_nTouchPanelY =g_eph.RecBuf[4]; 
						g_nTouchPanelX =g_eph.RecBuf[3];
						if((g_eph.RecBuf[4])>=g_nTouchPanelYBase)
							y = (g_eph.RecBuf[4])-g_nTouchPanelYBase;
						else
							y = 0;
						if((g_eph.RecBuf[3])>=g_nTouchPanelXBase)			
							x = (g_eph.RecBuf[3])-g_nTouchPanelXBase;
						else
							x = 0;	
						x = x*132/g_nTouchPanelXDiv;
						y = y*132/g_nTouchPanelYDiv;
						g_nTouchKeyY = y;
						g_nTouchKeyX = x;
						return 	PEN_DOWN;
					}
				}	
				break;	
			case UDM_CALIBRATE_DATA://校正數(shù)據(jù)
				g_eph.wmID = UDM_THD_NULL;
				if(g_eph.RecBuf[3]==0xff&&g_eph.RecBuf[4]==0xff&&g_eph.RecBuf[5]!=0xff&&g_eph.RecBuf[6]!=0xff)
				{	
					g_nTouchPanelY = (g_eph.RecBuf[6]);
					g_nTouchPanelX = (g_eph.RecBuf[5]);
					if((g_eph.RecBuf[6])>=g_nTouchPanelYBase)
						g_nTouchKeyY = (g_eph.RecBuf[6])-g_nTouchPanelYBase;
					else
						g_nTouchKeyY = 0;	
					if(	(g_eph.RecBuf[5])>=g_nTouchPanelXBase)
						g_nTouchKeyX = (g_eph.RecBuf[5])-g_nTouchPanelXBase;
					else
						g_nTouchKeyX = 0;
					g_nTouchKeyX =(unsigned char)g_nTouchKeyX*132/g_nTouchPanelXDiv;
					g_nTouchKeyY =(unsigned char)g_nTouchKeyY*132/g_nTouchPanelYDiv;
					return 	PEN_UP;
				}
				else if(g_eph.RecBuf[3]!=0xff&&g_eph.RecBuf[4]!=0xff&&g_eph.RecBuf[5]==0xff&&g_eph.RecBuf[6]==0xff)
				{
					g_nTouchPanelY = (g_eph.RecBuf[4]);
					g_nTouchPanelX = (g_eph.RecBuf[3]);
					if((g_eph.RecBuf[4])>=g_nTouchPanelYBase)						
						g_nTouchKeyY = (g_eph.RecBuf[4])-g_nTouchPanelYBase;
					else
						g_nTouchKeyY = 0;
					if(	(g_eph.RecBuf[3])>=g_nTouchPanelXBase)
						g_nTouchKeyX = (g_eph.RecBuf[3])-g_nTouchPanelXBase;
					else	
						g_nTouchKeyX = 0;
					g_nTouchKeyX =(unsigned char)g_nTouchKeyX*132/g_nTouchPanelXDiv;
					g_nTouchKeyY =(unsigned char)g_nTouchKeyY*132/g_nTouchPanelYDiv;
					return 	PEN_UP;
				}
				break;
			case UDM_RECOG_RESULT://手寫識別結(jié)果
				g_eph.wmID = UDM_THD_NULL;
		  		if(!bWndGetResult)
		  		{
			  		unsigned char i,j;
					unsigned char str[26];
					unsigned char buf[12];
						
		  			EA = 0;
//					g_eph.wmID=UDM_THD_READING;
			  		ClearRect(1,66,63,14);
			  		ClearRect(1,81,63,14);
			  		memset(g_Ime.ImeBuf,0,20);
			  		if(g_eph.RecBuf[3])
			  		{	
					  	j=0;
					  	for(i=0;i<g_eph.RecBuf[3]*2;i+=2)
					  	{
	  						if(g_eph.RecBuf[i+5] == 0)
	  						{	
		  						str[j] = g_eph.RecBuf[i+5];
	  							str[j] = 0x20;
	  							j++;
		  						str[j++] = g_eph.RecBuf[i+4];
	  						}
	  						else
	  						{
	  							if(g_eph.RecBuf[i+5]>0xa0&&g_eph.RecBuf[i+4]>=0xa0)
	  							{
			  						str[j] = g_eph.RecBuf[i+5];
	  								j++;
		  							str[j++] = g_eph.RecBuf[i+4];
	  							}	
	  						}	
			  			}
				  		str[j] =0;
				  		memcpy(g_Ime.ImeBuf,str,j);
				  		memcpy(buf,&g_Ime.ImeBuf[10],10);
				  		buf[10] = 0;
			  			str[10] = 0;
			  			for(i=0;i<10;i+=2)
			  			{
			  				if(str[i]==0)
			  					break;
			  				if(str[i]==0x20)
			  					DrawTextChar(FONT12,2+6*i+3,67,str[i+1]);
			  				else
					  			DrawTextLine(FONT12,2+6*i,67,&str[i],2);
			  			}
				  		if(j>=10)
				  		{	
				  			for(i=0;i<10;i+=2)
				  			{
				  				if(buf[i]==0)
				  					break;
				  				if(buf[i]==0x20)
				  					DrawTextChar(FONT12,2+6*i+3,82,buf[i+1]);
			  					else
						  			DrawTextLine(FONT12,2+6*i,82,&buf[i],2);
			  				}
		  				}	
	  				}
	  				bWndGetResult=1;
//	  				g_eph.RecLen = 0;
	  				g_Input.Len = 2;
	  				return KEY_ENTER;
	  			}
				break;
//			case UDM_THD_READING:
//				break;
			default:
				return 0;
				break;	
		}
	}
	else
		return 0;
	}
}









?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品亚洲人成人网在线播放| 自拍偷拍国产亚洲| 成人三级伦理片| 欧美系列亚洲系列| 91年精品国产| 日本韩国视频一区二区| 91尤物视频在线观看| 成人av影院在线| 成人免费av网站| 一本久久a久久精品亚洲| 91丨九色丨蝌蚪富婆spa| 成人精品视频一区| 91福利精品视频| 欧美福利视频一区| 久久综合九色综合欧美就去吻| 日韩你懂的在线播放| 精品国产青草久久久久福利| 久久亚洲一区二区三区明星换脸| 久久午夜免费电影| 亚洲九九爱视频| 日韩电影在线观看一区| 国产综合色在线视频区| 国产精品系列在线播放| 欧美日韩国产免费| 91丨九色丨黑人外教| 色视频一区二区| 51午夜精品国产| 久久久久9999亚洲精品| 亚洲婷婷在线视频| 日韩不卡一区二区三区| 成人性生交大片免费看中文| 在线观看日产精品| 日韩欧美电影一二三| 中文字幕日韩欧美一区二区三区| 亚洲在线中文字幕| 国产一区二区三区久久久| 国产成人综合亚洲91猫咪| 国产精品18久久久久| 色成年激情久久综合| 日韩精品一区二区在线| 一区二区三区美女视频| 精品夜夜嗨av一区二区三区| 色呦呦日韩精品| 26uuu成人网一区二区三区| 最新中文字幕一区二区三区| 日韩高清不卡一区二区| 99久久久无码国产精品| 精品少妇一区二区三区在线播放| 亚洲视频1区2区| 国产乱码精品1区2区3区| 欧美亚洲高清一区二区三区不卡| 久久精品一区二区三区不卡牛牛| 亚洲国产成人av| 97se亚洲国产综合自在线不卡| 日韩一区二区电影在线| 一区二区三区精品在线观看| 国产麻豆午夜三级精品| 欧美挠脚心视频网站| 亚洲视频免费观看| 高清av一区二区| 欧美www视频| 蜜臀av在线播放一区二区三区| 一本色道**综合亚洲精品蜜桃冫 | 日韩亚洲电影在线| 亚洲精选视频免费看| 福利电影一区二区| 国产亚洲精品aa| 国产一区二区久久| 精品少妇一区二区三区在线视频| 香蕉成人伊视频在线观看| 欧美在线999| 一区二区三区国产精华| 日本久久电影网| 一区二区视频在线看| 99国产精品一区| 综合久久给合久久狠狠狠97色| 国产不卡一区视频| 亚洲国产精品成人久久综合一区| 国产不卡视频在线播放| 国产精品久久毛片| 91亚洲精品久久久蜜桃网站 | 亚洲电影一级片| 欧美性色黄大片手机版| 亚洲一区二区美女| 56国语精品自产拍在线观看| 日本不卡一区二区三区高清视频| 91精品国产91久久久久久一区二区| 婷婷丁香激情综合| 91精品国产91综合久久蜜臀| 久久精品99久久久| 久久综合资源网| 99在线精品视频| 性欧美疯狂xxxxbbbb| 精品欧美一区二区久久| 高清beeg欧美| 亚洲h动漫在线| 精品99一区二区| 99久久久精品| 亚洲成人av一区二区三区| 精品免费99久久| a级精品国产片在线观看| 一二三区精品视频| 26uuu国产日韩综合| 一本到一区二区三区| 日韩va亚洲va欧美va久久| 久久免费电影网| 欧洲精品中文字幕| 麻豆一区二区三区| 国产精品入口麻豆九色| 欧美日韩亚洲综合在线 | 开心九九激情九九欧美日韩精美视频电影| 日韩一区二区免费视频| www.色精品| 麻豆精品国产91久久久久久| 中文字幕欧美一区| 日韩丝袜情趣美女图片| 99r精品视频| 极品少妇xxxx精品少妇偷拍| 亚洲欧美日韩国产成人精品影院 | 日本韩国视频一区二区| 国产麻豆精品视频| 亚洲一卡二卡三卡四卡| 国产欧美精品一区| 日韩欧美亚洲国产另类| 欧洲国产伦久久久久久久| 丁香五精品蜜臀久久久久99网站 | 最新不卡av在线| 日韩一区二区在线观看视频播放| 96av麻豆蜜桃一区二区| 国产精品一二三四五| 日韩av一区二区在线影视| 亚洲视频一区在线| 国产精品卡一卡二卡三| 精品国内片67194| 欧美丰满一区二区免费视频| 99久免费精品视频在线观看| 国产一区不卡视频| 美女任你摸久久| 日本成人在线看| 亚洲成人自拍一区| 亚洲综合色婷婷| 综合久久综合久久| 亚洲精品日韩专区silk| 亚洲色图欧洲色图| 亚洲欧美日韩一区二区三区在线观看| 国产欧美日韩精品一区| 久久综合网色—综合色88| 精品少妇一区二区三区免费观看| 欧美一区二区三区精品| 欧美一卡在线观看| 欧美一区二区三区在线视频| 91精品久久久久久久91蜜桃| 5月丁香婷婷综合| 日韩欧美一区二区免费| 欧美精品一区二区三区蜜桃| 精品91自产拍在线观看一区| 欧美电影免费观看高清完整版在线观看 | 在线一区二区视频| 一本色道**综合亚洲精品蜜桃冫| 色先锋久久av资源部| 色综合天天在线| 欧美日韩不卡在线| 欧美一区二区三区视频免费| 精品国产乱码久久久久久久久 | 亚洲人吸女人奶水| 日韩一区二区三区视频在线观看 | 亚洲一区二区黄色| 亚洲综合色婷婷| 午夜精品久久久久久久99樱桃| 日韩中文字幕1| 狠狠色2019综合网| 成人小视频免费在线观看| 色综合久久久久综合体桃花网| 欧美影视一区二区三区| 日韩一区和二区| 国产精品视频在线看| 一区二区三区.www| 美国十次了思思久久精品导航| 国产精品白丝jk白祙喷水网站| 99久久久国产精品免费蜜臀| 欧美色爱综合网| 欧美草草影院在线视频| 国产欧美综合在线观看第十页| 亚洲精品视频观看| 蜜臀av一区二区| 成人av电影在线网| 日韩欧美美女一区二区三区| 欧美日韩精品一区二区三区四区| 91精品国产91久久久久久最新毛片| 精品国产123| 亚洲欧美日韩一区二区三区在线观看 | 精品噜噜噜噜久久久久久久久试看 | 成人免费视频一区| 欧美精品 国产精品| 国产精品青草综合久久久久99| 午夜视频在线观看一区二区三区 | 国产精品久久久久久久蜜臀| 同产精品九九九| 成人动漫视频在线| 日韩欧美成人激情|