Component Test's Software to work with "Universal Controller Box" - Software is an interpreter or "compiler" for programs to be done with a .txt file and read off of the SD Card
Dependencies: BridgeDriver FrontPanelButtons MCP23017 SDFileSystem TextLCD mbed
Diff: Devices/TimerDevice.cpp
- Revision:
- 11:bc9cd2869f95
diff -r e8db892fbc52 -r bc9cd2869f95 Devices/TimerDevice.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Devices/TimerDevice.cpp Wed Oct 01 18:11:38 2014 +0000 @@ -0,0 +1,146 @@ +#include "TimerDevice.hpp" + +//Constructor +TimerDevice::TimerDevice(LineData lineData){ + //No Constructor needed... functionality already exists in mBed library +} + + +//A line consists of [ __(Local_Name)__ __(function)__ __(parameter1)__ __(parameter2)__ __(parameter3)__ ... and so on] +int TimerDevice::interpret(LineData &lineData){ + + + + //Order of line: local_name, function_name, param1, param2, param3,....... + string func = lineData.word[1]; + + /******************************************************************************/ + /*** <func: start> ***/ + /******************************************************************************/ + if (func.compare("start") == 0){ + + if (lineData.numWords != 2){ + ErrorOut("Incorrect number of parameters", lineData.lineNumber); + return -1; + } + + //All syntax checking done by this point, if Dummy then return success in order to check the code, no need to perform functionality + if (DummyMode) + return 0; //Function operated successfully but doesn't return a value + + this->Timer.start(); + } + + + /******************************************************************************/ + /*** <func: stop> ***/ + /******************************************************************************/ + else if (func.compare("stop") == 0){ + + if (lineData.numWords != 2){ + ErrorOut("Incorrect number of parameters", lineData.lineNumber); + return -1; + } + + //All syntax checking done by this point, if Dummy then return success in order to check the code, no need to perform functionality + if (DummyMode) + return 0; //Function operated successfully but doesn't return a value + + this->Timer.stop(); + } + + /******************************************************************************/ + /*** <func: reset> ***/ + /******************************************************************************/ + else if (func.compare("reset") == 0){ + + if (lineData.numWords != 2){ + ErrorOut("Incorrect number of parameters", lineData.lineNumber); + return -1; + } + + //All syntax checking done by this point, if Dummy then return success in order to check the code, no need to perform functionality + if (DummyMode) + return 0; //Function operated successfully but doesn't return a value + + this->Timer.stop(); + this->Timer.reset(); + this->Timer.start(); + } + + /******************************************************************************/ + /**** <func: val> ****/ + /******************************************************************************/ + else if (func.compare("val") == 0){ + + //line looks like: local_name, val, comparison_characteristics (<, >, =) + if (lineData.numWords != 4){ + ErrorOut("Incorrect number of parameters", lineData.lineNumber); + return -1; + } + + string cmpChar = lineData.word[2]; //Get the comparison characteristic value + + string timestr = lineData.word[3]; //Parameter is a number + int timeValue = 0; //Time value to compare in ms + int numValuesFound = sscanf(timestr.c_str(), "%d", &timeValue); + if (numValuesFound < 1){ + ErrorOut("Parameter Unknown, time value can't be converted", lineData.lineNumber); + return -1; + } + + //Error check comparision characteristic + if (cmpChar.compare("<") != 0 && cmpChar.compare(">") != 0 && cmpChar.compare("=") != 0){ + ErrorOut("Parameter Unknown, comparison character can't be converted", lineData.lineNumber); + return -1; + } + + //All syntax checking done by this point, if Dummy then return success in order to check the code, no need to perform functionality + if (DummyMode) + return 0; //Function operated successfully but doesn't return a value + + if (cmpChar.compare("<") == 0){ + if (this->Timer.read_ms() < timeValue) + return 1; //met condition + } + else if (cmpChar.compare(">") == 0){ + if (this->Timer.read_ms() > timeValue) + return 1; //met condition + } + else if (cmpChar.compare("=") == 0){ + if (this->Timer.read_ms() == timeValue) + return 1; //met condition + } + + } + + + else { + ErrorOut("Unknown Command for Voltage Driver Class", lineData.lineNumber); + return -1; + } + + return 0; //Return success as 0 since no condition had to be met +} + + +//For stopping the entire system if an error occurs, can be called from main +int TimerDevice::off(void){ + this->Timer.stop(); + return 0; +} + + +//Pause the timer +int TimerDevice::pause(void){ + this->Timer.stop(); + return 0; +} + +//Resume the timer +int TimerDevice::resume(void){ + this->Timer.start(); + return 0; +} + +