9287|24

89

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

100分求助:WINCE下如何设置触摸屏有效范围??? [复制链接]

请问各位:
    如何设置触摸屏的有效触摸范围,如原来320*240 现在想让触摸屏的有效触摸范围小一圈如:315*235
在有效范围之外不会触发中断
请问如何设置或者修改
谢谢各位!
此帖出自WindowsCE论坛

最新回复

嗯,基本上是这意思。  详情 回复 发表于 2008-9-27 10:36
点赞 关注
 

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
ding !!
此帖出自WindowsCE论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
缩小范围是有可能的,可是很难做的那么精确。

你可以修改触摸屏驱动,超出某个范围的点,就直接丢弃。
此帖出自WindowsCE论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

4
 
现在有个问题就是:
触摸屏同时有两点按下时是不工作的,
所以我的屏的边框被外壳卡住了,触摸屏不能正常工作了

现在我修改一下让屏的有效范围小一圈
我在程序中找到:
      #define MAX_ADC_VAL 0xfff
        if (*x < MAX_ADC_VAL && *y < MAX_ADC_VAL)
        {
                TmpStateFlags |= TouchSampleValidFlag;
        }
        else
        {
                TmpStateFlags |= TouchSampleIgnore;
        }
我把MAX_ADC_VAL减半,发现单击的时候触摸屏是有一半无效了,假设为屏A部分
另一板可以按,假设为屏B部分
但是我按着屏A部分,再点击屏B部分,这时屏B部分也是无效的!
请问怎么解决啊???
此帖出自WindowsCE论坛
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

5
 
首先弄清楚电阻阵列的方向,即那个方向采样的电压ad值是增加的,计算出新的有效区间
同时看看同时按下时,采样的ad值是多少,看看是值是不是在有效区,再分析
此帖出自WindowsCE论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

6
 
楼主的情况应该很好解决:将你的程序的子窗口定义小一点就行了,因为消息都是按键弹起有效,按下是不会产生弹起消息的
此帖出自WindowsCE论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 5 楼 rookieme 的回复:
楼主的情况应该很好解决:将你的程序的子窗口定义小一点就行了,因为消息都是按键弹起有效,按下是不会产生弹起消息的

程序的子窗口???能再具体点吗??
我帖出我的触摸屏驱动给大家看一看,各位高手帮忙出些主意!先谢谢啦!
tchpdd.h:
#ifndef __TCHPDD_H__
#define __TCHPDD_H__
#define MAX_ADC_VAL                                                0x0FFF
#define WM97_ADC_X                                                0x0001
#define WM97_ADC_Y                                                0x0002
#define WM97_TOUCHCTRL1_POLL                        0x8000
#define WM97_TOUCHCTRL1_ADR_MASK                0x7000
#define WM97_TOUCHCTRL1_ADR_Y                        0x1000
#define WM97_TOUCHCTRL1_ADR_X                        0x2000
#define WM97_TOUCHCTRL1_PRESSURE                0x3000
#define WM97_TOUCHCTRL1_AUX1                        0x4000
#define WM97_TOUCHCTRL1_AUX2                        0x5000
#define WM97_TOUCHCTRL1_AUX3                        0x6000
#define WM97_TOUCHCTRL1_AUX4                        0x7000
#define WM97_TOUCHCTRL1_COO                                0x0800
#define WM97_TOUCHCTRL1_CTC                                0x0400
#define WM97_TOUCHCTRL_CR_MASK                        0x0300
#define WM97_TOUCHCTRL1_CR_0                        0x0000                // 93.75Hz  or 512 AC link frames
#define WM97_TOUCHCTRL1_CR_1                        0x0100                // 187.5Hz  or 256 AC link frame
#define WM97_TOUCHCTRL1_CR_2                        0x0200                // 375Hz    or 128 AC link frame
#define WM97_TOUCHCTRL1_CR_3                        0x0300                // 750Hz    or 64  AC link frame
#define WM97_TOUCHCTRL1_DEL_MASK                0x00F0
#define WM97_TOUCHCTRL1_DEL_0                        0x0000                //delay one frame
#define WM97_TOUCHCTRL1_DEL_1                        0x0010                //  2
#define WM97_TOUCHCTRL1_DEL_2                        0x0020                //  4
#define WM97_TOUCHCTRL1_DEL_3                        0x0030                //  6
#define WM97_TOUCHCTRL1_DEL_4                        0x0040                //  8
#define WM97_TOUCHCTRL1_DEL_5                        0x0050                // 16
#define WM97_TOUCHCTRL1_DEL_6                        0x0060                // 32
#define WM97_TOUCHCTRL1_DEL_7                        0x0070                // 64
#define        WM97_TOUCHCTRL1_DEL_8                        0x0080                // 96
#define WM97_DATA_PENDOWN                                0x8000
#define WM97_DATA_ADC_MASK                                0x7000
#define WM97_DATA_ADR_X                                        0x1000
#define WM97_DATA_ADR_Y                                        0x2000
#define WM97_DATA_PRESSURE                                0x3000
#define WM97_DATA_BMON                                        0x4000
#define WM97_DATA_AUXADC                                0x5000
#define WM97_DATA_PHONE                                        0x6000
#define WM97_DATA_PCBEEP                                0x7000

