.

Dependencies:   SDHCFileSystem mbed

Revision:
1:dafb963c3c14
Parent:
0:1596b8644523
Child:
2:55b2357f0cf9
--- a/main.cpp	Mon Nov 19 04:44:11 2012 +0000
+++ b/main.cpp	Thu Nov 29 12:18:37 2012 +0000
@@ -1,28 +1,54 @@
 #include "mbed.h"
 #include "CAN.h"
 #include "TextLCD.h"
-#include "SDFileSystem.h"
+#include "SDHCFileSystem.h"
 #include "DebounceIn.h"
-#include "log.h"
 #include "beep.h"
 
+#define upLine "\033[1A"
+#define LOGFILE "/sd/canary.log"
+
+//CANcan.cpp
+
+//LEAF OBD
+//1:
+//2:
+//3:    AVCAN-L     White/Blue
+//4:
+//5:    VSS         Brown,White/Brown
+//6:    CARCAN-H    Green
+//7:
+//8:    12V-SW      Orange,White/Orange
+//9:
+//10:
+//11:   AVCAN-H     Blue
+//12:   EVCAN-L     White/Grey
+//13:   EVCAN-H     Grey
+//14:   CARCAN-L    White/Green
+//15:
+//16:   12V-AON     Red/Blue,Blue/Red
+
 //VP230
-//1:D   8:RS
-//2:GND 7:CANH
-//3:VCC 6:CANL
-//4:R   5:Vref
+//1:D   
+//2:GND 
+//3:VCC 
+//4:R   
+//5:Vref
+//6:CANL
+//7:CANH
+//8:RS
 
 //LPC1768
 //1:    VSS
-//2:        NC:VIN
+//2:        NC:VIN  (4.5-9V supply)
 //3:        NC:VB
 //4:        NC:nR
 //5:    SPI:MOSI   -->  6:SDRAM:DI
 //6:    SPI:MISO   -->  2:SDRAM:DO
 //7:    SPI:SCLK   -->  4:SDRAM:SCLK
 //8:    CS         -->  7:SDRAM:CS
-//9:    CAN1:TX    -->  1:CAN1:D
-//10:   CAN1:RX    -->  4:CAN1:R
+//9:    CAN1:RX    -->  4:CAN1:R
+//10:   CAN1:TX    -->  1:CAN1:D
 //11:   RS         -->  4:LCD:RS
 //12:   E          -->  6:LCD:E
 //13:   D4         -->  11:LCD:D4
@@ -30,19 +56,19 @@
 //15:   D6         -->  13:LCD:D6
 //16:   D7         -->  14:LCD:D7
 //17:   CD         -->  1:SDRAM:CD
-//18:       NC:Ain
+//18:   MON12V     -->  4K to 12V, 1K to VSS  (To be implemented)
 //19:   PB2
 //20:   PB1
 //21:   Spkr+
-//22:       NC:pwm
+//22:   Spkr-           (optional complimentary output for more volume)
 //23:       NC:pwm
-//24:       NC:pwm
-//25:       NC:pwm
-//26:       NC:pwm
+//24:   LEDBLU     -->  18:LCD:BLU (only used for tri-color displays)
+//25:   LEDGRN     -->  17:LCD:GRN (only used for tri-color displays)
+//26:   LEDRED     -->  16:LCD:RED
 //27:   CAN1:Sleep -->  8:CAN1:RS
 //28:   CAN2:Sleep -->  8:CAN2:RS
-//29:   CAN2:RX    -->  4:CAN2:R
-//30:   CAN2:TX    -->  1:CAN2:D
+//29:   CAN2:TX    -->  1:CAN2:D
+//30:   CAN2:RX    -->  4:CAN2:R
 //31:       NC:USB_D+
 //32:       NC:USB_D-
 //33:       NC:Eth_TD+
@@ -51,22 +77,29 @@
 //36:       NC:Eth_RD-
 //37:       NC:IF+
 //38:       NC:IF-
-//39:       NC:5Vout
+//39:       NC:5Vout (only available when connected as USB device)
 //40:   VCC3.3
 
