Index: firmware/App/Drivers/PinchValve.c =================================================================== diff -u -r2b760b79a846c77a932b6df6c489faee96a544a0 -r11da41dd26e721d103fe71e2d42a407a4afde13a --- firmware/App/Drivers/PinchValve.c (.../PinchValve.c) (revision 2b760b79a846c77a932b6df6c489faee96a544a0) +++ firmware/App/Drivers/PinchValve.c (.../PinchValve.c) (revision 11da41dd26e721d103fe71e2d42a407a4afde13a) @@ -67,9 +67,9 @@ #define PINCH_VALVE_PROFILE_MODE_S_CURVE 2 #define PINCH_VALVE_RESET_EVENT_STATUS_VALUE 0xFFEE -static const S32 HOMING_VELOCITY_FWD = 3342; ///< Forward velocity used while moving toward the first homing hard stop. -static const S32 HOMING_VELOCITY_REV = -3342; ///< Reverse velocity used while moving toward the opposite homing hard stop. -static const S32 POSITION_VELOCITY = 7000; ///< Velocity used when moving the pinch valve to a requested position. +static const S32 HOMING_VELOCITY_FIRST = -3342; ///< First homing movement velocity. +static const S32 HOMING_VELOCITY_SECOND = 3342; ///< Second homing movement velocity. +static const S32 POSITION_VELOCITY = 7000; ///< Velocity used for position movements; /// Pinch valve function state machine. typedef enum pinchValveFunctionStates @@ -106,17 +106,18 @@ typedef enum pinchValveHomingCommandIndexes { PINCH_VALVE_HOME_CMD_SET_PROFILE_MODE = 0, - PINCH_VALVE_HOME_CMD_RESET_EVENTS_B, - PINCH_VALVE_HOME_CMD_SET_VELOCITY_B, - PINCH_VALVE_HOME_CMD_UPDATE_B, - PINCH_VALVE_HOME_CMD_GET_ACTIVITY_STATUS, - PINCH_VALVE_HOME_CMD_GET_EVENT_STATUS_B, + PINCH_VALVE_HOME_CMD_RESET_EVENTS_FIRST, + PINCH_VALVE_HOME_CMD_SET_VELOCITY_FIRST, + PINCH_VALVE_HOME_CMD_UPDATE_FIRST, + PINCH_VALVE_HOME_CMD_GET_ACTIVITY_FIRST, + PINCH_VALVE_HOME_CMD_GET_EVENT_STATUS_FIRST, + PINCH_VALVE_HOME_CMD_RESET_EVENTS_SECOND, + PINCH_VALVE_HOME_CMD_SET_VELOCITY_SECOND, + PINCH_VALVE_HOME_CMD_UPDATE_SECOND, + PINCH_VALVE_HOME_CMD_GET_ACTIVITY_SECOND, + PINCH_VALVE_HOME_CMD_GET_EVENT_STATUS_SECOND, PINCH_VALVE_HOME_CMD_SET_ACTUAL_POSITION_ZERO, - PINCH_VALVE_HOME_CMD_RESET_EVENTS_C, - PINCH_VALVE_HOME_CMD_SET_VELOCITY_C, - PINCH_VALVE_HOME_CMD_UPDATE_C, - PINCH_VALVE_HOME_CMD_GET_EVENT_STATUS_C, - PINCH_VALVE_HOME_CMD_GET_ACTUAL_POSITION_C, + PINCH_VALVE_HOME_CMD_GET_ACTUAL_POSITION, PINCH_VALVE_HOME_CMD_RESET_EVENTS_COMPLETE, NUM_OF_PINCH_VALVE_HOMING_COMMANDS } PINCH_VALVE_HOMING_COMMAND_INDEX_T; @@ -126,12 +127,11 @@ { PINCH_VALVE_POSITION_CMD_SET_PROFILE_MODE = 0, PINCH_VALVE_POSITION_CMD_SET_VELOCITY, - PINCH_VALVE_POSITION_CMD_GET_ACTIVITY_STATUS, - PINCH_VALVE_POSITION_CMD_GET_EVENT_STATUS_BEFORE, PINCH_VALVE_POSITION_CMD_RESET_EVENT_STATUS, PINCH_VALVE_POSITION_CMD_SET_POSITION, PINCH_VALVE_POSITION_CMD_UPDATE, - PINCH_VALVE_POSITION_CMD_GET_EVENT_STATUS_AFTER, + PINCH_VALVE_POSITION_CMD_GET_ACTIVITY_STATUS, + PINCH_VALVE_POSITION_CMD_GET_EVENT_STATUS, PINCH_VALVE_POSITION_CMD_GET_ACTUAL_POSITION, PINCH_VALVE_POSITION_CMD_RESET_EVENT_STATUS_COMPLETE, NUM_OF_PINCH_VALVE_POSITION_COMMANDS @@ -142,33 +142,33 @@ // This array is used for both H1_VALV and H19_VALV. The active valve only determines which FPGA register access functions run. static PINCH_VALVE_COMMAND_T homingCommands[ NUM_OF_PINCH_VALVE_HOMING_COMMANDS ] = { - { PINCH_VALVE_PMD_CMD_SET_PROFILE_MODE, PINCH_VALVE_PROFILE_MODE_VELOCITY, 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_VELOCITY, 0, 0, 0, 2, 0, TRUE }, - { PINCH_VALVE_PMD_CMD_UPDATE, 0, 0, 0, 0, 0, TRUE }, - { 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_SET_ACTUAL_POSITION, 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_VELOCITY, 0, 0, 0, 2, 0, TRUE }, - { PINCH_VALVE_PMD_CMD_UPDATE, 0, 0, 0, 0, 0, TRUE }, - { 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_SET_PROFILE_MODE, PINCH_VALVE_PROFILE_MODE_VELOCITY, 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_VELOCITY, 0, 0, 0, 2, 0, TRUE }, + { PINCH_VALVE_PMD_CMD_UPDATE, 0, 0, 0, 0, 0, TRUE }, + { 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_RESET_EVENT_STATUS, PINCH_VALVE_RESET_EVENT_STATUS_VALUE, 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 }, + { 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_SET_ACTUAL_POSITION, 0, 0, 0, 2, 0, TRUE }, + { 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 } }; 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_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_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 }, - { 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_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 }, + { 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 } }; static PINCH_VALVE_FUNCTION_STATE_T functionState[ NUM_OF_VALVES ]; @@ -223,6 +223,11 @@ static void setSigned32CommandWords( PINCH_VALVE_COMMAND_T *command, S32 value ); static S32 getSigned32OutputValue( VALVE_T valve ); +//Added Temporary to hardware need to check with SEAN later TODO +static void clearActivePinchValveCommand( VALVE_T valve ); +static void clearPinchValveCommandRegisters( VALVE_T valve ); +static void resetPinchValveFunctionSequence( VALVE_T valve ); + /*********************************************************************//** * @brief * The initPinchValveDriver function initializes the pinch valve @@ -235,8 +240,8 @@ { VALVE_T valve; - setSigned32CommandWords( &homingCommands[ PINCH_VALVE_HOME_CMD_SET_VELOCITY_C ], HOMING_VELOCITY_REV ); - setSigned32CommandWords( &homingCommands[ PINCH_VALVE_HOME_CMD_SET_VELOCITY_B ], HOMING_VELOCITY_FWD ); + setSigned32CommandWords( &homingCommands[ PINCH_VALVE_HOME_CMD_SET_VELOCITY_FIRST ], HOMING_VELOCITY_FIRST ); + setSigned32CommandWords( &homingCommands[ PINCH_VALVE_HOME_CMD_SET_VELOCITY_SECOND ], HOMING_VELOCITY_SECOND ); setSigned32CommandWords( &positionCommands[ PINCH_VALVE_POSITION_CMD_SET_VELOCITY ], POSITION_VELOCITY ); for ( valve = FIRST_VALVE; valve < NUM_OF_VALVES; valve++ ) @@ -270,15 +275,16 @@ fpgaCommandValue[ valve ] = 0; executeStartTime[ valve ] = 0; - activeCommand[ valve ].cmdHeader = 0; - activeCommand[ valve ].inputWord1 = 0; - activeCommand[ valve ].inputWord2 = 0; - activeCommand[ valve ].inputWord3 = 0; - activeCommand[ valve ].inputWordCount = 0; - activeCommand[ valve ].outputWordCount = 0; - activeCommand[ valve ].writeOnly = FALSE; +// activeCommand[ valve ].cmdHeader = 0; +// activeCommand[ valve ].inputWord1 = 0; +// activeCommand[ valve ].inputWord2 = 0; +// activeCommand[ valve ].inputWord3 = 0; +// activeCommand[ valve ].inputWordCount = 0; +// activeCommand[ valve ].outputWordCount = 0; +// activeCommand[ valve ].writeOnly = FALSE; - clearPinchValveFpgaCommand( valve ); + clearActivePinchValveCommand( valve ); + clearPinchValveCommandRegisters( valve ); setPinchValveEnableReset( valve, TRUE, FALSE ); } } @@ -361,23 +367,23 @@ { isPinchValveCommandOutput( valve ); clearPinchValveFpgaCommand( valve ); - activeCommand[ valve ].cmdHeader = 0; + clearActivePinchValveCommand( valve ); commandFailed[ valve ] = FALSE; commandState[ valve ] = PINCH_VALVE_CMD_IDLE_STATE; } break; case PINCH_VALVE_CMD_ERROR_STATE: - clearPinchValveFpgaCommand( valve ); - activeCommand[ valve ].cmdHeader = 0; + clearPinchValveCommandRegisters( valve ); + clearActivePinchValveCommand( valve ); commandFailed[ valve ] = TRUE; commandState[ valve ] = PINCH_VALVE_CMD_IDLE_STATE; break; default: - clearPinchValveFpgaCommand( valve ); - activeCommand[ valve ].cmdHeader = 0; + clearPinchValveCommandRegisters( valve ); + clearActivePinchValveCommand( valve ); commandFailed[ valve ] = TRUE; commandState[ valve ] = PINCH_VALVE_CMD_IDLE_STATE; break; @@ -401,12 +407,11 @@ if ( ( TRUE == isValidPinchValve( valve ) ) && ( FALSE == isPinchValveBusy( valve ) ) ) { - // This is to ensure the selected controller is enabled before beginning the homing sequence setPinchValveEnableReset( valve, TRUE, FALSE ); - pendingValveHomeRequest[ valve ] = TRUE; - pendingValvePositionRequest[ valve ] = FALSE; - commandFailed[ valve ] = FALSE; - result = TRUE; + pendingValveHomeRequest[ valve ] = TRUE; + pendingValvePositionRequest[ valve ] = FALSE; + commandFailed[ valve ] = FALSE; + result = TRUE; } return result; @@ -428,8 +433,10 @@ if ( ( TRUE == isValidPinchValve( valve ) ) && ( FALSE == isPinchValveBusy( valve ) ) ) { - pendingValvePosition[ valve ] = position; + pendingValvePosition[ valve ] = position; pendingValvePositionRequest[ valve ] = TRUE; + pendingValveHomeRequest[ valve ] = FALSE; + commandFailed[ valve ] = FALSE; result = TRUE; } @@ -555,12 +562,11 @@ if ( TRUE == pendingValveHomeRequest[ valve ] ) { pendingValveHomeRequest[ valve ] = FALSE; - activeCommandArray[ valve ] = homingCommands; - activeCommandCount[ valve ] = NUM_OF_PINCH_VALVE_HOMING_COMMANDS; - activeCommandIndex[ valve ] = 0; - commandFailed[ valve ] = FALSE; - functionState[ valve ] = PINCH_VALVE_FUNCTION_SEND_STATE; - + activeCommandArray[ valve ] = homingCommands; + activeCommandCount[ valve ] = NUM_OF_PINCH_VALVE_HOMING_COMMANDS; + activeCommandIndex[ valve ] = 0; + commandFailed[ valve ] = FALSE; + functionState[ valve ] = PINCH_VALVE_FUNCTION_SEND_STATE; } else if ( TRUE == pendingValvePositionRequest[ valve ] ) { @@ -569,50 +575,48 @@ activeCommandArray[ valve ] = positionCommands; activeCommandCount[ valve ] = NUM_OF_PINCH_VALVE_POSITION_COMMANDS; activeCommandIndex[ valve ] = 0; - commandFailed[ valve ] = FALSE; - functionState[ valve ] = PINCH_VALVE_FUNCTION_SEND_STATE; + commandFailed[ valve ] = FALSE; + functionState[ valve ] = PINCH_VALVE_FUNCTION_SEND_STATE; } break; case PINCH_VALVE_FUNCTION_SEND_STATE: + if ( activeCommandIndex[ valve ] < activeCommandCount[ valve ] ) { if ( PINCH_VALVE_CMD_IDLE_STATE == commandState[ valve ] ) { - if ( TRUE == setPinchValveCommand( valve, activeCommandArray[ valve ][ activeCommandIndex[ valve ] ] ) ) + if ( TRUE == setPinchValveCommand( valve, activeCommandArray[ valve ] [ activeCommandIndex[ valve ] ] ) ) { functionState[ valve ] = PINCH_VALVE_FUNCTION_WAIT_STATE; } else { commandFailed[ valve ] = TRUE; - functionState[ valve ] = PINCH_VALVE_FUNCTION_IDLE_STATE; + resetPinchValveFunctionSequence( valve ); } } } else { - functionState[ valve ] = PINCH_VALVE_FUNCTION_IDLE_STATE; + resetPinchValveFunctionSequence( valve ); } break; - case PINCH_VALVE_FUNCTION_WAIT_STATE: + case PINCH_VALVE_FUNCTION_WAIT_STATE: if ( PINCH_VALVE_CMD_IDLE_STATE == commandState[ valve ] ) { if ( TRUE == commandFailed[ valve ] ) { - functionState[ valve ] = PINCH_VALVE_FUNCTION_IDLE_STATE; - // TODO: Valve fault + resetPinchValveFunctionSequence( valve ); + // TODO: Connect this failure to the required valve fault or software-fault handling after the alarm behavior is defined. } else { activeCommandIndex[ valve ]++; if ( activeCommandIndex[ valve ] >= activeCommandCount[ valve ] ) { - activeCommandArray[ valve ] = 0; - activeCommandCount[ valve ] = 0; - activeCommandIndex[ valve ] = 0; - functionState[ valve ] = PINCH_VALVE_FUNCTION_IDLE_STATE; + resetPinchValveFunctionSequence( valve ); } else { @@ -622,18 +626,106 @@ } break; - default: - activeCommandArray[ valve ] = 0; - activeCommandCount[ valve ] = 0; - activeCommandIndex[ valve ] = 0; - commandFailed[ valve ] = TRUE; - functionState[ valve ] = PINCH_VALVE_FUNCTION_IDLE_STATE; - // TODO: s/w fault - break; - } - } + default: + commandFailed[ valve ] = TRUE; + resetPinchValveFunctionSequence( valve ); + // TODO: Raise the project-defined software fault for an invalid pinch-valve function state. + break; + } + } } +//void execPinchValveFunction( void ) +//{ +// VALVE_T valve; +// +// for ( valve = FIRST_VALVE; valve < NUM_OF_VALVES; valve++ ) +// { +// switch ( functionState[ valve ] ) +// { +// case PINCH_VALVE_FUNCTION_IDLE_STATE: +// if ( TRUE == pendingValveHomeRequest[ valve ] ) +// { +// pendingValveHomeRequest[ valve ] = FALSE; +// activeCommandArray[ valve ] = homingCommands; +// activeCommandCount[ valve ] = NUM_OF_PINCH_VALVE_HOMING_COMMANDS; +// activeCommandIndex[ valve ] = 0; +// commandFailed[ valve ] = FALSE; +// functionState[ valve ] = PINCH_VALVE_FUNCTION_SEND_STATE; +// +// } +// else if ( TRUE == pendingValvePositionRequest[ valve ] ) +// { +// pendingValvePositionRequest[ valve ] = FALSE; +// setSigned32CommandWords( &positionCommands[ PINCH_VALVE_POSITION_CMD_SET_POSITION ], pendingValvePosition[ valve ] ); +// activeCommandArray[ valve ] = positionCommands; +// activeCommandCount[ valve ] = NUM_OF_PINCH_VALVE_POSITION_COMMANDS; +// activeCommandIndex[ valve ] = 0; +// commandFailed[ valve ] = FALSE; +// functionState[ valve ] = PINCH_VALVE_FUNCTION_SEND_STATE; +// } +// break; +// +// case PINCH_VALVE_FUNCTION_SEND_STATE: +// if ( activeCommandIndex[ valve ] < activeCommandCount[ valve ] ) +// { +// if ( PINCH_VALVE_CMD_IDLE_STATE == commandState[ valve ] ) +// { +// if ( TRUE == setPinchValveCommand( valve, activeCommandArray[ valve ][ activeCommandIndex[ valve ] ] ) ) +// { +// functionState[ valve ] = PINCH_VALVE_FUNCTION_WAIT_STATE; +// } +// else +// { +// commandFailed[ valve ] = TRUE; +// functionState[ valve ] = PINCH_VALVE_FUNCTION_IDLE_STATE; +// } +// } +// } +// else +// { +// functionState[ valve ] = PINCH_VALVE_FUNCTION_IDLE_STATE; +// } +// break; +// +// case PINCH_VALVE_FUNCTION_WAIT_STATE: +// if ( PINCH_VALVE_CMD_IDLE_STATE == commandState[ valve ] ) +// { +// if ( TRUE == commandFailed[ valve ] ) +// { +// functionState[ valve ] = PINCH_VALVE_FUNCTION_IDLE_STATE; +// // TODO: Valve fault +// } +// else +// { +// activeCommandIndex[ valve ]++; +// if ( activeCommandIndex[ valve ] >= activeCommandCount[ valve ] ) +// { +// activeCommandArray[ valve ] = 0; +// activeCommandCount[ valve ] = 0; +// activeCommandIndex[ valve ] = 0; +// functionState[ valve ] = PINCH_VALVE_FUNCTION_IDLE_STATE; +// } +// else +// { +// functionState[ valve ] = PINCH_VALVE_FUNCTION_SEND_STATE; +// } +// } +// } +// break; +// +// default: +// activeCommandArray[ valve ] = 0; +// activeCommandCount[ valve ] = 0; +// activeCommandIndex[ valve ] = 0; +// commandFailed[ valve ] = TRUE; +// functionState[ valve ] = PINCH_VALVE_FUNCTION_IDLE_STATE; +// // TODO: s/w fault +// break; +// } +// } +//} + /*********************************************************************//** * @brief * The setPinchValveCommand function requests execution @@ -656,8 +748,6 @@ { setSigned32CommandWords( &activeCommand[ valve ], pendingValvePosition[ valve ] ); } - - // reset command feedback before command is sent commandOutputWord1[ valve ] = 0; commandOutputWord2[ valve ] = 0; commandOutputWord3[ valve ] = 0; @@ -719,18 +809,23 @@ static BOOL transmitPinchValveCommand( VALVE_T valve ) { BOOL result = FALSE; - U08 fpgaCommand = (U08)( fpgaCommandValue[ valve ] | PINCH_VALVE_FPGA_CMD_START_BIT_MASK ); + U08 fpgaCommand; - if ( H1_VALV == valve ) + if ( TRUE == isValidPinchValve( valve ) ) { - setH1FPGACmd( fpgaCommand ); - result = TRUE; + fpgaCommand = (U08)( fpgaCommandValue[ valve ] | PINCH_VALVE_FPGA_CMD_START_BIT_MASK ); + + if ( H1_VALV == valve ) + { + setH1FPGACmd( fpgaCommand ); + result = TRUE; + } + else if ( H19_VALV == valve ) + { + setH19FPGACmd( fpgaCommand ); + result = TRUE; + } } - else if ( H19_VALV == valve ) - { - setH19FPGACmd( fpgaCommand ); - result = TRUE; - } return result; } @@ -773,14 +868,18 @@ *************************************************************************/ static void clearPinchValveFpgaCommand( VALVE_T valve ) { - if ( H1_VALV == valve ) + if ( TRUE == isValidPinchValve( valve ) ) { - setH1FPGACmd( 0 ); + fpgaCommandValue[ valve ] = 0; + if ( H1_VALV == valve ) + { + setH1FPGACmd( 0 ); + } + else + { + setH19FPGACmd( 0 ); + } } - else if ( H19_VALV == valve ) - { - setH19FPGACmd( 0 ); - } } /*********************************************************************//** @@ -952,7 +1051,7 @@ *************************************************************************/ static void setSigned32CommandWords( PINCH_VALVE_COMMAND_T *command, S32 value ) { - if ( command != 0 ) + if ( 0 != command ) { U32 rawValue = (U32)value; @@ -961,6 +1060,7 @@ } } + /*********************************************************************//** * @brief * The getSigned32ResponseValue function combines two PMD output words. @@ -970,8 +1070,10 @@ *************************************************************************/ static S32 getSigned32OutputValue( VALVE_T valve ) { - U32 rawValue = ( (U32)commandOutputWord1[ valve ] << 16 ) | (U32)commandOutputWord2[ valve ]; + U32 rawValue; + rawValue = ( (U32)commandOutputWord1[ valve ] << 16 ) | (U32)commandOutputWord2[ valve ]; + return (S32)rawValue; } @@ -1011,5 +1113,91 @@ } } +//TODO Temporary code from here +/*********************************************************************//** +* @brief +* The isPinchValveCommandOutput function stores output data returned by +* Get Activity Status, Get Event Status, and Get Actual Position commands. +* @details \b Inputs: activeCommand, commandOutputWord1, +* commandOutputWord2, commandOutputWord3 +* @details \b Outputs: activityStatus, eventStatus, +* currentValvePosition +* @param valve H1_VALV or H19_VALV. +* @return none +*************************************************************************/ +static void clearActivePinchValveCommand( VALVE_T valve ) +{ + if ( TRUE == isValidPinchValve( valve ) ) + { + activeCommand[ valve ].cmdHeader = 0; + activeCommand[ valve ].inputWord1 = 0; + activeCommand[ valve ].inputWord2 = 0; + activeCommand[ valve ].inputWord3 = 0; + activeCommand[ valve ].inputWordCount = 0; + activeCommand[ valve ].outputWordCount = 0; + activeCommand[ valve ].writeOnly = FALSE; + } +} + +/*********************************************************************//** +* @brief +* The isPinchValveCommandOutput function stores output data returned by +* Get Activity Status, Get Event Status, and Get Actual Position commands. +* @details \b Inputs: activeCommand, commandOutputWord1, +* commandOutputWord2, commandOutputWord3 +* @details \b Outputs: activityStatus, eventStatus, +* currentValvePosition +* @param valve H1_VALV or H19_VALV. +* @return none +*************************************************************************/ +static void clearPinchValveCommandRegisters( VALVE_T valve ) +{ + if ( H1_VALV == valve ) + { + setH1CmdHeader( 0 ); + setH1InputWord1( 0 ); + setH1InputWord2( 0 ); + setH1InputWord3( 0 ); + setH1FPGACmd( 0 ); + } + else if ( H19_VALV == valve ) + { + setH19CmdHeader( 0 ); + setH19InputWord1( 0 ); + setH19InputWord2( 0 ); + setH19InputWord3( 0 ); + setH19FPGACmd( 0 ); + } + if ( TRUE == isValidPinchValve( valve ) ) + { + fpgaCommandValue[ valve ] = 0; + } +} + + + +/*********************************************************************//** +* @brief +* The isPinchValveCommandOutput function stores output data returned by +* Get Activity Status, Get Event Status, and Get Actual Position commands. +* @details \b Inputs: activeCommand, commandOutputWord1, +* commandOutputWord2, commandOutputWord3 +* @details \b Outputs: activityStatus, eventStatus, +* currentValvePosition +* @param valve H1_VALV or H19_VALV. +* @return none +*************************************************************************/ +static void resetPinchValveFunctionSequence( VALVE_T valve ) +{ + if ( TRUE == isValidPinchValve( valve ) ) + { + activeCommandArray[ valve ] = 0; + activeCommandCount[ valve ] = 0; + activeCommandIndex[ valve ] = 0; + functionState[ valve ] = PINCH_VALVE_FUNCTION_IDLE_STATE; + } +} + + /**@}*/ Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r4961e7b6681c215f18278731a6d3665e7006ddb6 -r11da41dd26e721d103fe71e2d42a407a4afde13a --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 4961e7b6681c215f18278731a6d3665e7006ddb6) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 11da41dd26e721d103fe71e2d42a407a4afde13a) @@ -73,6 +73,7 @@ homingInitiated = FALSE; fluidType = FLUID_TYPE_UNKNOWN; modality = TREATMENT_MODALITY_HD_SALINE_FLUID; + startTest = FALSE; // Temporary } /*********************************************************************//**