Index: firmware/App/Controllers/DGInterface.c =================================================================== diff -u -rc1c47e288cbb5c5966a6ba919fec6fab15efa253 -r00fc092615d0b6b518754cb4de6a8abfaf946b33 --- firmware/App/Controllers/DGInterface.c (.../DGInterface.c) (revision c1c47e288cbb5c5966a6ba919fec6fab15efa253) +++ firmware/App/Controllers/DGInterface.c (.../DGInterface.c) (revision 00fc092615d0b6b518754cb4de6a8abfaf946b33) @@ -8,7 +8,7 @@ * @file DGInterface.c * * @author (last) Dara Navaei -* @date (last) 11-Oct-2022 +* @date (last) 19-Oct-2022 * * @author (original) Sean * @date (original) 08-Apr-2020 @@ -1166,7 +1166,7 @@ U32 trimmerState = dgHeatersData.trimmerHeaterState; DG_OP_MODE_T dgOp = getDGOpMode(); - if ( ( dgOp != DG_MODE_HEAT ) && ( dgOp != DG_MODE_CHEM ) ) + if ( ( DG_MODE_GENE == dgOp ) || ( DG_MODE_FILL == dgOp ) || ( DG_MODE_DRAI == dgOp ) ) { // In heat disinfect and chemical disinfect, the trimmer heater is controlled by the DG itself so no commands from HD should be sent // regarding the trimmer heater. Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r34d0843fa73e79ba3b085dd4aaa393a1ec126fd4 -r00fc092615d0b6b518754cb4de6a8abfaf946b33 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 34d0843fa73e79ba3b085dd4aaa393a1ec126fd4) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 00fc092615d0b6b518754cb4de6a8abfaf946b33) @@ -84,6 +84,7 @@ 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 ]; ///< Set of Flags that signal if the DG should wait to fill. // ********** private function prototypes ********** @@ -109,6 +110,7 @@ static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtFillCmdRespState( void ); static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtFillCompleteState( void ); static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtWaitReservoirSwitchState( void ); +static U32 getPreTreatmentFillVolume( DG_RESERVOIR_ID_T inactiveRes ); /*********************************************************************//** * @brief @@ -129,6 +131,11 @@ reservoirFilledStatus[ DG_RESERVOIR_1 ] = FALSE; reservoirFilledStatus[ DG_RESERVOIR_2 ] = FALSE; + reservoirFlags[ DG_RESERVOIR_1 ].startFlushFill = FALSE; + reservoirFlags[ DG_RESERVOIR_1 ].startNormalFill = FALSE; + reservoirFlags[ DG_RESERVOIR_2 ].startFlushFill = FALSE; + reservoirFlags[ DG_RESERVOIR_2 ].startNormalFill = FALSE; + initSampleWater(); initConsumableSelfTest(); initPrime(); @@ -474,6 +481,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 +690,7 @@ submodeCompleteTransitionTimeCounter = 0; state = HD_PRE_TREATMENT_SELF_TEST_NO_CART_STATE; fillReservoirOneStartRequested = TRUE; + reservoirFlags[ DG_RESERVOIR_1 ].startFlushFill = TRUE; transitionToNoCartSelfTests(); } } @@ -998,7 +1021,8 @@ * @brief * The handlePreTreatmentReservoirMgmtFillCmdState function sends fill * command to DG when DG is in re-circulate mode. - * @details Inputs: DG operation mode and operation sub-mode + * @details Inputs: DG operation mode, DG operation sub-mode, + * reservoirFlushedStatus, reservoirFlags * @details Outputs: sent fill command to DG * @return current state of pre-treatment reservoir management *************************************************************************/ @@ -1007,52 +1031,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; + 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 +1186,55 @@ return state; } +/*********************************************************************//** + * @brief + * The getPreTreatmentFillVolume function determines which volume to fill + * the inactive reservoir. + * @details Inputs: reservoirFlushedStatus + * @details Outputs: none + * @param DG inactive Reservoir + * @return volume to fill + *************************************************************************/ +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/SelfTests.c =================================================================== diff -u -rc1c47e288cbb5c5966a6ba919fec6fab15efa253 -r00fc092615d0b6b518754cb4de6a8abfaf946b33 --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision c1c47e288cbb5c5966a6ba919fec6fab15efa253) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 00fc092615d0b6b518754cb4de6a8abfaf946b33) @@ -8,7 +8,7 @@ * @file SelfTests.c * * @author (last) Dara Navaei -* @date (last) 28-Sep-2022 +* @date (last) 24-Oct-2022 * * @author (original) Quang Nguyen * @date (original) 28-Jan-2021 @@ -928,9 +928,8 @@ static DRY_SELF_TESTS_STATE_T handleDrySelfTestUsedCartridgeCheckState( void ) { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_USED_CARTRIDGE_CHECK_STATE; - BUBBLE_STATUS_T const ADVBubbleStatus = getBubbleStatus( ADV ); + BUBBLE_STATUS_T ADVBubbleStatus = getBubbleStatus( ADV ); - SEND_EVENT_WITH_2_U32_DATA(HD_EVENT_DRY_SELF_TEST_CARTRIDGE_RESULT,(U32)ADVBubbleStatus,(U32)BUBBLE_DETECTED) if ( ( BUBBLE_DETECTED == ADVBubbleStatus ) && @@ -941,7 +940,12 @@ } else { - activateAlarmNoData( ALARM_ID_INSTALL_NEW_CARTRIDGE ); +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_ENABLE_WORN_OUT_CARTRIDGE ) != SW_CONFIG_ENABLE_VALUE ) +#endif + { + activateAlarmNoData( ALARM_ID_INSTALL_NEW_CARTRIDGE ); + } } if ( TRUE == doesAlarmStatusIndicateStop() )