Erick / Mbed 2 deprecated ICE_BLE_TEST

Dependencies:   NaturalTinyShell_ice libmDot-12Sept mbed-rtos mbed

Fork of ICE by Erick

Committer:
jmarkel44
Date:
Fri Oct 14 13:32:47 2016 +0000
Revision:
220:dbe21411f962
Parent:
164:7cecd731882e
Child:
221:2a5e9902003c
composite control skeleton;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jmarkel44 164:7cecd731882e 1 /******************************************************************************
jmarkel44 164:7cecd731882e 2 *
jmarkel44 164:7cecd731882e 3 * File: CompositeControl.cpp
jmarkel44 164:7cecd731882e 4 * Desciption: ICE Composite Control Class implementation
jmarkel44 164:7cecd731882e 5 *
jmarkel44 164:7cecd731882e 6 *****************************************************************************/
jmarkel44 164:7cecd731882e 7 #include "CompositeControl.h"
jmarkel44 164:7cecd731882e 8 #include "mDot.h"
jmarkel44 164:7cecd731882e 9 #include "MbedJSONValue.h"
jmarkel44 164:7cecd731882e 10 #include "ModbusMasterApi.h"
jmarkel44 164:7cecd731882e 11 #include "global.h"
jmarkel44 164:7cecd731882e 12 #include <string>
jmarkel44 164:7cecd731882e 13
jmarkel44 164:7cecd731882e 14 extern mDot *GLOBAL_mdot;
jmarkel44 164:7cecd731882e 15
jmarkel44 220:dbe21411f962 16 bool CompositeControl::load(std::string _controlFile)
jmarkel44 164:7cecd731882e 17 {
jmarkel44 220:dbe21411f962 18 MbedJSONValue json_value; // JSON parsing element
jmarkel44 220:dbe21411f962 19 controlFile = _controlFile;
jmarkel44 220:dbe21411f962 20
jmarkel44 220:dbe21411f962 21 // open and read from the control file
jmarkel44 220:dbe21411f962 22 mDot::mdot_file file = GLOBAL_mdot->openUserFile(controlFile.c_str(), mDot::FM_RDONLY);
jmarkel44 220:dbe21411f962 23 if ( file.fd < 0 ) {
jmarkel44 220:dbe21411f962 24 logError("%s: failed to open %s\n", __func__, controlFile.c_str());
jmarkel44 220:dbe21411f962 25 return false;
jmarkel44 220:dbe21411f962 26 }
jmarkel44 220:dbe21411f962 27
jmarkel44 220:dbe21411f962 28 // read the data into a buffer
jmarkel44 220:dbe21411f962 29 char dataBuf[MAX_FILE_SIZE];
jmarkel44 220:dbe21411f962 30
jmarkel44 220:dbe21411f962 31 int bytes_read = GLOBAL_mdot->readUserFile(file, (void *)dataBuf, sizeof(dataBuf));
jmarkel44 220:dbe21411f962 32 if ( bytes_read != sizeof(dataBuf) ) {
jmarkel44 220:dbe21411f962 33 logError("%s: failed to read %d bytes from %s", __func__, sizeof(dataBuf), controlFile.c_str());
jmarkel44 220:dbe21411f962 34 // caller should destroy the object
jmarkel44 220:dbe21411f962 35 return false;
jmarkel44 220:dbe21411f962 36 }
jmarkel44 220:dbe21411f962 37
jmarkel44 220:dbe21411f962 38 // close the file
jmarkel44 220:dbe21411f962 39 GLOBAL_mdot->closeUserFile(file);
jmarkel44 220:dbe21411f962 40
jmarkel44 220:dbe21411f962 41 parse(json_value, dataBuf);
jmarkel44 220:dbe21411f962 42
jmarkel44 220:dbe21411f962 43 if ( !json_value.hasMember("id") ||
jmarkel44 220:dbe21411f962 44 !json_value.hasMember("input") ||
jmarkel44 220:dbe21411f962 45 !json_value.hasMember("ca") ||
jmarkel44 220:dbe21411f962 46 !json_value.hasMember("priority") ||
jmarkel44 220:dbe21411f962 47 !json_value.hasMember("entries") ) {
jmarkel44 220:dbe21411f962 48 printf("\rComposite control is missing expected tags\n");
jmarkel44 220:dbe21411f962 49 return false;
jmarkel44 220:dbe21411f962 50 }
jmarkel44 220:dbe21411f962 51
jmarkel44 220:dbe21411f962 52 id = json_value["id"].get<string>();
jmarkel44 220:dbe21411f962 53 std::string input = json_value["input"].get<string>();
jmarkel44 220:dbe21411f962 54 priority = atoi(json_value["priority"].get<string>().c_str());
jmarkel44 220:dbe21411f962 55 inputs.push_back(input);
jmarkel44 220:dbe21411f962 56 ca = json_value["ca"].get<string>();
jmarkel44 220:dbe21411f962 57
jmarkel44 220:dbe21411f962 58 int entries = atoi(json_value["entries"].get<string>().c_str());
jmarkel44 220:dbe21411f962 59
jmarkel44 220:dbe21411f962 60 for ( int i = 0; i < entries; ++i ) {
jmarkel44 220:dbe21411f962 61 std::string tag = json_value["outputs"][i]["tag"].get<string>();
jmarkel44 220:dbe21411f962 62 std::string response = json_value["outputs"][i]["response"].get<string>();
jmarkel44 220:dbe21411f962 63 if ( !tag.empty() && !response.empty() ) {
jmarkel44 220:dbe21411f962 64 OutputElement x = { tag, response };
jmarkel44 220:dbe21411f962 65 outputs.push_back(x);
jmarkel44 220:dbe21411f962 66 } else {
jmarkel44 220:dbe21411f962 67 return false;
jmarkel44 220:dbe21411f962 68 }
jmarkel44 220:dbe21411f962 69 }
jmarkel44 220:dbe21411f962 70
jmarkel44 164:7cecd731882e 71 return true;
jmarkel44 164:7cecd731882e 72 }
jmarkel44 164:7cecd731882e 73
jmarkel44 164:7cecd731882e 74 // unregister the control with the output task
jmarkel44 164:7cecd731882e 75 void CompositeControl::unregisterControl(void)
jmarkel44 164:7cecd731882e 76 {
jmarkel44 220:dbe21411f962 77 }
jmarkel44 220:dbe21411f962 78
jmarkel44 220:dbe21411f962 79 void CompositeControl::display(void)
jmarkel44 220:dbe21411f962 80 {
jmarkel44 220:dbe21411f962 81 printf("\r control file : %s\n", controlFile.c_str());
jmarkel44 220:dbe21411f962 82 printf("\r id : %s\n", id.c_str());
jmarkel44 220:dbe21411f962 83 printf("\r priority : %u\n", priority);
jmarkel44 220:dbe21411f962 84 printf("\r ca : %s\n", ca.c_str());
jmarkel44 220:dbe21411f962 85 vector<std::string>::iterator pos;
jmarkel44 220:dbe21411f962 86 for ( pos = inputs.begin(); pos != inputs.end(); ++pos ) {
jmarkel44 220:dbe21411f962 87 printf("\r input : %s\n", (*pos).c_str());
jmarkel44 220:dbe21411f962 88 }
jmarkel44 220:dbe21411f962 89 vector<OutputElement>::iterator it;
jmarkel44 220:dbe21411f962 90 printf("\r outputs :\n");
jmarkel44 220:dbe21411f962 91 for ( it = outputs.begin(); it != outputs.end(); ++it ) {
jmarkel44 220:dbe21411f962 92 printf("\r tag-> %s\n", (*it).tag.c_str());
jmarkel44 220:dbe21411f962 93 printf("\r response-> %s\n", (*it).response.c_str());
jmarkel44 220:dbe21411f962 94 }
jmarkel44 220:dbe21411f962 95 printf("\r\n");
jmarkel44 164:7cecd731882e 96 }