亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? s3c2410x_touch.cpp

?? MagicARM2410的BSP包,增加了AD,CAN,PCCARD驅動,串口驅動3個
?? CPP
?? 第 1 頁 / 共 3 頁
字號:

    if (*px  <        0) *px = 0;
    if (*px >= TSP_LCDX) *px = TSP_LCDX - 1;

    if (*py  <        0) *py = 0;
    if (*py >= TSP_LCDY) *py = TSP_LCDY - 1;

	RETAILMSG(1, (TEXT("after change px : %d\r\n"), *px));
	RETAILMSG(1, (TEXT("after change py : %d\r\n"), *py));
}

PRIVATE BOOL
TSP_GetXY(INT *px, INT *py)
{
    INT i;
    INT x, y;

	DWORD a = 0, b = 0;

    for (i = 0; i < TSP_SAMPLE_NUM; i++)
    {
        v_pADCregs->ADCTSC =    (0      <<  8) |        /* UD_Sen								*/
                                (1      <<  7) |        /* YMON  1 (YM = GND)					*/
                                (1      <<  6) |        /* nYPON 1 (YP Connected AIN[n])		*/
                                (0      <<  5) |        /* XMON  0 (XM = Z)						*/
                                (1      <<  4) |        /* nXPON 1 (XP = AIN[7])				*/
                                (1      <<  3) |        /* Pull Up Enable						*/
                                (1      <<  2) |        /* Auto ADC Conversion Mode				*/
                                (0      <<  0);         /* No Operation Mode					*/

        v_pADCregs->ADCCON |= (1 << 0);					/* Start Auto conversion				*/

        while (v_pADCregs->ADCCON & 0x1);               /* check if Enable_start is low			*/
        while (!(v_pADCregs->ADCCON & (1 << 15)));      /* Check ECFLG							*/

		y = (0x3ff & v_pADCregs->ADCDAT0);				/* modified for MagicARM2410 */
        x = (0x3ff & v_pADCregs->ADCDAT1);
		
		xbuf[i] = x;
		ybuf[i] = y;

		//RETAILMSG(1, (TEXT("last (x,y) = (%d, %d)\r\n"), x, y));	
		//Sleep(1);
	}

    v_pADCregs->ADCTSC =    (1      <<  8) |            /* UD_Sen								*/
                            (1      <<  7) |            /* YMON  1 (YM = GND)					*/
                            (1      <<  6) |            /* nYPON 1 (YP Connected AIN[n])		*/
                            (0      <<  5) |            /* XMON  0 (XM = Z)						*/
                            (1      <<  4) |            /* nXPON 1 (XP = AIN[7])				*/
                            (0      <<  3) |            /* Pull Up Disable						*/
                            (0      <<  2) |            /* Normal ADC Conversion Mode			*/
                            (3      <<  0);             /* Waiting Interrupt					*/

	return TRUE;
}

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

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;
    UINT32 Irq;
    PROCESSOR_INFO procInfo;

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

    r = TSP_VirtualAlloc();

    // Obtain sysintr values from the OAL for the touch and touch changed interrupts.
    //
    Irq = IRQ_ADC;
    if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &Irq, sizeof(UINT32), &gIntrTouch, sizeof(UINT32), NULL))
    {
        RETAILMSG(1, (TEXT("ERROR: Failed to request the touch sysintr.\r\n")));
        gIntrTouch = SYSINTR_UNDEFINED;
        return(FALSE);
    }
    Irq = IRQ_TIMER3;
    if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &Irq, sizeof(UINT32), &gIntrTouchChanged, sizeof(UINT32), NULL))
    {
        RETAILMSG(1, (TEXT("ERROR: Failed to request the touch changed sysintr.\r\n")));
        gIntrTouchChanged = SYSINTR_UNDEFINED;
        return(FALSE);
    }

    // Get the processor's pclk frequency.
    //
    if (!KernelIoControl(IOCTL_PROCESSOR_INFORMATION, NULL, 0, &procInfo, sizeof(PROCESSOR_INFO), NULL))
    {
        DEBUGMSG(1, (TEXT("WARNING: Touch driver failed to obtain processor frequency - using default value(%d Hz).\r\n"), g_s3c2410_pclk));
    }
    else
    {
        g_s3c2410_pclk = procInfo.dwClockSpeed;
        DEBUGMSG(1, (TEXT("INFO: Touch driver using processor frequency reported by the OAL (%d Hz).\r\n"), g_s3c2410_pclk));
    }

    // Compute the OS timer frequency and number of pen-down sampling ticks.
    //
    g_timer3_freq        = (g_s3c2410_pclk / TIMER3_DIVIDER);
    g_timer3_sampleticks = (g_timer3_freq / TSP_SAMPLE_RATE_LOW);

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


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

#define NUMBER_SAMPLES_PER_POINT    3

//
// Digitizer related definitions.
//

//
// @doc INTERNAL DRIVERS PDD TOUCH_PANEL
// @const ULONG | DELTA_X_COORD_VARIANCE |
// Maximum allowed variance in the X coordinate samples.
//

#define DELTA_X_COORD_VARIANCE          0x8

