Proj 324 Final

Fork of ELEC351_Group_T by Plymouth ELEC351 Group T

Revision:
40:d04aec00504f
Parent:
39:5c499989d2b9
diff -r 5c499989d2b9 -r d04aec00504f main.cpp
--- a/main.cpp	Sun Jan 07 23:01:38 2018 +0000
+++ b/main.cpp	Mon Jan 08 00:21:35 2018 +0000
@@ -49,7 +49,6 @@
 }
 void Delete_Data(int Delete_Pointer)
 {
-    Thread::signal_wait(Do_Delete_Data);
     Data_Buffer_Lock.lock();
     Data_Buffer[Delete_Pointer].set_all_zero();
     Data_Buffer_Lock.unlock();
@@ -440,31 +439,43 @@
                 if(x_Read_All < 0){x_Read_All = x_Read_All + mailsize;}
                 else              {x_Read_All = x_Read_All;}
                 
-                DATA Serial_Read_Data = Read_Data(x_Read_All);
+                DATA Serial_Read_All_Data = Read_Data(x_Read_All);
                 
-                time_t Time = Serial_Read_Data.get_time();
+                time_t Time = Serial_Read_All_Data.get_time();
                 tm* Time_Pointer = localtime(&Time);
                
                 strftime(scom_time_buffer, 32, "%I:%M %p\t", Time_Pointer);                         //Format time as a string
                 pc.printf("Date = %d %d %d\t", Time_Pointer->tm_mday, (Time_Pointer->tm_mon+1),(Time_Pointer->tm_year+1900));
                 pc.printf("Time = %s", scom_time_buffer);                                           //Print the string formatted time
-                pc.printf("Temperature = %f\t", Serial_Read_Data.get_temperature());                     //Print Temperature
-                pc.printf("Pressure = %f\t", Serial_Read_Data.get_pressure());                           //Print Pressure
-                pc.printf("Light = %f\n\r", Serial_Read_Data.get_light());                               //Print Light
+                pc.printf("Temperature = %f\t", Serial_Read_All_Data.get_temperature());                     //Print Temperature
+                pc.printf("Pressure = %f\t", Serial_Read_All_Data.get_pressure());                           //Print Pressure
+                pc.printf("Light = %f\n\r", Serial_Read_All_Data.get_light());                               //Print Light
 
                 if(x_Read_All == mailsize - 1){x_Read_All = 0;}
                 else                          {x_Read_All = x_Read_All + 1;}
             }
         }
         
-        //DELETE ALL FIX THIS
-        else if(input[0] == 'D' & input[1] == 'E' & input[2] == 'L' & input[3] == 'E' & input[4] == 'T' & input[5] == 'E' & input[6] == ' ' & input[7] == 'A' & input[8] == 'L' & input[9] == 'L' & input[10] == ' ')
+        //DELETE - Might have to disable sampling during this
+        else if(input[0] == 'D' & input[1] == 'E' & input[2] == 'L' & input[3] == 'E' & input[4] == 'T' & input[5] == 'E' & input[6] == ' ' & input[7] == 'A' & input[8] == 'L' & input[9] == 'L')
         {   
-            Sampling_Timer.detach();
-            Console_Output_Timer.detach();
-            Sampling_Timer.attach(&Sampling_ISR,Sample_Rate);
-            cout << "Sampling Restarted" << endl;
             if(Log_Value == 1){cout<<"DELETE ALL Confirmed"<<endl;}
+            
+            Data_Buffer_Lock.lock();
+            int Start_Address = Write_Pointer;
+            Data_Buffer_Lock.unlock();
+             
+            for(int x_Delete_All = (Start_Address - mailsize); x_Delete_All != Start_Address; x_Delete_All = x_Delete_All)
+            {
+                if(x_Delete_All < 0){x_Delete_All = x_Delete_All + mailsize;}
+                else                {x_Delete_All = x_Delete_All;}
+                
+                Delete_Data(x_Delete_All);   
+                
+                if(x_Delete_All == mailsize - 1){x_Delete_All = 0;}
+                else                            {x_Delete_All = x_Delete_All + 1;}
+
+            }
         }
         
         //READ look into this
