Index: sources/drydemo/StateControllerStandby.cpp =================================================================== diff -u -r6e845078107f7d15a3e471be421d5bce31fc51da -ra271469db538bfc35eba9a56308760893ecbc68e --- sources/drydemo/StateControllerStandby.cpp (.../StateControllerStandby.cpp) (revision 6e845078107f7d15a3e471be421d5bce31fc51da) +++ sources/drydemo/StateControllerStandby.cpp (.../StateControllerStandby.cpp) (revision a271469db538bfc35eba9a56308760893ecbc68e) @@ -1,3 +1,4 @@ +#include #include "StateController.h" #include "ApplicationController.h" @@ -6,7 +7,15 @@ bool StateController::handleDryDemoMenuRequestMessage() { quint32 msgPayload = extractU32DataFromReceivedMessage(ID_UI_CONFIRMATION_RESULT_RESP, 0); - if (msgPayload != UI_MSG_BB_PAYLOAD_ID) { return false; } + if (msgPayload != UI_MSG_BB_PAYLOAD_ID) { + if (msgPayload < NUM_OF_GENERIC_CONFIRM_IDS) { + quint32 confirmStatus = extractU32DataFromReceivedMessage(ID_UI_CONFIRMATION_RESULT_RESP, UI_MSG_BB_STATUS_INDEX); + qint64 currentTimeMS = QDateTime::currentMSecsSinceEpoch(); + _uiConfirmMessages[static_cast(msgPayload)] = {currentTimeMS, static_cast(confirmStatus)}; + _treatmentRcvdMessages[ID_UI_CONFIRMATION_RESULT_RESP].clear(); + } + return false; + } msgPayload = extractU32DataFromReceivedMessage(ID_UI_CONFIRMATION_RESULT_RESP, UI_MSG_BB_STATUS_INDEX); _treatmentStatus.userCmd = static_cast(msgPayload); @@ -63,14 +72,16 @@ { _treatmentStatus.hasTxParamsBeenInitialized = false; _treatmentStatus.requestTreatmentReset = true; + _treatmentStatus.isTreatmentComplete = false; _treatmentStatus.treatmentElapsedTimeMS = DEF_TX_ELAPSED_TIME_S * MILLISECONDS_PER_SECOND; _treatmentStatus.stateTransitionEvent = ""; _treatmentStatus.totalFluidBolusDeliveredML = 0.0; _treatmentStatus.accumFluidBolusDeliveredML = 0.0; _treatmentStatus.fluidBolusState = FLUID_BOLUS_IDLE_STATE; _treatmentStatus.txState = TREAT_START_STATE; - _treatmentStatus.rinsebackStates = RINSEBACK_STOP_INIT_STATE; + _treatmentStatus.rinsebackState = RINSEBACK_STOP_INIT_STATE; _treatmentStatus.ufVolDeliveredL = 0.0; + _treatmentStatus.hasRecircBeenRequested = false; } void StateController::triggerAnAlarm(Alarm_List alarmID) @@ -116,6 +127,10 @@ case ALARM_USER_ACTION_END_TREATMENT: _treatmentStatus.stateTransitionEvent = "T_TP_2_TE"; break; + + default: + // Do nothing + break; } // User action has been selected so do not stay in treatment pause @@ -134,6 +149,45 @@ _treatmentRcvdMessages[ID_UI_ALARM_USER_ACTION_REQUEST].clear(); } +void StateController::handleUIConfirmMessage(const Generic_Confirm_Id confirmID, State_Status &status) +{ + if (!_uiConfirmMessages.contains(confirmID)) { return; } + + Generic_Confirm_Command cmd = (hasUIConfirmMessageTimedout(confirmID) ? GENERIC_CONFIRM_CMD_TIMEOUT_CLOSE : GENERIC_CONFIRM_CMD_ACCEPT_CLOSE); + + switch (confirmID) { + case GENERIC_CONFIRM_ID_TREATMENT_END: + if (_uiConfirmMessages[confirmID][UI_CONFIRM_MSG_STATUS_INDEX].toUInt() == CONFIRMATION_REQUEST_STATUS_ACCEPTED) { + _treatmentStatus.stateTransitionEvent = "T_RB_2_TE"; + status = STATE_ON_EXIT; + } + handleSendUIConfirmationMessage(confirmID, cmd); + _uiConfirmMessages.remove(confirmID); + break; + + case GENERIC_CONFIRM_ID_RINSEBACK: + break; + + case GENERIC_CONFIRM_ID_TEMPORARY_BREAK: + break; + + default: + case GENERIC_CONFIRM_ID_NONE: + case GENERIC_CONFIRM_ID_SHUT_DOWN: + // Do nothing + break; + } +} + +bool StateController::hasUIConfirmMessageTimedout(const Generic_Confirm_Id confirmID) +{ + qint64 currentTimeMS = QDateTime::currentMSecsSinceEpoch(); + qint64 startTimeMS = _uiConfirmMessages[confirmID][UI_CONFIRM_MSG_TIMESTAMP_INDEX].toInt(); + bool status = (currentTimeMS - startTimeMS > UI_CONFIRM_RESP_TIMOUT_MS ? true : false); + + return status; +} + void StateController::handleSendUIConfirmationMessage(const Generic_Confirm_Id confirmID, const Generic_Confirm_Command confirmCmd, const Reject_Reasons rejectReason) { QVariantList resp;