Index: firmware/App/Modes/ModeGenDialysate.c =================================================================== diff -u -rf8bb43e62a4d10b64d8b197e372a56adfcfb88b9 -r5126b79e4970ffe2ed9db4cccea18a1216c78570 --- firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision f8bb43e62a4d10b64d8b197e372a56adfcfb88b9) +++ firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision 5126b79e4970ffe2ed9db4cccea18a1216c78570) @@ -22,6 +22,7 @@ #include "FpgaDD.h" #include "Heaters.h" #include "Level.h" +#include "Messaging.h" #include "ModeGenDialysate.h" #include "ModeStandby.h" #include "OperationModes.h" @@ -51,6 +52,12 @@ #define HYD_CHAMBER_TARGET_NEG_PRESS_MAX_PSI (-12.075F) ///< Hydraulics chamber maximum negative pressure(D9/PHo) in psi. #define GEN_DIALYSATE_DATA_PUBLISH_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the gen dialysate mode data published. +/// Payload record structure for Gen dialysate execution state set request +typedef struct +{ + U32 execStateSet; ///< Gen dialysate execution state machine set request +} GEND_EXEC_STATE_SET_CMD_PAYLOAD_T; + // ********** private data ********** static DD_GEND_MODE_STATE_T genDialysateState = DD_GEND_STATE_START; ///< Currently active gen dialysate state. @@ -62,7 +69,7 @@ static U32 genDialysateDataPublicationTimerCounter; ///< Used to schedule generate dialysate data publication to CAN bus. static OVERRIDE_U32_T genDialysateDataPublishInterval; ///< Generate dialysate mode data publish interval. static F32 lastDialTargetTemperatureSet; ///< last dialysate target temperature set for heater control -static BOOL isTreatmentParamUpdated; ///< To indicate change in treatment parameters +static BOOL isTreatmentParamUpdated; ///< To indicate change in treatment parameters // ********** private function prototypes ********** @@ -108,7 +115,7 @@ genDialysateDataPublishInterval.override = OVERRIDE_RESET; genDialysateDataPublicationTimerCounter = 0; lastDialTargetTemperatureSet = 0.0F; - isTreatmentParamUpdated = FALSE; + isTreatmentParamUpdated = FALSE; //Initialize balancing chamber module initBalanceChamber(); @@ -190,6 +197,10 @@ break; case DD_GEND_HYD_CHAMBER_PRESSURE_CHECK_STATE: + //Previous state + setValveState( M4_VALV, VALVE_STATE_OPEN ); + startHeater( D5_HEAT ); + // Open up VHo valve setValveState( D14_VALV, VALVE_STATE_OPEN ); // Start timer for hyd chamber negative pressure check state @@ -199,11 +210,23 @@ break; case DD_GEND_FRESH_DIALYSATE_PRESSURE_CHECK_STATE: + //Previous state + setValveState( M4_VALV, VALVE_STATE_OPEN ); + startHeater( D5_HEAT ); + setValveState( D14_VALV, VALVE_STATE_OPEN ); + setDialysatePumpTargetRPM( D12_PUMP, FRESH_DIAL_PUMP_INITIAL_RPM ); + // Lets be DGP continue running since pressure relief valve was set/ tuned part of priming process hydChamberPressureCheckStartTimeMS = getMSTimerCount(); break; case DD_GEND_SPENT_DIALYSATE_PRESSURE_CHECK_STATE: + //Previous state + setValveState( M4_VALV, VALVE_STATE_OPEN ); + startHeater( D5_HEAT ); + setValveState( D14_VALV, VALVE_STATE_OPEN ); + setDialysatePumpTargetRPM( D12_PUMP, FRESH_DIAL_PUMP_INITIAL_RPM ); + // Start the timer for spent dialysate pressure check spentDialPressureCheckStartTimeMS = getMSTimerCount(); @@ -221,16 +244,31 @@ break; case DD_GEND_PRODUCE_DIALYSATE_STATE: - //Close previously opened BC valves - valveControlForBCClosedState(); - - // Make sure bypass valve open condition + //Previous state + setValveState( M4_VALV, VALVE_STATE_OPEN ); + startHeater( D5_HEAT ); + setValveState( D14_VALV, VALVE_STATE_OPEN ); + setDialysatePumpTargetRPM( D12_PUMP, FRESH_DIAL_PUMP_INITIAL_RPM ); + setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve setValveState( D35_VALV, VALVE_STATE_CLOSED ); // VDI setValveState( D40_VALV, VALVE_STATE_CLOSED ); // VDO setValveState( D34_VALV, VALVE_STATE_OPEN ); // Bypass valve + setDialysatePumpTargetRPM( D48_PUMP, SPENT_DIAL_PUMP_INITIAL_RPM ); + + //Close previously opened BC valves + valveControlForBCClosedState(); + break; case DD_GEND_DIALYSATE_DELIVERY_STATE: + //Previous state + setValveState( M4_VALV, VALVE_STATE_OPEN ); + startHeater( D5_HEAT ); + setValveState( D14_VALV, VALVE_STATE_OPEN ); + setDialysatePumpTargetRPM( D12_PUMP, FRESH_DIAL_PUMP_INITIAL_RPM ); + setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve + setDialysatePumpTargetRPM( D48_PUMP, SPENT_DIAL_PUMP_INITIAL_RPM ); + // Disable bypass valve setValveState( D34_VALV, VALVE_STATE_CLOSED ); // Bypass valve setValveState( D35_VALV, VALVE_STATE_OPEN ); // VDI @@ -247,6 +285,11 @@ stopHeater( D5_HEAT ); stopHeater( D45_HEAT ); + //Enable bypass valve + setValveState( D35_VALV, VALVE_STATE_CLOSED ); // VDI + setValveState( D40_VALV, VALVE_STATE_CLOSED ); // VDO + setValveState( D34_VALV, VALVE_STATE_OPEN ); // Bypass valve + //close the DD - water inlet and drain valves? break; @@ -515,6 +558,7 @@ if ( ( TRUE == getDialGoodToDeliverStatus() ) && ( FALSE == getTDDialyzerBypass() ) ) { setModeGenDStateTransition( DD_GEND_DIALYSATE_DELIVERY_STATE ); + isDialDeliveryInProgress.data = TRUE; state = DD_GEND_DIALYSATE_DELIVERY_STATE; } @@ -541,6 +585,7 @@ if ( ( FALSE == getDialGoodToDeliverStatus() ) || ( TRUE == getTDDialyzerBypass() ) ) { setModeGenDStateTransition( DD_GEND_PRODUCE_DIALYSATE_STATE ); + isDialDeliveryInProgress.data = FALSE; state = DD_GEND_PRODUCE_DIALYSATE_STATE; } @@ -781,4 +826,45 @@ return result; } +/*********************************************************************//** + * @brief + * The testGenDExecStateOverride function sets the Gen dialysate execution state + * machine to given state. + * @details \b Inputs: tester logged in, execStateSet + * @details \b Outputs: genDialysateState + * @param message set message from Dialin which includes the generate dialysate + * execution state to be set. + * @return TRUE if set request is successful, FALSE if not + *************************************************************************/ +BOOL testGenDExecStateOverride( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + // Verify tester has logged in with DD + if ( TRUE == isTestingActivated() ) + { + // Verify payload length is valid + if ( sizeof( GEND_EXEC_STATE_SET_CMD_PAYLOAD_T ) == message->hdr.payloadLen ) + { + GEND_EXEC_STATE_SET_CMD_PAYLOAD_T payload; + + memcpy( &payload, message->payload, sizeof(GEND_EXEC_STATE_SET_CMD_PAYLOAD_T) ); + + // Validate the state to be set + if ( payload.execStateSet < NUM_OF_DD_GEND_MODE_STATES ) + { + //set the GenD exec state machine + DD_GEND_MODE_STATE_T state = (DD_GEND_MODE_STATE_T)payload.execStateSet; + + setModeGenDStateTransition( state ); + genDialysateState = state; + + result = TRUE; + } + } + } + + return result; +} + /**@}*/