Plymouth ELEC351 Group T
/
ELEC351_Group_T
FINAL PROJECT isn't it
Fork of ELEC351 by
Diff: SERIAL_COMMANDS.cpp
- Revision:
- 47:6d128e500875
- Child:
- 48:244d6d81bb52
diff -r bd9e7e40b3f9 -r 6d128e500875 SERIAL_COMMANDS.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SERIAL_COMMANDS.cpp Mon Jan 08 21:53:40 2018 +0000 @@ -0,0 +1,284 @@ +#include "SERIAL_COMMANDS.hpp" + +extern char input[100] = {}; + +Ticker Console_Output_Timer; +Ticker Sampling_Timer;//Controls Sampling + +void Serial_Commands_Output()//Used for getting input from the user to determine the opperations to perform +{ + + if(Log_Value == 1){pc.printf("In Serial_Commands\n");} + for (int x = 0; x < 100; x++){input[x] = ' ';}; + + pc.printf("Please type in a command\n");//Log this + + cin.getline(input,sizeof(input),'\r'); + + //READ ALL + if(input[0] == 'R' & input[1] == 'E' & input[2] == 'A' & input[3] == 'D' & input[4] == ' ' & input[5] == 'A' & input[6] == 'L' & input[7] == 'L') + { + if(Log_Value == 1){pc.printf("READ ALL Confirmed\n");} + + Data_Buffer_Lock.lock();//Lock data buffer due to critical section + int Start_Address_Read_All = Write_Pointer; + Data_Buffer_Lock.unlock();//unLock data buffer due to critical section + + for(int x_Read_All = (Start_Address_Read_All - mailsize); x_Read_All != Start_Address_Read_All; x_Read_All = x_Read_All ) + { + 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); + + time_t Time = Serial_Read_Data.get_time(); + tm* Time_Pointer = localtime(&Time); + + pc.printf("Date = %02d %02d %d ,\t", Time_Pointer->tm_mday, (Time_Pointer->tm_mon+1),(Time_Pointer->tm_year+1900)); + pc.printf("Time = %02d:%02d:%02d ,\t", Time_Pointer->tm_hour, Time_Pointer->tm_min, Time_Pointer->tm_sec); //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", Serial_Read_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 - Might need to disable sampling during the delete + 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') + { + if(Log_Value == 1){pc.printf("DELETE ALL Confirmed\n");} + + 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;} + + } + pc.printf("DELETED %d RECORDS\n",mailsize); + } + + //READ + else if(input[0] == 'R' & input[1] == 'E' & input[2] == 'A' & input[3] == 'D' & input[4] == ' ') + { + 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];} + stringstream Number(ReadNumber); + Number >> NumberToRead; + + if(NumberToRead > mailsize) + { + NumberToRead = mailsize; + } + + if(Log_Value == 1){pc.printf("Getting Data\n");} + + Data_Buffer_Lock.lock();//Lock data buffer due to critical section + int Start_Address = Write_Pointer; + Data_Buffer_Lock.unlock();//unLock data buffer due to critical section + + for(int x = (Start_Address - NumberToRead); x != Start_Address; x = x ) + { + if(x < 0){x = x + mailsize;} + else {x = x;} + + DATA Serial_Read_Data = Read_Data(x); + + time_t Time = Serial_Read_Data.get_time(); + tm* Time_Pointer = localtime(&Time); + + pc.printf("Date = %02d %02d %d ,\t", Time_Pointer->tm_mday, (Time_Pointer->tm_mon+1),(Time_Pointer->tm_year+1900)); + pc.printf("Time = %02d:%02d:%02d ,\t", Time_Pointer->tm_hour, Time_Pointer->tm_min, Time_Pointer->tm_sec); //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", Serial_Read_Data.get_light()); //Print Light + + if(x == mailsize - 1){x = 0;} + else {x = x + 1;} + } + if(Log_Value == 1){pc.printf("Read %d samples\n",NumberToRead);} + + } + + //DELETE look into this mgiht need to turn off sampling + else if(input[0] == 'D' & input[1] == 'E' & input[2] == 'L' & input[3] == 'E' & input[4] == 'T' & input[5] == 'E' & input[6] == ' ') + { + 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];} + stringstream Number(DeleteNumber); + Number >> NumberToDelete; + + if(NumberToDelete > mailsize) + { + NumberToDelete = mailsize; + } + if(Log_Value == 1){pc.printf("Deleted %d samples\n",NumberToDelete);} + + 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;} + + } + pc.printf("DELETED %d RECORDS\n",NumberToDelete); + if(Log_Value == 1){pc.printf("Deleted %d samples\n",NumberToDelete);} + } + + //STATE + else if(input[0] == 'S' & input[1] == 'T' & input[2] == 'A' & input[3] == 'T' & input[4] == 'E' & input[5] == ' ') + { + int NumberOfChars = 0; int ArrayAddress = 0; string StateNumber; int NumberToState; + while(input[ArrayAddress] != '\0'){NumberOfChars++; ArrayAddress++;} + for(int x=6; x < NumberOfChars; x++){StateNumber += input[x];} + stringstream Number(StateNumber); + Number >> NumberToState; + + if(NumberToState==0) {Sampling_Timer.detach(); Console_Output_Timer.detach(); pc.printf("SAMPLING 0\n");}//Stop Sampling + else if(NumberToState==1) {Sampling_Timer.attach(&Sampling_ISR,Sample_Rate); pc.printf("SAMPLING 1\n");}//Start Sampling + else {pc.printf("Invalid State\n");} + + } + + //SETDATE + else if(input[0] == 'S' & input[1] == 'E' & input[2] == 'T' & input[3] == 'D' & input[4] == 'A' & input[5] == 'T' & input[6] == 'E' & input[7] == ' ' & input[10] == ' ' & input[13] == ' ') + { + //int NumberOfChars = 0; int ArrayAddress = 0; + string DayNumber, MonthNumber, YearNumber; + int NumberToDay, NumberToMonth, NumberToYear; + + for(int x=8; x < 10; x++){DayNumber += input[x];} + stringstream Number_1(DayNumber); + Number_1 >> NumberToDay; + + for(int x=11; x < 13; x++){MonthNumber += input[x];} + stringstream Number_2(MonthNumber); + Number_2 >> NumberToMonth; + + for(int x=14; x < 18; x++){YearNumber += input[x];} + stringstream Number_3(YearNumber); + Number_3 >> NumberToYear; + + set_new_date(NumberToDay,NumberToMonth,NumberToYear); + pc.printf("DATE UPDATED TO %02d %02d %d\n",NumberToDay,NumberToMonth,NumberToYear); + } + + //SETTIME + else if(input[0] == 'S' & input[1] == 'E' & input[2] == 'T' & input[3] == 'T' & input[4] == 'I' & input[5] == 'M' & input[6] == 'E' & input[7] == ' ' & input[10] == ' ' & input[13] == ' ') + { + //int NumberOfChars = 0; int ArrayAddress = 0; + string HourNumber, MinuteNumber, SecondNumber; + int NumberToHour, NumberToMinute, NumberToSecond; + + for(int x=8; x < 10; x++){HourNumber += input[x];} + stringstream Number_1(HourNumber); + Number_1 >> NumberToHour; + + for(int x=11; x < 13; x++){MinuteNumber += input[x];} + stringstream Number_2(MinuteNumber); + Number_2 >> NumberToMinute; + + for(int x=14; x < 16; x++){SecondNumber += input[x];} + stringstream Number_3(SecondNumber); + Number_3 >> NumberToSecond; + + set_new_time(NumberToHour,NumberToMinute,NumberToSecond); + pc.printf("TIME UPDATED TO %02d %02d %02d\n",NumberToHour,NumberToMinute,NumberToSecond); + } + + //SETT + else if(input[0] == 'S' & input[1] == 'E' & input[2] == 'T' & input[3] == 'T' & input[4] == ' ') + { + + int NumberOfChars = 0; int ArrayAddress = 0; + string SettNumber; double NumberToSett; + int Decimal_Divider = 10; + float Sample_Rate_Integer = 0; string Sample_Rate_Integer_String; + float Sample_Rate_Decimal = 0; string Sample_Rate_Decimal_String; + while(input[ArrayAddress] != '\0'){NumberOfChars++; ArrayAddress++;} + + + if (Decimal_Check(input) == true) + { + for(int x = 5; x < Decimal_Position(input); x++){Sample_Rate_Integer_String += input[x];} + stringstream Number_1(Sample_Rate_Integer_String); + Number_1 >> Sample_Rate_Integer; + + for(int x = Decimal_Position(input) + 1; x < NumberOfChars; x++){Sample_Rate_Decimal_String += input[x];} + stringstream Number_2(Sample_Rate_Decimal_String); + Number_2 >> Sample_Rate_Decimal; + + for(int tens_power = 1; tens_power != NumberOfChars - Decimal_Position(input) - 1; tens_power++) + { + Decimal_Divider = Decimal_Divider * 10; + } + NumberToSett = Sample_Rate_Integer + (Sample_Rate_Decimal / float(Decimal_Divider)); + } + else + { + for(int x=5; x < NumberOfChars; x++){SettNumber += input[x];} + stringstream Number_3(SettNumber); + Number_3 >> NumberToSett; + } + + if(NumberToSett >= 0.1 & NumberToSett <= 60) + { + Sample_Rate = NumberToSett; + pc.printf("T UPDATED TO %1.1f \n",NumberToSett); + } + else + { + Sample_Rate = Sample_Rate;//No change + pc.printf("OUT OF RANGE\n"); + } + Sampling_Timer.detach(); + Console_Output_Timer.detach(); + Sampling_Timer.attach(&Sampling_ISR,Sample_Rate); + } + //LOGGING + else if(input[0] == 'L' & input[1] == 'O' & input[2] == 'G' & input[3] == 'G' & input[4] == 'I' & input[5] == 'N' & input[6] == 'G' & input[7] == ' ') + { + int NumberOfChars = 0; int ArrayAddress = 0; string LoggingNumber; int NumberToLogging; + while(input[ArrayAddress] != '\0'){NumberOfChars++; ArrayAddress++;} + for(int x=8; x < NumberOfChars; x++){LoggingNumber += input[x];} + stringstream Number(LoggingNumber); + Number >> NumberToLogging; + if(NumberToLogging != 1) + { + NumberToLogging = 0; + } + Log_Value = NumberToLogging; + pc.printf("LOGGING %d\n",NumberToLogging); + } + + //HELP + else if(input[0] == 'H' & input[1] == 'E' & input[2] == 'L' & input[3] == 'P')// Use this to display all of the availble commands + { + HELP();//Run HELP Command + } + else + { + pc.printf("Please enter an acceptable command\n"); + } + +}