Index: sources/StateController.cpp =================================================================== diff -u -raf84a44034a877134a53b6b48b016d409f843380 -rb4e5f0d4181127e7941f8ae437e1f61c5c746091 --- sources/StateController.cpp (.../StateController.cpp) (revision af84a44034a877134a53b6b48b016d409f843380) +++ sources/StateController.cpp (.../StateController.cpp) (revision b4e5f0d4181127e7941f8ae437e1f61c5c746091) @@ -1,4 +1,6 @@ +#include + #include "StateController.h" #include "ApplicationController.h" #include "types.h" @@ -20,10 +22,15 @@ _dryDemo.connectToState("BP_HR" , this, &StateController::onBPHRStateChange ); _dryDemo.connectToState("Ultrafiltraion" , this, &StateController::onUltrafiltrationStateChange ); _dryDemo.connectToState("Connection" , this, &StateController::onConnectionStateChange ); + _dryDemo.connectToState("Start_Tx" , this, &StateController::onStartTreatmentStateChange ); + _dryDemo.connectToState("Blood_Prime" , this, &StateController::onTreatmentBloodPrimeStateChange); + _dryDemo.connectToState("Treatment" , this, &StateController::onTreatmentTreatmentStateChange ); + _dryDemo.connectToState("End_Tx" , this, &StateController::onEndTreatmentStateChange ); _dryDemo.connectToState("Disinfect" , this, &StateController::onDisinfectStateChange ); + _dryDemoCurrentCmd = CMD_NONE; resetVariables(); @@ -153,27 +160,12 @@ _hasUserConfirmedToProceed = true; break; - case ID_USER_TX_TIME_CHANGES_RQST: { - int IDIndex = 0; - Types::U32 txDurMin; - GetValue(msg[1].toByteArray(), IDIndex, txDurMin); - - qDebug() << "New treat time" << txDurMin.value; - - _prescribedTreatmentTimeS *= MINUTES_TO_SECONDS; - - msgBack.clear(); - msgBack.append(static_cast(ID_USER_TX_TIME_CHANGES_RESP)); - msgBack.append(Can_Id::eChlid_HD_UI); - msgBack.append(1); - msgBack.append(0); - msgBack.append(txDurMin.value); - msgBack.append(DEFAULT_UF_VOLUME_L); - emit _ApplicationController.didActionTransmit(msgBack); - } + case ID_USER_TX_TIME_CHANGES_RQST: + _treatmentRcvdMessages[receivedMsgID] = msg[1]; break; case ID_NONE: + case ID_PRESSURE_OCCLUSION_DATA_BC: case ID_TX_TIME_BC: case ID_HD_TX_PARAMS_RANGES_DATA: case ID_HD_TX_STATES_BC: @@ -188,6 +180,7 @@ case ID_HD_SET_UF_VOLUME_RESP: case ID_HD_PATINET_CONNECTION_CONF_RESP: case ID_USER_TX_TIME_CHANGES_RESP: + case ID_HD_BLOOD_PRIME_BC: // Do nothing break; } @@ -200,102 +193,116 @@ void StateController::timerEvent(QTimerEvent *) { - quint16 listSize = _dryDemoCmds[_dryDemoCurrentCmd].size(); + _dryDemo.submitEvent("TimeoutEvent"); //qDebug() << "Index" << _index << listSize; - if ((listSize > 1) && (_index < listSize)) { + if (_isBoradcastListReady) { + sendMessages(true); + } - int counterType = _dryDemoCmds[_dryDemoCurrentCmd][_index][IS_TIMER_INDEX].toInt(); - Counter_Type counterTypeEnum = static_cast(counterType); + if (_isSendListReady) { + sendMessages(false); + } - //qDebug() << "Counter Type" << _dryDemoCurrentCmd << _index << counterTypeEnum; + quint16 listSize = _dryDemoCmds[_dryDemoCurrentCmd].size(); - //if (_dryDemoCmds[_dryDemoCurrentCmd][_index][IS_TIMER_INDEX].toBool()) { - if (counterTypeEnum != COUNTER_NONE) { + if (_dryDemoCurrentCmd != CMD_START_TX) { + if ((listSize > 1) && (_index < listSize)) { - if (_timerBroadcastCount >= NUM_OF_COUNTS_TIMER_BC_EMIT) { + int counterType = _dryDemoCmds[_dryDemoCurrentCmd][_index][IS_TIMER_INDEX].toInt(); + Counter_Type counterTypeEnum = static_cast(counterType); - QVariant tempVar; - QVariantList msg; + //qDebug() << "Counter Type" << _dryDemoCurrentCmd << _index << counterTypeEnum; - switch ( counterTypeEnum) - { - case COUNTER_NONE: - // Do nothing - break; + //if (_dryDemoCmds[_dryDemoCurrentCmd][_index][IS_TIMER_INDEX].toBool()) { + if (counterTypeEnum != COUNTER_NONE) { - case COUNTER_PRE_TX_TIMERS: - if (_currentCounterValue < 0) { - _currentCounterValue = _dryDemoCmds[_dryDemoCurrentCmd][_index][COUNT_DOWN_TIMER_INDEX].toUInt(); - } + if (_timerBroadcastCount >= NUM_OF_COUNTS_TIMER_BC_EMIT) { - _currentCounterValue--; - _timerBroadcastCount = 0; + QVariant tempVar; + QVariantList msg; - tempVar = _dryDemoCmds[_dryDemoCurrentCmd][_index].mid(RESP_MSG_START_INDEX); - msg = tempVar.toList(); - msg[COUNT_DOWN_TIMER_INDEX - RESP_MSG_START_INDEX] = _currentCounterValue; - //qDebug() << "Counters Pre Tx" << _currentCounterValue << _dryDemoCmds[_dryDemoCurrentCmd][_index][COUNT_DOWN_TIMER_INDEX].toUInt(); - emit _ApplicationController.didActionTransmit(msg); - break; + switch ( counterTypeEnum) + { + case COUNTER_NONE: + // Do nothing + break; - case COUNTER_TX_TIMER: - if ((_currentCounterValue < 0) && (_prescribedTreatmentTimeS < 0)) { - _prescribedTreatmentTimeS = _dryDemoCmds[_dryDemoCurrentCmd][_index][TIME_PRESCRIBED_S_INDEX].toUInt(); - quint32 elapsedTimeS = _dryDemoCmds[_dryDemoCurrentCmd][_index][TIME_ELAPSED_S_INDEX].toUInt(); - _currentCounterValue = _prescribedTreatmentTimeS - elapsedTimeS; - } + case COUNTER_PRE_TX_TIMERS: + if (_currentCounterValue < 0) { + _currentCounterValue = _dryDemoCmds[_dryDemoCurrentCmd][_index][COUNT_DOWN_TIMER_INDEX].toUInt(); + } - _currentCounterValue--; - _timerBroadcastCount = 0; + _currentCounterValue--; + _timerBroadcastCount = 0; - tempVar = _dryDemoCmds[_dryDemoCurrentCmd][_index].mid(RESP_MSG_START_INDEX); - msg = tempVar.toList(); - msg[TIME_PRESCRIBED_S_INDEX - RESP_MSG_START_INDEX] = _prescribedTreatmentTimeS; - msg[TIME_REMAINING_S_INDEX - RESP_MSG_START_INDEX] = _currentCounterValue; - qDebug() << "Counters Tx" << _currentCounterValue << _dryDemoCmds[_dryDemoCurrentCmd][_index]; - emit _ApplicationController.didActionTransmit(msg); - break; + tempVar = _dryDemoCmds[_dryDemoCurrentCmd][_index].mid(RESP_MSG_START_INDEX); + msg = tempVar.toList(); + msg[COUNT_DOWN_TIMER_INDEX - RESP_MSG_START_INDEX] = _currentCounterValue; + //qDebug() << "Counters Pre Tx" << _currentCounterValue << _dryDemoCmds[_dryDemoCurrentCmd][_index][COUNT_DOWN_TIMER_INDEX].toUInt(); + emit _ApplicationController.didActionTransmit(msg); + break; - case COUNTER_RINSEBACK_TIMER: - break; - } + case COUNTER_TX_TIMER: + /* + if ((_currentCounterValue < 0) && (_prescribedTreatmentTimeS < 0)) { + _prescribedTreatmentTimeS = _dryDemoCmds[_dryDemoCurrentCmd][_index][TIME_PRESCRIBED_S_INDEX].toUInt(); + quint32 elapsedTimeS = _dryDemoCmds[_dryDemoCurrentCmd][_index][TIME_ELAPSED_S_INDEX].toUInt(); + _currentCounterValue = _prescribedTreatmentTimeS - elapsedTimeS; + } - if (_currentCounterValue == 0) { - _index++; - _currentCounterValue = COUNTER_VAR_DEFAULT_VALUE; + _currentCounterValue--; + _timerBroadcastCount = 0; + + tempVar = _dryDemoCmds[_dryDemoCurrentCmd][_index].mid(RESP_MSG_START_INDEX); + msg = tempVar.toList(); + msg[TIME_PRESCRIBED_S_INDEX - RESP_MSG_START_INDEX] = _prescribedTreatmentTimeS; + msg[TIME_REMAINING_S_INDEX - RESP_MSG_START_INDEX] = _currentCounterValue; + qDebug() << "Counters Tx" << _currentCounterValue << _dryDemoCmds[_dryDemoCurrentCmd][_index]; + emit _ApplicationController.didActionTransmit(msg); + */ + break; + + case COUNTER_RINSEBACK_TIMER: + break; + } + + if (_currentCounterValue == 0) { + _index++; + _currentCounterValue = COUNTER_VAR_DEFAULT_VALUE; + } } + else { + _timerBroadcastCount++; + } } else { - _timerBroadcastCount++; - } - } - else { - if (_broadcastMsgCount <= NUM_OF_COUNTS_TO_BC_MSG) { - emit _ApplicationController.didActionTransmit(_dryDemoCmds[_dryDemoCurrentCmd][_index].mid(RESP_MSG_START_INDEX)); - _broadcastMsgCount++; - } + if (_broadcastMsgCount <= NUM_OF_COUNTS_TO_BC_MSG) { + emit _ApplicationController.didActionTransmit(_dryDemoCmds[_dryDemoCurrentCmd][_index].mid(RESP_MSG_START_INDEX)); + _broadcastMsgCount++; + } - bool isWaitNeeded = _dryDemoCmds[_dryDemoCurrentCmd][_index][IS_WAIT_NEEDED_INDEX].toBool(); + bool isWaitNeeded = _dryDemoCmds[_dryDemoCurrentCmd][_index][IS_WAIT_NEEDED_INDEX].toBool(); - if ((!isWaitNeeded) || (isWaitNeeded && _hasUserConfirmedToProceed)) { - //qDebug() << "Nex Inedx" << _dryDemoCmds[_dryDemoCurrentCmd][_index]; + if ((!isWaitNeeded) || (isWaitNeeded && _hasUserConfirmedToProceed)) { + //qDebug() << "Nex Inedx" << _dryDemoCmds[_dryDemoCurrentCmd][_index]; - if (_broadcastMsgCount > NUM_OF_COUNTS_TO_BC_MSG) { - int nextCmd = _dryDemoCmds[_dryDemoCurrentCmd][_index][NEXT_AUTO_TRANSITION_INDEX].toInt(); - User_Command_ID nextCmdEnum = static_cast(nextCmd); - qDebug() << "NONE" << nextCmd << nextCmdEnum; - if (nextCmdEnum != CMD_NONE) { - qDebug() << "Current Enum" << _dryDemoCurrentCmd; - _dryDemoCurrentCmd = nextCmdEnum; - qDebug() << "New transition" << nextCmdEnum << _dryDemoCurrentCmd << _index; - _dryDemo.submitEvent("Transition_back_2_idle"); - } + if (_broadcastMsgCount > NUM_OF_COUNTS_TO_BC_MSG) { + int nextCmd = _dryDemoCmds[_dryDemoCurrentCmd][_index][NEXT_AUTO_TRANSITION_INDEX].toInt(); + User_Command_ID nextCmdEnum = static_cast(nextCmd); + qDebug() << "NONE" << nextCmd << nextCmdEnum; + if (nextCmdEnum != CMD_NONE) { + qDebug() << "Current Enum" << _dryDemoCurrentCmd; + _dryDemoCurrentCmd = nextCmdEnum; + qDebug() << "New transition" << nextCmdEnum << _dryDemoCurrentCmd << _index; + _dryDemo.submitEvent("Transition_back_2_idle"); + } - _index++; - _broadcastMsgCount = 0; - _hasUserConfirmedToProceed = false; + _index++; + _broadcastMsgCount = 0; + _hasUserConfirmedToProceed = false; + } } } } @@ -862,6 +869,7 @@ _dryDemoCmds[CMD_CONNECTION].append(temp); temp.clear(); + /* temp.append("Transition_2_Start_Tx"); temp.append(false); temp.append(static_cast(CMD_NONE)); // auto transition @@ -932,6 +940,7 @@ temp.append(DEFAULT_TX_PRESCRIBED_DUR_S - DEFAULT_TX_ELAPSED_TIME_S); _dryDemoCmds[CMD_START_TX].append(temp); temp.clear(); + */ temp.append("Transition_2_End_Tx"); temp.append(static_cast(COUNTER_NONE)); // Transition to Tx. This is empty because there is no event @@ -1004,27 +1013,164 @@ _hasUserConfirmedToProceed = false; _currentCounterValue = COUNTER_VAR_DEFAULT_VALUE; _prescribedTreatmentTimeS = PRESC_TIME_DEFAULT_VALUE; + + _stateStatus = STATE_ON_ENTRY; + _isBoradcastListReady = false; + _isSendListReady = false; + + _treatmentVars.accumulatedVolumeML = 0.0; + _treatmentVars.broadcastIntervalCount = 0; + _treatmentVars.treatmentElapsedTimeS = 0; + _treatmentVars.treatmentElapsedTimeS = 0; + _treatmentVars.broadcastIntervalCount = 0; + + _broadcastMessages.clear(); + _sendMessages.clear(); } +void StateController::sendMessages(bool isBroadcast) +{ + QList msgList = _broadcastMessages; + + if (isBroadcast) { + _broadcastMessages.clear(); + } + else + { + msgList = _sendMessages; + _sendMessages.clear(); + + } + + for (auto item: msgList) { + emit _ApplicationController.didActionTransmit(item); + } +} + +void StateController::prepareOcclusionBroadcastData() +{ + QVariantList msg; + msg.append(static_cast(ID_PRESSURE_OCCLUSION_DATA_BC)); + msg.append(Can_Id::eChlid_HD_Sync); + msg.append(10.2); msg.append(12.3); msg.append(0); msg.append(0); msg.append(0); + msg.append(0); msg.append(0); msg.append(0); msg.append(0); msg.append(0); + msg.append(0); msg.append(0); + _broadcastMessages.append(msg); +} + +void StateController::prepareTreatmentTimeBroadcastData() +{ + _treatmentVars.treatmentElapsedTimeS++; + _treatmentVars.remainingTreatmentTimeS = _treatmentVars.prescribedTreatmentTimeS - _treatmentVars.treatmentElapsedTimeS; + + //qDebug() << " Treatment time" << QTime::currentTime() << _treatmentVars._broadcastIntervalCount << _treatmentVars._treatmentElapsedTimeS << _treatmentVars._remainingTreatmentTimeS; + + QVariantList msg; + msg.append(static_cast(ID_TX_TIME_BC)); + msg.append(Can_Id::eChlid_HD_Sync); + msg.append(_treatmentVars.prescribedTreatmentTimeS); + msg.append(_treatmentVars.treatmentElapsedTimeS); + msg.append(_treatmentVars.remainingTreatmentTimeS); + _broadcastMessages.append(msg); +} + +void StateController::prepareTreatmentStatesBroadcastData(const QVariantList &payload) +{ + QVariantList msg; + msg.append(static_cast(ID_HD_TX_STATES_BC)); + msg.append(Can_Id::eChlid_HD_Sync); + + for (auto item: payload) { + msg.append(item); + } + _broadcastMessages.append(msg); +} + +void StateController::handleTreatmentReceivedMessages() +{ + for (auto i = _treatmentRcvdMessages.begin(), end = _treatmentRcvdMessages.end(); i != end; ++i) { + + //qDebug() << "Hash Message" << i.key() << i.value(); + + if (i.key() == ID_USER_TX_TIME_CHANGES_RQST) + { + handleTreatmentTimeChangeRequest(i.value()); + } + } + + _treatmentRcvdMessages.clear(); +} + +void StateController::handleTreatmentTimeChangeRequest(const QVariant &payload) +{ + quint32 accept = REJECT_VALUE; + int IDIndex = 0; + Types::U32 txDurMinType; + GetValue(payload.toByteArray(), IDIndex, txDurMinType); + + quint32 txDurMin = txDurMinType.value; + quint32 elapsedTimeMins = _treatmentVars.treatmentElapsedTimeS / SECONDS_PER_MINUTE; + + if ((txDurMin > elapsedTimeMins) && (txDurMin >= MIN_TX_TIME_MINS)) { + float UFVolumeL = ((txDurMin - elapsedTimeMins) * _treatmentVars.prescribedUFRate) + _treatmentVars.refUFVolumeML; + UFVolumeL /= MILLILITERS_PER_LITER; + + // TODO from treatment params + quint32 dialVolume = 600 * txDurMin; // TODO treatment params + bool isMinTxTimeValid = (txDurMin >= MIN_TX_TIME_MINS ? true : false); + bool isTxTimeValid = (txDurMin <= TX_PARAM_PRESCRIBED_DUR_S ? true : false); + bool isMinUFVolValid = ((UFVolumeL >= 0.0) || (UFVolumeL <= 0.0) ? true : false); // TODO fix the UF Vol + bool isUFVolValid = (UFVolumeL <= TX_PARAM_UF_VOLUME_L ? true : false); + + qDebug() << "Test of tx" << _treatmentVars.prescribedUFRate << elapsedTimeMins << UFVolumeL << isUFVolValid; + + if (isMinTxTimeValid && isTxTimeValid && isMinUFVolValid && isUFVolValid && (dialVolume <= MAX_DIALYSATE_VOLUME_ML)) { + // TODO set UF values + _treatmentVars.prescribedTreatmentTimeS = txDurMin * SECONDS_PER_MINUTE; + _treatmentVars.prescribedMaxUFVolML = UFVolumeL * MILLILITERS_PER_LITER; + accept = ACCEPT_VALUE; + qDebug() << "New tx time" << txDurMin * SECONDS_PER_MINUTE << accept; + } + } + + _isSendListReady = false; + QVariantList resp; + resp.append(static_cast(ID_USER_TX_TIME_CHANGES_RESP)); + resp.append(Can_Id::eChlid_HD_UI); + resp.append(accept); + resp.append(0); + resp.append(_treatmentVars.prescribedTreatmentTimeS); + resp.append(_treatmentVars.prescribedMaxUFVolML); + _sendMessages.append(resp); + _isSendListReady = true; +} + // ----------- State transition methods ---------------- // void StateController::onIdleStateChange(bool active) { if (active) { - qDebug() << "Idle on entry"; + qDebug() << "Idle on entry" << _dryDemoCurrentCmd; - if ((_dryDemoCmds.contains(_dryDemoCurrentCmd)) && (_dryDemoCurrentCmd != CMD_NONE)) { + // TODO remove + if (_dryDemoCurrentCmd == CMD_START_TX) { + qDebug() << "Treatment event stareted"; + _dryDemo.submitEvent("Transition_2_Start_Tx"); + } + else if ((_dryDemoCmds.contains(_dryDemoCurrentCmd)) && (_dryDemoCurrentCmd != CMD_NONE)) { transitionApplicationToStandBy(); QString transitionEvent = _dryDemoCmds[_dryDemoCurrentCmd][_index][TRANSITION_EVENT_INDEX].toString(); qDebug() << "Event" << transitionEvent <<_dryDemoCurrentCmd << _index; _dryDemo.submitEvent(transitionEvent); } } else { - qDebug() << "Idle on exit!"; - QVariantList msg = _dryDemoCmds[_dryDemoCurrentCmd][_index].mid(RESP_MSG_START_INDEX); - emit _ApplicationController.didActionTransmit(msg); - _index++; + if (_dryDemoCurrentCmd != CMD_START_TX) { + qDebug() << "Idle on exit!"; + QVariantList msg = _dryDemoCmds[_dryDemoCurrentCmd][_index].mid(RESP_MSG_START_INDEX); + emit _ApplicationController.didActionTransmit(msg); + _index++; + } } } @@ -1042,6 +1188,10 @@ QVariantList msg = _dryDemoCmds[_dryDemoCurrentCmd][_index].mid(RESP_MSG_START_INDEX); emit _ApplicationController.didActionTransmit(msg); } + else + { + qDebug() << "Sample inactive"; + } } void StateController::onConsumablesStateChange(bool active) @@ -1096,15 +1246,118 @@ } } -void StateController::onStartTreatmentStateChange(bool active) +void StateController::onStartTreatmentStateChange(bool ) { - if (active) { + if (_stateStatus == STATE_ON_ENTRY) { qDebug() << "Start Treatment active"; - QVariantList msg = _dryDemoCmds[_dryDemoCurrentCmd][_index].mid(RESP_MSG_START_INDEX); - emit _ApplicationController.didActionTransmit(msg); + + resetVariables(); + + QVariantList msg; + msg.append(static_cast(ID_HD_OP_MODE)); + msg.append(Can_Id::eChlid_HD_Sync); + msg.append(MODE_TREA); + msg.append(0); + _broadcastMessages.append(msg); + msg.clear(); + + msg.append(static_cast(ID_HD_TX_PARAMS_RANGES_DATA)); + msg.append(Can_Id::eChlid_HD_Sync); + msg.append(0); msg.append(TX_PARAM_PRESCRIBED_DUR_S / SECONDS_PER_MINUTE); + msg.append(0.0); msg.append(TX_PARAM_UF_VOLUME_L); + msg.append(MIN_DIAL_RATE_MLPM); msg.append(MAX_DIAL_RATE_MLPM); + _broadcastMessages.append(msg); + msg.clear(); + + msg.append(1); msg.append(0); msg.append(0); msg.append(0); msg.append(0); + msg.append(0); msg.append(0); msg.append(0); msg.append(0); msg.append(0); + msg.append(0); + prepareTreatmentStatesBroadcastData(msg); + + + _treatmentVars.prescribedMaxUFVolML = TX_PARAM_UF_VOLUME_L * MILLILITERS_PER_LITER; + _treatmentVars.prescribedUFRate = _treatmentVars.prescribedMaxUFVolML / (TX_PARAM_PRESCRIBED_DUR_S / SECONDS_PER_MINUTE); + _treatmentVars.refUFVolumeML = 0.0; + + _isBoradcastListReady = true; + _stateStatus = STATE_ON_EXIT; } + else if (_stateStatus == STATE_ON_EXIT) + { + _stateStatus = STATE_ON_ENTRY; + _dryDemo.submitEvent("Start_Tx_2_Blood_Prime"); + } } +void StateController::onTreatmentBloodPrimeStateChange(bool) +{ + _treatmentVars.broadcastIntervalCount++; + + if (_treatmentVars.accumulatedVolumeML > BLOOD_PRIME_VOLUME_ML) { + _stateStatus = STATE_ON_EXIT; + } + + if (_stateStatus == STATE_ON_ENTRY) { + resetVariables(); + qDebug() << "Blood prime enty"; + _stateStatus = STATE_ON_ACTION; + } + else if (_stateStatus == STATE_ON_EXIT) { + qDebug() << "Blood prime exit"; + _stateStatus = STATE_ON_ENTRY; + _dryDemo.submitEvent("Blood_Prime_2_Treatment"); + } + + _treatmentVars.accumulatedVolumeML += (TX_PARAM_BLOOD_FLOW_RATE_MLPM * BLOOD_FLOW_INTEGRATOR); + + if (_treatmentVars.broadcastIntervalCount % NUM_OF_BC_COUNTS_ADJUSTED == 0) { + _isBoradcastListReady = false; + QVariantList msg; + msg.append(static_cast(ID_HD_BLOOD_PRIME_BC)); + msg.append(Can_Id::eChlid_HD_Sync); + msg.append(BLOOD_PRIME_VOLUME_ML); + msg.append(_treatmentVars.accumulatedVolumeML); + _broadcastMessages.append(msg); + prepareOcclusionBroadcastData(); + _isBoradcastListReady = true; + } +} + +void StateController::onTreatmentTreatmentStateChange(bool) +{ + _treatmentVars.broadcastIntervalCount++; + + handleTreatmentReceivedMessages(); + + if (_stateStatus == STATE_ON_ENTRY) { + resetVariables(); + qDebug() << "Treatment Treatment state"; + _treatmentVars.prescribedTreatmentTimeS = TX_PARAM_PRESCRIBED_DUR_S; + _treatmentVars.treatmentElapsedTimeS = DEFAULT_TX_ELAPSED_TIME_S; + _stateStatus = STATE_ON_ACTION; + } + else if (_stateStatus == STATE_ON_EXIT) { + qDebug() << "Treat Treatment exit"; + // _dryDemo.submitEvent("Treatment_2_End_Treatment"); + } + + if (_treatmentVars.broadcastIntervalCount % NUM_OF_BC_COUNTS_ADJUSTED == 0) { + _isBoradcastListReady = false; + QVariantList msg; + msg.append(2); msg.append(1); msg.append(0); msg.append(0); msg.append(0); + msg.append(0); msg.append(0); msg.append(0); msg.append(0); msg.append(0); + msg.append(0); + prepareTreatmentStatesBroadcastData(msg); + prepareOcclusionBroadcastData(); + prepareTreatmentTimeBroadcastData(); + _isBoradcastListReady = true; + } + + if (_treatmentVars.remainingTreatmentTimeS <= 0 ) { + _stateStatus = STATE_ON_EXIT; + } +} + void StateController::onEndTreatmentStateChange(bool active) { if (active) { @@ -1121,5 +1374,9 @@ QVariantList msg = _dryDemoCmds[_dryDemoCurrentCmd][_index].mid(RESP_MSG_START_INDEX); emit _ApplicationController.didActionTransmit(msg); } + else + { + qDebug() << "Disinfect exit"; + } }