Index: firmware/App/Controllers/DialInFlow.c =================================================================== diff -u -r1c628bfd5d6414b74b8cbd083f66839888a8236b -r50fc6ca962c381ac98c9f032115973a5fff2a761 --- firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision 1c628bfd5d6414b74b8cbd083f66839888a8236b) +++ firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision 50fc6ca962c381ac98c9f032115973a5fff2a761) @@ -928,11 +928,19 @@ * PWM duty cycle percentage. * @details Inputs: dialInPumpPWMDutyCyclePctSet * @details Outputs: none + * @param init Flag indicates whether or not initial PWM duty cycle is wanted * @return the current dialIn pump PWM duty cycle percentage (0..1). *************************************************************************/ -F32 getDialInPumpPWMDutyCyclePct( void ) +F32 getDialInPumpPWMDutyCyclePct( BOOL init ) { - return dialInPumpPWMDutyCyclePctSet; + F32 result = dialInPumpPWMDutyCyclePctSet; + + if ( TRUE == init ) + { + result = dialInPumpPWMDutyCyclePct; + } + + return result; } /*********************************************************************//** Index: firmware/App/Controllers/DialInFlow.h =================================================================== diff -u -r8466e63f95f65a3ffb18c3af85ac99328e41167b -r50fc6ca962c381ac98c9f032115973a5fff2a761 --- firmware/App/Controllers/DialInFlow.h (.../DialInFlow.h) (revision 8466e63f95f65a3ffb18c3af85ac99328e41167b) +++ firmware/App/Controllers/DialInFlow.h (.../DialInFlow.h) (revision 50fc6ca962c381ac98c9f032115973a5fff2a761) @@ -69,7 +69,7 @@ F32 getMeasuredDialInPumpSpeed( void ); F32 getMeasuredDialInPumpMCSpeed( void ); F32 getMeasuredDialInPumpMCCurrent( void ); -F32 getDialInPumpPWMDutyCyclePct( void ); +F32 getDialInPumpPWMDutyCyclePct( BOOL init ); BOOL testSetDialInFlowDataPublishIntervalOverride( U32 value ); BOOL testResetDialInFlowDataPublishIntervalOverride( void ); Index: firmware/App/Controllers/DialOutFlow.c =================================================================== diff -u -rcbb126cfd3a02c08436a66ffecb2bdf926263705 -r50fc6ca962c381ac98c9f032115973a5fff2a761 --- firmware/App/Controllers/DialOutFlow.c (.../DialOutFlow.c) (revision cbb126cfd3a02c08436a66ffecb2bdf926263705) +++ firmware/App/Controllers/DialOutFlow.c (.../DialOutFlow.c) (revision 50fc6ca962c381ac98c9f032115973a5fff2a761) @@ -514,7 +514,7 @@ } else { // Closed loop UF control is only controlling offset from DPi PWM - resetPIController( PI_CONTROLLER_ID_ULTRAFILTRATION, dialOutPumpPWMDutyCyclePctSet - getDialInPumpPWMDutyCyclePct() ); + resetPIController( PI_CONTROLLER_ID_ULTRAFILTRATION, dialOutPumpPWMDutyCyclePctSet - getDialInPumpPWMDutyCyclePct( TRUE ) ); } dialOutPumpControlModeSet = dialOutPumpControlMode; setDialOutPumpControlSignalPWM( dialOutPumpPWMDutyCyclePctSet ); @@ -559,7 +559,7 @@ } else { // Closed loop UF control is only controlling offset from DPi PWM - resetPIController( PI_CONTROLLER_ID_ULTRAFILTRATION, dialOutPumpPWMDutyCyclePctSet - getDialInPumpPWMDutyCyclePct() ); + resetPIController( PI_CONTROLLER_ID_ULTRAFILTRATION, dialOutPumpPWMDutyCyclePctSet - getDialInPumpPWMDutyCyclePct( TRUE ) ); } dialOutPumpControlModeSet = dialOutPumpControlMode; setDialOutPumpControlSignalPWM( dialOutPumpPWMDutyCyclePctSet ); @@ -600,7 +600,7 @@ // Get new PWM offset from PI controller offsetPWMDutyCyclePct = runPIController( PI_CONTROLLER_ID_ULTRAFILTRATION, refVol, totVol ); // Add PWM offset to DPi PWM mirror for our new DPo PWM - dialOutPumpPWMDutyCyclePctSet = getDialInPumpPWMDutyCyclePct() + offsetPWMDutyCyclePct; + dialOutPumpPWMDutyCyclePctSet = getDialInPumpPWMDutyCyclePct( FALSE ) + offsetPWMDutyCyclePct; // Limit PWM range dialOutPumpPWMDutyCyclePctSet = MIN( dialOutPumpPWMDutyCyclePctSet, MAX_DIAL_OUT_PUMP_PWM_DUTY_CYCLE ); dialOutPumpPWMDutyCyclePctSet = MAX( dialOutPumpPWMDutyCyclePctSet, MIN_DIAL_OUT_PUMP_PWM_DUTY_CYCLE ); Index: firmware/App/Modes/ModeFault.c =================================================================== diff -u -ra31707ccbf01a1b40f8500bc491dc9c616e7a163 -r50fc6ca962c381ac98c9f032115973a5fff2a761 --- firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision a31707ccbf01a1b40f8500bc491dc9c616e7a163) +++ firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision 50fc6ca962c381ac98c9f032115973a5fff2a761) @@ -77,8 +77,6 @@ collectTreatmentLogData(); sendTreatmentLogDataToUI(); } - - SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_MODE_CHANGE, 0, 0 ) } /*********************************************************************//** Index: firmware/App/Modes/ModeInitPOST.c =================================================================== diff -u -ra31707ccbf01a1b40f8500bc491dc9c616e7a163 -r50fc6ca962c381ac98c9f032115973a5fff2a761 --- firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision a31707ccbf01a1b40f8500bc491dc9c616e7a163) +++ firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision 50fc6ca962c381ac98c9f032115973a5fff2a761) @@ -106,8 +106,6 @@ setAlarmUserActionEnabled( ALARM_USER_ACTION_RESUME, FALSE ); setAlarmUserActionEnabled( ALARM_USER_ACTION_RINSEBACK, FALSE ); setAlarmUserActionEnabled( ALARM_USER_ACTION_END_TREATMENT, FALSE ); - - SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_MODE_CHANGE, 0, 0 ) } /*********************************************************************//** Index: firmware/App/Modes/ModePostTreat.c =================================================================== diff -u -rd80c4a21ab700d8197e292f34c86dad61828c45a -r50fc6ca962c381ac98c9f032115973a5fff2a761 --- firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision d80c4a21ab700d8197e292f34c86dad61828c45a) +++ firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 50fc6ca962c381ac98c9f032115973a5fff2a761) @@ -121,7 +121,6 @@ void transitionToPostTreatmentMode( void ) { initPostTreatmentMode(); - SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_MODE_CHANGE, 0, HD_POST_TREATMENT_PATIENT_DISCONNECTION_STATE ) // Stop any DG fill that may be in progress from an aborted treatment cmdStopDGFill(); @@ -533,12 +532,12 @@ if ( ( DG_MODE_GENE == getDGOpMode() ) && ( DG_GEN_IDLE_MODE_STATE_FLUSH_WATER == getDGSubMode() ) ) { - cmdSetDGActiveReservoir( DG_RESERVOIR_1 ); + cmdSetDGActiveReservoir( DG_RESERVOIR_2 ); if ( TRUE == hasDGCompletedReservoirSwitch() ) { state = DRAIN_FIRST_RESERVOIR_STATE; - rinseConcentrateLines = FALSE; + rinseConcentrateLines = TRUE; cmdStartDGDrain( DRAIN_RESERVOIR_TO_VOLUME_ML, TRUE, rinseConcentrateLines ); } } @@ -598,7 +597,7 @@ if ( TRUE == hasDGCompletedReservoirSwitch() ) { state = DRAIN_SECOND_RESERVOIR_STATE; - rinseConcentrateLines = TRUE; + rinseConcentrateLines = FALSE; cmdStartDGDrain( DRAIN_RESERVOIR_TO_VOLUME_ML, TRUE, rinseConcentrateLines ); } Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -ra31707ccbf01a1b40f8500bc491dc9c616e7a163 -r50fc6ca962c381ac98c9f032115973a5fff2a761 --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision a31707ccbf01a1b40f8500bc491dc9c616e7a163) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 50fc6ca962c381ac98c9f032115973a5fff2a761) @@ -111,6 +111,7 @@ void execOperationModes( void ) { HD_OP_MODE_T newMode; + U32 priorSubMode = currentSubMode; // Any new mode requests? newMode = arbitrateModeRequest(); // Will return current mode if no pending requests @@ -174,6 +175,16 @@ break; } // End switch + // Send sub-mode change event when appropriate + if ( lastMode != currentMode ) + { + priorSubMode = 0; + } + if ( ( priorSubMode != currentSubMode ) || ( lastMode != currentMode ) ) + { + SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_MODE_CHANGE, priorSubMode, currentSubMode ) + } + // Broadcast current operation mode on interval broadcastOperationMode(); } Index: firmware/App/Modes/TreatmentEnd.c =================================================================== diff -u -r994dd4e7cb997f5d280180ff48ecec9d3963001a -r50fc6ca962c381ac98c9f032115973a5fff2a761 --- firmware/App/Modes/TreatmentEnd.c (.../TreatmentEnd.c) (revision 994dd4e7cb997f5d280180ff48ecec9d3963001a) +++ firmware/App/Modes/TreatmentEnd.c (.../TreatmentEnd.c) (revision 50fc6ca962c381ac98c9f032115973a5fff2a761) @@ -224,6 +224,19 @@ { TREATMENT_END_STATE_T result = TREATMENT_END_WAIT_FOR_RINSEBACK_STATE; + // Set reservoir 2 as active so we can drain reservoir 1 ASAP // TODO - I think this should be handled by treatment reservoir mgmt state machine + if ( ( DG_MODE_GENE == getDGOpMode() ) && ( DG_GEN_IDLE_MODE_STATE_FLUSH_WATER == getDGSubMode() ) ) + { + if ( getDGInactiveReservoir() != DG_RESERVOIR_1 ) + { + cmdSetDGActiveReservoir( DG_RESERVOIR_2 ); + } + else + { + cmdStartDGDrain( DRAIN_RESERVOIR_TO_VOLUME_ML, TRUE, FALSE ); + } + } + // Is alarm stop or user reconnect requested? if ( TRUE == doesAlarmStatusIndicateStop() ) {