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:
Tue Apr 03 22:41:46 2018 -0400
Revision:
1:45627bbdeb69
Parent:
0:ebe71c7e7854
Child:
2:c2cfb0ebc3bd
Heavily revised and refactored code. SDCardReader class should be about pat, before reviewing syntax bugs. DataRecorder needs to be fleshed out using SDCardReader Implementation.

Who changed what in which revision?

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