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:
10:f5fdba83488a
Corrected a lot of small errors. Stil some more left.

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 2:c2cfb0ebc3bd 14 #define BUF_SIZE 350
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 3:df8fb1b5d868 22 DataRecorder();
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 1:45627bbdeb69 60
DVLevine 1:45627bbdeb69 61
DVLevine 1:45627bbdeb69 62
DVLevine 0:ebe71c7e7854 63
DVLevine 0:ebe71c7e7854 64 //specialized buffers
DVLevine 1:45627bbdeb69 65 //CircularBuffer<uint16_t, BUF_SIZE> buf_distance;
DVLevine 1:45627bbdeb69 66 //CircularBuffer<uint16_t, BUF_SIZE> buf_kalmanAngle;
DVLevine 1:45627bbdeb69 67 //CircularBuffer<uint32_t, BUF_SIZE> buf_timestamp;
DVLevine 0:ebe71c7e7854 68
DVLevine 0:ebe71c7e7854 69 /*CircularBuffer<char, BUF_SIZE> buf_accX;
DVLevine 0:ebe71c7e7854 70 CircularBuffer<char, BUF_SIZE> buf_accY;
DVLevine 0:ebe71c7e7854 71 CircularBuffer<char, BUF_SIZE> buf_accZ;
DVLevine 0:ebe71c7e7854 72 CircularBuffer<char, BUF_SIZE> buf_gyroX;
DVLevine 0:ebe71c7e7854 73 CircularBuffer<char, BUF_SIZE> buf_gyroY;
DVLevine 0:ebe71c7e7854 74 CircularBuffer<char, BUF_SIZE> buf_gyroZ;*/
DVLevine 0:ebe71c7e7854 75
DVLevine 1:45627bbdeb69 76 //sdcard blocks
DVLevine 1:45627bbdeb69 77 //uint8_t blockDistance[4096];
DVLevine 1:45627bbdeb69 78 //int blockDistance_Index;
DVLevine 1:45627bbdeb69 79
DVLevine 1:45627bbdeb69 80 // clear pops all elements out of buffer.
DVLevine 1:45627bbdeb69 81 /*CircularBuffer<char, BUF_SIZE> buf;
DVLevine 1:45627bbdeb69 82 char data_stream[];// = "DataToBeAddedToBuffer";
DVLevine 1:45627bbdeb69 83 uint32_t bytes_written;// = 0;
DVLevine 1:45627bbdeb69 84 int m;
DVLevine 1:45627bbdeb69 85 const uint8_t separator = ' ';*/
DVLevine 0:ebe71c7e7854 86
DVLevine 0:ebe71c7e7854 87 };
DVLevine 3:df8fb1b5d868 88
DVLevine 3:df8fb1b5d868 89
DVLevine 3:df8fb1b5d868 90 #endif