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

Files at this revision

API Documentation at this revision

Comitter:
TickTock
Date:
Wed Jul 17 13:48:51 2013 +0000
Branch:
Metric
Parent:
121:553faf139a20
Child:
123:a8c0042df617
Commit message:
Updated display formatting. Temporarily dumping all 7bb messages to ascii log for exploration.

Changed in this revision

common.h Show annotated file Show diff for this revision Revisions of this file
displayModes.cpp Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
utility.cpp Show annotated file Show diff for this revision Revisions of this file
utility.h Show annotated file Show diff for this revision Revisions of this file
--- a/common.h	Thu Jul 11 05:29:18 2013 +0000
+++ b/common.h	Wed Jul 17 13:48:51 2013 +0000
@@ -33,6 +33,6 @@
 #define BatDataBaseG5 0x2B // 11 frames
 #define BatDataBaseG6 0x36 // 4 frames
 #define BatDataBaseG7 0x3A
-#define BatDataBufMax 0x1B2 // 7 x 3E bytes
+#define BatDataBufMax 0x196 // 7 x 3A bytes
 
 #define VP230Sleep 1 // Set to 0 if using VP231 (sleep disables RX)
\ No newline at end of file
--- a/displayModes.cpp	Thu Jul 11 05:29:18 2013 +0000
+++ b/displayModes.cpp	Wed Jul 17 13:48:51 2013 +0000
@@ -5,7 +5,7 @@
 char sTemp2[16];
 
 void mainDisplay (bool force, bool showButtons){
-    unsigned short gids, SOC, packV_x2;
+    unsigned short gids, SOC_x10, packV_x2;
     static unsigned short lgids=0, lSOC=0, lSOH=0, lpackV_x2=0, maxPS=0;
     static float lmaxTemp=0;
     static float lkW=0, laccV=0, lmpkWh=0;
@@ -15,7 +15,7 @@
     msg = lastMsg[indexLastMsg[0x5bc]]; //Get gids
     gids = (msg.data[0]<<2)+(msg.data[1]>>6);
     msg = lastMsg[indexLastMsg[0x55b]]; //Get SOC
-    SOC = (msg.data[0]<<2)+(msg.data[1]>>6);
+    SOC_x10 = (msg.data[0]<<2)+(msg.data[1]>>6);
     msg = lastMsg[indexLastMsg[0x1db]]; //Get pack volts
     packV_x2 = (msg.data[2]<<2)+(msg.data[3]>>6);
 
@@ -44,10 +44,10 @@
             tt.foreground(Yellow);
             tt.set_font((unsigned char*) Arial28x28);
         }
-        if(force||SOC!=lSOC){
+        if(force||SOC_x10!=lSOC){
             tt.locate(200,10);
-            printf("%4.1f%s\n",(float)SOC/10,"% ");
-            lSOC=SOC;
+            printf("%4.1f%s\n",(float)SOC_x10/10,"% ");
+            lSOC=SOC_x10;
         }
         if(force||packV_x2!=lpackV_x2){
             tt.locate(200,200);
@@ -65,19 +65,30 @@
             laccV=accV;
         }
         if(force||kW[0]!=lkW){
-            tt.locate(180,40);
-            printf("%3.2fkW  \n",kW[0]);
+            if(kW[0]<-10){ //Right justify
+                tt.locate(171,40);
+                printf("%4.2fkW\n",kW[0]);
+            } else if (kW[0]<0){
+                tt.locate(171,40);
+                printf(" %4.2fkW\n",kW[0]);
+            } else if (kW[0]<10){
+                tt.locate(165,40);
+                printf("  %4.2fkW\n",kW[0]);
+            } else {
+                tt.locate(165,40);
+                printf(" %4.2fkW\n",kW[0]);
+            }
             lkW=kW[0];
         }
-        tt.foreground(DarkGrey);
+        tt.foreground(LightGrey);
         if(force||Ah_x10000!=lAh){
             tt.locate(10,70);
             printf("% 4.2fAh \n",(float)Ah_x10000/10000);
             lAh=Ah_x10000;
         }
         if(force||SOH_x100!=lSOH){
-            tt.locate(180,70);
-            printf(" %3.1f%s\n",(float)SOH_x100/100,"% ");
+            tt.locate(200,70);
+            printf("%4.1f%s\n",(float)SOH_x100/100,"% ");
             lSOH=SOH_x100;
         }
     }else {//if(skin==ggSkin){
@@ -100,10 +111,10 @@
             tt.set_font((unsigned char*) Arial28x28);
         }
         
