Dual CANbus monitor and instrumentation cluster

Dependencies:   SPI_TFTx2 TFT_fonts TOUCH_TFTx2 beep mbed

Fork of CANary by Tick Tock

Revision:
37:fea2c1d52c5f
Parent:
36:dbd39c315258
Child:
38:155ec32c5e91
--- a/main.cpp	Sat Mar 23 04:43:45 2013 +0000
+++ b/main.cpp	Sun Mar 24 15:35:45 2013 +0000
@@ -21,8 +21,6 @@
 #include "EthernetPowerControl.h"
 #include "utility.h"
 #include "displayModes.h"
-#include "GraphicsDisplay.h"
-#include "SPI_TFTx2.h"
 #include "TOUCH_TFTx2.h"
 
 LocalFileSystem local("local");
@@ -85,15 +83,17 @@
 unsigned short pollInt = 300; // polling interval=5 minutes (until config file read)
 bool accOn = false; // Accessories on
 float scale12V = 16.2; // R1:R2 ratio
-signed long kWh = 0;
+signed long mWs = 0;
 unsigned long miles = 0;
 float mpkWh = 0;
 float accV = 0;
 bool playbackEn = false;
 bool playbackOpen = false;
-float playbackInt = 1; //read one message every 64 ms
+float playbackInt = 0.032; //read one message every 64 ms
 bool step = false;
+char header[5];
 char data[8];
+unsigned short pbts;
 
 int main() {
     int readPointer=0;
@@ -177,12 +177,10 @@
 
     secsNoMsg = 0;
     secsNoTouch = 0;
-
     // Read config file
     readConfig();
     touched=false;
     secsNoTouch=2;
-
     while (true) {
         if (!logOpen) { // Open new file if one is not already open
             if(logEn){ //logging enable
@@ -212,11 +210,16 @@
                 // Dump buffer if > 1/16 full or canbus has stopped
                 if (file == NULL) {
                     logOpen = false;
-                    sprintf(sTemp,"Failed to append log file.\n\n");
+                    sprintf(sTemp,"Failed to append log file.\n");
+                    logMsg(sTemp);
                     spkr.beep(1000,0.25);
-                    logMsg(sTemp);
                     logEn=false;
                 } else {
+                    if (((writePointer+maxBufLen-readPointer)%maxBufLen)>(maxBufLen*7/8)) { // Hi-water mark
+                        sprintf(sTemp,"Write buffer overrun.\n");
+                        logMsg(sTemp);
+                        spkr.beep(1000,0.25);
+                    }
                     while (readPointer != writePointer) {
                         for (j = 0; j<13; j++){
                             fprintf(file,"%c",writeBuffer[readPointer][j]);
@@ -304,6 +307,7 @@
                                 indexOffset=indexOffset>4?indexOffset-4:1;
                                 } else if (dMode[i]==config1Screen) {
                                     wait_ms(500);
+                                    tt.background(Black);
                                     tt.calibrate();
                                 } else if (dMode[i]==config2Screen) { // slower
                                         playbackInt *=2;
@@ -442,7 +446,6 @@
                 lastDMode[1]=99;
             }
         }
-
         display=display<1?display+1:0; // toggle display
         updateDisplay(display);
 
@@ -465,13 +468,14 @@
             }else{
                 dled = ledLo;
             }
-            if(kWh>0){
-                mpkWh=miles/kWh;
+            //if(mWs>0){
+            if(true){
+                mpkWh= ((float) mWs)/1e6; // just kW for now               
             }else{
                 mpkWh=99;
             }
             miles=0;
-            kWh=0;
+            mWs=0;
             tick=false;
         }
 
@@ -481,11 +485,9 @@
                 //logMsg(sTemp);
                 for(i=0;i<200;i++){
                     if(!feof(file)){
-                        //for (j = 0; j<5; j++){
-                            fscanf(file,"%5c",&writeBuffer[0][0]);
-                        //}
-                        fscanf(file,"%8c",&data[0]);
-                        logCan(writeBuffer[0][0],CANMessage(0x7ff&((writeBuffer[0][4]<<8)+writeBuffer[0][3]), data, 8));
+                        fscanf(file,"%5c%8c",&header,&data);
+                        pbts=(header[1]<<8)|header[2];
+                        logCan(header[0],CANMessage(0x7ff&((header[4]<<8)+header[3]), data, 8));
                     }else{
                         fclose(file); // restart
                         file = fopen("/usb/playback.alc", "rb");                                          
@@ -495,5 +497,6 @@
             }
             step=false;
         }
+
     } //while (true)
 }
\ No newline at end of file