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

📄 guiihl.c

📁 一款SmartPhone的驱动代码
💻 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 + -