Index: sources/drydemo/StateController.cpp =================================================================== diff -u -rbf271a558491a83b39eb30748784f1b744736dd2 -r4d0fc455e6307639e72db490721c7768a487c014 --- sources/drydemo/StateController.cpp (.../StateController.cpp) (revision bf271a558491a83b39eb30748784f1b744736dd2) +++ sources/drydemo/StateController.cpp (.../StateController.cpp) (revision 4d0fc455e6307639e72db490721c7768a487c014) @@ -35,7 +35,6 @@ _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 @@ -44,6 +43,7 @@ _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}; _alarmTriggerSpecs[ALARM_ID_TD_RECIRC_TIMEOUT ] = {ALARM_PRIORITY_HIGH , ALARM_RECIR_TIMEOUT_RPOPERTIES , ALARM_NOT_TRANS_TO_TX_PAUSE}; + _alarmTriggerSpecs[ALARM_ID_DD_BICARBONATE_CARTRIDGE_LOW_LEVEL ] = {ALARM_PRIORITY_MEDIUM , ALARM_LOW_BICARB_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE }; _alarmTriggerSpecs[ALARM_ID_TD_TREATMENT_MODALITY_CHANGE ] = {ALARM_PRIORITY_MEDIUM , ALARM_TX_MOD_CHNG_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE }; _alarmTriggerSpecs[ALARM_ID_DD_REPLACE_ACID_CONCENTRATE ] = {ALARM_PRIORITY_MEDIUM , ALARM_REPLACE_ACID_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE }; _alarmTriggerSpecs[ALARM_ID_DD_REPLACE_BICARB_CARTRIDGE ] = {ALARM_PRIORITY_MEDIUM , ALARM_REPLACE_BICARB_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE }; @@ -86,11 +86,14 @@ case ID_UI_VITALS_ADJUSTMENT_RQST: case ID_UI_PRESSURE_LIMITS_CHANGE_RQST: case ID_UI_DRY_BICART_DISCONNECT_RQST: + case ID_UI_HDF_ADJUSTMENT_RQST: + if (msg.length() < RCVD_MSG_PAYLOAD_MIN_LEN) { qDebug() << "Msg with incomplete payload" << msg; return; } _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 + if (msg.length() < RCVD_MSG_SQNC_MIN_LEN) { qDebug() << "Msg with incomplete payload (sequence)" << msg; return; } _treatmentRcvdMessages[receivedMsgID] = msg[RCVD_MSG_SQNC_INDEX]; break; @@ -102,7 +105,7 @@ case ID_UI_BLOOD_PRESSURE_RQST: case ID_UI_SETUP_TUBING_SET_CONNECTIONS_CONFIRM_RQST: _treatmentRcvdMessages[receivedMsgID] = 0; - break; + break; case ID_NONE: case ID_TD_OP_MODE_DATA: @@ -149,6 +152,7 @@ case ID_TD_PRESSURE_LIMITS_CHANGE_RESP: case ID_TD_DRY_BICART_DISCONNECT_DATA: case ID_TD_DRY_BICART_DISCONNECT_RESP: + case ID_TD_HDF_ADJUSTMENT_RESP: // Do nothing break; } @@ -192,6 +196,7 @@ handleTDOpModeTransitionBroadcastData(MODE_STAN, 0, BC_IMMEDIATELY); setTreatmentParametersToDefault(); resetDryDemoVariables(); + initializeTreatmentHDFVariables(); // Clear all the alarms triggerAnAlarm(ALARM_ID_NO_ALARM); status = STATE_ON_ACTION; @@ -205,12 +210,18 @@ if (_treatmentStatus.userCmd != CMD_NONE){ if ((_treatmentStatus.userCmd > CMD_STAND_BY) && (_treatmentStatus.userCmd <= CMD_DISINFECTION)) { + if (!_transitionEventsFromStandby.contains(_treatmentStatus.userCmd)) { + // If the message is not part of the event hash table, do not process it + qDebug() << "Cmd does not exist" << _treatmentStatus.userCmd; + _treatmentStatus.userCmd = CMD_NONE; + return; + } _treatmentStatus.stateTransitionEvent = _transitionEventsFromStandby[_treatmentStatus.userCmd][0].toString(); TD_OP_MODE opMode = static_cast(_transitionEventsFromStandby[_treatmentStatus.userCmd][1].toUInt()); qDebug() << "Submit event" << _treatmentStatus.stateTransitionEvent << opMode; handleTDOpModeTransitionBroadcastData(opMode, 0, BC_IMMEDIATELY); _treatmentStatus.userCmd = CMD_NONE; - status = STATE_ON_EXIT; + status = STATE_ON_EXIT; } } // Keep broadcasting the standby state in case the UI and dry-demo got out of sync @@ -246,6 +257,7 @@ handleInitiateTreatmentRequestMessage(status); handleSetupTubingSetConnectionsRequestMessage(); + handleVitalsDataRquest(); if (! _treatmentRcvdMessages[ID_UI_ADJUST_DISPOSABLES_CONFIRM_RQST].isNull()){ _treatmentRcvdMessages[ID_UI_ADJUST_DISPOSABLES_CONFIRM_RQST].clear(); @@ -317,6 +329,8 @@ handleWidenPressureLimitsMessage(); // Pressure methods handleFluidBolusRequestMessage(); + // Vitals method + handleVitalsDataRquest(); if (_treatmentSubStates.fluidBolusState == FLUID_BOLUS_SALINE_IN_PROGRESS_STATE){ handleFluidBolusFluidDelivery(currBloodFlowMLPM); handleFluidBolusBroadcastData(BC_DELAYED); @@ -422,6 +436,7 @@ // HDF methods handleTreatmentHDF(); handleHemodialfiltrationBroadcastData(BC_DELAYED); + handleHDFAdjustmentRequestMessage(); // Treatment complete condition if ((_treatmentStatus.treatmentElapsedTimeMS / MILLISECONDS_PER_SECOND) > (_treatmentParams.treatmentDurationMin * SECONDS_PER_MINUTE)) { @@ -479,6 +494,12 @@ handleTDPressureBroadcastData(BC_DELAYED); handleDeterminePressureLimits(); handleWidenPressureLimitsMessage(); + // Dialysate is in bypass + handleDDGenDialysateModeBroadcastData(BC_DELAYED); + // UF is in pause + handleUltrafiltrationBroadcastData(BC_DELAYED); + // Vitals methods + handleVitalsDataRquest(); }; auto onExit = [=](){ @@ -526,6 +547,8 @@ handleTDPressureBroadcastData(BC_DELAYED); handleDeterminePressureLimits(); handleWidenPressureLimitsMessage(); + // Vitals + handleVitalsDataRquest(); handleUIConfirmMessage(GENERIC_CONFIRM_ID_TREATMENT_END, status); if (_treatmentStatus.hasRecircBeenRequested) { _treatmentStatus.stateTransitionEvent = "T_RB_2_RC"; @@ -576,6 +599,8 @@ handleUIConfirmMessage(GENERIC_CONFIRM_ID_TREATMENT_END, status); handleRecircTimeout(); handleAlarmUserAction(status); + // Vitals + handleVitalsDataRquest(); if (_treatmentStatus.hasResumeTxBeenRequested) { _treatmentStatus.stateTransitionEvent = "T_RC_2_BP"; status = STATE_ON_EXIT; @@ -614,6 +639,8 @@ handleBackToStandbyEvent(status); handleTDOpModeTransitionBroadcastData(MODE_TREA, 0, BC_DELAYED); handleTreatmentStatesBroadcastData(BC_DELAYED); + // Vitals + handleVitalsDataRquest(); }; auto onExit = [=](){ @@ -666,7 +693,7 @@ resp.append(0); GetValue(payload.toByteArray(), index, u32Var); - _treatmentParams.hdfDilution = u32Var.value; + _treatmentParams.hdfDilution = u32Var.value; resp.append(0); GetValue(payload.toByteArray(), index, u32Var); @@ -726,7 +753,7 @@ resp.append(0); GetValue(payload.toByteArray(), index, f32Var); - _treatmentParams.substitutionFluidVolumeL = f32Var.value; + _treatmentParams.hdfSubstitutionFluidVolumeL = f32Var.value; resp.append(0); GetValue(payload.toByteArray(), index, f32Var);