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

Branch:
Metric
Revision:
126:e0d039096891
Parent:
125:f58b7ab2abee
Parent:
79:68f0dd8d1f19
Child:
127:27c739fd6d71
--- a/utility.cpp	Sun Jul 21 11:08:38 2013 +0000
+++ b/utility.cpp	Sun Jul 21 11:23:57 2013 +0000
@@ -352,6 +352,53 @@
             motorRPM+=imotorRPM;
             numSsamples++;
         }
+<<<<<<< local
+=======
+        if(bdi<0xff){
+            i=canRXmsg.data[0]&0x0f; //lower nibble of D0 is index
+            if(lasti>i){ //detect rollover and offset index appropriately
+                bdi=0x10;
+            }
+            lasti=i; //remember the msb to detect rollover next time around
+            i+=bdi;
+            //if(i==22) logCP=true; //Turbo3
+            //if( (i==22) && (yesBattLog) ) logCP=true; // only if enabled gg - Batt Log 
+            if(i==22){
+                logCP=yesBattLog; // Only log if logging enabled
+                showCP=true; // Always show
+            }
+            i*=7;
+            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];
+                battData[i+3]=canRXmsg.data[4];
+                battData[i+4]=canRXmsg.data[5];
+                battData[i+5]=canRXmsg.data[6];
+                battData[i+6]=canRXmsg.data[7];
+            }
+        }
+    }else if((mType==1)&&(canRXmsg.id==0x1db)){ //Battery Volts and Amps
+        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;
+        }
+        packA -= 1; //Slight correction to value required (unique to my Leaf?)
+        imWs_x4 = packV; // Volts*milliSeconds*2
+        imWs_x4 *= -packA; // milliWattseconds*4
+        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]));
+        if(imotorRPM<0){ // take absolute value
+            imotorRPM=-imotorRPM;
+        }
+        motorRPM+=imotorRPM;
+        numSsamples++;
+>>>>>>> other
     }
 }
 
@@ -399,32 +446,54 @@
                 data[1]=0x21;
                 data[2]=0x01;
                 break;
+<<<<<<< local
             case BatDataBaseG2: // group 1 has 6 frames
+=======
+            case 6: // group 1 has 6 frames
+                can1.monitor(false); // set to active mode
+                can1SleepMode = 0; // enable TX
+>>>>>>> other
                 data[0]=0x02; //change to request group 2 (cp data)
                 data[1]=0x21;
                 data[2]=0x02;
                 break;
+<<<<<<< local
             case BatDataBaseG3: // group 2 has 29 frames
+=======
+            case 35: // group 2 has 29 frames
+>>>>>>> other
                 data[0]=0x02; //change to request group 3
                 data[1]=0x21;
                 data[2]=0x03;
                 break;
+<<<<<<< local
             case BatDataBaseG4: // group 3 has 5 frames
+=======
+            case 40: // group 3 has 5 frames
+>>>>>>> other
                 data[0]=0x02; //change to request group 4 (temperature)
                 data[1]=0x21;
                 data[2]=0x04;
                 break;
+<<<<<<< local
             case BatDataBaseG5: // group 4 has 3 frames
+=======
+            case 43: // group 4 has 3 frames
+>>>>>>> other
                 data[0]=0x02; //change to request group 5
                 data[1]=0x21;
                 data[2]=0x05;
                 break;
+<<<<<<< local
             case BatDataBaseG6: // group 4 has 3 frames
                 data[0]=0x02; //change to request group 5
                 data[1]=0x21;
                 data[2]=0x06;
                 break;
             case BatDataBaseG7: // group 5 has 11 frames
+=======
+            case 54: // group 5 has 11 frames
+>>>>>>> other
                 reqMsgCnt = 99;
                 can1SleepMode = VP230Sleep; // disable TX
                 can1.monitor(true); // set to snoop mode
@@ -447,6 +516,38 @@
     msgReq.attach(&sendReq,0.015);
 }
 
+<<<<<<< local
+=======
+void sendTreq() {
+    char i;
+    char data[8] = {0x02, 0x21, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff};
+    can1.monitor(false); // set to active mode
+    can1SleepMode = 0; // enable TX
+    can1.write(CANMessage(0x79b, data, 8));
+    
+    if( ZeroSecTick ) { ZeroSecTick = false; logTS(); } // gg - 0-second EV bus
+    
+    logCan(1,CANMessage(0x79b, data, 8)); // Group 4 request on EV
+    data[0]=0x30; //change to request next line message
+    data[1]=0x01;
+    data[2]=0x00;
+    for(i=0;i<3;i++){
+        wait_ms(16); //wait 16ms
+        can1.write(CANMessage(0x79b, data, 8));
+    }
+    can1SleepMode = 1; // disable TX
+    can1.monitor(true); // set to snoop mode
+}
+
+void autoPollISR() {  //This is the ticker ISR for auto-polling
+    pollCP=true;    //Set a flag to do in main loop instead of here
+}                   //since ticker blocks other interrupts*/
+
+void autoPollISR(){
+    reqMsgCnt = 0; //reset message counter
+    msgReq.attach(&sendReq,0.015);
+}
+>>>>>>> other
 void playbackISR() { //Used for autoplayback
     step=true;
 }