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 Jul 11 07:06:04 2018 -0400
Revision:
13:91350588d530
Parent:
12:c09a50d9469a
added /fs/ to be able to actually read and write to text file denoting log number

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 12:c09a50d9469a 14 #define BUF_SIZE 10000
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 12:c09a50d9469a 41 int getTrialNumAndIncrement();
DVLevine 12:c09a50d9469a 42
DVLevine 0:ebe71c7e7854 43
DVLevine 0:ebe71c7e7854 44 private:
DVLevine 1:45627bbdeb69 45
DVLevine 1:45627bbdeb69 46 void savePoint(uint16_t value);
DVLevine 0:ebe71c7e7854 47 // input values are converted to char arrays
DVLevine 0:ebe71c7e7854 48 // iterate over char array to add values to buffer
DVLevine 0:ebe71c7e7854 49 // buffer contents it turned into a uint8_t array and written to
DVLevine 0:ebe71c7e7854 50 // sd card
DVLevine 1:45627bbdeb69 51
DVLevine 1:45627bbdeb69 52 /* Buffers for Data Storage */
DVLevine 3:df8fb1b5d868 53 CircularBuffer<uint16_t, BUF_SIZE> m_buf_data;
DVLevine 3:df8fb1b5d868 54 CircularBuffer<uint32_t, BUF_SIZE> m_buf_timestamp;
DVLevine 1:45627bbdeb69 55
DVLevine 1:45627bbdeb69 56 // Count for buffers
DVLevine 1:45627bbdeb69 57 int m_data_quantity;
DVLevine 2:c2cfb0ebc3bd 58 int m_time_quantity;
DVLevine 0:ebe71c7e7854 59
DVLevine 1:45627bbdeb69 60 /* SD Card Interface Object */
DVLevine 1:45627bbdeb69 61 SDCardReader* m_saveBuddy;
DVLevine 10:f5fdba83488a 62
DVLevine 10:f5fdba83488a 63 int m_numDataFields;
DVLevine 1:45627bbdeb69 64
DVLevine 1:45627bbdeb69 65
DVLevine 1:45627bbdeb69 66
DVLevine 0:ebe71c7e7854 67
DVLevine 0:ebe71c7e7854 68 //specialized buffers
DVLevine 1:45627bbdeb69 69 //CircularBuffer<uint16_t, BUF_SIZE> buf_distance;
DVLevine 1:45627bbdeb69 70 //CircularBuffer<uint16_t, BUF_SIZE> buf_kalmanAngle;
DVLevine 1:45627bbdeb69 71 //CircularBuffer<uint32_t, BUF_SIZE> buf_timestamp;
DVLevine 0:ebe71c7e7854 72
DVLevine 0:ebe71c7e7854 73 /*CircularBuffer<char, BUF_SIZE> buf_accX;
DVLevine 0:ebe71c7e7854 74 CircularBuffer<char, BUF_SIZE> buf_accY;
DVLevine 0:ebe71c7e7854 75 CircularBuffer<char, BUF_SIZE> buf_accZ;
DVLevine 0:ebe71c7e7854 76 CircularBuffer<char, BUF_SIZE> buf_gyroX;
DVLevine 0:ebe71c7e7854 77 CircularBuffer<char, BUF_SIZE> buf_gyroY;
DVLevine 0:ebe71c7e7854 78 CircularBuffer<char, BUF_SIZE> buf_gyroZ;*/
DVLevine 0:ebe71c7e7854 79
DVLevine 1:45627bbdeb69 80 //sdcard blocks
DVLevine 1:45627bbdeb69 81 //uint8_t blockDistance[4096];
DVLevine 1:45627bbdeb69 82 //int blockDistance_Index;
DVLevine 1:45627bbdeb69 83
DVLevine 1:45627bbdeb69 84 // clear pops all elements out of buffer.
DVLevine 1:45627bbdeb69 85 /*CircularBuffer<char, BUF_SIZE> buf;
DVLevine 1:45627bbdeb69 86 char data_stream[];// = "DataToBeAddedToBuffer";
DVLevine 1:45627bbdeb69 87 uint32_t bytes_written;// = 0;
DVLevine 1:45627bbdeb69 88 int m;
DVLevine 1:45627bbdeb69 89 const uint8_t separator = ' ';*/
DVLevine 0:ebe71c7e7854 90
DVLevine 0:ebe71c7e7854 91 };
DVLevine 3:df8fb1b5d868 92
DVLevine 3:df8fb1b5d868 93
DVLevine 3:df8fb1b5d868 94 #endif