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
dataRecorder.h
- Committer:
- DVLevine
- Date:
- 2018-04-03
- Revision:
- 0:ebe71c7e7854
- Child:
- 1:45627bbdeb69
File content as of revision 0:ebe71c7e7854:
#include "mbed.h" #include "platform/CircularBuffer.h" #define BUF_SIZE 150 #include <sstream> #define SSTR( x ) static_cast< std::ostringstream & >(( std::ostringstream() << std::dec << x ) ).str() // include circular buffer class DataRecorder{ public: DataRecorder(); int getNumStored(); uint16_t popLastValue(); uint8_t* getDistanceBlock(); int getDistanceDataLength(); //writes input value to buffer void LogDistancePoint(uint16_t value); void savePoint(uint16_t value); //saves buffer to sd card and clears it int WriteDataAndClearBuffer(); private: void pushEleToBuffer(uint16_t); // input values are converted to char arrays // iterate over char array to add values to buffer // buffer contents it turned into a uint8_t array and written to // sd card // clear pops all elements out of buffer. CircularBuffer<char, BUF_SIZE> buf; char data_stream[];// = "DataToBeAddedToBuffer"; uint32_t bytes_written;// = 0; int m; const uint8_t separator = ' '; //sdcard blocks uint8_t blockDistance[4096]; int blockDistance_Index; //specialized buffers CircularBuffer<uint16_t, BUF_SIZE> buf_distance; CircularBuffer<uint16_t, BUF_SIZE> buf_kalmanAngle; CircularBuffer<uint32_t, BUF_SIZE> buf_timestamp; /*CircularBuffer<char, BUF_SIZE> buf_accX; CircularBuffer<char, BUF_SIZE> buf_accY; CircularBuffer<char, BUF_SIZE> buf_accZ; CircularBuffer<char, BUF_SIZE> buf_gyroX; CircularBuffer<char, BUF_SIZE> buf_gyroY; CircularBuffer<char, BUF_SIZE> buf_gyroZ;*/ }; /* uint32_t bytes_written = 0; while (!buf.full()) { buf.push(data_stream[bytes_written++]); } printf("Circular buffer is full: \"%s\" or empty: \"%s\" \n", (buf.full()? "true":"false"), (buf.empty()? "true":"false") ); printf ("Bytes written %d \n", bytes_written); // If buffer is full, contents will be over-written buf.push(data_stream[bytes_written++]); char data; printf ("Buffer contents: "); while (!buf.empty()) { buf.pop(data); printf("%c", data); } printf("\n"); printf("Circular buffer is full: \"%s\" or empty: \"%s\" \n", (buf.full()? "true":"false"), (buf.empty()? "true":"false") ); return 0; */