Attempts to merge SPI_TFT2 & SPI_TFT_ILI9341

Dependencies:   SPI_TFTx2 TFT_fonts TOUCH_TFTx2 mbed

Fork of CANary by Tick Tock

Revision:
134:ad243e4f1a17
Parent:
133:b0675d9d11dd
Child:
135:89986950d501
--- a/main.cpp	Wed Jul 24 12:33:49 2013 +0000
+++ b/main.cpp	Thu Jul 25 14:32:54 2013 +0000
@@ -10,6 +10,12 @@
 // * Add ability to transfer settings config file to/from USB
 // * Subtract accessory power from efficiency history (add back in when displaying)
 
+// rev134
+// Added orange highlight if psi<32
+// Qualified max and min trip efficiency update with trips > 3 miles
+// Keep mbed asleep during charging (EVcan only) unless logging active
+// Added miles & kWh to trip log
+
 #include "mbed.h"
 #include "CAN.h"
 #include "beep.h"
@@ -20,7 +26,7 @@
 #include "displayModes.h"
 #include "TOUCH_TFTx2.h"
 
-char revStr[7] = "133"; // gg - revision string, max 6 characters
+char revStr[7] = "134"; // gg - revision string, max 6 characters
 
 FATFS USBdrive;
 LocalFileSystem local("local");
@@ -117,8 +123,8 @@
 unsigned char dtePeriod = 14; //ten minute averaging interval
 float kWh_trip[3]={0};
 float miles_trip[3]={0};
-float maxTripEff = 0;
-float minTripEff = 99;
+float maxTripEff = 4;
+float minTripEff = 4;
 float mph[39]={0};
 float kW[39]={0};
 float mpkWh[39]={0};
@@ -195,6 +201,9 @@
                 mpkWh[i]=mph[i]/kW[i];
             }
         }
+        if(!feof(hfile)){
+            fscanf(hfile,"%f %f\r\n",&maxTripEff,&minTripEff);
+        }
         fclose(hfile);
         printMsg("History Loaded.\n"); // History loaded
     } else { // create initial file
@@ -292,7 +301,9 @@
             }
             if (logOpen){ //close file to dump buffer
                 f_close(&efile);
-            } // if (logOpen)
+            } else { //detach EVcan so only carcan will trigger wake
+                can1.attach(NULL);
+            }// if (logOpen)
             seconds = time(NULL);
             t = *localtime(&seconds) ;
             strftime(sTemp, 40, "Sleeping: %a %m/%d/%Y %X\n", &t);
@@ -312,6 +323,9 @@
                 //__wfi(); // freeze CPU and wait for interrupt (from canbus or touch)
                 Sleep();
             }
+            if (logOpen){ // Re-attach EVcan
+                can1.attach(&recieve1);
+            }
             lastDMode[0]=99;
             lastDMode[1]=99;
             secsNoTouch=2;
@@ -640,7 +654,6 @@
                             //-----------------------------------
                             // Select Screen Navigation
                             case 17:
-                                //secsNoTouch = userTimeout; // immediately exit config mode
                                 sMode=0;
                                 lastDMode[whichTouched]=99; // Repaint
                                 break;
@@ -683,16 +696,25 @@
             accOn=(accV>5)?true:false;
             moving=(mph[0]>0.1);
             charging=!moving&&(kW[0]<-1); // not moving and generating energy so must be charging
-            if(laccOn&&!accOn){ // Car turned off
-                saveDmode=dMode[0];
-                dMode[0]=healthScreen;
+            if (laccOn&&!accOn){ // Car turned off
+                if (showHealth){
+                    if (saveDmode==99){
+                        saveDmode=dMode[0];
+                    }
+                    dMode[0]=healthScreen;
+                    secsNoTouch=0;// Keep display on a few seconds
+                    sMode=0;
+                    userIdle=false;
+                }
                 // Keep track of max and min trip efficiency
-                float tmpeff = miles_trip[0]/kWh_trip[0];
-                if (maxTripEff<tmpeff) {
-                    maxTripEff=tmpeff;
-                }
-                if (minTripEff>tmpeff) {
-                    minTripEff=tmpeff;
+                if (miles_trip[0]>3){ // Ignore very short trips
+                    float tmpeff = miles_trip[0]/kWh_trip[0];
+                    if (maxTripEff<tmpeff) {
+                        maxTripEff=tmpeff;
+                    }
+                    if (minTripEff>tmpeff) {
+                        minTripEff=tmpeff;
+                    }
                 }
                 if (repeatPoll) { // Log on shutdown if autopoll enabled
                     tripLog(); // Write trip log on powerdown
@@ -703,22 +725,28 @@
                     for(i=0;i<39;i++){
                         fprintf(hfile,"%f %f\r\n",mph[i],kW[i]);
                     }
+                    fprintf(hfile,"%f %f\r\n",maxTripEff,minTripEff); // Save max and min
                     fclose(hfile);
                 }
             }
-            if(!laccOn&&accOn){ // Car turned on
+            if (!laccOn&&accOn){ // Car turned on
                 miles_trip[0]=0;
                 kWh_trip[0]=0;
                 wait5secs=5;
-                if(showHealth){
-                    saveDmode=dMode[0];
+                if (showHealth){
+                    if (saveDmode==99){
+                        saveDmode=dMode[0];
+                    }
                     dMode[0]=healthScreen;
                 }
             }
             laccOn=accOn;
             if(!accOn&&!logEn&&userIdle&&!playbackEn){ // Car off and logging disabled and no user activity
-                dled = 0; 
-                dMode[0]=saveDmode;
+                dled = 0;
+                if (saveDmode<99){
+                    dMode[0]=saveDmode;
+                    saveDmode=99;
+                }
             }else if(!headlights){
                 dled = ledHi;
             } else {
@@ -732,6 +760,8 @@
                     msgReq.attach(&sendReq,0.015);
                 }
             }
+
+            //remove health screen once moving
             if(moving&&(saveDmode<99)&&(wait5secs==0)){
                 dMode[0]=saveDmode;
                 saveDmode=99;