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/CompositeControl.cpp@220:dbe21411f962, 2016-10-14 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |
