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

📄 hwdriver.c

📁 手写IC(EPH1100)的80C51驱动软件。
💻 C
📖 第 1 页 / 共 2 页
字号:
BYTE SwitchCodeTab(BYTE mode)
{
	BYTE buf[8],ptr[8];
	
	memcpy(buf,TradCodeTab,8);
	buf[3]=mode;
	buf[7]=GenerateCRC(buf,8);

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

BYTE InitEph1100(void)
{
//	DebugOutChar('1');
//	if(!SetSoftReset())
//		return 9;
//	DebugOutChar('2');
	QuickTouch = 0;
	LastTime = 0;
	HwType = 0;
	nRecEnd = 1;
	if(!SwitchCodeTab(0x02))
		return 1;
//	DebugOutChar('3');
	if(!SwitchInking(1))
		return 2;
//	DebugOutChar('4');
//	DebugOutChar('6');
	if(!SwitchEven(1))
		return 4;
//	DebugOutChar('7');
	if(!SetWtiteArea(0,0,0,0))
		return 6;
	if(!SetPenupTime(3))
		return 3;
//	DebugOutChar('5');
	if(!SetPenTimeOffset(1))
		return 5;	
//	DebugOutChar('8');
	if(!SwitchGraphicMode(0)) 	//recogonition
		return 7;
//	DebugOutChar('9');
	if(!SetIdleTime(2))
		return 8;
	if(!SetCharactorMode(3,0))
		return 9;
//	if(!SetHostReady())
//		return 9;
//	SetRotateMode();
/*	{
		BYTE 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
BYTE SetAbortInking(void)
{
	BYTE 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
BYTE SetRotateMode(void)
{
	BYTE 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
BYTE SetCalibration(void)
{
	BYTE 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)
{
	WORD 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
BYTE SetHostReady(void)		//use wakeup g_eph
{
	BYTE buf[8];
	
	memcpy(buf,HostReady,8);
	buf[7]=GenerateCRC(buf,8);
	return WriteAndWait(buf,buf);
}
#if 1
BYTE SetWakeup(void)		//use wakeup g_eph
{
	BYTE buf[8];
	
	memcpy(buf,AckWakeup,8);
	buf[7]=GenerateCRC(buf,8);

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

	if(g_eph.RecLen==0)
		return 0;
	rec = ReceiveCommannd();
	if(g_eph.RecBuf[0]==0)
	{
		SetHostReady();
		return 0;
/*		if(!SetHostReady())
			return 0;
		else
			rec = ReceiveCommannd();
			SysDeadDelay(12);*/
	}
	if(g_eph.RecBuf[0]==0)
		return 0;
	if(rec){
	PacketType = g_eph.RecBuf[1];
	switch(PacketType)
	{
	  case PACKET_COMMAND_ACK_OK:
		  {
		  }
		  break;
	  case PACKET_COMMAND_RESET:
		  {
			g_eph.wmID=UDM_RESETEVENT;
		  } 
		  break;
	  case PACKET_COMMAND_POINT:
		  {
	         //TakeInkingxy();
	         g_eph.wmID=UDM_INK_DATA;
		  }
		  break;
	  case PACKET_COMMAND_CALIBRATE:
	  		g_eph.wmID=UDM_CALIBRATE_DATA;
	  		break;
	  case PACKET_COMMAND_TOUCH:
		  {
	         g_eph.wmID=UDM_TOUCH_DATA;
		  }
		  break;
	  case PACKET_COMMAND_CANDCOUNT:
		  {
		  }
		  break;
	  case PACKET_COMMAND_CANDIDATES:
		  g_eph.wmID=UDM_RECOG_RESULT;
		  break;
	}
		return 1;
	}
	return 0;	
}

void DrawLine(uint8 x0, uint8 y0, uint8 x1, uint8 y1, uint8 mode);
void InitInput(void);
void ShowIme(void);
BYTE Eph100Main(void)
{
//	WORD 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))
				{	
						WORD x,y;
						if(bWndGetResult)
						{
							SetAbortInking();
				  			EA = 0;
	  						ClearRect(1,66,63,14);
	  						ClearRect(1,81,63,14);
				      	   	DrawTextLine(FONT12,36,129,"手写",0xffff);
							ClearHwArea();
							DrawVertLine(64,64,159);
				  			EA = 1;
					    	//DrawRect(0,HANDW_Y,CXSCR,CYSCR-HANDW_Y);
			            	g_Input.InputTool=g_Input.Mode;
    		    	        g_Input.Status=INPUT_START;
						    bWndGetResult = 0;
							InitInput();
						}	
						else
						{	
							y = (g_eph.RecBuf[4])-g_nTouchPanelYBase;
							x = (g_eph.RecBuf[3])-g_nTouchPanelXBase;
							x = x*132/g_nTouchPanelXDiv;
							y = y*132/g_nTouchPanelYDiv;
							if((g_nTouchKeyX+16>x&&g_nTouchKeyX-16<x)&&(g_nTouchKeyY+16>y&&g_nTouchKeyY-16<y))
							{	
								if(g_nTouchKeyX<CXLCD-3&&g_nTouchKeyY<CYLCD-3&&x<CXLCD-3&&y<CYLCD-3)
								{	
						  			EA = 0;
									//DrawLine(g_nTouchKeyX-1,g_nTouchKeyY,x-1,y,1);
									DrawLine(g_nTouchKeyX,g_nTouchKeyY,x,y,1);
									//DrawLine(g_nTouchKeyX,g_nTouchKeyY-1,x,y-1,1);
						  			EA = 1;
								}	
							}	
		               		g_Input.Len = 2;
							g_nTouchKeyX = x;
							g_nTouchKeyY = y;
						}
				}
				else
				{
						g_nTouchKeyX = 0;
						g_nTouchKeyY = 0;
				}
				break;
			case UDM_TOUCH_DATA:		//select result and key button
				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
				{
					WORD 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:
				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 =(WORD)g_nTouchKeyX*132/g_nTouchPanelXDiv;
					g_nTouchKeyY =(WORD)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 =(WORD)g_nTouchKeyX*132/g_nTouchPanelXDiv;
					g_nTouchKeyY =(WORD)g_nTouchKeyY*132/g_nTouchPanelYDiv;
					return 	PEN_UP;
				}
				break;
			case UDM_RECOG_RESULT:
				g_eph.wmID = UDM_THD_NULL;
		  		if(!bWndGetResult)
		  		{
			  		BYTE i,j;
					BYTE str[26];
					BYTE 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;
	  				nRecEnd = 1;
//	  				g_eph.RecLen = 0;
	  				g_Input.Len = 2;
	  				LastTime  = 1;
	  				EA = 1;
	  				return KEY_ENTER;
	  			}
				break;
			case UDM_THD_READING:
				break;
			default:
				return 0;
				break;	
		}
/*		ephtime++;
		if(ephtime==100)
		{	
			nRecEnd = 1;
			LastTime  = 1;
			return 0;
		}	*/
	}
	else
		return 0;
	}
}









⌨️ 快捷键说明

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