Index: firmware/App/Controllers/DGInterface.c =================================================================== diff -u -r06dc7b658ce158806edc2c907f9b4462275f7bb9 -ref398e685d6cfbdcb8c18fd9319819672c6c9d89 --- firmware/App/Controllers/DGInterface.c (.../DGInterface.c) (revision 06dc7b658ce158806edc2c907f9b4462275f7bb9) +++ firmware/App/Controllers/DGInterface.c (.../DGInterface.c) (revision ef398e685d6cfbdcb8c18fd9319819672c6c9d89) @@ -803,14 +803,16 @@ * @param resID ID of reservoir to set as active (reservoir for HD to draw from) * @return none *************************************************************************/ -void cmdSetDGActiveReservoir( DG_RESERVOIR_ID_T resID ) +void cmdSetDGActiveReservoir( DG_SWITCH_RSRVRS_CMD_T *cmd ) { + DG_RESERVOIR_ID_T resID = (DG_RESERVOIR_ID_T)cmd->reservoirID; + if ( resID < NUM_OF_DG_RESERVOIRS ) { - dgActiveReservoirSet = resID; + dgActiveReservoirSet = resID; dgCmdResp[ DG_CMD_SWITCH_RESERVOIR ].commandID = DG_CMD_NONE; - sendDGSwitchReservoirCommand( (U32)resID ); + sendDGSwitchReservoirCommand( cmd ); } else { Index: firmware/App/Controllers/DGInterface.h =================================================================== diff -u -ref6283257df7c1f993d58fb934da57ea3e0a7067 -ref398e685d6cfbdcb8c18fd9319819672c6c9d89 --- firmware/App/Controllers/DGInterface.h (.../DGInterface.h) (revision ef6283257df7c1f993d58fb934da57ea3e0a7067) +++ firmware/App/Controllers/DGInterface.h (.../DGInterface.h) (revision ef398e685d6cfbdcb8c18fd9319819672c6c9d89) @@ -162,7 +162,7 @@ void cmdSetDGDialysateHeatingParams( DG_CMD_DIALYSATE_HEATING_PARAMS_T heatingParams ); void cmdStartDG( void ); void cmdStopDG( void ); -void cmdSetDGActiveReservoir( DG_RESERVOIR_ID_T resID ); +void cmdSetDGActiveReservoir( DG_SWITCH_RSRVRS_CMD_T *cmd ); void cmdChangeDGValveSetting( DG_VALVE_SETTING_ID_T valveSettingID ); void cmdStartDGFill( U32 fillToVolMl, F32 targetFlowLPM ); void cmdStopDGFill( void ); Index: firmware/App/Modes/ModePostTreat.c =================================================================== diff -u -r8b73263b38f449dacc0795c67a7cf6240cb79026 -ref398e685d6cfbdcb8c18fd9319819672c6c9d89 --- firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 8b73263b38f449dacc0795c67a7cf6240cb79026) +++ firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision ef398e685d6cfbdcb8c18fd9319819672c6c9d89) @@ -538,10 +538,13 @@ if ( ( DG_MODE_GENE == getDGOpMode() ) && ( DG_GEN_IDLE_MODE_STATE_FLUSH_WATER == getDGSubMode() ) ) { + DG_SWITCH_RSRVRS_CMD_T rsrvrCmd; + // The first drain starts with setting the reservoir 2 as active and then the first reservoir is drained - DG_RESERVOIR_ID_T id = ( TRUE == isThisFirstDrain ? DG_RESERVOIR_2 : DG_RESERVOIR_1 ); + rsrvrCmd.reservoirID = (U32)( TRUE == isThisFirstDrain ? DG_RESERVOIR_2 : DG_RESERVOIR_1 ); + rsrvrCmd.useLastTrimmerHeaterDC = FALSE; - cmdSetDGActiveReservoir( id ); + cmdSetDGActiveReservoir( &rsrvrCmd ); if ( TRUE == hasDGCompletedReservoirSwitch() ) { Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r34d0843fa73e79ba3b085dd4aaa393a1ec126fd4 -ref398e685d6cfbdcb8c18fd9319819672c6c9d89 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 34d0843fa73e79ba3b085dd4aaa393a1ec126fd4) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision ef398e685d6cfbdcb8c18fd9319819672c6c9d89) @@ -925,9 +925,14 @@ if ( TRUE == fillReservoirOneStartRequested ) { - fillReservoirOneStartRequested = FALSE; - state = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_STATE; - cmdSetDGActiveReservoir( DG_RESERVOIR_2 ); + DG_SWITCH_RSRVRS_CMD_T rsrvrCmd; + + rsrvrCmd.reservoirID = (U32)DG_RESERVOIR_2; + rsrvrCmd.useLastTrimmerHeaterDC = FALSE; + fillReservoirOneStartRequested = FALSE; + state = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_STATE; + + cmdSetDGActiveReservoir( &rsrvrCmd ); } return state; @@ -1142,14 +1147,24 @@ else #endif { + DG_SWITCH_RSRVRS_CMD_T rsrvrCmd; + + rsrvrCmd.reservoirID = (U32)DG_RESERVOIR_1; + rsrvrCmd.useLastTrimmerHeaterDC = FALSE; reservoirFlushedStatus[ DG_RESERVOIR_1 ] = TRUE; - cmdSetDGActiveReservoir( DG_RESERVOIR_1 ); + + cmdSetDGActiveReservoir( &rsrvrCmd ); } } else { + DG_SWITCH_RSRVRS_CMD_T rsrvrCmd; + + rsrvrCmd.reservoirID = (U32)DG_RESERVOIR_2; + rsrvrCmd.useLastTrimmerHeaterDC = FALSE; reservoirFlushedStatus[ DG_RESERVOIR_2 ] = TRUE; - cmdSetDGActiveReservoir( DG_RESERVOIR_2 ); + + cmdSetDGActiveReservoir( &rsrvrCmd ); } } } Index: firmware/App/Modes/PreTreatmentRecirc.c =================================================================== diff -u -r34d0843fa73e79ba3b085dd4aaa393a1ec126fd4 -ref398e685d6cfbdcb8c18fd9319819672c6c9d89 --- firmware/App/Modes/PreTreatmentRecirc.c (.../PreTreatmentRecirc.c) (revision 34d0843fa73e79ba3b085dd4aaa393a1ec126fd4) +++ firmware/App/Modes/PreTreatmentRecirc.c (.../PreTreatmentRecirc.c) (revision ef398e685d6cfbdcb8c18fd9319819672c6c9d89) @@ -154,14 +154,19 @@ *************************************************************************/ static void setupPreTreatmentRecirculate( void ) { + DG_SWITCH_RSRVRS_CMD_T rsrvrCmd; + + rsrvrCmd.reservoirID = (U32)DG_RESERVOIR_1; + rsrvrCmd.useLastTrimmerHeaterDC = FALSE; + doorClosedRequired( TRUE, TRUE ); setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); setValvePosition( VDO, VALVE_POSITION_C_CLOSE ); setValvePosition( VBA, VALVE_POSITION_B_OPEN ); setValvePosition( VBV, VALVE_POSITION_B_OPEN ); setValveAirTrap( STATE_CLOSED ); - cmdSetDGActiveReservoir( DG_RESERVOIR_1 ); + cmdSetDGActiveReservoir( &rsrvrCmd ); cmdStartDGTrimmerHeater(); startAirTrapControl(); Index: firmware/App/Modes/Prime.c =================================================================== diff -u -r34d0843fa73e79ba3b085dd4aaa393a1ec126fd4 -ref398e685d6cfbdcb8c18fd9319819672c6c9d89 --- firmware/App/Modes/Prime.c (.../Prime.c) (revision 34d0843fa73e79ba3b085dd4aaa393a1ec126fd4) +++ firmware/App/Modes/Prime.c (.../Prime.c) (revision ef398e685d6cfbdcb8c18fd9319819672c6c9d89) @@ -589,8 +589,13 @@ if ( TRUE == getReservoirFillStatus( DG_RESERVOIR_1 ) ) { - cmdSetDGActiveReservoir( DG_RESERVOIR_1 ); + DG_SWITCH_RSRVRS_CMD_T rsrvrCmd; + rsrvrCmd.reservoirID = (U32)DG_RESERVOIR_1; + rsrvrCmd.useLastTrimmerHeaterDC = FALSE; + + cmdSetDGActiveReservoir( &rsrvrCmd ); + if ( TRUE == hasDGCompletedReservoirSwitch() ) { U32 dialyzerDialysateVolume = getDialyzerDialysateVolume(); @@ -770,8 +775,13 @@ if ( TRUE == getReservoirFillStatus( DG_RESERVOIR_2 ) ) { - cmdSetDGActiveReservoir( DG_RESERVOIR_2 ); + DG_SWITCH_RSRVRS_CMD_T rsrvrCmd; + rsrvrCmd.reservoirID = (U32)DG_RESERVOIR_1; + rsrvrCmd.useLastTrimmerHeaterDC = FALSE; + + cmdSetDGActiveReservoir( &rsrvrCmd ); + if ( TRUE == hasDGCompletedReservoirSwitch() ) { signalBloodPumpHardStop(); Index: firmware/App/Modes/TreatmentEnd.c =================================================================== diff -u -r8b73263b38f449dacc0795c67a7cf6240cb79026 -ref398e685d6cfbdcb8c18fd9319819672c6c9d89 --- firmware/App/Modes/TreatmentEnd.c (.../TreatmentEnd.c) (revision 8b73263b38f449dacc0795c67a7cf6240cb79026) +++ firmware/App/Modes/TreatmentEnd.c (.../TreatmentEnd.c) (revision ef398e685d6cfbdcb8c18fd9319819672c6c9d89) @@ -220,7 +220,12 @@ { if ( getDGInactiveReservoir() != DG_RESERVOIR_1 ) { - cmdSetDGActiveReservoir( DG_RESERVOIR_2 ); + DG_SWITCH_RSRVRS_CMD_T rsrvrCmd; + + rsrvrCmd.reservoirID = (U32)DG_RESERVOIR_2; + rsrvrCmd.useLastTrimmerHeaterDC = FALSE; + + cmdSetDGActiveReservoir( &rsrvrCmd ); } else { Index: firmware/App/Services/Reservoirs.c =================================================================== diff -u -r9d81efee3ea73c452bb6b84501c8accf85ab81f7 -ref398e685d6cfbdcb8c18fd9319819672c6c9d89 --- firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision 9d81efee3ea73c452bb6b84501c8accf85ab81f7) +++ firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision ef398e685d6cfbdcb8c18fd9319819672c6c9d89) @@ -606,16 +606,20 @@ if ( ( TRUE == didTimeout( reservoirSwitchStartTimeMS, 15000 /*RESERVOIR_SETTLE_TIME_MS*/ ) ) && ( ( dilutionLevelPct >= MAX_RESERVOIR_DILUTION ) || ( volSpentML >= (F32)FILL_RESERVOIR_TO_VOLUME_ML ) || ( getReservoirWeight( active ) > MAX_RESERVOIR_VOL_BEFORE_SWITCH_ML ) ) ) { - DG_RESERVOIR_ID_T inactiveRes = getDGInactiveReservoir(); + DG_SWITCH_RSRVRS_CMD_T rsrvrCmd; + DG_RESERVOIR_ID_T inactiveRes = getDGInactiveReservoir(); + rsrvrCmd.reservoirID = (U32)inactiveRes; + rsrvrCmd.useLastTrimmerHeaterDC = TRUE; + // TODO test code remove //if ( TRUE == test ) // TODO comment the if statement { // Signal dialysis sub-mode to capture baseline volume for next reservoir. setStartReservoirVolume( inactiveRes ); // Command DG to switch reservoirs - cmdSetDGActiveReservoir( inactiveRes ); + cmdSetDGActiveReservoir( &rsrvrCmd ); // Signal dialysis sub-mode to switch reservoirs signalReservoirsSwitched(); Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r9d81efee3ea73c452bb6b84501c8accf85ab81f7 -ref398e685d6cfbdcb8c18fd9319819672c6c9d89 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 9d81efee3ea73c452bb6b84501c8accf85ab81f7) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision ef398e685d6cfbdcb8c18fd9319819672c6c9d89) @@ -1429,7 +1429,7 @@ * @param activeReservoir reservoir ID to set as active * @return TRUE if msg successfully queued for transmit, FALSE if not *************************************************************************/ -BOOL sendDGSwitchReservoirCommand( U32 activeReservoir ) +BOOL sendDGSwitchReservoirCommand( DG_SWITCH_RSRVRS_CMD_T *cmd ) { BOOL result; MESSAGE_T msg; @@ -1438,9 +1438,9 @@ // Create a message record blankMessage( &msg ); msg.hdr.msgID = MSG_ID_DG_SWITCH_RESERVOIR_CMD; - msg.hdr.payloadLen = sizeof( U32 ); + msg.hdr.payloadLen = sizeof( DG_SWITCH_RSRVRS_CMD_T ); - memcpy( payloadPtr, &activeReservoir, sizeof( U32 ) ); + memcpy( payloadPtr, cmd, sizeof( DG_SWITCH_RSRVRS_CMD_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 -re8053e6bdafd0638102e01c4250dfd74c0850ba1 -ref398e685d6cfbdcb8c18fd9319819672c6c9d89 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision e8053e6bdafd0638102e01c4250dfd74c0850ba1) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision ef398e685d6cfbdcb8c18fd9319819672c6c9d89) @@ -357,7 +357,7 @@ BOOL sendDialysateHeatingParamsToDG( DG_CMD_DIALYSATE_HEATING_PARAMS_T *params ); // MSG_ID_DG_SWITCH_RESERVOIR_CMD -BOOL sendDGSwitchReservoirCommand( U32 activeReservoir ); +BOOL sendDGSwitchReservoirCommand( DG_SWITCH_RSRVRS_CMD_T *cmd ); // MSG_ID_DG_CHANGE_VALVE_SETTING_CMD BOOL sendDGChangeValveSettingCommand( U32 valveSettingCmd );