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

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;
    
    */