/* * Valves.c * * Created on: Aug 7, 2020 * Author: fw */ #include "Valves.h" #include "FPGA.h" /** * @addtogroup Valves * @{ */ // ********** private definitions ********** // Valve dialyzer inlet defines #define VDI_ENABLE_PID_INTERFACE 0x0010 #define VDI_ENABLE_BYPASS_INTERFACE 0x00EF #define VDI_INITIALIZATION_STATUS_BIT_MASK 0x0040 #define VDI_ENABLE_PID_STATUS_BIT_MASK 0x0080 #define VDI_ENABLE_BYPASS_STATUS_BIT_MASK 0x00100 // Valve dialyzer outlet defines #define VDO_ENABLE_PID_INTERFACE 0x0040 #define VDO_ENABLE_BYPASS_INTERFACE 0x00BF // Valve blood arterial defines #define VBA_ENABLE_PID_INTERFACE 0x0001 #define VBA_ENABLE_BYPASS_INTERFACE 0x00FE // Vlave blood venous defines #define VBV_ENABLE_PID_INTERFACE 0x0004 #define VBV_ENABLE_BYPASS_INTERFACE 0x00FB #define INITIAL_DENERGIZED_READ_COUNT 0U #define INITIAL_ENERGIZED_READ_COUNT 12000U #define INITIAL_OFFSET_READ_COUNT 40U // ********** private data ********** /// Valve States typedef enum valveStates { VALVE_STATE_WAIT_FOR_POST = 0, VALVE_STATE_IDLE, VALVE_STATE_IN_TRANSITION, VALVE_STATE_HOMING_START, //TODO do we need this? VALVE_STATE_HOMING_FIND_ENERGIZED_EDGE, VALVE_STATE_HOMING_FIND_DENERGIZED_EDGE, NUM_OF_VALVE_STATES, } VALVE_STATE_T; typedef struct { VALVE_POSITION_T commandedPosition; VALVE_POSITION_T currentPosition; BOOL hasTransitionBeenRequested; BOOL isHomingSuccessfull; // TODO do we need this? BOOL hasValveBeenEnabled; // TODO do we need this? S16 homingPosition; } VALVE_STATUS_T; static VALVE_STATE_T dialyzerInletValveState = VALVE_STATE_WAIT_FOR_POST; static VALVE_STATE_T dialyzerOutletValveState = VALVE_STATE_WAIT_FOR_POST; static VALVE_STATE_T bloodArterialValveState = VALVE_STATE_WAIT_FOR_POST; static VALVE_STATE_T bloodVenousValveState = VALVE_STATE_WAIT_FOR_POST; static VALVE_STATUS_T valvesStatus [ NUM_OF_VALVE_POSITIONS ]; static VALVE_STATE_T handleValveStateIdle( void ); static VALVE_STATE_T handleValveStateInTransition( void ); static VALVE_STATE_T handleValveStateHomingStart( void ); static VALVE_STATE_T handleValveStateHomingFindEnergizedEdge( void ); static VALVE_STATE_T handleValveStateHomingFineDenergizedEdge( void ); void initValves( void ) { dialyzerOutletValveState = VALVE_STATE_WAIT_FOR_POST; // TODO REMOVE THIS CODE dialyzerInletValveState = VALVE_STATE_IDLE; //TODO REMOVE THIS CODE dialyzerOutletValveState = VALVE_STATE_WAIT_FOR_POST; bloodArterialValveState = VALVE_STATE_WAIT_FOR_POST; bloodVenousValveState = VALVE_STATE_WAIT_FOR_POST; } SELF_TEST_STATUS_T execValvesSelfTest( void ) { } void execValves( void ) { // VDi state machine switch ( dialyzerInletValveState ) { case VALVE_STATE_WAIT_FOR_POST: break; case VALVE_STATE_IDLE: break; case VALVE_STATE_IN_TRANSITION: break; case VALVE_STATE_HOMING_START: break; case VALVE_STATE_HOMING_FIND_ENERGIZED_EDGE: break; case VALVE_STATE_HOMING_FIND_DENERGIZED_EDGE: break; default: break; } } BOOL homeValve( VALVE_T valve, VALVE_POSITION_T position ) { BOOL result = FALSE; switch ( valve ) { case VDI: dialyzerInletValveState = VALVE_STATE_HOMING_FIND_ENERGIZED_EDGE; break; case VDO: //enableValvesPIDControl( VDO_ENABLE_PID_INTERFACE ); break; case VBA: //enableValvesPIDControl( VBA_ENABLE_PID_INTERFACE ); break; case VBV: //enableValvesPIDControl( VBV_ENABLE_PID_INTERFACE ); break; default: break; } return result; } BOOL enableValvePIDController( VALVE_T valve ) { BOOL result = FALSE; switch ( valve ) { case VDI: enableValvesPIDControl( VDI_ENABLE_PID_INTERFACE ); break; case VDO: enableValvesPIDControl( VDO_ENABLE_PID_INTERFACE ); break; case VBA: enableValvesPIDControl( VBA_ENABLE_PID_INTERFACE ); break; case VBV: enableValvesPIDControl( VBV_ENABLE_PID_INTERFACE ); break; default: break; } return result; } BOOL enableValveBypassController( VALVE_T valve ) { BOOL result = FALSE; switch ( valve ) { case VDI: enableValvesBypassControl( VDI_ENABLE_PID_INTERFACE ); break; case VDO: enableValvesBypassControl( VDO_ENABLE_BYPASS_INTERFACE ); break; case VBA: enableValvesBypassControl( VBA_ENABLE_BYPASS_INTERFACE ); break; case VBV: enableValvesBypassControl( VBV_ENABLE_BYPASS_INTERFACE ); break; default: break; } return result; } BOOL setValvePosition( VALVE_T valve, VALVE_POSITION_T position ) { } S16 getValvePosition( VALVE_T valve) { } BOOL energizeBloodTrapValve( void ) { } BOOL denergizeBloodTrapValve( void ) { }