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
DVLevine 0:ebe71c7e7854 2 #include "dataRecorder.h"
DVLevine 0:ebe71c7e7854 3
DVLevine 0:ebe71c7e7854 4 DataRecorder::DataRecorder(){
DVLevine 0:ebe71c7e7854 5 uint32_t bytes_written = 0;
DVLevine 0:ebe71c7e7854 6 blockDistance_Index = 0;
DVLevine 0:ebe71c7e7854 7 //uint8_t separator = ' ';
DVLevine 0:ebe71c7e7854 8 };
DVLevine 0:ebe71c7e7854 9
DVLevine 0:ebe71c7e7854 10
DVLevine 0:ebe71c7e7854 11 //private buffer load in method
DVLevine 0:ebe71c7e7854 12 void DataRecorder::pushEleToBuffer(uint16_t inputVal){
DVLevine 0:ebe71c7e7854 13 buf_distance.push(inputVal);
DVLevine 0:ebe71c7e7854 14 // while (!buf.full()) {
DVLevine 0:ebe71c7e7854 15 // buf.push(inputVal);
DVLevine 0:ebe71c7e7854 16 // }
DVLevine 0:ebe71c7e7854 17
DVLevine 0:ebe71c7e7854 18 }
DVLevine 0:ebe71c7e7854 19
DVLevine 0:ebe71c7e7854 20 uint8_t* DataRecorder::getDistanceBlock(){
DVLevine 0:ebe71c7e7854 21 return blockDistance;
DVLevine 0:ebe71c7e7854 22 }
DVLevine 0:ebe71c7e7854 23
DVLevine 0:ebe71c7e7854 24 int DataRecorder::getDistanceDataLength(){
DVLevine 0:ebe71c7e7854 25 return blockDistance_Index;
DVLevine 0:ebe71c7e7854 26 };
DVLevine 0:ebe71c7e7854 27
DVLevine 0:ebe71c7e7854 28
DVLevine 0:ebe71c7e7854 29 //writes input value to buffer
DVLevine 0:ebe71c7e7854 30 void DataRecorder::LogDistancePoint(uint16_t value){
DVLevine 0:ebe71c7e7854 31 buf_distance.push(value);
DVLevine 0:ebe71c7e7854 32 savePoint(value);
DVLevine 0:ebe71c7e7854 33 }
DVLevine 0:ebe71c7e7854 34
DVLevine 0:ebe71c7e7854 35 void DataRecorder::savePoint(uint16_t value){
DVLevine 0:ebe71c7e7854 36 string yo = SSTR(value);
DVLevine 0:ebe71c7e7854 37 int n = yo.length();
DVLevine 0:ebe71c7e7854 38 // declaring character array
DVLevine 0:ebe71c7e7854 39 char char_array[n+1];
DVLevine 0:ebe71c7e7854 40
DVLevine 0:ebe71c7e7854 41 // copying the contents of the
DVLevine 0:ebe71c7e7854 42 // string to char array
DVLevine 0:ebe71c7e7854 43 strcpy(char_array, yo.c_str());
DVLevine 0:ebe71c7e7854 44
DVLevine 0:ebe71c7e7854 45
DVLevine 0:ebe71c7e7854 46 int counter = 0;
DVLevine 0:ebe71c7e7854 47
DVLevine 0:ebe71c7e7854 48 for (int i=blockDistance_Index; i<blockDistance_Index+n; i++){
DVLevine 0:ebe71c7e7854 49 blockDistance[i] = char_array[counter];
DVLevine 0:ebe71c7e7854 50 //printf("%i\n",i);
DVLevine 0:ebe71c7e7854 51 //printf("%c\n",blockDistance[i]);
DVLevine 0:ebe71c7e7854 52 counter++;
DVLevine 0:ebe71c7e7854 53 }
DVLevine 0:ebe71c7e7854 54
DVLevine 0:ebe71c7e7854 55 blockDistance_Index = blockDistance_Index+n;
DVLevine 0:ebe71c7e7854 56
DVLevine 0:ebe71c7e7854 57 //add separator
DVLevine 0:ebe71c7e7854 58 blockDistance[blockDistance_Index] = ' ';
DVLevine 0:ebe71c7e7854 59 blockDistance_Index++;
DVLevine 0:ebe71c7e7854 60
DVLevine 0:ebe71c7e7854 61 //buf.push(char_array[i]);
DVLevine 0:ebe71c7e7854 62 //buf_distance
DVLevine 0:ebe71c7e7854 63 }
DVLevine 0:ebe71c7e7854 64
DVLevine 0:ebe71c7e7854 65
DVLevine 0:ebe71c7e7854 66 //saves buffer to sd card and clears it
DVLevine 0:ebe71c7e7854 67 int WriteDataAndClearBuffer();
DVLevine 0:ebe71c7e7854 68
DVLevine 0:ebe71c7e7854 69
DVLevine 0:ebe71c7e7854 70
DVLevine 0:ebe71c7e7854 71
DVLevine 0:ebe71c7e7854 72
DVLevine 0:ebe71c7e7854 73 /*
DVLevine 0:ebe71c7e7854 74
DVLevine 0:ebe71c7e7854 75 uint32_t bytes_written = 0;
DVLevine 0:ebe71c7e7854 76
DVLevine 0:ebe71c7e7854 77 while (!buf.full()) {
DVLevine 0:ebe71c7e7854 78 buf.push(data_stream[bytes_written++]);
DVLevine 0:ebe71c7e7854 79 }
DVLevine 0:ebe71c7e7854 80
DVLevine 0:ebe71c7e7854 81 printf("Circular buffer is full: \"%s\" or empty: \"%s\" \n",
DVLevine 0:ebe71c7e7854 82 (buf.full()? "true":"false"),
DVLevine 0:ebe71c7e7854 83 (buf.empty()? "true":"false") );
DVLevine 0:ebe71c7e7854 84 printf ("Bytes written %d \n", bytes_written);
DVLevine 0:ebe71c7e7854 85
DVLevine 0:ebe71c7e7854 86 // If buffer is full, contents will be over-written
DVLevine 0:ebe71c7e7854 87 buf.push(data_stream[bytes_written++]);
DVLevine 0:ebe71c7e7854 88
DVLevine 0:ebe71c7e7854 89 char data;
DVLevine 0:ebe71c7e7854 90 printf ("Buffer contents: ");
DVLevine 0:ebe71c7e7854 91 while (!buf.empty()) {
DVLevine 0:ebe71c7e7854 92 buf.pop(data);
DVLevine 0:ebe71c7e7854 93 printf("%c", data);
DVLevine 0:ebe71c7e7854 94 }
DVLevine 0:ebe71c7e7854 95 printf("\n");
DVLevine 0:ebe71c7e7854 96
DVLevine 0:ebe71c7e7854 97 printf("Circular buffer is full: \"%s\" or empty: \"%s\" \n",
DVLevine 0:ebe71c7e7854 98 (buf.full()? "true":"false"),
DVLevine 0:ebe71c7e7854 99 (buf.empty()? "true":"false") );
DVLevine 0:ebe71c7e7854 100
DVLevine 0:ebe71c7e7854 101 return 0;
DVLevine 0:ebe71c7e7854 102
DVLevine 0:ebe71c7e7854 103 */