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 21:50:25 2018 +0000
Revision:
0:ebe71c7e7854
Child:
1:45627bbdeb69
SD Card Reading library testbed;

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 0:ebe71c7e7854 3
DVLevine 0:ebe71c7e7854 4 #define BUF_SIZE 150
DVLevine 0:ebe71c7e7854 5
DVLevine 0:ebe71c7e7854 6 #include <sstream>
DVLevine 0:ebe71c7e7854 7 #define SSTR( x ) static_cast< std::ostringstream & >(( std::ostringstream() << std::dec << x ) ).str()
DVLevine 0:ebe71c7e7854 8
DVLevine 0:ebe71c7e7854 9 // include circular buffer
DVLevine 0:ebe71c7e7854 10
DVLevine 0:ebe71c7e7854 11 class DataRecorder{
DVLevine 0:ebe71c7e7854 12 public:
DVLevine 0:ebe71c7e7854 13 DataRecorder();
DVLevine 0:ebe71c7e7854 14
DVLevine 0:ebe71c7e7854 15 int getNumStored();
DVLevine 0:ebe71c7e7854 16 uint16_t popLastValue();
DVLevine 0:ebe71c7e7854 17
DVLevine 0:ebe71c7e7854 18
DVLevine 0:ebe71c7e7854 19 uint8_t* getDistanceBlock();
DVLevine 0:ebe71c7e7854 20 int getDistanceDataLength();
DVLevine 0:ebe71c7e7854 21
DVLevine 0:ebe71c7e7854 22 //writes input value to buffer
DVLevine 0:ebe71c7e7854 23 void LogDistancePoint(uint16_t value);
DVLevine 0:ebe71c7e7854 24
DVLevine 0:ebe71c7e7854 25 void savePoint(uint16_t value);
DVLevine 0:ebe71c7e7854 26
DVLevine 0:ebe71c7e7854 27
DVLevine 0:ebe71c7e7854 28 //saves buffer to sd card and clears it
DVLevine 0:ebe71c7e7854 29 int WriteDataAndClearBuffer();
DVLevine 0:ebe71c7e7854 30
DVLevine 0:ebe71c7e7854 31
DVLevine 0:ebe71c7e7854 32 private:
DVLevine 0:ebe71c7e7854 33
DVLevine 0:ebe71c7e7854 34
DVLevine 0:ebe71c7e7854 35 void pushEleToBuffer(uint16_t);
DVLevine 0:ebe71c7e7854 36 // input values are converted to char arrays
DVLevine 0:ebe71c7e7854 37 // iterate over char array to add values to buffer
DVLevine 0:ebe71c7e7854 38 // buffer contents it turned into a uint8_t array and written to
DVLevine 0:ebe71c7e7854 39 // sd card
DVLevine 0:ebe71c7e7854 40
DVLevine 0:ebe71c7e7854 41 // clear pops all elements out of buffer.
DVLevine 0:ebe71c7e7854 42 CircularBuffer<char, BUF_SIZE> buf;
DVLevine 0:ebe71c7e7854 43 char data_stream[];// = "DataToBeAddedToBuffer";
DVLevine 0:ebe71c7e7854 44 uint32_t bytes_written;// = 0;
DVLevine 0:ebe71c7e7854 45 int m;
DVLevine 0:ebe71c7e7854 46 const uint8_t separator = ' ';
DVLevine 0:ebe71c7e7854 47
DVLevine 0:ebe71c7e7854 48 //sdcard blocks
DVLevine 0:ebe71c7e7854 49 uint8_t blockDistance[4096];
DVLevine 0:ebe71c7e7854 50 int blockDistance_Index;
DVLevine 0:ebe71c7e7854 51
DVLevine 0:ebe71c7e7854 52 //specialized buffers
DVLevine 0:ebe71c7e7854 53 CircularBuffer<uint16_t, BUF_SIZE> buf_distance;
DVLevine 0:ebe71c7e7854 54 CircularBuffer<uint16_t, BUF_SIZE> buf_kalmanAngle;
DVLevine 0:ebe71c7e7854 55 CircularBuffer<uint32_t, BUF_SIZE> buf_timestamp;
DVLevine 0:ebe71c7e7854 56
DVLevine 0:ebe71c7e7854 57 /*CircularBuffer<char, BUF_SIZE> buf_accX;
DVLevine 0:ebe71c7e7854 58 CircularBuffer<char, BUF_SIZE> buf_accY;
DVLevine 0:ebe71c7e7854 59 CircularBuffer<char, BUF_SIZE> buf_accZ;
DVLevine 0:ebe71c7e7854 60 CircularBuffer<char, BUF_SIZE> buf_gyroX;
DVLevine 0:ebe71c7e7854 61 CircularBuffer<char, BUF_SIZE> buf_gyroY;
DVLevine 0:ebe71c7e7854 62 CircularBuffer<char, BUF_SIZE> buf_gyroZ;*/
DVLevine 0:ebe71c7e7854 63
DVLevine 0:ebe71c7e7854 64
DVLevine 0:ebe71c7e7854 65
DVLevine 0:ebe71c7e7854 66 };
DVLevine 0:ebe71c7e7854 67
DVLevine 0:ebe71c7e7854 68 /*
DVLevine 0:ebe71c7e7854 69
DVLevine 0:ebe71c7e7854 70 uint32_t bytes_written = 0;
DVLevine 0:ebe71c7e7854 71
DVLevine 0:ebe71c7e7854 72 while (!buf.full()) {
DVLevine 0:ebe71c7e7854 73 buf.push(data_stream[bytes_written++]);
DVLevine 0:ebe71c7e7854 74 }
DVLevine 0:ebe71c7e7854 75
DVLevine 0:ebe71c7e7854 76 printf("Circular buffer is full: \"%s\" or empty: \"%s\" \n",
DVLevine 0:ebe71c7e7854 77 (buf.full()? "true":"false"),
DVLevine 0:ebe71c7e7854 78 (buf.empty()? "true":"false") );
DVLevine 0:ebe71c7e7854 79 printf ("Bytes written %d \n", bytes_written);
DVLevine 0:ebe71c7e7854 80
DVLevine 0:ebe71c7e7854 81 // If buffer is full, contents will be over-written
DVLevine 0:ebe71c7e7854 82 buf.push(data_stream[bytes_written++]);
DVLevine 0:ebe71c7e7854 83
DVLevine 0:ebe71c7e7854 84 char data;
DVLevine 0:ebe71c7e7854 85 printf ("Buffer contents: ");
DVLevine 0:ebe71c7e7854 86 while (!buf.empty()) {
DVLevine 0:ebe71c7e7854 87 buf.pop(data);
DVLevine 0:ebe71c7e7854 88 printf("%c", data);
DVLevine 0:ebe71c7e7854 89 }
DVLevine 0:ebe71c7e7854 90 printf("\n");
DVLevine 0:ebe71c7e7854 91
DVLevine 0:ebe71c7e7854 92 printf("Circular buffer is full: \"%s\" or empty: \"%s\" \n",
DVLevine 0:ebe71c7e7854 93 (buf.full()? "true":"false"),
DVLevine 0:ebe71c7e7854 94 (buf.empty()? "true":"false") );
DVLevine 0:ebe71c7e7854 95
DVLevine 0:ebe71c7e7854 96 return 0;
DVLevine 0:ebe71c7e7854 97
DVLevine 0:ebe71c7e7854 98 */