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

Committer:
DVLevine
Date:
Thu Apr 05 04:08:32 2018 -0400
Revision:
5:0a4ff027086c
Parent:
3:df8fb1b5d868
Child:
9:a2ba4015796e
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...

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DVLevine 1:45627bbdeb69 1 #include "dataRecorder.h"
DVLevine 0:ebe71c7e7854 2
DVLevine 1:45627bbdeb69 3 /* CONSTRUCTOR*/
DVLevine 3:df8fb1b5d868 4 DataRecorder::DataRecorder(){
DVLevine 1:45627bbdeb69 5 //Initialize SDCard Reader Class
DVLevine 1:45627bbdeb69 6 m_saveBuddy = new SDCardReader();
DVLevine 1:45627bbdeb69 7
DVLevine 1:45627bbdeb69 8 //Initialize data quantity as 0
DVLevine 1:45627bbdeb69 9 m_data_quantity = 0;
DVLevine 3:df8fb1b5d868 10 }
DVLevine 0:ebe71c7e7854 11
DVLevine 0:ebe71c7e7854 12
DVLevine 1:45627bbdeb69 13 /* PUBLIC METHODS */
DVLevine 1:45627bbdeb69 14
DVLevine 2:c2cfb0ebc3bd 15 int DataRecorder::getDataQuantity(){
DVLevine 1:45627bbdeb69 16 return m_data_quantity;
DVLevine 1:45627bbdeb69 17 }
DVLevine 1:45627bbdeb69 18
DVLevine 2:c2cfb0ebc3bd 19 int DataRecorder::getTimeStampQuantity(){
DVLevine 2:c2cfb0ebc3bd 20 return m_time_quantity;
DVLevine 2:c2cfb0ebc3bd 21 }
DVLevine 2:c2cfb0ebc3bd 22
DVLevine 1:45627bbdeb69 23
DVLevine 1:45627bbdeb69 24 uint16_t DataRecorder::popLastDataPoint(){
DVLevine 5:0a4ff027086c 25 printf("pop data\n");
DVLevine 5:0a4ff027086c 26
DVLevine 2:c2cfb0ebc3bd 27 m_data_quantity--;
DVLevine 2:c2cfb0ebc3bd 28 if (m_data_quantity<0){
DVLevine 2:c2cfb0ebc3bd 29 m_data_quantity=0;
DVLevine 2:c2cfb0ebc3bd 30 }
DVLevine 3:df8fb1b5d868 31 uint16_t poppedData;
DVLevine 2:c2cfb0ebc3bd 32 if(!m_buf_data.empty()){
DVLevine 3:df8fb1b5d868 33 m_buf_data.pop(poppedData);
DVLevine 3:df8fb1b5d868 34 return poppedData;
DVLevine 2:c2cfb0ebc3bd 35 }else{
DVLevine 2:c2cfb0ebc3bd 36 return (uint16_t)0;
DVLevine 2:c2cfb0ebc3bd 37 }
DVLevine 2:c2cfb0ebc3bd 38
DVLevine 1:45627bbdeb69 39 }
DVLevine 1:45627bbdeb69 40
DVLevine 1:45627bbdeb69 41 uint32_t DataRecorder::popLastTimeStamp(){
DVLevine 5:0a4ff027086c 42 printf("pop time\n");
DVLevine 2:c2cfb0ebc3bd 43 m_time_quantity--;
DVLevine 2:c2cfb0ebc3bd 44 if (m_time_quantity<0){
DVLevine 2:c2cfb0ebc3bd 45 m_time_quantity=0;
DVLevine 2:c2cfb0ebc3bd 46 }
DVLevine 2:c2cfb0ebc3bd 47
DVLevine 3:df8fb1b5d868 48 uint32_t poppedData;
DVLevine 3:df8fb1b5d868 49 if(!m_buf_timestamp.empty()){
DVLevine 3:df8fb1b5d868 50 m_buf_timestamp.pop(poppedData);
DVLevine 3:df8fb1b5d868 51 return poppedData;
DVLevine 2:c2cfb0ebc3bd 52 }else{
DVLevine 2:c2cfb0ebc3bd 53 return (uint16_t)0;
DVLevine 2:c2cfb0ebc3bd 54 }
DVLevine 2:c2cfb0ebc3bd 55
DVLevine 1:45627bbdeb69 56 }
DVLevine 1:45627bbdeb69 57
DVLevine 1:45627bbdeb69 58 void DataRecorder::logDistancePoint(uint16_t value){
DVLevine 5:0a4ff027086c 59 printf("push distance\n");
DVLevine 2:c2cfb0ebc3bd 60 m_data_quantity++;
DVLevine 2:c2cfb0ebc3bd 61 if (m_data_quantity>BUF_SIZE){
DVLevine 2:c2cfb0ebc3bd 62 m_data_quantity=BUF_SIZE;
DVLevine 2:c2cfb0ebc3bd 63 }
DVLevine 1:45627bbdeb69 64 m_buf_data.push(value);
DVLevine 1:45627bbdeb69 65 }
DVLevine 1:45627bbdeb69 66
DVLevine 1:45627bbdeb69 67 void DataRecorder::logTimeStamp(uint32_t value){
DVLevine 5:0a4ff027086c 68 printf("push time\n");
DVLevine 2:c2cfb0ebc3bd 69 m_time_quantity++;
DVLevine 2:c2cfb0ebc3bd 70 if (m_time_quantity>BUF_SIZE){
DVLevine 2:c2cfb0ebc3bd 71 m_time_quantity=BUF_SIZE;
DVLevine 2:c2cfb0ebc3bd 72 }
DVLevine 1:45627bbdeb69 73 m_buf_timestamp.push(value);
DVLevine 1:45627bbdeb69 74 }
DVLevine 2:c2cfb0ebc3bd 75
DVLevine 5:0a4ff027086c 76 //helpers
DVLevine 5:0a4ff027086c 77 int getoSize(int* p){
DVLevine 5:0a4ff027086c 78 printf("reg p %i \n",sizeof(p));
DVLevine 5:0a4ff027086c 79 printf("star p %i \n",sizeof(*p));
DVLevine 5:0a4ff027086c 80
DVLevine 5:0a4ff027086c 81 return (sizeof(p)/sizeof(*p));
DVLevine 5:0a4ff027086c 82 }
DVLevine 5:0a4ff027086c 83
DVLevine 5:0a4ff027086c 84 int getoSize(uint16_t* p){
DVLevine 5:0a4ff027086c 85 return (sizeof(p)/sizeof(*p));
DVLevine 5:0a4ff027086c 86 }
DVLevine 5:0a4ff027086c 87
DVLevine 5:0a4ff027086c 88
DVLevine 1:45627bbdeb69 89 /** Save logged data to SD card **/
DVLevine 1:45627bbdeb69 90 void DataRecorder::saveLoggedData(string filename){
DVLevine 1:45627bbdeb69 91 //iterate over buffer and use the sd card commands
DVLevine 5:0a4ff027086c 92
DVLevine 5:0a4ff027086c 93 printf("before logging, data quantity is %i\n",m_data_quantity);
DVLevine 3:df8fb1b5d868 94
DVLevine 5:0a4ff027086c 95 int numPoints = m_data_quantity; //add check for timestamps
DVLevine 5:0a4ff027086c 96
DVLevine 5:0a4ff027086c 97 vector<int> indexArr(numPoints);
DVLevine 5:0a4ff027086c 98 //int indexArr[numPoints];
DVLevine 5:0a4ff027086c 99
DVLevine 5:0a4ff027086c 100 //index setting
DVLevine 5:0a4ff027086c 101 for (int i = numPoints-1; i >=0 ; i--){
DVLevine 2:c2cfb0ebc3bd 102 indexArr[i] = i;
DVLevine 2:c2cfb0ebc3bd 103 }
DVLevine 5:0a4ff027086c 104
DVLevine 5:0a4ff027086c 105 vector<uint32_t> timeArr(numPoints);
DVLevine 5:0a4ff027086c 106 vector<vector <uint16_t> > allDataArr(numPoints);
DVLevine 2:c2cfb0ebc3bd 107
DVLevine 5:0a4ff027086c 108 //uint32_t timeArr[numPoints];
DVLevine 5:0a4ff027086c 109 //uint16_t* allDataArr[numPoints];
DVLevine 1:45627bbdeb69 110
DVLevine 3:df8fb1b5d868 111 for (int i = 0; i < numPoints; i++){
DVLevine 5:0a4ff027086c 112 //time aggregation
DVLevine 5:0a4ff027086c 113 timeArr[i] = popLastTimeStamp();
DVLevine 5:0a4ff027086c 114
DVLevine 5:0a4ff027086c 115 //data aggregation
DVLevine 5:0a4ff027086c 116 vector<uint16_t> dataEntry(1);
DVLevine 5:0a4ff027086c 117 dataEntry[0] = popLastDataPoint();
DVLevine 2:c2cfb0ebc3bd 118 allDataArr[i] = dataEntry;
DVLevine 5:0a4ff027086c 119 printf("%i\n",static_cast<int>(dataEntry[0]));
DVLevine 2:c2cfb0ebc3bd 120 }
DVLevine 5:0a4ff027086c 121
DVLevine 5:0a4ff027086c 122 printf("Before launch! size test %i \n",indexArr.size());
DVLevine 2:c2cfb0ebc3bd 123
DVLevine 2:c2cfb0ebc3bd 124 m_saveBuddy->fullWriteProcedure(filename,indexArr,timeArr,allDataArr);
DVLevine 1:45627bbdeb69 125 }
DVLevine 1:45627bbdeb69 126 //saves buffer to sd card and clears it
DVLevine 1:45627bbdeb69 127 void DataRecorder::saveLoggedDataAndClearBuffer(string filename){
DVLevine 1:45627bbdeb69 128 saveLoggedData(filename);
DVLevine 1:45627bbdeb69 129 // then eraseBuffers();
DVLevine 1:45627bbdeb69 130 }