Index: firmware/App/Controllers/Valves.c =================================================================== diff -u -r395522dffef1348e176564925656012f529c1910 -rb777859b2667c350c6ca9fda60a668c9eb5fe02d --- firmware/App/Controllers/Valves.c (.../Valves.c) (revision 395522dffef1348e176564925656012f529c1910) +++ firmware/App/Controllers/Valves.c (.../Valves.c) (revision b777859b2667c350c6ca9fda60a668c9eb5fe02d) @@ -47,21 +47,6 @@ #define POS_C_FROM_ZERO_CNT VALVE_OFFEST_FROM_EDG_CNT ///< Position C from zero position in counts. #define POS_D_PARTIAL_CLOSE_FROM_ZERO_CNT ( POS_C_FROM_ZERO_CNT + 32 ) ///< Position D partial close from zero position in counts. -/// Valve controller states -typedef enum Valve_Control_States -{ - VALVE_STATE_WAIT_FOR_POST = 0, ///< Valve state wait for POST. - VALVE_STATE_RESET_VALVE, ///< Valve state reset valve. - VALVE_STATE_RESET_ENCODER, ///< Valve state reset encoder. - VALVE_STATE_ENABLE_VALVE, ///< Valve state enable valve. - VALVE_STATE_HOMING_NOT_STARTED, ///< Valve state homing not started. - VALVE_STATE_HOMING_FIND_ENERGIZED_EDGE, ///< Valve state homing find energized edge. - VALVE_STATE_HOMING_FIND_DEENERGIZED_EDGE, ///< Valve state homing find de-energized edge. - VALVE_STATE_IDLE, ///< Valve state idle. - VALVE_STATE_IN_TRANSITION, ///< Valve state in transition. - NUM_OF_VALVE_STATES, ///< Number of valve exec states. -} VALVE_STATE_T; - /// Valve status structure typedef struct { @@ -252,6 +237,31 @@ /*********************************************************************//** * @brief + * The getValveState function returns the current state of a given valve. + * @details \b Alarm: ALARM_ID_TD_SOFTWARE_FAULT if given valve is invalid. + * @details \b Inputs: currentValveStates[] + * @details \b Outputs: none + * @param valve ID of valve to get current state of + * @return Current state of the given valve + *************************************************************************/ +VALVE_STATE_T getValveState( VALVE_T valve ) +{ + VALVE_STATE_T result = VALVE_STATE_HOMING_NOT_STARTED; + + if ( valve < NUM_OF_VALVES ) + { + result = currentValveStates[ valve ].controlState; + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_TD_VALVES_INVALID_VALVE2, (U32)valve ) + } + + return result; +} + +/*********************************************************************//** + * @brief * The execValvesController function executes the valves state machine. * @details \b Alarm: ALARM_ID_TD_SOFTWARE_FAULT if a valve control state is invalid. * @details \b Inputs: currentValveStates[] Index: firmware/App/Controllers/Valves.h =================================================================== diff -u -r395522dffef1348e176564925656012f529c1910 -rb777859b2667c350c6ca9fda60a668c9eb5fe02d --- firmware/App/Controllers/Valves.h (.../Valves.h) (revision 395522dffef1348e176564925656012f529c1910) +++ firmware/App/Controllers/Valves.h (.../Valves.h) (revision b777859b2667c350c6ca9fda60a668c9eb5fe02d) @@ -61,6 +61,21 @@ } TD_VALVE_DATA_T; #pragma pack(pop) +/// Valve controller states +typedef enum Valve_Control_States +{ + VALVE_STATE_WAIT_FOR_POST = 0, ///< Valve state wait for POST. + VALVE_STATE_RESET_VALVE, ///< Valve state reset valve. + VALVE_STATE_RESET_ENCODER, ///< Valve state reset encoder. + VALVE_STATE_ENABLE_VALVE, ///< Valve state enable valve. + VALVE_STATE_HOMING_NOT_STARTED, ///< Valve state homing not started. + VALVE_STATE_HOMING_FIND_ENERGIZED_EDGE, ///< Valve state homing find energized edge. + VALVE_STATE_HOMING_FIND_DEENERGIZED_EDGE, ///< Valve state homing find de-energized edge. + VALVE_STATE_IDLE, ///< Valve state idle. + VALVE_STATE_IN_TRANSITION, ///< Valve state in transition. + NUM_OF_VALVE_STATES, ///< Number of valve exec states. +} VALVE_STATE_T; + // ********** public function prototypes ********** void initValves(void); @@ -70,6 +85,7 @@ BOOL homeValve( VALVE_T valve, BOOL force, BOOL cartridge ); BOOL setValvePosition( VALVE_T valve, VALVE_POSITION_T position ); VALVE_POSITION_T getValvePosition( VALVE_T valve ); +VALVE_STATE_T getValveState( VALVE_T valve ); BOOL testValvesDataPublishIntervalOverride( MESSAGE_T *message ); BOOL testValveSetABCCmdPosition( MESSAGE_T *message ); Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -re9e339870c5ed01230963f00d400331ab879c91f -rb777859b2667c350c6ca9fda60a668c9eb5fe02d --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision e9e339870c5ed01230963f00d400331ab879c91f) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision b777859b2667c350c6ca9fda60a668c9eb5fe02d) @@ -27,6 +27,8 @@ #include "Switches.h" #include "SystemCommTD.h" #include "TxParams.h" +#include "Valve3Way.h" +#include "Valves.h" /** * @addtogroup TDStandbyMode @@ -42,6 +44,7 @@ static TD_STANDBY_STATE_T currentStandbyState; ///< Current state (sub-mode) of standby mode. static BOOL treatStartReqReceived; ///< Flag indicates user has requested initiation of a treatment. +static BOOL homingInitiated; ///< Flag indicates actuators have been homed. // ********** private function prototypes ********** @@ -52,13 +55,14 @@ * @brief * The initStandbyMode function initializes the Standby Mode Unit. * @details \b Inputs: none - * @details \b Outputs: currentStandbyState, treatStartReqReceived + * @details \b Outputs: Standby mode variables initialized. * @return none *************************************************************************/ void initStandbyMode( void ) { currentStandbyState = STANDBY_START_STATE; treatStartReqReceived = FALSE; + homingInitiated = FALSE; } /*********************************************************************//** @@ -84,15 +88,22 @@ setAlarmUserActionEnabled( ALARM_USER_ACTION_END_TREATMENT, FALSE ); // Pumps should be off -// signalBloodPumpHardStop(); + signalBloodPumpHardStop(); // stopSyringePump(); // Set valves to default positions -// setValveAirTrap( VALVE_3WAY_COMMON_TO_CLOSED_STATE ); -// setValvePosition( H1_VALV, VALVE_POSITION_A_INSERT_EJECT ); -// setValvePosition( H19, VALVE_POSITION_A_INSERT_EJECT ); + set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); + set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); + if ( getValveState( H1_VALV ) < VALVE_STATE_IDLE ) + { + setValvePosition( H1_VALV, VALVE_POSITION_A_INSERT_EJECT ); + } + if ( getValveState( H19_VALV ) < VALVE_STATE_IDLE ) + { + setValvePosition( H19_VALV, VALVE_POSITION_A_INSERT_EJECT ); + } -// doorClosedRequired( FALSE ); // door no longer required to be closed in standby mode + doorClosedRequired( FALSE ); // door no longer required to be closed in standby mode // syringeDetectionRequired( FALSE ); // Request DD service record and usage information from DD @@ -154,23 +165,23 @@ // Wait for door to be closed so we can home actuators // if ( STATE_CLOSED == getSwitchState( H9_SWCH ) ) // { -// // If we haven't already initiated homing of actuators, initiate now -// if ( homingInitiated != TRUE ) -// { -// VALVE_T valve; -// -// // Home pumps and valves -// for ( valve = VDI; valve < NUM_OF_VALVES; ++valve ) -// { -// homeValve( valve, VALVE_NO_FORCE_HOME, VALVE_CARTRIDGE_MAY_BE_PRESENT ); -// } + // If we haven't already initiated homing of actuators, initiate now + if ( homingInitiated != TRUE ) + { + VALVE_T valve; + + // Home pumps and valves + for ( valve = FIRST_VALVE; valve < NUM_OF_VALVES; ++valve ) + { + homeValve( valve, FALSE, TRUE ); + } // homeBloodPump(); // homeDialInPump(); // homeDialOutPump(); // retractSyringePump(); -// -// homingInitiated = TRUE; -// } + + homingInitiated = TRUE; + } // else // { // // If homing has been initiated, wait for syringe pump to home and the verify force sensor calibration Index: firmware/App/Modes/StateTxBloodPrime.c =================================================================== diff -u -rce58760d9ec26a8ddc4d2462671d7f3db961f621 -rb777859b2667c350c6ca9fda60a668c9eb5fe02d --- firmware/App/Modes/StateTxBloodPrime.c (.../StateTxBloodPrime.c) (revision ce58760d9ec26a8ddc4d2462671d7f3db961f621) +++ firmware/App/Modes/StateTxBloodPrime.c (.../StateTxBloodPrime.c) (revision b777859b2667c350c6ca9fda60a668c9eb5fe02d) @@ -117,7 +117,7 @@ cumulativeBloodPrimeVolume_mL.data = 0.0; resetBloodPrimeFlags(); - bloodPrimeTargetVolume_mL = TUBING_BLOOD_PRIME_VOLUME_ML + (F32)( getDialyzerBloodVolume( getTreatmentParameterU32( TREATMENT_PARAM_DIALYZER_TYPE ) ) ); + bloodPrimeTargetVolume_mL = (F32)TUBING_BLOOD_PRIME_VOLUME_ML + (F32)( getDialyzerBloodVolume( (DIALYZER_TYPE_T)getTreatmentParameterU32( TREATMENT_PARAM_DIALYZER_TYPE ) ) ); bloodPrimeRampFlowRate_mL_min = (F32)BLOOD_PRIME_INIT_BP_FLOW_RATE_ML_MIN; // Calculate BP ramp step size Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -re9e339870c5ed01230963f00d400331ab879c91f -rb777859b2667c350c6ca9fda60a668c9eb5fe02d --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision e9e339870c5ed01230963f00d400331ab879c91f) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision b777859b2667c350c6ca9fda60a668c9eb5fe02d) @@ -186,6 +186,7 @@ SW_FAULT_ID_TD_AIR_PUMP_DUTY_CYCLE_OUT_OF_RANGE = 155, SW_FAULT_ID_PI_CTRL_INVALID_CONTROLLER = 156, SW_FAULT_ID_INVALID_TREATMENT_MODALITY = 157, + SW_FAULT_ID_TD_VALVES_INVALID_VALVE2 = 158, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T;