Index: firmware/App/Controllers/PresOccl.c =================================================================== diff -u -r921034ee7092206a50183eacfaa73b436d2dee5f -raceb6e5388e905d119c5c379bc97ced0720aa270 --- firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 921034ee7092206a50183eacfaa73b436d2dee5f) +++ firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision aceb6e5388e905d119c5c379bc97ced0720aa270) @@ -66,6 +66,7 @@ #define VENOUS_PRESSURE_MAX_MMHG ( 2000.0F ) ///< Maximum venous pressure reading (in mmHg) for range check. #define VENOUS_PRESSURE_MIN_MMHG ( -1500.0F ) ///< Minimum venous pressure reading (in mmHg) for range check. #define VENOUS_PRESSURE_ND_MAX_MMHG ( 300.0F ) ///< Maximum venous pressure reading (in mmHg) when not dialyzing. +#define VENOUS_PRESSURE_OCCL_OFFSET_MMHG ( 50.0F ) ///< Venous pressure occlusion threshold offset from max alarm limit (in mmHg). #define PSI_TO_MMHG ( 51.7149F ) ///< Conversion factor for converting PSI to mmHg. @@ -91,7 +92,8 @@ #define EMPTY_SALINE_BAG_THRESHOLD_MMHG -300.0F ///< Threshold below which the saline bag is considered empty (in mmHg). TODO - get real threshold from Systems static const U32 EMPTY_SALINE_BAG_PERSISTENCE = ( 250 / TASK_GENERAL_INTERVAL ); ///< Time that saline bag looks empty before saying it is empty. -#define PRES_ALARM_PERSISTENCE ( 1 * MS_PER_SECOND ) ///< Alarm persistence period for pressure alarms. +#define PRES_ALARM_PERSISTENCE ( 1 * MS_PER_SECOND ) ///< Alarm persistence period for pressure alarms. +#define VEN_OCCL_ALARM_PERSISTENCE 100 ///< Alarm persistence period for venous occlusion alarm. /// Measured arterial pressure is filtered w/ 10 second moving average for pressure compensation of flow. #define SIZE_OF_LONG_ART_ROLLING_AVG ( ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) * 10 ) @@ -197,6 +199,7 @@ initPersistentAlarm( ALARM_ID_HD_ARTERIAL_PRESSURE_OUT_OF_RANGE, 0, PRES_ALARM_PERSISTENCE ); initPersistentAlarm( ALARM_ID_HD_VENOUS_PRESSURE_OUT_OF_RANGE, 0, PRES_ALARM_PERSISTENCE ); initPersistentAlarm( ALARM_ID_HD_BP_OCCLUSION_OUT_OF_RANGE, 0, PRES_ALARM_PERSISTENCE ); + initPersistentAlarm( ALARM_ID_HD_VENOUS_LINE_OCCLUSION, 0, VEN_OCCL_ALARM_PERSISTENCE ); lastArterialPressureReadCtr = 0; lastVenousPressureReadCtr = 0; @@ -665,13 +668,19 @@ if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_PRESSURE_CHECKS ) != SW_CONFIG_ENABLE_VALUE ) #endif { - // Range check occlusion sensor + F32 venPres = getMeasuredVenousPressure(); + HD_OP_MODE_T hdMode = getCurrentOperationMode(); + U32 hdSubMode = getCurrentSubMode(); + BOOL txMode = ( MODE_TREA == hdMode ? TRUE : FALSE ); + BOOL ptxMode = ( MODE_PRET == hdMode && hdSubMode > HD_PRE_TREATMENT_CART_INSTALL_STATE ? TRUE : FALSE ); + + // Range check occlusion sensor (OB) if ( TRUE == isPersistentAlarmTriggered( ALARM_ID_HD_BP_OCCLUSION_OUT_OF_RANGE, outOfRange ) ) { SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_BP_OCCLUSION_OUT_OF_RANGE, bpOccl ); } - // Check for occlusion + // Check for BP occlusion if ( bpOccl > ( OCCLUSION_THRESHOLD_OFFSET + bloodPumpOcclusionAfterCartridgeInstall ) ) { signalBloodPumpHardStop(); // Stop pump immediately @@ -681,6 +690,20 @@ { clearAlarmCondition( ALARM_ID_OCCLUSION_BLOOD_PUMP ); } + + // Check for venous occlusion + if ( ( TRUE == txMode || TRUE == ptxMode ) && ( venPres > getS32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_VEN_PRESSURE_HIGH_LIMIT ) + VENOUS_PRESSURE_OCCL_OFFSET_MMHG ) ) + { + if ( TRUE == isPersistentAlarmTriggered( ALARM_ID_HD_VENOUS_LINE_OCCLUSION, TRUE ) ) + { + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_HD_VENOUS_LINE_OCCLUSION, venPres ); + } + } + else + { + clearAlarmCondition( ALARM_ID_HD_VENOUS_LINE_OCCLUSION ); + isPersistentAlarmTriggered( ALARM_ID_HD_VENOUS_LINE_OCCLUSION, FALSE ); + } } } Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -r45627442c3b93ec57ed18cd0943eed2662fb2dbc -raceb6e5388e905d119c5c379bc97ced0720aa270 --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 45627442c3b93ec57ed18cd0943eed2662fb2dbc) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision aceb6e5388e905d119c5c379bc97ced0720aa270) @@ -253,6 +253,18 @@ /*********************************************************************//** * @brief + * The getCurrentSubMode function gets the current operation sub-mode. + * @details Inputs: currentSubMode + * @details Outputs: none + * @return the current operation sub-mode + *************************************************************************/ +U32 getCurrentSubMode( void ) +{ + return currentSubMode; +} + +/*********************************************************************//** + * @brief * The initiateAlarmAction function initiate an alarm or alarm recovery * action according to the current operation mode. * @details Inputs: currentMode Index: firmware/App/Modes/OperationModes.h =================================================================== diff -u -r24b2fe72608344e67ef37234085d15ad5e4fcc37 -raceb6e5388e905d119c5c379bc97ced0720aa270 --- firmware/App/Modes/OperationModes.h (.../OperationModes.h) (revision 24b2fe72608344e67ef37234085d15ad5e4fcc37) +++ firmware/App/Modes/OperationModes.h (.../OperationModes.h) (revision aceb6e5388e905d119c5c379bc97ced0720aa270) @@ -45,6 +45,7 @@ void requestNewOperationMode( HD_OP_MODE_T newMode ); // Request a transition to a new operation mode HD_OP_MODE_T getCurrentOperationMode( void ); // Get the current operation mode HD_OP_MODE_T getPreviousOperationMode( void ); // Get the previous operation mode +U32 getCurrentSubMode( void ); // Get the current sub-mode void initiateAlarmAction( ALARM_ACTION_T action ); // Initiate an alarm or alarm recovery action according to current op mode BOOL testSetOperationMode( HD_OP_MODE_T newMode ); // Force transition to a given mode (if allowed) Index: firmware/App/Modes/Prime.c =================================================================== diff -u -rd4a4438fece666d728dc9825157af6ca99be8eb9 -raceb6e5388e905d119c5c379bc97ced0720aa270 --- firmware/App/Modes/Prime.c (.../Prime.c) (revision d4a4438fece666d728dc9825157af6ca99be8eb9) +++ firmware/App/Modes/Prime.c (.../Prime.c) (revision aceb6e5388e905d119c5c379bc97ced0720aa270) @@ -87,7 +87,7 @@ { 120, 257 }, // DIALYZER_TYPE_BBRAUN_PRO_19H { 87, 233 }, // DIALYZER_TYPE_FRESENIUS_OPTIFLUX_F160NRE { 102, 280 }, // DIALYZER_TYPE_FRESENIUS_OPTIFLUX_F180NRE - { 113, 300 } }; // DIALYZER_TYPE_FRESENIUS_OPTIFLUX_F200NRE + { 113, 348 } }; // DIALYZER_TYPE_FRESENIUS_OPTIFLUX_F200NRE static U32 primeDialysateDialyzerTimeLimit; ///< Time limit in msec for priming dialysate dialyzer path. static U32 primeSalineDialyzerTimeLimit; ///< Time limit in msec for priming saline dialyzer path.