//
// @doc INTERNAL DRIVERS PDD TOUCH_PANEL
// @const ULONG | DELTA_Y_COORD_VARIANCE |
// Maximum allowed variance in the X coordinate samples.
//

#define DELTA_Y_COORD_VARIANCE          0x10


typedef struct 
{
    USHORT XSample;     //@field X Coordinate.
    USHORT YSample;     //@field Y Coordinate.

} TOUCHPANEL_POINT_SAMPLE, *PTOUCHPANEL_POINT_SAMPLE;

typedef TOUCHPANEL_POINT_SAMPLE TOUCHPANEL_POINT_SAMPLES[ NUMBER_SAMPLES_PER_POINT ];


/*++
    @doc IN_TOUCH_DDSI INTERNAL DRIVERS PDD TOUCH_PANEL

    @func VOID | PddpTouchPanelGetSamples |
    Copies from the pen dma area the most recent point sample into the location
    pointed to by pPointSamples.  During the copy the sample information is
    adjusted to be consistent with the 12 bit pen data format.
    Has the side effect of reinitializing ioPenPointer if we are near the
    end of the pen sample area.
--*/
static
void
PddpTouchPanelGetSamples(
    PTOUCHPANEL_POINT_SAMPLE pPointSamples //@PARM Pointer to where the samples will be stored.
    )
{
    ULONG   irg;

    //
    // Copy the samples to our buffer munging the data for the 12 bit
    //  pen data format.
    //

    for ( irg = 0; irg < NUMBER_SAMPLES_PER_POINT; irg++ )
    {
        pPointSamples[ irg ].XSample = xbuf[irg];
        pPointSamples[ irg ].YSample = ybuf[irg];
    }
}


