Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -rf8db357a5e2ad0fa4ab4974794629cc2a79ee0b9 -r775a6184140e3425384e0cdbd224aab1dd829d10 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision f8db357a5e2ad0fa4ab4974794629cc2a79ee0b9) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 775a6184140e3425384e0cdbd224aab1dd829d10) @@ -54,6 +54,16 @@ #define PRE_TREATMENT_FLUSH_COUNT 2 ///< Number of flush cycles for each reservoir. +typedef struct +{ + BOOL startFlushFill; ///< Flags "GO" for a flush reservoir fill, to synchronize with self-test requirements + BOOL startNormalFill; ///< Flags "GO" for a normal reservoir fill, to synchronize with self-test requirements + BOOL filledStatus; ///< Flag indicates a reservoir has been filled. + BOOL flushedStatus; ///< Flag indicates a reservoir has been flushed. + BOOL initialDrain; ///< Flags indicate whether a reservoir has been requested to initially drain. + U08 flushCount; ///< Flag indicates the number of reservoir flush cycles required. +} PRE_TREATMENT_RESERVOIR_VAR_T; + /// States of the pre-treatment reservoir management state machine. typedef enum PreTreatmentReservoirMgmt_States { @@ -86,13 +96,14 @@ static OVERRIDE_U32_T preTreatmentModePublishInterval = { PRE_TREATMENT_DATA_PUB_INTERVAL, PRE_TREATMENT_DATA_PUB_INTERVAL, PRE_TREATMENT_DATA_PUB_INTERVAL, 0 }; static U32 submodeCompleteTransitionTimeCounter; ///< Sub-mode completed transition wait time counter. -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. +static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T currentReservoirMgmtState; ///< Current pre-treatment reservoir management state. +static PRE_TREATMENT_RESERVOIR_VAR_T reservoirStatus[ NUM_OF_DG_RESERVOIRS ]; ///< Detailed state of each reservoir. +#ifndef _RELEASE_ +const PRE_TREATMENT_RESERVOIR_VAR_T reservoirStatusDisable = {FALSE,FALSE,FALSE,FALSE,FALSE,(0)}; +#endif +const PRE_TREATMENT_RESERVOIR_VAR_T reservoirStatusInit = {FALSE,FALSE,FALSE,FALSE,FALSE,PRE_TREATMENT_FLUSH_COUNT}; + // ********** private function prototypes ********** static void publishPreTreatmentState( void ); @@ -129,39 +140,32 @@ *************************************************************************/ void initPreTreatmentMode( void ) { + int reservoirIndex = 0; + currentPreTreatmentState = HD_PRE_TREATMENT_START_STATE; currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_START_STATE; setUFVolStatus = FALSE; patientConnectionConfirm = FALSE; fillReservoirOneStartRequested = FALSE; submodeCompleteTransitionTimeCounter = 0; - reservoirFilledStatus[ DG_RESERVOIR_1 ] = FALSE; - reservoirFilledStatus[ DG_RESERVOIR_2 ] = FALSE; - reservoirFlushedStatus[ DG_RESERVOIR_1 ] = FALSE; - reservoirFlushedStatus[ DG_RESERVOIR_2 ] = FALSE; - #ifndef _RELEASE_ if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_PRIMING ) ) { - reservoirFlushCount[ DG_RESERVOIR_1 ] = 1; - reservoirFlushCount[ DG_RESERVOIR_2 ] = 1; + for ( reservoirIndex = 0; reservoirIndex < NUM_OF_DG_RESERVOIRS; reservoirIndex++ ) + { + reservoirStatus[reservoirIndex] = reservoirStatusDisable; + } } else #endif { - reservoirFlushCount[ DG_RESERVOIR_1 ] = PRE_TREATMENT_FLUSH_COUNT; - reservoirFlushCount[ DG_RESERVOIR_2 ] = PRE_TREATMENT_FLUSH_COUNT; + for ( reservoirIndex = 0; reservoirIndex < NUM_OF_DG_RESERVOIRS; reservoirIndex++ ) + { + reservoirStatus[reservoirIndex] = reservoirStatusInit; + } } - reservoirFlags[ DG_RESERVOIR_1 ].startFlushFill = FALSE; - reservoirFlags[ DG_RESERVOIR_1 ].startNormalFill = FALSE; - reservoirFlags[ DG_RESERVOIR_2 ].startFlushFill = FALSE; - reservoirFlags[ DG_RESERVOIR_2 ].startNormalFill = FALSE; - - initialReservoirDrain[ DG_RESERVOIR_1 ] = FALSE; - initialReservoirDrain[ DG_RESERVOIR_2 ] = FALSE; - initSampleWater(); initConsumableSelfTest(); initPrime(); @@ -515,10 +519,10 @@ *************************************************************************/ void signalActionToResumeFill( void ) { - reservoirFlags[ DG_RESERVOIR_1 ].startFlushFill = TRUE; - reservoirFlags[ DG_RESERVOIR_1 ].startNormalFill = TRUE; - reservoirFlags[ DG_RESERVOIR_2 ].startFlushFill = TRUE; - reservoirFlags[ DG_RESERVOIR_2 ].startNormalFill = TRUE; + reservoirStatus[ DG_RESERVOIR_1 ].startFlushFill = TRUE; + reservoirStatus[ DG_RESERVOIR_1 ].startNormalFill = TRUE; + reservoirStatus[ DG_RESERVOIR_2 ].startFlushFill = TRUE; + reservoirStatus[ DG_RESERVOIR_2 ].startNormalFill = TRUE; } /*********************************************************************//** @@ -531,7 +535,7 @@ *************************************************************************/ BOOL getReservoirFillStatus( DG_RESERVOIR_ID_T reservoirID ) { - return reservoirFilledStatus[ reservoirID ]; + return reservoirStatus[ reservoirID ].filledStatus; } /*********************************************************************//** @@ -1069,7 +1073,7 @@ * The handlePreTreatmentReservoirMgmtFillCmdState function sends fill * command to DG when DG is in re-circulate mode. * @details Inputs: DG operation mode, DG operation sub-mode, - * reservoirFlushedStatus, reservoirFlags + * reservoirStatus.flushedStatus, reservoirStatus * @details Outputs: sent fill command to DG * @return current state of pre-treatment reservoir management *************************************************************************/ @@ -1084,28 +1088,28 @@ if ( ( DG_MODE_GENE == dgOpMode ) && ( DG_GEN_IDLE_MODE_STATE_FLUSH_WATER == dgSubMode ) ) { // Drain both reservoirs and return to active res 2 before initial fills - if ( initialReservoirDrain[ inactiveReservoir ] != TRUE ) + if ( reservoirStatus[ inactiveReservoir ].initialDrain != TRUE ) { - initialReservoirDrain[ inactiveReservoir ] = TRUE; + reservoirStatus[ inactiveReservoir ].initialDrain = TRUE; state = PRE_TREATMENT_RESERVOIR_MGMT_REQUEST_RESERVOIR_SWITCH_STATE; } // Once both reservoirs drained and returned to active res 2, wait for pre-tx workflow to get to point where fills allowed before filling - else if ( TRUE == reservoirFlags[ DG_RESERVOIR_1 ].startFlushFill ) + else if ( TRUE == reservoirStatus[ DG_RESERVOIR_1 ].startFlushFill ) { volume = getPreTreatmentFillVolume( inactiveReservoir ); // not flushed and need to fill - if ( ( TRUE != reservoirFlushedStatus[ inactiveReservoir ] ) && - ( TRUE == reservoirFlags[ inactiveReservoir ].startFlushFill ) ) + if ( ( TRUE != reservoirStatus[ inactiveReservoir ].flushedStatus ) && + ( TRUE == reservoirStatus[ inactiveReservoir ].startFlushFill ) ) { cmdStartDGFill( volume, DEFAULT_TARGET_FILL_FLOW_RATE_LPM ); state = PRE_TREATMENT_RESERVOIR_MGMT_FILL_CMD_RESP_STATE; } // flushed and need to fill after entering dry self test state - if ( ( TRUE == reservoirFlushedStatus[ inactiveReservoir ] ) && - ( TRUE == reservoirFlags[ inactiveReservoir ].startNormalFill ) && - ( currentPreTreatmentState >= HD_PRE_TREATMENT_SELF_TEST_DRY_STATE ) ) + if ( ( TRUE == reservoirStatus[ inactiveReservoir ].flushedStatus ) && + ( TRUE == reservoirStatus[ inactiveReservoir ].startNormalFill ) && + ( currentPreTreatmentState >= HD_PRE_TREATMENT_SELF_TEST_DRY_STATE ) ) { cmdStartDGFill( volume, DEFAULT_TARGET_FILL_FLOW_RATE_LPM ); state = PRE_TREATMENT_RESERVOIR_MGMT_FILL_CMD_RESP_STATE; @@ -1170,30 +1174,31 @@ if ( ( DG_MODE_GENE == dgOpMode ) && ( DG_GEN_IDLE_MODE_STATE_FLUSH_WATER == dgSubMode ) ) { - if ( ( TRUE == reservoirFlushedStatus[ DG_RESERVOIR_1 ] ) && ( TRUE == reservoirFlushedStatus[ DG_RESERVOIR_2 ] ) ) + if ( ( TRUE == reservoirStatus[ DG_RESERVOIR_1 ].flushedStatus ) && + ( TRUE == reservoirStatus[ DG_RESERVOIR_2 ].flushedStatus ) ) { - if ( FALSE == reservoirFilledStatus[ activeReservoir ] ) + if ( FALSE == reservoirStatus[ activeReservoir ].filledStatus ) { - reservoirFilledStatus[ activeReservoir ] = TRUE; + reservoirStatus[ activeReservoir ].filledStatus = TRUE; state = PRE_TREATMENT_RESERVOIR_MGMT_REQUEST_RESERVOIR_SWITCH_STATE; } } else { state = PRE_TREATMENT_RESERVOIR_MGMT_WAIT_FOR_RESERVOIR_SWITCH_STATE; - if ( FALSE == reservoirFlushedStatus[ activeReservoir ] ) + if ( FALSE == reservoirStatus[ activeReservoir ].flushedStatus ) { DG_SWITCH_RSRVRS_CMD_T rsrvrCmd; - if (0 < reservoirFlushCount[ activeReservoir ]) + if (0 < reservoirStatus[ activeReservoir ].flushCount) { - reservoirFlushCount[ activeReservoir ] -= 1; - if (0 == reservoirFlushCount[ activeReservoir ]) - { - reservoirFlushedStatus[ activeReservoir ] = TRUE; - } + reservoirStatus[ activeReservoir ].flushCount -= 1; } + if ( 0 == reservoirStatus[ activeReservoir ].flushCount ) + { + reservoirStatus[ activeReservoir ].flushedStatus = TRUE; + } rsrvrCmd.reservoirID = activeReservoir; rsrvrCmd.useLastTrimmerHeaterDC = FALSE; cmdSetDGActiveReservoir( &rsrvrCmd ); @@ -1270,7 +1275,7 @@ * @brief * The getPreTreatmentFillVolume function determines which volume to fill * the inactive reservoir. - * @details Inputs: reservoirFlushedStatus + * @details Inputs: reservoirStatus.flushedStatus * @details Outputs: none * @param DG inactive Reservoir * @return volume to fill @@ -1280,7 +1285,7 @@ U32 volume = 0; // Fill volumes after flushing - if ( TRUE == reservoirFlushedStatus[ inactiveRes ] ) + if ( TRUE == reservoirStatus[ inactiveRes ].flushedStatus ) { if ( DG_RESERVOIR_1 == inactiveRes ) {