Index: sources/drydemo/StateController.cpp =================================================================== diff -u -rb9f4ddeb2dec3019b87c712bfe64b8df1d4b328c -rc52253ab5fc73e9b59d9cd99eada3d526d799987 --- sources/drydemo/StateController.cpp (.../StateController.cpp) (revision b9f4ddeb2dec3019b87c712bfe64b8df1d4b328c) +++ sources/drydemo/StateController.cpp (.../StateController.cpp) (revision c52253ab5fc73e9b59d9cd99eada3d526d799987) @@ -32,14 +32,14 @@ _transitionEventsFromStandby[CMD_PRE_TX ] = {"T_SB_2_Pretx", static_cast(MODE_PRET)}; _transitionEventsFromStandby[CMD_BLOOD_PRIME ] = {"T_SB_2_BP" , static_cast(MODE_TREA)}; _transitionEventsFromStandby[CMD_MAIN_TX ] = {"T_SB_2_Tx" , static_cast(MODE_TREA)}; - _transitionEventsFromStandby[CMD_RINSEBACK ] = {"T_SB_2_RB" , static_cast(MODE_TREA)}; _transitionEventsFromStandby[CMD_RICIRCULATE ] = {"T_SB_2_RC" , static_cast(MODE_TREA)}; _transitionEventsFromStandby[CMD_END_TX ] = {"T_SB_2_TE" , static_cast(MODE_TREA)}; // Alarms specs and properties _alarmTriggerSpecs[ALARM_ID_NO_ALARM ] = {ALARM_PRIORITY_NONE, ALARM_NO_ALARM_PROPERTIES , ALARM_NOT_TRANS_TO_TX_PAUSE}; + _alarmTriggerSpecs[ALARM_ID_TD_VENOUS_PRESSURE_LOW ] = {ALARM_PRIORITY_HIGH, ALARM_LOW_VENOUS_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE }; _alarmTriggerSpecs[ALARM_ID_TD_REPLACE_ACID_JUG ] = {ALARM_PRIORITY_HIGH, ALARM_REPLACE_ACID_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE }; _alarmTriggerSpecs[ALARM_ID_TD_TREATMENT_STOPPED_BY_USER ] = {ALARM_PRIORITY_HIGH, ALARM_STOP_TX_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE }; _alarmTriggerSpecs[ALARM_ID_TD_RECIRC_TIMEOUT_WARNING ] = {ALARM_PRIORITY_LOW , ALARM_RECIRC_WARN_PROPERTIES , ALARM_NOT_TRANS_TO_TX_PAUSE}; @@ -53,8 +53,12 @@ void StateController::doStateControllerUnhandledMsgReceived(const QVariantList &msg) { - MessageID receivedMsgID = static_cast(msg[0].toUInt()); // TODO check the length before reading the index + // If the message is empty do not process it. The message variant list must at least contain the message ID as well as the + // sequence number + if (msg.isEmpty()) { return; } + MessageID receivedMsgID = static_cast(msg[RCVD_MSG_MSG_ID_INDEX].toUInt()); // TODO check the length before reading the index + switch(receivedMsgID) { case ID_INITIATE_TREATMENT: @@ -75,9 +79,14 @@ case ID_UI_ALARM_USER_ACTION_REQUEST: case ID_UI_RINSEBACK_CMD_RQST: case ID_UI_RECIRCULATE_RQST: - _treatmentRcvdMessages[receivedMsgID] = msg[1]; + _treatmentRcvdMessages[receivedMsgID] = msg[RCVD_MSG_PAYLOAD_INDEX]; break; + case ID_UI_CHECK_IN: + // For UI check in add the sequence to the the received messages. For check in, the sequence is x -1 and sent back to ack + _treatmentRcvdMessages[receivedMsgID] = msg[RCVD_MSG_SQNC_INDEX]; + break; + //// These messages do not have a payload in from UI so a fake payload is added to be consumed //// and processed case ID_UI_ADJUST_DISPOSABLES_CONFIRM_RQST: @@ -125,6 +134,7 @@ case ID_TD_UI_GENERIC_CONFIRMATION_REQUEST: case ID_TD_RECIRCULATE_RESP: case ID_TD_RECIRCULATE_DATA: + case ID_ACK_MESSAGE_THAT_REQUIRES_ACK: // Do nothing break; } @@ -139,6 +149,9 @@ if (_isBroadcastListReady){ sendMessages(true); } if (_isSendListReady){ sendMessages(false); } + + // Ack UI check in message once received. This is to prevent alarm 100 from UI + handleUICheckInMessage(); } // ---------------------- Private methods ------------------ // @@ -151,7 +164,6 @@ msgList = _sendMessages; _sendMessages.clear(); } - for (auto item: msgList){ emit _ApplicationController.didActionTransmit(item); } } @@ -303,7 +315,7 @@ }; auto onExit = [=](){ - //qDebug() << "Blood prime on exit"; + qDebug() << "Blood prime on exit"; _dryDemo.submitEvent(_treatmentStatus.stateTransitionEvent); status = STATE_ON_ENTRY; }; @@ -349,7 +361,7 @@ handleTreatmentStatesBroadcastData(BC_DELAYED); // Fluid bolus functions handleFluidBolusRequestMessage(); - if (_treatmentSubStates.fluidBolusState == FLUID_BOLUS_SALINE_IN_PROGRESS_STATE) { handleFluidBolusFluidDelivery(_treatmentParams.bloodFlowRateMLPM); } + handleFluidBolusFluidDelivery(_treatmentParams.bloodFlowRateMLPM); handleFluidBolusBroadcastData(BC_DELAYED); // Broadcast functions handleTreatmentTimeProcessAndBroadcastData(BC_DELAYED); @@ -371,8 +383,10 @@ handleTreatmentSettingBroadcastData(BC_DELAYED); handleTreatmentTimeChangeValidation(); handleTreatmentTimeChangeConfirm(); + // Alarm methods handleTriggeredAlarmsToTxPause(status); - + handleTriggerLowVenousAlarmInTx(); + // Treatment complete condition if ((_treatmentStatus.treatmentElapsedTimeMS / MILLISECONDS_PER_SECOND) > (_treatmentParams.treatmentDurationMin * SECONDS_PER_MINUTE)) { // Treatment is complete