#define WM97_DATA_VAL                                        0x0FFF

#define DELTA_X_COORD_VARIANCE                                                0x20
#define DELTA_Y_COORD_VARIANCE                                                0x20

#define MIN_X_DIGITIZER_COORD                                                0
#define MAX_X_DIGITIZER_COORD                                                (1<<10)

#define MIN_Y_DIGITIZER_COORD                                                0
#define MAX_Y_DIGITIZER_COORD                                                (1<<10)

#define MAX_NOISE_COUNT                                                                4

#define TOUCHPANEL_SAMPLE_RATE_LOW                                        150
#define TOUCHPANEL_SAMPLE_RATE_HIGH                                        150

#define TOUCH_NUM_REJECT                                                        1

#define TOUCH_TIMER_INCREMENT                                                0x9000

#define TOUCH_UCB_INT                                                                1
#define TOUCH_TIMER_INT                                                                2

// UCB1x00 CODEC defines

#define UCB_IO_DATA                                        0x005A
#define UCB_IO_DIR                                        0x005C
#define UCB_RE_IE                                        0x005E
#define UCB_FE_IE                                        0x0060
#define UCB_INT_CS                                        0x0062
#define UCB_TCH_CR                                        0x0064
#define UCB_ADC_CR                                        0x0066
#define UCB_ADC_DATA                                0x0068

#define UCB_ADC_X                                        0x8008
#define UCB_ADC_XSTART                                0x8088
#define UCB_ADC_Y                                        0x8000
#define UCB_ADC_YSTART                                0x8080
#define UCB_ADC_RES                                        0x0000
#define UCB_ADC_DONE                                0x8000
#define UCB_PEN_DOWN                                0x3000

// mask definitions for ucb1x00Touch Control Register Bits
#define TSMX_POW                                        0x0001
#define TSPX_POW                                        (0x0001 << 1)
#define TSMY_POW                                        (0x0001 << 2)
#define TSPY_POW                                        (0x0001 << 3)
#define TSPX_GND                                        (0x0001 << 5)
#define TSMX_GND                                        (0x0001 << 4)
#define TSMY_GND                                        (0x0001 << 6)       
#define TSPY_GND                                        (0x0001 << 7)
#define TSC_BIAS_ENA                                (0x0001        << 11)
#define TSC_MODE_INT                                0x0000
#define TSC_MODE_PREASSURE                        (0x0001 << 8)
#define TSC_MODE_POSITION                        (0x0001 << 9)
#define TSPX_LOW                                        (0x0001 << 12)
#define TSMX_LOW                                        (0x0001 << 13)

// mask definitions for ucb1x00ierBits
#define TSPX_INT                                        (0x0001 << 12)       
#define ADC_INT                                                (0x0001 << 11)
#define TSMX_INT                                        (0x0001        << 13)
#define TCLIP_INT                                        (0x0001 << 14)
#define ACLIP_INT                                        (0x0001 << 15)
#define IO_INT_CLR                                        0x3FF

