Index: firmware/App/Controllers/PresOccl.c =================================================================== diff -u -r5dc6f629ae40d8939fd3bd7c4e3dffb04fa137e7 -r69656450319bfcfdeffdc8f11e88084d4ea38d7d --- firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 5dc6f629ae40d8939fd3bd7c4e3dffb04fa137e7) +++ firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 69656450319bfcfdeffdc8f11e88084d4ea38d7d) @@ -54,8 +54,9 @@ #define MAX_TIME_BETWEEN_VENOUS_READINGS ( 500 / TASK_GENERAL_INTERVAL ) ///< Maximum time without fresh inline venous pressure reading. #define OCCLUSION_THRESHOLD 25000 ///< Threshold above which an occlusion is detected. +#define MINIMUM_PRESSURE_READING 2000 ///< Minimum pressure reading limit. +#define MAX_CARTRIDGE_LOADED_LIMIT 20000 ///< Pressure limit when cartridge is considered loaded. #define CARTRIDGE_LOADED_THRESHOLD 5000 ///< Threshold above which a cartridge is considered loaded. -#define MINIMUM_PRESSURE_LIMIT 2000 ///< Pressure reading minimum limit. #define PRES_ALARM_PERSISTENCE ( 1 * MS_PER_SECOND ) ///< Alarm persistence period for pressure alarms. @@ -561,11 +562,10 @@ /*********************************************************************//** * @brief - * The execPresOcclTest function executes the state machine for the - * PresOccl self-test. + * The execPresOcclTest function executes the PresOccl self-test. * @details Inputs: none * @details Outputs: none - * @return the current state of the PresOccl self-test. + * @return the result of the PresOccl self-test. *************************************************************************/ SELF_TEST_STATUS_T execPresOcclTest( void ) { @@ -575,17 +575,17 @@ U32 const dialysateInPressure = getMeasuredDialInPumpOcclusion(); U32 const dialysateOutPressure = getMeasuredDialOutPumpOcclusion(); - if ( ( bpPressure <= MINIMUM_PRESSURE_LIMIT ) || ( bpPressure >= OCCLUSION_THRESHOLD ) ) + if ( ( bpPressure <= MINIMUM_PRESSURE_READING ) || ( bpPressure >= OCCLUSION_THRESHOLD ) ) { result = SELF_TEST_STATUS_FAILED; } - if ( ( dialysateInPressure <= MINIMUM_PRESSURE_LIMIT ) || ( bpPressure >= OCCLUSION_THRESHOLD ) ) + if ( ( dialysateInPressure <= MINIMUM_PRESSURE_READING ) || ( dialysateInPressure >= OCCLUSION_THRESHOLD ) ) { result = SELF_TEST_STATUS_FAILED; } - if ( ( dialysateOutPressure <= MINIMUM_PRESSURE_LIMIT ) || ( bpPressure >= OCCLUSION_THRESHOLD ) ) + if ( ( dialysateOutPressure <= MINIMUM_PRESSURE_READING ) || ( dialysateOutPressure >= OCCLUSION_THRESHOLD ) ) { result = SELF_TEST_STATUS_FAILED; } @@ -594,8 +594,40 @@ return result; } + +/*********************************************************************//** + * @brief + * The execPresOcclDryTest function executes the PresOccl dry self-test. + * @details Inputs: none + * @details Outputs: none + * @return the result of the PresOccl dry self-test. + *************************************************************************/ +SELF_TEST_STATUS_T execPresOcclDryTest( void ) +{ + SELF_TEST_STATUS_T result = SELF_TEST_STATUS_PASSED; + + U32 const bpPressure = getMeasuredBloodPumpOcclusion(); + U32 const dialysateInPressure = getMeasuredDialInPumpOcclusion(); + U32 const dialysateOutPressure = getMeasuredDialOutPumpOcclusion(); + + if ( ( bpPressure <= CARTRIDGE_LOADED_THRESHOLD ) || ( bpPressure >= MAX_CARTRIDGE_LOADED_LIMIT ) ) + { + result = SELF_TEST_STATUS_FAILED; + } + + if ( ( dialysateInPressure <= CARTRIDGE_LOADED_THRESHOLD ) || ( dialysateInPressure >= MAX_CARTRIDGE_LOADED_LIMIT ) ) + { + result = SELF_TEST_STATUS_FAILED; + } + + if ( ( dialysateOutPressure <= CARTRIDGE_LOADED_THRESHOLD ) || ( dialysateOutPressure >= MAX_CARTRIDGE_LOADED_LIMIT ) ) + { + result = SELF_TEST_STATUS_FAILED; + } + + return result; +} - /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ Index: firmware/App/Controllers/PresOccl.h =================================================================== diff -u -r30f049651877229042e3f8700c8596e5b9a1e0f4 -r69656450319bfcfdeffdc8f11e88084d4ea38d7d --- firmware/App/Controllers/PresOccl.h (.../PresOccl.h) (revision 30f049651877229042e3f8700c8596e5b9a1e0f4) +++ firmware/App/Controllers/PresOccl.h (.../PresOccl.h) (revision 69656450319bfcfdeffdc8f11e88084d4ea38d7d) @@ -62,9 +62,10 @@ void initPresOccl( void ); void execPresOccl( void ); + +SELF_TEST_STATUS_T execPresOcclTest( void ); +SELF_TEST_STATUS_T execPresOcclDryTest( void ); -SELF_TEST_STATUS_T execPresOcclTest( void ); - F32 getMeasuredArterialPressure( void ); F32 getMeasuredVenousPressure( void ); U32 getMeasuredBloodPumpOcclusion( void ); Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -rd8b6a463f9e65c8ac145cf634d5d6641fb3bbd89 -r69656450319bfcfdeffdc8f11e88084d4ea38d7d --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision d8b6a463f9e65c8ac145cf634d5d6641fb3bbd89) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 69656450319bfcfdeffdc8f11e88084d4ea38d7d) @@ -360,6 +360,7 @@ HD_PRE_TREATMENT_MODE_STATE_T state = HD_PRE_TREATMENT_CART_INSTALL_STATE; // TODO: handle install verification and transition + transitionToDrySelfTests(); state = HD_PRE_TREATMENT_SELF_TEST_DRY_STATE; return state; @@ -376,13 +377,15 @@ { HD_PRE_TREATMENT_MODE_STATE_T state = HD_PRE_TREATMENT_SELF_TEST_DRY_STATE; + execDrySelfTests(); + if ( FALSE == getDoorState() ) { activateAlarmNoData( ALARM_ID_CARTRIDGE_DOOR_OPENED ); state = HD_PRE_TREATMENT_CART_INSTALL_STATE; } - if ( FALSE == isBloodPumpRunning() ) + if ( TRUE == isDrySelfTestsPassed() ) { transitionToPrime(); state = HD_PRE_TREATMENT_PRIME_STATE; Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -r180f01b2abd71939b5265069e88d85dea4eec393 -r69656450319bfcfdeffdc8f11e88084d4ea38d7d --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 180f01b2abd71939b5265069e88d85dea4eec393) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 69656450319bfcfdeffdc8f11e88084d4ea38d7d) @@ -15,6 +15,7 @@ * ***************************************************************************/ +#include "AirTrap.h" #include "BloodFlow.h" #include "DialInFlow.h" #include "DialOutFlow.h" @@ -243,8 +244,6 @@ *************************************************************************/ void execDrySelfTests( void ) { - SELF_TEST_STATUS_T result = SELF_TEST_STATUS_PASSED; - // execute dry self-tests state machine switch ( currentDrySelfTestsState ) { @@ -281,7 +280,18 @@ break; case DRY_SELF_TESTS_OCCLUSION_SENSORS_STATE: - currentDrySelfTestsState = DRY_SELF_TESTS_COMPLETE; + { + SELF_TEST_STATUS_T const result = execPresOcclDryTest(); + + if ( SELF_TEST_STATUS_PASSED == result ) + { + currentDrySelfTestsState = DRY_SELF_TESTS_COMPLETE; + } + else + { + activateAlarmNoData( ALARM_ID_CARTRIDGE_INSTALLED_IMPROPERLY ); + } + } break; case DRY_SELF_TESTS_COMPLETE: @@ -293,11 +303,6 @@ SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_HD_INVALID_DRY_SELF_TEST_STATE, (U32)currentDrySelfTestsState ); break; } - - if ( SELF_TEST_STATUS_FAILED == result ) - { - SET_ALARM_WITH_1_U32_DATA( ALARM_ID_PRE_TREATMENT_SELF_TEST_FAILURE, currentNoCartSelfTestsState ); - } } /*********************************************************************//**