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:
Sat Apr 07 04:57:09 2018 +0000
Revision:
10:f5fdba83488a
Parent:
3:df8fb1b5d868
Child:
12:c09a50d9469a
added field to change number of data fields to be written

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DVLevine 3:df8fb1b5d868 1 #ifndef _DATARECORDER_H_
DVLevine 3:df8fb1b5d868 2 #define _DATARECORDER_H_
DVLevine 3:df8fb1b5d868 3
DVLevine 0:ebe71c7e7854 4 #include "mbed.h"
DVLevine 0:ebe71c7e7854 5 #include "platform/CircularBuffer.h"
DVLevine 1:45627bbdeb69 6 #include "sdCardReader.h"
DVLevine 0:ebe71c7e7854 7
DVLevine 1:45627bbdeb69 8
DVLevine 1:45627bbdeb69 9 //converts number to string
DVLevine 0:ebe71c7e7854 10 #include <sstream>
DVLevine 0:ebe71c7e7854 11 #define SSTR( x ) static_cast< std::ostringstream & >(( std::ostringstream() << std::dec << x ) ).str()
DVLevine 0:ebe71c7e7854 12
DVLevine 1:45627bbdeb69 13 // Define circular buffer size
DVLevine 10:f5fdba83488a 14 #define BUF_SIZE 2000
DVLevine 1:45627bbdeb69 15
DVLevine 1:45627bbdeb69 16
DVLevine 1:45627bbdeb69 17 /** Data Recorder is a class that stores data measurements in a ring buffer.
DVLevine 1:45627bbdeb69 18 It contains an SD Card Reader with a filesystem to store measurements when required **/
DVLevine 0:ebe71c7e7854 19
DVLevine 0:ebe71c7e7854 20 class DataRecorder{
DVLevine 0:ebe71c7e7854 21 public:
DVLevine 10:f5fdba83488a 22 DataRecorder(int numDataFields);
DVLevine 1:45627bbdeb69 23 /** Get Information **/
DVLevine 1:45627bbdeb69 24 // gets the number of values stored in the circular buffer
DVLevine 3:df8fb1b5d868 25 int getDataQuantity();
DVLevine 3:df8fb1b5d868 26 int getTimeStampQuantity();
DVLevine 0:ebe71c7e7854 27
DVLevine 1:45627bbdeb69 28 // pops the last value off of the circular buffer
DVLevine 1:45627bbdeb69 29 uint16_t popLastDataPoint();
DVLevine 1:45627bbdeb69 30 uint32_t popLastTimeStamp();
DVLevine 1:45627bbdeb69 31
DVLevine 1:45627bbdeb69 32 /** Set Information **/
DVLevine 1:45627bbdeb69 33 void logDistancePoint(uint16_t value);
DVLevine 1:45627bbdeb69 34 void logTimeStamp(uint32_t value);
DVLevine 1:45627bbdeb69 35
DVLevine 1:45627bbdeb69 36 /** Save logged data to SD card **/
DVLevine 1:45627bbdeb69 37 void saveLoggedData(string filename);
DVLevine 0:ebe71c7e7854 38 //saves buffer to sd card and clears it
DVLevine 1:45627bbdeb69 39 void saveLoggedDataAndClearBuffer(string filename);
DVLevine 1:45627bbdeb69 40
DVLevine 0:ebe71c7e7854 41
DVLevine 0:ebe71c7e7854 42 private:
DVLevine 1:45627bbdeb69 43
DVLevine 1:45627bbdeb69 44 void savePoint(uint16_t value);
DVLevine 0:ebe71c7e7854 45 // input values are converted to char arrays
DVLevine 0:ebe71c7e7854 46 // iterate over char array to add values to buffer
DVLevine 0:ebe71c7e7854 47 // buffer contents it turned into a uint8_t array and written to
DVLevine 0:ebe71c7e7854 48 // sd card
DVLevine 1:45627bbdeb69 49
DVLevine 1:45627bbdeb69 50 /* Buffers for Data Storage */
DVLevine 3:df8fb1b5d868 51 CircularBuffer<uint16_t, BUF_SIZE> m_buf_data;
DVLevine 3:df8fb1b5d868 52 CircularBuffer<uint32_t, BUF_SIZE> m_buf_timestamp;
DVLevine 1:45627bbdeb69 53
DVLevine 1:45627bbdeb69 54 // Count for buffers
DVLevine 1:45627bbdeb69 55 int m_data_quantity;
DVLevine 2:c2cfb0ebc3bd 56 int m_time_quantity;
DVLevine 0:ebe71c7e7854 57
DVLevine 1:45627bbdeb69 58 /* SD Card Interface Object */
DVLevine 1:45627bbdeb69 59 SDCardReader* m_saveBuddy;
DVLevine 10:f5fdba83488a 60
DVLevine 10:f5fdba83488a 61 int m_numDataFields;
DVLevine 1:45627bbdeb69 62
DVLevine 1:45627bbdeb69 63
DVLevine 1:45627bbdeb69 64
DVLevine 0:ebe71c7e7854 65
DVLevine 0:ebe71c7e7854 66 //specialized buffers
DVLevine 1:45627bbdeb69 67 //CircularBuffer<uint16_t, BUF_SIZE> buf_distance;
DVLevine 1:45627bbdeb69 68 //CircularBuffer<uint16_t, BUF_SIZE> buf_kalmanAngle;
DVLevine 1:45627bbdeb69 69 //CircularBuffer<uint32_t, BUF_SIZE> buf_timestamp;
DVLevine 0:ebe71c7e7854 70
DVLevine 0:ebe71c7e7854 71 /*CircularBuffer<char, BUF_SIZE> buf_accX;
DVLevine 0:ebe71c7e7854 72 CircularBuffer<char, BUF_SIZE> buf_accY;
DVLevine 0:ebe71c7e7854 73 CircularBuffer<char, BUF_SIZE> buf_accZ;
DVLevine 0:ebe71c7e7854 74 CircularBuffer<char, BUF_SIZE> buf_gyroX;
DVLevine 0:ebe71c7e7854 75 CircularBuffer<char, BUF_SIZE> buf_gyroY;
DVLevine 0:ebe71c7e7854 76 CircularBuffer<char, BUF_SIZE> buf_gyroZ;*/
DVLevine 0:ebe71c7e7854 77
DVLevine 1:45627bbdeb69 78 //sdcard blocks
DVLevine 1:45627bbdeb69 79 //uint8_t blockDistance[4096];
DVLevine 1:45627bbdeb69 80 //int blockDistance_Index;
DVLevine 1:45627bbdeb69 81
DVLevine 1:45627bbdeb69 82 // clear pops all elements out of buffer.
DVLevine 1:45627bbdeb69 83 /*CircularBuffer<char, BUF_SIZE> buf;
DVLevine 1:45627bbdeb69 84 char data_stream[];// = "DataToBeAddedToBuffer";
DVLevine 1:45627bbdeb69 85 uint32_t bytes_written;// = 0;
DVLevine 1:45627bbdeb69 86 int m;
DVLevine 1:45627bbdeb69 87 const uint8_t separator = ' ';*/
DVLevine 0:ebe71c7e7854 88
DVLevine 0:ebe71c7e7854 89 };
DVLevine 3:df8fb1b5d868 90
DVLevine 3:df8fb1b5d868 91
DVLevine 3:df8fb1b5d868 92 #endif