Index: firmware/App/Modes/ModeGenDialysate.c =================================================================== diff -u -r56410a2475a4a6d1aa93642c630cdf37683d3231 -r67453852a25077d0da103dca88449ee79d628680 --- firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision 56410a2475a4a6d1aa93642c630cdf37683d3231) +++ firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision 67453852a25077d0da103dca88449ee79d628680) @@ -72,6 +72,8 @@ //Testing #define DELAY_BC_SWITCHING_AT_START_UP ( 10 * MS_PER_SECOND ) ///< Provide a balancing chamber switching start up delay to stabilize pump speed etc., +#define MAX_UF_RATE 150 + /// Payload record structure for Gen dialysate execution state set request typedef struct { @@ -114,6 +116,7 @@ static void monitorChamberLevelStatus( void ); static void publishGenDialysateModeData( void ); static U32 getFreshDialPumpInitialRpm( void ); +static DD_GEND_MODE_STATE_T handleGenDPrimeFluidDiscardState( void ); /*********************************************************************//** * @brief @@ -488,6 +491,33 @@ //TODO : define actuators states break; + case DD_GEND_PRIME_FLUID_DISCARD_STATE: + // Deactivate Balancing Chamber Switching + //requestBalChamberSwitching( FALSE ); + // Turn off fresh & spent pumps + signalDialysatePumpHardStop( D12_PUMP ); + signalDialysatePumpHardStop( D48_PUMP ); + + setValveState( D40_VALV, VALVE_STATE_CLOSED ); + setValveState( D35_VALV, VALVE_STATE_CLOSED ); + setValveState( D100_VALV, VALVE_STATE_OPEN ); + setValveState( D34_VALV, VALVE_STATE_CLOSED ); + setValveState( D91_VALV, VALVE_STATE_CLOSED ); + setValveState( D47_VALV, VALVE_STATE_CLOSED ); + setValveState( D52_VALV, VALVE_STATE_CLOSED ); + setValveState( D14_VALV, VALVE_STATE_CLOSED ); + setValveState( D65_VALV, VALVE_STATE_CLOSED ); + //Close all balancing chamber valves + valveControlForBCClosedState(); + + //UF pump on + setConcentratePumpTargetSpeed( D76_PUMP, MAX_UF_RATE, DOSING_CONT_VOLUME ); + requestConcentratePumpOn( D76_PUMP ); + + //Rinse pump On + setRinsePumpState( RINSE_PUMP_STATE_ON ); + break; + default: SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_GEND_MODE_INVALID_EXEC_STATE1, state ) break; @@ -564,6 +594,10 @@ genDialysateState = handleGenDIsolatedUFState(); break; + case DD_GEND_PRIME_FLUID_DISCARD_STATE: + genDialysateState = handleGenDPrimeFluidDiscardState(); + break; + default: SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_GEND_MODE_INVALID_EXEC_STATE, genDialysateState ) genDialysateState = DD_GEND_STATE_START; @@ -812,6 +846,21 @@ state = DD_GEND_DIALYSATE_DELIVERY_STATE; } + if ( TRUE == getprimeFluidDiscardStatus() ) + { + // Deactivate Balancing Chamber Switching + requestBalChamberSwitching( FALSE ); + + // Wait for the Balancing Chamber to complete the current cycle before transition into spent chamber fill state + if ( getBalancingChamberStatus() == FALSE ) + { + setModeGenDStateTransition( DD_GEND_PRIME_FLUID_DISCARD_STATE ); + isDialDeliveryInProgress.data = FALSE; + state = DD_GEND_PRIME_FLUID_DISCARD_STATE; + } + + } + return state; } @@ -957,6 +1006,30 @@ /*********************************************************************//** * @brief + * The handleGenDPrimeFluidDiscardState function performs discarding the + * priming fluid from disposable tube set. Runs the ultrafiltration pump (D76) + * to discard the priming fluid. + * @details \b Inputs: none + * @details \b Outputs: none + * @return next gen dialysate mode state + *************************************************************************/ +static DD_GEND_MODE_STATE_T handleGenDPrimeFluidDiscardState( void ) +{ + DD_GEND_MODE_STATE_T state = DD_GEND_PRIME_FLUID_DISCARD_STATE; + + if ( FALSE == getprimeFluidDiscardStatus() ) + { + requestConcentratePumpOff( D76_PUMP, FALSE ); + setValveState( D100_VALV, VALVE_STATE_CLOSED ); + setModeGenDStateTransition( DD_GEND_DIALYSATE_BYPASS_STATE ); + state = DD_GEND_DIALYSATE_BYPASS_STATE; + } + + return state; +} + +/*********************************************************************//** + * @brief * The requestDDGenDialyasteStop function handles an TD request to stop * generation dialysis mode. * @details \b Inputs: Generation dialysate mode / state