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@0:ebe71c7e7854, 2018-04-03 (annotated)
- 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?
User | Revision | Line number | New 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 | */ |