-        if(force||SOC!=lSOC){
+        if(force||SOC_x10!=lSOC){
             tt.locate(200,10);
-            printf("%4.1f%s\n",(float)SOC/10,"% ");
-            lSOC=SOC;
+            printf("%4.1f%s\n",(float)SOC_x10/10,"% ");
+            lSOC=SOC_x10;
         }
         if(force||packV_x2!=lpackV_x2){
             tt.locate(200,200);
@@ -139,7 +150,7 @@
         msg = lastMsg[i+indexOffset];
         printf("%03x : %02x %02x %02x %02x %02x %02x %02x %02x    \n",msg.id,msg.data[0],msg.data[1],msg.data[2],msg.data[3],msg.data[4],msg.data[5],msg.data[6],msg.data[7]);
     }
-    if((sMode==1)&&showButtons){
+    if(showButtons){
         tt.foreground(Yellow);
         tt.background(DarkCyan);
         tt.set_font((unsigned char*) Arial12x12);
@@ -167,11 +178,10 @@
             i++;
         }// if changed
     }while(i<19&&j<99);
-    if((sMode==1)&&showButtons){
+    if(showButtons){
         tt.foreground(Yellow);
         tt.background(DarkCyan);
         tt.set_font((unsigned char*) Arial12x12);
-        
         showButton(0,0,"  <up>","",4,4);
         showButton(2,0," <down>","",4,4);
         showButton(1,0," Reset","Baseline",4,4);
@@ -210,6 +220,8 @@
             tt.locate(6,20+i*60);
             printf("%3.2f : %3.1f : %2.1f\n",kWh_trip[i],convertDistance(miles_trip[i]),convertDistance(miles_trip[i])/kWh_trip[i]);
         }
+    }
+    if(showButtons){
         tt.set_font((unsigned char*) Arial12x12);
         tt.background(DarkCyan);
         tt.foreground(Yellow);
@@ -220,7 +232,7 @@
 }
 
 void healthDisplay (bool force, bool showButtons){
-    unsigned short gids, SOC;
+    unsigned short gids, SOC_x10;
     static unsigned short lgids=0, lSOC=0, lSOH=0;
     static float lmaxTemp=0, lresr=0, lunlV=0;
     static unsigned long lAh=0;
@@ -229,7 +241,7 @@
     msg = lastMsg[indexLastMsg[0x5bc]]; //Get gids
     gids = (msg.data[0]<<2)+(msg.data[1]>>6);
     msg = lastMsg[indexLastMsg[0x55b]]; //Get SOC
-    SOC = (msg.data[0]<<2)+(msg.data[1]>>6);
+    SOC_x10 = (msg.data[0]<<2)+(msg.data[1]>>6);
 
     tt.background(Blue);
     tt.foreground(Yellow);
@@ -260,10 +272,10 @@
         printf("%4d gids \n",gids);
         lgids=gids;
     }
-    if(force||SOC!=lSOC){
+    if(force||SOC_x10!=lSOC){
         tt.locate(10,40);
-        printf(" %4.1f%s \n",(float)SOC/10,"% SOC");
-        lSOC=SOC;
+        printf(" %4.1f%s \n",(float)SOC_x10/10,"% SOC");
+        lSOC=SOC_x10;
     }
     if(force||SOH_x100!=lSOH){
         tt.locate(10,70);
@@ -500,7 +512,7 @@
             showCP=false;
         }
     }
-    if((sMode==1)&&showButtons){
+    if(showButtons){
         tt.foreground(Yellow);
         tt.background(DarkCyan);
         tt.set_font((unsigned char*) Arial12x12);
@@ -530,7 +542,7 @@
         showButton(0,0," GoTo"," Main",4,4);               
         showButton(1,0," GoTo"," Brake",4,4);               
         showButton(2,0," GoTo"," EFF",4,4);               
-        showButton(3,0," GoTo"," DTE",4,4);     
+        showButton(3,0," GoTo","Health",4,4);     
         // middle row
         showButton(0,1," GoTo","CP Data",4,4);               
         showButton(1,1," GoTo","CP Hist",4,4);               
@@ -905,7 +917,7 @@
         tt.set_font((unsigned char*) Arial12x12);
         strftime(sTemp1, 32, "%a %m/%d/%Y %X  \n", &t);
         printf("%s",sTemp1);
-        if((sMode==1)&&showButtons){
+        if(showButtons){
             switch(dtMode){
                 case 0:
                     sprintf(sTemp1,"Year");
@@ -1140,57 +1152,58 @@
 }
 
 void updateDisplay(char display){
-    bool changed;
+    bool changed,showButtons;
     changed = dMode[display]!=lastDMode[display];
+    showButtons = (display==whichTouched)&&(sMode==1);
     tt.set_display(display);
     switch (dMode[display]) {
         case logScreen:
-            printLog(changed,(display==whichTouched));
+            printLog(changed,showButtons);
             break;
         case mainScreen:
-            mainDisplay(changed,(display==whichTouched));
+            mainDisplay(changed,showButtons);
             break;
         case brakeScreen:
-            braking(changed,(display==whichTouched));
+            braking(changed,showButtons);
             break;
         case dteScreen:
-            dteDisplay(changed,(display==whichTouched),true);
+            dteDisplay(changed,showButtons,true);
             break;
          case effScreen:
-            dteDisplay(changed,(display==whichTouched),false);
+            dteDisplay(changed,showButtons,false);
             break;
        case monitorScreen:
-            printLast(changed,(display==whichTouched));
+            printLast(changed,showButtons);
             break;
         case changedScreen:
-            printChanged(changed,(display==whichTouched));
+            printChanged(changed,showButtons);
             break;
         case cpScreen:
-            cpData(changed||showCP,(display==whichTouched));
+            cpData(changed||showCP,showButtons);
             break;
         case configScreen:
-            config(changed,(display==whichTouched));
+            config(changed,showButtons);
             break;
         case playbackScreen:
-            pbScreen(changed,(display==whichTouched));
+            pbScreen(changed,showButtons);
             break;
         case dateScreen:
-            showDateTime(changed,(display==whichTouched));
+            showDateTime(changed,showButtons);
             break;
         case cpHistScreen: // gg - hist
-            cpHistogram(changed||showCP,(display==whichTouched));
+            cpHistogram(changed||showCP,showButtons);
             break;
         case cpBarScreen: // gg - cpbars
-            cpBarPlot(changed||showCP,(display==whichTouched));
+            cpBarPlot(changed||showCP,showButtons);
             break;
         case indexScreen:
-            showIndex(changed,(display==whichTouched));
+            showIndex(changed,showButtons);
             break;
         case tripScreen:
-            tripDisplay(changed,(display==whichTouched));
+            tripDisplay(changed,showButtons);
             break;
         case healthScreen:
-            healthDisplay(changed,(display==whichTouched));
+            healthDisplay(changed,showButtons);
             break;
         default:
             if (changed){
--- a/main.cpp	Thu Jul 11 05:29:18 2013 +0000
+++ b/main.cpp	Wed Jul 17 13:48:51 2013 +0000
@@ -1,13 +1,11 @@
 // main.cpp
 //
 //To Do:
-// * USB device detect
 // * Audible friction brake feedback
 // * User-configurable watchpoint
 // * Add 50% charge option
 // * Tire Pressure Sensor display
 // * Fix bug in playback while connected to canbus (hangs)
-// ** Force regen display to zero when in neutral
 // * Add coasting regen to regen/braking display
 // * Change semilog efficiency graph to linear with 10 minute values
 // * Add additional 79b bank readouts
@@ -47,10 +45,8 @@
 InterruptIn touchpad(p17);
 CAN can1(p9, p10);      // CAN1 (EV) uses pins 9 and 10 (rx, tx) and pin 8 (rs)
 DigitalOut can1SleepMode(p8);     // Use pin 8 to control the sleep mode of can2
-//DigitalInOut can1SleepMode(p8);     // Use pin 8 to control the sleep mode of can2
 CAN can2(p30, p29);     // CAN2 (CAR) uses pins 30 and 29 (rx, tx) and pin 28 (rs)
 DigitalOut can2SleepMode(p28);     // Use pin 28 to control the sleep mode of can1
-//DigitalInOut can2SleepMode(p28);     // Use pin 28 to control the sleep mode of can1
 AnalogIn mon12V(p15);
 TOUCH_TFTx2 tt(p16, p17, p19, p20, p11, p12, p13, p6, p7, p5, "TFT"); // x+,x-,y+,y-,mosi, miso, sclk, cs0, cs1, reset
 PwmOut dled(p23);
@@ -480,7 +476,7 @@
                                     // and re-paint the other screen too, to see new skin there
                                     lastDMode[whichTouched ^ 1]=99; // repaint other screen (^ = XOR)
                                 } else if (dMode[whichTouched] == indexScreen) { // gg - index
-                                    dMode[whichTouched] = dteScreen ; // GoTo DTE Screen
+                                    dMode[whichTouched] = healthScreen ; // Goto health screen
                                     sMode=0;
                                 } else {
                                     lastDMode[whichTouched]=99;//repaint to clear highlight
--- a/utility.cpp	Thu Jul 11 05:29:18 2013 +0000
+++ b/utility.cpp	Wed Jul 17 13:48:51 2013 +0000
@@ -741,14 +741,19 @@
         f_lseek(&bfile,0xffffffff); // go to end of file to append
         strftime(sTemp, 40, "%a %m/%d/%Y %X", &t);
         f_printf(&bfile,"%s,",sTemp);
-        sprintf(sTemp,"%d,%5.1f%%,%5.1f%%, %4.2f, %5.1f,%4.1f,%d,%d,%d,%d,%d",gids,(float)SOC/10, (float)SOH_x100/100,(float)Ah_x10000/10000,(float)packV_x2/2,(float)packA_x2/2,max,min,avg,max-min,jv);      
+        sprintf(sTemp,"%3.1f,%d,%5.1f%%,%5.1f%%, %4.2f, %5.1f,%4.1f,%d,%d,%d,%d,%d",accV,gids,(float)SOC/10, (float)SOH_x100/100,(float)Ah_x10000/10000,(float)packV_x2/2,(float)packA_x2/2,max,min,avg,max-min,jv);      
         f_printf(&bfile,"%s,",sTemp);           
-        f_printf(&bfile,"%d,%d,%d,%d,",(battData[(BatDataBaseG4*7)+ 3]<<8)+battData[(BatDataBaseG4*7)+ 4],battData[(BatDataBaseG4*7)+ 5],(battData[(BatDataBaseG4*7)+ 6]<<8)+battData[(BatDataBaseG4*7)+ 7],battData[(BatDataBaseG4*7)+ 8]);
+        /*f_printf(&bfile,"%d,%d,%d,%d,",(battData[(BatDataBaseG4*7)+ 3]<<8)+battData[(BatDataBaseG4*7)+ 4],battData[(BatDataBaseG4*7)+ 5],(battData[(BatDataBaseG4*7)+ 6]<<8)+battData[(BatDataBaseG4*7)+ 7],battData[(BatDataBaseG4*7)+ 8]);
         f_printf(&bfile,"%d,%d,%d,%d", (battData[(BatDataBaseG4*7)+ 9]<<8)+battData[(BatDataBaseG4*7)+10],battData[(BatDataBaseG4*7)+11],(battData[(BatDataBaseG4*7)+12]<<8)+battData[(BatDataBaseG4*7)+13],battData[(BatDataBaseG4*7)+14]);
         for(i=0; i<96; i++) {
             bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4];
             f_printf(&bfile,",%d",bd);
+        }*/
+        // temporariliy dump everything
+        for(i=0; i<BatDataBufMax; i++) {
+            f_printf(&bfile,",%02x",battData[i]);
         }
+
         f_printf(&bfile,"\r\n");
         f_close(&bfile);
     }
--- a/utility.h	Thu Jul 11 05:29:18 2013 +0000
+++ b/utility.h	Wed Jul 17 13:48:51 2013 +0000
@@ -65,6 +65,7 @@
 extern char revStr[7]; // gg - version
 extern bool debugMode;
 extern bool shunt[96];
+extern float accV;
 
 extern "C" {
     void mbed_reset();