paneldrv.c
上传用户:zbk8730
上传日期:2017-08-10
资源大小:12168k
文件大小:30k
源码类别:

uCOS

开发平台:

C/C++

  1. #include "paneldrv.h"
  2. #include "_define.h"
  3. #include "panel.h"
  4. #include "cpu_clock.h"
  5. #include "cpu.h"
  6. #include "cpu_int.h"
  7. #include "lcd.h"
  8. #define _TOUCH_RESISTER_CHECK_
  9. #ifdef _TOUCH_RESISTER_CHECK_
  10. #define TOUCH_RES_MAX 900
  11. enum
  12. { TOUCH_NO_ACTIVE = 0,
  13. TOUCH_DOWN_ACTIVE,
  14. TOUCH_MOVE_ACTIVE,
  15. TOUCH_MOVE_NO_ACTIVE,
  16. };
  17. #endif
  18. #define           PANRECLEN 5
  19. //#define  PANEL_ROTATE_180
  20. PenQueue  gPenQueue;
  21. PANEL_STRUC tchscr_pen,tchscr,penrectif[PANRECLEN];  
  22. PANEL_STRUC tchscrback;
  23. unsigned char  bTouchCheck4KeyState = 0;
  24. PANELQUEUE   PanelVar;
  25. TCHSCR_RECTIF  tchscr_rectif;
  26. PANEL_STRUC tchscr_pen;
  27. //#define      _NEW_TOUCHPANEL_
  28. #define TARGET_RAD 80
  29. #define  PEN_ERR 999
  30. //#define PRSCVL   19
  31. unsigned short PRSCVL;
  32. #define XDATA_MIN  130//120
  33. #define XDATA_MAX  912//900
  34. #define YDATA_MIN  168//145
  35. #define YDATA_MAX  930//915
  36. #ifndef _NEW_TOUCHPANEL_
  37. #define TOUCHPEN_XY_SWAP
  38. #endif
  39. #define  XLCD_POS(data) ( (int)((LCD_XSIZE*((data)-XDATA_MIN)) /(XDATA_MAX-XDATA_MIN)))
  40. #define  YLCD_POS(data) (( (int)(LCD_YSIZE*((data)-YDATA_MIN)/(YDATA_MAX-YDATA_MIN)) ))
  41. unsigned long g_tsnum=0;
  42. int  g_Lastx,g_Lasty;
  43. int       g_MouseUp=1;
  44. void   TouchPanelISR(void);
  45. #ifdef _TOUCH_RESISTER_CHECK_
  46. int g_touch_down_status;
  47. int g_xdata;
  48. int IsTouchActive()
  49. {
  50. int g_touch_res_p,g_touch_res_m,xposition;
  51. int g_touch_res_value;
  52. //if(!g_touch_down_status)
  53. {
  54. #if 0
  55. rADCTSC=(1<<6)|(1<<5);         //XM,YP enable
  56. rADCDLY=40000;                 
  57. PRSCVL = (unsigned short)((GetClock(PCLK)/1000000) & 0xff);
  58. rADCCON=(1<<14)+((PRSCVL-1)<<6)+(5<<3);   
  59. rADCCON|=0x1;                   //start ADC
  60. while(rADCCON & 0x1); //check if Enable_start is low
  61. while(!(rADCCON & 0x8000));        //check if EC(End of Conversion) flag is high, This line is necessary~!!
  62. xposition = (rADCDAT0&0x3ff);
  63. #else
  64. xposition = g_xdata;
  65. #endif
  66. rADCTSC= (1<<4)|(1<<5);         //XM,YP enable
  67. rADCDLY=4000;                 
  68. PRSCVL = (unsigned short)((GetClock(PCLK)/1000000) & 0xff);
  69. rADCCON=(1<<14)+((PRSCVL-1)<<6)+(7<<3);   
  70. rADCCON|=0x1;                   //start ADC
  71. while(rADCCON & 0x1); //check if Enable_start is low
  72. while(!(rADCCON & 0x8000));        //check if EC(End of Conversion) flag is high, This line is necessary~!!
  73. g_touch_res_m = (rADCDAT0&0x3ff);
  74. //rADCTSC=(1<<6)|(1<<5);         //XM,YP enable
  75. //rADCDLY=40000;                 
  76. //PRSCVL = (unsigned short)((GetClock(PCLK)/1000000) & 0xff);
  77. rADCCON=(1<<14)+((PRSCVL-1)<<6)+(4<<3);   
  78. rADCCON|=0x1;                   //start ADC
  79. while(rADCCON & 0x1); //check if Enable_start is low
  80. while(!(rADCCON & 0x8000));        //check if EC(End of Conversion) flag is high, This line is necessary~!!
  81. g_touch_res_p = (rADCDAT0&0x3ff);
  82. rADCDLY=40000;
  83. g_touch_res_value = (float)((g_touch_res_p/g_touch_res_m)-1)*xposition/1024.0*400;
  84. if( g_touch_res_value > TOUCH_RES_MAX )
  85. {
  86. if(g_touch_down_status == TOUCH_MOVE_ACTIVE || g_touch_down_status == TOUCH_DOWN_ACTIVE)
  87. {
  88. g_touch_down_status = TOUCH_MOVE_NO_ACTIVE;
  89. }
  90. return 0;
  91. }
  92. else
  93. {
  94. if(g_touch_down_status == TOUCH_DOWN_ACTIVE || g_touch_down_status == TOUCH_MOVE_NO_ACTIVE)
  95. {
  96. g_touch_down_status = TOUCH_MOVE_ACTIVE;
  97. }
  98. else if(g_touch_down_status == TOUCH_NO_ACTIVE)
  99. {
  100. g_touch_down_status = TOUCH_DOWN_ACTIVE;
  101. }
  102. return 1;
  103. }
  104. }
  105. }
  106. #endif
  107. //int   g_pendown=0; //0:down;  1:up
  108. void OpenAdcTs(void)
  109. {
  110.     OpenClock(CLK_ADC);
  111. rADCDLY=50000;                  //Normal conversion mode delay about (1/3.6864M)*50000=13.56ms
  112. PRSCVL = (unsigned short)((GetClock(PCLK)/1000000) & 0xff); // 5us
  113. rADCCON=(1<<14)+((PRSCVL-1)<<6);   //PRSCVL En, PRSCVL Value
  114. rADCTSC=0xd3;  //Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En
  115. MapInterrupt(BIT_ADC, (unsigned)TouchPanelISR);
  116. //OpenInterrupt(BIT_ADC);
  117. rINTMSK&=~(BIT_ADC);       //ADC Touch Screen Mask bit clear
  118. rINTSUBMSK&=~(BIT_SUB_TC);
  119. }
  120. int    g_pennum=0;
  121. void ScanTs(void)
  122. {
  123. int volatile xdata, ydata;
  124. if(g_MouseUp)
  125. return;
  126. //rADCTSC=0xd3;  //Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En
  127. if(rADCDAT0&0x8000)
  128. {
  129. rADCTSC&=0xff; // Set stylus down interrupt bit
  130. }
  131. rADCTSC=(1<<3)|(1<<2);         //Pull-up disable, Seq. X,Y postion measure.
  132. // saveAdcdly=rADCDLY;
  133. rADCDLY=40000;                 //Normal conversion mode delay about (1/50M)*40000=0.8ms
  134. PRSCVL = (unsigned short)((GetClock(PCLK)/1000000) & 0xff); // 5us
  135. rADCCON=(1<<14)+((PRSCVL-1)<<6);   //PRSCVL En, PRSCVL Value
  136. rADCCON|=0x1;                   //start ADC
  137. while(rADCCON & 0x1); //check if Enable_start is low
  138. while(!(rADCCON & 0x8000));        //check if EC(End of Conversion) flag is high, This line is necessary~!!
  139. // while(!(rSRCPND & (BIT_ADC)));  //check if ADC is finished with interrupt bit
  140. #ifndef TOUCHPEN_XY_SWAP
  141. ydata=(rADCDAT0&0x3ff);
  142. xdata=(rADCDAT1&0x3ff);
  143. #else
  144. xdata=(rADCDAT0&0x3ff);
  145. ydata=(rADCDAT1&0x3ff);
  146. #endif
  147. #ifdef _TOUCH_RESISTER_CHECK_
  148. g_xdata = xdata;
  149. IsTouchActive();
  150. #endif
  151. #if PANEL_MINMAX_
  152. panel.PanelDotX=g_Lastx;//YLCD_POS(xdata);
  153. panel.PanelDotY=g_Lasty;//XLCD_POS(ydata);
  154. panel.PanelState=TOUCHPEN_MOVE|TOUCHPEN_DOWN;
  155. PutPanelInf(&panel);
  156. g_Lastx=XLCD_POS(xdata);
  157. g_Lasty=YLCD_POS(ydata);
  158. #else 
  159. tchscr.PanelDotX=xdata;
  160. tchscr.PanelDotY=ydata;
  161. if(gbTouchAdjustFlag)
  162. {
  163. if(g_pennum<(PANRECLEN-1))
  164. {
  165. penrectif[++g_pennum]=tchscr;
  166. }
  167. else if(g_pennum==(PANRECLEN-1))
  168. {
  169. tchscr_calcu_pencoord();
  170. #ifdef  PANEL_ROTATE_180
  171. //add  by TH 070404, Rotate TP 180 degree
  172. tchscr_pen.PanelDotX=LCD_XSIZE-tchscr_pen.PanelDotX;
  173. tchscr_pen.PanelDotY=LCD_YSIZE-tchscr_pen.PanelDotY;
  174. #endif
  175. tchscr_pen.PanelState=TOUCHPEN_DOWN;
  176. if((tchscrback.PanelDotX!=PEN_ERR)&&(tchscrback.PanelDotY!=PEN_ERR))
  177. PutPanelInf(&tchscr_pen);
  178. g_pennum++;
  179. }
  180. }
  181. else
  182. {
  183. #ifdef _TOUCH_RESISTER_CHECK_
  184. if(g_touch_down_status == TOUCH_MOVE_ACTIVE )
  185. #endif
  186. {
  187. tchscrback.PanelDotX=g_Lastx;
  188. tchscrback.PanelDotY=g_Lasty;
  189. tchscrback.PanelState=TOUCHPEN_MOVE|TOUCHPEN_DOWN;
  190. if((tchscrback.PanelDotX!=PEN_ERR)&&(tchscrback.PanelDotY!=PEN_ERR))
  191. PutPanelInf(&tchscrback);
  192. tchscr_calcu_pencoord();
  193. #ifdef  PANEL_ROTATE_180
  194. //add  by TH 070404, Rotate TP 180 degree
  195. tchscr_pen.PanelDotX=LCD_XSIZE-tchscr_pen.PanelDotX;
  196. tchscr_pen.PanelDotY=LCD_YSIZE-tchscr_pen.PanelDotY;
  197. #endif
  198. g_Lastx=tchscr_pen.PanelDotX;
  199. g_Lasty=tchscr_pen.PanelDotY;
  200. }
  201. #ifdef _TOUCH_RESISTER_CHECK_
  202. else if(g_touch_down_status == TOUCH_DOWN_ACTIVE )
  203. {
  204. tchscr_calcu_pencoord();
  205. g_Lastx=tchscr_pen.PanelDotX;
  206. g_Lasty=tchscr_pen.PanelDotY;
  207. tchscrback.PanelDotX=g_Lastx;
  208. tchscrback.PanelDotY=g_Lasty;
  209. tchscrback.PanelState=TOUCHPEN_DOWN;
  210. PutPanelInf(&tchscrback);
  211. }
  212. #endif
  213. }
  214. #endif
  215. rADCDLY=40000; 
  216. rADCTSC =0xd3;    //Waiting for interrupt
  217. rADCTSC=rADCTSC|(1<<8); // Detect stylus up interrupt signal.
  218. }
  219. extern void RemoveTimeFunc(void(* function)(void));
  220. unsigned int g_TouchPanelCome=0;
  221. void TouchPanelISR(void)
  222. {
  223. rSUBSRCPND|=BIT_SUB_TC;
  224.  ClearIntLatch (BIT_ADC);
  225.  g_TouchPanelCome=1;
  226.  if((g_tsnum%2))
  227.  {
  228.   g_MouseUp=1;
  229.  }  
  230. }
  231. void   TouchPanelDSR(void)
  232. {
  233. unsigned int saveAdcdly;
  234. int volatile xdata, ydata;
  235. if(rADCDAT0&0x8000)
  236. {
  237. rADCTSC&=0xff; // Set stylus down interrupt bit
  238. }
  239. rADCTSC=(1<<3)|(1<<2);         //Pull-up disable, Seq. X,Y postion measure.
  240. saveAdcdly=rADCDLY;
  241. rADCDLY=40000;                 //Normal conversion mode delay about (1/50M)*40000=0.8ms
  242. PRSCVL = (unsigned short)((GetClock(PCLK)/1000000) & 0xff); // 5us
  243. rADCCON=(1<<14)+((PRSCVL-1)<<6);   //PRSCVL En, PRSCVL Value
  244. rADCCON|=0x1;                   //start ADC
  245. while(rADCCON & 0x1); //check if Enable_start is low
  246. while(!(rADCCON & 0x8000));        //check if EC(End of Conversion) flag is high, This line is necessary~!!
  247. #ifndef TOUCHPEN_XY_SWAP
  248. ydata=(rADCDAT0&0x3ff);
  249. xdata=(rADCDAT1&0x3ff);
  250. #else
  251. xdata=(rADCDAT0&0x3ff);
  252. ydata=(rADCDAT1&0x3ff);
  253. #endif
  254. #ifdef _TOUCH_RESISTER_CHECK_
  255. g_xdata = xdata;
  256. IsTouchActive();
  257. #endif
  258.  rINTSUBMSK&=~(BIT_SUB_TC);
  259.  rINTMSK&=~(BIT_ADC);
  260.  rADCDLY=40000; 
  261.  rADCTSC =0xd3;    //Waiting for interrupt
  262.  if(!(g_tsnum%2))
  263.  {
  264. #ifdef PANEL_MINMAX_
  265. panel.PanelDotX=XLCD_POS(xdata);
  266. panel.PanelDotY=YLCD_POS(ydata);
  267. panel.PanelState=TOUCHPEN_DOWN;
  268. PutPanelInf(&panel);
  269. g_Lastx=panel.PanelDotX;
  270. g_Lasty=panel.PanelDotY;
  271. #else 
  272. tchscr.PanelDotX=xdata;
  273. tchscr.PanelDotY=ydata;
  274. if(gbTouchAdjustFlag)
  275. {
  276. g_pennum=0;
  277. penrectif[g_pennum]=tchscr;
  278. }
  279. else
  280. {
  281. tchscr_calcu_pencoord();
  282. #ifdef PANEL_ROTATE_180
  283. //add  by TH 070404, Rotate TP 180 degree
  284. tchscr_pen.PanelDotX=LCD_XSIZE-tchscr_pen.PanelDotX;
  285. tchscr_pen.PanelDotY=LCD_YSIZE-tchscr_pen.PanelDotY;
  286. #endif
  287. #ifdef _TOUCH_RESISTER_CHECK_
  288. if(g_touch_down_status == TOUCH_DOWN_ACTIVE)
  289. #endif
  290. {
  291. tchscr_pen.PanelState=TOUCHPEN_DOWN;
  292. PutPanelInf(&tchscr_pen);
  293. }
  294. }
  295. g_Lastx=tchscr_pen.PanelDotX;
  296. g_Lasty=tchscr_pen.PanelDotY;
  297. tchscrback.PanelDotX=g_Lastx;
  298. tchscrback.PanelDotY=g_Lasty;
  299. #endif 
  300. rADCTSC=rADCTSC|(1<<8); // Detect stylus up interrupt signal.
  301. g_MouseUp=0;
  302. InsertTimer(20, ScanTs);
  303.  }
  304. else
  305. {
  306. RemoveTimeFunc(ScanTs);
  307. #ifdef PANEL_MINMAX_
  308. panel.PanelState=TOUCHPEN_UP;  
  309. PutPanelInf(&panel);
  310. #else
  311. #ifdef _TOUCH_RESISTER_CHECK_
  312. if((gbTouchAdjustFlag&&(g_pennum>(PANRECLEN-1)))||(!gbTouchAdjustFlag&&(g_touch_down_status != TOUCH_NO_ACTIVE)))
  313. #else
  314. if(gbTouchAdjustFlag&&(g_pennum>(PANRECLEN-1))||(!gbTouchAdjustFlag))
  315. #endif
  316. {
  317. tchscrback.PanelState=TOUCHPEN_UP;  
  318. PutPanelInf(&tchscrback);
  319. #ifdef _TOUCH_RESISTER_CHECK_
  320. g_touch_down_status = TOUCH_NO_ACTIVE;
  321. #endif
  322. }
  323. #endif
  324. }
  325. g_tsnum++;
  326. }
  327. unsigned char CmpRange(unsigned short sx, unsigned short sy, unsigned short tx, unsigned short ty)
  328. {
  329. unsigned short i, j;
  330. i = ModulusMinusValue(tx, sx);
  331. j = ModulusMinusValue(ty, sy);
  332. if( i <= 100 && j <= 100 )
  333. return 1;
  334. return 0;
  335. }
  336. unsigned int g_NTouchpanel=1;
  337. void InitTouchPen(void)
  338. {
  339. gPenQueue.wHead = 0;
  340. gPenQueue.wTail = 0;
  341. gPenQueue.PenState[0].wTouchState = _PEN_UP;
  342. gPenQueue.PenState[0].wTouchX = 0;
  343. gPenQueue.PenState[0].wTouchY = 0; 
  344. OpenAdcTs();
  345. }
  346. TouchPenState GetPenInfo(unsigned short wCurPoint)
  347. {
  348. TouchPenState PenTemp;
  349. PenTemp.wTouchState = gPenQueue.PenState[wCurPoint].wTouchState;
  350. PenTemp.wTouchX = gPenQueue.PenState[wCurPoint].wTouchX;
  351. PenTemp.wTouchY = gPenQueue.PenState[wCurPoint].wTouchY;
  352. return PenTemp;
  353. }
  354. unsigned char ComparePenState(PEN_POINT pt)
  355. {
  356. unsigned short wTail;
  357. TouchPenState PenTemp;
  358. wTail = gPenQueue.wTail;
  359. PenTemp = gPenQueue.PenState[wTail];
  360. // touch same point
  361. if(pt.x == PenTemp.wTouchX && pt.y == PenTemp.wTouchY)
  362. return 0;
  363. return 1;
  364. }
  365. PEN_POINT CurrentPenPos(void)
  366. {
  367. PEN_POINT pt;
  368. pt.x = gwTouchXSite;
  369. pt.y = gwTouchYSite;
  370. return pt;
  371. }
  372. void InitPanelQueue(void)
  373. {
  374. PanelVar.PanelFront = 0;
  375. PanelVar.PanelRear = 0;
  376. PanelVar.PanelBufFull = FALSE;
  377. }
  378. unsigned char GetPanelInf(PANEL_STRUC *panelvar)
  379. {
  380. // panel buffer is not empty
  381. if ( ( PanelVar.PanelFront != PanelVar.PanelRear) )
  382. {
  383. *panelvar = PanelVar.PanelBuf[PanelVar.PanelFront];
  384. PanelVar.PanelFront++;
  385. if ( PanelVar.PanelFront == PANELBUFLEN) 
  386.    PanelVar.PanelFront = 0;
  387.   
  388. return TRUE;
  389.  }
  390. return FALSE;
  391. }
  392. extern  ts_info TsInfo ;
  393. unsigned char PutPanelInf(PANEL_STRUC *panelvar)
  394. {
  395. // BackLightOn();
  396. // jil add, 05/19, set quit flag for fax
  397. if((panelvar->PanelState==TOUCHPEN_DOWN))
  398. StartTouchTone();
  399. if( (PanelVar.PanelRear+1)%PANELBUFLEN != PanelVar.PanelFront)
  400. {
  401. PanelVar.PanelBuf[PanelVar.PanelRear] = *panelvar;
  402. PanelVar.PanelRear++;
  403. if( PanelVar.PanelRear == PANELBUFLEN)
  404.     PanelVar.PanelRear = 0;
  405. if( TsInfo.hdev!=0 && TsInfo.callback!= 0 )
  406. TsInfo.callback(TsInfo.hdev,STATUS_DATA_READY, NULL) ;
  407. return TRUE;  
  408.     }               
  409.     
  410. return FALSE;
  411. }
  412. unsigned char _PeekPanel(PANEL_STRUC *p)
  413. {
  414. // panel buffer is not empty
  415. if ( ( PanelVar.PanelFront != PanelVar.PanelRear) )
  416. {
  417. *p = PanelVar.PanelBuf[PanelVar.PanelFront];
  418. return TRUE;
  419. }
  420. else
  421. return FALSE;
  422. }
  423. unsigned char Is_penexist(void)
  424. {
  425. if ( ( PanelVar.PanelFront != PanelVar.PanelRear))
  426. return TRUE;
  427. else
  428. return FALSE;
  429. }
  430. unsigned char gbTouchAdjustFlag = 0;
  431. void PenAdjustBegin(void)
  432. {
  433. gbTouchAdjustFlag = 1;
  434. }
  435. void PenAdjustEnd(void)
  436. {
  437. gbTouchAdjustFlag = 0;
  438. }
  439.  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 )
  440. {
  441. unsigned long  err2;
  442. unsigned long  rad2;
  443. err2 = (tchscr_pen.PanelDotX-lcd_pos_x)*(tchscr_pen.PanelDotX-lcd_pos_x) +
  444. (tchscr_pen.PanelDotY-lcd_pos_y)*(tchscr_pen.PanelDotY-lcd_pos_y);
  445. rad2 = TARGET_RAD*TARGET_RAD;
  446. if( err2 > rad2 )
  447. return 0;
  448. lcd_pos_x = lcd_pos_x;
  449. lcd_pos_y = lcd_pos_y;
  450. tchscr_rectif.cent_val_x = pen_val_x;
  451. tchscr_rectif.cent_val_y = pen_val_y;
  452. tchscr_rectif.cent_crd_x= LCD_XSIZE/2;
  453. tchscr_rectif.cent_crd_y= LCD_YSIZE/2;
  454. return 1;
  455. }
  456. 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 )
  457. {
  458. unsigned long  err2;
  459. unsigned long  rad2;
  460. err2 = (tchscr_pen.PanelDotX-lcd_pos_x)*(tchscr_pen.PanelDotX-lcd_pos_x) +
  461. (tchscr_pen.PanelDotY-lcd_pos_y)*(tchscr_pen.PanelDotY-lcd_pos_y);
  462. rad2 = TARGET_RAD*TARGET_RAD;
  463. if( err2 > rad2 )
  464. return 0;
  465. #ifdef _NEW_TOUCHPANEL_
  466. {
  467. tchscr_rectif.lftp_val_x = ( (pen_val_x*LCD_XSIZE/2) - (tchscr_rectif.cent_val_x*lcd_pos_x) )
  468. /(LCD_XSIZE/2-lcd_pos_x);
  469. tchscr_rectif.lftp_val_y = ( (pen_val_y*LCD_YSIZE/2) - (tchscr_rectif.cent_val_y*lcd_pos_y) )
  470. /(LCD_YSIZE/2-lcd_pos_y);
  471. }
  472. #else
  473. {
  474. tchscr_rectif.lftp_val_x = ( (pen_val_x*LCD_XSIZE/2) - (tchscr_rectif.cent_val_x*lcd_pos_x) )
  475. /(LCD_XSIZE/2-lcd_pos_x);
  476. tchscr_rectif.lftp_val_y = ( (pen_val_y*LCD_YSIZE/2) - (tchscr_rectif.cent_val_y*lcd_pos_y) )
  477. /(LCD_YSIZE/2-lcd_pos_y);
  478. }
  479. #endif
  480. /*
  481. tchscr_rectif.lftp_val_x = tchscr_rectif.cent_val_x-(LCD_XSIZE/2-0)*(tchscr_rectif.cent_val_x-pen_val_x) 
  482. /(LCD_XSIZE/2-lcd_pos_x);
  483. tchscr_rectif.lftp_val_y = tchscr_rectif.cent_val_y-(LCD_YSIZE/2-0)*(tchscr_rectif.cent_val_y-pen_val_y) 
  484. /(LCD_YSIZE/2-lcd_pos_y);
  485. */
  486. tchscr_rectif.lftp_crd_x= 0;
  487. tchscr_rectif.lftp_crd_y= 0;
  488. return 1;
  489. }
  490. 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 )
  491. {
  492. unsigned long  err2;
  493. unsigned long  rad2;
  494. err2 = (tchscr_pen.PanelDotX-lcd_pos_x)*(tchscr_pen.PanelDotX-lcd_pos_x) +
  495. (tchscr_pen.PanelDotY-lcd_pos_y)*(tchscr_pen.PanelDotY-lcd_pos_y);
  496. rad2 = TARGET_RAD*TARGET_RAD;
  497. if( err2 > rad2 )
  498. return 0;
  499. else
  500. return 1;
  501. }
  502. 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 )
  503. {
  504. unsigned long  err2;
  505. unsigned long  rad2;
  506. err2 = (tchscr_pen.PanelDotX-lcd_pos_x)*(tchscr_pen.PanelDotX-lcd_pos_x) +
  507. (tchscr_pen.PanelDotY-lcd_pos_y)*(tchscr_pen.PanelDotY-lcd_pos_y);
  508. rad2 = TARGET_RAD*TARGET_RAD;
  509. if( err2 > rad2 )
  510. return 0;
  511. else
  512. return 1;
  513. }
  514. 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 )
  515. {
  516. unsigned long  err2;
  517. unsigned long  rad2;
  518. err2 = (tchscr_pen.PanelDotX-lcd_pos_x)*(tchscr_pen.PanelDotX-lcd_pos_x) +
  519. (tchscr_pen.PanelDotY-lcd_pos_y)*(tchscr_pen.PanelDotY-lcd_pos_y);
  520. rad2 = TARGET_RAD*TARGET_RAD;
  521. if( err2 > rad2 )
  522. return 0;
  523. #ifdef _NEW_TOUCHPANEL_
  524. {
  525. tchscr_rectif.rghbm_val_x = ( (pen_val_x*LCD_XSIZE/2) -(tchscr_rectif.cent_val_x*(LCD_XSIZE-lcd_pos_x)) )
  526. /(lcd_pos_x-LCD_XSIZE/2);
  527. tchscr_rectif.rghbm_val_y = ( (pen_val_y*LCD_YSIZE/2) -(tchscr_rectif.cent_val_y*(LCD_YSIZE-lcd_pos_y)) )
  528. /(lcd_pos_y-LCD_YSIZE/2);
  529. }
  530. #else
  531. {
  532. tchscr_rectif.rghbm_val_x = ( (pen_val_x*LCD_XSIZE/2) -(tchscr_rectif.cent_val_x*(LCD_XSIZE-lcd_pos_x)) )
  533. /(lcd_pos_x-LCD_XSIZE/2);
  534. tchscr_rectif.rghbm_val_y = ( (pen_val_y*LCD_YSIZE/2) -(tchscr_rectif.cent_val_y*(LCD_YSIZE-lcd_pos_y)) )
  535. /(lcd_pos_y-LCD_YSIZE/2);
  536. }
  537. #endif
  538. /*
  539. tchscr_rectif.rghbm_val_x = tchscr_rectif.cent_val_x+( (pen_val_x-tchscr_rectif.cent_val_x)*LCD_XSIZE/2 )
  540. /(lcd_pos_x-LCD_XSIZE/2);
  541. tchscr_rectif.rghbm_val_y = tchscr_rectif.cent_val_y+( (pen_val_y-tchscr_rectif.cent_val_y)*LCD_YSIZE/2 )
  542. /(lcd_pos_y-LCD_YSIZE/2);
  543. */
  544. tchscr_rectif.rghbm_crd_x= LCD_XSIZE;
  545. tchscr_rectif.rghbm_crd_y= LCD_YSIZE;
  546. return 1;
  547. }
  548. void tchscr_get_advalue( unsigned short * p_val_x, unsigned short * p_val_y )
  549. {
  550. int  min,max,sum=0,i;
  551. //*p_val_x = tchscr.PanelDotX;
  552. //*p_val_y = tchscr.PanelDotY;
  553. min=0xffff;
  554. max=0;
  555. for(i=0;i<PANRECLEN;i++)
  556. {
  557. sum+=penrectif[i].PanelDotX;
  558. if(penrectif[i].PanelDotX<min)
  559. min=penrectif[i].PanelDotX;
  560. if(penrectif[i].PanelDotX>max)
  561. max=penrectif[i].PanelDotX;
  562. }
  563. * p_val_x=(sum-min-max)/(PANRECLEN-2);
  564. min=0xffff;
  565. max=0;
  566. sum=0;
  567. for(i=0;i<PANRECLEN;i++)
  568. {
  569. sum+=penrectif[i].PanelDotY;
  570. if(penrectif[i].PanelDotY<min)
  571. min=penrectif[i].PanelDotY;
  572. if(penrectif[i].PanelDotY>max)
  573. max=penrectif[i].PanelDotY;
  574. }
  575. * p_val_y=(sum-min-max)/(PANRECLEN-2);
  576. }
  577. void tchscr_save_rectif( void )
  578. {
  579. /* _SYSINFO  temp_sysinfo;
  580. ReadSysInfo( (_SYSINFO *)&temp_sysinfo );
  581. memcpy( &temp_sysinfo.byPanelAdjust[0], (unsigned char*)&tchscr_rectif, sizeof(TCHSCR_RECTIF) );
  582. // sizeof(TCHSCR_RECTIF) should be <= 52bytes, now is 40 bytes
  583. temp_sysinfo.dwPanelSetFlag = 0x12345678;
  584. WriteSysInfo( (_SYSINFO *)&temp_sysinfo );*/
  585. }
  586. void GetAdjustmentAD(unsigned short *wTouchX, unsigned short *wTouchY)
  587. {
  588. tchscr_get_advalue( wTouchX, wTouchY );
  589. }
  590. unsigned char CalculateTouchCentre(unsigned short wLcdX, unsigned short wLcdY, unsigned short wTouchX, unsigned short wTouchY)
  591. {
  592. return tchscr_adjust_center( wLcdX, wLcdY, wTouchX, wTouchY );
  593. }
  594. unsigned char CalculateTouchLeftTop(unsigned short wLcdX, unsigned short wLcdY, unsigned short wTouchX, unsigned short wTouchY)
  595. {
  596. return tchscr_adjust_lftp( wLcdX, wLcdY, wTouchX, wTouchY );
  597. }
  598. unsigned char CalculateTouchRightTop(unsigned short wLcdX, unsigned short wLcdY, unsigned short wTouchX, unsigned short wTouchY)
  599. {
  600. return tchscr_adjust_rghtp( wLcdX, wLcdY, wTouchX, wTouchY );
  601. }
  602. unsigned char CalculateTouchLeftBottom( unsigned short wLcdX, unsigned short wLcdY, unsigned short wTouchX, unsigned short wTouchY )
  603. {
  604. return tchscr_adjust_lfbm( wLcdX, wLcdY, wTouchX, wTouchY );
  605. }
  606. unsigned char CalculateTouchRightBottom( unsigned short wLcdX, unsigned short wLcdY, unsigned short wTouchX, unsigned short wTouchY )
  607. {
  608. return tchscr_adjust_rghbm( wLcdX, wLcdY, wTouchX, wTouchY );
  609. }
  610. void BiosSavePenAdjustment(void)
  611. {
  612. tchscr_save_rectif();
  613. }
  614. void BorderAverage(void)
  615. {
  616. }
  617. enum_TCHSCR_AREA tchscr_recognize_area( void )
  618. {
  619. if( tchscr.PanelDotY<= tchscr_rectif.cent_val_y )
  620. {
  621. if( tchscr.PanelDotX<= tchscr_rectif.cent_val_x )
  622. return TCHSCR_AREA_A;
  623. else
  624. return TCHSCR_AREA_B;
  625. }
  626. else
  627. {
  628. if( tchscr.PanelDotX<= tchscr_rectif.cent_val_x )
  629. return TCHSCR_AREA_C;
  630. else
  631. return TCHSCR_AREA_D;
  632. }
  633. }
  634. void tchscr_calcu_pencoord( void )
  635. {
  636. enum_TCHSCR_AREA  area;
  637. area = tchscr_recognize_area();
  638. #ifndef _NEW_TOUCHPANEL_
  639. switch (area)
  640. {
  641. case TCHSCR_AREA_A:
  642. if(tchscr.PanelDotX>= tchscr_rectif.lftp_val_x)
  643. tchscr_pen.PanelDotX = (tchscr.PanelDotX-tchscr_rectif.lftp_val_x)*(LCD_XSIZE/2)
  644. /(tchscr_rectif.cent_val_x-tchscr_rectif.lftp_val_x);
  645. else
  646. tchscr_pen.PanelDotX = 0;
  647. if(tchscr.PanelDotY>= tchscr_rectif.lftp_val_y)
  648. tchscr_pen.PanelDotY= (tchscr.PanelDotY-tchscr_rectif.lftp_val_y)*(LCD_YSIZE/2)
  649. /(tchscr_rectif.cent_val_y-tchscr_rectif.lftp_val_y);
  650. else
  651. tchscr_pen.PanelDotY = 0;
  652. break;
  653. case TCHSCR_AREA_B:
  654. if( tchscr.PanelDotX <= tchscr_rectif.rghbm_val_x )
  655. tchscr_pen.PanelDotX = (tchscr.PanelDotX-tchscr_rectif.cent_val_x)*(LCD_XSIZE/2)
  656. /(tchscr_rectif.rghbm_val_x-tchscr_rectif.cent_val_x)+(LCD_XSIZE/2);
  657. else
  658. tchscr_pen.PanelDotX = LCD_XSIZE-1;
  659. if( tchscr.PanelDotY >= tchscr_rectif.lftp_val_y )
  660. tchscr_pen.PanelDotY = (tchscr.PanelDotY-tchscr_rectif.lftp_val_y)*(LCD_YSIZE/2)
  661. /(tchscr_rectif.cent_val_y-tchscr_rectif.lftp_val_y);
  662. else
  663. tchscr_pen.PanelDotY = 0;
  664. break;
  665. case TCHSCR_AREA_C:
  666. if( tchscr.PanelDotX >= tchscr_rectif.lftp_val_x )
  667. tchscr_pen.PanelDotX = (tchscr.PanelDotX-tchscr_rectif.lftp_val_x)*(LCD_XSIZE/2)
  668. /(tchscr_rectif.cent_val_x-tchscr_rectif.lftp_val_x);
  669. else
  670. tchscr_pen.PanelDotX = 0;
  671. if( tchscr.PanelDotY <= tchscr_rectif.rghbm_val_y )
  672. tchscr_pen.PanelDotY = (tchscr.PanelDotY-tchscr_rectif.cent_val_y)*(LCD_YSIZE/2)
  673. /(tchscr_rectif.rghbm_val_y-tchscr_rectif.cent_val_y)+(LCD_YSIZE/2);
  674. else
  675. tchscr_pen.PanelDotY = LCD_YSIZE-1;
  676. break;
  677. case TCHSCR_AREA_D:
  678. if( tchscr.PanelDotX <= tchscr_rectif.rghbm_val_x )
  679. tchscr_pen.PanelDotX = (tchscr.PanelDotX-tchscr_rectif.cent_val_x)*(LCD_XSIZE/2)
  680. /(tchscr_rectif.rghbm_val_x-tchscr_rectif.cent_val_x)+(LCD_XSIZE/2);
  681. else
  682. tchscr_pen.PanelDotY = LCD_XSIZE-1;
  683. if( tchscr.PanelDotY <= tchscr_rectif.rghbm_val_y )
  684. tchscr_pen.PanelDotY = (tchscr.PanelDotY-tchscr_rectif.cent_val_y)*(LCD_YSIZE/2)
  685. /(tchscr_rectif.rghbm_val_y-tchscr_rectif.cent_val_y)+(LCD_YSIZE/2);
  686. else
  687. tchscr_pen.PanelDotY = LCD_YSIZE-1;
  688. break;
  689. default:
  690. ;
  691. }
  692. #else
  693. switch (area)
  694. {
  695. case TCHSCR_AREA_C:
  696. if(tchscr.PanelDotX>= tchscr_rectif.lftp_val_x)
  697. tchscr_pen.PanelDotX = (tchscr.PanelDotX-tchscr_rectif.lftp_val_x)*(LCD_XSIZE/2)
  698. /(tchscr_rectif.cent_val_x-tchscr_rectif.lftp_val_x);
  699. else
  700. tchscr_pen.PanelDotX = 0;
  701. if(tchscr.PanelDotY<= tchscr_rectif.lftp_val_y)
  702. tchscr_pen.PanelDotY= (tchscr_rectif.lftp_val_y-tchscr.PanelDotY)*(LCD_YSIZE/2)
  703. /(tchscr_rectif.lftp_val_y-tchscr_rectif.cent_val_y);
  704. else
  705. tchscr_pen.PanelDotY = 0;
  706. break;
  707. case TCHSCR_AREA_D:
  708. if(tchscr.PanelDotX<= tchscr_rectif.rghbm_val_x)
  709. tchscr_pen.PanelDotX = (tchscr.PanelDotX-tchscr_rectif.cent_val_x)*(LCD_XSIZE/2)
  710. /(tchscr_rectif.rghbm_val_x-tchscr_rectif.cent_val_x)+(LCD_XSIZE/2);
  711. else
  712. tchscr_pen.PanelDotX = LCD_XSIZE-1;
  713. if(tchscr.PanelDotY<= tchscr_rectif.lftp_val_y)
  714. tchscr_pen.PanelDotY= (tchscr_rectif.lftp_val_y-tchscr.PanelDotY)*(LCD_YSIZE/2)
  715. /(tchscr_rectif.lftp_val_y-tchscr_rectif.cent_val_y);
  716. else
  717. tchscr_pen.PanelDotY = 0;
  718. break;
  719. case TCHSCR_AREA_A:
  720. if(tchscr.PanelDotX>= tchscr_rectif.lftp_val_x)
  721. tchscr_pen.PanelDotX = (tchscr.PanelDotX-tchscr_rectif.lftp_val_x)*(LCD_XSIZE/2)
  722. /(tchscr_rectif.cent_val_x-tchscr_rectif.lftp_val_x);
  723. else
  724. tchscr_pen.PanelDotX = 0;
  725. if( tchscr.PanelDotY >= tchscr_rectif.rghbm_val_y )
  726. tchscr_pen.PanelDotY = (tchscr_rectif.cent_val_y-tchscr.PanelDotY)*(LCD_YSIZE/2)
  727. /(tchscr_rectif.cent_val_y-tchscr_rectif.rghbm_val_y)+(LCD_YSIZE/2);
  728. else
  729. tchscr_pen.PanelDotY = LCD_YSIZE-1;
  730. break;
  731. case TCHSCR_AREA_B:
  732. if(tchscr.PanelDotX<= tchscr_rectif.rghbm_val_x)
  733. tchscr_pen.PanelDotX = (tchscr.PanelDotX-tchscr_rectif.cent_val_x)*(LCD_XSIZE/2)
  734. /(tchscr_rectif.rghbm_val_x-tchscr_rectif.cent_val_x)+(LCD_XSIZE/2);
  735. else
  736. tchscr_pen.PanelDotX = LCD_XSIZE-1;
  737. if( tchscr.PanelDotY >= tchscr_rectif.rghbm_val_y )
  738. tchscr_pen.PanelDotY = (tchscr_rectif.cent_val_y-tchscr.PanelDotY)*(LCD_YSIZE/2)
  739. /(tchscr_rectif.cent_val_y-tchscr_rectif.rghbm_val_y)+(LCD_YSIZE/2);
  740. else
  741. tchscr_pen.PanelDotY = LCD_YSIZE-1;
  742. break;
  743. default:
  744. break;
  745. }
  746. #if 0
  747. switch (area)
  748. {
  749. case TCHSCR_AREA_A:
  750. if(tchscr.PanelDotX>= tchscr_rectif.rghbm_val_x)
  751. tchscr_pen.PanelDotX = (tchscr.PanelDotX-tchscr_rectif.cent_val_x)*(LCD_XSIZE/2)
  752. /(tchscr_rectif.rghbm_val_x-tchscr_rectif.cent_val_x)+(LCD_XSIZE/2);
  753. else
  754. tchscr_pen.PanelDotX = PEN_ERR;
  755. if(tchscr.PanelDotY>= tchscr_rectif.lftp_val_y)
  756. tchscr_pen.PanelDotY= (tchscr.PanelDotY-tchscr_rectif.lftp_val_y)*(LCD_YSIZE/2)
  757. /(tchscr_rectif.cent_val_y-tchscr_rectif.lftp_val_y);
  758. else
  759. tchscr_pen.PanelDotY = PEN_ERR;
  760. break;
  761. case TCHSCR_AREA_B:
  762. if(tchscr.PanelDotX<= tchscr_rectif.lftp_val_x)
  763. tchscr_pen.PanelDotX = (tchscr_rectif.lftp_val_x-tchscr.PanelDotX)*(LCD_XSIZE/2)
  764. /(tchscr_rectif.lftp_val_x-tchscr_rectif.cent_val_x);
  765. else
  766. tchscr_pen.PanelDotX = PEN_ERR;
  767. if(tchscr.PanelDotY>= tchscr_rectif.lftp_val_y)
  768. tchscr_pen.PanelDotY= (tchscr.PanelDotY-tchscr_rectif.lftp_val_y)*(LCD_YSIZE/2)
  769. /(tchscr_rectif.cent_val_y-tchscr_rectif.lftp_val_y);
  770. else
  771. tchscr_pen.PanelDotY = PEN_ERR;
  772. break;
  773. case TCHSCR_AREA_C:
  774. if(tchscr.PanelDotX>= tchscr_rectif.rghbm_val_x)
  775. tchscr_pen.PanelDotX = (tchscr.PanelDotX-tchscr_rectif.cent_val_x)*(LCD_XSIZE/2)
  776. /(tchscr_rectif.rghbm_val_x-tchscr_rectif.cent_val_x)+(LCD_XSIZE/2);
  777. else
  778. tchscr_pen.PanelDotX = PEN_ERR;
  779. if( tchscr.PanelDotY <= tchscr_rectif.rghbm_val_y )
  780. tchscr_pen.PanelDotY = (tchscr.PanelDotY-tchscr_rectif.cent_val_y)*(LCD_YSIZE/2)
  781. /(tchscr_rectif.rghbm_val_y-tchscr_rectif.cent_val_y)+(LCD_YSIZE/2);
  782. else
  783. tchscr_pen.PanelDotY = PEN_ERR;
  784. break;
  785. case TCHSCR_AREA_D:
  786. if(tchscr.PanelDotX<= tchscr_rectif.lftp_val_x)
  787. tchscr_pen.PanelDotX = (tchscr_rectif.lftp_val_x-tchscr.PanelDotX)*(LCD_XSIZE/2)
  788. /(tchscr_rectif.lftp_val_x-tchscr_rectif.cent_val_x);
  789. else
  790. tchscr_pen.PanelDotX = PEN_ERR;
  791. if( tchscr.PanelDotY <= tchscr_rectif.rghbm_val_y )
  792. tchscr_pen.PanelDotY = (tchscr.PanelDotY-tchscr_rectif.cent_val_y)*(LCD_YSIZE/2)
  793. /(tchscr_rectif.rghbm_val_y-tchscr_rectif.cent_val_y)+(LCD_YSIZE/2);
  794. else
  795. tchscr_pen.PanelDotY = PEN_ERR;
  796. break;
  797. default:
  798. break;
  799. }
  800. #endif
  801. #endif
  802. }
  803. void tsGetDefParam(void * pTSAdjustParam)
  804. {
  805. TCHSCR_RECTIF *tchscr_rec=(TCHSCR_RECTIF *)pTSAdjustParam;
  806. memset(tchscr_rec,0,sizeof(TCHSCR_RECTIF));
  807. #ifndef _NEW_TOUCHPANEL_
  808. #if 0 //this is DVT2 default
  809. tchscr_rec->cent_val_x=518;
  810. tchscr_rec->cent_val_y=518;
  811. tchscr_rec->lftp_val_x=138;//158 rghtp_val_x
  812. tchscr_rec->lftp_val_y=138;//834 rghtp_val_y
  813. tchscr_rec->rghbm_val_x=898;//858 lftbm_val_x
  814. tchscr_rec->rghbm_val_y=898;//209 lftbm_val_y
  815. #endif
  816. // for pvt below, 20071029 by TH
  817. tchscr_rec->cent_val_x=510;
  818. tchscr_rec->cent_val_y=510;
  819. tchscr_rec->lftp_val_x=146;
  820. tchscr_rec->lftp_val_y=106;
  821. tchscr_rec->rghbm_val_x=883;
  822. tchscr_rec->rghbm_val_y=922;
  823. tchscr_rec->cent_crd_x=LCD_XSIZE/2;
  824. tchscr_rec->cent_crd_y=LCD_YSIZE/2;
  825. tchscr_rec->rghbm_crd_x=LCD_XSIZE;
  826. tchscr_rec->rghbm_crd_y=LCD_YSIZE;
  827. #else
  828. #ifdef _IACN_MA8_PROJ_
  829. tchscr_rec->cent_val_x=499;//532;
  830. tchscr_rec->cent_val_y=514;//507;
  831. tchscr_rec->lftp_val_x=153;//155;//158 rghtp_val_x
  832. tchscr_rec->lftp_val_y=937;//950;//834 rghtp_val_y
  833. tchscr_rec->rghbm_val_x=838;//890;//858 lftbm_val_x
  834. tchscr_rec->rghbm_val_y=83;//71;//209 lftbm_val_y
  835. tchscr_rec->cent_crd_x=LCD_XSIZE/2;
  836. tchscr_rec->cent_crd_y=LCD_YSIZE/2;
  837. tchscr_rec->rghbm_crd_x=LCD_XSIZE;
  838. tchscr_rec->rghbm_crd_y=LCD_YSIZE;
  839. #endif
  840. #endif
  841. }
  842. void tsSetUserParam(void * pTSAdjustParam)
  843. {
  844. TCHSCR_RECTIF *tchscr_rec=(TCHSCR_RECTIF *)pTSAdjustParam;
  845. tchscr_rectif.cent_val_x=tchscr_rec->cent_val_x;
  846. tchscr_rectif.cent_val_y=tchscr_rec->cent_val_y;
  847. tchscr_rectif.lftp_val_x=tchscr_rec->lftp_val_x;
  848. tchscr_rectif.lftp_val_y=tchscr_rec->lftp_val_y;
  849. tchscr_rectif.rghbm_val_x=tchscr_rec->rghbm_val_x;
  850. tchscr_rectif.rghbm_val_y=tchscr_rec->rghbm_val_y;
  851. tchscr_rectif.cent_crd_x=tchscr_rec->cent_crd_x;
  852. tchscr_rectif.cent_crd_y=tchscr_rec->cent_crd_y;
  853. tchscr_rectif.rghbm_crd_x=tchscr_rec->rghbm_crd_x;
  854. tchscr_rectif.rghbm_crd_y=tchscr_rec->rghbm_crd_y;
  855. }
  856. void tsGetCurParam(void * pTSAdjustParam)
  857. {
  858. memcpy( pTSAdjustParam, &tchscr_rectif, sizeof(tchscr_rectif));
  859. }
  860. int  tsIsValidParam(void * pTSAdjustParam)
  861. {
  862. #if 0
  863. unsigned long  err2;
  864. unsigned long  rad2;
  865. TCHSCR_RECTIF  tchdef;
  866. TCHSCR_RECTIF *tchdef_rec=&tchdef;
  867. TCHSCR_RECTIF *tchscr_rec=(TCHSCR_RECTIF *)pTSAdjustParam;
  868. tsGetDefParam(tchdef_rec);
  869. rad2 = 90*90;
  870. 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))
  871. return 0;
  872. err2 = (tchscr_rec->cent_val_x-tchdef_rec->cent_val_x)*(tchscr_rec->cent_val_x-tchdef_rec->cent_val_x) +
  873. (tchscr_rec->cent_val_y-tchdef_rec->cent_val_y)*(tchscr_rec->cent_val_y-tchdef_rec->cent_val_y);
  874. if( err2 > rad2 )
  875. return 0;
  876. err2 = (tchscr_rec->lftp_val_x-tchdef_rec->lftp_val_x)*(tchscr_rec->lftp_val_x-tchdef_rec->lftp_val_x) +
  877. (tchscr_rec->lftp_val_y-tchdef_rec->lftp_val_y)*(tchscr_rec->lftp_val_y-tchdef_rec->lftp_val_y);
  878. if( err2 > rad2 )
  879. return 0;
  880. err2 = (tchscr_rec->rghbm_val_x-tchdef_rec->rghbm_val_x)*(tchscr_rec->rghbm_val_x-tchdef_rec->rghbm_val_x) +
  881. (tchscr_rec->rghbm_val_y-tchdef_rec->rghbm_val_y)*(tchscr_rec->rghbm_val_y-tchdef_rec->rghbm_val_y);
  882. if( err2 > rad2 )
  883. return 0;
  884. #endif
  885. return 1;
  886. }
  887. unsigned int tsIsNewVersion(void)
  888. {
  889. #ifdef       _NEW_TOUCHPANEL_
  890. return 1;
  891. #else
  892. return 0;
  893. #endif
  894. }