Nikola Milenic / SDcardM
Revision:
0:ce17b48156eb
Child:
1:f4a3e6cca74e
diff -r 000000000000 -r ce17b48156eb SDcardM.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDcardM.cpp	Wed Jun 12 21:49:37 2019 +0000
@@ -0,0 +1,93 @@
+#include "SDcardM.h"
+#include "SDBlockDevice.h"
+#include "mbed.h"
+
+extern SDBlockDevice sd;
+extern Serial pc;
+
+char writeBuffer[520];
+char readBuffer[512];
+int i;
+bd_addr_t block;
+bd_addr_t* bp=(bd_addr_t*) readBuffer;
+
+bool SD_init()
+{
+    for (int j=0; j<520; j++) writeBuffer[j]=0;
+    i = 0;
+    if(sd.init()) {
+        return false;
+    }
+    sd.frequency(24000000);
+    sd.read(readBuffer, 0, 512);
+    block=*bp;
+    pc.printf("CURRENT BLOCK: %d\r\n", block);
+    return true;
+}
+
+void SD_log_char(char c)
+{
+    writeBuffer[i]=c;
+    i++;
+    if(i==512) {
+        sd.program(writeBuffer, block, 512);
+        block+=512;;
+        *bp=block;
+        sd.program(readBuffer, 0, 512);
+        i=0;
+    }
+}
+
+void SD_log_string(const char* s)
+{
+    while(*s) {
+        SD_log_char(*s);
+        s++;
+    }
+}
+
+void SD_log_float(float f)
+{
+    pc.printf("INDEX: %d\r\n", i);
+    memcpy(writeBuffer+i, (char*) (&f), 4);
+    pc.printf("INDEX: %d\r\n", i);
+    i+=4;
+    if(i>=512) {
+        sd.program(writeBuffer, block, 512);
+        block+=512;
+        sd.program(readBuffer, 0, 512);
+
+        for(int j=0; j+512<i; j++) {
+            writeBuffer[j]=writeBuffer[j+512];
+        }
+        i-=512;
+    }
+    pc.printf("INDEX: %d\r\n", i);
+}
+
+void SD_log_int(int f)
+{
+    memcpy(writeBuffer+i, (char*) (&f), 4);
+    i+=4;
+    if(i>=512) {
+        sd.program(writeBuffer, block, 512);
+        block+=512;
+        sd.program(readBuffer, 0, 512);
+
+        for(int j=0; j+512<i; j++) {
+            writeBuffer[j]=writeBuffer[j+512];
+        }
+        i-=512;
+    }
+    pc.printf("INDEX: %d\r\n", i);
+}
+
+
+void SD_flush()
+{
+    sd.program(writeBuffer, block, 512);
+    block+=512;
+    *bp=block;
+    sd.program(readBuffer, 0, 512);
+    i=0;
+}
\ No newline at end of file