Austins SD card logger

Dependencies:   mbed SDFileSystem

Revision:
2:7bb016846566
Parent:
0:bdbd3d6fc5d5
Child:
3:8d4c12a3b5d4
--- a/main.cpp	Tue May 16 05:18:55 2017 +0000
+++ b/main.cpp	Tue Apr 16 04:30:26 2019 +0000
@@ -1,19 +1,112 @@
 #include "mbed.h"
 #include "SDFileSystem.h"
+#include "string.h"
  
-SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board
+/*SD card*/
+//#define DI D11
+//#define DO D12
+//#define SCK D13
+//#define CS D10
+#define DI PB_5
+#define DO PB_4
+#define SCK PB_3
+#define CS PB_6
+ 
+
+char fname[255];
+char current_time[64];
+
+ 
+/*Serial buffer*/
+#define PAGE_SIZE 4096
+#define HEADER_SIZE 10
+#define CHUNK_SIZE (PAGE_SIZE-HEADER_SIZE)
+#define BUF_SIZE (16*PAGE_SIZE)
+ 
+//RTC
+#define SET_TIME false
+ 
+int start = 0, end = 0;
+unsigned char buf[BUF_SIZE];
+unsigned char hdr[HEADER_SIZE] = {0xff, 0xff,'M','A','N','B','L','O','R','T'};
+ 
+/*UART*/
+#define BAUD_RATE 256000
+//#define BAUD_RATE 9600
+//Serial serial4(PA_11, D9);
+Serial serial4(PA_2, PA_3);
+Serial pc(PA_9, PA_10);
+ 
+/*Test pins*/
+DigitalOut test(PC_0);
+DigitalOut test2(PC_2);
+int flag=0, flag2=0;
+ 
+
+ 
+
+ 
+void rx_callback() {
+    while(serial4.readable()) {
+        buf[end] = serial4.getc();
+        //pc.printf("%c",buf[end]);
+        end++;
+        if (end == BUF_SIZE) end = 0;
+    }
+}
  
 int main() {
-    printf("Hello World!\n");   
+    pc.baud(256000);
+    
+    /*init SD card, wait for card insertion*/
+    pc.printf("\n\rconfiging SD card \n\r");     
+    SDFileSystem sd(DI, DO, SCK, CS, "sd");
+
+    while (sd.disk_status()) {
+        sd.disk_initialize();
+        wait(0.5);
+    }
+    pc.printf("disk initialized \n\r");
+    
+    if (SET_TIME) {set_time(1526496200);}
+    
+    time_t seconds = time(NULL);
+    pc.printf("Time as seconds since January 1, 1970 = %d\n\r", seconds);
+
+
+    
+    strcpy(fname, "/sd/log_");
  
-    mkdir("/sd/mydir", 0777);
+    sprintf(current_time, "%u", seconds );    
+    strcat(fname, current_time);
+    strcat(fname, ".dat");
+    pc.printf("Logging to %s\n", fname);
     
-    FILE *fp = fopen("/sd/mydir/sdtest.txt", "w");
-    if(fp == NULL) {
-        error("Could not open file for write\n");
+    FILE *fp = fopen(fname, "wb");
+    
+    
+    /*init serial*/    
+    serial4.baud(BAUD_RATE);
+    serial4.attach(rx_callback);
+     
+    //while (1==1) {pc.prinf("%i",end);}
+    
+    for (;;) {
+        int length = end - start;
+        if (length < 0) length += BUF_SIZE;
+        if (length >= CHUNK_SIZE) {
+            //fwrite(hdr, 1, HEADER_SIZE, fp);
+            if (start+CHUNK_SIZE-1 < BUF_SIZE) {
+                fwrite(buf+start, 1, CHUNK_SIZE, fp);
+            } else {
+                fwrite(buf+start, 1, BUF_SIZE-start+1, fp);
+                fwrite(buf, 1, CHUNK_SIZE-(BUF_SIZE-start+1), fp);
+            }
+            fflush(fp);
+            start += CHUNK_SIZE;
+            if (start >= BUF_SIZE) start -= BUF_SIZE;
+        }
     }
-    fprintf(fp, "Hello fun SD Card World!");
-    fclose(fp); 
+}
  
-    printf("Goodbye World!\n");
-}
+ 
\ No newline at end of file