/************************************************************************** * * Copyright (c) 2020-2023 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file Valves.h * * @author (last) Sean Nash * @date (last) 04-May-2023 * * @author (original) Dara Navaei * @date (original) 07-Aug-2020 * ***************************************************************************/ #ifndef _VALVES_H_ #define _VALVES_H_ #include "Common.h" /** * @defgroup Valves Valves * @brief Valves module * Driver that runs the valves in HD. The driver can home the valves * as well as setting a position. * * @addtogroup Valves * @{ */ // ********** public definitions ********** #define VALVE_NO_FORCE_HOME FALSE ///< Do not re-home valve if already homed - just go to position A instead #define VALVE_FORCE_HOME TRUE ///< Force valve to home even if already homed #define VALVE_NO_CARTRIDGE_PRESENT FALSE ///< No cartridge should be present, so insist homed positions to be near where expected #define VALVE_CARTRIDGE_MAY_BE_PRESENT TRUE ///< A cartridge may be present, so allow for homed positions to be further away from where expected /// Valves positions typedef enum valveStatesNames { VALVE_POSITION_NOT_IN_POSITION = 0, ///< Valve position is unknown (cannot be used as a command) VALVE_POSITION_A_INSERT_EJECT, ///< Position A, Insert/Eject (current position or commanded) VALVE_POSITION_B_OPEN, ///< Position B, Open (current position or commanded) VALVE_POSITION_C_CLOSE, ///< Position C, Close (current position or commanded) NUM_OF_VALVE_POSITIONS, ///< Number of valve positions } VALVE_POSITION_T; /// 3 way valves names typedef enum valvesNames { VDI = 0, ///< Valve Dialyzer Inlet VDO, ///< Valve Dialyzer Outlet VBA, ///< Valve Blood Arterial VBV, ///< Valve Blood Venous NUM_OF_VALVES ///< Number of valves } VALVE_T; #pragma pack(push, 1) /// HD valves broadcast data typedef struct { U32 valveID; ///< Valve ID U32 state; ///< Current state of the state machine U32 currentPosID; ///< Current position in enum S16 currentPos; ///< Current position in counts S16 nextPos; ///< Next position in counts F32 current; ///< Current of the valves S16 posC; ///< Calculated Position C S16 posA; ///< Calculated Position A S16 posB; ///< Calculated Position B U32 pwm; ///< Valve PWM in the bypass mode U32 airTrapValve; ///< Air trap valve status } HD_VALVE_DATA_T; #pragma pack(pop) /// HD valves PWM override payload typedef struct { BOOL reset; ///< Reset flag U32 valve; ///< Valve ID U32 pwm; ///< Valve PWM U32 direction; ///< Valve direction } OVERRIDE_VALVES_PWM_DIR_SET_PAYLOAD_T; // ********** public function prototypes ********* void initValves( void ); SELF_TEST_STATUS_T execValvesSelfTest( void ); void resetValvesPOSTState( void ); void execValves( void ); 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 ); F32 getValveCurrent( VALVE_T valve ); void setValveAirTrap( OPN_CLS_STATE_T state ); OPN_CLS_STATE_T getValveAirTrapStatus( void ); BOOL testSetValvesDataPublishInterval( U32 value ); BOOL testResetValvesDataPublishInterval( void ); BOOL testSetValvesPositionOverride( U32 valve, U32 position ); BOOL testResetValvesPositionOverride( U32 valve ); BOOL testSetValvePWMOverride( U32 valve, U32 pwm, U32 direction ); BOOL testResetValvePWMOverride( U32 valve ); BOOL testSetValvesCurrentOverride( U32 valve, F32 current ); BOOL testResetValvesCurrentOverride( U32 valve ); BOOL testSetValvesPositionCountOverride( U32 valve, U32 count ); BOOL testResetValvesPositionCountOverride( U32 valve ); /**@}*/ #endif