Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r5bf62ff1373f2e9eea858244a97167323bff33f8 -rb20421d84b9049977c04f4752f4fc5697425f25c --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 5bf62ff1373f2e9eea858244a97167323bff33f8) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision b20421d84b9049977c04f4752f4fc5697425f25c) @@ -1,17 +1,17 @@ /************************************************************************** * -* Copyright (c) 2019-2021 Diality Inc. - All Rights Reserved. +* Copyright (c) 2019-2022 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * -* @file ModePreTreat.c +* @file ModePreTreat.c * -* @author (last) Sean Nash -* @date (last) 06-Oct-2020 +* @author (last) Michael Garthwaite +* @date (last) 24-Aug-2022 * -* @author (original) Dara Navaei -* @date (original) 05-Nov-2019 +* @author (original) Dara Navaei +* @date (original) 05-Nov-2019 * ***************************************************************************/ @@ -22,8 +22,10 @@ #include "ModePreTreat.h" #include "ModeTreatmentParams.h" #include "OperationModes.h" +#include "PresOccl.h" #include "PreTreatmentRecirc.h" #include "Prime.h" +#include "Reservoirs.h" #include "SelfTests.h" #include "SampleWater.h" #include "SystemCommMessages.h" @@ -48,9 +50,6 @@ #define PRE_TREATMENT_FILL_RESERVOIR_ONE_VOLUME_ML 1300 ///< Fill reservoir one to this volume (in mL) during pre-treatment mode. #define PRE_TREATMENT_FILL_RESERVOIR_TWO_VOLUME_ML 700 ///< Fill reservoir two to this volume (in mL) during pre-treatment mode. -#define PRIMARY_HEATER_TARGET_TEMP_OFFSET 2.0 ///< Primary heater target temperature offset from trimmer heater temperature. - - /// States of the pre-treatment reservoir management state machine. typedef enum PreTreatmentReservoirMgmt_States { @@ -77,6 +76,8 @@ static HD_PRE_TREATMENT_MODE_STATE_T currentPreTreatmentState; ///< Current state of pre-treatment mode state machine. static U32 preTreatmentPublishTimerCounter; ///< Pre-treatment data broadcast timer counter used to schedule when to transmit data. +/// Interval (in task intervals) at which to publish pre-treatment mode data to CAN bus. +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. @@ -132,6 +133,11 @@ initConsumableSelfTest(); initPrime(); initSelfTests(); + // Reservoirs state machine is not used in Pre-treatment but the + // init function is called here to initialize all the variables in + // the reservoirs driver since an API from the reservoirs is used + // to setup the DG heaters. + initReservoirs(); resetSignalFlags(); } @@ -142,21 +148,40 @@ * pre-treatment mode. * @details Inputs: none * @details Outputs: none - * @return none + * @return initial state *************************************************************************/ -void transitionToPreTreatmentMode( void ) +U32 transitionToPreTreatmentMode( void ) { - F32 const trimmerHeaterTemp = getTreatmentParameterF32( TREATMENT_PARAM_DIALYSATE_TEMPERATURE ); - F32 const primaryHeaterTemp = trimmerHeaterTemp + PRIMARY_HEATER_TARGET_TEMP_OFFSET; + F32 trimmerHeaterTemp = getTreatmentParameterF32( TREATMENT_PARAM_DIALYSATE_TEMPERATURE ); initPreTreatmentMode(); - cmdSetDGDialysateTargetTemps( primaryHeaterTemp, trimmerHeaterTemp ); + + // Set the heaters specs to start heating up the water + setDialysateHeatingParams(); + cmdStopDGTrimmerHeater(); + // Pumps should be off + signalBloodPumpHardStop(); + signalDialInPumpHardStop(); + signalDialOutPumpHardStop(); + stopSyringePump(); + + // Set valves to default positions + setValveAirTrap( STATE_CLOSED ); + setValvePosition( VDI, VALVE_POSITION_A_INSERT_EJECT ); + setValvePosition( VDO, VALVE_POSITION_A_INSERT_EJECT ); + setValvePosition( VBA, VALVE_POSITION_A_INSERT_EJECT ); + setValvePosition( VBV, VALVE_POSITION_A_INSERT_EJECT ); + // Set user alarm recovery actions allowed in this mode setAlarmUserActionEnabled( ALARM_USER_ACTION_RESUME, TRUE ); setAlarmUserActionEnabled( ALARM_USER_ACTION_RINSEBACK, FALSE ); setAlarmUserActionEnabled( ALARM_USER_ACTION_END_TREATMENT, TRUE ); + + doorClosedRequired( FALSE, FALSE ); + + return currentPreTreatmentState; } /*********************************************************************//** @@ -179,9 +204,12 @@ switch ( currentPreTreatmentState ) { case HD_PRE_TREATMENT_START_STATE: -#ifndef SKIP_SAMPLE_WATER - transitionToSampleWater(); +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_SAMPLE_WATER ) != SW_CONFIG_ENABLE_VALUE ) #endif + { + transitionToSampleWater(); + } currentPreTreatmentState = HD_PRE_TREATMENT_WATER_SAMPLE_STATE; break; @@ -218,7 +246,6 @@ break; default: - currentPreTreatmentState = HD_PRE_TREATMENT_START_STATE; SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_PRE_TREATMENT_INVALID_STATE, (U32)currentPreTreatmentState ); break; } @@ -245,10 +272,56 @@ *************************************************************************/ void signalUserConfirmInstallation( void ) { + BOOL accepted = FALSE; + REQUEST_REJECT_REASON_CODE_T rejReason = REQUEST_REJECT_REASON_NONE; + + confirmInstallRequested = FALSE; + + F32 bolusVol = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ); + F32 hepRate = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_DISPENSE_RATE ); + + // Accept installation confirmation if we are in install state of pre-treatment mode and + // Door closed, Cartridge installed, syringe is detected or Heparin not being used in this treatment. if ( ( MODE_PRET == getCurrentOperationMode() ) && ( HD_PRE_TREATMENT_CART_INSTALL_STATE == currentPreTreatmentState ) ) { - confirmInstallRequested = TRUE; + OPN_CLS_STATE_T frontDoor = getSwitchStatus( FRONT_DOOR ); + OPN_CLS_STATE_T pumpTrack = getSwitchStatus( PUMP_TRACK_SWITCH ); + + if ( STATE_CLOSED == pumpTrack ) + { + if ( STATE_CLOSED == frontDoor ) + { + if ( ( TRUE == isSyringeDetected() ) || ( ( bolusVol < NEARLY_ZERO ) && ( hepRate < NEARLY_ZERO ) ) ) + { + // Everything is properly installed + accepted = TRUE; + confirmInstallRequested = TRUE; + if ( ( bolusVol > NEARLY_ZERO ) || ( hepRate > NEARLY_ZERO ) ) + { + syringeDetectionRequired( TRUE ); + } + } + else + { + rejReason = REQUEST_REJECT_REASON_SYRINGE_NOT_PRESENT; + } + } + else + { + rejReason = REQUEST_REJECT_REASON_DOOR_NOT_CLOSED; + } + } + else + { + rejReason = REQUEST_REJECT_REASON_PUMP_TRACK_NOT_CLOSED; + } } + else + { + rejReason = REQUEST_REJECT_REASON_ACTION_DISABLED_IN_CURRENT_STATE; + } + + sendConsumableInstallCmdResponse( accepted, (U32) rejReason ); } /*********************************************************************//** @@ -329,9 +402,14 @@ BOOL accepted = FALSE; REQUEST_REJECT_REASON_CODE_T rejReason = REQUEST_REJECT_REASON_NO_PATIENT_CONNECTION_CONFIRM; -#ifndef SKIP_UI_INTERACTION - if ( TRUE == patientConnectionConfirm ) +#ifndef _RELEASE_ + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_UI_INTERACTION ) ) + { + patientConnectionConfirm = TRUE; + } #endif + + if ( TRUE == patientConnectionConfirm ) { if ( ( MODE_PRET == getCurrentOperationMode() ) && ( HD_PRE_TREATMENT_PATIENT_CONNECTION_STATE == currentPreTreatmentState ) ) { @@ -372,6 +450,10 @@ case ALARM_ACTION_END_TREATMENT: if ( HD_PRE_TREATMENT_PRIME_STATE > currentPreTreatmentState ) { + if ( HD_PRE_TREATMENT_WATER_SAMPLE_STATE == currentPreTreatmentState ) + { + cmdDGSampleWater( SAMPLE_WATER_CMD_END ); + } requestNewOperationMode( MODE_STAN ); } else @@ -396,7 +478,7 @@ * given reservoir. * @details Inputs: reservoirFilledStatus * @details Outputs: none - * @return TRUE if reservoir has been filled, otherwise FALSE; + * @return TRUE if reservoir has been filled, otherwise FALSE *************************************************************************/ BOOL getReservoirFillStatus( DG_RESERVOIR_ID_T reservoirID ) { @@ -405,6 +487,19 @@ /*********************************************************************//** * @brief + * The getPreTreatmentSubState function gets the current + * pre-treatment mode state. + * @details Inputs: currentPreTreatmentState + * @details Outputs: none + * @return currentPreTreatmentState + *************************************************************************/ +HD_PRE_TREATMENT_MODE_STATE_T getPreTreatmentSubState( void ) +{ + return currentPreTreatmentState; +} + +/*********************************************************************//** + * @brief * The publishPreTreatmentState function broadcasts pre-treatment sub-mode * and current sub-mode state. * @details Inputs: pre-treatment sub-mode, state @@ -414,21 +509,23 @@ static void publishPreTreatmentState( void ) { // Broadcast treatment time and state data at interval - if ( ++preTreatmentPublishTimerCounter >= PRE_TREATMENT_DATA_PUB_INTERVAL ) + if ( ++preTreatmentPublishTimerCounter >= getU32OverrideValue( &preTreatmentModePublishInterval ) ) { PRE_TREATMENT_STATE_DATA_T preTreatmentData; - preTreatmentData.preTreatmentSubMode = currentPreTreatmentState; - preTreatmentData.sampleWaterState = getSampleWaterState(); + preTreatmentData.preTreatmentSubMode = currentPreTreatmentState; + preTreatmentData.sampleWaterState = getSampleWaterState(); preTreatmentData.consumableSelfTestsState = getConsumableSelfTestState(); - preTreatmentData.noCartSelfTestsState = getNoCartSelfTestsState(); - preTreatmentData.installState = 0; - preTreatmentData.drySelfTestsState = getDrySelfTestsState(); - preTreatmentData.primeState = getPrimeState(); - preTreatmentData.recircState = getPreTreatmentRecircState(); - preTreatmentData.patientConnectionState = 0; + preTreatmentData.noCartSelfTestsState = getNoCartSelfTestsState(); + preTreatmentData.installState = 0; + preTreatmentData.drySelfTestsState = getDrySelfTestsState(); + preTreatmentData.primeState = getPrimeState(); + preTreatmentData.recircState = getPreTreatmentRecircState(); + preTreatmentData.patientConnectionState = 0; + preTreatmentData.wetSelfTestsState = getWetSelfTestState(); + preTreatmentData.preTreatmentRsrvrState = currentReservoirMgmtState; - broadcastPreTreatmentState( &preTreatmentData ); + broadcastData( MSG_ID_PRE_TREATMENT_STATE, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&preTreatmentData, sizeof( PRE_TREATMENT_STATE_DATA_T ) ); preTreatmentPublishTimerCounter = 0; } } @@ -461,12 +558,20 @@ { VALVE_T valve; + doorClosedRequired( FALSE, FALSE ); + + // Set valves for ( valve = VDI; valve < NUM_OF_VALVES; ++valve ) { setValvePosition( valve, VALVE_POSITION_A_INSERT_EJECT ); } - setValveAirTrap( STATE_CLOSED ); + + // Pumps should be off + signalBloodPumpHardStop(); + signalDialInPumpHardStop(); + signalDialOutPumpHardStop(); + stopSyringePump(); } /*********************************************************************//** @@ -484,6 +589,8 @@ patientConnectionConfirm = FALSE; treatmentStartRequested = FALSE; + doorClosedRequired( FALSE, FALSE ); + for ( valve = VDI; valve < NUM_OF_VALVES; ++valve ) { setValvePosition( valve, VALVE_POSITION_C_CLOSE ); @@ -511,29 +618,29 @@ execSampleWater(); -#ifndef SKIP_SAMPLE_WATER if ( SAMPLE_WATER_COMPLETE_STATE == getSampleWaterState() ) -#endif { - cmdDGSampleWater( SAMPLE_WATER_CMD_END ); - - if ( SELF_TEST_STATUS_PASSED == getSampleWaterResult() ) { - if ( ( DG_MODE_STAN == dgOpMode ) && ( DG_STANDBY_MODE_STATE_IDLE == dgSubMode ) ) + cmdDGSampleWater( SAMPLE_WATER_CMD_END ); + + if ( SELF_TEST_STATUS_PASSED == getSampleWaterResult() ) { - state = HD_PRE_TREATMENT_SELF_TEST_CONSUMABLE_STATE; - cmdStartDG(); - transitionToConsumableSelfTest(); + if ( ( DG_MODE_STAN == dgOpMode ) && ( DG_STANDBY_MODE_STATE_IDLE == dgSubMode ) ) + { + state = HD_PRE_TREATMENT_SELF_TEST_CONSUMABLE_STATE; + cmdStartDG(); + transitionToConsumableSelfTest(); + } + else + { + cmdStopDG(); + } } else { - cmdStopDG(); + requestNewOperationMode( MODE_STAN ); } } - else - { - requestNewOperationMode( MODE_STAN ); - } } return state; @@ -578,11 +685,6 @@ { HD_PRE_TREATMENT_MODE_STATE_T state = HD_PRE_TREATMENT_SELF_TEST_NO_CART_STATE; - if ( STATE_OPEN == getFPGADoorState() ) - { - activateAlarmNoData( ALARM_ID_CARTRIDGE_DOOR_OPENED ); - } - if ( TRUE == alarmActionResumeReceived ) { alarmActionResumeReceived = FALSE; @@ -616,9 +718,14 @@ { HD_PRE_TREATMENT_MODE_STATE_T state = HD_PRE_TREATMENT_CART_INSTALL_STATE; -#ifndef SKIP_UI_INTERACTION - if ( TRUE == confirmInstallRequested ) +#ifndef _RELEASE_ + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_UI_INTERACTION ) ) + { + confirmInstallRequested = TRUE; + } #endif + + if ( TRUE == confirmInstallRequested ) { confirmInstallRequested = FALSE; state = HD_PRE_TREATMENT_SELF_TEST_DRY_STATE; @@ -639,11 +746,6 @@ { HD_PRE_TREATMENT_MODE_STATE_T state = HD_PRE_TREATMENT_SELF_TEST_DRY_STATE; - if ( STATE_OPEN == getFPGADoorState() ) - { - activateAlarmNoData( ALARM_ID_CARTRIDGE_DOOR_OPENED ); - } - if ( TRUE == alarmActionResumeReceived ) { alarmActionResumeReceived = FALSE; @@ -677,11 +779,6 @@ { HD_PRE_TREATMENT_MODE_STATE_T state = HD_PRE_TREATMENT_PRIME_STATE; - if ( STATE_OPEN == getFPGADoorState() ) - { - activateAlarmNoData( ALARM_ID_CARTRIDGE_DOOR_OPENED ); - } - if ( TRUE == alarmActionResumeReceived ) { alarmActionResumeReceived = FALSE; @@ -716,11 +813,6 @@ { HD_PRE_TREATMENT_MODE_STATE_T state = HD_PRE_TREATMENT_RECIRCULATE_STATE; - if ( STATE_OPEN == getFPGADoorState() ) - { - activateAlarmNoData( ALARM_ID_CARTRIDGE_DOOR_OPENED ); - } - if ( TRUE == alarmActionResumeReceived ) { alarmActionResumeReceived = FALSE; @@ -729,9 +821,14 @@ execPreTreatmentRecirc(); -#ifndef SKIP_UI_INTERACTION - if ( TRUE == continueToTreatmentRequested ) +#ifndef _RELEASE_ + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_UI_INTERACTION ) ) + { + continueToTreatmentRequested = TRUE; + } #endif + + if ( TRUE == continueToTreatmentRequested ) { continueToTreatmentRequested = FALSE; state = HD_PRE_TREATMENT_PATIENT_CONNECTION_STATE; @@ -754,6 +851,7 @@ if ( TRUE == treatmentStartRequested ) { DG_RESERVOIR_ID_T const activeRes = getDGActiveReservoir(); + setStartReservoirVolume( activeRes ); requestNewOperationMode( MODE_TREA ); } @@ -856,10 +954,10 @@ if ( TRUE == hasDGCompletedReservoirSwitch() ) { - if ( ( DG_MODE_CIRC == dgOpMode ) && ( DG_RECIRCULATE_MODE_STATE_RECIRC_WATER == dgSubMode ) ) + 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 ); + cmdStartDGDrain( DRAIN_RESERVOIR_TO_VOLUME_ML, TRUE, FALSE, TRUE ); } } @@ -909,24 +1007,51 @@ DG_OP_MODE_T dgOpMode = getDGOpMode(); U32 dgSubMode = getDGSubMode(); - if ( ( DG_MODE_CIRC == dgOpMode ) && ( DG_RECIRCULATE_MODE_STATE_RECIRC_WATER == dgSubMode ) ) + if ( ( DG_MODE_GENE == dgOpMode ) && ( DG_GEN_IDLE_MODE_STATE_FLUSH_WATER == dgSubMode ) ) { state = PRE_TREATMENT_RESERVOIR_MGMT_FILL_CMD_RESP_STATE; if ( ( TRUE == reservoirFlushedStatus[ DG_RESERVOIR_1 ] ) && ( TRUE == reservoirFlushedStatus[ DG_RESERVOIR_2 ] ) ) { if ( DG_RESERVOIR_1 == getDGInactiveReservoir() ) { - cmdStartDGFill( PRE_TREATMENT_FILL_RESERVOIR_ONE_VOLUME_ML ); + 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 { - cmdStartDGFill( PRE_TREATMENT_FILL_RESERVOIR_TWO_VOLUME_ML ); + 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 ); } } else { - cmdStartDGFill( PRE_TREATMENT_FLUSH_RESERVOIR_VOLUME_ML ); + 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 + + cmdStartDGFill( volume, DEFAULT_TARGET_FILL_FLOW_RATE_LPM ); } } @@ -947,12 +1072,20 @@ DG_CMD_RESPONSE_T dgCmdResp; DG_OP_MODE_T dgOpMode = getDGOpMode(); - - if ( ( TRUE == getDGCommandResponse( DG_CMD_START_FILL, &dgCmdResp ) ) && ( DG_CMD_REQUEST_REJECT_REASON_INVALID_MODE == dgCmdResp.rejectCode ) ) + // handle fill command response from DG + if ( TRUE == getDGCommandResponse( DG_CMD_START_FILL, &dgCmdResp ) ) { - state = PRE_TREATMENT_RESERVOIR_MGMT_START_FILL_STATE; + if ( DG_CMD_REQUEST_REJECT_REASON_INVALID_MODE == dgCmdResp.rejectCode ) + { + state = PRE_TREATMENT_RESERVOIR_MGMT_START_FILL_STATE; + } + else if ( dgCmdResp.rejectCode != DG_CMD_REQUEST_REJECT_REASON_NONE ) + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_DG_INVALID_FILL_COMMAND_REJECTED, dgCmdResp.rejectCode ) + } } + // wait for DG to begin filling before moving on to next state if ( DG_MODE_FILL == dgOpMode ) { state = PRE_TREATMENT_RESERVOIR_MGMT_FILL_COMPLETE_STATE; @@ -976,7 +1109,7 @@ DG_OP_MODE_T dgOpMode = getDGOpMode(); U32 dgSubMode = getDGSubMode(); - if ( ( DG_MODE_CIRC == dgOpMode ) && ( DG_RECIRCULATE_MODE_STATE_RECIRC_WATER == dgSubMode ) ) + if ( ( DG_MODE_GENE == dgOpMode ) && ( DG_GEN_IDLE_MODE_STATE_FLUSH_WATER == dgSubMode ) ) { if ( ( TRUE == reservoirFlushedStatus[ DG_RESERVOIR_1 ] ) && ( TRUE == reservoirFlushedStatus[ DG_RESERVOIR_2 ] ) ) { @@ -985,10 +1118,13 @@ state = PRE_TREATMENT_RESERVOIR_MGMT_WAIT_FOR_RESERVOIR_SWITCH_STATE; reservoirFilledStatus[ DG_RESERVOIR_1 ] = TRUE; } - else if ( ( TRUE == reservoirFilledStatus[ DG_RESERVOIR_1 ] ) && ( FALSE == reservoirFilledStatus[ DG_RESERVOIR_2 ] ) ) + else { - reservoirFilledStatus[ DG_RESERVOIR_2 ] = TRUE; - state = PRE_TREATMENT_RESERVOIR_MGMT_COMPLETE_STATE; + if ( FALSE == reservoirFilledStatus[ DG_RESERVOIR_2 ] ) + { + reservoirFilledStatus[ DG_RESERVOIR_2 ] = TRUE; + state = PRE_TREATMENT_RESERVOIR_MGMT_COMPLETE_STATE; + } } } else @@ -997,10 +1133,19 @@ if ( FALSE == reservoirFlushedStatus[ DG_RESERVOIR_1 ] ) { - reservoirFlushedStatus[ DG_RESERVOIR_1 ] = TRUE; - cmdSetDGActiveReservoir( DG_RESERVOIR_1 ); +#ifndef _RELEASE_ + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_PRIMING ) ) + { + reservoirFilledStatus[ DG_RESERVOIR_1 ] = TRUE; + } + else +#endif + { + reservoirFlushedStatus[ DG_RESERVOIR_1 ] = TRUE; + cmdSetDGActiveReservoir( DG_RESERVOIR_1 ); + } } - else if ( ( TRUE == reservoirFlushedStatus[ DG_RESERVOIR_1 ] ) && ( FALSE == reservoirFlushedStatus[ DG_RESERVOIR_2 ] ) ) + else { reservoirFlushedStatus[ DG_RESERVOIR_2 ] = TRUE; cmdSetDGActiveReservoir( DG_RESERVOIR_2 ); @@ -1041,4 +1186,57 @@ return state; } + +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + + +/*********************************************************************//** + * @brief + * The testSetPreTreatmentModePublishIntervalOverride function sets the override of the + * pre-treatment mode data publication interval. + * @details Inputs: none + * @details Outputs: preTreatmentModePublishInterval + * @param ms milliseconds between pre-treatment mode broadcasts + * @return TRUE if override set successful, FALSE if not + *************************************************************************/ +BOOL testSetPreTreatmentModePublishIntervalOverride( U32 ms ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + U32 intvl = ms / TASK_GENERAL_INTERVAL; + + result = TRUE; + preTreatmentModePublishInterval.ovData = intvl; + preTreatmentModePublishInterval.override = OVERRIDE_KEY; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetPreTreatmentModePublishIntervalOverride function resets the override of the + * pre-treatment mode data publication interval. + * @details Inputs: none + * @details Outputs: preTreatmentModePublishInterval + * @return TRUE if override reset successful, FALSE if not + *************************************************************************/ +BOOL testResetPreTreatmentModePublishIntervalOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + preTreatmentModePublishInterval.override = OVERRIDE_RESET; + preTreatmentModePublishInterval.ovData = preTreatmentModePublishInterval.ovInitData; + } + + return result; +} + /**@}*/