
.
Dependencies: SDHCFileSystem mbed
Revision 22:605c2f33b340, committed 2013-01-27
- Comitter:
- TickTock
- Date:
- Sun Jan 27 20:14:11 2013 +0000
- Parent:
- 21:a45a999d6da3
- Child:
- 23:7e6a9684f647
- Commit message:
- delete files older than 14 days; don't long msgId=0x000; reversed canbus 0,1 (EV&CAR was reversed in log); delay after SD write before shutting down to avoid corruption
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Mon Dec 24 05:24:25 2012 +0000 +++ b/main.cpp Sun Jan 27 20:14:11 2013 +0000 @@ -111,7 +111,7 @@ char writeBuffer[maxBufLen][13]; char c; volatile int writePointer = 0; -volatile int secsIdle = canTimeout; +volatile int secsIdle = 0; volatile bool canIdle = false; Serial pc(USBTX, USBRX); @@ -171,17 +171,19 @@ void logCan (char mtype, CANMessage canRXmsg) { unsigned short ts = getTimeStamp(); unsigned long secs = time(NULL); // seconds past 12:00:00 AM 1 Jan 1900 - writeBuffer[writePointer][0]=mtype; - writeBuffer[writePointer][1]=((secs%60)<<2)+((ts&0x300)>>8); - writeBuffer[writePointer][2]=ts&0xff; - writeBuffer[writePointer][3]=canRXmsg.id&0xff; - writeBuffer[writePointer][4]=(canRXmsg.id>>8)+(canRXmsg.len<<4); - for (int i = 5; i<13; i++){ - writeBuffer[writePointer][i]=canRXmsg.data[i-5]; - } - if (++writePointer >= maxBufLen) { - writePointer = 0; - led4 = !led4; + if(canRXmsg.id>0) { + writeBuffer[writePointer][0]=mtype; + writeBuffer[writePointer][1]=((secs%60)<<2)+((ts&0x300)>>8); + writeBuffer[writePointer][2]=ts&0xff; + writeBuffer[writePointer][3]=canRXmsg.id&0xff; + writeBuffer[writePointer][4]=(canRXmsg.id>>8)+(canRXmsg.len<<4); + for (int i = 5; i<13; i++){ + writeBuffer[writePointer][i]=canRXmsg.data[i-5]; + } + if (++writePointer >= maxBufLen) { + writePointer = 0; + led4 = !led4; + } } } @@ -205,7 +207,7 @@ secsIdle=0; // reset deadman switch can1.read(msg1); if(logOpen) - logCan(1, msg1); + logCan(2, msg1); led1 = !led1; } @@ -214,7 +216,7 @@ secsIdle=0; // reset deadman switch can2.read(msg2); if(logOpen) - logCan(2, msg2); + logCan(1, msg2); led2 = !led2; } @@ -225,6 +227,7 @@ int ftime; char sTemp[35]; unsigned long secs; + bool bit = false; pc.baud(460800); // change serial interface to pc to 450800, 8N1 can1.frequency(500000); can2.frequency(500000); @@ -284,19 +287,11 @@ strftime(sTemp, 32, "%a %m/%d/%Y %X", localtime(&seconds)); pc.printf("%s\n", sTemp); // DAY MM/DD/YYYY HH:MM:SS } - /*if (t.tm_year < 10) {//for test - delete - t.tm_year = 2012-1900;//delete - set_time(mktime(&t));//delete - seconds = time(NULL);//delete - } - t.tm_mon=(t.tm_mon+1)%12; //for test - delete - t.tm_mday=(t.tm_mday+1)%30; //for test - delete - set_time(mktime(&t));//delete - seconds = time(NULL);//delete*/ while (true) { if(CD == 1) { if (!logOpen) { // Open new file if one is not already open + seconds = time(NULL); t = *localtime(&seconds) ; strftime(fileName, 32, "/sd/%m%d%H%M.alc", &t); //mmddhhmm.alc @@ -340,34 +335,43 @@ } // if > 1/2 full, canbus has stopped, or PB1 pressed if (canIdle) { // canbus idle --> sleep to save power // First take advantage of the idle time to clear some room - // Delete all files more than 1 month old + + bit = false; rfile = fopen("/sd/loglog.txt", "r"); file = fopen("/sd/loglog.new", "w"); while (!feof(rfile)) { fscanf(rfile,"/sd/%2d%2d%4d.alc\r\n",&fmon,&fday,&ftime); - if ((fmon<t.tm_mon)&&(fday<=t.tm_mday)){ + //if ((fmon<t.tm_mon)&&(fday<=t.tm_mday)){ // Delete all files more than 1 month old + if ((fmon < 12) || (t.tm_mon > 1)){ + fday = fday + fmon*31; //crude - february will store 3 extra days of data + } + if ((fday+14)<(t.tm_mday+t.tm_mon*31)){ // Delete all files more than ~14 days old + bit=true; sprintf(sTemp,"/sd/%02d%02d%04d.alc",fmon,fday,ftime); - if ((remove(sTemp)==NULL)) + if ((remove(sTemp)==NULL)) { pc.printf("Removed file %s\n",sTemp); + } }else{ fprintf(file,"/sd/%02d%02d%04d.alc\r\n",fmon,fday,ftime); } } - fclose (file); fclose (rfile); - remove ("/sd/loglog.txt"); - //rename not working so do it the hard way - //rename ("/sd/loglog.new","/sd/loglog.txt"); - rfile = fopen("/sd/loglog.new", "r"); - file = fopen("/sd/loglog.txt", "w"); - while (!feof(rfile)) { - fscanf(rfile,"%s\r\n",&sTemp); - fprintf(file,"%s\r\n",sTemp); + if (bit) { + remove ("/sd/loglog.txt"); + //rename not working so do it the hard way + //rename ("/sd/loglog.new","/sd/loglog.txt"); + rfile = fopen("/sd/loglog.new", "r"); + file = fopen("/sd/loglog.txt", "w"); + while (!feof(rfile)) { + fscanf(rfile,"%s\r\n",&sTemp); + fprintf(file,"%s\r\n",sTemp); + } + fclose (file); + fclose (rfile); } - fclose (file); - fclose (rfile); - remove ("/sd/loglog.new"); + remove ("/sd/loglog.new"); + wait(5); // wait a few seconds to ensure SDRAM is done pc.printf("Putting uC to sleep.\n"); //LPC_RTC->CIIR=0x00; // block RTC interrupts @@ -376,9 +380,12 @@ led3=0; led4=0; secs = time(NULL); // seconds past 12:00:00 AM 1 Jan 1900 - while (secsIdle>canTimeout) + while (secsIdle>canTimeout) { //DeepPowerDown(); __wfi(); // freeze CPU and wait for interrupt (from canbus) + } + canIdle=false; + pc.printf("Waking uC.\n"); if (time(NULL)>(secs+1800)) { logOpen = false; // Start new file if asleep for more than 30 minutes } else { // insert timestamp on each wake