Index: firmware/App/Controllers/DGInterface.c =================================================================== diff -u -r1a685471524555a374854c0c9ec8e208e71fe2df -r85ab84d9a0668e1e3976b00eb29e79c38c81b651 --- firmware/App/Controllers/DGInterface.c (.../DGInterface.c) (revision 1a685471524555a374854c0c9ec8e208e71fe2df) +++ firmware/App/Controllers/DGInterface.c (.../DGInterface.c) (revision 85ab84d9a0668e1e3976b00eb29e79c38c81b651) @@ -83,7 +83,8 @@ static U32 dgReservoirDrainVolumeTarget = 0; ///< Latest drain-to volume reported by the DG. static U32 dgReservoirDrainVolumeTargetSet = 0; ///< Drain-to volume commanded. static U32 resUseTimer = 0; ///< used to track time pumping from active reservoir (for volume used calculation). -static F32 resUseVolumeMl = 0.0; ///< Accumulated volume used from active reservoir. +static F32 resUseVolumeMl = 0.0; ///< Accumulated volume used from active reservoir. +static BOOL resHasBeenTared[ NUM_OF_DG_RESERVOIRS ]; ///< Flags indicate whether the reservoir has been tared for this treatment. // ********** private function prototypes ********** @@ -104,9 +105,26 @@ dgTrimmerTempSet = 0.0; dgActiveReservoirSet = DG_RESERVOIR_2; dgReservoirFillVolumeTargetSet = 0; - dgReservoirDrainVolumeTargetSet = 0; + dgReservoirDrainVolumeTargetSet = 0; + initPreTreatmentReservoirMgmt(); } +/*********************************************************************//** + * @brief + * The initPreTreatmentReservoirMgmt function initializes the pre-treatment + * reservoir management state machine. + * @details Inputs: none + * @details Outputs: pre-treatment reservoir management state machine initialized. + * @return none + *************************************************************************/ +void initPreTreatmentReservoirMgmt( void ) +{ + // TODO - currentPreTrtResMgmtState = TREATMENT_RESERVOIR_MGMT_START_STATE; + resMgmtTimer = 0; + resHasBeenTared[ DG_RESERVOIR_1 ] = FALSE; + resHasBeenTared[ DG_RESERVOIR_2 ] = FALSE; +} + /*********************************************************************//** * @brief * The initTreatmentReservoirMgmt function initializes the treatment reservoir @@ -123,6 +141,18 @@ resUseVolumeMl = 0.0; } +/*********************************************************************//** + * @brief + * The execPreTreatmentReservoirMgmt function executes the state machine for the + * reservoir management during pre-treatment mode. + * @details Inputs: none + * @details Outputs: DG reservoirs (drains & fills) managed. + * @return none + *************************************************************************/ +void execPreTreatmentReservoirMgmt( void ) +{ +} + /*********************************************************************//** * @brief * The execTreatmentReservoirMgmt function executes the state machine for the @@ -289,6 +319,20 @@ return dgActiveReservoirSet; } +/*********************************************************************//** + * @brief + * The getDGInactiveReservoir function gets the currently inactive reservoir. + * @details Inputs: dgActiveReservoirSet + * @details Outputs: none + * @return Currently commanded inactive reservoir. + *************************************************************************/ +DG_RESERVOIR_ID_T getDGInactiveReservoir( void ) +{ + DG_RESERVOIR_ID_T inactiveRes = ( DG_RESERVOIR_2 == dgActiveReservoirSet ? DG_RESERVOIR_1 : DG_RESERVOIR_2 ); + + return inactiveRes; +} + /*********************************************************************//** * @brief * The getDGPressure function gets the latest pressure reported by the DG @@ -600,13 +644,18 @@ * The cmdStartDGDrain function sends a drain command message to the DG. * @details Inputs: none * @details Outputs: drain command sent to DG. - * @param drainToVolMl volume (in mL) to drain inactive reservoir to + * @param drainToVolMl volume (in mL) to drain inactive reservoir to * @return none *************************************************************************/ void cmdStartDGDrain( U32 drainToVolMl ) -{ - dgReservoirDrainVolumeTargetSet = drainToVolMl; - sendDGDrainCommand( drainToVolMl ); +{ + DRAIN_RESERVOIR_CMD_PAYLOAD_T payload; + DG_RESERVOIR_ID_T inactiveRes = getDGInactiveReservoir(); + + dgReservoirDrainVolumeTargetSet = drainToVolMl; + payload.drainToVolumeML = drainToVolMl; + payload.tareLoadCells = ( FALSE == resHasBeenTared[ inactiveRes ] ? TRUE : FALSE ); + sendDGDrainCommand( &payload ); } /*********************************************************************//**