#include "StateController.h" #include "ApplicationController.h" StateController::StateController(QObject *parent) : QObject(parent) {} void StateController::init() { startTimer(1000); connect(&_ApplicationController, SIGNAL(didUnhandledMsgAppController(const QVariantList &)), this , SLOT(doStateControllerUnhandledMsgReceived(const QVariantList &))); _dryDemo.connectToState("Idle" , this, &StateController::onIdleStateChange ); _dryDemo.connectToState("Tx_Params" , this, &StateController::onTreatmentParamsStateChange ); _dryDemo.connectToState("Disinfect" , this, &StateController::onDisinfectStateChange ); initReceivedMessagesHash(); // Todo move this? initBroadcastMessagesHash(); } void StateController::quit() { // TODo fill up } void StateController::doStateControllerUnhandledMsgReceived(const QVariantList &msg) { if (!_dryDemo.isRunning()) { _dryDemo.start(); // TODO why cannot start the state machine somewhere else? } MessageID receivedMsgID = static_cast(msg[0].toUInt()); if (_dryDemoMsgTable.contains(receivedMsgID)) { _activeMessageID = receivedMsgID; _dryDemo.submitEvent("Transition_back_2_idle"); } } void StateController::timerEvent(QTimerEvent *) { if (_dryDemo.activeStateNames().size() > 0) { QString currentState = _dryDemo.activeStateNames()[0]; if (_dryDemoBroadcast.contains(currentState)) { //_dryDemoBroadcast[currentState][0].toUInt() += 1; qDebug() << "In timer event" << currentState << _dryDemoBroadcast[currentState][0]; QVariantList msg = _dryDemoBroadcast[currentState].mid(RESP_MSG_START_INDEX); emit _ApplicationController.didActionTransmit(msg); } } } // ---------------------- Private methods ------------------ // void StateController::initReceivedMessagesHash() { // TODO these should be config _dryDemoMsgTable[ID_UI_RQST_TX].append("Transition_2_Tx_Parms"); _dryDemoMsgTable[ID_UI_RQST_TX].append(static_cast(ID_HD_OP_MODE)); _dryDemoMsgTable[ID_UI_RQST_TX].append(Can_Id::eChlid_HD_UI); _dryDemoMsgTable[ID_UI_RQST_TX].append(MODE_TPAR); _dryDemoMsgTable[ID_UI_RQST_TX].append(0); } void StateController::initBroadcastMessagesHash() { _dryDemoBroadcast["Tx_Params"].append(0); _dryDemoBroadcast["Tx_Params"].append(ID_HD_NEW_PARAMS_RESP); _dryDemoBroadcast["Tx_Params"].append(Can_Id::eChlid_HD_UI); _dryDemoBroadcast["Tx_Params"].append(1); _dryDemoBroadcast["Tx_Params"].append(0); _dryDemoBroadcast["Tx_Params"].append(275); _dryDemoBroadcast["Tx_Params"].append(250); _dryDemoBroadcast["Tx_Params"].append(60); _dryDemoBroadcast["Tx_Params"].append(0); _dryDemoBroadcast["Tx_Params"].append(100); _dryDemoBroadcast["Tx_Params"].append(0); _dryDemoBroadcast["Tx_Params"].append(0); _dryDemoBroadcast["Tx_Params"].append(0); _dryDemoBroadcast["Tx_Params"].append(0); _dryDemoBroadcast["Tx_Params"].append(0); _dryDemoBroadcast["Tx_Params"].append(250); _dryDemoBroadcast["Tx_Params"].append(120); _dryDemoBroadcast["Tx_Params"].append(100); _dryDemoBroadcast["Tx_Params"].append(20); _dryDemoBroadcast["Tx_Params"].append(0.000); _dryDemoBroadcast["Tx_Params"].append(0.000); _dryDemoBroadcast["Tx_Params"].append(36.00); } void StateController::transitionToStandBy() { QVariantList list; list.append(static_cast(ID_HD_OP_MODE)); list.append(Can_Id::eChlid_HD_UI); list.append(MODE_STAN); list.append(0); emit _ApplicationController.didActionTransmit(list); } void StateController::onIdleStateChange(bool active) { if (active) { qDebug() << "Idle on entry"; transitionToStandBy(); if (_activeMessageID != ID_NONE) { QString transitionEvent = _dryDemoMsgTable[_activeMessageID][TRANSITION_EVENT_INDEX].toString(); _dryDemo.submitEvent(transitionEvent); } } else { QVariantList msg = _dryDemoMsgTable[_activeMessageID].mid(RESP_MSG_START_INDEX); emit _ApplicationController.didActionTransmit(msg); } } void StateController::onTreatmentParamsStateChange(bool active) { if (active) { qDebug() << "In treatment params on entry"; } else { qDebug() << "Treatment inactive"; } } void StateController::onDisinfectStateChange(bool active) { if (active) { qDebug() << "Disinfect active"; } }