Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: NaturalTinyShell_ice libmDot-12Sept mbed-rtos mbed
Fork of ICE by
src/ConfigurationHandler/Controls/SetpointControl.cpp
- Committer:
- jmarkel44
- Date:
- 2016-09-13
- Revision:
- 51:66b820f203a5
- Parent:
- 46:4cb96ab2d1c8
- Child:
- 56:225786c56315
File content as of revision 51:66b820f203a5:
/****************************************************************************** * * File: SetpointControl.cpp * Desciption: ICE Setpoint Control Class implementation * *****************************************************************************/ #include "SetpointControl.h" #include "mDot.h" #include "MbedJSONValue.h" #include "global.h" #include <string> extern mDot *GLOBAL_mdot; bool SetpointControl::load(string _controlFile) { MbedJSONValue json_value; // JSON parsing element controlFile = _controlFile; // open and read from the control file mDot::mdot_file file = GLOBAL_mdot->openUserFile(controlFile.c_str(), mDot::FM_RDONLY); if ( file.fd < 0 ) return false; // read the data into a buffer char dataBuf[1024]; int bytes_read = GLOBAL_mdot->readUserFile(file, (void *)dataBuf, sizeof(dataBuf)); if ( bytes_read != sizeof(dataBuf) ) { logError("%s: failed to read %d bytes from %s", __func__, sizeof(dataBuf), controlFile.c_str()); // we can't throw exceptions in mbed, so just return false. the calling function will // destroy the object return false; } // close the file GLOBAL_mdot->closeUserFile(file); // parse the json data parse(json_value, dataBuf); id = json_value["id"].get<string>(); name = json_value["name"].get<string>(); priority = atoi(json_value["priority"].get<string>().c_str()); input = json_value["input"].get<string>(); output = json_value["output"].get<string>(); productFactor = atof(json_value["prodfact"].get<string>().c_str()); highAlert = atof(json_value["halert"].get<string>().c_str()); lowAlert = atof(json_value["lalert"].get<string>().c_str()); highFailsafe = atof(json_value["hfs"].get<string>().c_str()); lowFailsafe = atof(json_value["lfs"].get<string>().c_str()); tol = atof(json_value["tol"].get<string>().c_str()); return true; // object created successfully } void SetpointControl::registerControl(void) { if ( GLOBAL_outputTask_thread ) { // register our priority with the output master } } void SetpointControl::start(void) { // this is the initial state, let's determine what needs to be done this->currentState = STATE_STARTUP; } void SetpointControl::update(void) { printf("\r%s is working on %s\n", __func__, controlFile.c_str()); switch (this->currentState) { case STATE_STARTUP: if ( this->underLimit() ) { // start the feed right away this->startFeed(); this->currentState = STATE_CONTROL_ON; } else { this->currentState = STATE_CONTROL_OFF; } break; case STATE_CONTROL_ON: if ( this->overLimit() ) { // stop the feed this->stopFeed(); this->currentState = STATE_CONTROL_OFF; } else { // do nothing } break; case STATE_CONTROL_OFF: if ( this->underLimit() ) { // start the feed this->startFeed(); this->currentState = STATE_CONTROL_ON; } else { // do nothing } break; //case STATE_CONTROL_DISABLED: //case STATE_CONTROL_PAUSED: default: break; } } bool SetpointControl::overLimit(void) { return false; } bool SetpointControl::underLimit(void) { return false; } void SetpointControl::startFeed(void) { logInfo("%s attempting to start feed on relay %s\n", controlFile.c_str(), output.c_str()); // TODO: send a message to the output task to turn the relay ON } void SetpointControl::stopFeed(void) { logInfo("%s attempting to stop feed on relay %s\n", controlFile.c_str(), output.c_str()); // TODO: send a message to the output task to turn the relay OFF }