.

Dependencies:   SDHCFileSystem mbed

Files at this revision

API Documentation at this revision

Comitter:
TickTock
Date:
Mon Dec 03 03:25:56 2012 +0000
Parent:
2:55b2357f0cf9
Child:
4:fb373a391155
Commit message:
both channels simultaneously TX & RX

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Sat Dec 01 16:03:14 2012 +0000
+++ b/main.cpp	Mon Dec 03 03:25:56 2012 +0000
@@ -76,7 +76,7 @@
 //39:       NC:5Vout (only available when connected as USB device)
 //40:   VCC3.3
 
-extern bool LogCreated;
+extern bool logOpen;
 void Log (char *message);
 void LogErr (char *message);
 
@@ -84,7 +84,8 @@
 DigitalIn  CD(p17); 
 DigitalIn  PB1( p20 );
 SDFileSystem sd(p5, p6, p7, p8, "sd" ); // SDFileSystem::SDFileSystem(PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name)
-Ticker ticker;
+Ticker ticker1;
+Ticker ticker2;
 Timer timer;
 DigitalOut led1(LED1);
 DigitalOut led2(LED2);
@@ -94,30 +95,33 @@
 DigitalOut can1_SleepMode(p27);     // Use pin 27 to control the sleep mode of can1
 CAN can2(p30, p29);     // CAN2 uses pins 30 and 29 (rx, tx) and pin 28 (rs)
 DigitalOut can2_SleepMode(p28);     // Use pin 28 to control the sleep mode of can2
-bool logCreated = false;
-char counter = 0;
+bool logOpen = false;
 FILE *file;
 char fileName[32] = "" ;
