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

📄 tchpdd.cpp

📁 三星2410 Windows CE 4.2 触摸屏驱动源码。适合所有以S3C2410X为主芯片开发的平台。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/* :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
/* :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */

PUBLIC BOOL
DdsiTouchPanelGetDeviceCaps(INT	iIndex, LPVOID  lpOutput)
{
	RETAILMSG(0, (TEXT("::: DdsiTouchPanelGetDeviceCaps\r\n")));

	if ( lpOutput == NULL )
	{
		ERRORMSG(1, (__TEXT("TouchPanelGetDeviceCaps: invalid parameter.\r\n")));
		SetLastError(ERROR_INVALID_PARAMETER);
		DebugBreak();
		return FALSE;
	}

	switch	( iIndex )
	{
	case TPDC_SAMPLE_RATE_ID:
		{
			TPDC_SAMPLE_RATE	*pTSR = (TPDC_SAMPLE_RATE*)lpOutput;
			RETAILMSG(0, (TEXT("TouchPanelGetDeviceCaps::TPDC_SAMPLE_RATE_ID\r\n")));

			pTSR->SamplesPerSecondLow      = TSP_SAMPLE_RATE_LOW;
			pTSR->SamplesPerSecondHigh     = TSP_SAMPLE_RATE_HIGH;
			pTSR->CurrentSampleRateSetting = TSP_CurRate;
		}
		break;

	case TPDC_CALIBRATION_POINT_COUNT_ID:
		{
			TPDC_CALIBRATION_POINT_COUNT *pTCPC = (TPDC_CALIBRATION_POINT_COUNT*)lpOutput;
			RETAILMSG(0, (TEXT("TouchPanelGetDeviceCaps::TPDC_CALIBRATION_POINT_COUNT_ID\r\n")));

			pTCPC->flags              = 0;
			pTCPC->cCalibrationPoints = 5;
		}
		break;

	case TPDC_CALIBRATION_POINT_ID:
		RETAILMSG(0, (TEXT("TouchPanelGetDeviceCaps::TPDC_CALIBRATION_POINT_ID\r\n")));
		return(TSP_CalibrationPointGet((TPDC_CALIBRATION_POINT*)lpOutput));

	default:
		ERRORMSG(1, (__TEXT("TouchPanelGetDeviceCaps: invalid parameter.\r\n")));
		SetLastError(ERROR_INVALID_PARAMETER);
		DebugBreak();
		return FALSE;

	}

	return TRUE;
}

/* :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
/* :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
PUBLIC BOOL
DdsiTouchPanelSetMode(INT iIndex, LPVOID  lpInput)
{
    BOOL  ReturnCode = FALSE;

	RETAILMSG(0, (TEXT("::: DdsiTouchPanelSetMode()\r\n")));

    switch ( iIndex )
    {
	case TPSM_SAMPLERATE_LOW_ID:
	case TPSM_SAMPLERATE_HIGH_ID:
		SetLastError( ERROR_SUCCESS );
		ReturnCode = TRUE;
		break;

	default:
		SetLastError( ERROR_INVALID_PARAMETER );
		break;
    }


    return ( ReturnCode );
}

/* :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
/* :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */

PUBLIC BOOL
DdsiTouchPanelEnable(VOID)
{
    BOOL r;

	RETAILMSG(0, (TEXT("::: DdsiTouchPanelEnable()\r\n")));

	r = TSP_VirtualAlloc();

	if (r) 
	{
		TSP_PowerOn();
	}

    return r;
}



/* :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
/* :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */

PUBLIC VOID
DdsiTouchPanelDisable(VOID)
{
	RETAILMSG(0, (TEXT("::: DdsiTouchPanelDisable()\r\n")));
    if (v_pADCregs) 
	{
	    TSP_PowerOff();
		TSP_VirtualFree();
	}
}

/* :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
/* :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */

LONG
DdsiTouchPanelAttach(VOID)
{
    return (0);
}


LONG
DdsiTouchPanelDetach(VOID)
{
    return (0);
}


/* :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
/* :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
PUBLIC VOID
DdsiTouchPanelPowerHandler(BOOL	bOff)
{
	RETAILMSG(0, (TEXT("::: DdsiTouchPanelPowerHandler()\r\n")));
    if (bOff)
	{
        TSP_PowerOff();
    }
    else
	{
        TSP_PowerOn();
    }
}


/* :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
/* :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */



PUBLIC VOID
DdsiTouchPanelGetPoint(TOUCH_PANEL_SAMPLE_FLAGS	* pTipStateFlags,
					   INT	* pUncalX,
					   INT	* pUncalY)
{
	static INT x, y;

	//DEBUGMSG(1, (TEXT("::: DdsiTouchPanelGetPoint()\r\n")));

	if (v_pINTregs->rSUBSRCPND & BIT_SUB_TC)		/* SYSINTR_TOUCH Interrupt Case				*/
	{
		*pTipStateFlags = TouchSampleValidFlag;

		if ( (v_pADCregs->rADCDAT0 & (1 << 15)) |
			 (v_pADCregs->rADCDAT1 & (1 << 15)) )
		{
			bTSP_DownFlag = FALSE;

			DEBUGMSG(ZONE_TIPSTATE, (TEXT("up\r\n")));

			v_pADCregs->rADCTSC &= 0xff;

			*pUncalX = x;
			*pUncalY = y;

			TSP_SampleStop();
		}
		else 
		{
			bTSP_DownFlag = TRUE;

			if (!TSP_GetXY(&x, &y)) 
				*pTipStateFlags = TouchSampleIgnore;

			TSP_TransXY(&x, &y);

			*pUncalX = x;
			*pUncalY = y;

			*pTipStateFlags |= TouchSampleDownFlag;

			DEBUGMSG(ZONE_TIPSTATE, (TEXT("down %x %x\r\n"), x, y));

			TSP_SampleStart();
		}

		v_pINTregs->rSUBSRCPND  =  BIT_SUB_TC;
		v_pINTregs->rINTSUBMSK &= ~BIT_SUB_TC;

		InterruptDone(gIntrTouch);
	}
	else		/* SYSINTR_TOUCH_CHANGED Interrupt Case		*/
	{
//		TSP_SampleStart();
		
		if (bTSP_DownFlag)
		{
			INT  tx, ty;
			INT  dx, dy;

			if (!TSP_GetXY(&tx, &ty)) 
				*pTipStateFlags = TouchSampleIgnore;
			else 
			{
				TSP_TransXY(&tx, &ty);
// insert by mostek@dstcorp.com
#define X_ERRV	0x3bf
#define Y_ERRV	0x4ff

				if ((tx == X_ERRV) && (ty == Y_ERRV))
				{
					tx = x;
					ty = y;
				} 
// =================== mostek
				dx = (tx > x) ? (tx - x) : (x - tx);
				dy = (ty > y) ? (ty - y) : (y - ty);

				if (dx > TSP_CHANGE || dy > TSP_CHANGE)
				{
					*pUncalX = x = tx;
					*pUncalY = y = ty;

					DEBUGMSG(ZONE_TIPSTATE, (TEXT("down-c-v %x %x\r\n"), x, y));

					*pTipStateFlags = TouchSampleValidFlag | TouchSampleDownFlag;
				}
				else
				{
					*pUncalX = x;
					*pUncalY = y;

					DEBUGMSG(ZONE_TIPSTATE, (TEXT("down-c %x %x\r\n"), x, y));

					*pTipStateFlags = TouchSampleIgnore;
				}
			}
		}
		else
		{
			*pTipStateFlags = TouchSampleIgnore;

			TSP_SampleStop();
		}

		InterruptDone(gIntrTouchChanged);
	}
}

#if 0
PUBLIC VOID
DdsiTouchPanelGetPoint(TOUCH_PANEL_SAMPLE_FLAGS	* pTipStateFlags,
					   INT						* pUncalX,
					   INT						* pUncalY)
{
	static INT x, y;

	//RETAILMSG(0, (TEXT("::: DdsiTouchPanelGetPoint()\r\n")));

	if (v_pINTregs->rSUBSRCPND & BIT_SUB_TC)		/* SYSINTR_TOUCH Interrupt Case				*/
	{
		*pTipStateFlags = TouchSampleValidFlag;

		if (v_pADCregs->rADCTSC & (1 << 8))
		{
			bTSP_DownFlag = FALSE;

			RETAILMSG(0, (TEXT("up\r\n")));

			v_pADCregs->rADCTSC &= 0xff;

			*pUncalX = x;
			*pUncalY = y;

			TSP_SampleStop();
		}
		else 
		{
			bTSP_DownFlag = TRUE;

			if (!TSP_GetXY(&x, &y)) 
				*pTipStateFlags = TouchSampleIgnore;

			TSP_TransXY(&x, &y);

			*pUncalX = x;
			*pUncalY = y;

			*pTipStateFlags |= TouchSampleDownFlag;

			RETAILMSG(0, (TEXT("down %x %x\r\n"), x, y));

			TSP_SampleStart();
		}

		v_pINTregs->rSUBSRCPND  =  BIT_SUB_TC;
		v_pINTregs->rINTSUBMSK &= ~BIT_SUB_TC;

		InterruptDone(gIntrTouch);
	}
	else											/* SYSINTR_TOUCH_CHANGED Interrupt Case		*/
	{
//		TSP_SampleStart();
		
		if (bTSP_DownFlag)
		{
			INT  tx, ty;
			INT  dx, dy;

			if (!TSP_GetXY(&tx, &ty)) 
				*pTipStateFlags = TouchSampleIgnore;
			else 
			{
				TSP_TransXY(&tx, &ty);

				dx = (tx > x) ? (tx - x) : (x - tx);
				dy = (ty > y) ? (ty - y) : (y - ty);

				if (dx > TSP_CHANGE || dy > TSP_CHANGE)
				{
					*pUncalX = x = tx;
					*pUncalY = y = ty;

					RETAILMSG(0, (TEXT("down-c-v %x %x\r\n"), x, y));

					*pTipStateFlags = TouchSampleValidFlag | TouchSampleDownFlag;
				}
				else
				{
					*pUncalX = x;
					*pUncalY = y;

					RETAILMSG(0, (TEXT("down-c %x %x\r\n"), x, y));

					*pTipStateFlags = TouchSampleIgnore;
				}
			}
		}
		else
		{
			*pTipStateFlags = TouchSampleIgnore;

			TSP_SampleStop();
		}

		InterruptDone(gIntrTouchChanged);
	}
}

#endif

⌨️ 快捷键说明

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