📄 guiihl.c
字号:
/***************************************************************************
* FILE: guiIhl.c
* MODULE: input abstract layer
*
* PURPOSE: input hardware layer implementation
*
*
* AUTHOR(S): YangCX
* GROUP: GUI Group
* DATE CREATED: 2001/11/18
* REFERENCE DOCUMENT ID:
* MODIFICATIONS:
* Date userName Description
* 2001/11/18 Yangcx Create this file
**************************************************************************/
#include <stdio.h>
#include "sysMCU.h"
#include "sysGUI.h"
/* about touchpad */
T_UHWORD uhIHL_xAvrg,uhIHL_yAvrg;
T_UHWORD uhaIHL_xAdd[AD_DATA_NUM]; /* A/D data of T/P x axes */
T_UHWORD uhaIHL_yAdd[AD_DATA_NUM]; /* A/D data of T/P y axes */
T_FLOAT fIHL_xStep,fIHL_yStep;
T_UBYTE ubIHL_TouchX,ubIHL_TouchY;
T_EXTERN T_VOID fnIHL_InitKey(T_VOID);
T_EXTERN T_VOID fnIHL_EnableTpInt(T_VOID);
T_EXTERN T_VOID enable_key(T_VOID);
T_EXTERN T_VOID fnIHL_InitIo(T_VOID); /* defined in touch_drv */
T_EXTERN T_FLOAT fnIHL_GetXStep(T_UHWORD,T_UHWORD); /* defined in add2lcd */
T_EXTERN T_FLOAT fnIHL_GetYStep(T_UHWORD,T_UHWORD); /* defined in add2lcd */
T_EXTERN T_VOID fnIHL_TpMapping(T_VOID); /* defined in add2lcd */
/* Prototype of Direct LCD Display Routine */
T_EXTERN T_VOID fnIHL_DlcdShowCoordinate(int x,int y,short c);
T_EXTERN T_VOID fnIHL_ClearASCII(T_UBYTE x,T_UBYTE y);
T_EXTERN T_UHWORD fnIHL_GetAvrgAdj(T_UHWORD *);
T_EXTERN T_VOID fnIHL_GetAdjustPoint(T_VOID);
/* about key */
T_EXTERN T_UBYTE ubIHL_K5Data;
T_EXTERN T_UBYTE ubaIHL_xTpMap[256];
T_EXTERN T_UBYTE ubaIHL_yTpMap[512];
T_EXTERN T_VOID fnIHL_DisableTpInt(T_VOID);
void fnIHL_GetPenPoint(unsigned short *xposition, unsigned short *yposition);
/************************ Hardware Input Operations **********************/
/******************************************************************
* FUNCTION: fnIHL_InitMouse
*
* PURPOSE:
* initialize touchpad hardware
*
* PARAMETERS
* Input:
* Output:
* InOut:
*
* Return value:
*
* Reentrant : No
*****************************************************************/
T_VOID fnIHL_InitMouse(T_VOID)
{
/* T_UHWORD ii;
T_UHWORD x_add_ul;
T_UHWORD x_add_lr;
T_UHWORD y_add_ul;
T_UHWORD y_add_lr;
T_UHWORD x_avrg_adj;
T_UHWORD y_avrg_adj;
T_UHWORD x_avrg_bak;
T_UHWORD y_avrg_bak;
x_avrg_adj=y_avrg_adj=0;
fnIHL_InitIo();
// show 1st adjust point cross
fnIHL_DlcdShowCoordinate(19,19,0);
// wait pendown to the 1st adjust point
do
{
// fnIHL_EnableTpInt();
fnIHL_GetAdjustPoint();
}
while((uhIHL_xAvrg>0x3af)||(uhIHL_yAvrg>0x3af)||(uhIHL_xAvrg<0x6f)||(uhIHL_yAvrg<0x6f));
// wait pen up
do
{
x_avrg_bak=x_avrg_adj;
y_avrg_bak=y_avrg_adj;
// fnIHL_Run16Timer(IAL_T16P_PRUN2_ADDR);
fnIHL_GetAdjustPoint();
x_avrg_adj=fnIHL_GetAvrgAdj(uhaIHL_xAdd);
y_avrg_adj=fnIHL_GetAvrgAdj(uhaIHL_yAdd);
}
while(((x_avrg_adj>0x50)&&(y_avrg_adj>0x50)&&(x_avrg_adj<0x3e0)&&(y_avrg_adj<0x3e0))
||(x_avrg_bak>0x3af)||(y_avrg_bak>0x3af)||(x_avrg_bak<0x6f)||(y_avrg_bak<0x6f));
// when pen up, get AD data of the point before pen up
x_add_ul = x_avrg_bak;
y_add_ul = y_avrg_bak;
// clear the 1st adjust point cross
fnIHL_DlcdShowCoordinate(19,19,0xf0f0);
// wait
for (ii=0;ii<0xffff;ii++)
{
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
}
fnIHL_DlcdShowCoordinate(100,140,0);
do
{
// fnIHL_EnableTpInt();
fnIHL_GetAdjustPoint();
}
while((uhIHL_xAvrg>0x3af)||(uhIHL_yAvrg>0x3af)||(uhIHL_xAvrg<0x6f)||(uhIHL_yAvrg<0x6f));
do
{
x_avrg_bak=x_avrg_adj;
y_avrg_bak=y_avrg_adj;
// fnIHL_Run16Timer(IAL_T16P_PRUN2_ADDR);
fnIHL_GetAdjustPoint();
x_avrg_adj=fnIHL_GetAvrgAdj(uhaIHL_xAdd);
y_avrg_adj=fnIHL_GetAvrgAdj(uhaIHL_yAdd);
}
while(((x_avrg_adj>0x50)&&(y_avrg_adj>0x50)&&(x_avrg_adj<0x3e0)&&(y_avrg_adj<0x3e0))||(x_avrg_bak>0x3af)||(y_avrg_bak>0x3af)||(x_avrg_bak<0x6f)||(y_avrg_bak<0x6f));
x_add_lr = x_avrg_bak;
y_add_lr = y_avrg_bak;
fIHL_xStep = fnIHL_GetXStep(x_add_ul,x_add_lr);
fIHL_yStep = fnIHL_GetYStep(y_add_ul,y_add_lr);
fnIHL_TpMapping();
fnIHL_DlcdShowCoordinate(19,19,0xf0f0);
//fnIHL_Run16Timer(IAL_T16P_PRUN2_ADDR);
// clr_flg(GUI_EVENTID,0x0);
fnIHL_EnableTpInt();
*/
}
/******************************************************************
* FUNCTION: fnIHL_ReadMouse
*
* PURPOSE:
* read touchpad dot data
*
* PARAMETERS
* Input:
* Output:
* *buttons no means
* *x x value of the mouse move
* *y y value of the mouse move
* InOut:
*
* Return value:
* IAL_NODATA(0) no data
* IAL_DATAREAD(1) success
*
* Reentrant : No
*****************************************************************/
T_EXTERN T_BOOL IsPenDown;
T_WORD fnIHL_ReadMouse( T_WORD *buttons, T_WORD *xPos, T_WORD *yPos)
{
T_MODULE T_WORD xBefore = 0,yBefore = 0;
T_MODULE T_BOOL IsErrorDownData = FALSE;
T_UHWORD tempx = 0,tempy = 0;
fnIHL_GetPenPoint(&tempy, &tempx);
if( (tempy>=2)&&(tempy<=159)&&(tempx>=2)&&(tempx<=119) )
{
if( IsPenDown && (xBefore == tempx) && (yBefore == tempy) )/*if pen down but not moved*/
return IAL_NODATA;
*buttons = IAL_MOUSE_LEFTBUTTON;
*xPos = tempx;
*yPos = tempy;
xBefore = *xPos;
yBefore = *yPos;
IsPenDown = TRUE;
IsErrorDownData = FALSE;
return IAL_DATAREAD;
}
if( (tempy<=1)||(tempy>=160)||(tempx<=1)||(tempx>=120) )
{
if(!IsPenDown)/*if pen down but get error x,y coor*/
{
IsPenDown = TRUE;
IsErrorDownData = TRUE;
return IAL_NODATA;
}
if(IsErrorDownData)/*if get error x,y last time when pen down,so return IAL_NODATA*/
{
IsPenDown = FALSE;
fnIHL_EnableTpInt();
return IAL_NODATA;
}
*buttons = IAL_MOUSE_NOBUTTONDOWN;
*xPos = xBefore;
*yPos = yBefore;
xBefore = 0;
yBefore = 0;
IsPenDown = FALSE;
fnIHL_EnableTpInt();
return IAL_DATAREAD;
}
return IAL_NODATA;
}
/******************************************************************
* FUNCTION: fnIHL_InitKeyboard
*
* PURPOSE:
* initialize key hardware
*
* PARAMETERS
* Input:
* Output:
* InOut:
*
* Return value:
*
* Reentrant : No
*****************************************************************/
extern unsigned short bKeyStatus;
T_VOID fnIHL_InitKeyboard(T_VOID)
{
fnIHL_InitKey();
bKeyStatus = 0;
//set key input0 interrupt enable
*(volatile unsigned char *)INT_EP0_EK_ADDR |=INT_EK0;
}
/******************************************************************
* FUNCTION: fnIHL_ReadKeyboard
*
* PURPOSE:
* read scancode of the key
*
* PARAMETERS
* Input:
* Output:
* *scancode data of the scancode
* InOut:
*
* Return value:
* IAL_NODATA(0) no
* IAL_DATAREAD(1) success
*
* Reentrant : No
*****************************************************************/
T_EXTERN unsigned short IsKeyDown;
T_WORD fnIHL_ReadKeyboard(T_BYTE *ScanCode)
{
*ScanCode = ubIHL_K5Data;
IsKeyDown = bKeyStatus;
enable_key();
return IAL_DATAREAD;
}
/******************************************************************
* FUNCTION: Write_keyboard
*
* PURPOSE:
* write command word to key port
*
* PARAMETERS
* Input:
* cmd key command word
* Output:
* InOut:
*
* Return value:
*
* Reentrant : No
*****************************************************************/
T_VOID fnIHL_WriteKeyboard (T_UWORD cmd)
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -