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
- Branch:
- Metric
- Revision:
- 124:0d622967b764
- Parent:
- 123:a8c0042df617
- Child:
- 125:f58b7ab2abee
diff -r a8c0042df617 -r 0d622967b764 utility.cpp --- a/utility.cpp Fri Jul 19 12:48:10 2013 +0000 +++ b/utility.cpp Sat Jul 20 03:37:28 2013 +0000 @@ -205,54 +205,46 @@ //------------------- //Miscellaneous on-recieve operations below - if((mType==2)&&((canRXmsg.id==0x7bb)||(canRXmsg.id==0x765))){ // is 7bb data? Need to store all responses - if(canRXmsg.data[0]==0x10){ + if((mType==1)&&(canRXmsg.id==0x7bb)){ // is battery data? Need to store all responses + if(canRXmsg.data[0]<0x20){ if(canRXmsg.data[3]==1){//Group 1 data - bdi=DataBaseG1; // index offset for Group 1 data + bdi=BatDataBaseG1; // index offset for Group 1 data if(debugMode){ printMsg(" Getting Group 1 data\n"); } }else if(canRXmsg.data[3]==2){//Group 2 = cellpair data - bdi=DataBaseG2; // index offset for CP data + bdi=BatDataBaseG2; // index offset for CP data if(debugMode){ printMsg(" Getting cell pair data\n"); } }else if(canRXmsg.data[3]==3){//Group 3 data - bdi=DataBaseG3; // index offset for Group 3 data + bdi=BatDataBaseG3; // index offset for Group 3 data if(debugMode){ printMsg(" Getting Group 3 data\n"); } }else if(canRXmsg.data[3]==4){//Group 4 = temperature data - bdi=DataBaseG4; // index offset for Temperature data + bdi=BatDataBaseG4; // index offset for Temperature data if(debugMode){ printMsg(" Getting temperature data\n"); } }else if(canRXmsg.data[3]==5){//Group 5 data - bdi=DataBaseG5; // index offset for Group 5 data + bdi=BatDataBaseG5; // index offset for Group 5 data if(debugMode){ printMsg(" Getting Group 5 data\n"); } }else if(canRXmsg.data[3]==6){//Group 6 data = shunt data - bdi=DataBaseG6; // index offset for Group 6 data + bdi=BatDataBaseG6; // index offset for Group 6 data if(debugMode){ printMsg(" Getting Group 6 data\n"); } - }else if(canRXmsg.data[3]==0x10){//Group 7 data = tire pressure data - bdi=DataBaseG7; // index offset for Group 6 data - if(debugMode){ - printMsg(" Getting Group 7 data\n"); - } - }else bdi=0xff; // ignore other messages (for now) lasti=0; - // Request rest of data - reqRest=true; } if(bdi<0xff){ @@ -265,27 +257,27 @@ //------- //------- i*=7; - if(i+6 < DataBufMax) { - queryData[i+0]=canRXmsg.data[1]; - queryData[i+1]=canRXmsg.data[2]; - queryData[i+2]=canRXmsg.data[3]; - queryData[i+3]=canRXmsg.data[4]; - queryData[i+4]=canRXmsg.data[5]; - queryData[i+5]=canRXmsg.data[6]; - queryData[i+6]=canRXmsg.data[7]; + if(i+6 < BatDataBufMax) { + 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]; } - if(i==(DataBaseG6+1)*7){ // All data loaded + if(i==(BatDataBaseG6+3)*7){ // All data loaded logCP=yesBattLog; // Only log if logging enabled showCP=true; // Always show // Find hottest temperature by finding smallest ADC value // 2013 models only have three sensors - k=queryData[(DataBaseG4*7)+3]*0x100+queryData[(DataBaseG4*7)+4]; - j=queryData[(DataBaseG4*7)+6]*0x100+queryData[(DataBaseG4*7)+7]; + k=battData[(BatDataBaseG4*7)+3]*0x100+battData[(BatDataBaseG4*7)+4]; + j=battData[(BatDataBaseG4*7)+6]*0x100+battData[(BatDataBaseG4*7)+7]; if(j<k)k=j; - j=queryData[(DataBaseG4*7)+9]*0x100+queryData[(DataBaseG4*7)+10]; + j=battData[(BatDataBaseG4*7)+9]*0x100+battData[(BatDataBaseG4*7)+10]; if(j<k)k=j; - j=queryData[(DataBaseG4*7)+12]*0x100+queryData[(DataBaseG4*7)+13]; + j=battData[(BatDataBaseG4*7)+12]*0x100+battData[(BatDataBaseG4*7)+13]; if(j<k)k=j; //interpolate from lookup table unsigned short temp_adc[8] = {1000,589,487,401,365,340,309,000}; @@ -298,16 +290,16 @@ maxTemp+=temp_C[ii]; // Get state of health - SOH_x100=queryData[(DataBaseG1*7)+29]*0x100+queryData[(DataBaseG1*7)+30]; - Ah_x10000=queryData[(DataBaseG1*7)+36]*0x10000+queryData[(DataBaseG1*7)+37]*0x100+queryData[(DataBaseG1*7)+38]; - SOC_x10000=queryData[(DataBaseG1*7)+32]*0x10000+queryData[(DataBaseG1*7)+33]*0x100+queryData[(DataBaseG1*7)+34]; + SOH_x100=battData[(BatDataBaseG1*7)+29]*0x100+battData[(BatDataBaseG1*7)+30]; + Ah_x10000=battData[(BatDataBaseG1*7)+36]*0x10000+battData[(BatDataBaseG1*7)+37]*0x100+battData[(BatDataBaseG1*7)+38]; + SOC_x10000=battData[(BatDataBaseG1*7)+32]*0x10000+battData[(BatDataBaseG1*7)+33]*0x100+battData[(BatDataBaseG1*7)+34]; // Save shunt data for(j=0; j<24; j++){ - shunt[j*4+0]=queryData[DataBaseG6*7+j+3]&0x08; - shunt[j*4+1]=queryData[DataBaseG6*7+j+3]&0x04; - shunt[j*4+2]=queryData[DataBaseG6*7+j+3]&0x02; - shunt[j*4+3]=queryData[DataBaseG6*7+j+3]&0x01; + shunt[j*4+0]=battData[BatDataBaseG6*7+j+3]&0x08; + shunt[j*4+1]=battData[BatDataBaseG6*7+j+3]&0x04; + shunt[j*4+2]=battData[BatDataBaseG6*7+j+3]&0x02; + shunt[j*4+3]=battData[BatDataBaseG6*7+j+3]&0x01; } } } @@ -400,57 +392,49 @@ static char data[8] = {0x02, 0x21, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff}; if(reqMsgCnt<99){ switch (reqMsgCnt){ - case DataBaseG1: // group 1 has 6 frames + case BatDataBaseG1: can1.monitor(false); // set to active mode can1SleepMode = 0; // enable TX data[0]=0x02; //change to request group 1 data[1]=0x21; data[2]=0x01; - can1.write(CANMessage(0x79b, data, 8)); break; - case DataBaseG2: // group 2 has 29 frames + case BatDataBaseG2: // group 1 has 6 frames data[0]=0x02; //change to request group 2 (cp data) data[1]=0x21; data[2]=0x02; - can1.write(CANMessage(0x79b, data, 8)); break; - case DataBaseG3: // group 3 has 5 frames + case BatDataBaseG3: // group 2 has 29 frames data[0]=0x02; //change to request group 3 data[1]=0x21; data[2]=0x03; - can1.write(CANMessage(0x79b, data, 8)); break; - case DataBaseG4: // group 4 has 3 frames + case BatDataBaseG4: // group 3 has 5 frames data[0]=0x02; //change to request group 4 (temperature) data[1]=0x21; data[2]=0x04; - can1.write(CANMessage(0x79b, data, 8)); break; - case DataBaseG5: // group 5 has 11 frames + case BatDataBaseG5: // group 4 has 3 frames data[0]=0x02; //change to request group 5 data[1]=0x21; data[2]=0x05; - can1.write(CANMessage(0x79b, data, 8)); break; - case DataBaseG6: // group 6 has 4 frames - data[0]=0x02; //change to request group 6 + case BatDataBaseG6: // group 4 has 3 frames + data[0]=0x02; //change to request group 5 data[1]=0x21; data[2]=0x06; - can1.write(CANMessage(0x79b, data, 8)); break; - case DataBaseG7: // group 7 has 2 frames - data[0]=0x02; //change to request group 7 - data[1]=0x21; - data[2]=0x10; - can1.write(CANMessage(0x745, data, 8)); - break; - case DataBaseG8: + case BatDataBaseG7: // group 5 has 11 frames reqMsgCnt = 99; can1SleepMode = VP230Sleep; // disable TX can1.monitor(true); // set to snoop mode msgReq.detach(); // stop ticker - default: // wait 30ms + default: + data[0]=0x30; //change to request next line message + data[1]=0x01; + data[2]=0x00; } + can1.write(CANMessage(0x79b, data, 8)); reqMsgCnt++; } } @@ -460,7 +444,7 @@ //sprintf(sTemp,"Requesting cp data\n"); // just for debug //printMsg(sTemp); // just for debug reqMsgCnt = 0; //reset message counter - msgReq.attach(&sendReq,0.035); + msgReq.attach(&sendReq,0.015); } void playbackISR() { //Used for autoplayback @@ -677,7 +661,7 @@ min=9999; avg=0; for(i=0; i<96; i++) { - bd=(queryData[DataBaseG2*7+i*2+3]<<8)+queryData[DataBaseG2*7+i*2+4]; + bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4]; avg+=bd; if(bd>max) max=bd; if(bd<min) min=bd; @@ -698,10 +682,10 @@ f_printf(&bfile,"%s,",sTemp); sprintf(sTemp,"%d,%5.1f%%,%5.1f,%5.1f,%d,%d,%d,%d,%d",gids,(float)SOC/10,(float)packV_x2/2,(float)packA_x2/2,max,min,avg,max-min,jv); f_printf(&bfile,"%s,",sTemp); - f_printf(&bfile,"%d,%d,%d,%d,",(queryData[(DataBaseG4*7)+ 3]<<8)+queryData[(DataBaseG4*7)+ 4],queryData[(DataBaseG4*7)+ 5],(queryData[(DataBaseG4*7)+ 6]<<8)+queryData[(DataBaseG4*7)+ 7],queryData[(DataBaseG4*7)+ 8]); - f_printf(&bfile,"%d,%d,%d,%d", (queryData[(DataBaseG4*7)+ 9]<<8)+queryData[(DataBaseG4*7)+10],queryData[(DataBaseG4*7)+11],(queryData[(DataBaseG4*7)+12]<<8)+queryData[(DataBaseG4*7)+13],queryData[(DataBaseG4*7)+14]); + f_printf(&bfile,"%d,%d,%d,%d,",(battData[(BatDataBaseG4*7)+ 3]<<8)+battData[(BatDataBaseG4*7)+ 4],battData[(BatDataBaseG4*7)+ 5],(battData[(BatDataBaseG4*7)+ 6]<<8)+battData[(BatDataBaseG4*7)+ 7],battData[(BatDataBaseG4*7)+ 8]); + f_printf(&bfile,"%d,%d,%d,%d", (battData[(BatDataBaseG4*7)+ 9]<<8)+battData[(BatDataBaseG4*7)+10],battData[(BatDataBaseG4*7)+11],(battData[(BatDataBaseG4*7)+12]<<8)+battData[(BatDataBaseG4*7)+13],battData[(BatDataBaseG4*7)+14]); for(i=0; i<96; i++) { - bd=(queryData[DataBaseG2*7+i*2+3]<<8)+queryData[DataBaseG2*7+i*2+4]; + bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4]; f_printf(&bfile,",%d",bd); } f_printf(&bfile,"\r\n"); @@ -738,7 +722,7 @@ min=9999; avg=0; for(i=0; i<96; i++) { - bd=(queryData[DataBaseG2*7+i*2+3]<<8)+queryData[DataBaseG2*7+i*2+4]; + bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4]; avg+=bd; if(bd>max) max=bd; if(bd<min) min=bd; @@ -759,16 +743,15 @@ f_printf(&bfile,"%s,",sTemp); sprintf(sTemp,"%3.1f,%d,%5.1f%%,%5.1f%%, %4.2f, %5.1f,%4.1f,%d,%d,%d,%d,%d",accV,gids,(float)SOC/10, (float)SOH_x100/100,(float)Ah_x10000/10000,(float)packV_x2/2,(float)packA_x2/2,max,min,avg,max-min,jv); f_printf(&bfile,"%s,",sTemp); - f_printf(&bfile,"%d,%d,%d,%d,",(queryData[(DataBaseG4*7)+ 3]<<8)+queryData[(DataBaseG4*7)+ 4],queryData[(DataBaseG4*7)+ 5],(queryData[(DataBaseG4*7)+ 6]<<8)+queryData[(DataBaseG4*7)+ 7],queryData[(DataBaseG4*7)+ 8]); - f_printf(&bfile,"%d,%d,%d,%d", (queryData[(DataBaseG4*7)+ 9]<<8)+queryData[(DataBaseG4*7)+10],queryData[(DataBaseG4*7)+11],(queryData[(DataBaseG4*7)+12]<<8)+queryData[(DataBaseG4*7)+13],queryData[(DataBaseG4*7)+14]); + f_printf(&bfile,"%d,%d,%d,%d,",(battData[(BatDataBaseG4*7)+ 3]<<8)+battData[(BatDataBaseG4*7)+ 4],battData[(BatDataBaseG4*7)+ 5],(battData[(BatDataBaseG4*7)+ 6]<<8)+battData[(BatDataBaseG4*7)+ 7],battData[(BatDataBaseG4*7)+ 8]); + f_printf(&bfile,"%d,%d,%d,%d", (battData[(BatDataBaseG4*7)+ 9]<<8)+battData[(BatDataBaseG4*7)+10],battData[(BatDataBaseG4*7)+11],(battData[(BatDataBaseG4*7)+12]<<8)+battData[(BatDataBaseG4*7)+13],battData[(BatDataBaseG4*7)+14]); for(i=0; i<96; i++) { - bd=(queryData[DataBaseG2*7+i*2+3]<<8)+queryData[DataBaseG2*7+i*2+4]; + bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4]; f_printf(&bfile,",%d",bd); } // temporariliy dump everything - /*for(i=0; i<DataBufMax; i++) { - sprintf(sTemp,",%02x",queryData[i]); - f_printf(&bfile,"%s",sTemp); + /*for(i=0; i<BatDataBufMax; i++) { + f_printf(&bfile,",%02x",battData[i]); }*/ f_printf(&bfile,"\r\n");