/*++

Routine Description:

    Gathers the most recent sample and evaluates the sample returing
    the determined tip state and the `best guess' for the X and Y coordinates.

    Note: Determined empirically that the variance of the X coordinate of the
          first sample from all other samples is large enough that in order
          to keep the nominal variance small, we discard the first sample.

          Cases of a light touch that locks the ADC into
          seeing X and Y coordinate samples of 0x277 regardless of how the pen
          moves or presses have been seen. XXXXX


Arguments:

    pTipState   Pointer to where the tip state information will be returned.

    pUnCalX     Pointer to where the x coordinate will be returned.

    pUnCalY     Pointer to where the y coordinate will be returned.

Return Value:

    None.

Autodoc Information:

    @doc IN_TOUCH_DDI INTERNAL DRIVERS PDD TOUCH_PANEL

    @func VOID | PddpTouchPanelEvaluateSamples |
    Gathers the most recent sample and evaluates the sample returing
    the determined tip state and the `best guess' for the X and Y coordinates.

--*/
static
void
PddpTouchPanelEvaluateSamples(
    TOUCH_PANEL_SAMPLE_FLAGS	*pSampleFlags, //@PARM Pointer to where the tip state information will be returned.
    INT							*pUncalX,      //@PARM Pointer to where the x coordinate will be returned.
	INT							*pUncalY       //@PARM Pointer to where the y coordinate will be returned.

    )
{
    LONG    dlXDiff0;
    LONG    dlXDiff1;
    LONG    dlXDiff2;
    LONG    dlYDiff0;
    LONG    dlYDiff1;
    LONG    dlYDiff2;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本强好片久久久久久aaa| 国产午夜精品一区二区三区嫩草| 亚洲码国产岛国毛片在线| 成人综合在线网站| 综合中文字幕亚洲| 欧美亚洲愉拍一区二区| 亚洲综合丁香婷婷六月香| 欧洲人成人精品| 亚洲国产精品久久人人爱| 91精品国产色综合久久不卡蜜臀| 日本不卡在线视频| 精品国产精品一区二区夜夜嗨| 国产一区二区三区久久悠悠色av| 国产精品网站一区| 欧美色网一区二区| 久久精品国产免费看久久精品| 久久日韩粉嫩一区二区三区| www.成人在线| 亚洲综合区在线| 欧美xxxx老人做受| 暴力调教一区二区三区| 亚洲精品v日韩精品| 日韩一区二区三区电影在线观看| 国产乱对白刺激视频不卡| 1区2区3区精品视频| 欧美精品三级在线观看| 国产成人综合在线| 亚洲一区在线看| 欧美电影免费观看高清完整版在线观看 | 亚洲国产精品久久久久婷婷884| 欧美精品久久久久久久久老牛影院| 久久精品国产99久久6| 国产精品久久久久久久久果冻传媒| 在线观看中文字幕不卡| 久久国产精品一区二区| 成人免费一区二区三区在线观看| 欧美一区二区啪啪| 成人黄色av网站在线| 视频一区视频二区中文字幕| 国产拍欧美日韩视频二区| 欧美日韩中文字幕精品| 国产精品一区二区久久精品爱涩| 亚洲精品成人少妇| 国产婷婷色一区二区三区四区 | 国产乱人伦偷精品视频免下载| 亚洲欧美日韩系列| 久久久久国产一区二区三区四区| 欧美性生活一区| 欧美人狂配大交3d怪物一区| 国产精品123| 日韩av一区二区在线影视| 亚洲日穴在线视频| 国产午夜精品理论片a级大结局| 7777精品伊人久久久大香线蕉超级流畅| 国产精品99久久久久久久vr| 免费在线观看一区| 亚洲第一福利一区| 亚洲另类色综合网站| 中文一区在线播放| 久久一夜天堂av一区二区三区| 欧美色综合久久| 一本一道久久a久久精品| 成人丝袜高跟foot| 国产伦精品一区二区三区免费| 亚洲bt欧美bt精品777| 亚洲精品成人天堂一二三| 国产精品久久福利| 中文字幕二三区不卡| 久久在线观看免费| 精品福利视频一区二区三区| 日韩欧美国产一区在线观看| 91精品国产综合久久久久久久| 欧美日韩色综合| 在线精品国精品国产尤物884a| 91天堂素人约啪| 91伊人久久大香线蕉| a在线播放不卡| 99精品一区二区三区| 成人国产在线观看| a4yy欧美一区二区三区| 成人国产一区二区三区精品| aaa亚洲精品| 91在线观看高清| 欧美伊人精品成人久久综合97| 欧美日韩中字一区| 日韩女优av电影| 日韩欧美国产一区二区在线播放| 日韩欧美一区在线观看| 精品国产区一区| 久久久久久久综合色一本| 国产视频一区二区在线观看| 亚洲国产成人在线| 亚洲免费在线播放| 亚洲成av人片在www色猫咪| 亚洲午夜久久久久中文字幕久| 水野朝阳av一区二区三区| 秋霞成人午夜伦在线观看| 韩国v欧美v日本v亚洲v| 国产成人aaa| 一本久久精品一区二区| 欧美日韩成人高清| 欧美不卡123| 国产精品免费久久| 一区二区三区.www| 麻豆91免费观看| 成人久久久精品乱码一区二区三区| 色一情一乱一乱一91av| 91精品欧美综合在线观看最新| 精品噜噜噜噜久久久久久久久试看| 久久久久99精品国产片| 亚洲欧美在线高清| 免费不卡在线视频| 99国产一区二区三精品乱码| 欧美亚洲综合另类| 久久久高清一区二区三区| 亚洲精品免费一二三区| 免费观看一级欧美片| 丁香激情综合国产| 欧美日韩亚洲另类| 国产精品少妇自拍| 日精品一区二区| 日韩一二三四区| 国产精品国产自产拍高清av| 视频一区二区中文字幕| 丁香婷婷综合激情五月色| 欧美日韩免费视频| 国产亚洲一本大道中文在线| 亚洲一区二区三区中文字幕 | 污片在线观看一区二区| 国产一区二区伦理| 欧美日韩国产一区| 中文欧美字幕免费| 久久97超碰国产精品超碰| 色婷婷久久久久swag精品| 久久麻豆一区二区| 亚洲妇女屁股眼交7| 成人免费毛片a| 日韩精品一区二区三区三区免费 | 国产香蕉久久精品综合网| 亚洲制服丝袜av| 福利91精品一区二区三区| 在线播放国产精品二区一二区四区| 国产精品第一页第二页第三页| 久久国产免费看| 欧美精品久久99| 一区二区国产盗摄色噜噜| 成人免费毛片app| 久久精品男人天堂av| 日本不卡视频在线观看| 欧美日韩一级视频| 亚洲在线免费播放| 99这里都是精品| 国产精品入口麻豆九色| 狠狠色综合日日| 精品国产乱码久久久久久蜜臀| 婷婷久久综合九色综合伊人色| 一本色道久久加勒比精品| 国产精品毛片久久久久久| 国产经典欧美精品| 久久综合九色综合97婷婷 | 国产一区二区三区免费播放| 日韩一区二区三区免费观看| 日韩vs国产vs欧美| 欧美日韩国产精品成人| 亚洲电影第三页| 在线观看国产一区二区| 一区二区三区四区亚洲| 欧美最猛性xxxxx直播| 亚洲欧美国产高清| 91麻豆国产精品久久| 亚洲码国产岛国毛片在线| 色88888久久久久久影院按摩| 亚洲欧美日韩国产综合| 在线视频你懂得一区二区三区| 一区二区三区日韩精品| 欧美亚洲国产怡红院影院| 亚洲成人福利片| 欧美日本一道本| 蜜臀av性久久久久蜜臀aⅴ| 精品美女一区二区三区| 国产成人免费高清| 国产精品护士白丝一区av| 色婷婷久久99综合精品jk白丝| 亚洲一区二区av电影| 51精品久久久久久久蜜臀| 乱一区二区av| 国产精品理伦片| 在线看国产一区二区| 免费成人在线网站| 中文字幕av一区二区三区免费看| 成人禁用看黄a在线| 悠悠色在线精品| 91麻豆精品国产| 国产成人8x视频一区二区| 亚洲免费观看高清完整版在线 | 国产91丝袜在线18| 亚洲欧洲色图综合| 欧美另类高清zo欧美| 久久草av在线| 中文字幕亚洲精品在线观看|