![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Proj 324 Final
Fork of ELEC351_Group_T by
Diff: SERIAL_COMMANDS.cpp
- Revision:
- 52:99915f5240b2
- Parent:
- 48:244d6d81bb52
- Child:
- 53:71f59e195f06
--- a/SERIAL_COMMANDS.cpp Tue Jan 09 15:15:08 2018 +0000 +++ b/SERIAL_COMMANDS.cpp Tue Jan 09 22:27:49 2018 +0000 @@ -1,321 +1,327 @@ #include "SERIAL_COMMANDS.hpp" -int NetworkWaitTime; -char input[100] = {}; - -Ticker Console_Output_Timer; -Ticker Sampling_Timer;//Controls Sampling +int NetworkWaitTime; //Waiting time to update the network +char input[100] = {}; //Character array initialised to NULL +float Sample_Rate = 15.0; //Initial sampling rate -void Serial_Commands_Output()//Used for getting input from the user to determine the opperations to perform +Ticker Sampling_Timer; //Controls Sampling Rate +//Mutex Locks + +Mutex SERIAL_COMMANDS_Lock; +void Serial_Commands_Output() //Used for getting input from the user to determine the opperations to perform { - - if(Log_Value == 4){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'); + if(Log_Value == 4){pc.printf("In Serial_Commands\n");} //If logging is enabled, print debug statement - //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 == 4){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;} - if(Log_Value == 4){pc.printf("Address Reading From: %d\n",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;} - } - } + for (int x = 0; x < 100; x++){input[x] = ' ';}; //Fill input with spaces - //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 == 4){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(Log_Value == 4){pc.printf("Address Deleting From: %d\n",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); - } + pc.printf("Please type in a command\n"); //Request command in the terminal + cin.getline(input,sizeof(input),'\r'); //Scan into input from the start of the line to the return character - //READ - else if(input[0] == 'R' & input[1] == 'E' & input[2] == 'A' & input[3] == 'D' & input[4] == ' ') + //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 == 4){pc.printf("READ ALL Confirmed\n");} //If logging is enabled, print debug statement + + SERIAL_COMMANDS_Lock.lock(); //Apply MUTEX lock + int Start_Address_Read_All = Write_Pointer; //Store Write_Pointer in temporary variable + SERIAL_COMMANDS_Lock.unlock(); //Release MUTEX lock + + for(int x_Read_All = (Start_Address_Read_All - mailsize); x_Read_All != Start_Address_Read_All; x_Read_All = x_Read_All ) //From the oldest sample to the newest sample { - if(Log_Value == 4){pc.printf("READ n Confirmed\n");} - 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(Log_Value == 4){pc.printf("Number of samples to Read %d\n",NumberToRead);} - if(NumberToRead > mailsize) - { - NumberToRead = mailsize; - } - 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(Log_Value == 4){pc.printf("Address Reading From: %d\n",x);} - if(x < 0){x = x + mailsize;} - else {x = x;} + if(x_Read_All < 0){x_Read_All = x_Read_All + mailsize;} //If the address has gone below 0 add mailsize to it + else {x_Read_All = x_Read_All;} //If the adress hasn't gone below 0 keep it the same + if(Log_Value == 4){pc.printf("Address Reading From: %d\n",x_Read_All);} //If logging is enabled, print debug statement + + DATA Serial_Read_Data = Read_Data(x_Read_All); //Read from target address into temporary variable - DATA Serial_Read_Data = Read_Data(x); - - time_t Time = Serial_Read_Data.get_time(); - tm* Time_Pointer = localtime(&Time); + time_t Time = Serial_Read_Data.get_time(); //Assign the sampled time to Time + tm* Time_Pointer = localtime(&Time); //Create pointer to Time + + pc.printf("Date = %02d %02d %d ,\t", Time_Pointer->tm_mday, (Time_Pointer->tm_mon+1),(Time_Pointer->tm_year+1900)); //Print Date String + pc.printf("Time = %02d:%02d:%02d ,\t", Time_Pointer->tm_hour, Time_Pointer->tm_min, Time_Pointer->tm_sec); //Print Time sTRING + 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;} //If read address is mailsize - 1 set the read adress to 0 + else {x_Read_All = x_Read_All + 1;} //If read address is not mailsize increment the read address + } + } - 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 == 4){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] == ' ') + //DELETE ALL + 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(); //Detach the sampling interrupt + if(Log_Value == 4){pc.printf("DELETE ALL Confirmed\n");} //If logging is enabled, print debug statement + + SERIAL_COMMANDS_Lock.lock(); //Apply MUTEX lock + int Start_Address = Write_Pointer; //Store Write_Pointer in a temporary variable + SERIAL_COMMANDS_Lock.unlock(); //Release MUTEX lock + + for(int x_Delete_All = (Start_Address - mailsize); x_Delete_All != Start_Address; x_Delete_All = x_Delete_All) //From the oldest sample to the newest sample { - if(Log_Value == 4){pc.printf("DELETE N Confirmed\n");} - 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 == 4){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(Log_Value == 4){pc.printf("Address Deleting From: %d\n",x_Delete);} - if(x_Delete < 0){x_Delete = x_Delete + mailsize;} - else {x_Delete = x_Delete;} + if(x_Delete_All < 0){x_Delete_All = x_Delete_All + mailsize;} //If the target is less than 0 add mailsize to the target + else {x_Delete_All = x_Delete_All;} //If the target is not less than 0 keep it the same + if(Log_Value == 4){pc.printf("Address Deleting From: %d\n",x_Delete_All);} //If logging is enabled, print debug statement - Delete_Data(x_Delete); + Delete_Data(x_Delete_All); //Delete DATA in the target address - if(x_Delete == mailsize - 1){x_Delete = 0;} - else {x_Delete = x_Delete + 1;} + if(x_Delete_All == mailsize - 1){x_Delete_All = 0;} //If the target is mailsize - 1 then set the new target to 0 + else {x_Delete_All = x_Delete_All + 1;} //If the target is not mailsize - 1 then increment the target - } - pc.printf("DELETED %d RECORDS\n",NumberToDelete); - if(Log_Value == 4){pc.printf("Deleted %d samples\n",NumberToDelete);} } + pc.printf("DELETED %d RECORDS\n",mailsize); //Print number of records which have been deleted + Sampling_Timer.attach(&Sampling_ISR,Sample_Rate); //Reattach the sampling interrupt + } - //STATE - else if(input[0] == 'S' & input[1] == 'T' & input[2] == 'A' & input[3] == 'T' & input[4] == 'E' & input[5] == ' ') - { - if(Log_Value == 4){pc.printf("STATE Confirmed\n");} - 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(Log_Value == 4){pc.printf("STATE Set to %d\n",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] == ' ') - { - if(Log_Value == 4){pc.printf("SETDATE Confirmed\n");} - //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; + //READ + else if(input[0] == 'R' & input[1] == 'E' & input[2] == 'A' & input[3] == 'D' & input[4] == ' ') + { + if(Log_Value == 4){pc.printf("READ n Confirmed\n");} //If logging is enabled, print the debug statement + int NumberOfChars = 0; int ArrayAddress = 0; string ReadNumber; int NumberToRead; //Declare required variables + while(input[ArrayAddress] != '\0'){NumberOfChars++; ArrayAddress++;} //Count the number of characters typed in the console + for(int x=5; x < NumberOfChars; x++){ReadNumber += input[x];} //Concatenate characters from console into a string + stringstream Number(ReadNumber); //Convert string into a stringstream + Number >> NumberToRead; //Convert stringstream into an integer - for(int x=11; x < 13; x++){MonthNumber += input[x];} - stringstream Number_2(MonthNumber); - Number_2 >> NumberToMonth; + if(Log_Value == 4){pc.printf("Number of samples to Read %d\n",NumberToRead);} //If logging is enabled, print the debug statement + + if(NumberToRead > mailsize){NumberToRead = mailsize;} //If more records are chosen than exist in the buffer limit the selection to the buffer size - for(int x=14; x < 18; x++){YearNumber += input[x];} - stringstream Number_3(YearNumber); - Number_3 >> NumberToYear; - if(Log_Value == 4){pc.printf("Year Input %d Month Input %d Day Input %d\n",NumberToYear,NumberToMonth,NumberToDay);} - 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] == ' ') - { - if(Log_Value == 4){pc.printf("SETTIME Confirmed\n");} - //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; - if(Log_Value == 4){pc.printf("Hour Input %d Minute Input %d Seconds Input %d",NumberToHour,NumberToMinute,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] == ' ') + SERIAL_COMMANDS_Lock.lock(); //Apply MUTEX lock + int Start_Address = Write_Pointer; //Copy Write_Pointer into temporary variable + SERIAL_COMMANDS_Lock.unlock(); //Release MUTEX lock + + for(int x = (Start_Address - NumberToRead); x != Start_Address; x = x ) //From newest - input number to newest { - if(Log_Value == 4){pc.printf("SETT Confirmed\n");} - 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; + if(Log_Value == 4){pc.printf("Address Reading From: %d\n",x);} //If logging is enabled, print the debug statement + if(x < 0){x = x + mailsize;} //If target is less than 0 add mailsize + else {x = x;} //If target is not less than 0 keep it the same + + DATA Serial_Read_Data = Read_Data(x); //Read DATA from target + + time_t Time = Serial_Read_Data.get_time(); //Assign sampled time to Time + tm* Time_Pointer = localtime(&Time); //Create a pointer to Time - 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(Log_Value == 4){pc.printf("Sample Rate Input %d\n",NumberToSett);} - if(Log_Value == 4){pc.printf("Decimal Rate Input %d\n",Sample_Rate_Decimal);} - if(Log_Value == 4){pc.printf("Integer Rate Input %d\n",Sample_Rate_Integer);} + pc.printf("Date = %02d %02d %d ,\t", Time_Pointer->tm_mday, (Time_Pointer->tm_mon+1),(Time_Pointer->tm_year+1900)); //Print the Date + pc.printf("Time = %02d:%02d:%02d ,\t", Time_Pointer->tm_hour, Time_Pointer->tm_min, Time_Pointer->tm_sec); //Print the Time + pc.printf("Temperature = %f ,\t", Serial_Read_Data.get_temperature()); //Print the Temperature + pc.printf("Pressure = %f ,\t", Serial_Read_Data.get_pressure()); //Print the Pressure + pc.printf("Light = %f ,\n", Serial_Read_Data.get_light()); //Print the Light + + if(x == mailsize - 1){x = 0;} //If target is mailsize - 1 set the new target to 0 + else {x = x + 1;} //If target is not mailsize - 1 increment the target + } + if(Log_Value == 4){pc.printf("Read %d samples\n",NumberToRead);} //If logging is enabled, print the debug statement + } + + //DELETE + 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(); //Detach sampling interrupt + if(Log_Value == 4){pc.printf("DELETE N Confirmed\n");} //If logging is enabled, print debug statement + int NumberOfChars = 0; int ArrayAddress = 0; string DeleteNumber; int NumberToDelete; //Declare required variables + while(input[ArrayAddress] != '\0'){NumberOfChars++; ArrayAddress++;} //Count the number of characters typed in the console + for(int x=7; x < NumberOfChars; x++){DeleteNumber += input[x];} //Concatenate characters from console into a string + stringstream Number(DeleteNumber); //Convert string into a stringstream + Number >> NumberToDelete; //Convert stringstream into an integer - 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] == ' ') + if(NumberToDelete > mailsize){NumberToDelete = mailsize;} //If more records are chosen than exist in the buffer limit the selection to the buffer size + + if(Log_Value == 4){pc.printf("Deleted %d samples\n",NumberToDelete);} //If logging is enabled, print debug statement + + SERIAL_COMMANDS_Lock.lock(); //Apply MUTEX lock + int Start_Address = Write_Pointer; //Copy Write_Pointer into temporary variable + SERIAL_COMMANDS_Lock.unlock(); //Release MUTEX lock + + for(int x_Delete = (Start_Address - NumberToDelete); x_Delete != Start_Address; x_Delete = x_Delete ) //From newest - input number to newest { - 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 == 0){pc.printf("NOT LOGGING\n");} - else if (NumberToLogging == 1){pc.printf("LOGGING LCD\n");} - else if (NumberToLogging == 2){pc.printf("LOGGING NETWORKING\n");} - else if (NumberToLogging == 3){pc.printf("LOGGING SAMPLING\n");} - else if (NumberToLogging == 4){pc.printf("LOGGING SERIAL COMMANDS\n");} - else if (NumberToLogging == 5){pc.printf("LOGGING SD CARD\n");} - else if (NumberToLogging >= 6){pc.printf("INVALID LOGGING COMMAND\n");} - - if (NumberToLogging <= 5){Log_Value = 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 - { - pc.printf("Avalible Commands are: \n"); - - pc.printf("READ ALL\nDELETE ALL\nREAD <n>\nDELETE <n>\nSETDATE <dd> <mm> <yyyy>\nSETTIME <hh> <mm> <ss>\nSETT <T>\nSTATE <x>\nLOGGING <x>\nNETSET <n>\nHELP\n"); + if(Log_Value == 4){pc.printf("Address Deleting From: %d\n",x_Delete);} //If logging is enabled, print debug statement + if(x_Delete < 0){x_Delete = x_Delete + mailsize;} //If target is less than 0 add mailsize + else {x_Delete = x_Delete;} //If target is not less than 0 keep it the same + + Delete_Data(x_Delete); //Delete DATA at specified address + + if(x_Delete == mailsize - 1){x_Delete = 0;} //If target is mailsize - 1 set target to 0 + else {x_Delete = x_Delete + 1;} //If target is not mailsize - 1 increment the target } + pc.printf("DELETED %d RECORDS\n",NumberToDelete); //Print number of records which have been deleted + if(Log_Value == 4){pc.printf("Deleted %d samples\n",NumberToDelete);} //If logging is enabled, print the debug statement + Sampling_Timer.attach(&Sampling_ISR,Sample_Rate); //Attach sampling interrupt + } - //NETSET - else if(input[0] == 'N' & input[1] == 'E' & input[2] == 'T' & input[3] == 'S' & input[4] == 'E' & input[5] == 'T' & input[6] == ' ')// Use this to display all of the availble commands - { - if(Log_Value == 4){pc.printf("NETSET confirmed\n");} - int NumberOfChars = 0; int ArrayAddress = 0; string NetSetNumber; int NumberToNetSet; - while(input[ArrayAddress] != '\0'){NumberOfChars++; ArrayAddress++;} - for(int x=7; x < NumberOfChars; x++){NetSetNumber += input[x];} - stringstream Number(NetSetNumber); - Number >> NumberToNetSet; - if(Log_Value == 4){pc.printf("NETSET Number %d",NumberToNetSet);} - if(NumberToNetSet < 1) + //STATE + else if(input[0] == 'S' & input[1] == 'T' & input[2] == 'A' & input[3] == 'T' & input[4] == 'E' & input[5] == ' ') + { + if(Log_Value == 4){pc.printf("STATE Confirmed\n");} //If logging is enabled, print debug statement + int NumberOfChars = 0; int ArrayAddress = 0; string StateNumber; int NumberToState; //Declare required variables + while(input[ArrayAddress] != '\0'){NumberOfChars++; ArrayAddress++;} //Count the number of characters typed in the console + for(int x=6; x < NumberOfChars; x++){StateNumber += input[x];} //Concatenate characters from console into a string + stringstream Number(StateNumber); //Convert string into a stringstream + Number >> NumberToState; //Convert stringstream into an integer + + if(Log_Value == 4){pc.printf("STATE Set to %d\n",NumberToState);} //If logging is enabled, print debug statement + + if(NumberToState==0) {Sampling_Timer.detach(); pc.printf("SAMPLING 0\n");} //If input is 0 stop sampling + else if(NumberToState==1) {Sampling_Timer.attach(&Sampling_ISR,Sample_Rate);pc.printf("SAMPLING 1\n");} //If input is 1 start sampling + else {pc.printf("Invalid State\n");} //If other input received return error message + + } + + //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] == ' ') + { + if(Log_Value == 4){pc.printf("SETDATE Confirmed\n");} //If logging is enabled, print debug statement + string DayNumber, MonthNumber, YearNumber; //Declare required variables + int NumberToDay, NumberToMonth, NumberToYear; //Declare required variables + + for(int x=8; x < 10; x++){DayNumber += input[x];} //Concatenate characters from the first space to the second + stringstream Number_1(DayNumber); //Convert string to stringstream + Number_1 >> NumberToDay; //Convert stringstream to integer + + for(int x=11; x < 13; x++){MonthNumber += input[x];} //Concatenate characters from the second space to the third + stringstream Number_2(MonthNumber); //Convert string to stringstream + Number_2 >> NumberToMonth; //Convert stringstream to integer + + for(int x=14; x < 18; x++){YearNumber += input[x];} //Concatenate characters from the third space to the end + stringstream Number_3(YearNumber); //Convert string to stringstream + Number_3 >> NumberToYear; //Convert stringstream to string + + if(Log_Value == 4){pc.printf("Year Input %d Month Input %d Day Input %d\n",NumberToYear,NumberToMonth,NumberToDay);} //If logging is enabled, print debug statement + + set_new_date(NumberToDay,NumberToMonth,NumberToYear); //Set New Date + pc.printf("DATE UPDATED TO %02d %02d %d\n",NumberToDay,NumberToMonth,NumberToYear); //Print Updated Date + } + + //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] == ' ') + { + if(Log_Value == 4){pc.printf("SETTIME Confirmed\n");} //If logging is enabled, print debug statement + string HourNumber, MinuteNumber, SecondNumber; //Declare required variables + int NumberToHour, NumberToMinute, NumberToSecond; //Declare required variables + + for(int x=8; x < 10; x++){HourNumber += input[x];} //Concatenate characters from the third space to the end + stringstream Number_1(HourNumber); //Convert string to stringstream + Number_1 >> NumberToHour; //Convert stringstream to string + + for(int x=11; x < 13; x++){MinuteNumber += input[x];} //Concatenate characters from the third space to the end + stringstream Number_2(MinuteNumber); //Convert string to stringstream + Number_2 >> NumberToMinute; //Convert stringstream to string + + for(int x=14; x < 16; x++){SecondNumber += input[x];} //Concatenate characters from the third space to the end + stringstream Number_3(SecondNumber); //Convert string to stringstream + Number_3 >> NumberToSecond; //Convert stringstream to string + + if(Log_Value == 4){pc.printf("Hour Input %d Minute Input %d Seconds Input %d",NumberToHour,NumberToMinute,NumberToSecond);} //If logging is enabled, print debug statement + + set_new_time(NumberToHour,NumberToMinute,NumberToSecond); //Set New Time + pc.printf("TIME UPDATED TO %02d %02d %02d\n",NumberToHour,NumberToMinute,NumberToSecond); //Print Updated Time + } + + //SETT + else if(input[0] == 'S' & input[1] == 'E' & input[2] == 'T' & input[3] == 'T' & input[4] == ' ') + { + if(Log_Value == 4){pc.printf("SETT Confirmed\n");} //If logging is enabled, print debug statement + int NumberOfChars = 0; int ArrayAddress = 0; //Declare required variables + string SettNumber; double NumberToSett; //Declare required variables + int Decimal_Divider = 10; //Declare required variables + float Sample_Rate_Integer = 0; string Sample_Rate_Integer_String; //Declare required variables + float Sample_Rate_Decimal = 0; string Sample_Rate_Decimal_String; //Declare required variables + + while(input[ArrayAddress] != '\0'){NumberOfChars++; ArrayAddress++;} //Count the number of characters entered into the console + + if (Decimal_Check(input) == true) //If a decimal is present + { + for(int x = 5; x < Decimal_Position(input); x++){Sample_Rate_Integer_String += input[x];} //Concatenate characters from the space to the decimal + stringstream Number_1(Sample_Rate_Integer_String); //Convert string to a stringstream + Number_1 >> Sample_Rate_Integer; //Convert stringstream to a integer + + for(int x = Decimal_Position(input) + 1; x < NumberOfChars; x++){Sample_Rate_Decimal_String += input[x];} //Concatenate characters from the decimal to the end + stringstream Number_2(Sample_Rate_Decimal_String); //Convert string to a stringstream + Number_2 >> Sample_Rate_Decimal; //Convert stringstream to a integer + + for(int tens_power = 1; tens_power != NumberOfChars - Decimal_Position(input) - 1; tens_power++) //For each position after the decimal place { - NumberToNetSet = 1; - } - else - { - NumberToNetSet = NumberToNetSet; + Decimal_Divider = Decimal_Divider * 10; //Multiply the divider by another power of 10 } - NetworkWaitTime = (NumberToNetSet * 1000); + NumberToSett = Sample_Rate_Integer + (Sample_Rate_Decimal / float(Decimal_Divider)); //Divide the number after the decimal by the number of characters after the decimal + } + else //If a decimal is not present + { + for(int x=5; x < NumberOfChars; x++){SettNumber += input[x];} //Concatenate characters from the space to the end + stringstream Number_3(SettNumber); //Convert string to a stringstream + Number_3 >> NumberToSett; //Convert stringstream to an integer + } + + if(Log_Value == 4){pc.printf("Sample Rate Input %d\n",NumberToSett);} //If logging is enabled, print debug statement + if(Log_Value == 4){pc.printf("Decimal Rate Input %d\n",Sample_Rate_Decimal);} //If logging is enabled, print debug statement + if(Log_Value == 4){pc.printf("Integer Rate Input %d\n",Sample_Rate_Integer);} //If logging is enabled, print debug statement + + if(NumberToSett >= 0.1 & NumberToSett <= 60) //If inputted number is between 0.1 and 60.0 + { + Sample_Rate = NumberToSett; //Set the sample rate to that input number + pc.printf("T UPDATED TO %1.1f \n",NumberToSett); //Print updated sample rate } + else //If inputted number is not within bounds + { + Sample_Rate = Sample_Rate; //Don't change the sample rate + pc.printf("OUT OF RANGE\n"); //Print out of range error warning + } + Sampling_Timer.detach(); //Detach the sampling interrupt + Sampling_Timer.attach(&Sampling_ISR,Sample_Rate); //Reattach the sampling interrupt with the new 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; //Declare required variables + while(input[ArrayAddress] != '\0'){NumberOfChars++; ArrayAddress++;} //Count the number of characters entered into the console + for(int x=8; x < NumberOfChars; x++){LoggingNumber += input[x];} //Concatenate the characters between the space and the end + stringstream Number(LoggingNumber); //Convert string to stringstream + Number >> NumberToLogging; //Convert stringstream to integer + if (NumberToLogging == 0){pc.printf("NOT LOGGING\n");} //Not Logging + else if (NumberToLogging == 1){pc.printf("LOGGING LCD\n");} //Logging LCD + else if (NumberToLogging == 2){pc.printf("LOGGING NETWORKING\n");} //Logging Networking + else if (NumberToLogging == 3){pc.printf("LOGGING SAMPLING\n");} //Logging Sampling + else if (NumberToLogging == 4){pc.printf("LOGGING SERIAL COMMANDS\n");} //Logging serial commands + else if (NumberToLogging == 5){pc.printf("LOGGING SD CARD\n");} //Logging SD card + else if (NumberToLogging >= 6){pc.printf("INVALID LOGGING COMMAND\n");} //Invalud Logging Command + + if (NumberToLogging <= 5){Log_Value = NumberToLogging;} //If inputted value is within bounds equate it to the log state + } - else + //HELP + else if(input[0] == 'H' & input[1] == 'E' & input[2] == 'L' & input[3] == 'P') + { + pc.printf("Avalible Commands are: \n"); //Print introduction line + pc.printf("READ ALL\nDELETE ALL\nREAD <n>\nDELETE <n>\nSETDATE <dd> <mm> <yyyy>\nSETTIME <hh> <mm> <ss>\n"); //Print list of commands + pc.printf("SETT <T>\nSTATE <x>\nLOGGING <x>\t 1:LCD\t 2:Networking\t 3:Sampling\t 4:Serial Commands\t 5:SD Card\nNETSET <n>\nHELP\n"); //Print list of commands + + } + + //NETSET + else if(input[0] == 'N' & input[1] == 'E' & input[2] == 'T' & input[3] == 'S' & input[4] == 'E' & input[5] == 'T' & input[6] == ' ')// Use this to display all of the availble commands + { + if(Log_Value == 4){pc.printf("NETSET confirmed\n");} + int NumberOfChars = 0; int ArrayAddress = 0; string NetSetNumber; int NumberToNetSet; + while(input[ArrayAddress] != '\0'){NumberOfChars++; ArrayAddress++;} + for(int x=7; x < NumberOfChars; x++){NetSetNumber += input[x];} + stringstream Number(NetSetNumber); + Number >> NumberToNetSet; + if(Log_Value == 4){pc.printf("NETSET Number %d",NumberToNetSet);} + if(NumberToNetSet < 1) { - pc.printf("Please enter an acceptable command\n"); + NumberToNetSet = 1; + } + else + { + NumberToNetSet = NumberToNetSet; } + NetworkWaitTime = (NumberToNetSet * 1000); + } + + else + { + pc.printf("Please enter an acceptable command\n"); + } }