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"))); }
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"))); }
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"))); }