Index: firmware/App/Drivers/PinchValve.c =================================================================== diff -u -r1eac37e7aeda787738c78bbadcff565bc74ed734 -r365afa6b051eb4066db3adda1eeac77149aae7ba --- firmware/App/Drivers/PinchValve.c (.../PinchValve.c) (revision 1eac37e7aeda787738c78bbadcff565bc74ed734) +++ firmware/App/Drivers/PinchValve.c (.../PinchValve.c) (revision 365afa6b051eb4066db3adda1eeac77149aae7ba) @@ -31,7 +31,7 @@ #define PINCH_VALVE_COMMAND_TIMEOUT_MS 1000 ///< Maximum FPGA command execution time. -#define PINCH_VALVE_HOME_OFFSET 10 ///< Offset (in encoder counts) from end of travel edge to set position B and C to. +#define PINCH_VALVE_HOME_OFFSET 20 ///< Offset (in encoder counts) from end of travel edge to set position B and C to. #define PINCH_VALVE_MOTION_TIMEOUT_MS 10000 @@ -74,7 +74,7 @@ static const S32 H1_HOMING_VELOCITY_SECOND = 3342; static const S32 H19_HOMING_VELOCITY_FIRST = 3342; static const S32 H19_HOMING_VELOCITY_SECOND = -3342; -static const S32 POSITION_VELOCITY = 7000; +static const S32 POSITION_VELOCITY = 15000; #define PINCH_VALVE_EVENT_MOTION_COMPLETE_MASK 0x0001 ///< Event Status bit 0: motion complete. #define PINCH_VALVE_EVENT_MOTION_ERROR_MASK 0x0010 ///< Event Status bit 4: motion error. @@ -128,15 +128,17 @@ PINCH_VALVE_HOME_CMD_GET_EVENT_STATUS_SECOND, PINCH_VALVE_HOME_CMD_GET_ACTUAL_POSITION_C, PINCH_VALVE_HOME_CMD_RESET_EVENTS_COMPLETE, + PINCH_VALVE_HOME_CMD_SET_POSITION, + PINCH_VALVE_HOME_CMD_SET_PROFILE_MODE_SECOND, + PINCH_VALVE_HOME_CMD_SET_VELOCITY_THIRD, + PINCH_VALVE_HOME_CMD_UPDATE_THIRD, NUM_OF_PINCH_VALVE_HOMING_COMMANDS } PINCH_VALVE_HOMING_COMMAND_INDEX_T; /// Pinch Valve Command for Set-Position. typedef enum pinchValvePositionCommandIndexes { - PINCH_VALVE_POSITION_CMD_SET_PROFILE_MODE = 0, - PINCH_VALVE_POSITION_CMD_SET_VELOCITY, - PINCH_VALVE_POSITION_CMD_RESET_EVENT_STATUS, + PINCH_VALVE_POSITION_CMD_RESET_EVENT_STATUS = 0, PINCH_VALVE_POSITION_CMD_SET_POSITION, PINCH_VALVE_POSITION_CMD_UPDATE, PINCH_VALVE_POSITION_CMD_GET_ACTIVITY_STATUS, @@ -164,7 +166,11 @@ { PINCH_VALVE_PMD_CMD_GET_ACTIVITY_STATUS, 0, 0, 0, 0, 1, FALSE }, { PINCH_VALVE_PMD_CMD_GET_EVENT_STATUS, 0, 0, 0, 0, 1, FALSE }, { PINCH_VALVE_PMD_CMD_GET_ACTUAL_POSITION, 0, 0, 0, 0, 2, FALSE }, - { PINCH_VALVE_PMD_CMD_RESET_EVENT_STATUS, PINCH_VALVE_RESET_EVENT_STATUS_VALUE, 0, 0, 1, 0, TRUE } + { PINCH_VALVE_PMD_CMD_RESET_EVENT_STATUS, PINCH_VALVE_RESET_EVENT_STATUS_VALUE, 0, 0, 1, 0, TRUE }, + { PINCH_VALVE_PMD_CMD_SET_POSITION, 0, 0, 0, 2, 0, TRUE }, + { PINCH_VALVE_PMD_CMD_SET_PROFILE_MODE, PINCH_VALVE_PROFILE_MODE_S_CURVE, 0, 0, 1, 0, TRUE }, + { PINCH_VALVE_PMD_CMD_SET_VELOCITY, 0, 0, 0, 2, 0, TRUE }, + { PINCH_VALVE_PMD_CMD_UPDATE, 0, 0, 0, 0, 0, TRUE } }; // This array is used for both H19_VALV @@ -183,13 +189,15 @@ { PINCH_VALVE_PMD_CMD_GET_ACTIVITY_STATUS, 0, 0, 0, 0, 1, FALSE }, { PINCH_VALVE_PMD_CMD_GET_EVENT_STATUS, 0, 0, 0, 0, 1, FALSE }, { PINCH_VALVE_PMD_CMD_GET_ACTUAL_POSITION, 0, 0, 0, 0, 2, FALSE }, - { PINCH_VALVE_PMD_CMD_RESET_EVENT_STATUS, PINCH_VALVE_RESET_EVENT_STATUS_VALUE, 0, 0, 1, 0, TRUE } + { PINCH_VALVE_PMD_CMD_RESET_EVENT_STATUS, PINCH_VALVE_RESET_EVENT_STATUS_VALUE, 0, 0, 1, 0, TRUE }, + { PINCH_VALVE_PMD_CMD_SET_POSITION, 0, 0, 0, 2, 0, TRUE }, + { PINCH_VALVE_PMD_CMD_SET_PROFILE_MODE, PINCH_VALVE_PROFILE_MODE_S_CURVE, 0, 0, 1, 0, TRUE }, + { PINCH_VALVE_PMD_CMD_SET_VELOCITY, 0, 0, 0, 2, 0, TRUE }, + { PINCH_VALVE_PMD_CMD_UPDATE, 0, 0, 0, 0, 0, TRUE } }; static PINCH_VALVE_COMMAND_T positionCommands[ NUM_OF_PINCH_VALVE_POSITION_COMMANDS ] = { - { PINCH_VALVE_PMD_CMD_SET_PROFILE_MODE, PINCH_VALVE_PROFILE_MODE_S_CURVE, 0, 0, 1, 0, TRUE }, - { PINCH_VALVE_PMD_CMD_SET_VELOCITY, 0, 0, 0, 2, 0, TRUE }, { PINCH_VALVE_PMD_CMD_RESET_EVENT_STATUS, PINCH_VALVE_RESET_EVENT_STATUS_VALUE, 0, 0, 1, 0, TRUE }, { PINCH_VALVE_PMD_CMD_SET_POSITION, 0, 0, 0, 2, 0, TRUE }, { PINCH_VALVE_PMD_CMD_UPDATE, 0, 0, 0, 0, 0, TRUE }, @@ -211,6 +219,9 @@ static BOOL pendingValvePositionRequest[ NUM_OF_VALVES ]; static BOOL commandFailed[ NUM_OF_VALVES ]; +static BOOL homingInProgress[ NUM_OF_VALVES ]; +static BOOL positionInProgress[ NUM_OF_VALVES ]; + static S32 pendingValvePosition[ NUM_OF_VALVES ]; static S32 currentValvePosition[ NUM_OF_VALVES ]; static S32 valvePositions[ NUM_OF_VALVES ][ NUM_OF_VALVE_POSITIONS ]; @@ -279,9 +290,10 @@ setSigned32CommandWords( &h1HomingCommands[ PINCH_VALVE_HOME_CMD_SET_VELOCITY_FIRST ], H1_HOMING_VELOCITY_FIRST ); setSigned32CommandWords( &h1HomingCommands[ PINCH_VALVE_HOME_CMD_SET_VELOCITY_SECOND ], H1_HOMING_VELOCITY_SECOND ); + setSigned32CommandWords( &h1HomingCommands[ PINCH_VALVE_HOME_CMD_SET_VELOCITY_THIRD ], POSITION_VELOCITY ); setSigned32CommandWords( &h19HomingCommands[ PINCH_VALVE_HOME_CMD_SET_VELOCITY_FIRST ], H19_HOMING_VELOCITY_FIRST ); setSigned32CommandWords( &h19HomingCommands[ PINCH_VALVE_HOME_CMD_SET_VELOCITY_SECOND ], H19_HOMING_VELOCITY_SECOND ); - setSigned32CommandWords( &positionCommands[ PINCH_VALVE_POSITION_CMD_SET_VELOCITY ], POSITION_VELOCITY ); + setSigned32CommandWords( &h19HomingCommands[ PINCH_VALVE_HOME_CMD_SET_VELOCITY_THIRD ], POSITION_VELOCITY ); for ( valve = FIRST_VALVE; valve < NUM_OF_VALVES; valve++ ) { @@ -333,6 +345,10 @@ clearActivePinchValveCommand( valve ); clearPinchValveCommandRegisters( valve ); setPinchValveEnableReset( valve, TRUE, FALSE ); + + homingInProgress[ valve ] = FALSE; + positionInProgress[ valve ] = FALSE; + } } @@ -502,13 +518,13 @@ * @param position Signed destination position. * @return TRUE if accepted, FALSE otherwise. *************************************************************************/ -BOOL setPinchValvePosition( VALVE_T valve, S32 position ) +BOOL setPinchValvePosition( VALVE_T valve, VALVE_POSITION_T position ) { BOOL result = FALSE; if ( ( TRUE == isValidPinchValve( valve ) ) && ( FALSE == isPinchValveBusy( valve ) ) ) { - pendingValvePosition[ valve ] = position; + pendingValvePosition[ valve ] = valvePositions[ valve ][ position ]; pendingValvePositionRequest[ valve ] = TRUE; pendingValveHomeRequest[ valve ] = FALSE; commandFailed[ valve ] = FALSE; @@ -638,6 +654,7 @@ if ( TRUE == pendingValveHomeRequest[ valve ] ) { pendingValveHomeRequest[ valve ] = FALSE; + homingInProgress[ valve ] = TRUE; if ( H1_VALV == valve ) { activeCommandArray[ valve ] = h1HomingCommands; @@ -668,6 +685,7 @@ else if ( TRUE == pendingValvePositionRequest[ valve ] ) { pendingValvePositionRequest[ valve ] = FALSE; + positionInProgress[ valve ] = TRUE; setSigned32CommandWords( &positionCommands[ PINCH_VALVE_POSITION_CMD_SET_POSITION ], pendingValvePosition[ valve ] ); activeCommandArray[ valve ] = positionCommands; activeCommandCount[ valve ] = NUM_OF_PINCH_VALVE_POSITION_COMMANDS; @@ -1157,38 +1175,62 @@ if ( PINCH_VALVE_PMD_CMD_GET_ACTUAL_POSITION == activeCommand[ valve ].cmdHeader ) { - switch ( activeCommandIndex[ valve ] ) + if ( TRUE == homingInProgress ) { - case PINCH_VALVE_HOME_CMD_GET_ACTUAL_POSITION_B: - currentValvePosition[ valve ] = getSigned32OutputValue( valve ); - if ( H1_VALV == valve ) - { - valvePositions[ valve ][ VALVE_POSITION_B_OPEN ] = currentValvePosition[ valve ] + PINCH_VALVE_HOME_OFFSET; - } - else - { - valvePositions[ valve ][ VALVE_POSITION_B_OPEN ] = currentValvePosition[ valve ] - PINCH_VALVE_HOME_OFFSET; - } - break; + switch ( activeCommandIndex[ valve ] ) + { + case PINCH_VALVE_HOME_CMD_GET_ACTUAL_POSITION_B: + currentValvePosition[ valve ] = getSigned32OutputValue( valve ); + if ( H1_VALV == valve ) + { + valvePositions[ valve ][ VALVE_POSITION_B_OPEN ] = currentValvePosition[ valve ] + PINCH_VALVE_HOME_OFFSET; + } + else + { + valvePositions[ valve ][ VALVE_POSITION_B_OPEN ] = currentValvePosition[ valve ] - PINCH_VALVE_HOME_OFFSET; + } + break; - case PINCH_VALVE_HOME_CMD_GET_ACTUAL_POSITION_C: - currentValvePosition[ valve ] = getSigned32OutputValue( valve ); - if ( H1_VALV == valve ) - { - valvePositions[ valve ][ VALVE_POSITION_C_CLOSE ] = currentValvePosition[ valve ] - PINCH_VALVE_HOME_OFFSET; - } - else - { - valvePositions[ valve ][ VALVE_POSITION_C_CLOSE ] = currentValvePosition[ valve ] + PINCH_VALVE_HOME_OFFSET; - } - positionB = valvePositions[ valve ][ VALVE_POSITION_B_OPEN ]; - positionC = valvePositions[ valve ][ VALVE_POSITION_C_CLOSE ]; - valvePositions[ valve ][ VALVE_POSITION_A_INSERT_EJECT ] = positionB + ( ( positionC - positionB ) / 2 ); + case PINCH_VALVE_HOME_CMD_GET_ACTUAL_POSITION_C: + currentValvePosition[ valve ] = getSigned32OutputValue( valve ); + if ( H1_VALV == valve ) + { + valvePositions[ valve ][ VALVE_POSITION_C_CLOSE ] = currentValvePosition[ valve ] - PINCH_VALVE_HOME_OFFSET; + } + else + { + valvePositions[ valve ][ VALVE_POSITION_C_CLOSE ] = currentValvePosition[ valve ] + PINCH_VALVE_HOME_OFFSET; + } + positionB = valvePositions[ valve ][ VALVE_POSITION_B_OPEN ]; + positionC = valvePositions[ valve ][ VALVE_POSITION_C_CLOSE ]; + valvePositions[ valve ][ VALVE_POSITION_A_INSERT_EJECT ] = positionB + ( ( positionC - positionB ) / 2 ); + if ( H1_VALV == valve ) + { + setSigned32CommandWords( &h1HomingCommands[ PINCH_VALVE_HOME_CMD_SET_POSITION ], valvePositions[ valve ][ VALVE_POSITION_A_INSERT_EJECT ] ); + } + else if (H19_VALV == valve ) + { + setSigned32CommandWords( &h19HomingCommands[ PINCH_VALVE_HOME_CMD_SET_POSITION ], valvePositions[ valve ][ VALVE_POSITION_A_INSERT_EJECT ] ); + } + break; + + default: + // Check with Sean TODO later break; + } + } + else + { + switch ( activeCommandIndex[ valve ] ) + { + case PINCH_VALVE_POSITION_CMD_GET_ACTUAL_POSITION: + currentValvePosition[ valve ] = getSigned32OutputValue( valve ); + break; - default: - // Check with Sean TODO later - break; + default: + // Check with Sean TODO later + break; + } } } } @@ -1278,6 +1320,8 @@ activeCommandArray[ valve ] = 0; activeCommandCount[ valve ] = 0; activeCommandIndex[ valve ] = 0; + homingInProgress[ valve ] = FALSE; + positionInProgress[ valve ] = FALSE; functionState[ valve ] = PINCH_VALVE_FUNCTION_IDLE_STATE; } } Index: firmware/App/Drivers/PinchValve.h =================================================================== diff -u -r0706d11d2e404fa864f1c0f5308a8b59694f8494 -r365afa6b051eb4066db3adda1eeac77149aae7ba --- firmware/App/Drivers/PinchValve.h (.../PinchValve.h) (revision 0706d11d2e404fa864f1c0f5308a8b59694f8494) +++ firmware/App/Drivers/PinchValve.h (.../PinchValve.h) (revision 365afa6b051eb4066db3adda1eeac77149aae7ba) @@ -59,7 +59,7 @@ void execPinchValveCommand( void ); BOOL homePinchValve( VALVE_T valve ); -BOOL setPinchValvePosition( VALVE_T valve, S32 position ); +BOOL setPinchValvePosition( VALVE_T valve, VALVE_POSITION_T position ); S32 getPinchValvePosition( VALVE_T valve ); void setPinchValveEnableReset( VALVE_T valve, BOOL enable, BOOL reset ); Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -re0060cd79d971c0ed94b8aed6949d2754480fe92 -r365afa6b051eb4066db3adda1eeac77149aae7ba --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision e0060cd79d971c0ed94b8aed6949d2754480fe92) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 365afa6b051eb4066db3adda1eeac77149aae7ba) @@ -57,6 +57,7 @@ static TD_STANDBY_STATE_T handleStandbyModeWaitForTreatmentState( void ); #if 1 static BOOL startTest = FALSE; +static BOOL startPos = FALSE; #endif /*********************************************************************//** @@ -74,6 +75,7 @@ fluidType = FLUID_TYPE_UNKNOWN; modality = TREATMENT_MODALITY_HD_SALINE_FLUID; startTest = FALSE; // Temporary + startPos = FALSE; } /*********************************************************************//** @@ -150,6 +152,12 @@ homePinchValve( H1_VALV ); homePinchValve( H19_VALV ); } + if ( TRUE == startPos ) + { + startPos = FALSE; + setPinchValvePosition( H1_VALV, VALVE_POSITION_C_CLOSE ); + setPinchValvePosition( H19_VALV, VALVE_POSITION_C_CLOSE ); + } #endif // State machine for standby mode