tes

Dependencies:   NetServices mbed C027_Supports mbed-rpcx

Committer:
aldoao
Date:
Wed Sep 11 06:32:20 2019 +0000
Revision:
1:f7d9b0530b73
Parent:
0:64967b7043c2
tipe,1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
irsanjul 0:64967b7043c2 1 #include "mbed.h"
irsanjul 0:64967b7043c2 2 #include "DataProcess.h"
irsanjul 0:64967b7043c2 3
irsanjul 0:64967b7043c2 4 extern Serial dbg;
irsanjul 0:64967b7043c2 5
irsanjul 0:64967b7043c2 6 //-----------------------------------------------------------
irsanjul 0:64967b7043c2 7 // FTL Message
irsanjul 0:64967b7043c2 8 //-----------------------------------------------------------
irsanjul 0:64967b7043c2 9 FtlMessage::FtlMessage()
irsanjul 0:64967b7043c2 10 {
irsanjul 0:64967b7043c2 11 }
irsanjul 0:64967b7043c2 12
irsanjul 0:64967b7043c2 13 FtlMessage::~FtlMessage()
irsanjul 0:64967b7043c2 14 {
irsanjul 0:64967b7043c2 15 }
irsanjul 0:64967b7043c2 16
irsanjul 0:64967b7043c2 17 FtlMessage::msg FtlMessage::checkMessage(const int &lastIdentifier, const int &identifier_)
irsanjul 0:64967b7043c2 18 {
irsanjul 0:64967b7043c2 19 switch(lastIdentifier){
irsanjul 0:64967b7043c2 20
irsanjul 0:64967b7043c2 21 case 'A':
irsanjul 0:64967b7043c2 22 if(identifier_ == 'a')return FtlMessage::OK;
irsanjul 0:64967b7043c2 23 else if(identifier_ == 'n') return FtlMessage::PROERROR;
irsanjul 0:64967b7043c2 24 else if(identifier_ == 's') return FtlMessage::NOTANSWER;
irsanjul 0:64967b7043c2 25 break;
irsanjul 0:64967b7043c2 26
irsanjul 0:64967b7043c2 27 case 'C':
irsanjul 0:64967b7043c2 28 if(identifier_ == 'c')return FtlMessage::OK;
irsanjul 0:64967b7043c2 29 else if(identifier_ == 'n') return FtlMessage::PROERROR;
irsanjul 0:64967b7043c2 30 else if(identifier_ == 's') return FtlMessage::NOTANSWER;
irsanjul 0:64967b7043c2 31 break;
irsanjul 0:64967b7043c2 32
irsanjul 0:64967b7043c2 33 case 'E':
irsanjul 0:64967b7043c2 34 case 'I':
irsanjul 0:64967b7043c2 35 if(identifier_ == 'e')return FtlMessage::OK;
irsanjul 0:64967b7043c2 36 else if(identifier_ == 'i')return FtlMessage::OK;
irsanjul 0:64967b7043c2 37 else if(identifier_ == 'v')return FtlMessage::OK;
irsanjul 0:64967b7043c2 38 else if(identifier_ == 'n') return FtlMessage::PROERROR;
irsanjul 0:64967b7043c2 39 else if(identifier_ == 's') return FtlMessage::NOTANSWER;
irsanjul 0:64967b7043c2 40 break;
irsanjul 0:64967b7043c2 41
irsanjul 0:64967b7043c2 42 case 'R':
irsanjul 0:64967b7043c2 43 case 'V':
irsanjul 0:64967b7043c2 44 if(identifier_ == 'r')return FtlMessage::OK;
irsanjul 0:64967b7043c2 45 else if(identifier_ == 'v')return FtlMessage::OK;
irsanjul 0:64967b7043c2 46 else if(identifier_ == 'n') return FtlMessage::PROERROR;
irsanjul 0:64967b7043c2 47 else if(identifier_ == 's') return FtlMessage::NOTANSWER;
irsanjul 0:64967b7043c2 48 break;
irsanjul 0:64967b7043c2 49
irsanjul 0:64967b7043c2 50 default : return FtlMessage::FAILED;
irsanjul 0:64967b7043c2 51 }
irsanjul 0:64967b7043c2 52 return FtlMessage::FAILED;
irsanjul 0:64967b7043c2 53 }
irsanjul 0:64967b7043c2 54
irsanjul 0:64967b7043c2 55 //-----------------------------------------------------------
irsanjul 0:64967b7043c2 56 // Data Message
irsanjul 0:64967b7043c2 57 //-----------------------------------------------------------
irsanjul 0:64967b7043c2 58 DataMessage::DataMessage()
irsanjul 0:64967b7043c2 59 {
irsanjul 0:64967b7043c2 60 }
irsanjul 0:64967b7043c2 61
irsanjul 0:64967b7043c2 62 DataMessage::~DataMessage()
irsanjul 0:64967b7043c2 63 {
irsanjul 0:64967b7043c2 64 }
irsanjul 0:64967b7043c2 65
irsanjul 0:64967b7043c2 66 DataMessage::msg DataMessage::processFromSlave(int identifier_,std::string buff, _CALLBACKPTR cb, void* param)
irsanjul 0:64967b7043c2 67 {
irsanjul 0:64967b7043c2 68 int res = 0;
irsanjul 0:64967b7043c2 69 switch(identifier_){
irsanjul 0:64967b7043c2 70 case 'e':
irsanjul 0:64967b7043c2 71 case 'i':
irsanjul 0:64967b7043c2 72 case 'v':
irsanjul 0:64967b7043c2 73 res = cb(buff.c_str(), buff.length(), param);
irsanjul 0:64967b7043c2 74 break;
irsanjul 0:64967b7043c2 75 }
irsanjul 0:64967b7043c2 76 if(res) return DataMessage::OK;
irsanjul 0:64967b7043c2 77 else return DataMessage::FAILED;
irsanjul 0:64967b7043c2 78 }
irsanjul 0:64967b7043c2 79
irsanjul 0:64967b7043c2 80 int DataMessage::_cbstate(const char* buf, int len, MeterState* param)
irsanjul 0:64967b7043c2 81 {
irsanjul 0:64967b7043c2 82 if (param)
irsanjul 0:64967b7043c2 83 {
irsanjul 0:64967b7043c2 84 if(sscanf(buf, "%*[^= ]=%*d,%*[^, ],%*[^, ],%d", param->state) ==1)
irsanjul 0:64967b7043c2 85 {
irsanjul 0:64967b7043c2 86 return 1;
irsanjul 0:64967b7043c2 87 }
irsanjul 0:64967b7043c2 88 }
irsanjul 0:64967b7043c2 89 return 0;
irsanjul 0:64967b7043c2 90 }
irsanjul 0:64967b7043c2 91
irsanjul 0:64967b7043c2 92 DataMessage::msg DataMessage::checkStateMessage(const int &identifier_, const std::string &stream, int *pStep)
irsanjul 0:64967b7043c2 93 {
irsanjul 0:64967b7043c2 94 MeterState mystate;
irsanjul 0:64967b7043c2 95 mystate.state = pStep;
irsanjul 0:64967b7043c2 96 if(processFromSlave(identifier_, stream, _cbstate, &mystate) == DataMessage::OK)
irsanjul 0:64967b7043c2 97 {
irsanjul 0:64967b7043c2 98 dbg.printf("SUKSES BRO\r\n");
irsanjul 0:64967b7043c2 99 return DataMessage::OK;
irsanjul 0:64967b7043c2 100 }
irsanjul 0:64967b7043c2 101 else
irsanjul 0:64967b7043c2 102 {
irsanjul 0:64967b7043c2 103 dbg.printf("GAGAL BRO\r\n");
irsanjul 0:64967b7043c2 104 return DataMessage::FAILED;
irsanjul 0:64967b7043c2 105 }
irsanjul 0:64967b7043c2 106 }
irsanjul 0:64967b7043c2 107
irsanjul 0:64967b7043c2 108 int DataMessage::_cbOstate(const char* buf, int len, OrderState* param)
irsanjul 0:64967b7043c2 109 {
irsanjul 0:64967b7043c2 110 if (param)
irsanjul 0:64967b7043c2 111 {
irsanjul 0:64967b7043c2 112 if(sscanf(buf, "%*[^= ]=%d", param->state) ==1)
irsanjul 0:64967b7043c2 113 {
irsanjul 0:64967b7043c2 114 return 1;
irsanjul 0:64967b7043c2 115 }
irsanjul 0:64967b7043c2 116 }
irsanjul 0:64967b7043c2 117 return 0;
irsanjul 0:64967b7043c2 118 }
irsanjul 0:64967b7043c2 119
irsanjul 0:64967b7043c2 120 DataMessage::msg DataMessage::checkOrderState(const int &identifier_, const std::string &stream, int *pStep)
irsanjul 0:64967b7043c2 121 {
irsanjul 0:64967b7043c2 122 OrderState mystate;
irsanjul 0:64967b7043c2 123 mystate.state = pStep;
irsanjul 0:64967b7043c2 124 if(processFromSlave(identifier_, stream, _cbOstate, &mystate) == DataMessage::OK)
irsanjul 0:64967b7043c2 125 {
irsanjul 0:64967b7043c2 126 dbg.printf("SUKSES BRO\r\n");
irsanjul 0:64967b7043c2 127 return DataMessage::OK;
irsanjul 0:64967b7043c2 128 }
irsanjul 0:64967b7043c2 129 else
irsanjul 0:64967b7043c2 130 {
irsanjul 0:64967b7043c2 131 dbg.printf("GAGAL BRO\r\n");
irsanjul 0:64967b7043c2 132 return DataMessage::FAILED;
irsanjul 0:64967b7043c2 133 }
irsanjul 0:64967b7043c2 134 }
irsanjul 0:64967b7043c2 135
irsanjul 0:64967b7043c2 136 int DataMessage::_cbInterlock(const char* buf, int len, InterlockState* param)
irsanjul 0:64967b7043c2 137 {
irsanjul 0:64967b7043c2 138 if (param)
irsanjul 0:64967b7043c2 139 {
irsanjul 0:64967b7043c2 140 if(sscanf(buf, "%*[^= ]=%*d,%*d,%d,%*s", param->state) ==1)
irsanjul 0:64967b7043c2 141 {
irsanjul 0:64967b7043c2 142 return 1;
irsanjul 0:64967b7043c2 143 }
irsanjul 0:64967b7043c2 144 }
irsanjul 0:64967b7043c2 145 return 0;
irsanjul 0:64967b7043c2 146 }
irsanjul 0:64967b7043c2 147
irsanjul 0:64967b7043c2 148 DataMessage::msg DataMessage::checkInterlock(const int &identifier_, const std::string &stream, int *pStep)
irsanjul 0:64967b7043c2 149 {
irsanjul 0:64967b7043c2 150 InterlockState mystate;
irsanjul 0:64967b7043c2 151 mystate.state = pStep;
irsanjul 0:64967b7043c2 152 if(processFromSlave(identifier_, stream, _cbInterlock, &mystate) == DataMessage::OK)
irsanjul 0:64967b7043c2 153 {
irsanjul 0:64967b7043c2 154 dbg.printf("SUKSES BRO\r\n");
irsanjul 0:64967b7043c2 155 return DataMessage::OK;
irsanjul 0:64967b7043c2 156 }
irsanjul 0:64967b7043c2 157 else
irsanjul 0:64967b7043c2 158 {
irsanjul 0:64967b7043c2 159 dbg.printf("GAGAL BRO\r\n");
irsanjul 0:64967b7043c2 160 return DataMessage::FAILED;
irsanjul 0:64967b7043c2 161 }
irsanjul 0:64967b7043c2 162 }
irsanjul 0:64967b7043c2 163
irsanjul 0:64967b7043c2 164 //-----------------------------------------------------------
irsanjul 0:64967b7043c2 165 DataProcess::DataProcess()
irsanjul 0:64967b7043c2 166 {
irsanjul 0:64967b7043c2 167 stateTmp = 0;
irsanjul 0:64967b7043c2 168 lastState = 0;
irsanjul 0:64967b7043c2 169 OrderStateTmp = 0;
irsanjul 0:64967b7043c2 170 LastOrderState = 0;
irsanjul 0:64967b7043c2 171 InterlockState = 0;
irsanjul 0:64967b7043c2 172 }
irsanjul 0:64967b7043c2 173
irsanjul 0:64967b7043c2 174 DataProcess::~DataProcess()
irsanjul 0:64967b7043c2 175 {
irsanjul 0:64967b7043c2 176 }
irsanjul 0:64967b7043c2 177
irsanjul 0:64967b7043c2 178 void DataProcess::CheckFtlMassage(const int &lastIdentifier, const AruFrm &frm)
irsanjul 0:64967b7043c2 179 {
irsanjul 0:64967b7043c2 180 FtlMsg = FtlMessage::checkMessage(lastIdentifier, frm.Identifier);
irsanjul 0:64967b7043c2 181 return;
irsanjul 0:64967b7043c2 182 }
irsanjul 0:64967b7043c2 183
irsanjul 0:64967b7043c2 184 FtlMessage::msg DataProcess::getFtlMessage()
irsanjul 0:64967b7043c2 185 {
irsanjul 0:64967b7043c2 186 return FtlMsg;
irsanjul 0:64967b7043c2 187 }
irsanjul 0:64967b7043c2 188
irsanjul 0:64967b7043c2 189 DataProcess::state_ DataProcess::checkState()
irsanjul 0:64967b7043c2 190 {
irsanjul 0:64967b7043c2 191 DataProcess::state_ ret;
irsanjul 0:64967b7043c2 192 // int res = stateTmp - lastState;
irsanjul 0:64967b7043c2 193
irsanjul 0:64967b7043c2 194 switch(lastState)
irsanjul 0:64967b7043c2 195 {
irsanjul 0:64967b7043c2 196 case 0:
irsanjul 0:64967b7043c2 197 if(stateTmp == 0)ret = DataProcess::STAYNOL;
irsanjul 0:64967b7043c2 198 else if(stateTmp == 1)ret = DataProcess::STEPUP;
irsanjul 0:64967b7043c2 199 else if(stateTmp == 2)ret = DataProcess::STEPJUMP;
irsanjul 0:64967b7043c2 200 else if(stateTmp == 3)ret = DataProcess::STEPJUMP;
irsanjul 0:64967b7043c2 201 else if(stateTmp == 4)ret = DataProcess::STEPEND;
irsanjul 0:64967b7043c2 202 else if(stateTmp == 5)ret = DataProcess::FINISH;
irsanjul 0:64967b7043c2 203 break;
irsanjul 0:64967b7043c2 204 case 1:
irsanjul 0:64967b7043c2 205 if(stateTmp == 0)ret = DataProcess::STEPDOWN;
irsanjul 0:64967b7043c2 206 else if(stateTmp == 1)ret = DataProcess::STAY;
irsanjul 0:64967b7043c2 207 else if(stateTmp == 2)ret = DataProcess::STEPUP;
irsanjul 0:64967b7043c2 208 else if(stateTmp == 3)ret = DataProcess::STEPJUMP;
irsanjul 0:64967b7043c2 209 else if(stateTmp == 4)ret = DataProcess::STEPEND;
irsanjul 0:64967b7043c2 210 else if(stateTmp == 5)ret = DataProcess::FINISH;
irsanjul 0:64967b7043c2 211 break;
irsanjul 0:64967b7043c2 212 case 2:
irsanjul 0:64967b7043c2 213 if(stateTmp == 0)ret = DataProcess::STEPEND;
irsanjul 0:64967b7043c2 214 else if(stateTmp == 1)ret = DataProcess::STEPDOWN;
irsanjul 0:64967b7043c2 215 else if(stateTmp == 2)ret = DataProcess::STAY;
irsanjul 0:64967b7043c2 216 else if(stateTmp == 3)ret = DataProcess::STEPUP;
irsanjul 0:64967b7043c2 217 else if(stateTmp == 4)ret = DataProcess::STEPEND;
irsanjul 0:64967b7043c2 218 else if(stateTmp == 5)ret = DataProcess::ERROR;
irsanjul 0:64967b7043c2 219 break;
irsanjul 0:64967b7043c2 220 case 3:
irsanjul 0:64967b7043c2 221 if(stateTmp == 0)ret = DataProcess::STEPEND;
irsanjul 0:64967b7043c2 222 else if(stateTmp == 1)ret = DataProcess::ERROR;
irsanjul 0:64967b7043c2 223 else if(stateTmp == 2)ret = DataProcess::STEPDOWN;
irsanjul 0:64967b7043c2 224 else if(stateTmp == 3)ret = DataProcess::STAY;
irsanjul 0:64967b7043c2 225 else if(stateTmp == 4)ret = DataProcess::STEPEND;
irsanjul 0:64967b7043c2 226 else if(stateTmp == 5)ret = DataProcess::ERROR;
irsanjul 0:64967b7043c2 227 break;
irsanjul 0:64967b7043c2 228 case 4:
irsanjul 0:64967b7043c2 229 if(stateTmp == 0)ret = DataProcess::STEPEND;
irsanjul 0:64967b7043c2 230 else if(stateTmp == 1)ret = DataProcess::ERROR;
irsanjul 0:64967b7043c2 231 else if(stateTmp == 2)ret = DataProcess::STEPDOWN;
irsanjul 0:64967b7043c2 232 else if(stateTmp == 3)ret = DataProcess::STEPDOWN;
irsanjul 0:64967b7043c2 233 else if(stateTmp == 4)ret = DataProcess::STAY;
irsanjul 0:64967b7043c2 234 else if(stateTmp == 5)ret = DataProcess::FINISH;
irsanjul 0:64967b7043c2 235 break;
irsanjul 0:64967b7043c2 236 case 5:
irsanjul 0:64967b7043c2 237 if(stateTmp == 0)ret = DataProcess::STEPEND;
irsanjul 0:64967b7043c2 238 else if(stateTmp == 1)ret = DataProcess::ERROR;
irsanjul 0:64967b7043c2 239 else if(stateTmp == 2)ret = DataProcess::ERROR;
irsanjul 0:64967b7043c2 240 else if(stateTmp == 3)ret = DataProcess::ERROR;
irsanjul 0:64967b7043c2 241 else if(stateTmp == 4)ret = DataProcess::STEPEND;
irsanjul 0:64967b7043c2 242 else if(stateTmp == 5)ret = DataProcess::FINISH;
irsanjul 0:64967b7043c2 243 break;
irsanjul 0:64967b7043c2 244 default : ret = DataProcess::ERROR; break;
irsanjul 0:64967b7043c2 245 }
irsanjul 0:64967b7043c2 246
irsanjul 0:64967b7043c2 247 lastState = stateTmp;
irsanjul 0:64967b7043c2 248 return ret;
irsanjul 0:64967b7043c2 249 }
irsanjul 0:64967b7043c2 250
irsanjul 0:64967b7043c2 251 DataProcess::state_ DataProcess::checkOrderState()
irsanjul 0:64967b7043c2 252 {
irsanjul 0:64967b7043c2 253 DataProcess::state_ ret;
irsanjul 0:64967b7043c2 254 switch(OrderStateTmp)
irsanjul 0:64967b7043c2 255 {
irsanjul 0:64967b7043c2 256 case 0:
irsanjul 0:64967b7043c2 257 ret = DataProcess::NOORDER;
irsanjul 0:64967b7043c2 258 break;
irsanjul 0:64967b7043c2 259
irsanjul 0:64967b7043c2 260 case 2:
irsanjul 0:64967b7043c2 261 ret = DataProcess::ORDERRCV;
irsanjul 0:64967b7043c2 262 break;
irsanjul 0:64967b7043c2 263
irsanjul 0:64967b7043c2 264 case 3:
irsanjul 0:64967b7043c2 265 ret = DataProcess::PLANORDERPROC;
irsanjul 0:64967b7043c2 266 break;
irsanjul 0:64967b7043c2 267
irsanjul 0:64967b7043c2 268 case 4:
irsanjul 0:64967b7043c2 269 ret = DataProcess::UNPLANORDERPROC;
irsanjul 0:64967b7043c2 270 break;
irsanjul 0:64967b7043c2 271
irsanjul 0:64967b7043c2 272 case 9:
irsanjul 0:64967b7043c2 273 ret = DataProcess::ORDERFINERROR;
irsanjul 0:64967b7043c2 274 break;
irsanjul 0:64967b7043c2 275
irsanjul 0:64967b7043c2 276 case 10:
irsanjul 0:64967b7043c2 277 ret = DataProcess::ORDERFINNOERROR;
irsanjul 0:64967b7043c2 278 break;
irsanjul 0:64967b7043c2 279 }
irsanjul 0:64967b7043c2 280
irsanjul 0:64967b7043c2 281 return ret;
irsanjul 0:64967b7043c2 282 }
irsanjul 0:64967b7043c2 283
irsanjul 0:64967b7043c2 284 DataProcess::state_ DataProcess::chackInterlock()
irsanjul 0:64967b7043c2 285 {
irsanjul 0:64967b7043c2 286 DataProcess::state_ ret;
irsanjul 0:64967b7043c2 287 if(InterlockState == 1)
irsanjul 0:64967b7043c2 288 {
irsanjul 0:64967b7043c2 289 ret = DataProcess::ACCCLOSED;
irsanjul 0:64967b7043c2 290 }
irsanjul 0:64967b7043c2 291 else if (InterlockState == 2)
irsanjul 0:64967b7043c2 292 {
irsanjul 0:64967b7043c2 293 ret = DataProcess::ACCOPEN;
irsanjul 0:64967b7043c2 294 }
irsanjul 0:64967b7043c2 295 else
irsanjul 0:64967b7043c2 296 {
irsanjul 0:64967b7043c2 297 ret = DataProcess::ERROR;
irsanjul 0:64967b7043c2 298 }
irsanjul 0:64967b7043c2 299
irsanjul 0:64967b7043c2 300 return ret;
irsanjul 0:64967b7043c2 301 }
irsanjul 0:64967b7043c2 302
irsanjul 0:64967b7043c2 303 void DataProcess::CheckDtMassage(const AruFrm &frm)
irsanjul 0:64967b7043c2 304 {
irsanjul 0:64967b7043c2 305 std::string input(frm.Data.begin(), frm.Data.end());
irsanjul 0:64967b7043c2 306
irsanjul 0:64967b7043c2 307 switch(frm.Identifier){
irsanjul 0:64967b7043c2 308 case 'e':
irsanjul 0:64967b7043c2 309 case 'i':
irsanjul 0:64967b7043c2 310 case 'v':
irsanjul 0:64967b7043c2 311 {
irsanjul 0:64967b7043c2 312 if(strstr(input.c_str(), "Meter_State"))
irsanjul 0:64967b7043c2 313 {
irsanjul 0:64967b7043c2 314 DataMsg = DataMessage::checkStateMessage(frm.Identifier, input, &stateTmp);
irsanjul 0:64967b7043c2 315 }
irsanjul 0:64967b7043c2 316 else if(strstr(input.c_str(), "ORDER,State"))
irsanjul 0:64967b7043c2 317 {
irsanjul 0:64967b7043c2 318 DataMsg = DataMessage::checkOrderState(frm.Identifier, input, &OrderStateTmp);
irsanjul 0:64967b7043c2 319 }
irsanjul 0:64967b7043c2 320 else if(strstr(input.c_str(), "Interlock"))
irsanjul 0:64967b7043c2 321 {
irsanjul 0:64967b7043c2 322 DataMsg = DataMessage::checkInterlock(frm.Identifier, input, &InterlockState);
irsanjul 0:64967b7043c2 323 }
irsanjul 0:64967b7043c2 324 else if(strstr(input.c_str(), "Meter_Info"))
irsanjul 0:64967b7043c2 325 {
irsanjul 0:64967b7043c2 326 DataMsg = DataMessage::OK;
irsanjul 0:64967b7043c2 327 }
irsanjul 0:64967b7043c2 328 else
irsanjul 0:64967b7043c2 329 {
irsanjul 0:64967b7043c2 330 DataMsg = DataMessage::FAILED;
irsanjul 0:64967b7043c2 331 }
irsanjul 0:64967b7043c2 332 }
irsanjul 0:64967b7043c2 333 break;
irsanjul 0:64967b7043c2 334 }
irsanjul 0:64967b7043c2 335
irsanjul 0:64967b7043c2 336 return;
irsanjul 0:64967b7043c2 337 }
irsanjul 0:64967b7043c2 338
irsanjul 0:64967b7043c2 339 DataMessage::msg DataProcess::getDtMessage()
irsanjul 0:64967b7043c2 340 {
irsanjul 0:64967b7043c2 341 return DataMsg;
irsanjul 0:64967b7043c2 342 }
irsanjul 0:64967b7043c2 343
irsanjul 0:64967b7043c2 344 //-----------------------------------------------------------