Updated

Dependents:   PROJECTTEST

Committer:
Swabey89
Date:
Sat Jan 05 15:02:40 2019 +0000
Revision:
0:1b17fef4fd93
Updated

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Swabey89 0:1b17fef4fd93 1 #include "SDCard.hpp"
Swabey89 0:1b17fef4fd93 2
Swabey89 0:1b17fef4fd93 3 char fileDir[30];
Swabey89 0:1b17fef4fd93 4
Swabey89 0:1b17fef4fd93 5 void SDcard(void)
Swabey89 0:1b17fef4fd93 6 {
Swabey89 0:1b17fef4fd93 7 SD_tout.attach(SD_toutISR,TOUT_TIME_DEF);
Swabey89 0:1b17fef4fd93 8
Swabey89 0:1b17fef4fd93 9 //Initialise the SD card
Swabey89 0:1b17fef4fd93 10 if (sd.init() != 0) {
Swabey89 0:1b17fef4fd93 11
Swabey89 0:1b17fef4fd93 12 printQueue.call(puts,"WARNING:SD CARD INITIALISATION FAILED\r");
Swabey89 0:1b17fef4fd93 13 sd_init = false;
Swabey89 0:1b17fef4fd93 14 }
Swabey89 0:1b17fef4fd93 15 else
Swabey89 0:1b17fef4fd93 16 {
Swabey89 0:1b17fef4fd93 17 //Create a filing system for SD Card
Swabey89 0:1b17fef4fd93 18 fs = new FATFileSystem("sd", &sd);
Swabey89 0:1b17fef4fd93 19
Swabey89 0:1b17fef4fd93 20 printQueue.call(puts,"SD CARD INITIALISED\r\n");
Swabey89 0:1b17fef4fd93 21
Swabey89 0:1b17fef4fd93 22 //Open to WRITE
Swabey89 0:1b17fef4fd93 23 timeLock.lock();
Swabey89 0:1b17fef4fd93 24 seconds = time(NULL);
Swabey89 0:1b17fef4fd93 25 timeData = localtime(&seconds);
Swabey89 0:1b17fef4fd93 26 strftime(fileDir, 30, "sd/log_%d_%m_%y.csv", timeData);
Swabey89 0:1b17fef4fd93 27 timeLock.unlock();
Swabey89 0:1b17fef4fd93 28 fp = fopen(fileDir,"a");
Swabey89 0:1b17fef4fd93 29
Swabey89 0:1b17fef4fd93 30 if (fp == NULL)
Swabey89 0:1b17fef4fd93 31 {
Swabey89 0:1b17fef4fd93 32 printQueue.call(puts,"WARNING: COULD NOT OPEN FILE FOR WRITE\r\n");
Swabey89 0:1b17fef4fd93 33 }
Swabey89 0:1b17fef4fd93 34 else
Swabey89 0:1b17fef4fd93 35 {
Swabey89 0:1b17fef4fd93 36 printQueue.call(puts,"FILE OPEN FOR WRITING\r\n");
Swabey89 0:1b17fef4fd93 37 sd_init = true;
Swabey89 0:1b17fef4fd93 38 }
Swabey89 0:1b17fef4fd93 39 fclose(fp);
Swabey89 0:1b17fef4fd93 40 }
Swabey89 0:1b17fef4fd93 41 SD_tout.detach();
Swabey89 0:1b17fef4fd93 42 }
Swabey89 0:1b17fef4fd93 43
Swabey89 0:1b17fef4fd93 44 void SDread(int n)
Swabey89 0:1b17fef4fd93 45 {
Swabey89 0:1b17fef4fd93 46 bufferLock.lock();
Swabey89 0:1b17fef4fd93 47 SD_tout.attach(SD_toutISR,TOUT_TIME_SDREAD);
Swabey89 0:1b17fef4fd93 48
Swabey89 0:1b17fef4fd93 49 //Read n samples from the SD card
Swabey89 0:1b17fef4fd93 50 unsigned int i=0;
Swabey89 0:1b17fef4fd93 51 unsigned int j = newestIndex;
Swabey89 0:1b17fef4fd93 52 if (n==-1) {n = (BUFFERSIZE-Nspaces);}
Swabey89 0:1b17fef4fd93 53
Swabey89 0:1b17fef4fd93 54 while (i < n)
Swabey89 0:1b17fef4fd93 55 {
Swabey89 0:1b17fef4fd93 56 printQueue.call(printf,"Date/Time: %s\tTemperature: %5.2f\tPressure: %5.2f\tLight: %5.2f\n\r", buffer[j].getTime(), buffer[j].gettemp(), buffer[j].getpress(), buffer[j].getlight());
Swabey89 0:1b17fef4fd93 57 j = (j?j:BUFFERSIZE)-1;
Swabey89 0:1b17fef4fd93 58 i++;
Swabey89 0:1b17fef4fd93 59 }
Swabey89 0:1b17fef4fd93 60 bufferLock.unlock();
Swabey89 0:1b17fef4fd93 61 printQueue.call(printf,"%d records read\r\n\n", i);
Swabey89 0:1b17fef4fd93 62 SD_tout.detach();
Swabey89 0:1b17fef4fd93 63 }
Swabey89 0:1b17fef4fd93 64
Swabey89 0:1b17fef4fd93 65 void SDdelete(int n)
Swabey89 0:1b17fef4fd93 66 {
Swabey89 0:1b17fef4fd93 67 bufferLock.lock();
Swabey89 0:1b17fef4fd93 68 SD_tout.attach(SD_toutISR,TOUT_TIME_DEF);
Swabey89 0:1b17fef4fd93 69
Swabey89 0:1b17fef4fd93 70 //Delete n samples from the SD card
Swabey89 0:1b17fef4fd93 71 unsigned int i = 0;
Swabey89 0:1b17fef4fd93 72 if (n==-1) {n = (BUFFERSIZE-Nspaces);}
Swabey89 0:1b17fef4fd93 73 while (i < n)
Swabey89 0:1b17fef4fd93 74 {
Swabey89 0:1b17fef4fd93 75 spaceAvailable.release();
Swabey89 0:1b17fef4fd93 76 i++;
Swabey89 0:1b17fef4fd93 77 }
Swabey89 0:1b17fef4fd93 78 bufferLock.unlock();
Swabey89 0:1b17fef4fd93 79 Nspaces += i;
Swabey89 0:1b17fef4fd93 80
Swabey89 0:1b17fef4fd93 81 printQueue.call(printf,"Deleted %d records\r\n\n\n", i);
Swabey89 0:1b17fef4fd93 82 SD_tout.detach();
Swabey89 0:1b17fef4fd93 83 }
Swabey89 0:1b17fef4fd93 84
Swabey89 0:1b17fef4fd93 85
Swabey89 0:1b17fef4fd93 86 void SDaddSample(string timedata, double temp, double pressure, float light, int buffind)
Swabey89 0:1b17fef4fd93 87 {
Swabey89 0:1b17fef4fd93 88 if(sd_init)
Swabey89 0:1b17fef4fd93 89 {
Swabey89 0:1b17fef4fd93 90 timeLock.lock();
Swabey89 0:1b17fef4fd93 91 seconds = time(NULL);
Swabey89 0:1b17fef4fd93 92 timeData = localtime(&seconds);
Swabey89 0:1b17fef4fd93 93 strftime(fileDir, 20, "sd/log_%d_%m_%y.csv", timeData);
Swabey89 0:1b17fef4fd93 94 timeLock.unlock();
Swabey89 0:1b17fef4fd93 95
Swabey89 0:1b17fef4fd93 96 fp = fopen(fileDir,"a");
Swabey89 0:1b17fef4fd93 97
Swabey89 0:1b17fef4fd93 98 if (fp == NULL)
Swabey89 0:1b17fef4fd93 99 {
Swabey89 0:1b17fef4fd93 100 printQueue.call(puts,"WARNING: FILE COULD NOT BE OPENED\r\n");
Swabey89 0:1b17fef4fd93 101 sd_init = false;
Swabey89 0:1b17fef4fd93 102 samplesInBuffer.release();
Swabey89 0:1b17fef4fd93 103 bufferLock.lock();
Swabey89 0:1b17fef4fd93 104 oldestIndex = (oldestIndex?oldestIndex:BUFFERSIZE)-1; //Doesn't work properly - oldestindex will be increased by the conditional statement in the producer
Swabey89 0:1b17fef4fd93 105 bufferLock.unlock();
Swabey89 0:1b17fef4fd93 106 }
Swabey89 0:1b17fef4fd93 107 else
Swabey89 0:1b17fef4fd93 108 {
Swabey89 0:1b17fef4fd93 109 fprintf(fp,"%s,%5.2f,%5.2f,%5.2f\r", timedata, temp, pressure, light);
Swabey89 0:1b17fef4fd93 110 fclose(fp);
Swabey89 0:1b17fef4fd93 111 }
Swabey89 0:1b17fef4fd93 112
Swabey89 0:1b17fef4fd93 113 if(logging && sd_init)
Swabey89 0:1b17fef4fd93 114 {
Swabey89 0:1b17fef4fd93 115 printQueue.call(printf,"Log file %s updated with sample from position %d in buffer\r\nnewestIndex position %d\r\noldestIndex position %d\r\n\n", fileDir, buffind, newestIndex, oldestIndex);
Swabey89 0:1b17fef4fd93 116 }
Swabey89 0:1b17fef4fd93 117 }
Swabey89 0:1b17fef4fd93 118 else
Swabey89 0:1b17fef4fd93 119 {
Swabey89 0:1b17fef4fd93 120 samplesInBuffer.release();
Swabey89 0:1b17fef4fd93 121 bufferLock.lock();
Swabey89 0:1b17fef4fd93 122 oldestIndex = (oldestIndex?oldestIndex:BUFFERSIZE)-1; //Doesn't work properly - oldestindex will be increased by the conditional statement in the producer
Swabey89 0:1b17fef4fd93 123 bufferLock.unlock();
Swabey89 0:1b17fef4fd93 124 }
Swabey89 0:1b17fef4fd93 125 }
Swabey89 0:1b17fef4fd93 126
Swabey89 0:1b17fef4fd93 127 void SDmount(void)
Swabey89 0:1b17fef4fd93 128 {
Swabey89 0:1b17fef4fd93 129 SD_tout.attach(SD_toutISR,TOUT_TIME_DEF);
Swabey89 0:1b17fef4fd93 130
Swabey89 0:1b17fef4fd93 131 if (sd_init)
Swabey89 0:1b17fef4fd93 132 {
Swabey89 0:1b17fef4fd93 133 fclose(fp);
Swabey89 0:1b17fef4fd93 134 sd.deinit();
Swabey89 0:1b17fef4fd93 135 sd_init = false;
Swabey89 0:1b17fef4fd93 136
Swabey89 0:1b17fef4fd93 137 printQueue.call(puts,"SD CARD UNMOUNTED\r\n");
Swabey89 0:1b17fef4fd93 138
Swabey89 0:1b17fef4fd93 139 LCDqueue.call(LCD_sdcardmount,"SD UNMOUNTED..", 0.05, greenLED);
Swabey89 0:1b17fef4fd93 140
Swabey89 0:1b17fef4fd93 141
Swabey89 0:1b17fef4fd93 142 }
Swabey89 0:1b17fef4fd93 143 else
Swabey89 0:1b17fef4fd93 144 {
Swabey89 0:1b17fef4fd93 145 SDcard();
Swabey89 0:1b17fef4fd93 146
Swabey89 0:1b17fef4fd93 147 if (sd_init)
Swabey89 0:1b17fef4fd93 148 {
Swabey89 0:1b17fef4fd93 149 LCDqueue.call(LCD_sdcardmount,"SD MOUNTED..", 0.05, greenLED);
Swabey89 0:1b17fef4fd93 150 }
Swabey89 0:1b17fef4fd93 151 else
Swabey89 0:1b17fef4fd93 152 {
Swabey89 0:1b17fef4fd93 153 LCDqueue.call(LCD_sdcardmount,"SD FAILED..", 0.05, redLED); //pass in LED to flash RED
Swabey89 0:1b17fef4fd93 154 }
Swabey89 0:1b17fef4fd93 155
Swabey89 0:1b17fef4fd93 156 }
Swabey89 0:1b17fef4fd93 157 SD_tout.detach();
Swabey89 0:1b17fef4fd93 158 }
Swabey89 0:1b17fef4fd93 159
Swabey89 0:1b17fef4fd93 160 void SD_toutISR(void)
Swabey89 0:1b17fef4fd93 161 {
Swabey89 0:1b17fef4fd93 162 threadstates |= SD;
Swabey89 0:1b17fef4fd93 163 }
Swabey89 0:1b17fef4fd93 164