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

📄 pendrv.c

📁 一个操作系统源代码 用于嵌入式设备 在Vc++环境下仿真 成功移植到多款处理器上
💻 C
字号:
/***************************************************************************************\
 *
 * Copyright (c) 2001 National ASIC Center, All Rights Reserved
 *
 * File Name	:	pendrv.c
 * Version		:	1.0
 * Programmer	:	longn_qi
 * 
 * Date of Creation:	2001/11/01
 * Date of Last Modify:	2001/11/01
 *
 * Description:	This is an application file for simulating pen interrupt buffer with read
 *				and write operations.
 *
 * Local Function List:
 * void InitPenIntBuf( )
 * unsigned char WritePenIntBuf( PENDATA *pPenData )
 * unsigned char ReadPenIntBuf( PENDATA *pPenData )
 *
 * Global Variable List:
 *
 * Note:		Further file description refers to simdrv.txt
 *
 ***************************************************************************************
 *
 * Modification History
 * 
 * 2001/11/01		by longn_qi		create file.
 *
\***************************************************************************************/
/* System and Standard Header */
#include <string.h>

/* Application Header */
#include <sys\pen.h>
#include <intmsg.h>
#include <intdef.h>

/* Local Macro Definition */
//#define MAX_PENBUF	20

/* External Variable */
// import
__declspec( dllimport ) PENDATA	pen;

/* Static Variable */
PENDATA 		PEN_BUF[ MAX_PENBUF ];
unsigned char 	PEN_BUF_writecount;
unsigned char 	PEN_BUF_readcount; 

/* Local Defined Function */
//////////////////////////////////////////////////////////////
//  Function Name: InitPenIntBuf
//  Param In:					Param Description	
//		None
//								
//  Return Type:				Result Code Description
//		void																								
//  Description: Initial pen interrupt buffer
//////////////////////////////////////////////////////////////
void InitPenIntBuf( )
{
    memset(PEN_BUF,0,sizeof(PENDATA) * MAX_PENBUF);

	PEN_BUF_writecount = 0;
	PEN_BUF_readcount = 0; 
	
	return;
}
	
//////////////////////////////////////////////////////////////
//  Function Name: WritePenIntBuf
//  Param In:					Param Description	
//		PENDATA *pPenData		pointer to a pen interrupt
//								structure
//								
//  Return Type:				Result Code Description
//		unsigned char			BUF_FULL	pen buffer is full				
//								NEGLECT		neglect pen interrupt
//								SUCCESS		write to pen buffer
//											successfully
//  Description: Write pen interrupt buffer.
//////////////////////////////////////////////////////////////	
unsigned char WritePenIntBuf( PENDATA *pPenData )
{
	unsigned char	nextPenWriteCount,prevPenWriteCount;
	
	nextPenWriteCount = ( PEN_BUF_writecount+1 )%MAX_PENBUF;
	prevPenWriteCount = ( PEN_BUF_writecount-1 + MAX_PENBUF )%MAX_PENBUF;
	
	// buffer full
	if( nextPenWriteCount == PEN_BUF_readcount )
		return BUF_FULL;
			
	// distinguish pen interrupt
	switch( PEN_BUF[prevPenWriteCount].flag )
	{
		case SM_PENDOWN:
		case SM_PENMOVE:
			if( pen.flag != PENUP )
				PEN_BUF[PEN_BUF_writecount].flag = SM_PENMOVE;
			else
				PEN_BUF[PEN_BUF_writecount].flag = SM_PENUP;
			break;
		case SM_PENUP:
			if( pen.flag != PENUP )
				PEN_BUF[PEN_BUF_writecount].flag = SM_PENDOWN;
			else
				return NEGLECT; // ignore contiuous pen up message
			break;
		default:
			PEN_BUF[PEN_BUF_writecount].flag = SM_PENUP; // for initial
	}
	PEN_BUF[PEN_BUF_writecount].x = pen.x;
	PEN_BUF[PEN_BUF_writecount].y = pen.y;
	PEN_BUF_writecount = nextPenWriteCount;

	return SUCCESS;
}

//////////////////////////////////////////////////////////////
//  Function Name: ReadPenIntBuf
//  Param In:					Param Description	
//		PENDATA *pPenData		pointer to a pen interrupt
//								structure for storing pen data
//								read from key buffer.
//								
//  Return Type:				Result Code Description
//		unsigned char			BUF_EMPTY	pen buffer is empty				
//								SUCCESS		read pen buffer
//											successfully
//  Description: Read pen Interrupt buffer
//////////////////////////////////////////////////////////////	
unsigned char ReadPenIntBuf( PENDATA *pPenData )
{

	if( PEN_BUF_readcount == PEN_BUF_writecount ) // buffer empty
		return BUF_EMPTY;
	
	pPenData->x = PEN_BUF[ PEN_BUF_readcount ].x;
	pPenData->y = PEN_BUF[ PEN_BUF_readcount ].y;
	pPenData->flag = PEN_BUF[ PEN_BUF_readcount ].flag;

	PEN_BUF_readcount++;
	if( PEN_BUF_readcount >= MAX_PENBUF ) PEN_BUF_readcount = 0;

	return SUCCESS;
}

//////////////////////////////////////////////////////////////
//  Function Name: CheckPenIntBuf
//  Param In:					Param Description	
//	None
//								
//  Return Type:				Result Code Description
//		unsigned char			BUF_EMPTY	pen buffer is empty.
//								BUF_FULL	pen buffer is full.
//								BUF_NORMAL	pen buffer is readable
//											and writable.
//
//  Description: Check pen interrupt buffer status.
//////////////////////////////////////////////////////////////	
unsigned char CheckPenIntBuf(  )
{

	unsigned char	nextPenWriteCount;


	if( PEN_BUF_readcount == PEN_BUF_writecount ) // buffer empty
		return BUF_EMPTY;

	nextPenWriteCount = ( PEN_BUF_writecount+1 )%MAX_PENBUF;	
	if( nextPenWriteCount == PEN_BUF_readcount ) // buffer full
		return BUF_FULL;

	return BUF_NORMAL;
}	

void PenEnable(void)
{
//	TK_Scan_Start();
}

void PenDisable(void)
{
//	TK_Scan_Stop();
}

void TouchPanelHandler(void)
{
}

⌨️ 快捷键说明

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