Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SPI_TFTx2 SPI_TFTx2_ILI9341 TFT_fonts TOUCH_TFTx2 mbed
Fork of CANary_9341 by
Revision 106:f016912a03db, committed 2013-06-28
- Comitter:
- TickTock
- Date:
- Fri Jun 28 20:26:11 2013 +0000
- Branch:
- Metric
- Parent:
- 105:2da2d9378c57
- Child:
- 107:e9be732c1ad4
- Commit message:
- added logging indicator on main screen
Changed in this revision
--- a/displayModes.cpp Fri Jun 28 00:13:08 2013 +0000
+++ b/displayModes.cpp Fri Jun 28 20:26:11 2013 +0000
@@ -192,6 +192,11 @@
lkW=kW[0];
}
}
+ if(logEn){
+ tt.fillcircle(310,10,6,Red);
+ }else{
+ tt.fillcircle(310,10,6,Navy);
+ }
}
void braking (bool force, bool showButtons, bool prdata=false){
--- a/main.cpp Fri Jun 28 00:13:08 2013 +0000
+++ b/main.cpp Fri Jun 28 20:26:11 2013 +0000
@@ -17,6 +17,8 @@
// * Add ability to transfer settings config file to/from USB
// * Add once-on-powerup/powerdown log
// * Move log dump to ISR (but CAN RX at higher priority)
+// * Add "recording" indicator on Main
+// * Temperature table `terpolation
#include "mbed.h"
#include "CAN.h"
@@ -528,10 +530,6 @@
case 01: // left col middle row
if (dMode[whichTouched]==configScreen) {
logEn = !logEn;
- //if (!logEn) {
- // repeatPoll=false; // disable auto polling, too
- // autoPoll.detach();
- //}
} else if (dMode[whichTouched] == indexScreen) { // gg - index
dMode[whichTouched] = cpScreen ; // GoTo CP Data Screen
sMode=0;
--- a/utility.cpp Fri Jun 28 00:13:08 2013 +0000
+++ b/utility.cpp Fri Jun 28 20:26:11 2013 +0000
@@ -60,121 +60,117 @@
if(debugMode||(skin==ggSkin)){
// code to insert actual number of dropped frames for overrun debug - skiped in normal mode to keep logcan short
if(logOpen){
- if(canRXmsg.id>0) {
- // check to see if buffer is already full (read - write) = 1
- // actually the last buffer location cannot be used because then
- // the buffer would look empty after writePointer++
+ // check to see if buffer is already full (read - write) = 1
+ // actually the last buffer location cannot be used because then
+ // the buffer would look empty after writePointer++
+
+ //if (((writePointer+maxBufLen-readPointer)%maxBufLen)>(maxBufLen/16)) // modulo is slow?
+
+ // pointers are 0 through maxBufLen-1
+ if( (readPointer - writePointer) == 1 || (writePointer - readPointer) == (maxBufLen - 1)) {
+ // the buffer is "full", so Lose this message
- //if (((writePointer+maxBufLen-readPointer)%maxBufLen)>(maxBufLen/16)) // modulo is slow?
-
- // pointers are 0 through maxBufLen-1
- if( (readPointer - writePointer) == 1 || (writePointer - readPointer) == (maxBufLen - 1)) {
- // the buffer is "full", so Lose this message
+ // point to the last-stored message
+ int tempWritePointer = writePointer - 1 ;
+ if( tempWritePointer < 0 ) tempWritePointer = maxBufLen - 1;
+ char strLost[9] ;
+
+ if( nLost == 0 ) {
+ // this is the first message lost
+ // and we must overwrite the last message with an FFE comment message
+ // So, there will be two messages lost as the comment message is laid in.
+ nLost = 2;
+ sprintf(strLost,"%s","Lost0002"); // indicate two messages lost
- // point to the last-stored message
- int tempWritePointer = writePointer - 1 ;
- if( tempWritePointer < 0 ) tempWritePointer = maxBufLen - 1;
- char strLost[9] ;
-
- if( nLost == 0 ) {
- // this is the first message lost
- // and we must overwrite the last message with an FFE comment message
- // So, there will be two messages lost as the comment message is laid in.
- nLost = 2;
- sprintf(strLost,"%s","Lost0002"); // indicate two messages lost
-
- // overlay the last message with a "Lost0002" comment
- writeBuffer[tempWritePointer][0]=0;
- // leave the ts of the overlaid message
- //writeBuffer[tempWritePointer][1]=(ts&0xff00)>>8; // Time Stamp (2 bytes_
- //writeBuffer[tempWritePointer][2]=(ts&0x00ff);
- // force the MsgID to an Event Message
- writeBuffer[tempWritePointer][3]=0xfe; // MsgID, low byte
- writeBuffer[tempWritePointer][4]=0xff; // Len nibble, and MsgID high nibble
- // lay in the "Lost0002" text
- for(i=5;i<13;i++){
- writeBuffer[tempWritePointer][i]= strLost[i-5];
- }
- } else {
- // at least one message was previously lost
- // increment the loat counter
- nLost += 1;
-
- // lay the new count into the comment
- sprintf(strLost,"%04d",nLost);
- for(i=9;i<13;i++){
- writeBuffer[tempWritePointer][i]= strLost[i-9];
- }
+ // overlay the last message with a "Lost0002" comment
+ writeBuffer[tempWritePointer][0]=0;
+ // leave the ts of the overlaid message
+ //writeBuffer[tempWritePointer][1]=(ts&0xff00)>>8; // Time Stamp (2 bytes_
+ //writeBuffer[tempWritePointer][2]=(ts&0x00ff);
+ // force the MsgID to an Event Message
+ writeBuffer[tempWritePointer][3]=0xfe; // MsgID, low byte
+ writeBuffer[tempWritePointer][4]=0xff; // Len nibble, and MsgID high nibble
+ // lay in the "Lost0002" text
+ for(i=5;i<13;i++){
+ writeBuffer[tempWritePointer][i]= strLost[i-5];
}
} else {
- // there is room to insert the message
- // get it inserted quickly
- ts=getTimeStamp();
- writeBuffer[writePointer][0]=mType;
- writeBuffer[writePointer][1]=(ts&0xff00)>>8; // Time Stamp (2 bytes_
- writeBuffer[writePointer][2]=(ts&0x00ff);
- writeBuffer[writePointer][3]=canRXmsg.id&0xff; // MsgID, low byte
- char sLen = canRXmsg.len ;
- writeBuffer[writePointer][4]=(canRXmsg.id>>8)+(sLen<<4); // Len nibble, and MsgID high nibble
- for(i=0;i<8;i++){ // Is there a better way to do this? (writeBuffer[writePointer][i]=canRXmsg.data?)
- if(i<sLen)
- writeBuffer[writePointer][i+5]=canRXmsg.data[i];
- else // i>=sLen
- // force unused data bytes to FF for CAN-Do compatibility
- writeBuffer[writePointer][i+5]=0xFF;
- }
+ // at least one message was previously lost
+ // increment the loat counter
+ nLost += 1;
- //--------------
- // Note, this is not protected from the interrupt.
- // Due to the nLost code above, this no longer
- // overflows to writePointer = readPointer
- // which would make the buffer look empty
- if (++writePointer >= maxBufLen) {
- writePointer = 0;
- led3 = !led3;
+ // lay the new count into the comment
+ sprintf(strLost,"%04d",nLost);
+ for(i=9;i<13;i++){
+ writeBuffer[tempWritePointer][i]= strLost[i-9];
}
- //--------------
- // log a local message if we had lost messages. gg - logcan
- if( nLost > 0 ) {
- // We previously lost messages that did not get into the buffer
- sprintf(sTemp,"-- Lost %d Messages.\n", nLost);
- printMsg(sTemp); // write buffer overrun
- //spkr.beep(500,0.25);
-
- nLost = 0 ;
- }
- //--------------
+ }
+ } else {
+ // there is room to insert the message
+ // get it inserted quickly
+ ts=getTimeStamp();
+ writeBuffer[writePointer][0]=mType;
+ writeBuffer[writePointer][1]=(ts&0xff00)>>8; // Time Stamp (2 bytes_
+ writeBuffer[writePointer][2]=(ts&0x00ff);
+ writeBuffer[writePointer][3]=canRXmsg.id&0xff; // MsgID, low byte
+ char sLen = canRXmsg.len ;
+ writeBuffer[writePointer][4]=(canRXmsg.id>>8)+(sLen<<4); // Len nibble, and MsgID high nibble
+ for(i=0;i<8;i++){ // Is there a better way to do this? (writeBuffer[writePointer][i]=canRXmsg.data?)
+ if(i<sLen)
+ writeBuffer[writePointer][i+5]=canRXmsg.data[i];
+ else // i>=sLen
+ // force unused data bytes to FF for CAN-Do compatibility
+ writeBuffer[writePointer][i+5]=0xFF;
}
+
+ //--------------
+ // Note, this is not protected from the interrupt.
+ // Due to the nLost code above, this no longer
+ // overflows to writePointer = readPointer
+ // which would make the buffer look empty
+ if (++writePointer >= maxBufLen) {
+ writePointer = 0;
+ led3 = !led3;
+ }
+ //--------------
+ // log a local message if we had lost messages. gg - logcan
+ if( nLost > 0 ) {
+ // We previously lost messages that did not get into the buffer
+ sprintf(sTemp,"-- Lost %d Messages.\n", nLost);
+ printMsg(sTemp); // write buffer overrun
+ //spkr.beep(500,0.25);
+
+ nLost = 0 ;
+ }
+ //--------------
}
}
}else{ // not debugMode - keep code short
if(logOpen){
- if(canRXmsg.id>0) {
- NVIC_DisableIRQ(CAN_IRQn); // Block interrupts until write pointer assigned
- int localWritePointer = writePointer++; // create local copy to make logCan reentrant
- // note that the static variables do not prevent safe reentry
- // since they are only used for msgId<0x800 which will never interrupt
- // another msgId<0x800 (both CANbusses are same priority)
- if (writePointer >= maxBufLen) {
- writePointer = 0;
- led3 = !led3;
- }
- NVIC_EnableIRQ(CAN_IRQn); // Unblock interrupts once local pointer set and global pointer incremented
- ts=getTimeStamp();
- writeBuffer[localWritePointer][0]=mType;
- writeBuffer[localWritePointer][1]=(ts&0xff00)>>8;
- writeBuffer[localWritePointer][2]=(ts&0x00ff);
- writeBuffer[localWritePointer][3]=canRXmsg.id&0xff;
- writeBuffer[localWritePointer][4]=(canRXmsg.id>>8)+(canRXmsg.len<<4);
- for(i=5;i<13;i++){ // Is there a better way to do this? (writeBuffer[localWritePointer][5]=canRXmsg.data?)
- writeBuffer[localWritePointer][i]=canRXmsg.data[i-5];
- }
- if (writePointer==readPointer) {
- // Just caught up to read pointer
- sprintf(sTemp,"Write buffer overrun.\n");
- printMsg(sTemp); // write buffer overrun
- spkr.beep(500,0.25);
- }
+ NVIC_DisableIRQ(CAN_IRQn); // Block interrupts until write pointer assigned
+ int localWritePointer = writePointer++; // create local copy to make logCan reentrant
+ // note that the static variables do not prevent safe reentry
+ // since they are only used for msgId<0x800 which will never interrupt
+ // another msgId<0x800 (both CANbusses are same priority)
+ if (writePointer >= maxBufLen) {
+ writePointer = 0;
+ led3 = !led3;
+ }
+ NVIC_EnableIRQ(CAN_IRQn); // Unblock interrupts once local pointer set and global pointer incremented
+ ts=getTimeStamp();
+ writeBuffer[localWritePointer][0]=mType;
+ writeBuffer[localWritePointer][1]=(ts&0xff00)>>8;
+ writeBuffer[localWritePointer][2]=(ts&0x00ff);
+ writeBuffer[localWritePointer][3]=canRXmsg.id&0xff;
+ writeBuffer[localWritePointer][4]=(canRXmsg.id>>8)+(canRXmsg.len<<4);
+ for(i=5;i<13;i++){ // Is there a better way to do this? (writeBuffer[localWritePointer][5]=canRXmsg.data?)
+ writeBuffer[localWritePointer][i]=canRXmsg.data[i-5];
+ }
+ if (writePointer==readPointer) {
+ // Just caught up to read pointer
+ sprintf(sTemp,"Write buffer overrun.\n");
+ printMsg(sTemp); // write buffer overrun
+ spkr.beep(500,0.25);
}
}
}
@@ -425,9 +421,10 @@
can1.read(msg1);
if( ZeroSecTick ) { ZeroSecTick = false; logTS(); } // gg - 0-second EV bus
-
- logCan(1, msg1); // EVcan Message Received
- led1 = !led1;
+ if(msg1.id>0) {
+ logCan(1, msg1); // EVcan Message Received
+ led1 = !led1;
+ }
}
void recieve2() {
@@ -436,8 +433,10 @@
if( ZeroSecTick ) { ZeroSecTick = false; logTS(); } // gg - 0-second EV bus
- logCan(2, msg2); // CARcan Message Received
- led2 = !led2;
+ if(msg2.id>0) {
+ logCan(2, msg2); // CARcan Message Received
+ led2 = !led2;
+ }
}
unsigned char buttonX(unsigned short X, unsigned char columns) {
