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
Diff: sdCardReader.cpp
- Revision:
- 4:fe6d2823b7cb
- Parent:
- 3:df8fb1b5d868
- Child:
- 5:0a4ff027086c
diff -r df8fb1b5d868 -r fe6d2823b7cb sdCardReader.cpp --- a/sdCardReader.cpp Wed Apr 04 17:15:36 2018 -0400 +++ b/sdCardReader.cpp Thu Apr 05 01:22:57 2018 -0400 @@ -1,19 +1,28 @@ #include "sdCardReader.h" +//helpers +int getSize(int* p){ + return (sizeof(p)/sizeof(*p)); +} + +int getSize(uint16_t* p){ + return (sizeof(p)/sizeof(*p)); +} + //private essential methods // Try to mount the filesystem void SDCardReader::mountFileSystem(){ printf("Mounting the filesystem... "); fflush(stdout); - int err = m_fs->mount(&this); + int err = m_fs->mount(this); printf("%s\n", (err ? "Fail :(" : "OK")); if (err) { // Reformat if we can't mount the filesystem // this should only happen on the first boot printf("No filesystem found, formatting... "); fflush(stdout); - err = m_fs->reformat(&this); + err = m_fs->reformat(this); printf("%s\n", (err ? "Fail :(" : "OK")); if (err) { error("error: %s (%d)\n", strerror(-err), err); @@ -24,7 +33,7 @@ void SDCardReader::unmountFileSystem(){ printf("Unmounting... "); fflush(stdout); - err = m_fs->unmount(); + int err = m_fs->unmount(); printf("%s\n", (err < 0 ? "Fail :(" : "OK")); if (err < 0) { error("error: %s (%d)\n", strerror(-err), err); @@ -33,15 +42,15 @@ FILE* SDCardReader::openFile(string filename){ - printf("Opening \"/fs/%s\"... ",filename); + printf("Opening \"/fs/%s\"... ",filename.c_str()); fflush(stdout); - FILE *f = fopen("/fs/"+filename, "r+"); + FILE *f = fopen(filename.c_str(), "r+"); printf("%s\n", (!f ? "Fail :(" : "OK")); if (!f) { // Create the file if it doesn't exist printf("No file found, creating a new file... "); fflush(stdout); - f = fopen("/fs/"+filename, "w+"); + f = fopen(filename.c_str(), "w+"); printf("%s\n", (!f ? "Fail :(" : "OK")); if (!f) { error("error: %s (%d)\n", strerror(errno), -errno); @@ -54,14 +63,15 @@ FILE *f = fileToUse; printf("%s\n", (!f ? "Fail :(" : "OK")); - printf("\rWriting datapoint %d", data); + printf("\rWriting 16 bit value: %" PRIu16, data); fflush(stdout); + int err = 0; //write and check for error if (endline){ - err = fprintf(f, "%d\n",); + err = fprintf(f,"%" PRIu16 "\n",data); }else{ - err = fprintf(f, "%d",); + err = fprintf(f,"%" PRIu16,data); } if (err < 0) { @@ -74,15 +84,17 @@ void SDCardReader::write_uint32_t(uint32_t data, bool endline, FILE* fileToUse){ FILE *f = fileToUse; printf("%s\n", (!f ? "Fail :(" : "OK")); - - printf("\rWriting datapoint %d", data); + + printf("\rWriting 32 bit value: %" PRIu32, data); + //printf("\rWriting datapoint %d", data); fflush(stdout); + int err = 0; //write and check for error if (endline){ - err = fprintf(f, "%d\n",); + err = fprintf(f,"%" PRIu32 "\n",data); }else{ - err = fprintf(f, "%d ",); + err = fprintf(f,"%" PRIu32,data); } if (err < 0) { @@ -96,6 +108,8 @@ // Close the file which also flushes any cached writes printf("Closing file..."); fflush(stdout); + + int err = 0; err = fclose(fileToClose); printf("%s\n", (err < 0 ? "Fail :(" : "OK")); if (err < 0) { @@ -103,12 +117,11 @@ } } - int SDCardReader::fullWriteProcedure(string filename,int* indexArr, uint32_t* timeArr, uint16_t** allData){ mountFileSystem(); FILE* theFile = openFile(filename); - for (int i = 0; i < indexArr.size; i++){ + for (int i = 0; i<getSize(indexArr); i++){ writeDataPoint(theFile,indexArr[i],timeArr[i], allData[i]); } @@ -130,10 +143,10 @@ write_uint32_t(timestamp, false, theFile); //write data - for (int i = 0; i < data.size-1; i++) { + for (int i = 0; i < getSize(data)-1; i++) { write_uint16_t(data[i], false, theFile); } - write_uint16_t(data[data.size], false, theFile); + write_uint16_t(data[getSize(data)], false, theFile); closeFile(theFile); @@ -146,7 +159,7 @@ int SDCardReader::eraseData(){ printf("Initializing the block device... "); fflush(stdout); - int err = this.init(); + int err = this->init(); printf("%s\n", (err ? "Fail :(" : "OK")); if (err) { error("error: %s (%d)\n", strerror(-err), err); @@ -154,7 +167,7 @@ printf("Erasing the block device... "); fflush(stdout); - err = this.erase(0, this.size()); + err = this->erase(0, this->size()); printf("%s\n", (err ? "Fail :(" : "OK")); if (err) { error("error: %s (%d)\n", strerror(-err), err); @@ -162,42 +175,12 @@ printf("Deinitializing the block device... "); fflush(stdout); - err = this.deinit(); + err = this->deinit(); printf("%s\n", (err ? "Fail :(" : "OK")); if (err) { error("error: %s (%d)\n", strerror(-err), err); } + + return err; } - - -/** Extras */ -/*int SDCardReader::writeBlock(uint8_t* blockToWrite, int dataLength){ - - if ( 0 != this->init()) { - printf("Init failed \n"); - return -1; - } - - // set the frequency - if ( 0 != this->frequency(5000000)) { - printf("Error setting frequency \n"); - } - - dataLength = 4096; - - printf("%i\n",this->program(blockToWrite, 0, dataLength)); - if (0 == this->program(blockToWrite, 0, dataLength)){ - printf("Block Written!"); - //read back contents of block - if ( 0 == this->read(blockToWrite, 0, dataLength)) { - // print the contents of the block - printf("%s", blockToWrite); - } - } - // call the SDBlockDevice instance de-initialisation method. - this->deinit(); - - return 0; -} - - +