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:
Wed Apr 04 17:15:36 2018 -0400
Revision:
3:df8fb1b5d868
Parent:
2:c2cfb0ebc3bd
Child:
5:0a4ff027086c
Corrected a lot of small errors. Stil some more left.

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 0:ebe71c7e7854 5
DVLevine 3:df8fb1b5d868 6 DataRecorder();
DVLevine 1:45627bbdeb69 7 //Initialize SDCard Reader Class
DVLevine 1:45627bbdeb69 8 m_saveBuddy = new SDCardReader();
DVLevine 1:45627bbdeb69 9
DVLevine 1:45627bbdeb69 10 //Initialize data quantity as 0
DVLevine 1:45627bbdeb69 11 m_data_quantity = 0;
DVLevine 3:df8fb1b5d868 12 }
DVLevine 0:ebe71c7e7854 13
DVLevine 0:ebe71c7e7854 14
DVLevine 1:45627bbdeb69 15 /* PUBLIC METHODS */
DVLevine 1:45627bbdeb69 16
DVLevine 2:c2cfb0ebc3bd 17 int DataRecorder::getDataQuantity(){
DVLevine 1:45627bbdeb69 18 return m_data_quantity;
DVLevine 1:45627bbdeb69 19 }
DVLevine 1:45627bbdeb69 20
DVLevine 2:c2cfb0ebc3bd 21 int DataRecorder::getTimeStampQuantity(){
DVLevine 2:c2cfb0ebc3bd 22 return m_time_quantity;
DVLevine 2:c2cfb0ebc3bd 23 }
DVLevine 2:c2cfb0ebc3bd 24
DVLevine 1:45627bbdeb69 25
DVLevine 1:45627bbdeb69 26 uint16_t DataRecorder::popLastDataPoint(){
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 2:c2cfb0ebc3bd 42 m_time_quantity--;
DVLevine 2:c2cfb0ebc3bd 43 if (m_time_quantity<0){
DVLevine 2:c2cfb0ebc3bd 44 m_time_quantity=0;
DVLevine 2:c2cfb0ebc3bd 45 }
DVLevine 2:c2cfb0ebc3bd 46
DVLevine 3:df8fb1b5d868 47 uint32_t poppedData;
DVLevine 3:df8fb1b5d868 48 if(!m_buf_timestamp.empty()){
DVLevine 3:df8fb1b5d868 49 m_buf_timestamp.pop(poppedData);
DVLevine 3:df8fb1b5d868 50 return poppedData;
DVLevine 2:c2cfb0ebc3bd 51 }else{
DVLevine 2:c2cfb0ebc3bd 52 return (uint16_t)0;
DVLevine 2:c2cfb0ebc3bd 53 }
DVLevine 2:c2cfb0ebc3bd 54
DVLevine 1:45627bbdeb69 55 }
DVLevine 1:45627bbdeb69 56
DVLevine 1:45627bbdeb69 57 void DataRecorder::logDistancePoint(uint16_t value){
DVLevine 2:c2cfb0ebc3bd 58 m_data_quantity++;
DVLevine 2:c2cfb0ebc3bd 59 if (m_data_quantity>BUF_SIZE){
DVLevine 2:c2cfb0ebc3bd 60 m_data_quantity=BUF_SIZE;
DVLevine 2:c2cfb0ebc3bd 61 }
DVLevine 1:45627bbdeb69 62 m_buf_data.push(value);
DVLevine 1:45627bbdeb69 63 }
DVLevine 1:45627bbdeb69 64
DVLevine 1:45627bbdeb69 65 void DataRecorder::logTimeStamp(uint32_t value){
DVLevine 2:c2cfb0ebc3bd 66 m_time_quantity++;
DVLevine 2:c2cfb0ebc3bd 67 if (m_time_quantity>BUF_SIZE){
DVLevine 2:c2cfb0ebc3bd 68 m_time_quantity=BUF_SIZE;
DVLevine 2:c2cfb0ebc3bd 69 }
DVLevine 1:45627bbdeb69 70 m_buf_timestamp.push(value);
DVLevine 1:45627bbdeb69 71 }
DVLevine 2:c2cfb0ebc3bd 72
DVLevine 1:45627bbdeb69 73 /** Save logged data to SD card **/
DVLevine 1:45627bbdeb69 74 void DataRecorder::saveLoggedData(string filename){
DVLevine 1:45627bbdeb69 75 //iterate over buffer and use the sd card commands
DVLevine 3:df8fb1b5d868 76 int numPoints = m_data_quantity; //add check for timestamps
DVLevine 3:df8fb1b5d868 77
DVLevine 2:c2cfb0ebc3bd 78 int indexArr[m_data_quantity];
DVLevine 3:df8fb1b5d868 79 for (int i = m_data_quantity; i >=0 ; i--){
DVLevine 2:c2cfb0ebc3bd 80 indexArr[i] = i;
DVLevine 2:c2cfb0ebc3bd 81 }
DVLevine 2:c2cfb0ebc3bd 82
DVLevine 2:c2cfb0ebc3bd 83 uint32_t timeArr[m_time_quantity];
DVLevine 2:c2cfb0ebc3bd 84 uint16_t* allDataArr[m_data_quantity];
DVLevine 1:45627bbdeb69 85
DVLevine 3:df8fb1b5d868 86 for (int i = 0; i < numPoints; i++){
DVLevine 2:c2cfb0ebc3bd 87 uint16_t dataEntry[1];
DVLevine 2:c2cfb0ebc3bd 88 dataEntry[1] = popLastDataPoint();
DVLevine 2:c2cfb0ebc3bd 89 allDataArr[i] = dataEntry;
DVLevine 2:c2cfb0ebc3bd 90 }
DVLevine 2:c2cfb0ebc3bd 91
DVLevine 2:c2cfb0ebc3bd 92 m_saveBuddy->fullWriteProcedure(filename,indexArr,timeArr,allDataArr);
DVLevine 1:45627bbdeb69 93 }
DVLevine 1:45627bbdeb69 94 //saves buffer to sd card and clears it
DVLevine 1:45627bbdeb69 95 void DataRecorder::saveLoggedDataAndClearBuffer(string filename){
DVLevine 1:45627bbdeb69 96 saveLoggedData(filename);
DVLevine 1:45627bbdeb69 97 // then eraseBuffers();
DVLevine 1:45627bbdeb69 98 }