Ben Gordon
/
ELEC351_GroupA_alternate
temp
Diff: SDReader.cpp
- Revision:
- 0:2a4af0cb6e8d
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SDReader.cpp Thu Dec 06 15:38:09 2018 +0000 @@ -0,0 +1,133 @@ +#include "SDReader.hpp" +#include "Button.hpp" + +// Thread for saving DATA to the SD card +void SDThread(void) +{ + // Create object SD of the SDReader class with set SPI pins + SDReader SD(PB_5, D12, D13, D10); // mosi, miso, sclk, cs + + // Create switch to dismount the SD card + BUTTON onBoardSwitch(USER_BUTTON); + + // Create variable to store state of SD card + enum State {MOUNTED, UNMOUNTED, MOUNTING, UNMOUNTING}; + State Mounted = MOUNTING; + + while(1) + { + // FSM for each state of SD card + switch(Mounted) + { + case UNMOUNTED : + wait_ms(100); + if(onBoardSwitch.poll() == 1) + { + Mounted = MOUNTING; + } + break; + + case MOUNTED : + //SD.UPLOAD(1.404f,0.303f,0.124f); + wait_ms(100); + if(onBoardSwitch.poll() == 1) + { + Mounted = UNMOUNTING; + } + break; + + case UNMOUNTING : + SD.unmount(); + Terminal_THREAD.signal_set(Signal_UnMount); + Mounted = UNMOUNTED; + break; + + case MOUNTING : + if(SD.INIT() == 0){ + Mounted = UNMOUNTED; + Terminal_THREAD.signal_set(Signal_UnMount); + } else { + Mounted = MOUNTED; + } + break; + } + } +} + +BYTE SDReader::INIT(void) +{ + BYTE Mount; + + // call the SDBlockDevice instance initialisation method. + if(sd.init() != 0){ + Mount = 0; + } else { + Mount = 1; + } + + if(Mount == 0){ + return Mount; + } else { + //Remove existing file + remove( "/sd/ELEC351.csv" ); + + FILE* fp = fopen("/sd/ELEC351.csv","a+"); + //Check file handle (stream) + if (fp == NULL) { + return Mount; + } + + //Put some text in the file... + fprintf(fp, " TIME STAMP, light, temperature, pressure\n"); + + //Close the file + fclose(fp); + + return Mount; + } +} + +void SDReader::UPLOAD(FLOAT_32 LIGHT, FLOAT_32 TEMP, FLOAT_32 PRESS) +{ + FILE* fp = fopen("/sd/ELEC351.csv","a+"); + //Check file handle (stream) + if (fp == NULL) { + return; + } + + //Put some text in the file... + fprintf(fp, " TIME STAMP, %1.4f, %1.4f, %1.4f\n", LIGHT, TEMP, PRESS); + + //Close the file + fclose(fp); +} + +BYTE* SDReader::DOWNLOAD(void) +{ + FILE* fp = fopen("/sd/ELEC351.csv","r"); + if (fp == NULL) { + + } + + //Read back all strings + BYTE* s1 = new BYTE; + + //while (fscanf(fp, "%s", s1) == 1) + //{ + // + //} + + fgets(s1, sizeof(s1), fp); + + //Close File + fclose(fp); + + return s1; +} + +void SDReader::unmount(void) +{ + sd.deinit(); + return; +} +