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 21 11:42:24 2016 +0000
Revision:
250:1cd8ec63e9e9
Child:
252:3c9863f951b7
working on failsafes;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jmarkel44 250:1cd8ec63e9e9 1 /******************************************************************************
jmarkel44 250:1cd8ec63e9e9 2 *
jmarkel44 250:1cd8ec63e9e9 3 * File: CompositeControl.cpp
jmarkel44 250:1cd8ec63e9e9 4 * Desciption: ICE Composite Control Class implementation
jmarkel44 250:1cd8ec63e9e9 5 *
jmarkel44 250:1cd8ec63e9e9 6 *****************************************************************************/
jmarkel44 250:1cd8ec63e9e9 7 #include "FailsafeControl.h"
jmarkel44 250:1cd8ec63e9e9 8 #include "cJSON.h"
jmarkel44 250:1cd8ec63e9e9 9 #include "mDot.h"
jmarkel44 250:1cd8ec63e9e9 10 #include "global.h"
jmarkel44 250:1cd8ec63e9e9 11 #include <string>
jmarkel44 250:1cd8ec63e9e9 12 #include <iostream>
jmarkel44 250:1cd8ec63e9e9 13 #include <iomanip>
jmarkel44 250:1cd8ec63e9e9 14
jmarkel44 250:1cd8ec63e9e9 15 extern mDot *GLOBAL_mdot;
jmarkel44 250:1cd8ec63e9e9 16
jmarkel44 250:1cd8ec63e9e9 17 //
jmarkel44 250:1cd8ec63e9e9 18 // method: load
jmarkel44 250:1cd8ec63e9e9 19 // description: load a composite control
jmarkel44 250:1cd8ec63e9e9 20 //
jmarkel44 250:1cd8ec63e9e9 21 // @param none
jmarkel44 250:1cd8ec63e9e9 22 // @return none
jmarkel44 250:1cd8ec63e9e9 23 //
jmarkel44 250:1cd8ec63e9e9 24 bool FailsafeControl::load(std::string _controlFile)
jmarkel44 250:1cd8ec63e9e9 25 {
jmarkel44 250:1cd8ec63e9e9 26 controlFile = _controlFile;
jmarkel44 250:1cd8ec63e9e9 27
jmarkel44 250:1cd8ec63e9e9 28 // open and read from the control file
jmarkel44 250:1cd8ec63e9e9 29 mDot::mdot_file file = GLOBAL_mdot->openUserFile(controlFile.c_str(), mDot::FM_RDONLY);
jmarkel44 250:1cd8ec63e9e9 30 if ( file.fd < 0 ) {
jmarkel44 250:1cd8ec63e9e9 31 logError("%s: failed to open %s\n", __func__, controlFile.c_str());
jmarkel44 250:1cd8ec63e9e9 32 return false;
jmarkel44 250:1cd8ec63e9e9 33 }
jmarkel44 250:1cd8ec63e9e9 34
jmarkel44 250:1cd8ec63e9e9 35 // read the data into a buffer
jmarkel44 250:1cd8ec63e9e9 36 char dataBuf[MAX_FILE_SIZE];
jmarkel44 250:1cd8ec63e9e9 37
jmarkel44 250:1cd8ec63e9e9 38 int bytes_read = GLOBAL_mdot->readUserFile(file, (void *)dataBuf, sizeof(dataBuf));
jmarkel44 250:1cd8ec63e9e9 39 if ( bytes_read != sizeof(dataBuf) ) {
jmarkel44 250:1cd8ec63e9e9 40 logError("%s: failed to read %d bytes from %s", __func__, sizeof(dataBuf), controlFile.c_str());
jmarkel44 250:1cd8ec63e9e9 41 // caller should destroy the object
jmarkel44 250:1cd8ec63e9e9 42 return false;
jmarkel44 250:1cd8ec63e9e9 43 }
jmarkel44 250:1cd8ec63e9e9 44
jmarkel44 250:1cd8ec63e9e9 45 // close the file
jmarkel44 250:1cd8ec63e9e9 46 GLOBAL_mdot->closeUserFile(file);
jmarkel44 250:1cd8ec63e9e9 47
jmarkel44 250:1cd8ec63e9e9 48 // parse the data
jmarkel44 250:1cd8ec63e9e9 49 cJSON * root = cJSON_Parse(dataBuf);
jmarkel44 250:1cd8ec63e9e9 50
jmarkel44 250:1cd8ec63e9e9 51 id = cJSON_GetObjectItem(root, "id")->valuestring;
jmarkel44 250:1cd8ec63e9e9 52 priority = atoi(cJSON_GetObjectItem(root, "priority")->valuestring);
jmarkel44 250:1cd8ec63e9e9 53 input = cJSON_GetObjectItem(root, "input")->valuestring;
jmarkel44 250:1cd8ec63e9e9 54 output = cJSON_GetObjectItem(root, "output")->valuestring;
jmarkel44 250:1cd8ec63e9e9 55
jmarkel44 250:1cd8ec63e9e9 56 hfs_data.value = atof(cJSON_GetObjectItem(root, "hfsValue")->valuestring);
jmarkel44 250:1cd8ec63e9e9 57 hfs_data.dutyCycle = atoi(cJSON_GetObjectItem(root, "hfsDutyCycle")->valuestring);
jmarkel44 250:1cd8ec63e9e9 58 hfs_data.interval = atoi(cJSON_GetObjectItem(root, "hfsInterval")->valuestring);
jmarkel44 250:1cd8ec63e9e9 59
jmarkel44 250:1cd8ec63e9e9 60 lfs_data.value = atof(cJSON_GetObjectItem(root, "lfsValue")->valuestring);
jmarkel44 250:1cd8ec63e9e9 61 lfs_data.dutyCycle = atoi(cJSON_GetObjectItem(root, "lfsDutyCycle")->valuestring);
jmarkel44 250:1cd8ec63e9e9 62 lfs_data.interval = atoi(cJSON_GetObjectItem(root, "lfsInterval")->valuestring);
jmarkel44 250:1cd8ec63e9e9 63
jmarkel44 250:1cd8ec63e9e9 64 return true;
jmarkel44 250:1cd8ec63e9e9 65 }
jmarkel44 250:1cd8ec63e9e9 66
jmarkel44 250:1cd8ec63e9e9 67 //
jmarkel44 250:1cd8ec63e9e9 68 // method: start
jmarkel44 250:1cd8ec63e9e9 69 // description: start the failsafe control
jmarkel44 250:1cd8ec63e9e9 70 //
jmarkel44 250:1cd8ec63e9e9 71 // @param none
jmarkel44 250:1cd8ec63e9e9 72 // @return none
jmarkel44 250:1cd8ec63e9e9 73 //
jmarkel44 250:1cd8ec63e9e9 74 void FailsafeControl::start(void)
jmarkel44 250:1cd8ec63e9e9 75 {
jmarkel44 250:1cd8ec63e9e9 76 currentState = STATE_START;
jmarkel44 250:1cd8ec63e9e9 77 }
jmarkel44 250:1cd8ec63e9e9 78
jmarkel44 250:1cd8ec63e9e9 79 //
jmarkel44 250:1cd8ec63e9e9 80 // method: update
jmarkel44 250:1cd8ec63e9e9 81 // description: update the faisafe control
jmarkel44 250:1cd8ec63e9e9 82 //
jmarkel44 250:1cd8ec63e9e9 83 // @param none
jmarkel44 250:1cd8ec63e9e9 84 // @return none
jmarkel44 250:1cd8ec63e9e9 85 //
jmarkel44 250:1cd8ec63e9e9 86 void FailsafeControl::update(void)
jmarkel44 250:1cd8ec63e9e9 87 {
jmarkel44 250:1cd8ec63e9e9 88 switch ( this->currentState ) {
jmarkel44 250:1cd8ec63e9e9 89 case STATE_INIT:
jmarkel44 250:1cd8ec63e9e9 90 // do nothing
jmarkel44 250:1cd8ec63e9e9 91 break;
jmarkel44 250:1cd8ec63e9e9 92 case STATE_START:
jmarkel44 250:1cd8ec63e9e9 93 case STATE_CONTROL_OFF:
jmarkel44 250:1cd8ec63e9e9 94 case STATE_CONTROL_LFS_ON:
jmarkel44 250:1cd8ec63e9e9 95 case STATE_CONTROL_LFS_OFF:
jmarkel44 250:1cd8ec63e9e9 96 case STATE_CONTROL_HFS_ON:
jmarkel44 250:1cd8ec63e9e9 97 case STATE_CONTROL_HFS_OFF:
jmarkel44 250:1cd8ec63e9e9 98 default:
jmarkel44 250:1cd8ec63e9e9 99 break;
jmarkel44 250:1cd8ec63e9e9 100 }
jmarkel44 250:1cd8ec63e9e9 101 }
jmarkel44 250:1cd8ec63e9e9 102
jmarkel44 250:1cd8ec63e9e9 103 //
jmarkel44 250:1cd8ec63e9e9 104 // method: display
jmarkel44 250:1cd8ec63e9e9 105 // description: display the pertinents
jmarkel44 250:1cd8ec63e9e9 106 //
jmarkel44 250:1cd8ec63e9e9 107 // @param none
jmarkel44 250:1cd8ec63e9e9 108 // @return none
jmarkel44 250:1cd8ec63e9e9 109 //
jmarkel44 250:1cd8ec63e9e9 110 void FailsafeControl::display(void)
jmarkel44 250:1cd8ec63e9e9 111 {
jmarkel44 250:1cd8ec63e9e9 112 const char *mapper[] = { "INIT",
jmarkel44 250:1cd8ec63e9e9 113 "START",
jmarkel44 250:1cd8ec63e9e9 114 "CONTROL_OFF",
jmarkel44 250:1cd8ec63e9e9 115 "LFS_ON",
jmarkel44 250:1cd8ec63e9e9 116 "LFS_OFF",
jmarkel44 250:1cd8ec63e9e9 117 "HFS_ON",
jmarkel44 250:1cd8ec63e9e9 118 "HFS_OFF",
jmarkel44 250:1cd8ec63e9e9 119 "invalid"
jmarkel44 250:1cd8ec63e9e9 120 };
jmarkel44 250:1cd8ec63e9e9 121
jmarkel44 250:1cd8ec63e9e9 122 printf("\r\n");
jmarkel44 250:1cd8ec63e9e9 123 std::cout << left << setw(10) << setfill(' ') << "failsafe: ";
jmarkel44 250:1cd8ec63e9e9 124 std::cout << left << setw(32) << setfill(' ') << controlFile;
jmarkel44 250:1cd8ec63e9e9 125 std::cout << left << setw(20) << setfill(' ') << id;
jmarkel44 250:1cd8ec63e9e9 126 std::cout << left << setw(6) << setfill(' ') << priority;
jmarkel44 250:1cd8ec63e9e9 127 std::cout << left << setw(20) << setfill(' ') << input;
jmarkel44 250:1cd8ec63e9e9 128 std::cout << left << setw(20) << setfill(' ') << output;
jmarkel44 250:1cd8ec63e9e9 129 std::cout << left << setw(16) << setfill(' ') << mapper[currentState];
jmarkel44 250:1cd8ec63e9e9 130 std::cout << left << setw(12) << setfill(' ') << "lfs-> " << lfs_data.value << ":" << lfs_data.dutyCycle << ":" << lfs_data.interval;
jmarkel44 250:1cd8ec63e9e9 131 std::cout << right << setw(12) << setfill(' ') << "hfs-> " << hfs_data.value << ":" << hfs_data.dutyCycle << ":" << hfs_data.interval;
jmarkel44 250:1cd8ec63e9e9 132
jmarkel44 250:1cd8ec63e9e9 133 std::cout.flush();
jmarkel44 250:1cd8ec63e9e9 134 }