paneldrv.c
上传用户:zbk8730
上传日期:2017-08-10
资源大小:12168k
文件大小:30k
- #include "paneldrv.h"
- #include "_define.h"
- #include "panel.h"
- #include "cpu_clock.h"
- #include "cpu.h"
- #include "cpu_int.h"
- #include "lcd.h"
- #define _TOUCH_RESISTER_CHECK_
- #ifdef _TOUCH_RESISTER_CHECK_
- #define TOUCH_RES_MAX 900
- enum
- { TOUCH_NO_ACTIVE = 0,
- TOUCH_DOWN_ACTIVE,
- TOUCH_MOVE_ACTIVE,
- TOUCH_MOVE_NO_ACTIVE,
- };
- #endif
- #define PANRECLEN 5
- //#define PANEL_ROTATE_180
- PenQueue gPenQueue;
- PANEL_STRUC tchscr_pen,tchscr,penrectif[PANRECLEN];
- PANEL_STRUC tchscrback;
- unsigned char bTouchCheck4KeyState = 0;
- PANELQUEUE PanelVar;
- TCHSCR_RECTIF tchscr_rectif;
- PANEL_STRUC tchscr_pen;
- //#define _NEW_TOUCHPANEL_
- #define TARGET_RAD 80
- #define PEN_ERR 999
- //#define PRSCVL 19
- unsigned short PRSCVL;
- #define XDATA_MIN 130//120
- #define XDATA_MAX 912//900
- #define YDATA_MIN 168//145
- #define YDATA_MAX 930//915
- #ifndef _NEW_TOUCHPANEL_
- #define TOUCHPEN_XY_SWAP
- #endif
- #define XLCD_POS(data) ( (int)((LCD_XSIZE*((data)-XDATA_MIN)) /(XDATA_MAX-XDATA_MIN)))
- #define YLCD_POS(data) (( (int)(LCD_YSIZE*((data)-YDATA_MIN)/(YDATA_MAX-YDATA_MIN)) ))
- unsigned long g_tsnum=0;
- int g_Lastx,g_Lasty;
- int g_MouseUp=1;
- void TouchPanelISR(void);
- #ifdef _TOUCH_RESISTER_CHECK_
- int g_touch_down_status;
- int g_xdata;
- int IsTouchActive()
- {
- int g_touch_res_p,g_touch_res_m,xposition;
- int g_touch_res_value;
- //if(!g_touch_down_status)
- {
- #if 0
- rADCTSC=(1<<6)|(1<<5); //XM,YP enable
- rADCDLY=40000;
- PRSCVL = (unsigned short)((GetClock(PCLK)/1000000) & 0xff);
- rADCCON=(1<<14)+((PRSCVL-1)<<6)+(5<<3);
- rADCCON|=0x1; //start ADC
- while(rADCCON & 0x1); //check if Enable_start is low
- while(!(rADCCON & 0x8000)); //check if EC(End of Conversion) flag is high, This line is necessary~!!
- xposition = (rADCDAT0&0x3ff);
- #else
- xposition = g_xdata;
- #endif
- rADCTSC= (1<<4)|(1<<5); //XM,YP enable
- rADCDLY=4000;
- PRSCVL = (unsigned short)((GetClock(PCLK)/1000000) & 0xff);
- rADCCON=(1<<14)+((PRSCVL-1)<<6)+(7<<3);
- rADCCON|=0x1; //start ADC
- while(rADCCON & 0x1); //check if Enable_start is low
- while(!(rADCCON & 0x8000)); //check if EC(End of Conversion) flag is high, This line is necessary~!!
- g_touch_res_m = (rADCDAT0&0x3ff);
- //rADCTSC=(1<<6)|(1<<5); //XM,YP enable
- //rADCDLY=40000;
- //PRSCVL = (unsigned short)((GetClock(PCLK)/1000000) & 0xff);
- rADCCON=(1<<14)+((PRSCVL-1)<<6)+(4<<3);
- rADCCON|=0x1; //start ADC
- while(rADCCON & 0x1); //check if Enable_start is low
- while(!(rADCCON & 0x8000)); //check if EC(End of Conversion) flag is high, This line is necessary~!!
- g_touch_res_p = (rADCDAT0&0x3ff);
- rADCDLY=40000;
- g_touch_res_value = (float)((g_touch_res_p/g_touch_res_m)-1)*xposition/1024.0*400;
- if( g_touch_res_value > TOUCH_RES_MAX )
- {
- if(g_touch_down_status == TOUCH_MOVE_ACTIVE || g_touch_down_status == TOUCH_DOWN_ACTIVE)
- {
- g_touch_down_status = TOUCH_MOVE_NO_ACTIVE;
- }
- return 0;
- }
- else
- {
- if(g_touch_down_status == TOUCH_DOWN_ACTIVE || g_touch_down_status == TOUCH_MOVE_NO_ACTIVE)
- {
- g_touch_down_status = TOUCH_MOVE_ACTIVE;
- }
- else if(g_touch_down_status == TOUCH_NO_ACTIVE)
- {
- g_touch_down_status = TOUCH_DOWN_ACTIVE;
- }
- return 1;
- }
- }
- }
- #endif
- //int g_pendown=0; //0:down; 1:up
- void OpenAdcTs(void)
- {
- OpenClock(CLK_ADC);
- rADCDLY=50000; //Normal conversion mode delay about (1/3.6864M)*50000=13.56ms
- PRSCVL = (unsigned short)((GetClock(PCLK)/1000000) & 0xff); // 5us
- rADCCON=(1<<14)+((PRSCVL-1)<<6); //PRSCVL En, PRSCVL Value
- rADCTSC=0xd3; //Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En
- MapInterrupt(BIT_ADC, (unsigned)TouchPanelISR);
- //OpenInterrupt(BIT_ADC);
- rINTMSK&=~(BIT_ADC); //ADC Touch Screen Mask bit clear
- rINTSUBMSK&=~(BIT_SUB_TC);
- }
- int g_pennum=0;
- void ScanTs(void)
- {
- int volatile xdata, ydata;
- if(g_MouseUp)
- return;
- //rADCTSC=0xd3; //Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En
- if(rADCDAT0&0x8000)
- {
- rADCTSC&=0xff; // Set stylus down interrupt bit
- }
- rADCTSC=(1<<3)|(1<<2); //Pull-up disable, Seq. X,Y postion measure.
- // saveAdcdly=rADCDLY;
- rADCDLY=40000; //Normal conversion mode delay about (1/50M)*40000=0.8ms
- PRSCVL = (unsigned short)((GetClock(PCLK)/1000000) & 0xff); // 5us
- rADCCON=(1<<14)+((PRSCVL-1)<<6); //PRSCVL En, PRSCVL Value
- rADCCON|=0x1; //start ADC
- while(rADCCON & 0x1); //check if Enable_start is low
- while(!(rADCCON & 0x8000)); //check if EC(End of Conversion) flag is high, This line is necessary~!!
- // while(!(rSRCPND & (BIT_ADC))); //check if ADC is finished with interrupt bit
- #ifndef TOUCHPEN_XY_SWAP
- ydata=(rADCDAT0&0x3ff);
- xdata=(rADCDAT1&0x3ff);
- #else
- xdata=(rADCDAT0&0x3ff);
- ydata=(rADCDAT1&0x3ff);
- #endif
- #ifdef _TOUCH_RESISTER_CHECK_
- g_xdata = xdata;
- IsTouchActive();
- #endif
-
- #if PANEL_MINMAX_
- panel.PanelDotX=g_Lastx;//YLCD_POS(xdata);
- panel.PanelDotY=g_Lasty;//XLCD_POS(ydata);
- panel.PanelState=TOUCHPEN_MOVE|TOUCHPEN_DOWN;
- PutPanelInf(&panel);
- g_Lastx=XLCD_POS(xdata);
- g_Lasty=YLCD_POS(ydata);
- #else
- tchscr.PanelDotX=xdata;
- tchscr.PanelDotY=ydata;
- if(gbTouchAdjustFlag)
- {
- if(g_pennum<(PANRECLEN-1))
- {
- penrectif[++g_pennum]=tchscr;
- }
- else if(g_pennum==(PANRECLEN-1))
- {
- tchscr_calcu_pencoord();
- #ifdef PANEL_ROTATE_180
- //add by TH 070404, Rotate TP 180 degree
- tchscr_pen.PanelDotX=LCD_XSIZE-tchscr_pen.PanelDotX;
- tchscr_pen.PanelDotY=LCD_YSIZE-tchscr_pen.PanelDotY;
- #endif
- tchscr_pen.PanelState=TOUCHPEN_DOWN;
- if((tchscrback.PanelDotX!=PEN_ERR)&&(tchscrback.PanelDotY!=PEN_ERR))
- PutPanelInf(&tchscr_pen);
- g_pennum++;
- }
-
- }
- else
- {
- #ifdef _TOUCH_RESISTER_CHECK_
- if(g_touch_down_status == TOUCH_MOVE_ACTIVE )
- #endif
- {
- tchscrback.PanelDotX=g_Lastx;
- tchscrback.PanelDotY=g_Lasty;
- tchscrback.PanelState=TOUCHPEN_MOVE|TOUCHPEN_DOWN;
- if((tchscrback.PanelDotX!=PEN_ERR)&&(tchscrback.PanelDotY!=PEN_ERR))
- PutPanelInf(&tchscrback);
- tchscr_calcu_pencoord();
- #ifdef PANEL_ROTATE_180
- //add by TH 070404, Rotate TP 180 degree
- tchscr_pen.PanelDotX=LCD_XSIZE-tchscr_pen.PanelDotX;
- tchscr_pen.PanelDotY=LCD_YSIZE-tchscr_pen.PanelDotY;
- #endif
-
- g_Lastx=tchscr_pen.PanelDotX;
- g_Lasty=tchscr_pen.PanelDotY;
- }
- #ifdef _TOUCH_RESISTER_CHECK_
- else if(g_touch_down_status == TOUCH_DOWN_ACTIVE )
- {
-
- tchscr_calcu_pencoord();
- g_Lastx=tchscr_pen.PanelDotX;
- g_Lasty=tchscr_pen.PanelDotY;
- tchscrback.PanelDotX=g_Lastx;
- tchscrback.PanelDotY=g_Lasty;
- tchscrback.PanelState=TOUCHPEN_DOWN;
- PutPanelInf(&tchscrback);
- }
- #endif
- }
- #endif
-
- rADCDLY=40000;
- rADCTSC =0xd3; //Waiting for interrupt
- rADCTSC=rADCTSC|(1<<8); // Detect stylus up interrupt signal.
-
-
- }
- extern void RemoveTimeFunc(void(* function)(void));
- unsigned int g_TouchPanelCome=0;
- void TouchPanelISR(void)
- {
- rSUBSRCPND|=BIT_SUB_TC;
- ClearIntLatch (BIT_ADC);
- g_TouchPanelCome=1;
- if((g_tsnum%2))
- {
- g_MouseUp=1;
- }
- }
- void TouchPanelDSR(void)
- {
-
- unsigned int saveAdcdly;
- int volatile xdata, ydata;
- if(rADCDAT0&0x8000)
- {
- rADCTSC&=0xff; // Set stylus down interrupt bit
- }
-
- rADCTSC=(1<<3)|(1<<2); //Pull-up disable, Seq. X,Y postion measure.
- saveAdcdly=rADCDLY;
- rADCDLY=40000; //Normal conversion mode delay about (1/50M)*40000=0.8ms
- PRSCVL = (unsigned short)((GetClock(PCLK)/1000000) & 0xff); // 5us
- rADCCON=(1<<14)+((PRSCVL-1)<<6); //PRSCVL En, PRSCVL Value
- rADCCON|=0x1; //start ADC
- while(rADCCON & 0x1); //check if Enable_start is low
- while(!(rADCCON & 0x8000)); //check if EC(End of Conversion) flag is high, This line is necessary~!!
- #ifndef TOUCHPEN_XY_SWAP
- ydata=(rADCDAT0&0x3ff);
- xdata=(rADCDAT1&0x3ff);
- #else
- xdata=(rADCDAT0&0x3ff);
- ydata=(rADCDAT1&0x3ff);
- #endif
- #ifdef _TOUCH_RESISTER_CHECK_
- g_xdata = xdata;
- IsTouchActive();
- #endif
-
- rINTSUBMSK&=~(BIT_SUB_TC);
- rINTMSK&=~(BIT_ADC);
- rADCDLY=40000;
- rADCTSC =0xd3; //Waiting for interrupt
- if(!(g_tsnum%2))
- {
- #ifdef PANEL_MINMAX_
- panel.PanelDotX=XLCD_POS(xdata);
- panel.PanelDotY=YLCD_POS(ydata);
- panel.PanelState=TOUCHPEN_DOWN;
- PutPanelInf(&panel);
- g_Lastx=panel.PanelDotX;
- g_Lasty=panel.PanelDotY;
- #else
- tchscr.PanelDotX=xdata;
- tchscr.PanelDotY=ydata;
- if(gbTouchAdjustFlag)
- {
- g_pennum=0;
- penrectif[g_pennum]=tchscr;
- }
- else
- {
- tchscr_calcu_pencoord();
- #ifdef PANEL_ROTATE_180
- //add by TH 070404, Rotate TP 180 degree
- tchscr_pen.PanelDotX=LCD_XSIZE-tchscr_pen.PanelDotX;
- tchscr_pen.PanelDotY=LCD_YSIZE-tchscr_pen.PanelDotY;
- #endif
- #ifdef _TOUCH_RESISTER_CHECK_
- if(g_touch_down_status == TOUCH_DOWN_ACTIVE)
- #endif
- {
- tchscr_pen.PanelState=TOUCHPEN_DOWN;
- PutPanelInf(&tchscr_pen);
- }
- }
-
-
- g_Lastx=tchscr_pen.PanelDotX;
- g_Lasty=tchscr_pen.PanelDotY;
- tchscrback.PanelDotX=g_Lastx;
- tchscrback.PanelDotY=g_Lasty;
- #endif
- rADCTSC=rADCTSC|(1<<8); // Detect stylus up interrupt signal.
- g_MouseUp=0;
- InsertTimer(20, ScanTs);
-
- }
- else
- {
- RemoveTimeFunc(ScanTs);
- #ifdef PANEL_MINMAX_
- panel.PanelState=TOUCHPEN_UP;
- PutPanelInf(&panel);
- #else
-
- #ifdef _TOUCH_RESISTER_CHECK_
- if((gbTouchAdjustFlag&&(g_pennum>(PANRECLEN-1)))||(!gbTouchAdjustFlag&&(g_touch_down_status != TOUCH_NO_ACTIVE)))
- #else
- if(gbTouchAdjustFlag&&(g_pennum>(PANRECLEN-1))||(!gbTouchAdjustFlag))
- #endif
- {
- tchscrback.PanelState=TOUCHPEN_UP;
- PutPanelInf(&tchscrback);
- #ifdef _TOUCH_RESISTER_CHECK_
- g_touch_down_status = TOUCH_NO_ACTIVE;
- #endif
- }
- #endif
- }
- g_tsnum++;
-
- }
- unsigned char CmpRange(unsigned short sx, unsigned short sy, unsigned short tx, unsigned short ty)
- {
- unsigned short i, j;
- i = ModulusMinusValue(tx, sx);
- j = ModulusMinusValue(ty, sy);
- if( i <= 100 && j <= 100 )
- return 1;
- return 0;
- }
- unsigned int g_NTouchpanel=1;
- void InitTouchPen(void)
- {
- gPenQueue.wHead = 0;
- gPenQueue.wTail = 0;
- gPenQueue.PenState[0].wTouchState = _PEN_UP;
- gPenQueue.PenState[0].wTouchX = 0;
- gPenQueue.PenState[0].wTouchY = 0;
- OpenAdcTs();
- }
- TouchPenState GetPenInfo(unsigned short wCurPoint)
- {
- TouchPenState PenTemp;
-
- PenTemp.wTouchState = gPenQueue.PenState[wCurPoint].wTouchState;
- PenTemp.wTouchX = gPenQueue.PenState[wCurPoint].wTouchX;
- PenTemp.wTouchY = gPenQueue.PenState[wCurPoint].wTouchY;
- return PenTemp;
- }
- unsigned char ComparePenState(PEN_POINT pt)
- {
- unsigned short wTail;
- TouchPenState PenTemp;
- wTail = gPenQueue.wTail;
- PenTemp = gPenQueue.PenState[wTail];
- // touch same point
- if(pt.x == PenTemp.wTouchX && pt.y == PenTemp.wTouchY)
- return 0;
-
- return 1;
- }
- PEN_POINT CurrentPenPos(void)
- {
- PEN_POINT pt;
- pt.x = gwTouchXSite;
- pt.y = gwTouchYSite;
- return pt;
- }
- void InitPanelQueue(void)
- {
- PanelVar.PanelFront = 0;
- PanelVar.PanelRear = 0;
- PanelVar.PanelBufFull = FALSE;
- }
- unsigned char GetPanelInf(PANEL_STRUC *panelvar)
- {
-
- // panel buffer is not empty
- if ( ( PanelVar.PanelFront != PanelVar.PanelRear) )
- {
- *panelvar = PanelVar.PanelBuf[PanelVar.PanelFront];
- PanelVar.PanelFront++;
- if ( PanelVar.PanelFront == PANELBUFLEN)
- PanelVar.PanelFront = 0;
-
- return TRUE;
- }
- return FALSE;
- }
- extern ts_info TsInfo ;
- unsigned char PutPanelInf(PANEL_STRUC *panelvar)
- {
- // BackLightOn();
- // jil add, 05/19, set quit flag for fax
- if((panelvar->PanelState==TOUCHPEN_DOWN))
- StartTouchTone();
- if( (PanelVar.PanelRear+1)%PANELBUFLEN != PanelVar.PanelFront)
- {
- PanelVar.PanelBuf[PanelVar.PanelRear] = *panelvar;
- PanelVar.PanelRear++;
-
- if( PanelVar.PanelRear == PANELBUFLEN)
- PanelVar.PanelRear = 0;
- if( TsInfo.hdev!=0 && TsInfo.callback!= 0 )
- TsInfo.callback(TsInfo.hdev,STATUS_DATA_READY, NULL) ;
- return TRUE;
- }
-
- return FALSE;
- }
- unsigned char _PeekPanel(PANEL_STRUC *p)
- {
- // panel buffer is not empty
- if ( ( PanelVar.PanelFront != PanelVar.PanelRear) )
- {
-
- *p = PanelVar.PanelBuf[PanelVar.PanelFront];
- return TRUE;
- }
- else
- return FALSE;
-
- }
- unsigned char Is_penexist(void)
- {
- if ( ( PanelVar.PanelFront != PanelVar.PanelRear))
- return TRUE;
- else
- return FALSE;
- }
- unsigned char gbTouchAdjustFlag = 0;
- void PenAdjustBegin(void)
- {
- gbTouchAdjustFlag = 1;
- }
- void PenAdjustEnd(void)
- {
- gbTouchAdjustFlag = 0;
- }
- unsigned char tchscr_adjust_center( unsigned short lcd_pos_x, unsigned short lcd_pos_y, unsigned short pen_val_x, unsigned short pen_val_y )
- {
- unsigned long err2;
- unsigned long rad2;
- err2 = (tchscr_pen.PanelDotX-lcd_pos_x)*(tchscr_pen.PanelDotX-lcd_pos_x) +
- (tchscr_pen.PanelDotY-lcd_pos_y)*(tchscr_pen.PanelDotY-lcd_pos_y);
- rad2 = TARGET_RAD*TARGET_RAD;
- if( err2 > rad2 )
- return 0;
- lcd_pos_x = lcd_pos_x;
- lcd_pos_y = lcd_pos_y;
- tchscr_rectif.cent_val_x = pen_val_x;
- tchscr_rectif.cent_val_y = pen_val_y;
- tchscr_rectif.cent_crd_x= LCD_XSIZE/2;
- tchscr_rectif.cent_crd_y= LCD_YSIZE/2;
- return 1;
- }
- unsigned char tchscr_adjust_lftp( unsigned short lcd_pos_x, unsigned short lcd_pos_y, unsigned short pen_val_x, unsigned short pen_val_y )
- {
- unsigned long err2;
- unsigned long rad2;
- err2 = (tchscr_pen.PanelDotX-lcd_pos_x)*(tchscr_pen.PanelDotX-lcd_pos_x) +
- (tchscr_pen.PanelDotY-lcd_pos_y)*(tchscr_pen.PanelDotY-lcd_pos_y);
- rad2 = TARGET_RAD*TARGET_RAD;
- if( err2 > rad2 )
- return 0;
- #ifdef _NEW_TOUCHPANEL_
- {
-
- tchscr_rectif.lftp_val_x = ( (pen_val_x*LCD_XSIZE/2) - (tchscr_rectif.cent_val_x*lcd_pos_x) )
- /(LCD_XSIZE/2-lcd_pos_x);
- tchscr_rectif.lftp_val_y = ( (pen_val_y*LCD_YSIZE/2) - (tchscr_rectif.cent_val_y*lcd_pos_y) )
- /(LCD_YSIZE/2-lcd_pos_y);
- }
- #else
- {
- tchscr_rectif.lftp_val_x = ( (pen_val_x*LCD_XSIZE/2) - (tchscr_rectif.cent_val_x*lcd_pos_x) )
- /(LCD_XSIZE/2-lcd_pos_x);
- tchscr_rectif.lftp_val_y = ( (pen_val_y*LCD_YSIZE/2) - (tchscr_rectif.cent_val_y*lcd_pos_y) )
- /(LCD_YSIZE/2-lcd_pos_y);
- }
- #endif
- /*
- tchscr_rectif.lftp_val_x = tchscr_rectif.cent_val_x-(LCD_XSIZE/2-0)*(tchscr_rectif.cent_val_x-pen_val_x)
- /(LCD_XSIZE/2-lcd_pos_x);
- tchscr_rectif.lftp_val_y = tchscr_rectif.cent_val_y-(LCD_YSIZE/2-0)*(tchscr_rectif.cent_val_y-pen_val_y)
- /(LCD_YSIZE/2-lcd_pos_y);
- */
- tchscr_rectif.lftp_crd_x= 0;
- tchscr_rectif.lftp_crd_y= 0;
- return 1;
- }
- unsigned char tchscr_adjust_rghtp( unsigned short lcd_pos_x, unsigned short lcd_pos_y, unsigned short pen_val_x, unsigned short pen_val_y )
- {
- unsigned long err2;
- unsigned long rad2;
- err2 = (tchscr_pen.PanelDotX-lcd_pos_x)*(tchscr_pen.PanelDotX-lcd_pos_x) +
- (tchscr_pen.PanelDotY-lcd_pos_y)*(tchscr_pen.PanelDotY-lcd_pos_y);
- rad2 = TARGET_RAD*TARGET_RAD;
- if( err2 > rad2 )
- return 0;
- else
- return 1;
- }
- unsigned char tchscr_adjust_lfbm( unsigned short lcd_pos_x, unsigned short lcd_pos_y, unsigned short pen_val_x, unsigned short pen_val_y )
- {
- unsigned long err2;
- unsigned long rad2;
- err2 = (tchscr_pen.PanelDotX-lcd_pos_x)*(tchscr_pen.PanelDotX-lcd_pos_x) +
- (tchscr_pen.PanelDotY-lcd_pos_y)*(tchscr_pen.PanelDotY-lcd_pos_y);
- rad2 = TARGET_RAD*TARGET_RAD;
- if( err2 > rad2 )
- return 0;
- else
- return 1;
- }
- unsigned char tchscr_adjust_rghbm( unsigned short lcd_pos_x, unsigned short lcd_pos_y, unsigned short pen_val_x, unsigned short pen_val_y )
- {
- unsigned long err2;
- unsigned long rad2;
-
- err2 = (tchscr_pen.PanelDotX-lcd_pos_x)*(tchscr_pen.PanelDotX-lcd_pos_x) +
- (tchscr_pen.PanelDotY-lcd_pos_y)*(tchscr_pen.PanelDotY-lcd_pos_y);
- rad2 = TARGET_RAD*TARGET_RAD;
- if( err2 > rad2 )
- return 0;
- #ifdef _NEW_TOUCHPANEL_
- {
- tchscr_rectif.rghbm_val_x = ( (pen_val_x*LCD_XSIZE/2) -(tchscr_rectif.cent_val_x*(LCD_XSIZE-lcd_pos_x)) )
- /(lcd_pos_x-LCD_XSIZE/2);
- tchscr_rectif.rghbm_val_y = ( (pen_val_y*LCD_YSIZE/2) -(tchscr_rectif.cent_val_y*(LCD_YSIZE-lcd_pos_y)) )
- /(lcd_pos_y-LCD_YSIZE/2);
- }
- #else
- {
- tchscr_rectif.rghbm_val_x = ( (pen_val_x*LCD_XSIZE/2) -(tchscr_rectif.cent_val_x*(LCD_XSIZE-lcd_pos_x)) )
- /(lcd_pos_x-LCD_XSIZE/2);
- tchscr_rectif.rghbm_val_y = ( (pen_val_y*LCD_YSIZE/2) -(tchscr_rectif.cent_val_y*(LCD_YSIZE-lcd_pos_y)) )
- /(lcd_pos_y-LCD_YSIZE/2);
- }
- #endif
- /*
- tchscr_rectif.rghbm_val_x = tchscr_rectif.cent_val_x+( (pen_val_x-tchscr_rectif.cent_val_x)*LCD_XSIZE/2 )
- /(lcd_pos_x-LCD_XSIZE/2);
- tchscr_rectif.rghbm_val_y = tchscr_rectif.cent_val_y+( (pen_val_y-tchscr_rectif.cent_val_y)*LCD_YSIZE/2 )
- /(lcd_pos_y-LCD_YSIZE/2);
- */
- tchscr_rectif.rghbm_crd_x= LCD_XSIZE;
- tchscr_rectif.rghbm_crd_y= LCD_YSIZE;
- return 1;
- }
- void tchscr_get_advalue( unsigned short * p_val_x, unsigned short * p_val_y )
- {
- int min,max,sum=0,i;
- //*p_val_x = tchscr.PanelDotX;
- //*p_val_y = tchscr.PanelDotY;
- min=0xffff;
- max=0;
- for(i=0;i<PANRECLEN;i++)
- {
- sum+=penrectif[i].PanelDotX;
- if(penrectif[i].PanelDotX<min)
- min=penrectif[i].PanelDotX;
- if(penrectif[i].PanelDotX>max)
- max=penrectif[i].PanelDotX;
- }
- * p_val_x=(sum-min-max)/(PANRECLEN-2);
- min=0xffff;
- max=0;
- sum=0;
- for(i=0;i<PANRECLEN;i++)
- {
- sum+=penrectif[i].PanelDotY;
- if(penrectif[i].PanelDotY<min)
- min=penrectif[i].PanelDotY;
- if(penrectif[i].PanelDotY>max)
- max=penrectif[i].PanelDotY;
- }
- * p_val_y=(sum-min-max)/(PANRECLEN-2);
-
- }
- void tchscr_save_rectif( void )
- {
- /* _SYSINFO temp_sysinfo;
-
- ReadSysInfo( (_SYSINFO *)&temp_sysinfo );
- memcpy( &temp_sysinfo.byPanelAdjust[0], (unsigned char*)&tchscr_rectif, sizeof(TCHSCR_RECTIF) );
- // sizeof(TCHSCR_RECTIF) should be <= 52bytes, now is 40 bytes
- temp_sysinfo.dwPanelSetFlag = 0x12345678;
- WriteSysInfo( (_SYSINFO *)&temp_sysinfo );*/
- }
- void GetAdjustmentAD(unsigned short *wTouchX, unsigned short *wTouchY)
- {
- tchscr_get_advalue( wTouchX, wTouchY );
- }
- unsigned char CalculateTouchCentre(unsigned short wLcdX, unsigned short wLcdY, unsigned short wTouchX, unsigned short wTouchY)
- {
- return tchscr_adjust_center( wLcdX, wLcdY, wTouchX, wTouchY );
- }
- unsigned char CalculateTouchLeftTop(unsigned short wLcdX, unsigned short wLcdY, unsigned short wTouchX, unsigned short wTouchY)
- {
- return tchscr_adjust_lftp( wLcdX, wLcdY, wTouchX, wTouchY );
- }
- unsigned char CalculateTouchRightTop(unsigned short wLcdX, unsigned short wLcdY, unsigned short wTouchX, unsigned short wTouchY)
- {
- return tchscr_adjust_rghtp( wLcdX, wLcdY, wTouchX, wTouchY );
- }
- unsigned char CalculateTouchLeftBottom( unsigned short wLcdX, unsigned short wLcdY, unsigned short wTouchX, unsigned short wTouchY )
- {
- return tchscr_adjust_lfbm( wLcdX, wLcdY, wTouchX, wTouchY );
- }
- unsigned char CalculateTouchRightBottom( unsigned short wLcdX, unsigned short wLcdY, unsigned short wTouchX, unsigned short wTouchY )
- {
- return tchscr_adjust_rghbm( wLcdX, wLcdY, wTouchX, wTouchY );
- }
- void BiosSavePenAdjustment(void)
- {
- tchscr_save_rectif();
- }
- void BorderAverage(void)
- {
-
- }
- enum_TCHSCR_AREA tchscr_recognize_area( void )
- {
- if( tchscr.PanelDotY<= tchscr_rectif.cent_val_y )
- {
- if( tchscr.PanelDotX<= tchscr_rectif.cent_val_x )
- return TCHSCR_AREA_A;
- else
- return TCHSCR_AREA_B;
- }
- else
- {
- if( tchscr.PanelDotX<= tchscr_rectif.cent_val_x )
- return TCHSCR_AREA_C;
- else
- return TCHSCR_AREA_D;
- }
- }
- void tchscr_calcu_pencoord( void )
- {
- enum_TCHSCR_AREA area;
-
- area = tchscr_recognize_area();
- #ifndef _NEW_TOUCHPANEL_
- switch (area)
- {
- case TCHSCR_AREA_A:
- if(tchscr.PanelDotX>= tchscr_rectif.lftp_val_x)
- tchscr_pen.PanelDotX = (tchscr.PanelDotX-tchscr_rectif.lftp_val_x)*(LCD_XSIZE/2)
- /(tchscr_rectif.cent_val_x-tchscr_rectif.lftp_val_x);
- else
- tchscr_pen.PanelDotX = 0;
- if(tchscr.PanelDotY>= tchscr_rectif.lftp_val_y)
- tchscr_pen.PanelDotY= (tchscr.PanelDotY-tchscr_rectif.lftp_val_y)*(LCD_YSIZE/2)
- /(tchscr_rectif.cent_val_y-tchscr_rectif.lftp_val_y);
- else
- tchscr_pen.PanelDotY = 0;
- break;
- case TCHSCR_AREA_B:
- if( tchscr.PanelDotX <= tchscr_rectif.rghbm_val_x )
- tchscr_pen.PanelDotX = (tchscr.PanelDotX-tchscr_rectif.cent_val_x)*(LCD_XSIZE/2)
- /(tchscr_rectif.rghbm_val_x-tchscr_rectif.cent_val_x)+(LCD_XSIZE/2);
- else
- tchscr_pen.PanelDotX = LCD_XSIZE-1;
- if( tchscr.PanelDotY >= tchscr_rectif.lftp_val_y )
- tchscr_pen.PanelDotY = (tchscr.PanelDotY-tchscr_rectif.lftp_val_y)*(LCD_YSIZE/2)
- /(tchscr_rectif.cent_val_y-tchscr_rectif.lftp_val_y);
- else
- tchscr_pen.PanelDotY = 0;
- break;
- case TCHSCR_AREA_C:
- if( tchscr.PanelDotX >= tchscr_rectif.lftp_val_x )
- tchscr_pen.PanelDotX = (tchscr.PanelDotX-tchscr_rectif.lftp_val_x)*(LCD_XSIZE/2)
- /(tchscr_rectif.cent_val_x-tchscr_rectif.lftp_val_x);
- else
- tchscr_pen.PanelDotX = 0;
- if( tchscr.PanelDotY <= tchscr_rectif.rghbm_val_y )
- tchscr_pen.PanelDotY = (tchscr.PanelDotY-tchscr_rectif.cent_val_y)*(LCD_YSIZE/2)
- /(tchscr_rectif.rghbm_val_y-tchscr_rectif.cent_val_y)+(LCD_YSIZE/2);
- else
- tchscr_pen.PanelDotY = LCD_YSIZE-1;
- break;
- case TCHSCR_AREA_D:
- if( tchscr.PanelDotX <= tchscr_rectif.rghbm_val_x )
- tchscr_pen.PanelDotX = (tchscr.PanelDotX-tchscr_rectif.cent_val_x)*(LCD_XSIZE/2)
- /(tchscr_rectif.rghbm_val_x-tchscr_rectif.cent_val_x)+(LCD_XSIZE/2);
- else
- tchscr_pen.PanelDotY = LCD_XSIZE-1;
- if( tchscr.PanelDotY <= tchscr_rectif.rghbm_val_y )
- tchscr_pen.PanelDotY = (tchscr.PanelDotY-tchscr_rectif.cent_val_y)*(LCD_YSIZE/2)
- /(tchscr_rectif.rghbm_val_y-tchscr_rectif.cent_val_y)+(LCD_YSIZE/2);
- else
- tchscr_pen.PanelDotY = LCD_YSIZE-1;
- break;
- default:
- ;
- }
- #else
- switch (area)
- {
- case TCHSCR_AREA_C:
- if(tchscr.PanelDotX>= tchscr_rectif.lftp_val_x)
- tchscr_pen.PanelDotX = (tchscr.PanelDotX-tchscr_rectif.lftp_val_x)*(LCD_XSIZE/2)
- /(tchscr_rectif.cent_val_x-tchscr_rectif.lftp_val_x);
- else
- tchscr_pen.PanelDotX = 0;
- if(tchscr.PanelDotY<= tchscr_rectif.lftp_val_y)
- tchscr_pen.PanelDotY= (tchscr_rectif.lftp_val_y-tchscr.PanelDotY)*(LCD_YSIZE/2)
- /(tchscr_rectif.lftp_val_y-tchscr_rectif.cent_val_y);
- else
- tchscr_pen.PanelDotY = 0;
- break;
- case TCHSCR_AREA_D:
- if(tchscr.PanelDotX<= tchscr_rectif.rghbm_val_x)
- tchscr_pen.PanelDotX = (tchscr.PanelDotX-tchscr_rectif.cent_val_x)*(LCD_XSIZE/2)
- /(tchscr_rectif.rghbm_val_x-tchscr_rectif.cent_val_x)+(LCD_XSIZE/2);
- else
- tchscr_pen.PanelDotX = LCD_XSIZE-1;
- if(tchscr.PanelDotY<= tchscr_rectif.lftp_val_y)
- tchscr_pen.PanelDotY= (tchscr_rectif.lftp_val_y-tchscr.PanelDotY)*(LCD_YSIZE/2)
- /(tchscr_rectif.lftp_val_y-tchscr_rectif.cent_val_y);
- else
- tchscr_pen.PanelDotY = 0;
- break;
- case TCHSCR_AREA_A:
- if(tchscr.PanelDotX>= tchscr_rectif.lftp_val_x)
- tchscr_pen.PanelDotX = (tchscr.PanelDotX-tchscr_rectif.lftp_val_x)*(LCD_XSIZE/2)
- /(tchscr_rectif.cent_val_x-tchscr_rectif.lftp_val_x);
- else
- tchscr_pen.PanelDotX = 0;
- if( tchscr.PanelDotY >= tchscr_rectif.rghbm_val_y )
- tchscr_pen.PanelDotY = (tchscr_rectif.cent_val_y-tchscr.PanelDotY)*(LCD_YSIZE/2)
- /(tchscr_rectif.cent_val_y-tchscr_rectif.rghbm_val_y)+(LCD_YSIZE/2);
- else
- tchscr_pen.PanelDotY = LCD_YSIZE-1;
- break;
- case TCHSCR_AREA_B:
- if(tchscr.PanelDotX<= tchscr_rectif.rghbm_val_x)
- tchscr_pen.PanelDotX = (tchscr.PanelDotX-tchscr_rectif.cent_val_x)*(LCD_XSIZE/2)
- /(tchscr_rectif.rghbm_val_x-tchscr_rectif.cent_val_x)+(LCD_XSIZE/2);
- else
- tchscr_pen.PanelDotX = LCD_XSIZE-1;
- if( tchscr.PanelDotY >= tchscr_rectif.rghbm_val_y )
- tchscr_pen.PanelDotY = (tchscr_rectif.cent_val_y-tchscr.PanelDotY)*(LCD_YSIZE/2)
- /(tchscr_rectif.cent_val_y-tchscr_rectif.rghbm_val_y)+(LCD_YSIZE/2);
- else
- tchscr_pen.PanelDotY = LCD_YSIZE-1;
- break;
- default:
- break;
- }
- #if 0
- switch (area)
- {
- case TCHSCR_AREA_A:
- if(tchscr.PanelDotX>= tchscr_rectif.rghbm_val_x)
- tchscr_pen.PanelDotX = (tchscr.PanelDotX-tchscr_rectif.cent_val_x)*(LCD_XSIZE/2)
- /(tchscr_rectif.rghbm_val_x-tchscr_rectif.cent_val_x)+(LCD_XSIZE/2);
- else
- tchscr_pen.PanelDotX = PEN_ERR;
- if(tchscr.PanelDotY>= tchscr_rectif.lftp_val_y)
- tchscr_pen.PanelDotY= (tchscr.PanelDotY-tchscr_rectif.lftp_val_y)*(LCD_YSIZE/2)
- /(tchscr_rectif.cent_val_y-tchscr_rectif.lftp_val_y);
- else
- tchscr_pen.PanelDotY = PEN_ERR;
- break;
- case TCHSCR_AREA_B:
- if(tchscr.PanelDotX<= tchscr_rectif.lftp_val_x)
- tchscr_pen.PanelDotX = (tchscr_rectif.lftp_val_x-tchscr.PanelDotX)*(LCD_XSIZE/2)
- /(tchscr_rectif.lftp_val_x-tchscr_rectif.cent_val_x);
- else
- tchscr_pen.PanelDotX = PEN_ERR;
- if(tchscr.PanelDotY>= tchscr_rectif.lftp_val_y)
- tchscr_pen.PanelDotY= (tchscr.PanelDotY-tchscr_rectif.lftp_val_y)*(LCD_YSIZE/2)
- /(tchscr_rectif.cent_val_y-tchscr_rectif.lftp_val_y);
- else
- tchscr_pen.PanelDotY = PEN_ERR;
- break;
- case TCHSCR_AREA_C:
- if(tchscr.PanelDotX>= tchscr_rectif.rghbm_val_x)
- tchscr_pen.PanelDotX = (tchscr.PanelDotX-tchscr_rectif.cent_val_x)*(LCD_XSIZE/2)
- /(tchscr_rectif.rghbm_val_x-tchscr_rectif.cent_val_x)+(LCD_XSIZE/2);
- else
- tchscr_pen.PanelDotX = PEN_ERR;
- if( tchscr.PanelDotY <= tchscr_rectif.rghbm_val_y )
- tchscr_pen.PanelDotY = (tchscr.PanelDotY-tchscr_rectif.cent_val_y)*(LCD_YSIZE/2)
- /(tchscr_rectif.rghbm_val_y-tchscr_rectif.cent_val_y)+(LCD_YSIZE/2);
- else
- tchscr_pen.PanelDotY = PEN_ERR;
- break;
- case TCHSCR_AREA_D:
- if(tchscr.PanelDotX<= tchscr_rectif.lftp_val_x)
- tchscr_pen.PanelDotX = (tchscr_rectif.lftp_val_x-tchscr.PanelDotX)*(LCD_XSIZE/2)
- /(tchscr_rectif.lftp_val_x-tchscr_rectif.cent_val_x);
- else
- tchscr_pen.PanelDotX = PEN_ERR;
- if( tchscr.PanelDotY <= tchscr_rectif.rghbm_val_y )
- tchscr_pen.PanelDotY = (tchscr.PanelDotY-tchscr_rectif.cent_val_y)*(LCD_YSIZE/2)
- /(tchscr_rectif.rghbm_val_y-tchscr_rectif.cent_val_y)+(LCD_YSIZE/2);
- else
- tchscr_pen.PanelDotY = PEN_ERR;
- break;
- default:
- break;
- }
- #endif
- #endif
-
- }
- void tsGetDefParam(void * pTSAdjustParam)
- {
- TCHSCR_RECTIF *tchscr_rec=(TCHSCR_RECTIF *)pTSAdjustParam;
- memset(tchscr_rec,0,sizeof(TCHSCR_RECTIF));
- #ifndef _NEW_TOUCHPANEL_
- #if 0 //this is DVT2 default
- tchscr_rec->cent_val_x=518;
- tchscr_rec->cent_val_y=518;
- tchscr_rec->lftp_val_x=138;//158 rghtp_val_x
- tchscr_rec->lftp_val_y=138;//834 rghtp_val_y
- tchscr_rec->rghbm_val_x=898;//858 lftbm_val_x
- tchscr_rec->rghbm_val_y=898;//209 lftbm_val_y
- #endif
- // for pvt below, 20071029 by TH
- tchscr_rec->cent_val_x=510;
- tchscr_rec->cent_val_y=510;
- tchscr_rec->lftp_val_x=146;
- tchscr_rec->lftp_val_y=106;
- tchscr_rec->rghbm_val_x=883;
- tchscr_rec->rghbm_val_y=922;
- tchscr_rec->cent_crd_x=LCD_XSIZE/2;
- tchscr_rec->cent_crd_y=LCD_YSIZE/2;
- tchscr_rec->rghbm_crd_x=LCD_XSIZE;
- tchscr_rec->rghbm_crd_y=LCD_YSIZE;
-
- #else
- #ifdef _IACN_MA8_PROJ_
- tchscr_rec->cent_val_x=499;//532;
- tchscr_rec->cent_val_y=514;//507;
- tchscr_rec->lftp_val_x=153;//155;//158 rghtp_val_x
- tchscr_rec->lftp_val_y=937;//950;//834 rghtp_val_y
- tchscr_rec->rghbm_val_x=838;//890;//858 lftbm_val_x
- tchscr_rec->rghbm_val_y=83;//71;//209 lftbm_val_y
- tchscr_rec->cent_crd_x=LCD_XSIZE/2;
- tchscr_rec->cent_crd_y=LCD_YSIZE/2;
- tchscr_rec->rghbm_crd_x=LCD_XSIZE;
- tchscr_rec->rghbm_crd_y=LCD_YSIZE;
- #endif
- #endif
- }
- void tsSetUserParam(void * pTSAdjustParam)
- {
- TCHSCR_RECTIF *tchscr_rec=(TCHSCR_RECTIF *)pTSAdjustParam;
- tchscr_rectif.cent_val_x=tchscr_rec->cent_val_x;
- tchscr_rectif.cent_val_y=tchscr_rec->cent_val_y;
- tchscr_rectif.lftp_val_x=tchscr_rec->lftp_val_x;
- tchscr_rectif.lftp_val_y=tchscr_rec->lftp_val_y;
- tchscr_rectif.rghbm_val_x=tchscr_rec->rghbm_val_x;
- tchscr_rectif.rghbm_val_y=tchscr_rec->rghbm_val_y;
- tchscr_rectif.cent_crd_x=tchscr_rec->cent_crd_x;
- tchscr_rectif.cent_crd_y=tchscr_rec->cent_crd_y;
- tchscr_rectif.rghbm_crd_x=tchscr_rec->rghbm_crd_x;
- tchscr_rectif.rghbm_crd_y=tchscr_rec->rghbm_crd_y;
- }
- void tsGetCurParam(void * pTSAdjustParam)
- {
- memcpy( pTSAdjustParam, &tchscr_rectif, sizeof(tchscr_rectif));
- }
- int tsIsValidParam(void * pTSAdjustParam)
- {
- #if 0
- unsigned long err2;
- unsigned long rad2;
- TCHSCR_RECTIF tchdef;
- TCHSCR_RECTIF *tchdef_rec=&tchdef;
- TCHSCR_RECTIF *tchscr_rec=(TCHSCR_RECTIF *)pTSAdjustParam;
- tsGetDefParam(tchdef_rec);
- rad2 = 90*90;
- if((tchscr_rec->cent_crd_x!=tchdef_rec->cent_crd_x)||(tchscr_rec->cent_crd_y!=tchdef_rec->cent_crd_y)||(tchscr_rec->cent_crd_x!=tchdef_rec->cent_crd_x)||(tchscr_rec->rghbm_crd_x!=tchdef_rec->rghbm_crd_x)||(tchscr_rec->rghbm_crd_y!=tchdef_rec->rghbm_crd_y))
- return 0;
- err2 = (tchscr_rec->cent_val_x-tchdef_rec->cent_val_x)*(tchscr_rec->cent_val_x-tchdef_rec->cent_val_x) +
- (tchscr_rec->cent_val_y-tchdef_rec->cent_val_y)*(tchscr_rec->cent_val_y-tchdef_rec->cent_val_y);
- if( err2 > rad2 )
- return 0;
- err2 = (tchscr_rec->lftp_val_x-tchdef_rec->lftp_val_x)*(tchscr_rec->lftp_val_x-tchdef_rec->lftp_val_x) +
- (tchscr_rec->lftp_val_y-tchdef_rec->lftp_val_y)*(tchscr_rec->lftp_val_y-tchdef_rec->lftp_val_y);
- if( err2 > rad2 )
- return 0;
- err2 = (tchscr_rec->rghbm_val_x-tchdef_rec->rghbm_val_x)*(tchscr_rec->rghbm_val_x-tchdef_rec->rghbm_val_x) +
- (tchscr_rec->rghbm_val_y-tchdef_rec->rghbm_val_y)*(tchscr_rec->rghbm_val_y-tchdef_rec->rghbm_val_y);
- if( err2 > rad2 )
- return 0;
- #endif
- return 1;
-
- }
- unsigned int tsIsNewVersion(void)
- {
- #ifdef _NEW_TOUCHPANEL_
- return 1;
- #else
- return 0;
- #endif
- }