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 16:17:34 2018 -0400
Revision:
2:c2cfb0ebc3bd
Parent:
1:45627bbdeb69
Child:
3:df8fb1b5d868
Completed first round. Now need to bug check

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