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 ); } /*********************************************************************//** Index: firmware/App/Controllers/DGInterface.h =================================================================== diff -u -rb01542f8e4ef5a29e9b08fc0d465478de516bf02 -r85ab84d9a0668e1e3976b00eb29e79c38c81b651 --- firmware/App/Controllers/DGInterface.h (.../DGInterface.h) (revision b01542f8e4ef5a29e9b08fc0d465478de516bf02) +++ firmware/App/Controllers/DGInterface.h (.../DGInterface.h) (revision 85ab84d9a0668e1e3976b00eb29e79c38c81b651) @@ -106,15 +106,25 @@ F32 HtrTrimInternal; } DG_TEMPERATURES_T; +/// Payload record structure for a drain reservoir command message. +typedef struct +{ + U32 drainToVolumeML; + BOOL tareLoadCells; +} DRAIN_RESERVOIR_CMD_PAYLOAD_T; + // ********** public function prototypes ********** void initDGInterface( void ); -void initTreatmentReservoirMgmt( void ); -void execTreatmentReservoirMgmt( void ); +void initPreTreatmentReservoirMgmt( void ); +void execPreTreatmentReservoirMgmt( void ); +void initTreatmentReservoirMgmt( void ); +void execTreatmentReservoirMgmt( void ); DG_OP_MODE_T getDGOpMode( void ); U32 getDGSubMode( void ); DG_RESERVOIR_ID_T getDGActiveReservoir( void ); +DG_RESERVOIR_ID_T getDGInactiveReservoir( void ); F32 getDGPressure( DG_PRESSURE_SENSORS_T sensorID ); U32 getDGROPumpPressureSetPt( void ); F32 getDGROPumpFlowRateMlMin( void ); Index: firmware/App/Modes/ModeTreatment.h =================================================================== diff -u -rf6888c7e4e05cb84b11fceb4340458d8af543ce8 -r85ab84d9a0668e1e3976b00eb29e79c38c81b651 --- firmware/App/Modes/ModeTreatment.h (.../ModeTreatment.h) (revision f6888c7e4e05cb84b11fceb4340458d8af543ce8) +++ firmware/App/Modes/ModeTreatment.h (.../ModeTreatment.h) (revision 85ab84d9a0668e1e3976b00eb29e79c38c81b651) @@ -80,7 +80,7 @@ void initTreatmentMode( void ); // initialize this module void transitionToTreatmentMode( void ); // prepares for transition to treatment mode U32 execTreatmentMode( void ); // execute the treatment mode state machine (call from OperationModes) -void signalAlarmActionToTreatmentode( ALARM_ACTION_T action ); // execute alarm action as appropriate for Treatment mode +void signalAlarmActionToTreatmentMode( ALARM_ACTION_T action ); // execute alarm action as appropriate for Treatment mode TREATMENT_STATE_T getTreatmentState( void ); // determine the current treatment sub-mode (state) Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -rc672f41061bcd500d6593655641cb27ce3ae58fc -r85ab84d9a0668e1e3976b00eb29e79c38c81b651 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision c672f41061bcd500d6593655641cb27ce3ae58fc) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 85ab84d9a0668e1e3976b00eb29e79c38c81b651) @@ -566,10 +566,12 @@ * and queues the msg for transmit on the appropriate CAN channel. * @details Inputs: none * @details Outputs: DG drain command msg constructed and queued. - * @param drainToVolumeMl volume (in mL) to drain the inactive reservoir to + * @param drainToVolumeMl volume (in mL) to drain the inactive reservoir to + * @param tareLoadCells set to TRUE if inactive reservoir load cells should be + * tared after draining * @return TRUE if msg successfully queued for transmit, FALSE if not *************************************************************************/ -BOOL sendDGDrainCommand( U32 drainToVolumeMl ) +BOOL sendDGDrainCommand( DRAIN_RESERVOIR_CMD_PAYLOAD_T *payload ) { BOOL result; MESSAGE_T msg; @@ -578,9 +580,9 @@ // create a message record blankMessage( &msg ); msg.hdr.msgID = MSG_ID_DG_DRAIN_CMD; - msg.hdr.payloadLen = sizeof( U32 ); + msg.hdr.payloadLen = sizeof( DRAIN_RESERVOIR_CMD_PAYLOAD_T ); - memcpy( payloadPtr, &drainToVolumeMl, sizeof( U32 ) ); + memcpy( payloadPtr, payload, sizeof( DRAIN_RESERVOIR_CMD_PAYLOAD_T ) ); // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_HD_2_DG, ACK_REQUIRED ); Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -rc672f41061bcd500d6593655641cb27ce3ae58fc -r85ab84d9a0668e1e3976b00eb29e79c38c81b651 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision c672f41061bcd500d6593655641cb27ce3ae58fc) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 85ab84d9a0668e1e3976b00eb29e79c38c81b651) @@ -163,7 +163,7 @@ BOOL sendDGFillCommand( U32 fillToVolumeMl ); // MSG_ID_DG_DRAIN_CMD -BOOL sendDGDrainCommand( U32 drainToVolumeMl ); +BOOL sendDGDrainCommand( DRAIN_RESERVOIR_CMD_PAYLOAD_T *payload ); // MSG_ID_STARTING_STOPPING_TREATMENT_CMD BOOL sendDGStartStopCommand( BOOL start );