+extern bool LogCreated;
+void Log (char *message);
+void LogErr (char *message);
+
+time_t seconds ;
 Beep buzzer(p21);
-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)
+DigitalIn  CD(p17); 
+DebounceIn  dbPB1( p20 );
+;DigitalIn  PB1(p20); 
+SDFileSystem sd(p5, p6, p7, p8, "sd" ); // SDFileSystem::SDFileSystem(PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name)
 TextLCD lcd(p11, p12, p13, p14, p15, p16); // rs, e, d0-d3 (RW to GND)
 Ticker ticker;
+Timer timer;
 DigitalOut led1(LED1);
 DigitalOut led2(LED2);
 DigitalOut led3(LED3);
 DigitalOut led4(LED4);
-CAN can1(p9, p10);      // CAN1 uses pins 9 and 10 (tx, rx)
-CAN can2(p30, p29);     // CAN2 uses pins 30 and 29 (tx, rx)
-bool LogCreated = false;
+CAN can1(p9, p10);      // CAN1 uses pins 9 and 10 (rx, tx) and pin 27 (rs)
+CAN can2(p30, p29);     // CAN2 uses pins 30 and 29 (rx, tx) and pin 28 (rs)
+bool logCreated = false;
 char logMsg[64];
 
 char counter = 0;
@@ -74,84 +107,165 @@
 //DigitalOut can2_SleepMode(p28);     // Use pin 28 to control the sleep mode of can2
 Serial pc(USBTX, USBRX); // tx, rx   default settings (9600 8N1)
 
