kjhjhkj
Dependencies: NetServices mbed C027_Supports mbed-rpcx
DataProcess.cpp
- Committer:
- irsanjul
- Date:
- 2019-08-06
- Revision:
- 0:64967b7043c2
File content as of revision 0:64967b7043c2:
#include "mbed.h" #include "DataProcess.h" extern Serial dbg; //----------------------------------------------------------- // FTL Message //----------------------------------------------------------- FtlMessage::FtlMessage() { } FtlMessage::~FtlMessage() { } FtlMessage::msg FtlMessage::checkMessage(const int &lastIdentifier, const int &identifier_) { switch(lastIdentifier){ case 'A': if(identifier_ == 'a')return FtlMessage::OK; else if(identifier_ == 'n') return FtlMessage::PROERROR; else if(identifier_ == 's') return FtlMessage::NOTANSWER; break; case 'C': if(identifier_ == 'c')return FtlMessage::OK; else if(identifier_ == 'n') return FtlMessage::PROERROR; else if(identifier_ == 's') return FtlMessage::NOTANSWER; break; case 'E': case 'I': if(identifier_ == 'e')return FtlMessage::OK; else if(identifier_ == 'i')return FtlMessage::OK; else if(identifier_ == 'v')return FtlMessage::OK; else if(identifier_ == 'n') return FtlMessage::PROERROR; else if(identifier_ == 's') return FtlMessage::NOTANSWER; break; case 'R': case 'V': if(identifier_ == 'r')return FtlMessage::OK; else if(identifier_ == 'v')return FtlMessage::OK; else if(identifier_ == 'n') return FtlMessage::PROERROR; else if(identifier_ == 's') return FtlMessage::NOTANSWER; break; default : return FtlMessage::FAILED; } return FtlMessage::FAILED; } //----------------------------------------------------------- // Data Message //----------------------------------------------------------- DataMessage::DataMessage() { } DataMessage::~DataMessage() { } DataMessage::msg DataMessage::processFromSlave(int identifier_,std::string buff, _CALLBACKPTR cb, void* param) { int res = 0; switch(identifier_){ case 'e': case 'i': case 'v': res = cb(buff.c_str(), buff.length(), param); break; } if(res) return DataMessage::OK; else return DataMessage::FAILED; } int DataMessage::_cbstate(const char* buf, int len, MeterState* param) { if (param) { if(sscanf(buf, "%*[^= ]=%*d,%*[^, ],%*[^, ],%d", param->state) ==1) { return 1; } } return 0; } DataMessage::msg DataMessage::checkStateMessage(const int &identifier_, const std::string &stream, int *pStep) { MeterState mystate; mystate.state = pStep; if(processFromSlave(identifier_, stream, _cbstate, &mystate) == DataMessage::OK) { dbg.printf("SUKSES BRO\r\n"); return DataMessage::OK; } else { dbg.printf("GAGAL BRO\r\n"); return DataMessage::FAILED; } } int DataMessage::_cbOstate(const char* buf, int len, OrderState* param) { if (param) { if(sscanf(buf, "%*[^= ]=%d", param->state) ==1) { return 1; } } return 0; } DataMessage::msg DataMessage::checkOrderState(const int &identifier_, const std::string &stream, int *pStep) { OrderState mystate; mystate.state = pStep; if(processFromSlave(identifier_, stream, _cbOstate, &mystate) == DataMessage::OK) { dbg.printf("SUKSES BRO\r\n"); return DataMessage::OK; } else { dbg.printf("GAGAL BRO\r\n"); return DataMessage::FAILED; } } int DataMessage::_cbInterlock(const char* buf, int len, InterlockState* param) { if (param) { if(sscanf(buf, "%*[^= ]=%*d,%*d,%d,%*s", param->state) ==1) { return 1; } } return 0; } DataMessage::msg DataMessage::checkInterlock(const int &identifier_, const std::string &stream, int *pStep) { InterlockState mystate; mystate.state = pStep; if(processFromSlave(identifier_, stream, _cbInterlock, &mystate) == DataMessage::OK) { dbg.printf("SUKSES BRO\r\n"); return DataMessage::OK; } else { dbg.printf("GAGAL BRO\r\n"); return DataMessage::FAILED; } } //----------------------------------------------------------- DataProcess::DataProcess() { stateTmp = 0; lastState = 0; OrderStateTmp = 0; LastOrderState = 0; InterlockState = 0; } DataProcess::~DataProcess() { } void DataProcess::CheckFtlMassage(const int &lastIdentifier, const AruFrm &frm) { FtlMsg = FtlMessage::checkMessage(lastIdentifier, frm.Identifier); return; } FtlMessage::msg DataProcess::getFtlMessage() { return FtlMsg; } DataProcess::state_ DataProcess::checkState() { DataProcess::state_ ret; // int res = stateTmp - lastState; switch(lastState) { case 0: if(stateTmp == 0)ret = DataProcess::STAYNOL; else if(stateTmp == 1)ret = DataProcess::STEPUP; else if(stateTmp == 2)ret = DataProcess::STEPJUMP; else if(stateTmp == 3)ret = DataProcess::STEPJUMP; else if(stateTmp == 4)ret = DataProcess::STEPEND; else if(stateTmp == 5)ret = DataProcess::FINISH; break; case 1: if(stateTmp == 0)ret = DataProcess::STEPDOWN; else if(stateTmp == 1)ret = DataProcess::STAY; else if(stateTmp == 2)ret = DataProcess::STEPUP; else if(stateTmp == 3)ret = DataProcess::STEPJUMP; else if(stateTmp == 4)ret = DataProcess::STEPEND; else if(stateTmp == 5)ret = DataProcess::FINISH; break; case 2: if(stateTmp == 0)ret = DataProcess::STEPEND; else if(stateTmp == 1)ret = DataProcess::STEPDOWN; else if(stateTmp == 2)ret = DataProcess::STAY; else if(stateTmp == 3)ret = DataProcess::STEPUP; else if(stateTmp == 4)ret = DataProcess::STEPEND; else if(stateTmp == 5)ret = DataProcess::ERROR; break; case 3: if(stateTmp == 0)ret = DataProcess::STEPEND; else if(stateTmp == 1)ret = DataProcess::ERROR; else if(stateTmp == 2)ret = DataProcess::STEPDOWN; else if(stateTmp == 3)ret = DataProcess::STAY; else if(stateTmp == 4)ret = DataProcess::STEPEND; else if(stateTmp == 5)ret = DataProcess::ERROR; break; case 4: if(stateTmp == 0)ret = DataProcess::STEPEND; else if(stateTmp == 1)ret = DataProcess::ERROR; else if(stateTmp == 2)ret = DataProcess::STEPDOWN; else if(stateTmp == 3)ret = DataProcess::STEPDOWN; else if(stateTmp == 4)ret = DataProcess::STAY; else if(stateTmp == 5)ret = DataProcess::FINISH; break; case 5: if(stateTmp == 0)ret = DataProcess::STEPEND; else if(stateTmp == 1)ret = DataProcess::ERROR; else if(stateTmp == 2)ret = DataProcess::ERROR; else if(stateTmp == 3)ret = DataProcess::ERROR; else if(stateTmp == 4)ret = DataProcess::STEPEND; else if(stateTmp == 5)ret = DataProcess::FINISH; break; default : ret = DataProcess::ERROR; break; } lastState = stateTmp; return ret; } DataProcess::state_ DataProcess::checkOrderState() { DataProcess::state_ ret; switch(OrderStateTmp) { case 0: ret = DataProcess::NOORDER; break; case 2: ret = DataProcess::ORDERRCV; break; case 3: ret = DataProcess::PLANORDERPROC; break; case 4: ret = DataProcess::UNPLANORDERPROC; break; case 9: ret = DataProcess::ORDERFINERROR; break; case 10: ret = DataProcess::ORDERFINNOERROR; break; } return ret; } DataProcess::state_ DataProcess::chackInterlock() { DataProcess::state_ ret; if(InterlockState == 1) { ret = DataProcess::ACCCLOSED; } else if (InterlockState == 2) { ret = DataProcess::ACCOPEN; } else { ret = DataProcess::ERROR; } return ret; } void DataProcess::CheckDtMassage(const AruFrm &frm) { std::string input(frm.Data.begin(), frm.Data.end()); switch(frm.Identifier){ case 'e': case 'i': case 'v': { if(strstr(input.c_str(), "Meter_State")) { DataMsg = DataMessage::checkStateMessage(frm.Identifier, input, &stateTmp); } else if(strstr(input.c_str(), "ORDER,State")) { DataMsg = DataMessage::checkOrderState(frm.Identifier, input, &OrderStateTmp); } else if(strstr(input.c_str(), "Interlock")) { DataMsg = DataMessage::checkInterlock(frm.Identifier, input, &InterlockState); } else if(strstr(input.c_str(), "Meter_Info")) { DataMsg = DataMessage::OK; } else { DataMsg = DataMessage::FAILED; } } break; } return; } DataMessage::msg DataProcess::getDtMessage() { return DataMsg; } //-----------------------------------------------------------