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:
Fri Apr 06 04:01:33 2018 +0000
Revision:
9:a2ba4015796e
Parent:
5:0a4ff027086c
Child:
10:f5fdba83488a
removed some print statements for speed

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 9:a2ba4015796e 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 9:a2ba4015796e 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 9:a2ba4015796e 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 9:a2ba4015796e 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 }