Daniel Levine / CircularBufferSDCardLib

Dependencies:   sd-driver_compatible_with_MAX32630FTHR

Fork of CircularBufferSDCardLib by Daniel Levine

Files at this revision

API Documentation at this revision

Comitter:
DVLevine
Date:
Thu Apr 05 04:08:32 2018 -0400
Parent:
4:fe6d2823b7cb
Child:
6:a36eda5701df
Commit message:
bugs ironed out. Uses circular buffer and saves information.
Some last bug where last data of row (third col) always shows up as some weird number. Fixing now...

Changed in this revision

dataRecorder.cpp Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
sdCardReader.cpp Show annotated file Show diff for this revision Revisions of this file
sdCardReader.h Show annotated file Show diff for this revision Revisions of this file
--- a/dataRecorder.cpp	Thu Apr 05 01:22:57 2018 -0400
+++ b/dataRecorder.cpp	Thu Apr 05 04:08:32 2018 -0400
@@ -2,8 +2,6 @@
 
 /* CONSTRUCTOR*/
 DataRecorder::DataRecorder(){
-
-  DataRecorder();
   //Initialize SDCard Reader Class
   m_saveBuddy = new SDCardReader();
 
@@ -24,6 +22,8 @@
 
 
 uint16_t DataRecorder::popLastDataPoint(){
+  printf("pop data\n");
+  
   m_data_quantity--;
     if (m_data_quantity<0){
     m_data_quantity=0;
@@ -39,6 +39,7 @@
 }
 
 uint32_t DataRecorder::popLastTimeStamp(){
+  printf("pop time\n");
   m_time_quantity--;
   if (m_time_quantity<0){
     m_time_quantity=0;
@@ -55,6 +56,7 @@
 }
 
 void DataRecorder::logDistancePoint(uint16_t value){
+  printf("push distance\n");
   m_data_quantity++;
   if (m_data_quantity>BUF_SIZE){
     m_data_quantity=BUF_SIZE;
@@ -63,6 +65,7 @@
 }
 
 void DataRecorder::logTimeStamp(uint32_t value){
+  printf("push time\n");
   m_time_quantity++;
   if (m_time_quantity>BUF_SIZE){
     m_time_quantity=BUF_SIZE;
@@ -70,24 +73,53 @@
   m_buf_timestamp.push(value);
 }
 
+//helpers
+int getoSize(int* p){
+  printf("reg p %i \n",sizeof(p));
+  printf("star p %i \n",sizeof(*p));
+  
+  return (sizeof(p)/sizeof(*p));
+}
+
+int getoSize(uint16_t* p){
+  return (sizeof(p)/sizeof(*p));
+}
+
+
 /** Save logged data to SD card **/
 void DataRecorder::saveLoggedData(string filename){
   //iterate over buffer and use the sd card commands
-  int numPoints = m_data_quantity; //add check for timestamps
+
+  printf("before logging, data quantity is %i\n",m_data_quantity);
   
-  int indexArr[m_data_quantity];
-  for (int i = m_data_quantity; i >=0 ; i--){
+  int numPoints = m_data_quantity; //add check for timestamps
+
+  vector<int> indexArr(numPoints);
+  //int indexArr[numPoints];
+  
+  //index setting
+  for (int i = numPoints-1; i >=0 ; i--){
     indexArr[i] = i;
   }
+
+  vector<uint32_t> timeArr(numPoints); 
+  vector<vector <uint16_t> > allDataArr(numPoints); 
   
-  uint32_t timeArr[m_time_quantity];
-  uint16_t* allDataArr[m_data_quantity];
+  //uint32_t timeArr[numPoints];
+  //uint16_t* allDataArr[numPoints];
 
   for (int i = 0; i < numPoints; i++){
-    uint16_t dataEntry[1];
-    dataEntry[1] = popLastDataPoint(); 
+    //time aggregation
+    timeArr[i] = popLastTimeStamp(); 
+    
+    //data aggregation
+    vector<uint16_t> dataEntry(1);
+    dataEntry[0] = popLastDataPoint(); 
     allDataArr[i] = dataEntry;
+    printf("%i\n",static_cast<int>(dataEntry[0]));
   }
+
+  printf("Before launch! size test %i \n",indexArr.size());
   
   m_saveBuddy->fullWriteProcedure(filename,indexArr,timeArr,allDataArr); 
 }
--- a/main.cpp	Thu Apr 05 01:22:57 2018 -0400
+++ b/main.cpp	Thu Apr 05 04:08:32 2018 -0400
@@ -32,11 +32,11 @@
     boba->logDistancePoint(d);
     boba->logDistancePoint(e);
 
-    boba->logTimeStamp(a);
-    boba->logTimeStamp(b);
-    boba->logTimeStamp(c);
-    boba->logTimeStamp(d);
-    boba->logTimeStamp(e);
+    boba->logTimeStamp(ta);
+    boba->logTimeStamp(tb);
+    boba->logTimeStamp(tc);
+    boba->logTimeStamp(td);
+    boba->logTimeStamp(te);
     
 
     printf("about to save\n");
@@ -47,6 +47,5 @@
     printf("saved\n");
     
     led1 = !led1;
-     
 }
 
--- a/sdCardReader.cpp	Thu Apr 05 01:22:57 2018 -0400
+++ b/sdCardReader.cpp	Thu Apr 05 04:08:32 2018 -0400
@@ -3,6 +3,9 @@
 
 //helpers
 int getSize(int* p){
+  printf("reg p %i \n",sizeof(p));
+  printf("star p %i \n",sizeof(*p));
+  
   return (sizeof(p)/sizeof(*p));
 }
 
@@ -63,15 +66,17 @@
   FILE *f = fileToUse;
   printf("%s\n", (!f ? "Fail :(" : "OK"));
   
-  printf("\rWriting 16 bit value: %" PRIu16, data);
+  //printf("\rWriting 16 bit value: % " PRIu16 " ", data);
+  printf("\rWriting 16 bit value %i ", static_cast<int>(data));
   fflush(stdout);
 
   int err = 0;
   //write and check for error
   if (endline){
-    err = fprintf(f,"%" PRIu16 "\n",data);
+    err = fprintf(f,"%i\n",static_cast<int>(data));
+    //err = fprintf(f,"%" PRIu16 "\n",data);
   }else{
-    err = fprintf(f,"%" PRIu16,data);
+    err = fprintf(f,"%i " ,static_cast<int>(data));
   }
 
   if (err < 0) {
@@ -85,16 +90,17 @@
   FILE *f = fileToUse;
   printf("%s\n", (!f ? "Fail :(" : "OK"));
 
-  printf("\rWriting 32 bit value:  %" PRIu32, data);
-  //printf("\rWriting datapoint %d", data);
+  //printf("\rWriting 32 bit value:  %" PRIu32 " ", data);
+  printf("\rWriting 32 bit value %i ", static_cast<int>(data));
   fflush(stdout);
 
   int err = 0;
   //write and check for error
   if (endline){
-    err = fprintf(f,"%" PRIu32 "\n",data);
+    //err = fprintf(f,"%" PRIu32 "\n",data);
+    err = fprintf(f,"%i\n",static_cast<int>(data));
   }else{
-    err = fprintf(f,"%" PRIu32,data);
+    err = fprintf(f,"%i ",static_cast<int>(data));
   }
   
   if (err < 0) {
@@ -117,11 +123,13 @@
   } 
 }
 
-int SDCardReader::fullWriteProcedure(string filename,int* indexArr, uint32_t* timeArr, uint16_t** allData){
+int SDCardReader::fullWriteProcedure(string filename,vector<int> indexArr, vector<uint32_t> timeArr, vector<vector <uint16_t> > allData){
   mountFileSystem();
   FILE* theFile = openFile(filename);
 
-  for (int i = 0; i<getSize(indexArr); i++){
+  printf("The size of indexArr is %i \n",indexArr.size());
+  
+  for (unsigned int i = 0; i< indexArr.size(); i++){
     writeDataPoint(theFile,indexArr[i],timeArr[i], allData[i]);
   }
   
@@ -134,7 +142,7 @@
 //use circular buffers instead of strings
 //write as 1st column, index. 2nd column timestamp. 3rd column data1. 4th data2. etc.
 //pass in array of circular buffers 
-int SDCardReader::writeDataPoint(FILE* theFile, int index, uint32_t timestamp, uint16_t* data){
+int SDCardReader::writeDataPoint(FILE* theFile, int index, uint32_t timestamp, vector<uint16_t> data){
   //  FILE* theFile = openFile(filename);
 
   //write index
@@ -143,17 +151,11 @@
   write_uint32_t(timestamp, false, theFile);
 
   //write data
-  for (int i = 0; i < getSize(data)-1; i++) {
+  for (unsigned int i = 0; i < data.size()-1; i++) {
     write_uint16_t(data[i], false, theFile);
   }
-  write_uint16_t(data[getSize(data)], false, theFile);
-  
-  closeFile(theFile);
-  
-  // call the SDBlockDevice instance de-initialisation method.
-    this->deinit();
-    
-    return 0;
+  write_uint16_t(data[data.size()], true, theFile);
+  return 0;
 }
 
 int SDCardReader::eraseData(){
--- a/sdCardReader.h	Thu Apr 05 01:22:57 2018 -0400
+++ b/sdCardReader.h	Thu Apr 05 04:08:32 2018 -0400
@@ -24,10 +24,10 @@
   	FILE* openFile(string filename);
 	void closeFile(FILE* fileToClose);
 
-	int writeDataPoint(FILE* theFile, int index, uint32_t timestamp, uint16_t* data);
+	int writeDataPoint(FILE* theFile, int index, uint32_t timestamp, vector<uint16_t> data);
 	int eraseData();
 
-	int fullWriteProcedure(string filename,int* indexArr, uint32_t* timeArr, uint16_t** allData);
+	int fullWriteProcedure(string filename,vector<int> indexArr, vector<uint32_t> timeArr, vector<vector <uint16_t> > allData);
 		
 	void mountFileSystem();
 	void unmountFileSystem();