SDFileSystem, slightly modified for the ExoController
Dependents: Data-Management-Honka
Fork of SDFileSystem_HelloWorld by
SDFile.cpp
- Committer:
- mzling
- Date:
- 2015-02-18
- Revision:
- 5:3f554866f226
- Parent:
- 4:99e9c9e0dfb0
- Child:
- 6:0fdda2533593
File content as of revision 5:3f554866f226:
#include "mbed.h" #include "SDFileSystem.h" #include "SDFile.h" #include "errno.h" #include "initDatabed.h" SDFile::SDFile(string path, string filename, bool readOnly) { //Creates the necessary directory //printf("Creating SDFile object\r\n"); char *a = new char[path.size()+1]; a[path.size()] = 0; memcpy(a,path.c_str(),path.size()); //Calculates the full filename, then creates the file std::string fullname = path + filename; char *b = new char[fullname.size()+1]; b[fullname.size()] = 0; memcpy(b,fullname.c_str(),fullname.size()); if (readOnly) { //printf("Opening readonly file\r\n"); //_fp = fopen((const char*)b, "r"); } else { //printf("Opening writable file\r\n"); _fp = fopen((const char*)b, "w+"); } //printf("fp is %d\r\n", _fp); } /** * This function reads bytes from the SDFile object. * @author Michael Ling * @param length The number of bytes to read * @param array The int array the bytes are copied to * @date 2/2/2015 */ int* SDFile::read(int length, int *array) { //shift to the end of the file and go back accounting for the commas, spaces, \n, and \r (6 places per data) fseek(_fp, -6*length, SEEK_END); //cycle through the length of the vector and read the values. for(int i = 0; i < length; i++) { fscanf(_fp, "%x, ", &array[i]); } return array; } int* SDFile::read_from_start(int length, int *array) { fseek(_fp, 0, SEEK_SET); for(int i = 0; i < length; i++) { fscanf(_fp, "%x, ", &array[i]); } return array; } /** * This function writes from an array to the file pointed to by fp * @param length length of data to write * @param array array to draw written data from * @author Michael Ling * @date 2/2/2015 */ void SDFile::write(int length, int *array) { //printf("Seeking START...\r\n"); fseek(_fp, 0, SEEK_SET); //printf("Starting to write\r\n"); for(int i = 0; i < length-1; i++) { /* This line fails when run on testFile, reason unknown...*/ //printf("%d\r\n", fprintf(_fp, "%04x, ", array[i])); fprintf(_fp, "%04x, ", array[i]); } // printf("%d\r\n", fprintf(_fp, "%04x\r\n", array[length-1])); fprintf(_fp, "%04x\r\n", array[length-1]); } void SDFile::append(int length, int *array) { fseek(_fp, 0, SEEK_END); for(int i = 0; i < length-1; i++) { fprintf(_fp, "%04x, ", array[i]); } fprintf(_fp, "%04x\r\n", array[length-1]); } /* void SDFile::changeAccess(string path, string filename) { fclose(_fp); char *a = new char[path.size()+1]; a[path.size()] = 0; memcpy(a,path.c_str(),path.size()); //Calculates the full filename, then creates the file std::string fullname = path + filename; char *b = new char[fullname.size()+1]; b[fullname.size()] = 0; memcpy(b,fullname.c_str(),fullname.size()); printf("Using name %s\r\n", b); _fp = fopen((const char *)b, "r+"); printf("new FP is %d\r\n", _fp); }*/ void SDFile::open_for_read(string path, string filename) { //Creates the necessary directory //printf("Trying to open for read\r\n"); char *a = new char[path.size()+1]; a[path.size()] = 0; memcpy(a,path.c_str(),path.size()); //Calculates the full filename, then creates the file std::string fullname = path + filename; char *b = new char[fullname.size()+1]; b[fullname.size()] = 0; memcpy(b,fullname.c_str(),fullname.size()); _fp = fopen((const char*)b, "r"); //printf("fp is %d\r\n", _fp); } void SDFile::open_for_write(string path, string filename) { //Creates the necessary directory char *a = new char[path.size()+1]; a[path.size()] = 0; memcpy(a,path.c_str(),path.size()); //Calculates the full filename, then creates the file std::string fullname = path + filename; char *b = new char[fullname.size()+1]; b[fullname.size()] = 0; memcpy(b,fullname.c_str(),fullname.size()); _fp = fopen((const char*)b, "w+"); //printf("fp is %d\r\n", _fp); } void SDFile::close() { fclose(_fp); }