Index: firmware/App/Controllers/PresOccl.c =================================================================== diff -u -r7499a42cc0f906f9a4a947c82c5b4615217ce7e5 -r818d96fff963c707f5e2cb5aae7bf16f23e4b08a --- firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 7499a42cc0f906f9a4a947c82c5b4615217ce7e5) +++ firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 818d96fff963c707f5e2cb5aae7bf16f23e4b08a) @@ -22,7 +22,8 @@ #include "NVDataMgmt.h" #include "OperationModes.h" #include "PersistentAlarm.h" -#include "SystemCommMessages.h" +#include "SystemCommMessages.h" +#include "SelfTests.h" #include "TaskGeneral.h" #include "Temperatures.h" #include "Timers.h" @@ -709,7 +710,7 @@ static void checkOcclusions( void ) { U32 bpOccl = getMeasuredBloodPumpOcclusion(); - BOOL outOfRange = ( bpOccl < MIN_OCCLUSION_COUNTS || bpOccl > MAX_OCCLUSION_COUNTS ? TRUE : FALSE ); + BOOL outOfRange = ( bpOccl < MIN_OCCLUSION_COUNTS || bpOccl > MAX_OCCLUSION_COUNTS ? TRUE : FALSE ); #ifndef _RELEASE_ if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_PRESSURE_CHECKS ) != SW_CONFIG_ENABLE_VALUE ) @@ -721,14 +722,41 @@ SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_BP_OCCLUSION_OUT_OF_RANGE, bpOccl ); } - // Check for occlusion - if ( bpOccl > ( OCCLUSION_THRESHOLD_OFFSET + bloodPumpOcclusionAfterCartridgeInstall ) ) + // Check for occlusion in PreTreatment modes when the cartridge is installed + // and setOcclusionInstallLevel has been called. + if( MODE_PRET == getCurrentOperationMode() ) { - signalBloodPumpHardStop(); // Stop pump immediately - SET_ALARM_WITH_1_U32_DATA( ALARM_ID_OCCLUSION_BLOOD_PUMP, bpOccl ) + + if( getPreTreatmentSubState() > HD_PRE_TREATMENT_CART_INSTALL_STATE && getDrySelfTestsState() > DRY_SELF_TESTS_START_STATE ) + { + // Check for occlusion + if ( bpOccl > ( OCCLUSION_THRESHOLD_OFFSET + bloodPumpOcclusionAfterCartridgeInstall ) ) + { + signalBloodPumpHardStop(); // Stop pump immediately + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_OCCLUSION_BLOOD_PUMP, bpOccl ) + } + } } - else + + // Check for occlusion in PreTreatment modes where pumps are moving + else if( MODE_TREA == getCurrentOperationMode() ) { + + if( TREATMENT_STOP_STATE != getTreatmentState()) + { + + // Check for occlusion + if ( bpOccl > ( OCCLUSION_THRESHOLD_OFFSET + bloodPumpOcclusionAfterCartridgeInstall ) ) + { + signalBloodPumpHardStop(); // Stop pump immediately + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_OCCLUSION_BLOOD_PUMP, bpOccl ) + } + } + } + + // Clear alarm regardless of op mode once conditions are met. + if ( bpOccl <= ( OCCLUSION_CLEAR_THRESHOLD_OFFSET + bloodPumpOcclusionAfterCartridgeInstall ) ) + { clearAlarmCondition( ALARM_ID_OCCLUSION_BLOOD_PUMP ); } } Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r8b73263b38f449dacc0795c67a7cf6240cb79026 -r818d96fff963c707f5e2cb5aae7bf16f23e4b08a --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 8b73263b38f449dacc0795c67a7cf6240cb79026) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 818d96fff963c707f5e2cb5aae7bf16f23e4b08a) @@ -478,7 +478,7 @@ * given reservoir. * @details Inputs: reservoirFilledStatus * @details Outputs: none - * @return TRUE if reservoir has been filled, otherwise FALSE; + * @return TRUE if reservoir has been filled, otherwise FALSE *************************************************************************/ BOOL getReservoirFillStatus( DG_RESERVOIR_ID_T reservoirID ) { @@ -487,6 +487,19 @@ /*********************************************************************//** * @brief + * The getPreTreatmentSubState function gets the current + * pre-treatment mode state. + * @details Inputs: currentPreTreatmentState + * @details Outputs: none + * @return currentPreTreatmentState + *************************************************************************/ +HD_PRE_TREATMENT_MODE_STATE_T getPreTreatmentSubState( void ) +{ + return currentPreTreatmentState; +} + +/*********************************************************************//** + * @brief * The publishPreTreatmentState function broadcasts pre-treatment sub-mode * and current sub-mode state. * @details Inputs: pre-treatment sub-mode, state Index: firmware/App/Modes/ModePreTreat.h =================================================================== diff -u -r7498c77e7f99c2d3854df69f1999244de066a504 -r818d96fff963c707f5e2cb5aae7bf16f23e4b08a --- firmware/App/Modes/ModePreTreat.h (.../ModePreTreat.h) (revision 7498c77e7f99c2d3854df69f1999244de066a504) +++ firmware/App/Modes/ModePreTreat.h (.../ModePreTreat.h) (revision 818d96fff963c707f5e2cb5aae7bf16f23e4b08a) @@ -8,7 +8,7 @@ * @file ModePreTreat.h * * @author (last) Dara Navaei -* @date (last) 09-Mar-2022 +* @date (last) 05-Jun-2022 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -45,6 +45,7 @@ U32 recircState; ///< Current re-circulate state U32 patientConnectionState; ///< Current patient connection state U32 wetSelfTestsState; ///< CUrrent wet self-tests state + U32 preTreatmentRsrvrState; ///< Current pre-treatment reservoir state } PRE_TREATMENT_STATE_DATA_T; // ********** public function prototypes ********** Index: firmware/App/Modes/Prime.c =================================================================== diff -u -rb2e2a47fef76897387c630a2508b6bc1521fff34 -r818d96fff963c707f5e2cb5aae7bf16f23e4b08a --- firmware/App/Modes/Prime.c (.../Prime.c) (revision b2e2a47fef76897387c630a2508b6bc1521fff34) +++ firmware/App/Modes/Prime.c (.../Prime.c) (revision 818d96fff963c707f5e2cb5aae7bf16f23e4b08a) @@ -7,8 +7,8 @@ * * @file Prime.c * -* @author (last) Michael Garthwaite -* @date (last) 21-Apr-2022 +* @author (last) Sean Nash +* @date (last) 13-Jul-2022 * * @author (original) Quang Nguyen * @date (original) 08-Dec-2020 @@ -166,6 +166,8 @@ setAlarmUserActionEnabled( ALARM_USER_ACTION_RINSEBACK, FALSE ); setAlarmUserActionEnabled( ALARM_USER_ACTION_END_TREATMENT, TRUE ); + doorClosedRequired( TRUE, TRUE ); + // Pumps should be off signalBloodPumpHardStop(); signalDialInPumpHardStop(); @@ -594,7 +596,7 @@ // Calculate the time out value that must passed prior to checking for the steady state volume in the reservoir primeDialysateDialyzerTimeLimit = (U32)( ( ( DIALYSATE_DIALYZER_TUBE_VOLUME_ML + dialyzerDialysateVolume ) * SEC_PER_MIN * MS_PER_SECOND ) / DIALYSATE_PUMP_PRIME_FLOW_RATE_ML_MIN ); - minimumReservoirVolume = getLoadCellWeight( LOAD_CELL_RESERVOIR_2_PRIMARY ); + minimumReservoirVolume = getLoadCellWeight( LOAD_CELL_RESERVOIR_1_PRIMARY ); steadyVolumeCount = 0; steadyVolumeSamplingStartTime = getMSTimerCount(); primeDialysateDialyzerStartTime = getMSTimerCount();