![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Proj 324 Final
Fork of ELEC351_Group_T by
SERIAL_COMMANDS.cpp
- Committer:
- thomasmorris
- Date:
- 2018-01-08
- Revision:
- 47:6d128e500875
- Child:
- 48:244d6d81bb52
File content as of revision 47:6d128e500875:
#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"); } }