Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -r95c81a7d81fa3e6534bcf2e35e1d9b1eba26e372 -r3a0f0f1abc53e6e8ba17c77838bf223cceb79b74 --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 95c81a7d81fa3e6534bcf2e35e1d9b1eba26e372) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 3a0f0f1abc53e6e8ba17c77838bf223cceb79b74) @@ -7,8 +7,8 @@ * * @file AlarmMgmtSWFaults.h * -* @author (last) Praneeth Bunne -* @date (last) 07-Aug-2026 +* @author (last) Vijay Pamula +* @date (last) 12-Aug-2026 * * @author (original) Sean Nash * @date (original) 01-Aug-2024 @@ -204,8 +204,10 @@ SW_FAULT_ID_TD_BP_MODULE_STATE = 173, SW_FAULT_ID_INVALID_RINSEBACK_STATE = 174, SW_FAULT_ID_TREATMENT_INVALID_RECIRC_STATE = 175, - SW_FAULT_ID_TREATMENT_END_INVALID_STATE=176, - NUM_OF_SW_FAULT_IDS + SW_FAULT_ID_TD_INVALID_PRE_TX_HEPARIN_SETUP_STATE =176, + SW_FAULT_ID_TD_INVALID_PRE_TX_HEPARIN_SETUP_REQUESTED_STATE = 177, + SW_FAULT_ID_TREATMENT_END_INVALID_STATE=178, + NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T; /**@}*/ Index: firmware/App/Services/Messaging.c =================================================================== diff -u -r2c16de14d2acd2aa1e36943f95c3855da094dc97 -r3a0f0f1abc53e6e8ba17c77838bf223cceb79b74 --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision 2c16de14d2acd2aa1e36943f95c3855da094dc97) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision 3a0f0f1abc53e6e8ba17c77838bf223cceb79b74) @@ -27,6 +27,7 @@ #include "Compatible.h" #include "CpldInterface.h" #include "DDInterface.h" +#include "TreatmentEnd.h" #include "Ejector.h" #include "FluidBolus.h" #include "FpgaTD.h" @@ -229,6 +230,7 @@ { MSG_ID_TD_GET_ALARM_PROPERTIES_REQUEST, &testGetAlarmPropertiesRequest }, { MSG_ID_TD_RINSEBACK_VOLUME_OVERRIDE, &testRinsebackVolumeOverride }, { MSG_ID_TD_RINSEBACK_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testRinsebackPublishIntervalOverride }, + { MSG_ID_TD_END_TREATMENT_REQUEST, &handleTreatmentEndUserAction }, }; /// Number of entries in the message handling function lookup table. Index: firmware/App/Services/StateServices/FluidBolus.c =================================================================== diff -u -r95c81a7d81fa3e6534bcf2e35e1d9b1eba26e372 -r3a0f0f1abc53e6e8ba17c77838bf223cceb79b74 --- firmware/App/Services/StateServices/FluidBolus.c (.../FluidBolus.c) (revision 95c81a7d81fa3e6534bcf2e35e1d9b1eba26e372) +++ firmware/App/Services/StateServices/FluidBolus.c (.../FluidBolus.c) (revision 3a0f0f1abc53e6e8ba17c77838bf223cceb79b74) @@ -8,7 +8,7 @@ * @file FluidBolus.c * * @author (last) Praneeth Bunne -* @date (last) 04-Aug-2026 +* @date (last) 18-Aug-2026 * * @author (original) Praneeth Bunne * @date (original) 04-Jun-2026 @@ -278,6 +278,13 @@ // Stop substitution pump cmdSubstitutionRate( 0.0F ); bolusVolumeLastUpdateTimeStamp = getMSTimerCount(); + + // Set arterial & venous valves + setValvePosition( H1_VALV, VALVE_POSITION_C_CLOSE ); + setValvePosition( H19_VALV, VALVE_POSITION_C_CLOSE ); + + // Initiate pressure stabilization + signalInitiatePressureStabilization( USE_NORMAL_STABILIZATION_PERIOD ); state = FLUID_BOLUS_WAIT_FOR_PUMPS_STOP_STATE; } Index: firmware/App/Services/TxParams.c =================================================================== diff -u -rc9e30d4b11056ff1fe0080d0278cbd457f17d58e -r3a0f0f1abc53e6e8ba17c77838bf223cceb79b74 --- firmware/App/Services/TxParams.c (.../TxParams.c) (revision c9e30d4b11056ff1fe0080d0278cbd457f17d58e) +++ firmware/App/Services/TxParams.c (.../TxParams.c) (revision 3a0f0f1abc53e6e8ba17c77838bf223cceb79b74) @@ -114,7 +114,12 @@ { CRITICAL_DATA_TYPE_U32, {.uInt=0}, {.uInt=2}, {.uInt=0} }, // TREATMENT_PARAM_HDF_DILUTION { CRITICAL_DATA_TYPE_U32, {.uInt=50}, {.uInt=500}, {.uInt=50} }, // TREATMENT_PARAM_BLOOD_FLOW { CRITICAL_DATA_TYPE_U32, {.uInt=50}, {.uInt=600}, {.uInt=50} }, // TREATMENT_PARAM_DIALYSATE_FLOW + +#if SIMULATION_TEST_RINSEBACK + { CRITICAL_DATA_TYPE_U32, {.uInt=5}, {.uInt=480}, {.uInt=60} }, // TREATMENT_PARAM_TREATMENT_DURATION +#else { CRITICAL_DATA_TYPE_U32, {.uInt=60}, {.uInt=480}, {.uInt=60} }, // TREATMENT_PARAM_TREATMENT_DURATION +#endif { CRITICAL_DATA_TYPE_U32, {.uInt=0}, {.uInt=480}, {.uInt=0} }, // TREATMENT_PARAM_HEPARIN_DELIVERY_DURATION { CRITICAL_DATA_TYPE_U32, {.uInt=0}, {.uInt=0}, {.uInt=0} }, // TREATMENT_PARAM_HEPARIN_TYPE { CRITICAL_DATA_TYPE_U32, {.uInt=0}, {.uInt=5}, {.uInt=0} }, // TREATMENT_PARAM_DRY_BICARB_CART_SIZE @@ -2215,7 +2220,14 @@ if ( TRUE == isTreatmentParamInRange( TREATMENT_PARAM_BLOOD_FLOW, requestedValue ) ) { setTreatmentParameterU32( TREATMENT_PARAM_BLOOD_FLOW, request.flowRate ); - setDialysisBloodPumpFlowRate( request.flowRate ); + if(TREATMENT_DIALYSIS_STATE == getTreatmentState() ) + { + setDialysisBloodPumpFlowRate( request.flowRate ); + } + else if( TREATMENT_END_STATE ==getTreatmentState() ) + { + setDialysisBloodPumpFlowRateEndTx( request.flowRate ); + } response.accepted = TRUE; response.rejectionReason = REQUEST_REJECT_REASON_NONE;