Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r5892086c904c06dbdc15cb4b35749060e16c1c0a -r51271a582fec5adf763c21c026cf29fb6796e09a --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 5892086c904c06dbdc15cb4b35749060e16c1c0a) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 51271a582fec5adf763c21c026cf29fb6796e09a) @@ -46,12 +46,14 @@ /// TODO: Restore to 100 when DPi flow control is fixed. #define DIP_PATIENT_CONNECTION_FLOW_RATE_ML_MIN 250 ///< Patient connection sub-mode dialysate inlet pump flow rate in mL/min. -#define PRE_TREATMENT_MIN_RESERVOIR_VOLUME_ML 250 ///< Fill reservoir to this volume minimum to prep volume during development. +#define PRE_TREATMENT_MIN_RESERVOIR_VOLUME_ML 400 ///< Fill reservoir to this volume minimum to prep volume during development. #define PRE_TREATMENT_FLUSH_RESERVOIR_VOLUME_ML 500 ///< Fill reservoir to this volume (in mL) to flush filter and lines. #define PRE_TREATMENT_FILL_RESERVOIR_ONE_VOLUME_ML 1200 ///< Fill reservoir one to this volume (in mL) during pre-treatment mode. #define PRE_TREATMENT_FILL_RESERVOIR_TWO_VOLUME_ML 800 ///< Fill reservoir two to this volume (in mL) during pre-treatment mode. #define PRE_TREATMENT_FULL_RESERVOIR_VOLUME_ML 1500 ///< Fill reservoir to this volume minimum to prep volume during development. +#define PRE_TREATMENT_FLUSH_COUNT 2 ///< Number of flush cycles for each reservoir. + /// States of the pre-treatment reservoir management state machine. typedef enum PreTreatmentReservoirMgmt_States { @@ -87,6 +89,7 @@ static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T currentReservoirMgmtState; ///< Current pre-treatment reservoir management state. 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 U08 reservoirFlushCount[ NUM_OF_DG_RESERVOIRS ]; ///< Flag indicates the number of reservoir flush cycles required. static PRE_TREATMENT_RESERVOIR_FLAGS_T reservoirFlags[ NUM_OF_DG_RESERVOIRS ]; ///< Set of Flags that signal if the DG should wait to fill. static BOOL initialReservoirDrain[ NUM_OF_DG_RESERVOIRS ]; ///< Flags indicate whether a reservoir has been requested to initially drain. @@ -137,6 +140,8 @@ reservoirFilledStatus[ DG_RESERVOIR_2 ] = FALSE; reservoirFlushedStatus[ DG_RESERVOIR_1 ] = FALSE; reservoirFlushedStatus[ DG_RESERVOIR_2 ] = FALSE; + reservoirFlushCount[ DG_RESERVOIR_1 ] = PRE_TREATMENT_FLUSH_COUNT; + reservoirFlushCount[ DG_RESERVOIR_2 ] = PRE_TREATMENT_FLUSH_COUNT; reservoirFlags[ DG_RESERVOIR_1 ].startFlushFill = FALSE; reservoirFlags[ DG_RESERVOIR_1 ].startNormalFill = FALSE; @@ -974,7 +979,6 @@ rsrvrCmd.useLastTrimmerHeaterDC = FALSE; fillReservoirOneStartRequested = FALSE; state = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_STATE; - cmdSetDGActiveReservoir( &rsrvrCmd ); } @@ -994,20 +998,32 @@ PRE_TREATMENT_RESERVOIR_MGMT_STATE_T state = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_STATE; DG_OP_MODE_T dgOpMode = getDGOpMode(); U32 dgSubMode = getDGSubMode(); + DG_RESERVOIR_ID_T const activeRes = getDGActiveReservoir(); + // If DG has not started yet, start DG if ( DG_MODE_STAN == dgOpMode ) { cmdStartDG(); } - // Ensure any pending reservoir switches are completed before sending drain command - if ( TRUE == hasDGCompletedReservoirSwitch() ) +#ifndef _RELEASE_ + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_PRIMING ) ) { - if ( ( DG_MODE_GENE == dgOpMode ) && ( DG_GEN_IDLE_MODE_STATE_FLUSH_WATER == dgSubMode ) ) + reservoirFlushCount[activeRes] = 0; + state = PRE_TREATMENT_RESERVOIR_MGMT_START_FILL_STATE; + } + else +#endif + { + // Ensure any pending reservoir switches are completed before sending drain command + if ( TRUE == hasDGCompletedReservoirSwitch() ) { - state = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_RESP_STATE; - cmdStartDGDrain( DRAIN_RESERVOIR_TO_VOLUME_ML, TRUE, FALSE, TRUE ); + if ( ( DG_MODE_GENE == dgOpMode ) && ( DG_GEN_IDLE_MODE_STATE_FLUSH_WATER == dgSubMode ) ) + { + state = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_RESP_STATE; + cmdStartDGDrain( DRAIN_RESERVOIR_TO_VOLUME_ML, TRUE, FALSE, TRUE ); + } } } @@ -1173,19 +1189,19 @@ if ( FALSE == reservoirFlushedStatus[ DG_RESERVOIR_1 ] ) { -#ifndef _RELEASE_ - if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_PRIMING ) ) { - reservoirFilledStatus[ DG_RESERVOIR_1 ] = TRUE; - } - else -#endif - { DG_SWITCH_RSRVRS_CMD_T rsrvrCmd; rsrvrCmd.reservoirID = (U32)DG_RESERVOIR_1; rsrvrCmd.useLastTrimmerHeaterDC = FALSE; - reservoirFlushedStatus[ DG_RESERVOIR_1 ] = TRUE; + if (0 == reservoirFlushCount[ DG_RESERVOIR_1 ]) + { + reservoirFlushedStatus[ DG_RESERVOIR_1 ] = TRUE; + } + else + { + reservoirFlushCount[ DG_RESERVOIR_1 ] -= 1; + } cmdSetDGActiveReservoir( &rsrvrCmd ); } } @@ -1195,7 +1211,14 @@ rsrvrCmd.reservoirID = (U32)DG_RESERVOIR_2; rsrvrCmd.useLastTrimmerHeaterDC = FALSE; - reservoirFlushedStatus[ DG_RESERVOIR_2 ] = TRUE; + if (0 == reservoirFlushCount[ DG_RESERVOIR_2 ]) + { + reservoirFlushedStatus[ DG_RESERVOIR_2 ] = TRUE; + } + else + { + reservoirFlushCount[ DG_RESERVOIR_2 ] -= 1; + } cmdSetDGActiveReservoir( &rsrvrCmd ); } } @@ -1277,53 +1300,25 @@ *************************************************************************/ static U32 getPreTreatmentFillVolume( DG_RESERVOIR_ID_T inactiveRes ) { - U32 volume = PRE_TREATMENT_FULL_RESERVOIR_VOLUME_ML; + U32 volume = 0; // Fill volumes after flushing if ( TRUE == reservoirFlushedStatus[ inactiveRes ] ) { if ( DG_RESERVOIR_1 == inactiveRes ) { -#ifndef _RELEASE_ - if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_PRIMING ) ) - { - volume = PRE_TREATMENT_FULL_RESERVOIR_VOLUME_ML; - } - - else -#endif - { - volume = PRE_TREATMENT_FILL_RESERVOIR_ONE_VOLUME_ML; - } + volume = PRE_TREATMENT_FILL_RESERVOIR_ONE_VOLUME_ML; } // Reservoir 2 else { -#ifndef _RELEASE_ - if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_PRIMING ) ) - { - volume = PRE_TREATMENT_FULL_RESERVOIR_VOLUME_ML; - } - else -#endif - { - volume = PRE_TREATMENT_FILL_RESERVOIR_TWO_VOLUME_ML; - } + volume = PRE_TREATMENT_FILL_RESERVOIR_TWO_VOLUME_ML; } } // Flush fill volumes else { -#ifndef _RELEASE_ - if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_PRIMING ) ) - { - volume = PRE_TREATMENT_FULL_RESERVOIR_VOLUME_ML; - } - else -#endif - { - volume = PRE_TREATMENT_FLUSH_RESERVOIR_VOLUME_ML; - } + volume = PRE_TREATMENT_FLUSH_RESERVOIR_VOLUME_ML; } return volume; Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -r5892086c904c06dbdc15cb4b35749060e16c1c0a -r51271a582fec5adf763c21c026cf29fb6796e09a --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 5892086c904c06dbdc15cb4b35749060e16c1c0a) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 51271a582fec5adf763c21c026cf29fb6796e09a) @@ -591,7 +591,7 @@ void execWetSelfTests( void ) { #ifndef _RELEASE_ - if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_WET_SELF_TEST ) ) + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_PRIMING ) ) //SW_CONFIG_DISABLE_WET_SELF_TEST { currentWetSelfTestsState = WET_SELF_TESTS_COMPLETE_STATE; }