Forked para SNOCC

Dependencies:   GPS

Dependents:   SNOCC_V1 SNOCC_V2

Fork of RA8875 by SNOCC

Revision:
88:bfddef6ec836
Parent:
85:022bba13c5c4
Child:
103:7e0464ca6c5c
diff -r ee2240581aa7 -r bfddef6ec836 RA8875_Touch.cpp
--- a/RA8875_Touch.cpp	Mon Jan 19 13:32:56 2015 +0000
+++ b/RA8875_Touch.cpp	Mon Jan 19 15:44:41 2015 +0000
@@ -74,13 +74,15 @@
 }
 
 
-RetCode_t RA8875::TouchPanelCalibrate(const char * msg, tpMatrix_t * matrix)
+RetCode_t RA8875::TouchPanelCalibrate(const char * msg, tpMatrix_t * matrix, int maxwait_s)
 {
     point_t pTest[3];
     point_t pSample[3];
     int x,y;
+    Timer timeout;  // timeout guards for not-installed, stuck, user not present...
     
-    while (TouchPanelA2DFiltered(&x, &y))
+    timeout.start();
+    while (TouchPanelA2DFiltered(&x, &y) && timeout.read() < maxwait_s)
         wait_ms(20);
     cls();
     if (msg)
@@ -89,12 +91,13 @@
     pTest[0].x = 50;            pTest[0].y = 50;
     pTest[1].x = width() - 50;  pTest[1].y = height()/2;
     pTest[2].x = width()/2;     pTest[2].y = height() - 50;
+
     for (int i=0; i<3; i++) {
         foreground(Blue);
         printf(" (%3d,%3d) => ", pTest[i].x, pTest[i].y);
         line(pTest[i].x-10, pTest[i].y, pTest[i].x+10, pTest[i].y, White);
         line(pTest[i].x, pTest[i].y-10, pTest[i].x, pTest[i].y+10, White);
-        while (!TouchPanelA2DFiltered(&x, &y))
+        while (!TouchPanelA2DFiltered(&x, &y) && timeout.read() < maxwait_s)
             wait_ms(20);
         pSample[i].x = x;
         pSample[i].y = y;
@@ -102,11 +105,14 @@
         line(pTest[i].x, pTest[i].y-10, pTest[i].x, pTest[i].y+10, Black);
         foreground(Blue);
         printf(" (%4d,%4d)\r\n", x,y);
-        while (TouchPanelA2DFiltered(&x, &y))
+        while (TouchPanelA2DFiltered(&x, &y) && timeout.read() < maxwait_s)
             wait_ms(20);
         wait(2);
     }
-    return TouchPanelComputeCalibration(pTest, pSample, matrix);
+    if (timeout.read() >= maxwait_s)
+        return touch_cal_timeout;
+    else
+        return TouchPanelComputeCalibration(pTest, pSample, matrix);
 }