Erick / Mbed 2 deprecated ICE_BLE_TEST

Dependencies:   NaturalTinyShell_ice libmDot-12Sept mbed-rtos mbed

Fork of ICE by Erick

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
}