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/CAN_Device.cpp
- Revision:
- 11:bc9cd2869f95
- Child:
- 15:c944ee3c8a5b
diff -r e8db892fbc52 -r bc9cd2869f95 Devices/CAN_Device.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Devices/CAN_Device.cpp Wed Oct 01 18:11:38 2014 +0000 @@ -0,0 +1,177 @@ +//#include "CAN_Device.hpp" +// +////Constructor +//CAN_Device::CAN_Device(LineData lineData){ +// +// //Order of Line: Command, Local_Name, CAN_DEVICE, selectedCAN(1,2), freq +// //Since we can't return from a constructor, instead we'll flip a flag, and check it after we've added the device in interpretCommand +// if (lineData.numWords != 5) +// this->errorFlag = 1; +// +// string channelstr = lineData.word[3], freqstr = lineData.word[4]; //Parameters are numbers +// int tempChannel = -1, tempFreq = -1; +// int numValuesFound = sscanf(channelstr.c_str(), "%d", &tempChannel); +// if (numValuesFound < 1) +// this->errorFlag = 1; +// +// numValuesFound = sscanf(freqstr.c_str(), "%d", &tempFreq); +// if (numValuesFound < 1) +// this->errorFlag = 1; +// +// //channel must be either CAN1 or CAN2 +// if (tempChannel == 1 || tempChannel == 2){ +// this->selectedCAN = tempChannel; +// else +// this->errorFlag = 1; +// +// //should have a frequency greater than 0 +// if (tempFreq > 0) +// this->freq = tempFreq; +// else +// this->errorFlag = 1; +//} +// +// +//int CAN_Device::getSelectedCAN(){ +// return this->selectedCAN; +//} +// +//int CAN_Device::getFreq(){ +// return this->freq; +//} +// +////A line consists of [ __(Local_Name)__ __(function)__ __(parameter1)__ __(parameter2)__ __(parameter3)__ ... and so on] +//int CAN_Device::CAN_Device(LineData &lineData){ +// +// //Order of Line: Local_Name, Function_Name, Param1, Param2, Param3,....... +// string func = lineData.word[1]; +// +// /******************************************************************************/ +// /*** <Func: enableBrake> ***/ +// /******************************************************************************/ +// if (func.compare("write") == 0){ +// //line looks like: Local_Name, write, ID_val, byte +// if (lineData.numWords > 5){ +// ErrorOut("Incorrect number of parameters", lineData.lineNumber); +// return -1; +// } +// +// //Initialize and Convert Parameters +// string enable = lineData.word[2]; +// int enableValue = 0; +// +// int numValuesFound = sscanf(enable.c_str(), "%d", &enableValue); +// if (numValuesFound < 1){ +// ErrorOut("Parameter Unknown, enableBrake value 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 +// +// bridges.enableBraking(getMotor(), enableValue); +// } +// +// /******************************************************************************/ +// /*** <Func: forceBrake> ***/ +// /******************************************************************************/ +// else if (func.compare("forceBrake") == 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 +// +// bridges.forceBrake(getMotor()); +// } +// +// +// /******************************************************************************/ +// /*** <Func: drive> ***/ +// /******************************************************************************/ +// else if (func.compare("drive") == 0){ +// +// if (lineData.numWords != 4){ +// ErrorOut("Incorrect number of parameters", lineData.lineNumber); +// return -1; +// } +// +// //Initialize Parameters +// string speed = lineData.word[2]; +// string dir = lineData.word[3]; +// +// //Initialize Convertion Variables if needed +// float speedValue; +// int dirValue = 0; +// +// //Convert string to usable values +// int numValuesFound = sscanf(speed.c_str(), "%f", &speedValue); +// if (numValuesFound < 1){ +// ErrorOut("Parameter Unknown, speed value can't be converted", lineData.lineNumber); +// return -1; +// } +// +// //Speed is given as a percentage of 100, so convert it to the value needed for the bridge.drive function +// speedValue = speedValue / 100; +// +// +// if (speedValue <= 0 && speedValue > 1.0){ +// ErrorOut("Speed Value must be between 0 - 100", lineData.lineNumber); +// return -1; +// } +// +// if (dir.compare("CC") == 0 || dir.compare("cc") == 0) +// dirValue = -1; //Turn Clockwise +// else if (dir.compare("C") == 0 || dir.compare("c") == 0) +// dirValue = 1; //Turn CounterClockwise +// +// else{ +// ErrorOut("Direction Value must be C or CC", 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 +// +// bridges.drive(getMotor(), dirValue, speedValue); //Turn on the Motor +// } +// +// +// /******************************************************************************/ +// /**** <Func: off> ****/ +// /******************************************************************************/ +// else if (func.compare("off") == 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 +// +// off(); +// } +// +// else { +// ErrorOut("Unknown Command for Motor 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 CAN_Device::off(void){ +// bridges.drive(getMotor(), 0, 0); //Turn off the Motor +// return 0; +//}