SDFileSystem, slightly modified for the ExoController

Dependencies:   SDFileSystem

Dependents:   Data-Management-Honka

Fork of SDFileSystem_HelloWorld by Bradley Perry

Revision:
11:b47fb3344ed9
Parent:
10:23a3c0102ab0
--- a/SDFile.cpp	Mon Apr 27 21:58:36 2015 +0000
+++ b/SDFile.cpp	Mon May 11 21:47:54 2015 +0000
@@ -8,7 +8,7 @@
 SDFile::SDFile(string path, string filename, bool readOnly)
 {
     //Creates the necessary directory
-    //printf("Creating SDFile object\r\n");
+    printf("Creating SDFile object\r\n");
     char *a = new char[path.size()+1];
     a[path.size()] = 0;
     memcpy(a,path.c_str(),path.size());
@@ -22,8 +22,17 @@
         //printf("Opening readonly file\r\n");
         //_fp = fopen((const char*)b, "r");
     } else {
-        //printf("Opening writable file\r\n");
+        printf("Opening writable file %s\r\n", b);
         _fp = fopen((const char*)b, "w+");
+        if (_fp == NULL) {
+            //boardLed3 = 1;
+            newFile = true;
+            printf("file %s not found\r\n", b);
+            _fp = fopen((const char*)b, "w+");
+        } else {
+            newFile = false;
+            printf("file %s found\r\n", b);
+        }
     }
     //printf("fp is %d\r\n", _fp);       
 }
@@ -39,13 +48,13 @@
 {
    
     //shift to the end of the file and go back accounting for the commas, spaces, \n, and \r (6 places per data)
-    int s = fseek(_fp, -6*length, SEEK_END);
+    fseek(_fp, -6*length, SEEK_END);
     
     //pc.printf("reading to array at %d\r\n", &array[0]);
     //cycle through the length of the vector and read the values.
     for(int i = 0; i < length; i++) {
         //pc.printf("File %d, array %d\r\n", _fp, &array[i]);
-        s= fscanf(_fp, "%x, ", &array[i]);
+        fscanf(_fp, "%x, ", &array[i]);
       //  pc.printf("HHHHH\r\n", s);
         //pc.printf("read %x now at %ld\r\n", array[i], ftell(_fp));
     }
@@ -62,6 +71,19 @@
     return array;
 }
 
+//Debug only--prints file contents, 6 chars to a line for up to 23 lines
+void SDFile::debug_print() {
+    fseek(_fp, 0, SEEK_SET);
+    char c;
+    for (int i = 0; i < 23; i++) {
+        for (int j = 0; j < 6; j++) {
+           fscanf(_fp, "%c", &c);
+           pc.printf("%c", c);
+        }
+        pc.printf("\r\n");
+    }
+}
+
 /** 
 * This function writes from an array to the file pointed to by fp
 * @param length    length of data to write
@@ -75,17 +97,17 @@
     fseek(_fp, 0, SEEK_SET);
 //    printf("Writing %d\r\n", array[0]);
     //printf("Starting to write\r\n");
-    int w;
+//    int w;
     for(int i = 0; i < length-1; i++) {
         /* This line fails when run on testFile, reason unknown...*/
         //printf("%d\r\n", fprintf(_fp, "%04x, ", array[i]));
-        pc.printf("Writing at %ld\r\n", ftell(_fp));
-        w = fprintf(_fp, "%04x, ", array[i]);
-        pc.printf("Wrote %d, now at %ld\r\n", w, ftell(_fp));
+        //pc.printf("Writing at %ld\r\n", ftell(_fp));
+        fprintf(_fp, "%04x, ", array[i]);
+        //pc.printf("Wrote %x, now at %ld\r\n", array[i], ftell(_fp));
     }
     //printf("%d\r\n", fprintf(_fp, "%04x\r\n", array[length-1]));
     fprintf(_fp, "%04x\r\n", array[length-1]);
-    fflush(_fp);
+    //fflush(_fp);
 }
 
 /** This function writes to a single position in the file
@@ -102,6 +124,7 @@
     //pc.printf("Val is %x\r\n", val);
     //pc.printf("%d, %d\r\n", sizeof value, sizeof 0xdead);
     //pc.printf("%04x, ", value);
+    //The &0xffff forces the float to write only 4 characters--without it floats become 8 chars long, for some reason
     int w = fprintf(_fp, "%04x, ", value & 0xffff); 
     //pc.printf("Wrote %d, now at %ld\r\n", w, ftell(_fp));
     fflush(_fp);