// mask definitions for ADC Control Register
#define ADC_SYNC_ENA                                0x0001
#define VREFBYP_CON                                        (0x0001 << 1)
#define ADC_INPUT_TSPX                                0x0000
#define ADC_INPUT_TSMX                                0x0004
#define ADC_INPUT_TSPY                                (ADC_INPUT_TSMX << 1)
#define ADC_INPUT_TSMY                                (ADC_INPUT_TSPY | ADC_INPUT_TSMX)
#define ADC_INPUT_AD0                                (ADC_INPUT_TSMX << 2)
#define ADC_INPUT_AD1                                (ADC_INPUT_AD0 | ADC_INPUT_TSMX)
#define ADC_INPUT_AD2                                (ADC_INPUT_AD0 | ADC_INPUT_TSPY)
#define ADC_INPUT_AD3                                (ADC_INPUT_AD2 | ADC_INPUT_TSMX)
#define EXT_REF_ENA                                        (0x0001 << 5)
#define ADC_START                                        (0x0001 << 7)
#define ADC_ENA                                                (0x0001 << 15)

#define ADC_INPUT_TEMPERATURE                0x0018
#define ADC_INPUT_VOLTAGE                        0x001c

//mask definitions for ADC Data Bits
#define ADC_DATA                                        0x3FF
#define ADC_DATA_VAL                                (0x00000001 << 15)

//mask definitions for Interrupt Control Registers' OSMR (Operating System Match Reg 1) bit
#define ICMR_OSMR1                                        0x08000000

#define NUMBER_SAMPLES_PER_POINT                        3

#define PEN_DOWN                                                        (0)
#define PEN_UP_OR_TIMER                                                (PEN_DOWN+1)

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];

#endif __TCHPDD_H__
此帖出自WindowsCE论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

8
 
下面是tchpdd.cpp:
#include   
#include       
#include   
#include   
#include   
#include   
#include    "tchpdd.h"
#include   
#include       
#include       
#include       
#include       

#define CLEAR(reg, bit_mask)        (reg &= ~bit_mask)
#define TEST(reg, bit_mask)                (reg & bit_mask)
DWORD gIntrTouch                = SYSINTR_TOUCH;
DWORD gIntrTouchChanged        = SYSINTR_TOUCH_CHANGED;
extern "C" const int MIN_CAL_COUNT = 25;
XLLP_INTC_T        *v_pICReg        = NULL;
XLLP_OST_T        *v_pOSTReg        = NULL;
static unsigned nextExpectedInterrupt;
#ifdef __cplusplus
extern "C"{
#endif
PVOID VirtualAllocCopy(unsigned size, PVOID pVirtualAddress);
void usWait(unsigned usVal);
void msWait(unsigned msVal);
short int InitAcLink();
short int DeInitAcLink();
short int Ac97ColdReset();
short int ReadAC97(BYTE Offset, unsigned short int * Data);
short int WriteAC97(BYTE Offset, unsigned short int  Data);
void AC97PowerHandler(BOOL bOff);
#ifdef __cplusplus
}
#endif

#ifndef __TOUCH_DEBUG__
#undef RETAILMSG
#undef ERRORMSG
#define RETAILMSG(cond,printf_exp)
#define ERRORMSG(cond,printf_exp)
#endif
HANDLE                        KeepAliveEvent;
PDRIVER_GLOBALS        v_pDriverGlobals = NULL;

HANDLE g_hEventIdle = NULL;

BOOL Init_Touch_Reg(void);

static void PddpTouchPanelDeallocateVm()
{
        if (v_pICReg)
        {
                VirtualFree((void *)v_pICReg,0x400,MEM_RELEASE);
                v_pICReg = NULL;
        }

        if (v_pOSTReg)
        {
                VirtualFree((void *)v_pOSTReg,0x400,MEM_RELEASE);
                v_pOSTReg = NULL;
        }
}

