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:
40:0e6e71a7323f
Parent:
39:eef8beac7411
Child:
41:8d4609ea7259
diff -r eef8beac7411 -r 0e6e71a7323f utility.cpp
--- a/utility.cpp	Mon Mar 25 15:13:15 2013 +0000
+++ b/utility.cpp	Sun Mar 31 17:45:05 2013 +0000
@@ -42,12 +42,11 @@
     static unsigned char ii = 0, lasti = 0; // indexindex
     unsigned char changed,i;
     static unsigned char bdi=0;
-    //Determined 1db messages are 10ms apart so no need to compute deltaT
     //unsigned short ms;
     //static unsigned short lms=0;
-    unsigned short packV;
+    signed short packV;
     signed short packA;
-    signed long imWs;
+    signed long imWs_x4;
     secsNoMsg=0; // reset deadman switch
     if(logOpen){
         if(canRXmsg.id>0) {
@@ -56,7 +55,7 @@
             writeBuffer[writePointer][2]=(ts&0x00ff);
             writeBuffer[writePointer][3]=canRXmsg.id&0xff;
             writeBuffer[writePointer][4]=(canRXmsg.id>>8)+(canRXmsg.len<<4);
-            for(i=5;i<13;i++){
+            for(i=5;i<13;i++){ // Is there a better way to do this? (writeBuffer[writePointer][i]=canRXmsg.data?)
                 writeBuffer[writePointer][i]=canRXmsg.data[i-5];
             }
             if (++writePointer >= maxBufLen) {
@@ -65,10 +64,7 @@
             }
         }
     }
-    //Determined 1db messages are 10ms apart so no need to compute deltaT
-    /*if(playbackOpen){
-        ts=pbts; // Use ts from playback buffer
-    }//if logOpen*/
+
     if(indexLastMsg[canRXmsg.id]==0) { //Check if no entry
         ii=ii<99?ii+1:0;
         indexLastMsg[canRXmsg.id]=ii; //Create entry if first message
@@ -104,8 +100,9 @@
         }
         lasti=i; //remember the msb to detect rollover next time around
         i+=bdi;
+        if(i==22) logCP=true; //Turbo3
         i*=7;
-        if(i<0xfa){
+        if(i<0xfa){ // Is there a better way to do this?
             battData[i+0]=canRXmsg.data[1];
             battData[i+1]=canRXmsg.data[2];
             battData[i+2]=canRXmsg.data[3];
@@ -115,23 +112,19 @@
             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
+        //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
-        //if(ms<lms){ // must've rolled over
-        //    imWs=ms+60000; // (ms)compute elapsed time since last update including rollover
-        //    imWs-=lms;
-        //}else{
-        //    imWs=ms-lms; // (ms) compute elapsed time since last update
-        //}
+        //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;
         }
-        imWs=packV; // Volts*seconds*2
-        imWs*=packA; // Watts*4
-        imWs*=-10; // milliwatt*seconds*4 (1db messages are 10ms apart)
-        mWs+=(imWs>>2); // total mWs
+        //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;
     }
 }
@@ -406,5 +399,6 @@
         fclose(bfile);
     }
     logCP=false;
+    showCP=true;
 }