Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -ref6283257df7c1f993d58fb934da57ea3e0a7067 -r22bb2aeb8ba0702aba894f928dbaf751fa6dcfe6 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision ef6283257df7c1f993d58fb934da57ea3e0a7067) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 22bb2aeb8ba0702aba894f928dbaf751fa6dcfe6) @@ -84,7 +84,9 @@ static BOOL fillReservoirOneStartRequested; ///< Flag indicates fill reservoir one has been requested. static BOOL reservoirFilledStatus[ NUM_OF_DG_RESERVOIRS ]; ///< Flag indicates a reservoir has been filled. static BOOL reservoirFlushedStatus[ NUM_OF_DG_RESERVOIRS ]; ///< Flag indicates a reservoir has been flushed. +static PRE_TREATMENT_RESERVOIR_FLAGS_T reservoirFlags[ NUM_OF_DG_RESERVOIRS ]; + // ********** private function prototypes ********** static void publishPreTreatmentState( void ); @@ -119,6 +121,7 @@ *************************************************************************/ void initPreTreatmentMode( void ) { + currentPreTreatmentState = HD_PRE_TREATMENT_START_STATE; currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_START_STATE; setUFVolStatus = FALSE; @@ -129,6 +132,12 @@ reservoirFilledStatus[ DG_RESERVOIR_1 ] = FALSE; reservoirFilledStatus[ DG_RESERVOIR_2 ] = FALSE; + for( U32 i = DG_RESERVOIR_1; i < NUM_OF_DG_RESERVOIRS; ++i ) + { + reservoirFlags[ i ].startFlushFill = FALSE; + reservoirFlags[ i ].startNormalFill = FALSE; + } + initSampleWater(); initConsumableSelfTest(); initPrime(); @@ -154,6 +163,13 @@ { F32 trimmerHeaterTemp = getTreatmentParameterF32( TREATMENT_PARAM_DIALYSATE_TEMPERATURE ); + + for( U32 i = DG_RESERVOIR_1; i < NUM_OF_DG_RESERVOIRS; ++i ) + { + reservoirFlags[ i ].startFlushFill = FALSE; + reservoirFlags[ i ].startNormalFill = FALSE; + } + initPreTreatmentMode(); // Set the heaters specs to start heating up the water @@ -474,6 +490,21 @@ /*********************************************************************//** * @brief + * The signalActionToResumeFill function sets the remaining reservior fill + * flags to resume filling while in PreTreatment Mode. + * @details Inputs: none + * @details Outputs: reservoirFlags + * @return none + *************************************************************************/ +void signalActionToResumeFill( void ) +{ + reservoirFlags[ DG_RESERVOIR_1 ].startNormalFill = TRUE; + reservoirFlags[ DG_RESERVOIR_2 ].startFlushFill = TRUE; + reservoirFlags[ DG_RESERVOIR_2 ].startNormalFill = TRUE; +} + +/*********************************************************************//** + * @brief * The getReservoirFillStatus function returns the fill complete status for * given reservoir. * @details Inputs: reservoirFilledStatus @@ -668,6 +699,7 @@ submodeCompleteTransitionTimeCounter = 0; state = HD_PRE_TREATMENT_SELF_TEST_NO_CART_STATE; fillReservoirOneStartRequested = TRUE; + reservoirFlags[ DG_RESERVOIR_1 ].startFlushFill = TRUE; transitionToNoCartSelfTests(); } } @@ -1007,52 +1039,27 @@ PRE_TREATMENT_RESERVOIR_MGMT_STATE_T state = PRE_TREATMENT_RESERVOIR_MGMT_START_FILL_STATE; DG_OP_MODE_T dgOpMode = getDGOpMode(); U32 dgSubMode = getDGSubMode(); + U32 volume = 0; + DG_RESERVOIR_ID_T inactiveReservoir = getDGInactiveReservoir() if ( ( DG_MODE_GENE == dgOpMode ) && ( DG_GEN_IDLE_MODE_STATE_FLUSH_WATER == dgSubMode ) ) { - state = PRE_TREATMENT_RESERVOIR_MGMT_FILL_CMD_RESP_STATE; + U32 volume = getPreTreatmentFillVolume( inactiveReservoir ); - if ( ( TRUE == reservoirFlushedStatus[ DG_RESERVOIR_1 ] ) && ( TRUE == reservoirFlushedStatus[ DG_RESERVOIR_2 ] ) ) + // not flushed and need to fill + if ( FALSE = reservoirFlushedStatus[ inactiveReservoir ] && + TRUE == reservoirFlags[ inactiveReservoir ].startFlushFill ) { - if ( DG_RESERVOIR_1 == getDGInactiveReservoir() ) - { - U32 volume = FILL_RESERVOIR_TO_VOLUME_ML; - -#ifndef _RELEASE_ - if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_PRIMING ) != SW_CONFIG_ENABLE_VALUE ) - { - volume = PRE_TREATMENT_FILL_RESERVOIR_ONE_VOLUME_ML; - } -#endif - - cmdStartDGFill( volume, DEFAULT_TARGET_FILL_FLOW_RATE_LPM ); - } - else - { - U32 volume = FILL_RESERVOIR_TO_VOLUME_ML; - -#ifndef _RELEASE_ - if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_PRIMING ) != SW_CONFIG_ENABLE_VALUE ) - { - volume = PRE_TREATMENT_FILL_RESERVOIR_TWO_VOLUME_ML; - } -#endif - - cmdStartDGFill( volume, DEFAULT_TARGET_FILL_FLOW_RATE_LPM ); - } + cmdStartDGFill( volume, DEFAULT_TARGET_FILL_FLOW_RATE_LPM ); + state = PRE_TREATMENT_RESERVOIR_MGMT_FILL_CMD_RESP_STATE; } - else - { - U32 volume = PRE_TREATMENT_FLUSH_RESERVOIR_VOLUME_ML; -#ifndef _RELEASE_ - if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_PRIMING ) ) - { - volume = FILL_RESERVOIR_TO_VOLUME_ML; - } -#endif - + // flushed and need to fill + if ( TRUE = reservoirFlushedStatus[ inactiveReservoir ] && + TRUE == reservoirFlags[ inactiveReservoir ].startNormalFill ) + { cmdStartDGFill( volume, DEFAULT_TARGET_FILL_FLOW_RATE_LPM ); + state = PRE_TREATMENT_RESERVOIR_MGMT_FILL_CMD_RESP_STATE; } } @@ -1187,7 +1194,55 @@ return state; } +/*********************************************************************//** + * @brief + * The getPreTreatmentFillVolume function + * @details Inputs: DG intactive reservoir + * @details Outputs: start filling next reservoir + * @return current state of pre-treatment reservoir management + *************************************************************************/ +static U32 getPreTreatmentFillVolume( DG_RESERVOIR_ID_T inactiveRes ) +{ + U32 volume = 0; + // Fill volumes after flushing + if ( TRUE == reservoirFlushedStatus[ inactiveRes ] ) + { + if ( DG_RESERVOIR_1 == inactiveRes ) + volume = FILL_RESERVOIR_TO_VOLUME_ML; +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_PRIMING ) != SW_CONFIG_ENABLE_VALUE ) + { + volume = PRE_TREATMENT_FILL_RESERVOIR_ONE_VOLUME_ML; + } +#endif + // Reservoir 2 + else + volume = FILL_RESERVOIR_TO_VOLUME_ML; +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_PRIMING ) != SW_CONFIG_ENABLE_VALUE ) + { + volume = PRE_TREATMENT_FILL_RESERVOIR_TWO_VOLUME_ML; + } +#endif + } + // Flush fill volumes + else + { + volume = PRE_TREATMENT_FLUSH_RESERVOIR_VOLUME_ML; + +#ifndef _RELEASE_ + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_PRIMING ) ) + { + volume = FILL_RESERVOIR_TO_VOLUME_ML; + } +#endif + } + return volume; + +} + + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ Index: firmware/App/Modes/ModePreTreat.h =================================================================== diff -u -rdf4242fcc91f8cd1aada438b33fa845c223d0e0e -r22bb2aeb8ba0702aba894f928dbaf751fa6dcfe6 --- firmware/App/Modes/ModePreTreat.h (.../ModePreTreat.h) (revision df4242fcc91f8cd1aada438b33fa845c223d0e0e) +++ firmware/App/Modes/ModePreTreat.h (.../ModePreTreat.h) (revision 22bb2aeb8ba0702aba894f928dbaf751fa6dcfe6) @@ -48,6 +48,13 @@ U32 preTreatmentRsrvrState; ///< Current pre-treatment reservoir state } PRE_TREATMENT_STATE_DATA_T; +typedef struct +{ + BOOL startFlushFill; + BOOL startNormalFill; +} PRE_TREATMENT_RESERVOIR_FLAGS_T; + + // ********** public function prototypes ********** void initPreTreatmentMode( void ); // Initialize this module @@ -59,7 +66,9 @@ void setUserSetUFVolumeStatus( BOOL status ); // Set status that indicates UF volume setting has been set void signalUserConfirmPatientConnection( void ); // Signal that user confirms patient connection has been completed void signalUserStartTreatment( void ); // Signal that user requests to start treatment +void signalActionToResumeFill( void ); // Signal that indicates the HD to resume filling reservoirs + void signalAlarmActionToPreTreatmentMode( ALARM_ACTION_T action ); // Execute alarm action as appropriate for pre-treatment mode BOOL getReservoirFillStatus( DG_RESERVOIR_ID_T reservoirID ); // Get the fill complete status for given reservoir Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -r2b82ac67c25128e6d1fdcccae85720e166bcecea -r22bb2aeb8ba0702aba894f928dbaf751fa6dcfe6 --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 2b82ac67c25128e6d1fdcccae85720e166bcecea) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 22bb2aeb8ba0702aba894f928dbaf751fa6dcfe6) @@ -42,7 +42,7 @@ #define PUMP_RUN_SELF_TEST_TIME_MS ( 15 * MS_PER_SECOND ) ///< Self-test time to run pumps in ms. #define PUMP_SELF_TEST_FLOW_RATE_ML_MIN 100 ///< Self-test pump flow rate in mL/min. #define BLOOD_PUMP_PRESSURE_SELF_TEST_FLOW 100 -#define DIAL_IN_PUMP_PRESSURE_SELF_TEST_FLOW 300 +#define DIAL_IN_PUMP_PRESSURE_SELF_TEST_FLOW 400 #define SYRINGE_PUMP_OCCLUSION_CHECK_DELAY ( 1 * MS_PER_SECOND ) ///< Delay 3 seconds then check for syringe pump prime occlusion. #define BLOOD_PUMP_RUN_TIME_PRESSURE_SELF_TEST ( 20 * MS_PER_SECOND ) ///< Pressure self-test time to run blood pump in ms. @@ -53,13 +53,13 @@ #define NORMALIZED_PRESSURE_SELF_TEST_HALF_TIME ( 5 * MS_PER_SECOND ) ///< Half the time to wait for pressure to normalize in ms. #define ARTERIAL_DECAY_PRESSURE_DIFF_TOLERANCE_MMHG 5.0F ///< Difference in arterial pressure readings after the pump stops (in mmHg). -#define VENOUS_DECAY_PRESSURE_DIFF_TOLERANCE_MMHG 10.0F ///< Difference in venous pressure readings after the pump stops (in mmHg). +#define VENOUS_DECAY_PRESSURE_DIFF_TOLERANCE_MMHG 5.0F ///< Difference in venous pressure readings after the pump stops (in mmHg). #define ARTERIAL_STABILITY_PRESSURE_DIFF_TOLERANCE_MMHG 5.0F ///< Difference in arterial pressure readings while in a stable pressured state (in mmHg). #define VENOUS_STABILITY_PRESSURE_DIFF_TOLERANCE_MMHG 5.0F ///< Difference in venous pressure readings while in a stable pressured state (in mmHg). #define ARTERIAL_PRESSURE_SELF_TEST_LOW_LIMIT_MMHG -200.0F ///< Arterial pressure low limit after running blood pump. #define VENOUS_PRESSURE_SELF_TEST_HIGH_LIMIT_MMHG 200.0F ///< Venous pressure high limit after running blood pump. -#define VENOUS_PRESSURE_SELF_TEST_FIRST_PASS_LIMIT_MMHG 180.0F ///< Venous pressure high limit after running dpi in first test. +#define VENOUS_PRESSURE_SELF_TEST_FIRST_PASS_LIMIT_MMHG 200.0F ///< Venous pressure high limit after running dpi in first test. #define NORMAL_PRESSURE_DIFF_TOLERANCE_MMHG 10.0F ///< Difference in pressure readings after return to normal state tolerance (in mmHg). @@ -1026,6 +1026,7 @@ if ( VENOUS_PRESSURE_SELF_TEST_FIRST_PASS_LIMIT_MMHG <= venousPressure ) { signalDialInPumpHardStop(); + signalActionToResumeFill(); state = DRY_SELF_TESTS_PRESSURE_SENSORS_ARTERIAL_SETUP_STATE; }