Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -r53281f1ea1e79cbd6eb8720851af78f2cb543624 -rc3cf7af051c1ee070df90a9c072df16be48f478f --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 53281f1ea1e79cbd6eb8720851af78f2cb543624) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision c3cf7af051c1ee070df90a9c072df16be48f478f) @@ -21,8 +21,10 @@ #include "DialInFlow.h" #include "DialOutFlow.h" #include "FPGA.h" +#include "ModeTreatmentParams.h" #include "PresOccl.h" #include "SelfTests.h" +#include "SyringePump.h" #include "SystemCommMessages.h" #include "TaskGeneral.h" #include "Timers.h" @@ -62,7 +64,7 @@ #define RESERVOIR_SETTLE_TIME_MS ( 4 * SEC_PER_MIN * MS_PER_SECOND ) ///< Time allotted for reservoir to settle in ms. #define MAX_NO_CARTRIDGE_SELF_TEST_TIME SEC_PER_MIN ///< Maximum no cartridge self-test time (in seconds). -#define MAX_DRY_SELF_TEST_TIME SEC_PER_MIN ///< Maximum dry self-test time (in seconds). +#define MAX_DRY_SELF_TEST_TIME ( 3 * SEC_PER_MIN ) ///< Maximum dry self-test time (in seconds). #define SELF_TEST_TIME_DATA_PUB_INTERVAL ( MS_PER_SECOND ) ///< Interval (ms/task time) at which self-test time data is published on the CAN bus. @@ -110,6 +112,8 @@ static U32 selfTestStartTime; ///< Starting time of self-test (in ms). static U32 selfTestPreviousPublishDataTime; ///< Last time self-test time data is being published (in ms). +static BOOL useHeparin; ///< Flag indicates the user of heparin. + static BOOL selfTestsResumeRequested; ///< Flag indicates user requesting self-tests resume. // ********** private function prototypes ********** @@ -131,6 +135,7 @@ static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorsSetupState( void ); static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorsState( SELF_TEST_STATUS_T *result ); static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorsNormalState( SELF_TEST_STATUS_T *result ); +static DRY_SELF_TESTS_STATE_T handleDrySelfTestSyringePumpPrimeState( void ); static DRY_SELF_TESTS_STATE_T handleDrySelfTestStoppedState( void ); static void handleWetSelfTestsStopRequest( void ); @@ -208,6 +213,10 @@ *************************************************************************/ void transitionToNoCartSelfTests( void ) { + F32 const bolusVol = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ); + F32 const hepRate = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ); + + useHeparin = ( ( bolusVol > 0.0 ) || ( hepRate > 0.0 ) ); currentNoCartSelfTestsState = NO_CART_SELF_TESTS_START_STATE; runPumpStartTime = 0; havePumpsStarted = FALSE; @@ -326,6 +335,10 @@ *************************************************************************/ void transitionToDrySelfTests() { + F32 const bolusVol = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ); + F32 const hepRate = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ); + + useHeparin = ( ( bolusVol > 0.0 ) || ( hepRate > 0.0 ) ); currentDrySelfTestsState = DRY_SELF_TESTS_START_STATE; pressureSelfTestBloodPumpRunStartTime = 0; pressureSelfTestNormalizedStartTime = 0; @@ -353,7 +366,12 @@ { case DRY_SELF_TESTS_START_STATE: #ifdef SKIP_DRY_SELF_TESTS - currentDrySelfTestsState = DRY_SELF_TESTS_COMPLETE_STATE; + // TODO: Remove once dry self-test is ready to use + if ( TRUE == useHeparin ) + { + primeSyringePump(); + } + currentDrySelfTestsState = DRY_SELF_TESTS_SYRINGE_PUMP_PRIME_STATE; #else currentDrySelfTestsState = DRY_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE; #endif @@ -391,6 +409,10 @@ currentDrySelfTestsState = handleDrySelfTestPressureSensorsNormalState( &result ); break; + case DRY_SELF_TESTS_SYRINGE_PUMP_PRIME_STATE: + currentDrySelfTestsState = handleDrySelfTestSyringePumpPrimeState(); + break; + case DRY_SELF_TESTS_STOPPED_STATE: currentDrySelfTestsState = handleDrySelfTestStoppedState(); break; @@ -675,6 +697,11 @@ homeDialInPump(); homeDialOutPump(); + if ( TRUE == useHeparin ) + { + retractSyringePump(); + } + return NO_CART_SELF_TESTS_HOME_VALVES_AND_PUMPS_STATE; } @@ -870,7 +897,11 @@ { if ( ( arterialPressureDiff <= NORMAL_PRESSURE_DIFF_TOLERANCE_MMHG ) && ( venousPressureDiff <= NORMAL_PRESSURE_DIFF_TOLERANCE_MMHG ) ) { - state = DRY_SELF_TESTS_COMPLETE_STATE; + if ( TRUE == useHeparin ) + { + primeSyringePump(); + } + state = DRY_SELF_TESTS_SYRINGE_PUMP_PRIME_STATE; } else { @@ -883,6 +914,33 @@ /*********************************************************************//** * @brief + * The handleDrySelfTestSyringePumpPrimeState function handles the prime + * operation for syringe pump. + * @details Inputs: none + * @details Outputs: none + * @return the next state of dry self-tests state machine + *************************************************************************/ +static DRY_SELF_TESTS_STATE_T handleDrySelfTestSyringePumpPrimeState( void ) +{ + DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_SYRINGE_PUMP_PRIME_STATE; + + if ( TRUE == useHeparin ) + { + if ( TRUE == isSyringePumpPrimed() ) + { + state = DRY_SELF_TESTS_COMPLETE_STATE; + } + } + else + { + state = DRY_SELF_TESTS_COMPLETE_STATE; + } + + return state; +} + +/*********************************************************************//** + * @brief * The handleDrySelfTestStoppedState function handles the stopped dry self-tests * operation. * @details Inputs: none