SD card functionality

Dependents:   ELEC350_Project2 SDcard

Revision:
12:3198f0b7b36f
Parent:
11:89960c1f2234
Child:
13:5f786448e883
--- a/SDCard.cpp	Fri Dec 21 09:58:51 2018 +0000
+++ b/SDCard.cpp	Sat Dec 22 21:14:56 2018 +0000
@@ -55,82 +55,40 @@
 
 void SDread(int n)
 {
-    //Read n samples from the SD card    
+    //Read n samples from the SD card   
+    unsigned int i=0;
+    unsigned int j = newestIndex;
+    if (n==-1) {n = (BUFFERSIZE-Nspaces);}
+    
     printlock.lock();
-    if (n == -1)
-    {
-        unsigned int i=newestIndex;
-        unsigned int j = 0;
-        bufferLock.lock();
-        while (i != oldestIndex)
-        {            
-            i = (i ? i : BUFFERSIZE) - 1; //if i is not 0 subtract 1. if it is 0, set to buffersize - 1
-            pc->printf("Date/Time: %s\tTemperature: %5.2f\tPressure: %5.2f\tLight: %5.2f\n\r", buffer[i].getTime(), buffer[i].gettemp(), buffer[i].getpress(), buffer[i].getlight()); 
-            j++;
-        }
-        bufferLock.unlock();
-        
-        printf("%d records read\r\n\n\n", j);
-    }
-    else 
-    {
-        //printf("Received command to read %d\n\r", n);
-        /*
-        Read from newestIndex back by n, until either newestIndex - n or oldestindex
-        */
-        unsigned int i;
-        unsigned int j = newestIndex;
-        bufferLock.lock();
-        for (i = 0; i<n; i++)
-        {
-            if (j == oldestIndex) {break;}
-            j = (j ? j : BUFFERSIZE) - 1;
-            pc->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());           
-        }
-        bufferLock.unlock();
-        
-        printf("%d records read\r\n\n\n", i);
-    }
-    printlock.unlock();
-    
+    bufferLock.lock();           
+    while (i < n) //ONLY USE SPACE AVAILABLE - KEEP IN MIND LAST READ WAS BEFORE IT WAS DECREMENTED
+    {            
+        pc->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()); 
+        j = (j?j:BUFFERSIZE)-1; 
+        i++;
+    }        
+    bufferLock.unlock();
+    printf("%d records read\r\n\n", i);
+    printlock.unlock(); 
 }
 
-void SDdelete(int n)
+void SDdelete(int n)  //MUST RELEASE SPACE AVAILABLE
 {
     //Delete n samples from the SD card
-    printlock.lock();
-    if (n == -1) 
+    unsigned int i = 0;
+    if (n==-1) {n = (BUFFERSIZE-Nspaces);}
+    bufferLock.lock();
+    while (i < n)
     {
-        unsigned int i = newestIndex;
-        unsigned int j = 0;
-        
-        while (i != oldestIndex)
-        {
-            i = (i ? i : BUFFERSIZE) - 1;
-            j++;
-        }
-        
-        oldestIndex = 0;
-        newestIndex = 0;
-        pc->printf("Deleted %d records\r\n\n\n", j);        
+        spaceAvailable.release();
+        i++;
     }
-    else 
-    {
-        //printf("Received command to delete %d\n", n); 
-        //move oldestIndex forwards for the given number or until you hit newestIndex
-        unsigned int i;
-        unsigned int j = oldestIndex;
-        bufferLock.lock();
-        for (i = 0; i<n; i++)
-        {
-            if (j == newestIndex) {break;}
-            j = (j + 1) % BUFFERSIZE;
-        } 
-        oldestIndex = j;
-        bufferLock.unlock();
-        printf("Deleted %d records\r\n\n\n", i);
-    }
-    printlock.unlock();  
+    bufferLock.unlock();
+    Nspaces += i;    
+    printlock.lock();
+    pc->printf("Deleted %d records\r\n\n\n", i);
+    printlock.unlock();
 }