Attempts to merge SPI_TFT2 & SPI_TFT_ILI9341
Dependencies: SPI_TFTx2 TFT_fonts TOUCH_TFTx2 mbed
Fork of CANary by
Revision 69:6bfdfc002036, committed 2013-04-14
- Comitter:
- garygid
- Date:
- Sun Apr 14 01:21:11 2013 +0000
- Parent:
- 67:2022fce701d0
- Child:
- 70:0700b769ac15
- Commit message:
- Log Date-Time once per minute, and Log the firmware Version.
Changed in this revision
--- a/common.h Thu Apr 11 18:52:12 2013 +0000 +++ b/common.h Sun Apr 14 01:21:11 2013 +0000 @@ -27,4 +27,6 @@ // gg - 4x4 touch // #define tNavRow = 2 ; // for 3x3 extern unsigned char tNavRow ; // gg - 4x4 +extern char revStr[7]; // gg - version +
--- a/main.cpp Thu Apr 11 18:52:12 2013 +0000 +++ b/main.cpp Sun Apr 14 01:21:11 2013 +0000 @@ -45,6 +45,11 @@ PwmOut dled(p23); Beep spkr(p21); +// revision string, max 6 characters +//char revStr[7] = "65"; // gg - revStr is used in 2 places +//char revStr[7] = "65-gg1"; // gg - and is easy to edit here +char revStr[7] = "65-gg2"; // gg - ZeroSecTick + bool logEn = false, logOpen = false; bool yesBattLog = false ; // gg - Batt Log unsigned char tNavRow = 3 ; // gg - 4x4 touch @@ -79,6 +84,7 @@ bool repeatPoll = false; bool headlights = false; bool tick = false; +bool ZeroSecTick = false; float ledHi = 0.8; // Bright LED value (until config file read) float ledLo = 0.1; // Dim LED value (until config file read) unsigned short pollInt = 300; // polling interval=5 minutes (until config file read) @@ -154,14 +160,15 @@ } t = *localtime(&seconds) ; strftime(sTemp, 32, "%a %m/%d/%Y %X\n", &t); - logMsg(sTemp); + logMsg(sTemp); // record RTC // revision //sprintf(sTemp,"CANary firmware rev62\n"); // wrong rev, should be rev63 //sprintf(sTemp,"CANary firmware rev64\n"); //sprintf(sTemp,"CANary firmware rev64-gg1\n"); // gg - adding Index screen - sprintf(sTemp,"CANary firmware rev65\n"); // gg - commit Index screen - logMsg(sTemp); + //sprintf(sTemp,"CANary firmware rev65\n"); // gg - commit Index screen + sprintf(sTemp,"CANary firmware rev%s\n", revStr); // gg - test Date + logMsg(sTemp); // revision // Look for new binary on thumbdrive // Can't make this work right now since USB doesn't attach the right timestamp (so new binary isn't loaded) @@ -169,11 +176,11 @@ lastDMode[whichTouched]=99;//force refresh if (cfile!=NULL){ //found a new binary on the thumbdrive so copy it over sprintf(sTemp,"New binary found.\n"); - logMsg(sTemp); + logMsg(sTemp); // new binary file = fopen("/local/CANary.bin", "wb"); if (file==NULL){ //failed to open destination sprintf(sTemp,"Unable to open destination file.\n"); - logMsg(sTemp); + logMsg(sTemp); // cannot open CANary.bin } else { tt.set_display(2); tt.foreground(White); @@ -211,10 +218,10 @@ } fclose(cfile); sprintf(sTemp,"History Loaded.\n"); - logMsg(sTemp); + logMsg(sTemp); // History loaded } else { // create initial file sprintf(sTemp,"History not found. Created.\n"); - logMsg(sTemp); + logMsg(sTemp); // history not found, created for(i=0;i<39;i++){ // Pre-load with 4 mpkWh @ 40 mph mph[i]=40*timeConstant[i]; @@ -235,20 +242,25 @@ t = *localtime(&seconds) ; strftime(fileName, 32, "/usb/%m%d%H%M.alc", &t); //mmddhhmm.alc //sprintf(sTemp,"Using file %s\n",fileName); - //logMsg(sTemp); + //logMsg(sTemp); // using alc file ... file = fopen(fileName, "ab"); lastDMode[whichTouched]=99;//force refresh if(file==NULL){ sprintf(sTemp,"\nUnable to open %s\n\n\n\n",fileName); - logMsg(sTemp); + logMsg(sTemp); // cannot open alc file logEn=false; spkr.beep(1000,0.25); } else { logOpen = true; readPointer=writePointer; sprintf(sTemp,"Starting Can Log %s\n",fileName); - logMsg(sTemp); - logTS(); + logMsg(sTemp); // starting alc log file + + logTS(); // Date Time at start + logErrMsg("Starting"); // Log startup msg for testing + sprintf(sTemp,"Cr%s",revStr); + logErrMsg(sTemp); // gg - log firmware version + spkr.beep(2000,0.25); } }//logging enabled @@ -258,13 +270,13 @@ if (file == NULL) { logOpen = false; sprintf(sTemp,"Failed to append log file.\n"); - logMsg(sTemp); + logMsg(sTemp); // failed to append spkr.beep(1000,0.25); logEn=false; } else { if (((writePointer+maxBufLen-readPointer)%maxBufLen)>(maxBufLen*7/8)) { // Hi-water mark sprintf(sTemp,"Write buffer overrun.\n"); - logMsg(sTemp); + logMsg(sTemp); // write buffer overrun spkr.beep(1000,0.25); } while (readPointer != writePointer) { @@ -289,7 +301,7 @@ seconds = time(NULL); t = *localtime(&seconds) ; strftime(sTemp, 40, "Sleeping: %a %m/%d/%Y %X\n", &t); - logMsg(sTemp); + logMsg(sTemp); // sleeping date time updateDisplay(0); //Added for turbo3 who has a display override and wants to see the sleep message before going to sleep updateDisplay(1); //LPC_RTC->CIIR=0x00; // block RTC interrupts @@ -312,13 +324,14 @@ seconds = time(NULL); t = *localtime(&seconds) ; strftime(sTemp, 40, "Waking: %a %m/%d/%Y %X\n", &t); - logMsg(sTemp); + logMsg(sTemp); // wakeup date time if (time(NULL)>(secs+1800)) { logOpen = false; // Start new file if asleep for more than 30 minutes if (secsNoTouch>100) secsNoTouch = 100; // also mostly reset user Idle counter } else if (logOpen){ // insert timestamp on each wake if logging enabled (disabled for now) file = fopen(fileName, "ab"); - logTS(); + logErrMsg("WakingUp"); // gg - use messeges + logTS(); // Date-Time at wakeup } } // if idle @@ -344,7 +357,7 @@ sMode = 1; } //sprintf(sTemp,"%d,%d ",lastTouch.x,lastTouch.y); - //logMsg(sTemp); + //logMsg(sTemp); // touch x,y - for debug touched = false; // clear interrupt flag } //--------------- @@ -358,7 +371,7 @@ secsNoTouch +=2; // increment to prevent double touch sMode = 1; //sprintf(sTemp,"button %d %d,%d %d\n",i,buttonX(lastTouch.x,3),buttonY(lastTouch.y,3),lastTouch.x); - //logMsg(sTemp); + //logMsg(sTemp); // button parms - for debug switch (sMode) { case 0: // no select break; @@ -429,7 +442,7 @@ dMode[whichTouched] = effScreen ; // GoTo EFF Screen } else if (dMode[whichTouched]==config1Screen) { sprintf(sTemp,"Saving config file.\n"); - logMsg(sTemp); + logMsg(sTemp); // saving config saveConfig(); spkr.beep(2000,0.25); } else if (dMode[whichTouched]==playbackScreen) { // faster @@ -459,9 +472,10 @@ lastDMode[whichTouched ^ 1]=99; // repaint other screen (^ = XOR) //sprintf(sTemp,"Changed Skin to %d.\n"); - //logMsg(sTemp); + //logMsg(sTemp); /// changed skin - for debug //saveConfig(); //spkr.beep(2000,0.25); + } else if (dMode[whichTouched] == indexScreen) { // gg - index dMode[whichTouched] = dteScreen ; // GoTo DTE Screen }else{ @@ -506,21 +520,21 @@ lastDMode[whichTouched]=99;//force refresh if(file==NULL){ sprintf(sTemp,"Unable to open /usb/playback.alc\n"); - logMsg(sTemp); + logMsg(sTemp); // no playback.alc spkr.beep(1000,0.25); } else { playbackOpen = true; playbackEn=true; playback.attach(&playbackISR,playbackInt); sprintf(sTemp,"Starting playback\n"); - logMsg(sTemp); + logMsg(sTemp); // start playback spkr.beep(2000,0.25); can1.attach(&doNothing);// Stop recieving CAN data can2.attach(&doNothing); } } else { sprintf(sTemp,"Must stop logging first\n"); - logMsg(sTemp); + logMsg(sTemp); // Must stop logging first } } else { playback.detach(); @@ -634,7 +648,8 @@ laccOn=accOn; if(!accOn&&!logEn&&userIdle&&!playbackEn){ //sprintf(sTemp,"Display Off %4.2f\n",accV); - //logMsg(sTemp); + //logMsg(sTemp); // display off - for debug + dled = 0; // turn off display if car off and logging disabled and no user activity }else if(!headlights){ dled = ledHi; @@ -685,7 +700,7 @@ } updateDTE=true; if(logCP) - logPackVoltages(); // Turbo3 + logPackVoltages(); // Turbo3, only call tick=false; } @@ -704,7 +719,7 @@ for(i=0;i<120;i++){ if(!feof(file)){ fscanf(file,"%5c%8c",&header,&data); - logCan(header[0],CANMessage(0x7ff&((header[4]<<8)+header[3]), data, 8)); + logCan(header[0],CANMessage(0x7ff&((header[4]<<8)+header[3]), data, 8)); // Playback }else{ fclose(file); // restart file = fopen("/usb/playback.alc", "rb");
--- a/utility.cpp Thu Apr 11 18:52:12 2013 +0000 +++ b/utility.cpp Sun Apr 14 01:21:11 2013 +0000 @@ -9,6 +9,8 @@ userIdle=(++secsNoTouch>userTimeout)?true:false; LPC_RTC->ILR |= (1<<0); // clear interrupt to prepare for next tick=true; + // will use this to generate a logTP() just before the next Message received. + if( (time(NULL) % 60) == 0) ZeroSecTick = true; // gg - at 0-second of each minute } void RTC_Init (void) { @@ -37,7 +39,7 @@ } void logCan (char mType, CANMessage canRXmsg) { - char sTemp[40]; + char sTemp[40]; unsigned short ts = getTimeStamp(); static unsigned char ii = 0, lasti = 0; // indexindex unsigned char changed,i; @@ -46,6 +48,7 @@ signed short packA; static signed short imotorRPM = 0; signed long imWs_x4; + secsNoMsg=0; // reset deadman switch if(logOpen){ if(canRXmsg.id>0) { @@ -105,7 +108,7 @@ //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 is logging enabled + logCP=yesBattLog; // Only log if logging enabled showCP=true; // Always show } i*=7; @@ -143,17 +146,33 @@ void logTS () { CANMessage tsMsg; unsigned long secs = time(NULL); // seconds past 12:00:00 AM 1 Jan 1900 + // NOTE: In Mbed, I believe that this is seconds past start of 1970, not 1900 + // but this is good, since seconds past 1970 is what CAN-Do expects. GG - Date Time tsMsg.id=0xfff; tsMsg.len=0xf; - tsMsg.data[0]=secs&0xff; + tsMsg.data[0]=secs&0xff; tsMsg.data[1]=(secs>>8)&0xff; tsMsg.data[2]=(secs>>16)&0xff; - tsMsg.data[3]=secs>>24; - tsMsg.data[4]=0xff; - tsMsg.data[5]=0xff; - tsMsg.data[6]=0xff; + tsMsg.data[3]=(secs>>24)&0xff; + tsMsg.data[4]=0; // 0xff; gg - Date Time + tsMsg.data[5]=0; // 0xff; for CAN-Do + tsMsg.data[6]=0; // 0xff; tsMsg.data[7]=0xff; - logCan(0,tsMsg); + logCan(0,tsMsg); // Date-Time +} + +void logErrMsg (char * errMsg) { + // log CAN-Do 8-character Pseudo Message + CANMessage tsMsg; + tsMsg.id=0xffe; // pseudo Message to CAN-Do log + tsMsg.len=0xf; + int iMsgLen = strlen(errMsg); + // 8 character message compatible with CAN-Do + for(int i=0; i<8; i++){ + tsMsg.data[i]=' '; + if( i < iMsgLen ) tsMsg.data[i]=errMsg[i]; + } + logCan(0,tsMsg); // FFE Comment Message } void sendCPreq() { @@ -162,7 +181,10 @@ can1.monitor(false); // set to active mode can1SleepMode = 0; // enable TX can1.write(CANMessage(0x79b, data, 8)); - logCan(1,CANMessage(0x79b, data, 8)); + + if( ZeroSecTick ) { ZeroSecTick = false; logTS(); } // gg - 0-second EV bus + + logCan(1,CANMessage(0x79b, data, 8)); // Group 2 Request on EV data[0]=0x30; //change to request next line message data[1]=0x01; data[2]=0x00; @@ -180,7 +202,10 @@ can1.monitor(false); // set to active mode can1SleepMode = 0; // enable TX can1.write(CANMessage(0x79b, data, 8)); - logCan(1,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; @@ -206,14 +231,20 @@ void recieve1() { CANMessage msg1; can1.read(msg1); - logCan(1, msg1); //EVcan + + if( ZeroSecTick ) { ZeroSecTick = false; logTS(); } // gg - 0-second EV bus + + logCan(1, msg1); // EVcan Message Received led1 = !led1; } void recieve2() { CANMessage msg2; can2.read(msg2); - logCan(2, msg2); //CARcan + + if( ZeroSecTick ) { ZeroSecTick = false; logTS(); } // gg - 0-second EV bus + + logCan(2, msg2); // CARcan Message Received led2 = !led2; } @@ -264,9 +295,9 @@ cfile = fopen("/local/config.txt", "r"); if (cfile==NULL){ // if doesn't exist --> create sprintf(sTemp,"No config file found.\n"); - logMsg(sTemp); + logMsg(sTemp); // no config file sprintf(sTemp,"Calibrating touch screen.\n"); - logMsg(sTemp); + logMsg(sTemp); // calibrating //tt.setcal(5570, 34030, 80, 108, 33700, 5780, 82, 108, 32500);// bypass calibration using my values tt.calibrate(); // run touchscreen calibration routine // NOTE: calibrates screen 1 first, then screen 0. @@ -303,10 +334,10 @@ if(ff<3){//If not latest format, save as latest format saveConfig(); sprintf(sTemp,"Config file format updated.\n"); - logMsg(sTemp); + logMsg(sTemp); // config forat updates } sprintf(sTemp,"Config file loaded.\n"); - logMsg(sTemp); + logMsg(sTemp); // config file loaded } }
--- a/utility.h Thu Apr 11 18:52:12 2013 +0000 +++ b/utility.h Sun Apr 14 01:21:11 2013 +0000 @@ -29,6 +29,7 @@ extern DigitalOut can1SleepMode,can2SleepMode; extern bool pollCP; extern bool tick; +extern bool ZeroSecTick; extern bool headlights; extern TOUCH_TFTx2 tt; extern float ledHi; @@ -55,6 +56,7 @@ unsigned short getTimeStamp(); void logCan (char mType, CANMessage canRXmsg); void logTS (); + void logErrMsg (char * errMsg); // gg - messeges void sendCPreq(); void sendTreq(); void autoPollISR();