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@1:45627bbdeb69, 2018-04-03 (annotated)
- 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?
User | Revision | Line number | New 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 | }; |