Dual CANbus monitor and instrumentation cluster supporting ILI9341 display controller

Dependencies:   SPI_TFTx2_ILI9341 TOUCH_TFTx2_ILI9341 TFT_fonts mbed

Fork of CANary by Tick Tock

Revision:
43:e7f6f80590e3
Parent:
42:4533b13b297d
Child:
44:6262a9fd1e56
--- a/main.cpp	Sun Mar 31 20:38:15 2013 +0000
+++ b/main.cpp	Tue Apr 02 06:32:25 2013 +0000
@@ -102,7 +102,7 @@
     int readPointer=0;
     char sTemp[40];
     unsigned long secs;
-    unsigned char i,j,display=0;
+    unsigned char i,j,display=0,lwt=0;;
     point lastTouch;
 
     can1.monitor(true); // set to snoop mode
@@ -143,6 +143,8 @@
     t = *localtime(&seconds) ;
     strftime(sTemp, 32, "%a %m/%d/%Y %X\n", &t);
     logMsg(sTemp);
+    sprintf(sTemp,"CANary firmware rev43\n");
+    logMsg(sTemp);
 
     // Look for new binary on thumbdrive
     // Can't make this work right now since USB doesn't attach the right timestamp (so new binary isn't loaded)
@@ -179,9 +181,15 @@
     }*/
 
     secsNoMsg = 0;
-    secsNoTouch = 0;
+
+    dMode[1]=logScreen;
+    lastDMode[1]=99;
+    updateDisplay(1);
+
     // Read config file
     readConfig();
+    wait_ms(4000); // Pause for a few seconds
+
     touched=false;
     secsNoTouch=2;
     while (true) {
@@ -261,9 +269,9 @@
                 //__wfi(); // freeze CPU and wait for interrupt (from canbus or touch)
                 Sleep();
             }
-            secsNoTouch=0;
+            secsNoTouch=2;
             canIdle=secsNoMsg>canTimeout;
-            userIdle=secsNoTouch>userTimeout;
+            //userIdle=!touched;
             dled=0.8; // turn on display LED
             seconds = time(NULL);
             t = *localtime(&seconds) ;
@@ -272,7 +280,7 @@
             if (time(NULL)>(secs+1800)) {
                 logOpen = false; // Start new file if asleep for more than 30 minutes
                 if (secsNoTouch>100) secsNoTouch = 100; // also mostly reset user Idle counter
-            } else if (false){ // insert timestamp on each wake if logging enabled (disabled for now)
+            } else if (logOpen){ // insert timestamp on each wake if logging enabled (disabled for now)
                 file = fopen(fileName, "ab");
                 logTS();
             }
@@ -282,11 +290,22 @@
             lastTouch = tt.get_touch();       
             lastTouch = tt.to_pixel(lastTouch);          // convert to pixel pos
             if((lastTouch.x!=639)&&(lastTouch.x!=319)&&(lastTouch.y!=239)){ // filter phantom touches
-                if (!userIdle) {
-                    secsNoTouch=0;
+                if (userIdle) {
+                    secsNoTouch=2; // Ignore first touch if user idle
+                    userIdle=false;
                 } else {
-                    secsNoTouch=2; // Ignore first touch if user idle
+                    secsNoTouch=0;
                 }
+                if (lastTouch.x>320){
+                    whichTouched=1;
+                } else {
+                    whichTouched=0;
+                }
+                if (whichTouched!=lwt){
+                    lastDMode[lwt]=99; // Repaint lastTouched
+                    lwt=whichTouched;
+                }
+                sMode = 1;
             }
             //sprintf(sTemp,"%d,%d ",lastTouch.x,lastTouch.y);
             //logMsg(sTemp);
@@ -295,12 +314,7 @@
         if (!userIdle) {
             if (secsNoTouch<2) {// Recently touched
                 secsNoTouch +=2; // increment to prevent double touch
-                if (lastTouch.x>320){
-                    whichTouched=1;
-                } else {
-                    whichTouched=0;
-                }
-                if (sMode==0) sMode = 1;
+                sMode = 1;
                 //sprintf(sTemp,"button %d %d,%d %d\n",i,buttonX(lastTouch.x,3),buttonY(lastTouch.y,3),lastTouch.x);
                 //logMsg(sTemp);
                 switch (sMode) {
@@ -428,7 +442,9 @@
                                 break;
                             case 12:
                             case 42:
-                                secsNoTouch = userTimeout; // immediately exit config mode
+                                //secsNoTouch = userTimeout; // immediately exit config mode
+                                sMode=0;
+                                lastDMode[whichTouched]=99; // Repaint
                                 break;
                             case 22:
                             case 52:
@@ -449,8 +465,7 @@
         } else { // userIdle
             if(sMode==1){
                 sMode=0;
-                lastDMode[0]=99;
-                lastDMode[1]=99;
+                lastDMode[whichTouched]=99;
             }
         }