Dual CANbus monitor and instrumentation cluster

Dependencies:   SPI_TFTx2 TFT_fonts TOUCH_TFTx2 beep mbed

Fork of CANary by Tick Tock

Revision:
41:8d4609ea7259
Parent:
40:0e6e71a7323f
Child:
43:e7f6f80590e3
--- a/utility.cpp	Sun Mar 31 17:45:05 2013 +0000
+++ b/utility.cpp	Sun Mar 31 18:57:36 2013 +0000
@@ -42,10 +42,9 @@
     static unsigned char ii = 0, lasti = 0; // indexindex
     unsigned char changed,i;
     static unsigned char bdi=0;
-    //unsigned short ms;
-    //static unsigned short lms=0;
     signed short packV;
     signed short packA;
+    static signed short imotorRPM = 0;
     signed long imWs_x4;
     secsNoMsg=0; // reset deadman switch
     if(logOpen){
@@ -78,7 +77,10 @@
         }
         msgChanged[indexLastMsg[canRXmsg.id]]=changed;
     }
+
     lastMsg[indexLastMsg[canRXmsg.id]]=canRXmsg; //Store in table
+
+    //Miscellaneous on-recieve operations below
     if((mType==2)&&(canRXmsg.id==0x358)){ // headlight/turn signal indicator
         headlights = (canRXmsg.data[1]&0x80)?true:false;
     }else if((mType==1)&&(canRXmsg.id==0x7bb)){ // is battery data?  Need to store all responses
@@ -112,20 +114,21 @@
             battData[i+6]=canRXmsg.data[7];
         }
     }else if((mType==1)&&(canRXmsg.id==0x1db)){ //Battery Volts and Amps
-        //Determined 1db messages are 10ms apart so no need to compute deltaT except to be robust against missed messages
-        //ms=(ts&0xfc00)*1000+(ts&0x03ff); // convert from BCD(ish-ssssss:mmmmmmmmmm) to binary
-        //imWs_x4 = (ms+60000-lms)%60000;
         packV=((canRXmsg.data[2]<<2)|(canRXmsg.data[3]>>6)); // 1 LSB = 0.5V
         packA=((canRXmsg.data[0]<<3)|(canRXmsg.data[1]>>5)); // 1 LSB = 0.5A
         if(packA>0x03ff){
             packA|=0xf800;//extend sign;
         }
-        //mWs_x4=-packA*4000; //test
         imWs_x4 = packV; // Volts*milliSeconds*2
         imWs_x4 *= -packA; // milliWattseconds*4
-        mWs_x4 += imWs_x4; // total mWs_x4
-        numWsamples++;
-        //lms=ms;
+        if (!((imotorRPM<2)&&(imWs_x4<0))){ //Ignore if charging from wall
+            mWs_x4 += imWs_x4; // total mWs_x4
+            numWsamples++;
+        }
+    }else if((mType==1)&&(canRXmsg.id==0x1da)){ //Motor Speed
+        imotorRPM=((canRXmsg.data[4]<<8)|(canRXmsg.data[5]));
+        motorRPM+=imotorRPM;
+        numSsamples++;
     }
 }
 
@@ -230,11 +233,11 @@
     fprintf(cfile,"y1_pp %d\r\n",tt.y1_pp);
     fprintf(cfile,"x_mid %d\r\n",tt.x_mid);
     if (dMode[0]==config1Screen)
-        fprintf(cfile,"dMode0 %d\r\n",dteScreen);
+        fprintf(cfile,"dMode0 %d\r\n",mainScreen);
     else
         fprintf(cfile,"dMode0 %d\r\n",dMode[0]);
     if (dMode[1]==config1Screen)
-        fprintf(cfile,"dMode1 %d\r\n",dteScreen);
+        fprintf(cfile,"dMode1 %d\r\n",mainScreen);
     else
         fprintf(cfile,"dMode1 %d\r\n",dMode[1]);
     fprintf(cfile,"ledHi %4.3f\r\n",ledHi);