3rd Repo, trying to figure this out.
Fork of SOFT253_Template_Weather_OS_54 by
Diff: main.cpp
- Revision:
- 82:668b51a39148
- Parent:
- 81:996c0a3319b4
- Child:
- 83:0d3572a8a851
--- a/main.cpp Thu May 11 14:34:53 2017 +0000 +++ b/main.cpp Thu May 11 15:53:15 2017 +0000 @@ -40,6 +40,7 @@ // // THREADS DECLARATION // +osThreadId mainThreadId; Thread *produceThread; Thread *measureThread; Thread *consumeThread; @@ -52,7 +53,8 @@ Mail<Measure, 16> mail_box; LocalDate *localDate; //Mail<> -bool logging = true; +bool logging = false; +bool measuring = true; double sampleRate = 15; char temp[256]; @@ -72,9 +74,8 @@ // Ticker that signals the measureThread to do a measure // void SendSignalDoMeasure() - { - if(logging == true) - measureThread->signal_set(SIGNAL_doMeasure); +{ + measureThread->signal_set(SIGNAL_doMeasure); } // @@ -82,7 +83,7 @@ // Reads values from sensor board, sends over through mail queue void MeasureThread() { - double temperature , humidity, pressure; + float temperature , humidity, pressure; while(true) { @@ -95,7 +96,7 @@ Measure *measure = mail_box.alloc(); if (measure == NULL) { - logger.SendError("Out of memory\n\r"); + logger.SendError("Out of memory\r\n"); return; } @@ -118,6 +119,14 @@ mail_box.free(measure); return; } + + if(logging) + { + logger.SendMessage("Measurement Taken:\r\n"); + char *ptr = localDate->ToString(); + snprintf(temp, 256, " %s T: %f | H: %f | P: %f |\n\r",ptr, temperature, humidity, pressure); + logger.SendMessage(temp); + } } } @@ -141,7 +150,7 @@ buffer.pushValue(msr); mail_box.free(measure); } else { - snprintf(temp, 256, "ERROR: %x\n\r", evt.status); + snprintf(temp, 256, "ERROR: %x\r\n", evt.status); logger.SendError(temp); } } @@ -182,6 +191,12 @@ { charCmd = NULL; charCmd = getchar(); + if(logging) + { + logging = false; + logger.SendMessage("\r\033[1AKey Pressed. Debug logging disabled.\r\n"); + charCmd = NULL; + } if(charCmd != NULL) { @@ -208,9 +223,7 @@ charPos = strtok(NULL," -,"); //Check if it's a "LIST ALL" command if(CompareCommands(charPos, "all",3)) - { - logger.SendMessage("Printing all measures performed so far: \r\n"); - + { // Changed to use circular buffer rather than list buffer buffer.readAll(); logger.SendMessage("D O N E ! \r\n"); @@ -219,12 +232,7 @@ else if(strtol(charPos,NULL,10) != 0) { int num = atoi(charPos); - //char *temp1; - //strncpy(temp1, "\r\nPrinting ", 31); - //strcat(temp1, charPos); - //strcat(temp1, " measures: \r\n"); - snprintf(temp, 256, "Printing %i measures: \r\n", num); logger.SendMessage(temp); // Changed to use circular buffer rather than list buffer @@ -247,7 +255,6 @@ // Changed to use circular buffer rather than list buffer buffer.deleteAll(); - logger.SendMessage("Elements deleted!\r\n"); } //Check if it's a "DELETE X" command else if (strtol(charPos,NULL,10) != 0) @@ -267,14 +274,17 @@ char *ptr = localDate->ToString(); // Changed to use circular buffer rather than list buffer - if(logging == true) - { - snprintf(temp, 256, "STATUS: \r\n # of measures: %i \r\n SAMPLING: ON \r\n Current Date: %s \r\n Sample Rate(s): %2.2f \r\n", buffer.getSize(), ptr,sampleRate); - } - else - { - snprintf(temp, 256, "STATUS: \r\n # of measures: %i \r\n SAMPLING: OFF \r\n Current Date: %s \r\n Sample Rate(s): %2.2f \r\n", buffer.getSize(), ptr,sampleRate); - } + snprintf(temp, 256, "\nStatus: \r\n"); + logger.SendMessage(temp); + snprintf(temp, 256, " # of measures: %i \r\n", buffer.getSize()); + logger.SendMessage(temp); + snprintf(temp, 256, " Sampling: %s \r\n", measuring ? "On" : "Off"); + logger.SendMessage(temp); + snprintf(temp, 256, " Logging: %s \r\n", logging ? "On" : "Off"); + logger.SendMessage(temp); + snprintf(temp, 256, " Current Date: %s \r\n", ptr); + logger.SendMessage(temp); + snprintf(temp, 256, " Sample Rate(s): %2.2f \r\n", sampleRate); logger.SendMessage(temp); } //Check if it's a "SETTIME" command @@ -353,20 +363,43 @@ logger.SendMessage("Wrong format! please use DD-MM-YYYY. \r\n"); } } - // Check if it's a "LOGGING" command + // Check if it's a "STATE" command else if(CompareCommands(charPos,"state",5)) { charPos = strtok(NULL," ,"); //Check if it should be turned ON / OFF if(CompareCommands(charPos,"on",2)) { - logging = true; logger.SendMessage("Sampling turned ON!\r\n"); + timer.attach(&SendSignalDoMeasure, sampleRate); + SendSignalDoMeasure(); + measuring = true; } else if (CompareCommands(charPos,"off",3)) { - logging = false; logger.SendMessage("Sampling turned OFF!\r\n"); + timer.detach(); + measuring = false; + } + else + { + logger.SendMessage("Expected parameters: \"on\" | \"off\"\r\n"); + } + } + // Check if it's a "LOGGING" command + else if(CompareCommands(charPos,"logging",7)) + { + charPos = strtok(NULL," ,"); + //Check if it should be turned ON / OFF + if(CompareCommands(charPos,"on",2)) + { + logging = true; + logger.SendMessage("Debug logging turned ON!\r\n"); + logger.SendMessage("Press any key to deactivate\r\n"); + } + else if (CompareCommands(charPos,"off",3)) + { + logger.SendMessage("Logging is already turned off.\r\n"); } else { @@ -397,22 +430,30 @@ // Check if it's a "HELP" command else if (CompareCommands(charPos,"help",4) || CompareCommands(charPos,"?",1)) { - logger.SendMessage("Available Commands:\r\n"); - logger.SendMessage(" read <ALL|N> - Read ALL or N first measures.\r\n"); - logger.SendMessage(" delete <ALL|N> - Delete ALL or N first measures.\r\n"); + logger.SendMessage("\nAvailable Commands:\r\n"); + logger.SendMessage(" read <all|n> - Read all or n first measures.\r\n"); + logger.SendMessage(" delete <all|n> - Delete all or n first measures.\r\n"); logger.SendMessage(" setdate <DD> <MM> <YYYY> Set current date.\r\n"); logger.SendMessage(" settime <HH> <MM> <SS> Set current time.\r\n"); logger.SendMessage(" sett <T> Set sample rate (in seconds).\r\n"); logger.SendMessage(" status - Status report of device.\r\n"); - logger.SendMessage(" state - <ON|OFF> - Turn sampling on or OFF.\r\n"); - logger.SendMessage(" logging <ON|OFF> - Turn logging on or OFF.\r\n"); + logger.SendMessage(" state - <on|off> - Turn sampling on or off.\r\n"); + logger.SendMessage(" logging <on|off> - Turn logging on or off.\r\n"); + } + // Check if it's a "HELP" command + else if (CompareCommands(charPos,"reset",5)) + { + logger.SendError("Program Terminating...\r\n"); } // If command not recognized else { logger.SendMessage("Command not recognized. Type \"help\" for more info.\r\n"); } - logger.SendMessage("\r\nAwaiting Command:\n\r"); + if(!logging) + { + logger.SendMessage("\r\nAwaiting Command:\r\n"); + } //Clear command! //* NOTE * Setting first char in array to '\0' WILL NOT RESET IT...for some reason. int i = 0; @@ -438,27 +479,27 @@ // Some queue system holding lines to print // If the queue has something to print, print it. - while(true) - { - Thread::signal_wait(SIGNAL_printMessage); - + while(true) + { + Thread::signal_wait(SIGNAL_printMessage); + + while(true) + { if(logger.GetError()) { - // Kill EVERYTHING - //mbed_reset(); - //NVIC_SystemReset(); + osSignalSet(mainThreadId, SIGNAL_terminate); } else if(!logger.GetMessage()) { - - } - - } + break; + } + } + } } // Main thread int main() { - + mainThreadId = osThreadGetId(); //Initialize all stuff you need here: measurer.init(); measurer.calib(); @@ -483,11 +524,22 @@ consumeThread = new Thread(); consumeThread->start(ConsumeThread); - logger.SendMessage("\r\n--- W E L C O M E --\r\n"); + logger.SendMessage("\r\n--- W E L C O M E ---\r\n"); + + SendSignalDoMeasure(); while(true) { - // Is there a sleep method that could be used instead or waiting and awaking every 3 seconds? - Thread::signal_wait(SIGNAL_terminate); + osSignalWait(SIGNAL_terminate, osWaitForever); + + produceThread->terminate(); + measureThread->terminate(); + consumeThread->terminate(); + loggingThread->terminate(); + + printf("Press any key to restart..."); + char c = getchar(); + + NVIC_SystemReset(); } } \ No newline at end of file