INT evaluateSample(USHORT val0,USHORT val1,USHORT val2,int maxError,INT *sample)
{
        LONG        diff0,diff1,diff2;
        INT                retval=TouchSampleIgnore;

        if ((val0 < MAX_ADC_VAL) && (val1 < MAX_ADC_VAL) && (val2 < MAX_ADC_VAL))
        {
                // Calculate the absolute value of the differences of the sample
                diff0 = val0 - val1;
                diff1 = val1 - val2;
                diff2 = val2 - val0;
                diff0 = diff0 > 0  ? diff0 : -diff0;
                diff1 = diff1 > 0  ? diff1 : -diff1;
                diff2 = diff2 > 0  ? diff2 : -diff2;

                if (diff0 < diff1)
                        *sample=(ULONG)(val0 + ((diff2 < diff0) ? val2 : val1));
                        else  
                        *sample=(ULONG)(val2 + ((diff2 < diff1) ? val0 : val1));

                *sample>>=1;

                if ((diff0 < maxError) && (diff1 < maxError) && (diff2 < maxError))
                        retval = TouchSampleValidFlag ;
        }
        return(retval);
}
void enableTouchTimerInterrupt(unsigned timeout)
{
        v_pOSTReg->osmr1 = v_pOSTReg->oscr0 + timeout;
        //allows a match between OSMR[1] and the OS Timer to assert interrupt bit M1 in the OSSR
        *(unsigned int *)&v_pOSTReg->oier |= XLLP_OIER_E1 ;
        //enable the interrupt for OSMR1
        *(unsigned int *)&v_pICReg->icmr |= ICMR_OSMR1;
        // OS timer match register 1 has matched the OS timer counter
        *(unsigned int *)&v_pOSTReg->ossr = XLLP_OSSR_M1 ;
}
BOOL PddpEnablePenInterrupt(BOOL irqMode)
{
        if(irqMode == PEN_DOWN)                        // if next expected interrupt is pen down  
        {
        }
        else                                                        // Enable timer interrupt for drawing
        {
                enableTouchTimerInterrupt(TOUCH_TIMER_INCREMENT);
        }

        return (TRUE);
}
USHORT getTouchCoordinate(unsigned axis)
{
        USHORT sample  = MAX_ADC_VAL;
        USHORT adcData;

        ReadAC97 (0x7A, &adcData);

        if(adcData & WM97_DATA_PENDOWN)
        {
                ReadAC97 (0x76, &adcData);

                adcData |=  WM97_TOUCHCTRL1_POLL;
                adcData &= ~WM97_TOUCHCTRL1_DEL_MASK;
                adcData |=  WM97_TOUCHCTRL1_DEL_6;
                adcData &= ~WM97_TOUCHCTRL1_ADR_MASK;
                adcData |=  (axis == WM97_ADC_X ? WM97_TOUCHCTRL1_ADR_X : WM97_TOUCHCTRL1_ADR_Y);
                WriteAC97(0x76,  adcData);
                do
                {
                        ReadAC97 (0x76, &adcData);
                        Sleep(1);
                } while(adcData & WM97_DATA_PENDOWN);

                ReadAC97 (0x7A, &adcData);
                sample = adcData & WM97_DATA_VAL;
        }

        return sample;
}
extern "C" BOOL TouchDriverCalibrationPointGet(TPDC_CALIBRATION_POINT *pTCP)
{
        INT32 cDisplayWidth = pTCP->cDisplayWidth;
        INT32 cDisplayHeight = pTCP->cDisplayHeight;
        int CalibrationRadiusX = cDisplayWidth/10;
        int CalibrationRadiusY = cDisplayHeight/10;
        switch (pTCP->PointNumber)
        {
        case  0:  // Middle
                pTCP->CalibrationX = cDisplayWidth/2;
                pTCP->CalibrationY = cDisplayHeight/2;
                break;
        case  1:  // Upper Left
                pTCP->CalibrationX = CalibrationRadiusX*2;
                pTCP->CalibrationY = CalibrationRadiusY*2;
                break;
        case  2:  // Lower Left
                pTCP->CalibrationX = CalibrationRadiusX*2;
                pTCP->CalibrationY = cDisplayHeight - CalibrationRadiusY*2;
                break;
        case  3:  // Lower Right
                pTCP->CalibrationX = cDisplayWidth - CalibrationRadiusX*2;
                pTCP->CalibrationY = cDisplayHeight - CalibrationRadiusY*2;
                break;
        case  4:  // Upper Right
                pTCP->CalibrationX = cDisplayWidth - CalibrationRadiusX*2;
                pTCP->CalibrationY = CalibrationRadiusY*2;
                break;
        default:
                pTCP->CalibrationX = cDisplayWidth/2;
                pTCP->CalibrationY = cDisplayHeight/2;
                SetLastError(ERROR_INVALID_PARAMETER);
                return FALSE;
        }
        return TRUE;
}
此帖出自WindowsCE论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

