Erick / Mbed 2 deprecated ICE_BLE_TEST

Dependencies:   NaturalTinyShell_ice libmDot-12Sept mbed-rtos mbed

Fork of ICE by Erick

Committer:
jmarkel44
Date:
Tue Oct 18 20:23:31 2016 +0000
Revision:
230:11765008ff3a
Parent:
221:2a5e9902003c
Child:
231:f22901955e0c
LOCKOUT blowdown

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jmarkel44 0:65cfa4873284 1 /******************************************************************************
jmarkel44 0:65cfa4873284 2 *
jmarkel44 0:65cfa4873284 3 * File: ConfigurationHandler.cpp
jmarkel44 0:65cfa4873284 4 * Desciption: source for the ICE Configuration Handler
jmarkel44 0:65cfa4873284 5 *
jmarkel44 0:65cfa4873284 6 *****************************************************************************/
jmarkel44 3:8ea4db957749 7 #include "ConfigurationHandler.h"
jmarkel44 0:65cfa4873284 8 #include "global.h"
jmarkel44 5:5e77a1db4d45 9 #include "SetpointControl.h"
jmarkel44 12:ea87887ca7ad 10 #include "TimerControl.h"
jmarkel44 220:dbe21411f962 11 #include "CompositeControl.h"
jmarkel44 221:2a5e9902003c 12 #include "CompositeAlgorithm.h"
jmarkel44 156:44f87c5a83ae 13 #include <algorithm>
jmarkel44 12:ea87887ca7ad 14
jmarkel44 156:44f87c5a83ae 15 StringSetpointMap setpointTable; // setpoint control object table
jmarkel44 156:44f87c5a83ae 16 StringVectorTimerMap timerTable; // timer control object table
jmarkel44 156:44f87c5a83ae 17 StringManualMap manualTable; // manual control object table
jmarkel44 220:dbe21411f962 18 StringCompositeMap compositeTable; // composite control object table
jmarkel44 230:11765008ff3a 19 StringAlgorithmMap algorithmTable; // composite control algorithms
jmarkel44 5:5e77a1db4d45 20
jmarkel44 5:5e77a1db4d45 21 // local function prototypes
jmarkel44 5:5e77a1db4d45 22 static int loadPersistentControls(void);
jmarkel44 5:5e77a1db4d45 23
jmarkel44 74:03ccf04998b5 24 // local helper functions
jmarkel44 5:5e77a1db4d45 25 static int createControl(const Message_t *msg);
jmarkel44 5:5e77a1db4d45 26 static int modifyControl(const Message_t *msg);
jmarkel44 5:5e77a1db4d45 27 static int destroyControl(const Message_t *msg);
jmarkel44 5:5e77a1db4d45 28
jmarkel44 205:3c84af5f711f 29 // sort function for timer controls
jmarkel44 205:3c84af5f711f 30 bool compareStartTime(const TimerControl *lhs, const TimerControl *rhs)
jmarkel44 205:3c84af5f711f 31 {
jmarkel44 156:44f87c5a83ae 32 return (lhs->getStartTime() < rhs->getStartTime());
jmarkel44 156:44f87c5a83ae 33 }
jmarkel44 156:44f87c5a83ae 34
jmarkel44 12:ea87887ca7ad 35 /*****************************************************************************
jmarkel44 12:ea87887ca7ad 36 * Function: ConfigurationHandler()
jmarkel44 12:ea87887ca7ad 37 * Description: The ICE Configuration Handler
jmarkel44 12:ea87887ca7ad 38 *
jmarkel44 12:ea87887ca7ad 39 * @param args (unused)
jmarkel44 12:ea87887ca7ad 40 * @return none
jmarkel44 12:ea87887ca7ad 41 *****************************************************************************/
jmarkel44 0:65cfa4873284 42 void ConfigurationHandler(void const *args)
jmarkel44 0:65cfa4873284 43 {
jmarkel44 12:ea87887ca7ad 44 UNUSED(args);
jmarkel44 5:5e77a1db4d45 45 loadPersistentControls();
jmarkel44 75:96512ccc0443 46 osSignalSet(mainThreadId, sig_config_continue);
jmarkel44 5:5e77a1db4d45 47
jmarkel44 3:8ea4db957749 48 while ( true ) {
jmarkel44 5:5e77a1db4d45 49 // wait for an event
jmarkel44 5:5e77a1db4d45 50 osEvent evt = MailBox.get();
jmarkel44 5:5e77a1db4d45 51 if (evt.status == osEventMail) {
jmarkel44 5:5e77a1db4d45 52 Message_t *msg = (Message_t*) evt.value.p;
jmarkel44 5:5e77a1db4d45 53
jmarkel44 217:d5a2ff093319 54 logInfo("\r%s: msg->action = %d\n", __func__, msg->action);
jmarkel44 37:7e6986b77f01 55 logInfo("\r%s: msg->control = %d\n", __func__, msg->control);
jmarkel44 37:7e6986b77f01 56 logInfo("\r%s: msg->controlFile = %s\n", __func__, msg->controlFile);
jmarkel44 5:5e77a1db4d45 57
jmarkel44 5:5e77a1db4d45 58 switch ( msg->action ) {
jmarkel44 5:5e77a1db4d45 59 case ACTION_CREATE: {
jmarkel44 5:5e77a1db4d45 60 (void)createControl(msg);
jmarkel44 5:5e77a1db4d45 61 break;
jmarkel44 5:5e77a1db4d45 62 }
jmarkel44 5:5e77a1db4d45 63 case ACTION_MODIFY: {
jmarkel44 5:5e77a1db4d45 64 (void)modifyControl(msg);
jmarkel44 5:5e77a1db4d45 65 break;
jmarkel44 5:5e77a1db4d45 66 }
jmarkel44 5:5e77a1db4d45 67 case ACTION_DESTROY: {
jmarkel44 5:5e77a1db4d45 68 (void)destroyControl(msg);
jmarkel44 5:5e77a1db4d45 69 break;
jmarkel44 5:5e77a1db4d45 70 }
jmarkel44 5:5e77a1db4d45 71 default:
jmarkel44 5:5e77a1db4d45 72 break;
jmarkel44 5:5e77a1db4d45 73 }
jmarkel44 5:5e77a1db4d45 74
jmarkel44 5:5e77a1db4d45 75 // free the message
jmarkel44 5:5e77a1db4d45 76 MailBox.free(msg);
jmarkel44 5:5e77a1db4d45 77 }
jmarkel44 0:65cfa4873284 78 }
jmarkel44 0:65cfa4873284 79 }
jmarkel44 5:5e77a1db4d45 80
jmarkel44 12:ea87887ca7ad 81 /*****************************************************************************
jmarkel44 12:ea87887ca7ad 82 * Function: ConfigurationHandler_showControls()
jmarkel44 13:c80c283f9db2 83 * Description: show the controls
jmarkel44 12:ea87887ca7ad 84 *
jmarkel44 12:ea87887ca7ad 85 * @param msg
jmarkel44 12:ea87887ca7ad 86 * @return none
jmarkel44 12:ea87887ca7ad 87 *****************************************************************************/
jmarkel44 12:ea87887ca7ad 88 void ConfigurationHandler_showControls(void)
jmarkel44 12:ea87887ca7ad 89 {
jmarkel44 12:ea87887ca7ad 90 if ( !timerTable.empty() ) {
jmarkel44 205:3c84af5f711f 91 printf("\r\n");
jmarkel44 156:44f87c5a83ae 92 StringVectorTimerMap::iterator pos;
jmarkel44 46:4cb96ab2d1c8 93 for ( pos = timerTable.begin(); pos != timerTable.end(); ++pos ) {
jmarkel44 156:44f87c5a83ae 94 vector<TimerControl *>::iterator it;
jmarkel44 156:44f87c5a83ae 95 for ( it = pos->second.begin(); it != pos->second.end(); ++it ) {
jmarkel44 156:44f87c5a83ae 96 (*it)->display();
jmarkel44 156:44f87c5a83ae 97 }
jmarkel44 12:ea87887ca7ad 98 }
jmarkel44 12:ea87887ca7ad 99 }
jmarkel44 74:03ccf04998b5 100
jmarkel44 12:ea87887ca7ad 101 if ( !setpointTable.empty() ) {
jmarkel44 205:3c84af5f711f 102 printf("\r\n");
jmarkel44 12:ea87887ca7ad 103 StringSetpointMap::iterator pos;
jmarkel44 93:1553fb156915 104 for ( pos = setpointTable.begin(); pos != setpointTable.end(); ++pos ) {
jmarkel44 93:1553fb156915 105 pos->second->display();
jmarkel44 12:ea87887ca7ad 106 }
jmarkel44 12:ea87887ca7ad 107 }
jmarkel44 121:650205ffa656 108
jmarkel44 97:5cf6ab71dcd0 109 if ( !manualTable.empty() ) {
jmarkel44 205:3c84af5f711f 110 printf("\r\n");
jmarkel44 97:5cf6ab71dcd0 111 StringManualMap::iterator pos;
jmarkel44 97:5cf6ab71dcd0 112 for ( pos = manualTable.begin(); pos != manualTable.end(); ++pos ) {
jmarkel44 97:5cf6ab71dcd0 113 pos->second->display();
jmarkel44 97:5cf6ab71dcd0 114 }
jmarkel44 97:5cf6ab71dcd0 115 }
jmarkel44 230:11765008ff3a 116
jmarkel44 220:dbe21411f962 117 if ( !compositeTable.empty() ) {
jmarkel44 220:dbe21411f962 118 printf("\r\n");
jmarkel44 220:dbe21411f962 119 StringCompositeMap::iterator pos;
jmarkel44 220:dbe21411f962 120 for ( pos = compositeTable.begin(); pos != compositeTable.end(); ++pos ) {
jmarkel44 220:dbe21411f962 121 pos->second->display();
jmarkel44 220:dbe21411f962 122 }
jmarkel44 220:dbe21411f962 123 }
jmarkel44 12:ea87887ca7ad 124 }
jmarkel44 12:ea87887ca7ad 125
jmarkel44 221:2a5e9902003c 126 void ConfigurationHandler_showAlgorithms(void)
jmarkel44 221:2a5e9902003c 127 {
jmarkel44 221:2a5e9902003c 128 StringAlgorithmMap::iterator pos;
jmarkel44 230:11765008ff3a 129
jmarkel44 221:2a5e9902003c 130 for ( pos = algorithmTable.begin(); pos != algorithmTable.end(); ++pos ) {
jmarkel44 221:2a5e9902003c 131 pos->second->display();
jmarkel44 221:2a5e9902003c 132 }
jmarkel44 221:2a5e9902003c 133 }
jmarkel44 221:2a5e9902003c 134
jmarkel44 12:ea87887ca7ad 135 /*****************************************************************************
jmarkel44 12:ea87887ca7ad 136 * Function: loadPersistentControls()
jmarkel44 12:ea87887ca7ad 137 * Description: load persistent controls from flash
jmarkel44 12:ea87887ca7ad 138 *
jmarkel44 12:ea87887ca7ad 139 * @param none
jmarkel44 12:ea87887ca7ad 140 * @return none
jmarkel44 12:ea87887ca7ad 141 *****************************************************************************/
jmarkel44 12:ea87887ca7ad 142 static int loadPersistentControls(void)
jmarkel44 12:ea87887ca7ad 143 {
jmarkel44 12:ea87887ca7ad 144 static bool loaded = false;
jmarkel44 12:ea87887ca7ad 145
jmarkel44 12:ea87887ca7ad 146 if ( !loaded ) { // lazy protection
jmarkel44 121:650205ffa656 147
jmarkel44 77:43e0a3d9e536 148 printf("\rLoading persistent controls: \n");
jmarkel44 74:03ccf04998b5 149 std::vector<mDot::mdot_file> file_list = GLOBAL_mdot->listUserFiles();
jmarkel44 156:44f87c5a83ae 150
jmarkel44 126:c85ac6a8e9af 151 loaded = true;
jmarkel44 74:03ccf04998b5 152
jmarkel44 74:03ccf04998b5 153 for (std::vector<mDot::mdot_file>::iterator i = file_list.begin(); i != file_list.end(); ++i) {
jmarkel44 74:03ccf04998b5 154 if( strncmp( i->name, CONTROL_SP_STR, strlen(CONTROL_SP_STR)) == 0 ) {
jmarkel44 77:43e0a3d9e536 155 // create the setpoint control
jmarkel44 74:03ccf04998b5 156 Message_t msg;
jmarkel44 74:03ccf04998b5 157 msg.control = CONTROL_SETPOINT;
jmarkel44 74:03ccf04998b5 158 strncpy(msg.controlFile, i->name, sizeof(msg.controlFile));
jmarkel44 74:03ccf04998b5 159 int rc = createControl(&msg);
jmarkel44 74:03ccf04998b5 160 if ( rc != 0 ) {
jmarkel44 121:650205ffa656 161 logError("%s: failed to load %s", __func__, msg.controlFile);
jmarkel44 74:03ccf04998b5 162 } else {
jmarkel44 74:03ccf04998b5 163 printf("\r control %s loaded.\n", msg.controlFile);
jmarkel44 74:03ccf04998b5 164 }
jmarkel44 74:03ccf04998b5 165 } else if ( strncmp( i->name, CONTROL_TM_STR, strlen(CONTROL_TM_STR)) == 0 ) {
jmarkel44 121:650205ffa656 166 // create the timer control
jmarkel44 74:03ccf04998b5 167 Message_t msg;
jmarkel44 74:03ccf04998b5 168 msg.control = CONTROL_TIMER;
jmarkel44 74:03ccf04998b5 169 strncpy(msg.controlFile, i->name, sizeof(msg.controlFile));
jmarkel44 74:03ccf04998b5 170 int rc = createControl(&msg);
jmarkel44 74:03ccf04998b5 171 if ( rc != 0 ) {
jmarkel44 121:650205ffa656 172 logError("%s: failed to load %s", __func__, msg.controlFile);
jmarkel44 121:650205ffa656 173
jmarkel44 74:03ccf04998b5 174 } else {
jmarkel44 74:03ccf04998b5 175 printf("\r control %s loaded.\n", msg.controlFile);
jmarkel44 74:03ccf04998b5 176 }
jmarkel44 230:11765008ff3a 177 } else if ( strncmp( i->name, CONTROL_COMP_STR, strlen(CONTROL_COMP_STR)) == 0 ) {
jmarkel44 230:11765008ff3a 178 Message_t msg;
jmarkel44 230:11765008ff3a 179 msg.control = CONTROL_COMPOSITE;
jmarkel44 230:11765008ff3a 180 strncpy(msg.controlFile, i->name, sizeof(msg.controlFile));
jmarkel44 230:11765008ff3a 181 int rc = createControl(&msg);
jmarkel44 230:11765008ff3a 182 if ( rc != 0 ) {
jmarkel44 230:11765008ff3a 183 logError("%s: failed to load %s\n", __func__, msg.controlFile);
jmarkel44 230:11765008ff3a 184 } else {
jmarkel44 230:11765008ff3a 185 printf("\r control %s loaded.\n", msg.controlFile);
jmarkel44 230:11765008ff3a 186 }
jmarkel44 230:11765008ff3a 187 } else if ( strncmp( i->name, CONTROL_CA_STR, strlen(CONTROL_CA_STR)) == 0 ) {
jmarkel44 230:11765008ff3a 188 Message_t msg;
jmarkel44 230:11765008ff3a 189 msg.control = CONTROL_ALGORITHM;
jmarkel44 230:11765008ff3a 190 strncpy(msg.controlFile, i->name, sizeof(msg.controlFile));
jmarkel44 230:11765008ff3a 191 int rc = createControl(&msg);
jmarkel44 230:11765008ff3a 192 if ( rc != 0 ) {
jmarkel44 230:11765008ff3a 193 logError("%s: failed to load %s\n", __func__, msg.controlFile);
jmarkel44 230:11765008ff3a 194 } else {
jmarkel44 230:11765008ff3a 195 printf("\r control %s loaded.\n", msg.controlFile);
jmarkel44 230:11765008ff3a 196 }
jmarkel44 74:03ccf04998b5 197 } else if ( strncmp( i->name, CONTROL_MN_STR, strlen(CONTROL_MN_STR)) == 0 ) {
jmarkel44 126:c85ac6a8e9af 198 // TODO: delete any timed manual control, not continuous...
jmarkel44 126:c85ac6a8e9af 199 GLOBAL_mdot->deleteUserFile(i->name);
jmarkel44 74:03ccf04998b5 200 } else {
jmarkel44 195:21df85341cb3 201 logInfo("\rNot A Control File%s\r\n",i->name);
jmarkel44 74:03ccf04998b5 202 // not a control file
jmarkel44 74:03ccf04998b5 203 }
jmarkel44 74:03ccf04998b5 204 }
jmarkel44 12:ea87887ca7ad 205 }
jmarkel44 12:ea87887ca7ad 206 return 0;
jmarkel44 12:ea87887ca7ad 207 }
jmarkel44 12:ea87887ca7ad 208
jmarkel44 12:ea87887ca7ad 209 /*****************************************************************************
jmarkel44 12:ea87887ca7ad 210 * Function: createControl()
jmarkel44 12:ea87887ca7ad 211 * Description: creates a new control
jmarkel44 12:ea87887ca7ad 212 *
jmarkel44 12:ea87887ca7ad 213 * @param none
jmarkel44 12:ea87887ca7ad 214 * @return none
jmarkel44 12:ea87887ca7ad 215 *****************************************************************************/
jmarkel44 5:5e77a1db4d45 216 static int createControl(const Message_t *msg)
jmarkel44 5:5e77a1db4d45 217 {
jmarkel44 37:7e6986b77f01 218 logInfo("\r%s invoked\n", __func__);
jmarkel44 5:5e77a1db4d45 219
jmarkel44 5:5e77a1db4d45 220 switch (msg->control) {
jmarkel44 5:5e77a1db4d45 221 case CONTROL_SETPOINT: {
jmarkel44 46:4cb96ab2d1c8 222 SetpointControl *setpointControl = new SetpointControl;
jmarkel44 28:c410a61238bb 223 bool rc = setpointControl->load(msg->controlFile);
jmarkel44 19:9bc8fabeddfa 224 if ( rc != true ) {
jmarkel44 19:9bc8fabeddfa 225 logError("%s: failed to load %s\n", __func__, msg->controlFile);
jmarkel44 19:9bc8fabeddfa 226 delete setpointControl;
jmarkel44 19:9bc8fabeddfa 227 } else {
jmarkel44 19:9bc8fabeddfa 228 setpointTable[msg->controlFile] = setpointControl;
jmarkel44 74:03ccf04998b5 229 // start the setpoint control
jmarkel44 74:03ccf04998b5 230 setpointControl->start();
jmarkel44 19:9bc8fabeddfa 231 }
jmarkel44 5:5e77a1db4d45 232 break;
jmarkel44 5:5e77a1db4d45 233 }
jmarkel44 5:5e77a1db4d45 234 case CONTROL_TIMER: {
jmarkel44 46:4cb96ab2d1c8 235 TimerControl *timerControl = new TimerControl;
jmarkel44 28:c410a61238bb 236 bool rc = timerControl->load(msg->controlFile);
jmarkel44 19:9bc8fabeddfa 237 if ( rc != true ) {
jmarkel44 19:9bc8fabeddfa 238 logError("%s: failed to load %s\n", __func__, msg->controlFile);
jmarkel44 19:9bc8fabeddfa 239 delete timerControl;
jmarkel44 19:9bc8fabeddfa 240 } else {
jmarkel44 156:44f87c5a83ae 241 timerTable[timerControl->getOutput()].push_back(timerControl);
jmarkel44 156:44f87c5a83ae 242 sort(timerTable[timerControl->getOutput()].begin(),
jmarkel44 156:44f87c5a83ae 243 timerTable[timerControl->getOutput()].end(),
jmarkel44 156:44f87c5a83ae 244 compareStartTime);
jmarkel44 126:c85ac6a8e9af 245 timerControl->start();
jmarkel44 19:9bc8fabeddfa 246 }
jmarkel44 5:5e77a1db4d45 247 break;
jmarkel44 5:5e77a1db4d45 248 }
jmarkel44 46:4cb96ab2d1c8 249 case CONTROL_MANUAL: {
jmarkel44 46:4cb96ab2d1c8 250 ManualControl *manualControl = new ManualControl;
jmarkel44 46:4cb96ab2d1c8 251 bool rc = manualControl->load(msg->controlFile);
jmarkel44 46:4cb96ab2d1c8 252 if ( rc != true ) {
jmarkel44 46:4cb96ab2d1c8 253 logError("%s: failed to load %s\n", __func__, msg->controlFile);
jmarkel44 46:4cb96ab2d1c8 254 delete manualControl;
jmarkel44 46:4cb96ab2d1c8 255 } else {
jmarkel44 46:4cb96ab2d1c8 256 manualTable[msg->controlFile] = manualControl;
jmarkel44 97:5cf6ab71dcd0 257 // start the manual control
jmarkel44 221:2a5e9902003c 258 manualControl-> start();
jmarkel44 46:4cb96ab2d1c8 259 }
jmarkel44 46:4cb96ab2d1c8 260 break;
jmarkel44 46:4cb96ab2d1c8 261 }
jmarkel44 220:dbe21411f962 262 case CONTROL_COMPOSITE: {
jmarkel44 220:dbe21411f962 263 CompositeControl *compositeControl = new CompositeControl;
jmarkel44 220:dbe21411f962 264 bool rc = compositeControl->load(msg->controlFile);
jmarkel44 220:dbe21411f962 265 if ( rc != true ) {
jmarkel44 220:dbe21411f962 266 logError("%s: failed to load %s\n", __func__, msg->controlFile);
jmarkel44 220:dbe21411f962 267 delete compositeControl;
jmarkel44 220:dbe21411f962 268 } else {
jmarkel44 221:2a5e9902003c 269 printf("\rDEBUG storing the composite control\n");
jmarkel44 221:2a5e9902003c 270 Thread::wait(500);
jmarkel44 220:dbe21411f962 271 compositeTable[msg->controlFile] = compositeControl;
jmarkel44 220:dbe21411f962 272 // add this control to the table
jmarkel44 221:2a5e9902003c 273 compositeControl->start();
jmarkel44 221:2a5e9902003c 274 }
jmarkel44 221:2a5e9902003c 275 break;
jmarkel44 221:2a5e9902003c 276 }
jmarkel44 221:2a5e9902003c 277 case CONTROL_ALGORITHM: {
jmarkel44 221:2a5e9902003c 278 CompositeAlgorithm *compositeAlgorithm = new CompositeAlgorithm;
jmarkel44 221:2a5e9902003c 279 bool rc = compositeAlgorithm->load(msg->controlFile);
jmarkel44 221:2a5e9902003c 280 if ( rc != true ) {
jmarkel44 221:2a5e9902003c 281 logError("%s: failed to load %s\n", __func__, msg->controlFile);
jmarkel44 221:2a5e9902003c 282 } else {
jmarkel44 230:11765008ff3a 283 // add this algorithm to the table
jmarkel44 221:2a5e9902003c 284 algorithmTable[compositeAlgorithm->getId()] = compositeAlgorithm;
jmarkel44 220:dbe21411f962 285 }
jmarkel44 220:dbe21411f962 286 break;
jmarkel44 220:dbe21411f962 287 }
jmarkel44 19:9bc8fabeddfa 288 case CONTROL_PID:
jmarkel44 5:5e77a1db4d45 289 default:
jmarkel44 46:4cb96ab2d1c8 290 logInfo("\r%s: control type %d not implemented yet...\n",
jmarkel44 46:4cb96ab2d1c8 291 __func__, msg->control);
jmarkel44 5:5e77a1db4d45 292 break;
jmarkel44 5:5e77a1db4d45 293 }
jmarkel44 5:5e77a1db4d45 294 return 0;
jmarkel44 5:5e77a1db4d45 295 }
jmarkel44 12:ea87887ca7ad 296
jmarkel44 12:ea87887ca7ad 297 /*****************************************************************************
jmarkel44 12:ea87887ca7ad 298 * Function: modifyControl()
jmarkel44 12:ea87887ca7ad 299 * Description: modifies a control
jmarkel44 12:ea87887ca7ad 300 *
jmarkel44 12:ea87887ca7ad 301 * @param msg
jmarkel44 12:ea87887ca7ad 302 * @return none
jmarkel44 12:ea87887ca7ad 303 *****************************************************************************/
jmarkel44 5:5e77a1db4d45 304 static int modifyControl(const Message_t *msg)
jmarkel44 5:5e77a1db4d45 305 {
jmarkel44 37:7e6986b77f01 306 logInfo("\r%s invoked\n", __func__);
jmarkel44 46:4cb96ab2d1c8 307
jmarkel44 207:55aabde2d4bf 308 switch (msg->control) {
jmarkel44 207:55aabde2d4bf 309 case CONTROL_SETPOINT: {
jmarkel44 207:55aabde2d4bf 310 // find the control in the table
jmarkel44 207:55aabde2d4bf 311 StringSetpointMap::iterator pos;
jmarkel44 207:55aabde2d4bf 312 pos = setpointTable.find(msg->controlFile);
jmarkel44 207:55aabde2d4bf 313 if ( pos != setpointTable.end() ) {
jmarkel44 207:55aabde2d4bf 314 int rc = pos->second->load(msg->controlFile);
jmarkel44 207:55aabde2d4bf 315 if ( rc != true ) {
jmarkel44 208:784c46652863 316 logError("\rFailed to reload the setpoint control %s\n", msg->controlFile);
jmarkel44 207:55aabde2d4bf 317 } else {
jmarkel44 208:784c46652863 318 logInfo("\rReloaded the setpoint control %s\n", msg->controlFile);
jmarkel44 208:784c46652863 319 }
jmarkel44 208:784c46652863 320 }
jmarkel44 208:784c46652863 321 break;
jmarkel44 208:784c46652863 322 }
jmarkel44 208:784c46652863 323 case CONTROL_MANUAL: {
jmarkel44 208:784c46652863 324 // find the manual control in the table
jmarkel44 208:784c46652863 325 StringManualMap::iterator pos;
jmarkel44 208:784c46652863 326 pos = manualTable.find(msg->controlFile);
jmarkel44 208:784c46652863 327 if ( pos != manualTable.end() ) {
jmarkel44 208:784c46652863 328 int rc = pos->second->load(msg->controlFile);
jmarkel44 208:784c46652863 329 if ( rc != true ) {
jmarkel44 208:784c46652863 330 logError("\rFailed to reload the manual control %s\n", msg->controlFile);
jmarkel44 208:784c46652863 331 } else {
jmarkel44 208:784c46652863 332 logInfo("\rReloaded the manual control %s\n", msg->controlFile);
jmarkel44 207:55aabde2d4bf 333 }
jmarkel44 207:55aabde2d4bf 334 }
jmarkel44 207:55aabde2d4bf 335 break;
jmarkel44 207:55aabde2d4bf 336 }
jmarkel44 207:55aabde2d4bf 337 default:
jmarkel44 207:55aabde2d4bf 338 logError("%s: unknown control %d\n", __func__, msg->control);
jmarkel44 207:55aabde2d4bf 339 break;
jmarkel44 207:55aabde2d4bf 340 }
jmarkel44 207:55aabde2d4bf 341
jmarkel44 5:5e77a1db4d45 342 return 0;
jmarkel44 5:5e77a1db4d45 343 }
jmarkel44 12:ea87887ca7ad 344
jmarkel44 12:ea87887ca7ad 345 /*****************************************************************************
jmarkel44 12:ea87887ca7ad 346 * Function: destroyControl()
jmarkel44 12:ea87887ca7ad 347 * Description: destroys a controls
jmarkel44 12:ea87887ca7ad 348 *
jmarkel44 12:ea87887ca7ad 349 * @param msg
jmarkel44 12:ea87887ca7ad 350 * @return none
jmarkel44 12:ea87887ca7ad 351 *****************************************************************************/
jmarkel44 5:5e77a1db4d45 352 static int destroyControl(const Message_t *msg)
jmarkel44 5:5e77a1db4d45 353 {
jmarkel44 37:7e6986b77f01 354 logInfo("\r%s invoked\n", __func__);
jmarkel44 12:ea87887ca7ad 355
jmarkel44 12:ea87887ca7ad 356 switch ( msg->control ) {
jmarkel44 12:ea87887ca7ad 357 case CONTROL_SETPOINT: {
jmarkel44 12:ea87887ca7ad 358 StringSetpointMap::iterator pos;
jmarkel44 12:ea87887ca7ad 359 pos = setpointTable.find(msg->controlFile);
jmarkel44 12:ea87887ca7ad 360 if ( pos != setpointTable.end() ) {
jmarkel44 196:78397baf0802 361 GLOBAL_mdot->deleteUserFile(msg->controlFile);
jmarkel44 196:78397baf0802 362 logInfo("%s: deleted %s", __func__, msg->controlFile);
jmarkel44 74:03ccf04998b5 363 pos->second->unregisterControl();
jmarkel44 12:ea87887ca7ad 364 delete (pos->second);
jmarkel44 12:ea87887ca7ad 365 setpointTable.erase(pos);
jmarkel44 195:21df85341cb3 366 } else {
jmarkel44 195:21df85341cb3 367 logError("%s: unable to find %s\n", __func__, msg->controlFile);
jmarkel44 12:ea87887ca7ad 368 }
jmarkel44 12:ea87887ca7ad 369 break;
jmarkel44 12:ea87887ca7ad 370 }
jmarkel44 12:ea87887ca7ad 371 case CONTROL_TIMER: {
jmarkel44 164:7cecd731882e 372 StringVectorTimerMap::iterator pos;
jmarkel44 205:3c84af5f711f 373 #if 0
jmarkel44 12:ea87887ca7ad 374 pos = timerTable.find(msg->controlFile);
jmarkel44 12:ea87887ca7ad 375 if ( pos != timerTable.end() ) {
jmarkel44 196:78397baf0802 376 delete ((*pos)->second);
jmarkel44 12:ea87887ca7ad 377 timerTable.erase(pos);
jmarkel44 12:ea87887ca7ad 378 }
jmarkel44 205:3c84af5f711f 379 #endif
jmarkel44 12:ea87887ca7ad 380 break;
jmarkel44 12:ea87887ca7ad 381 }
jmarkel44 46:4cb96ab2d1c8 382 case CONTROL_MANUAL: {
jmarkel44 46:4cb96ab2d1c8 383 StringManualMap::iterator pos;
jmarkel44 46:4cb96ab2d1c8 384 pos = manualTable.find(msg->controlFile);
jmarkel44 46:4cb96ab2d1c8 385 if ( pos != manualTable.end() ) {
jmarkel44 196:78397baf0802 386 GLOBAL_mdot->deleteUserFile(msg->controlFile);
jmarkel44 196:78397baf0802 387 logInfo("%s: deleted %s", __func__, msg->controlFile);
jmarkel44 97:5cf6ab71dcd0 388 pos->second->unregisterControl();
jmarkel44 46:4cb96ab2d1c8 389 delete (pos->second);
jmarkel44 46:4cb96ab2d1c8 390 manualTable.erase(pos);
jmarkel44 195:21df85341cb3 391 } else {
jmarkel44 195:21df85341cb3 392 logError("%s: unable to find %s", __func__, msg->controlFile);
jmarkel44 46:4cb96ab2d1c8 393 }
jmarkel44 46:4cb96ab2d1c8 394 break;
jmarkel44 46:4cb96ab2d1c8 395 }
jmarkel44 12:ea87887ca7ad 396 default:
jmarkel44 12:ea87887ca7ad 397 break;
jmarkel44 12:ea87887ca7ad 398 }
jmarkel44 12:ea87887ca7ad 399 return 0;
jmarkel44 20:653923c2f37a 400 }