Пример #1
0
static VOID
TSP_PowerOff(VOID)
{
	TSPMSG((_T("[TSP] ++TSP_PowerOff()\r\n")));

	TSP_SampleStop();

	//-----------------------------------------------
	// To prevent touch locked after wake up !!!
	// Wait for ADC Done
	// Do not turn off ADC before its A/D conversion finished
	EnterCriticalSection(&g_csTouchADC);
	// ADC Done..
	LeaveCriticalSection(&g_csTouchADC);

	g_pADCReg->ADCTSC = UD_SEN_DOWN | YM_SEN_EN | YP_SEN_DIS | XM_SEN_DIS | XP_SEN_DIS | PULL_UP_DIS | AUTO_PST_DIS | XY_PST_NOP;

	TSPMSG((_T("[TSP] --TSP_PowerOff()\r\n")));
}
Пример #2
0
static VOID
TSP_PowerOff(VOID)
{
    TSPMSG((_T("[TSP] ++TSP_PowerOff()\r\n")));

    TSP_SampleStop();

    // To prevent touch locked after wake up,
    // Wait for ADC Done
    // Do not turn off ADC before its A/D conversion finished
    EnterCriticalSection(&g_csTouchADC);
    // ADC Done in TSP_GETXy()..
    LeaveCriticalSection(&g_csTouchADC);

    g_pADCReg->ADCTSC = UD_SEN_DOWN | YM_SEN_EN | YP_SEN_DIS | XM_SEN_DIS | XP_SEN_DIS | PULL_UP_DIS | AUTO_PST_DIS | XY_PST_NOP;

    // ADC Standby Mode, conversion data will be preserved.
    g_pADCReg->ADCCON |= STDBM_STANDBY; 

    TSPMSG((_T("[TSP] --TSP_PowerOff()\r\n")));
}
Пример #3
0
VOID
DdsiTouchPanelGetPoint(TOUCH_PANEL_SAMPLE_FLAGS *pTipState, INT *pUncalX, INT *pUncalY)
{
	static int PrevX=0;
	static int PrevY=0;
	int TmpX = 0;
	int TmpY = 0;

	//TSPMSG((_T("[TSP] ++DdsiTouchPanelGetPoint()\r\n")));

	if (g_pVIC1Reg->VICRAWINTR & (1<<(PHYIRQ_PENDN-VIC1_BIT_OFFSET)))		// gIntrTouch Interrupt Case
	{
		//TSPMSG((_T("[TSP] gIntrTouch(PHYIRQ_PENDN) Case\r\n")));

		*pTipState = TouchSampleValidFlag;

		if ((g_pADCReg->ADCDAT0 & D_UPDOWN_UP)
			|| (g_pADCReg->ADCDAT1 & D_UPDOWN_UP))
		{
			//TSPMSG((_T("[TSP] Pen Up\r\n")));

			g_bTSP_DownFlag = FALSE;

			g_pADCReg->ADCTSC = ADCTSC_WAIT_PENDOWN;

			*pUncalX = PrevX;
			*pUncalY = PrevY;

			TSP_SampleStop();
		}
		else
		{
			//TSPMSG((_T("[TSP] Pen Down\r\n")));

			g_bTSP_DownFlag = TRUE;

			g_pADCReg->ADCTSC = ADCTSC_WAIT_PENUP;

			*pTipState |= TouchSampleIgnore;

			*pUncalX = PrevX;
			*pUncalY = PrevY;

			*pTipState |= TouchSampleDownFlag;

			TSP_SampleStart();
		}

		g_pADCReg->ADCCLRWK = CLEAR_ADCWK_INT;

		InterruptDone(gIntrTouch);		// Not handled in MDD
	}
	else// if (g_pVIC0Reg->VICRAWINTR & (1<<(PHYIRQ_TIMER3)))		// gIntrTouchTimer Interrupt Case
	{
		//TSPMSG((_T("[TSP] gIntrTouchChanged(PHYIRQ_TIMER3) Case\r\n")));

		// Check for Pen-Up case on the event of timer3 interrupt
		if ((g_pADCReg->ADCDAT0 & D_UPDOWN_UP)
			|| (g_pADCReg->ADCDAT1 & D_UPDOWN_UP))
		{
			//TSPMSG((_T("[TSP] Pen Up +\r\n")));

			g_bTSP_DownFlag = FALSE;

			g_pADCReg->ADCTSC = ADCTSC_WAIT_PENDOWN;

			*pUncalX = PrevX;
			*pUncalY = PrevY;

			*pTipState = TouchSampleValidFlag;

			TSP_SampleStop();
		}
		else if (g_bTSP_DownFlag)
		{
			if (TSP_GetXY(&TmpX, &TmpY) == TRUE)
			{
				//TSP_TransXY(&TmpX, &TmpY);

				if(Touch_Pen_Filtering(&TmpX, &TmpY))
				{
					*pTipState = TouchSampleValidFlag | TouchSampleDownFlag;
					*pTipState &= ~TouchSampleIgnore;
				}
				else		// Invalid touch pen
				{
					*pTipState = TouchSampleValidFlag;
					*pTipState |= TouchSampleIgnore;
				}

				*pUncalX = PrevX = TmpX;
				*pUncalY = PrevY = TmpY;

				g_pADCReg->ADCTSC = ADCTSC_WAIT_PENUP;

				//TSPMSG((_T("[TSP] UncalX = %d, UncalY = %d\r\n"), *pUncalX,*pUncalY));
			}
			else
			{
				*pTipState = TouchSampleIgnore;
			}
		}
		else
		{
			TSPERR((_T("[TSP] Unknown State\r\n")));

			*pTipState = TouchSampleIgnore;
			TSP_SampleStop();
		}

		// timer3 interrupt status clear
		//g_pPWMReg->TINT_CSTAT |= (1<<8);		// Do not use OR/AND operation on TINTC_CSTAT
		g_pPWMReg->TINT_CSTAT = TINT_CSTAT_INTMASK(g_pPWMReg->TINT_CSTAT) | TIMER3_PENDING_CLEAR;

		InterruptDone(gIntrTouchChanged);		// Not Handled in MDD
	}

	//TSPMSG((_T("[TSP] --DdsiTouchPanelGetPoint()\r\n")));
}