📄 hwdriver.c
字号:
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 + -