@@ -472,23 +483,22 @@
         {
             int NumberOfChars = 0; int ArrayAddress = 0; string ReadNumber; int NumberToRead;
             while(input[ArrayAddress] != '\0'){NumberOfChars++; ArrayAddress++;}
-            for(int x=5; x < NumberOfChars; x++){ReadNumber += input[x];}
+            for(int x_Read=5; x_Read < NumberOfChars; x_Read++){ReadNumber += input[x_Read];}
             stringstream Number(ReadNumber);
             Number >> NumberToRead;
             
-            
             if(Log_Value == 1){cout<<"Getting Data"<<endl;}
             
             Data_Buffer_Lock.lock();
             int Start_Address = Write_Pointer;
             Data_Buffer_Lock.unlock();
              
-            for(int x = (Start_Address - NumberToRead); x != Start_Address; x = x )
+            for(int x_Read = (Start_Address - NumberToRead); x_Read != Start_Address; x_Read = x_Read )
             {
-                if(x < 0){x = x + mailsize;}
-                else     {x = x;}
+                if(x_Read < 0)  {x_Read = x_Read + mailsize;}
+                else            {x_Read = x_Read;}
                 
-                DATA Serial_Read_Data = Read_Data(x);
+                DATA Serial_Read_Data = Read_Data(x_Read);
                 
                 time_t Time = Serial_Read_Data.get_time();
                 tm* Time_Pointer = localtime(&Time);
@@ -500,8 +510,8 @@
                 pc.printf("Pressure = %f\t", Serial_Read_Data.get_pressure());                           //Print Pressure
                 pc.printf("Light = %f\n\r", Serial_Read_Data.get_light());                               //Print Light
     
-                if(x == mailsize - 1){x = 0;}
-                else                 {x = x + 1;}
+                if(x_Read == mailsize - 1)  {x_Read = 0;}
+                else                        {x_Read = x_Read + 1;}
     
                 Green_led.Toggle();
             }
@@ -510,13 +520,9 @@
             
         } 
         
-        //DELETE look into this
+        //DELETE - Might have to disable sampling during this
         else if(input[0] == 'D' & input[1] == 'E' & input[2] == 'L' & input[3] == 'E' & input[4] == 'T' & input[5] == 'E' & input[6] == ' ')
         {
-            Sampling_Timer.detach();
-            Console_Output_Timer.detach();
-            
-            
             int NumberOfChars = 0; int ArrayAddress = 0; string DeleteNumber; int NumberToDelete;
             while(input[ArrayAddress] != '\0'){NumberOfChars++; ArrayAddress++;}
             for(int x=7; x < NumberOfChars; x++){DeleteNumber += input[x];}
@@ -525,8 +531,24 @@
             
             if(Log_Value == 1){cout << "Deleted " << NumberToDelete << " samples" << endl;}
             
-            Sampling_Timer.attach(&Sampling_ISR,Sample_Rate);
-            cout << "Sampling Restarted" << endl;
+            Data_Buffer_Lock.lock();
+            int Start_Address = Write_Pointer;
+            Data_Buffer_Lock.unlock();
+             
+            for(int x_Delete = (Start_Address - NumberToDelete); x_Delete != Start_Address; x_Delete = x_Delete )
+            {
+                if(x_Delete < 0){x_Delete = x_Delete + mailsize;}
+                else            {x_Delete = x_Delete;}
+                
+                Delete_Data(x_Delete);   
+                
+                if(x_Delete == mailsize - 1){x_Delete = 0;}
+                else                        {x_Delete = x_Delete + 1;}
+
+            }
+            //Serial_Comms_Data_Get();
+            if(Log_Value == 1){cout << "Deleted " << NumberToDelete << " samples" << endl;}
+            
         }
         
         //STATE
@@ -538,7 +560,7 @@
             stringstream Number(StateNumber);
             Number >> NumberToState;
             
-            if(NumberToState==0){Sampling_Timer.detach(); Console_Output_Timer.detach();}
+            if(NumberToState==0){Sampling_Timer.detach();}
             if(NumberToState==1){Sampling_Timer.attach(&Sampling_ISR,Sample_Rate);}  
         } 
         
@@ -596,10 +618,9 @@
             stringstream Number(SettNumber);
             Number >> NumberToSett;
                
-            if(NumberToSett >= 1){Sample_Rate = NumberToSett;}
+            if(NumberToSett >= 0.1){Sample_Rate = NumberToSett;}
              
             Sampling_Timer.detach();
-            Console_Output_Timer.detach();
             Sampling_Timer.attach(&Sampling_ISR,Sample_Rate);
         }
         
@@ -623,11 +644,6 @@
             HELP();
         }
         
-        //STOP
-        else if(input[0] == 'S' & input[1] == 'T' & input[2] == 'O' & input[3] == 'P')
-        {
-            Console_Output_Timer.detach(); //Stops Sampling   
-        }
         else 
         {
             cout << "Please enter an acceptable command" << endl;