A set of data recording functions to locally store data in a circular buffer, with functions for offloading to an SD Card when convenient. dataRecorderr.h shows accessible functions to the main program - all direct SD operations are abstracted away by the library. When using this library, #include dataRecorder.h

Dependencies:   sd-driver_compatible_with_MAX32630FTHR

Fork of CircularBufferSDCardLib by Daniel Levine

Revision:
4:fe6d2823b7cb
Parent:
3:df8fb1b5d868
Child:
5:0a4ff027086c
--- a/sdCardReader.cpp	Wed Apr 04 17:15:36 2018 -0400
+++ b/sdCardReader.cpp	Thu Apr 05 01:22:57 2018 -0400
@@ -1,19 +1,28 @@
 #include "sdCardReader.h"
 
 
+//helpers
+int getSize(int* p){
+  return (sizeof(p)/sizeof(*p));
+}
+
+int getSize(uint16_t* p){
+  return (sizeof(p)/sizeof(*p));
+}
+
 //private essential methods
 // Try to mount the filesystem
 void SDCardReader::mountFileSystem(){
     printf("Mounting the filesystem... ");
     fflush(stdout);
-    int err = m_fs->mount(&this);
+    int err = m_fs->mount(this);
     printf("%s\n", (err ? "Fail :(" : "OK"));
     if (err) {
         // Reformat if we can't mount the filesystem
         // this should only happen on the first boot
         printf("No filesystem found, formatting... ");
         fflush(stdout);
-        err = m_fs->reformat(&this);
+        err = m_fs->reformat(this);
         printf("%s\n", (err ? "Fail :(" : "OK"));
         if (err) {
             error("error: %s (%d)\n", strerror(-err), err);
@@ -24,7 +33,7 @@
 void SDCardReader::unmountFileSystem(){
   printf("Unmounting... ");
   fflush(stdout);
-  err = m_fs->unmount();
+  int err = m_fs->unmount();
   printf("%s\n", (err < 0 ? "Fail :(" : "OK"));
   if (err < 0) {
     error("error: %s (%d)\n", strerror(-err), err);
@@ -33,15 +42,15 @@
 
 
 FILE* SDCardReader::openFile(string filename){
-  printf("Opening \"/fs/%s\"... ",filename);
+  printf("Opening \"/fs/%s\"... ",filename.c_str());
   fflush(stdout);
-  FILE *f = fopen("/fs/"+filename, "r+");
+  FILE *f = fopen(filename.c_str(), "r+");
   printf("%s\n", (!f ? "Fail :(" : "OK"));
   if (!f) {
     // Create the file if it doesn't exist
     printf("No file found, creating a new file... ");
     fflush(stdout);
-    f = fopen("/fs/"+filename, "w+");
+    f = fopen(filename.c_str(), "w+");
     printf("%s\n", (!f ? "Fail :(" : "OK"));
     if (!f) {
       error("error: %s (%d)\n", strerror(errno), -errno);
@@ -54,14 +63,15 @@
   FILE *f = fileToUse;
   printf("%s\n", (!f ? "Fail :(" : "OK"));
   
-  printf("\rWriting datapoint %d", data);
+  printf("\rWriting 16 bit value: %" PRIu16, data);
   fflush(stdout);
 
+  int err = 0;
   //write and check for error
   if (endline){
-    err = fprintf(f, "%d\n",);
+    err = fprintf(f,"%" PRIu16 "\n",data);
   }else{
-    err = fprintf(f, "%d",);
+    err = fprintf(f,"%" PRIu16,data);
   }
 
   if (err < 0) {
@@ -74,15 +84,17 @@
 void SDCardReader::write_uint32_t(uint32_t data, bool endline, FILE* fileToUse){
   FILE *f = fileToUse;
   printf("%s\n", (!f ? "Fail :(" : "OK"));
-  
-  printf("\rWriting datapoint %d", data);
+
+  printf("\rWriting 32 bit value:  %" PRIu32, data);
+  //printf("\rWriting datapoint %d", data);
   fflush(stdout);
 
+  int err = 0;
   //write and check for error
   if (endline){
-    err = fprintf(f, "%d\n",);
+    err = fprintf(f,"%" PRIu32 "\n",data);
   }else{
-    err = fprintf(f, "%d ",);
+    err = fprintf(f,"%" PRIu32,data);
   }
   
   if (err < 0) {
@@ -96,6 +108,8 @@
   // Close the file which also flushes any cached writes
   printf("Closing file...");
   fflush(stdout);
+
+  int err = 0;
   err = fclose(fileToClose);
   printf("%s\n", (err < 0 ? "Fail :(" : "OK"));
   if (err < 0) {
@@ -103,12 +117,11 @@
   } 
 }
 
-
 int SDCardReader::fullWriteProcedure(string filename,int* indexArr, uint32_t* timeArr, uint16_t** allData){
   mountFileSystem();
   FILE* theFile = openFile(filename);
 
-  for (int i = 0; i < indexArr.size; i++){
+  for (int i = 0; i<getSize(indexArr); i++){
     writeDataPoint(theFile,indexArr[i],timeArr[i], allData[i]);
   }
   
@@ -130,10 +143,10 @@
   write_uint32_t(timestamp, false, theFile);
 
   //write data
-  for (int i = 0; i < data.size-1; i++) {
+  for (int i = 0; i < getSize(data)-1; i++) {
     write_uint16_t(data[i], false, theFile);
   }
-  write_uint16_t(data[data.size], false, theFile);
+  write_uint16_t(data[getSize(data)], false, theFile);
   
   closeFile(theFile);
   
@@ -146,7 +159,7 @@
 int SDCardReader::eraseData(){
     printf("Initializing the block device... ");
     fflush(stdout);
-    int err = this.init();
+    int err = this->init();
     printf("%s\n", (err ? "Fail :(" : "OK"));
     if (err) {
         error("error: %s (%d)\n", strerror(-err), err);
@@ -154,7 +167,7 @@
 
     printf("Erasing the block device... ");
     fflush(stdout);
-    err = this.erase(0, this.size());
+    err = this->erase(0, this->size());
     printf("%s\n", (err ? "Fail :(" : "OK"));
     if (err) {
         error("error: %s (%d)\n", strerror(-err), err);
@@ -162,42 +175,12 @@
 
     printf("Deinitializing the block device... ");
     fflush(stdout);
-    err = this.deinit();
+    err = this->deinit();
     printf("%s\n", (err ? "Fail :(" : "OK"));
     if (err) {
         error("error: %s (%d)\n", strerror(-err), err);
     }
+
+    return err;
 } 
-    
-
-/** Extras */
-/*int SDCardReader::writeBlock(uint8_t* blockToWrite, int dataLength){
-
-    if ( 0 != this->init()) {
-       printf("Init failed \n");
-       return -1;
-    }
-    
-     // set the frequency
-    if ( 0 != this->frequency(5000000)) {
-        printf("Error setting frequency \n");
-    }
-    
-    dataLength = 4096;
-    
-    printf("%i\n",this->program(blockToWrite, 0, dataLength));
-    if (0 == this->program(blockToWrite, 0, dataLength)){
-        printf("Block Written!");    
-        //read back contents of block
-        if ( 0 == this->read(blockToWrite, 0, dataLength)) {
-            // print the contents of the block
-            printf("%s", blockToWrite);
-        }
-    }
-     // call the SDBlockDevice instance de-initialisation method.
-    this->deinit();
-     
-     return 0;
-}
-
-
+