Dual CANbus monitor and instrumentation cluster
Dependencies: SPI_TFTx2 TFT_fonts TOUCH_TFTx2 beep mbed
Fork of CANary by
Diff: utility.cpp
- 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; }