-char writeBuffer[512][13];
+char writeBuffer[2048][13];
 int bufPointer = 0;
 
 Serial pc(USBTX, USBRX); // tx, rx   default settings (9600 8N1)
 
 extern "C" void RTC_IRQHandler() {
     timer.reset() ; // zero ms at the-seconds-tick
-    file = fopen(fileName, "a");
-    if (file == NULL) {
-        if (logCreated)
-            logCreated = false;
-    } else {
-        for (int i = 0; i<bufPointer; i++) {
-            for (int j = 0; j<13; j++){
-                fprintf(file,"%c",writeBuffer[i][j]);
+    if ((bufPointer>1536)||((bufPointer>0)&!logOpen)) {
+        file = fopen(fileName, "a");
+        if (file == NULL) {
+            logOpen = false;
+        } else {
+            int i=0;
+            while (i<bufPointer) {
+                for (int j = 0; j<13; j++){
+                    fprintf(file,"%c",writeBuffer[i][j]);
+                }
+                i++;
             }
+            bufPointer = 0;
+            led3 = !led3;
+            fclose(file);
         }
-        fclose(file);
     }
-    bufPointer = 0;
     LPC_RTC->ILR |= (1<<0); // turn on Low Bit - works
 }
 
@@ -128,7 +132,7 @@
     //LPC_RTC->CCR = 0x11;  // use for interrupts every minute ????
     //LPC_RTC->CCR = 0x00;  // Stop the RTC (apparently)
     LPC_RTC->CCR = 0x01;  // Start RTC (apparently use for interrupt every second)
-    // NVIC_SetPriority( RTC_IRQn, LOW_PR );
+    NVIC_SetPriority( RTC_IRQn, 10 );
     NVIC_EnableIRQ( RTC_IRQn );
 }
 
@@ -142,8 +146,9 @@
 void readLog (){
     unsigned char c;
     int i=0;
-    char lastMsgNum=0;
-    char curMsgNum=0;
+    char lastMsgNum[]={0,0};
+    char curMsgNum[]={0,0};
+    char canNum=0;
     pc.printf("printing file\n");
     file = fopen(fileName, "r");
     if (file == NULL) {
@@ -152,14 +157,16 @@
     while (!feof(file)) {
         c=fgetc(file);
         pc.printf("%02x ",c);
-        if (i==5){
-            curMsgNum=c;
+        if (i==0){
+            canNum=c;
+        }else if (i==5){
+            curMsgNum[canNum]=c;
         }
         if (++i>12) {
-            if (curMsgNum>(lastMsgNum+1)) {
+            if (curMsgNum[canNum]>(lastMsgNum[canNum]+1)) {
                 pc.printf(" ***");
             }
-            lastMsgNum=curMsgNum;
+            lastMsgNum[canNum]=curMsgNum[canNum];
             pc.printf("\n");
             i=0;
         }
@@ -178,7 +185,8 @@
     for (int i = 5; i<13; i++){
         writeBuffer[bufPointer][i]=canRXmsg.data[i-5];
     }
-    bufPointer++;
+    if (bufPointer++>2047)
+        bufPointer=2047;
 }
 
 void send1() {
@@ -187,47 +195,66 @@
     counter++;
     /*can1.write(CANMessage(0x351, &counter, 1));
     counter++;
-    can1.write(CANMessage(0x352, &counter, 1));
+    /*can1.write(CANMessage(0x352, &counter, 1));
+    counter++;*/
+}
+
+void send2() {
+    static char counter = 0; // use for fake data
+    can2.write(CANMessage(0x351, &counter, 1));
+    counter++;
+    /*can2.write(CANMessage(0x351, &counter, 1));
+    counter++;
+    can2.write(CANMessage(0x352, &counter, 1));
     counter++;*/
 }
 
 void recieve1() {
     CANMessage msg1;
     unsigned short msgTime=getTimeStamp();
+    static int lastMsg1 = 0;
     can1.read(msg1);
-    //pc.printf("%sCan1 Message received: %d   \n", upLine, msg1.data[0]);
-    if(logCreated) {
-        if((PB1==0)||(CD==0)) {
-            logCreated=false;
-            pc.printf("Stopping log\n", counter);
-            readLog();
-        } else {
-            logCan(1, msg1);
+    if (msg1.id!=0x000) {
+        if (msg1.data[0]>(lastMsg1+1)) {
+            pc.printf("%sCan1 Message %d missed!    \n", upLine, lastMsg1+1);
         }
+        lastMsg1=msg1.data[0];
+        if(logOpen) {
+            if((PB1==0)||(CD==0)) {
+                logOpen=false;
+                pc.printf("Stopping log\n\n");
+                wait(1.1);
+                readLog();
+            } else {
+                logCan(1, msg1);
+            }
+        }
+        led1 = !led1;
     }
-    led2 = !led2;
 }
 
 void recieve2() {
     CANMessage msg2;
     unsigned short msgTime=getTimeStamp();
-    static int lastMsg = 0;
+    static int lastMsg2 = 0;
     can2.read(msg2);
-    if (msg2.data[0]>(lastMsg+1)) {
-    pc.printf("%sCan2 Message %d missed!    \n\n\n", upLine, msg2.data[0]-1);
+    if (msg2.id!=0x000) {
+        if (msg2.data[0]>(lastMsg2+1)) {
+            pc.printf("%sCan2 Message %d missed!    \n", upLine, lastMsg2+1);
+        }
+        lastMsg2=msg2.data[0];
+        if(logOpen) {
+            if((PB1==0)||(CD==0)) {
+                logOpen=false;
+                pc.printf("Stopping log\n\n");
+                wait(1.1);
+                readLog();
+            } else {
+                logCan(2, msg2);
+            }
+        }
+        led2 = !led2;
     }
-    lastMsg=msg2.data[0];
-    //pc.printf("%sCan2 Message received: %d    \n", upLine, msg2.data[0]);
-    if(logCreated) {
-        if((PB1==0)||(CD==0)) {
-            logCreated=false;
-            pc.printf("Stopping log\n\n", counter);
-            readLog();
-        } else {
-            logCan(2, msg2);
-        }
-    }
-    led3 = !led3;
 }
 
 int main() {
@@ -262,7 +289,7 @@
         if(file==NULL){
             pc.printf("\nUnable to open canlog\n\n\n\n");
         } else {
-            logCreated = true;
+            logOpen = true;
             pc.printf("\nStarting Can Log %s\n\n\n\n",fileName);
             unsigned long secs = time(NULL); // seconds past 12:00:00 AM 1 Jan 1900
             tsMsg.id=0xfff;
@@ -277,7 +304,6 @@
             tsMsg.data[7]=0xff;
             logCan(0,tsMsg); //write full timestamp
             fclose(file);
-
         }
     } else {
         pc.printf("\nNo SDRAM Inserted.\n\n\n\n");
@@ -286,5 +312,6 @@
 
     //.02 logs all; .01 misses some when logging;
     //.05 gets all when not logging;.02 misses some always
-    ticker.attach(&send1, .002); //start sending messages
+    ticker1.attach(&send1, .0052); //start sending messages
+    ticker2.attach(&send2, .0051); //start sending messages
 }
\ No newline at end of file