-void Log (char *message)
+unsigned short getTimeStamp() {// from Gary's code
+
+    int msec = timer.read_ms(); // not synchronized with RTC
+    //unsigned long secs = time(NULL); // seconds past 12:00:00 AM 1 Jan 1900
+    unsigned long secs = msec / 1000;
+    int isecs = secs % 60; // modulo 60 for 0-59 seconds from RTC
+    return ((isecs << 10) + (msec%1000)); // return the two byte time stamp
+}
+
+void readLog ()
 {
     FILE *file;
+    unsigned char c;
+    int i=0;
+    pc.printf("printing file\n");
+    file = fopen(LOGFILE, "r");
+    if (file == NULL) {
+        pc.printf("no file found\n");
+        }
+    while (!feof(file))
+        {
+        c=fgetc(file);
+        pc.printf("%02x ",c);
+        if (++i>11)
+            {
+            pc.printf("\n");
+            i=0;
+            }
+        }
+    pc.printf("\n");
+    pc.printf("\n");
+    fclose(file);
+ }
+ 
+void logCan (CANMessage canRXmsg)
+{
+    FILE *file;
+    unsigned short ts;
+    
+    ts=getTimeStamp();
 
-    if (!LogCreated) {
+    if (!logCreated) {
         file = fopen(LOGFILE, "w");
-        LogCreated = true;
+        logCreated = true;
     }
     else
         file = fopen(LOGFILE, "a");
 
     if (file == NULL) {
-        if (LogCreated)
-            LogCreated = false;
+        if (logCreated)
+            logCreated = false;
+        return;
+    }
+    else
+    {
+        fprintf(file,"%c%c%c%c%c%c%c%c%c%c%c%c",ts>>8,ts&0xff,canRXmsg.id&0xff,(canRXmsg.id>>8)+(canRXmsg.len<<4),canRXmsg.data[0],canRXmsg.data[1],canRXmsg.data[2],canRXmsg.data[3],canRXmsg.data[4],canRXmsg.data[5],canRXmsg.data[6],canRXmsg.data[7]);
+        fclose(file);
+    }
+}
+
+void Log (char *message)
+{
+    FILE *file;
+
+    if (!logCreated) {
+        file = fopen(LOGFILE, "w");
+        logCreated = true;
+    }
+    else
+        file = fopen(LOGFILE, "a");
+
+    if (file == NULL) {
+        if (logCreated)
+            logCreated = false;
         return;
     }
     else
     {
         fputs(message, file);
-        //fprintf(file, message);
         fclose(file);
     }
+}
 
-    if (file)
-        fclose(file);
+void send1() {
+    static char counter = 0; // use for fake data
+
+    can1.write(CANMessage(0x350, &counter, 1));
+    counter++;
+    // test sending 3 quickly
+    //can1.write(CANMessage(0x351, &counter, 1));
+    //can1.write(CANMessage(0x352, &counter, 1));
+
 }
 
 
-void send() {
-    if(can1.write(CANMessage(0x350, &counter, 1))) {
-        counter++;
-        pc.printf("Message %d sent\n", counter);
-        lcd.printf("sent: %d  \n", counter);
-        if(LogCreated) {
-            if((PB1==0)||(CD==0)){
-                LogCreated=false;
-                pc.printf("Stopping log\n", counter);
-            }else{
-                sprintf(logMsg, "sent: %d \n", counter);
-                Log(logMsg);
-                pc.printf("Message logged\n");
-                buzzer.beep(800,0.025);              }
-        }
-    } 
-    led1 = !led1;
-}
- 
 void recieve1() {
     static CANMessage msg1;
+    unsigned short msgTime;
+    
+    msgTime=getTimeStamp();
     can1.read(msg1);
-    pc.printf("Can1 Message received: %d\n", msg1.data[0]);
+    pc.printf("%sCan1 Message received: %d %x\n", upLine, msg1.data[0], msgTime);
     lcd.printf("Can1 rxd: %d\n", msg1.data[0]);
+    if(logCreated) {
+        if((PB1==0)||(CD==0)){
+            logCreated=false;
+            pc.printf("Stopping log\n", counter);
+            readLog();
+        }else{
+            logCan(msg1);
+        }
+    }
     led2 = !led2;
 }
 void recieve2() {
     static CANMessage msg2;
+    unsigned short msgTime;
+    int milisec;
+    
+    msgTime=getTimeStamp();
+    milisec=timer.read_ms();
+
     can2.read(msg2);
-    pc.printf("Can2 Message received: %d\n", msg2.data[0]);
-    lcd.printf("Can2 rxd: %d\n", msg2.data[0]);
+    pc.printf("%sCan2 Message received: %d %04x %d       \n", upLine, msg2.data[0],msgTime,milisec);
+    ;lcd.printf("Can2 rxd: %d\n", msg2.data[0]);
+    if(logCreated) {
+        if((PB1==0)||(CD==0)){
+            logCreated=false;
+            pc.printf("Stopping log\n\n", counter);
+            readLog();
+        }else{
+            logCan(msg2);
+        }
+    }
     led3 = !led3;
 }
 
 int main() {
     pc.baud(115200);        // change serial interface to pc to 115200, 8N1
-    can1.frequency(100000);
-    can2.frequency(100000);
-    //can1_SleepMode = 0;         // Turn off Sleep Mode
-    //can2_SleepMode = 0;         // Turn off Sleep Mode
+    can1.frequency(1000000);
+    can2.frequency(1000000);
+    //can1_SleepMode = 0;         // Enable TX
+    //can2_SleepMode = 0;         // Enable TX
+    //can1_SleepMode = 1;         // Turn on Monitor_only Mode
+    //can2_SleepMode = 1;         // Turn on Monitor_only Mode
     CD.mode(PullUp) ; //SDRAM Chip Detect
-    PB1.mode(PullUp) ; //Pushbutton 1
-    ticker.attach(&send, 1);
+    dbPB1.mode(PullUp) ; //Pushbutton 1
+    ticker.attach(&send1, 1.1);
     can1.attach(&recieve1);
     can2.attach(&recieve2);
+    
+    timer.start() ;
+
+
     if(CD == 1) {
-        pc.printf("Starting Can Log\n");
-        Log("Starting Can Log\n");
+        pc.printf("Starting Can Log\n\n\n\n");
+        Log("");
         } 
     else {
-        pc.printf("No SDRAM Inserted.\n");
+        pc.printf("No SDRAM Inserted.\n\n\n\n");
     }
 }
\ No newline at end of file