Dual CANbus monitor and instrumentation cluster supporting ILI9341 display controller
Dependencies: SPI_TFTx2_ILI9341 TOUCH_TFTx2_ILI9341 TFT_fonts mbed
Fork of CANary by
Diff: utility.cpp
- Revision:
- 41:8d4609ea7259
- Parent:
- 40:0e6e71a7323f
- Child:
- 43:e7f6f80590e3
diff -r 0e6e71a7323f -r 8d4609ea7259 utility.cpp --- 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);