9
 
接上:
extern "C" BOOL DdsiTouchPanelGetDeviceCaps(INT iIndex,LPVOID  lpOutput)
{
        if (lpOutput == NULL)
        {
                ERRORMSG(1,(__TEXT("TouchPanelGetDeviceCaps: invalid parameter.\r\n")));
                SetLastError(ERROR_INVALID_PARAMETER);
                return FALSE;
        }
        switch  (iIndex)
        {
                case TPDC_SAMPLE_RATE_ID:
                        {
                        TPDC_SAMPLE_RATE  *pTSR = (TPDC_SAMPLE_RATE*)lpOutput;

                        pTSR->SamplesPerSecondLow = TOUCHPANEL_SAMPLE_RATE_LOW;
                        pTSR->SamplesPerSecondHigh = TOUCHPANEL_SAMPLE_RATE_HIGH;
                        pTSR->CurrentSampleRateSetting = 90;
                        }
                        break;
                case TPDC_CALIBRATION_POINT_COUNT_ID:
                        {
                        TPDC_CALIBRATION_POINT_COUNT *pTCPC = (TPDC_CALIBRATION_POINT_COUNT*)lpOutput;
                        pTCPC->flags = 0;
                        pTCPC->cCalibrationPoints = 5;
                        }
                        break;
                case TPDC_CALIBRATION_POINT_ID:
                        return(TouchDriverCalibrationPointGet((TPDC_CALIBRATION_POINT*)lpOutput));
                default:
                        ERRORMSG(1,(__TEXT("TouchPanelGetDeviceCaps: invalid parameter.\r\n")));
                        SetLastError(ERROR_INVALID_PARAMETER);
                        return FALSE;
        }
        return TRUE;
}
BOOL DdsiTouchPanelSetMode(INT iIndex,LPVOID  lpInput)
{
        BOOL  ReturnCode = FALSE;
        RETAILMSG(1,(TEXT("DdsiTouchPanelSetMode(0x%x)\r\n"),iIndex));
        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);
}
BOOL AllocTouchPanelRegs()
{
        if (v_pICReg == NULL)
        {
                v_pICReg =  (XLLP_INTC_T *) VirtualAllocCopy(0x400, (PVOID)INTC_BASE_U_VIRTUAL);

                if (v_pICReg)
                {
                        if (v_pOSTReg == NULL)
                        {
                                v_pOSTReg = (XLLP_OST_T *) VirtualAllocCopy(0x400, (PVOID)OST_BASE_U_VIRTUAL);
                        }
                }
        }     
        if (!v_pOSTReg || !v_pICReg )
        {
                PddpTouchPanelDeallocateVm();
                RETAILMSG(1,(TEXT("DdsiTouchPanelEnable(): Error %u\r\n"),GetLastError()));
                return (FALSE);
        }
        return(TRUE);
}
BOOL DdsiTouchPanelEnable()
{
        if(AllocTouchPanelRegs())
                InitAcLink();
        else
                return(FALSE);
        if ( g_hEventIdle == NULL )
        {
                g_hEventIdle = CreateEvent(0,FALSE,FALSE,L"_IdleListen_Event_");
        }
        return Init_Touch_Reg();
}
VOID DdsiTouchPanelDisable()
{
        //RETAILMSG(1,(TEXT("DdsiTouchPanelDisable()\r\n")));
        PddpTouchPanelDeallocateVm();
        DeInitAcLink();
}
LONG DdsiTouchPanelAttach()
{
        return(1);
}
LONG DdsiTouchPanelDetach()
{
        return(0);
}
BOOL penIsDown()
{
        USHORT adcData;

        ReadAC97 (0x7A, &adcData);

        if(adcData & WM97_DATA_PENDOWN)
                return TRUE;                                // pen down
        else
                return FALSE;                                // pen up
}
TOUCH_PANEL_SAMPLE_FLAGS SampleTouchScreen(INT *x,INT *y)
{
        unsigned int i;
        TOUCH_PANEL_SAMPLE_FLAGS TmpStateFlags;
        TOUCHPANEL_POINT_SAMPLES rgPointSamples;
        INT TmpX = 0x0FFF;
        INT TmpY = 0x0FFF;
        for(i=0;i         {
                rgPointSamples.XSample = getTouchCoordinate(WM97_ADC_X);
                rgPointSamples.YSample = getTouchCoordinate(WM97_ADC_Y);
        }
        TmpStateFlags = TouchSampleDownFlag;
        if (evaluateSample(rgPointSamples[0].XSample,rgPointSamples[1].XSample,rgPointSamples[2].XSample,
                DELTA_X_COORD_VARIANCE,&TmpX) == TouchSampleIgnore)
        {
                TmpStateFlags |= TouchSampleIgnore;
                RETAILMSG(1,(TEXT("Invalid X sample\r\n")));
        }
        else
        {
                TmpStateFlags |= evaluateSample(rgPointSamples[0].YSample,rgPointSamples[1].YSample,rgPointSamples[2].YSample,
                DELTA_Y_COORD_VARIANCE,&TmpY);
        }
        *y=TmpY;
        *x=TmpX;

        RETAILMSG(1,(TEXT("Filtered - SampleFlags: 0x%x X: 0x%x Y: 0x%x\r\n"),TmpStateFlags,TmpX,TmpY));
        return(TmpStateFlags);
}
VOID DdsiTouchPanelGetPoint(TOUCH_PANEL_SAMPLE_FLAGS *pTipStateFlags,INT *pUncalX,INT *pUncalY)
{
        static unsigned int TouchIrq=1;
        unsigned InterruptType=SYSINTR_TOUCH;
        *pTipStateFlags = TouchSampleIgnore;
        if(TouchIrq)                                                                // handle pen down irq
        {
                // add by jiyq, 2008-6-26, for listen idle
                if ( g_hEventIdle != NULL )
                {
                        SetEvent(g_hEventIdle);
                }
                TouchIrq = 0;
                InterruptType=SYSINTR_TOUCH;
                *pTipStateFlags=SampleTouchScreen(pUncalX,pUncalY);
                nextExpectedInterrupt=PEN_UP_OR_TIMER;   
        }
        else                                                                                // handle timer irq
        {
                InterruptType=SYSINTR_TOUCH_CHANGED;
                *pTipStateFlags=SampleTouchScreen(pUncalX,pUncalY);
                nextExpectedInterrupt=PEN_UP_OR_TIMER;  
        }
        if (!penIsDown() && (nextExpectedInterrupt==PEN_UP_OR_TIMER))
        {
                TouchIrq = 1;
                *pTipStateFlags = TouchSampleValidFlag;        // send pen up to mdd
                nextExpectedInterrupt = PEN_DOWN;
        }
        PddpEnablePenInterrupt(nextExpectedInterrupt);
        InterruptDone(InterruptType);
        RETAILMSG(1,(TEXT("x= %x y= %x  F=%x\r\n"),*pUncalX,*pUncalY,*pTipStateFlags));
}
BOOL Init_Touch_Reg(void)
{
        USHORT        tmp;
        ReadAC97 (0x7C, &tmp);
        if (tmp != 0x574D)
        {
                RETAILMSG(1,(TEXT("No Found WM97xx Codec\r\n")));
                return FALSE;
        }
        ReadAC97 (0x7E, &tmp);
        if (tmp == 0x4C12)
                RETAILMSG(1,(TEXT("Found WM9712 Codec\r\n")));
        else
        {
                RETAILMSG(1,(TEXT("Not Found WM9712\r\n")));
                return FALSE;
        }
        ReadAC97 (0x4C, &tmp);                //Set GPIO3 for PENDOWN
        WriteAC97(0x4C,  tmp & ~0x08);
        ReadAC97 (0x56, &tmp);                //Set GPIO3 for PENDOWN
        WriteAC97(0x56,  tmp & ~0x08);
        ReadAC97 (0x78, &tmp);
        tmp |=  0xC000;                                //set ADC running mode
        tmp &= ~0x1000;                                //set 4-wire touchscreen
        WriteAC97(0x78,  tmp);
        return TRUE;
}
void DdsiTouchPanelPowerHandler(BOOL bOff)
{
        AC97PowerHandler(bOff);
        if (bOff)
        {
//                InterruptDone(SYSINTR_TOUCH);
//                InterruptDone(SYSINTR_TOUCH_CHANGED);
        }
        else
        {
//                nextExpectedInterrupt=PEN_DOWN;
//                InterruptDone(SYSINTR_TOUCH);
        }
}
此帖出自WindowsCE论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

10
 
程序太长,程序子窗口是这么一个意思:
由于边框压下会产生按下消息,如果程序窗口不占满屏幕的话会将活动窗口切换到其它程序
所以程序运行先要有一个占满整个屏幕的对话框,以保证活动窗口是当前程序,但该对话框没有任何活动按键,是不会接收消息的
其它真正的程序对话框设置小一点,作为模态对话框在最顶层的对话框上调用
此方法我已测试过了
此帖出自WindowsCE论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

11
 
可是产品不是就有一个全屏的程序
是PDA
类似电脑
要先进入系统
至于当前要运行哪个程序需要
到FLASH中找
可是当外壳压到屏幕上的时候
连屏幕上“我的设备都打不开”
而不能让WindowsCE的桌面窗口也缩小一点吧???
此帖出自WindowsCE论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

12
 
顶起来
此帖出自WindowsCE论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

13
 
电阻式触摸屏一个时间只能识别一个点,你这个靠软件是很难完全解决的,还是要动硬件。
此帖出自WindowsCE论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

14
 
可不可以让AD采样的范围变小点
也就是边缘的一圈不让AD采到?
这样就相当于触摸屏的那部分无效了
此帖出自WindowsCE论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

15
 
AD采样的扫描范围
此帖出自WindowsCE论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

16
 
如果我把MDD层的tchmain.c中直接设置
TPDC_CALIBRATION_POINT point;
   
    point.cDisplayWidth = 240;
    point.cDisplayHeight = 320;

这两个会不会让我的有效区有所改变,如
     point.cDisplayWidth = 120;
    point.cDisplayHeight = 160;
而且触摸到无效区还不能触发中断????
此帖出自WindowsCE论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

17
 
引用 13 楼 wangxin_801115 的回复:
可不可以让AD采样的范围变小点
也就是边缘的一圈不让AD采到?
这样就相当于触摸屏的那部分无效了

楼主其实思路已经正确,解决的唯一方法就是调整AD采样范围。
所以现在的问题是:如何不让AD去采样那些你不期望的点?
你的AD控制器有这样的寄存器让你设置吗?据我的经验,好像这样的AD芯片还真没见过。
所以还是改硬件吧,软件无法绕过这个的。
此帖出自WindowsCE论坛
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

18
 
是不是市面上所有的触摸屏都是这样
比如说
有款PDA产品:有手写的功能
当手写功能有效时,只有手写区域框有效,其他地方手写无效(手机应该有些是这样吧)
现在这个功能我可以实现
但是是不是市面上的PDA产品:当手按在手写区域外的时候,手写功能在手写有效区域就会失效!!!
此帖出自WindowsCE论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

19
 
问题是电阻是触摸屏,你压着一个点的时候,根本不可能去对另一个点产生反应,这是硬件决定的,我认为是软件没办法解决的。
此帖出自WindowsCE论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

20
 
引用 17 楼 wangxin_801115 的回复:
是不是市面上所有的触摸屏都是这样
比如说
有款PDA产品:有手写的功能
当手写功能有效时,只有手写区域框有效,其他地方手写无效(手机应该有些是这样吧)
现在这个功能我可以实现
但是是不是市面上的PDA产品:当手按在手写区域外的时候,手写功能在手写有效区域就会失效!!!

你所谓的举例失效,不是指AD采样失效,只是软件上的对鼠标消息的处理。在失效时,AD仍然在采样,系统仍然在相应触摸中断!而你的要求是不要有非法的触摸中断过来!

此帖出自WindowsCE论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表