Index: firmware/App/Drivers/PinchValve.c =================================================================== diff -u -rb6f6e1c58981bc13c884a0e7cf95fc6d26495f03 -r9b13d5537168d760df3d8ddba7371f5764b30348 --- firmware/App/Drivers/PinchValve.c (.../PinchValve.c) (revision b6f6e1c58981bc13c884a0e7cf95fc6d26495f03) +++ firmware/App/Drivers/PinchValve.c (.../PinchValve.c) (revision 9b13d5537168d760df3d8ddba7371f5764b30348) @@ -189,13 +189,13 @@ static BOOL pendingValveHomeRequest[ NUM_OF_VALVES ]; static BOOL pendingValvePositionRequest[ NUM_OF_VALVES ]; static BOOL commandFailed[ NUM_OF_VALVES ]; -static BOOL commandCompleted[ NUM_OF_VALVES ]; static S32 pendingValvePosition[ NUM_OF_VALVES ]; static S32 currentValvePosition[ NUM_OF_VALVES ]; static U16 commandOutputWord1[ NUM_OF_VALVES ]; static U16 commandOutputWord2[ NUM_OF_VALVES ]; +static U16 commandOutputWord3[ NUM_OF_VALVES ]; static U08 commandSpiStatus[ NUM_OF_VALVES ]; static U08 commandErrorCount[ NUM_OF_VALVES ]; @@ -209,7 +209,6 @@ // ********** private function prototypes ********** static BOOL setPinchValveCommand( VALVE_T valve, const PINCH_VALVE_COMMAND_T *command ); -static BOOL isPinchValveCommandCompleted( VALVE_T valve, BOOL *repeatCommand ); static void writePinchValveCommandRegisters( VALVE_T valve ); static BOOL transmitPinchValveCommand( VALVE_T valve ); @@ -254,11 +253,11 @@ pendingValveHomeRequest[ valve ] = FALSE; pendingValvePositionRequest[ valve ] = FALSE; commandFailed[ valve ] = FALSE; - commandCompleted[ valve ] = FALSE; pendingValvePosition[ valve ] = 0; currentValvePosition[ valve ] = 0; commandOutputWord1[ valve ] = 0; commandOutputWord2[ valve ] = 0; + commandOutputWord3[ valve ] = 0; commandSpiStatus[ valve ] = 0; commandErrorCount[ valve ] = 0; errorCountAtCommandStart[ valve ] = 0; @@ -358,7 +357,6 @@ { clearPinchValveFpgaCommand( valve ); commandFailed[ valve ] = FALSE; - commandCompleted[ valve ] = TRUE; commandState[ valve ] = PINCH_VALVE_CMD_IDLE_STATE; } break; @@ -368,14 +366,12 @@ readPinchValveCommandResponse( valve ); clearPinchValveFpgaCommand( valve ); commandFailed[ valve ] = TRUE; - commandCompleted[ valve ] = TRUE; commandState[ valve ] = PINCH_VALVE_CMD_IDLE_STATE; break; default: clearPinchValveFpgaCommand( valve ); commandFailed[ valve ] = TRUE; - commandCompleted[ valve ] = TRUE; commandState[ valve ] = PINCH_VALVE_CMD_IDLE_STATE; break; } @@ -559,76 +555,59 @@ pendingValvePositionRequest[ valve ] = FALSE; activeCommandArray[ valve ] = &positionCommands[ 0 ]; activeCommandCount[ valve ] = (U08)NUM_OF_PINCH_VALVE_POSITION_COMMANDS; - activeCommandIndex[ valve ] = 0; + activeCommandIndex[ valve ] = 0 ; commandFailed[ valve ] = FALSE; functionState[ valve ] = PINCH_VALVE_FUNCTION_SEND_STATE; } break; case PINCH_VALVE_FUNCTION_SEND_STATE: - if ( activeCommandArray[ valve ] != 0 ) + if ( ( activeCommandArray[ valve ] != 0 ) && ( activeCommandIndex[ valve ] < activeCommandCount[ 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; - // TODO - s/w fault + // TODO: s/w fault } - break; - case PINCH_VALVE_FUNCTION_WAIT_STATE: - if ( PINCH_VALVE_CMD_IDLE_STATE == commandState[ valve ] ) // && ( TRUE == commandCompleted[ valve ] ) ) + case PINCH_VALVE_FUNCTION_WAIT_STATE: + if ( PINCH_VALVE_CMD_IDLE_STATE == commandState[ valve ] ) { -// BOOL repeatCommand = FALSE; - -// commandCompleted[ valve ] = FALSE; - if ( TRUE == commandFailed[ valve ] ) { - // TODO - valve fault - functionState[ valve ] = PINCH_VALVE_FUNCTION_IDLE_STATE; - } -// else if ( FALSE == isPinchValveCommandCompleted( valve, &repeatCommand ) ) -// { -// commandFailed[ valve ] = TRUE; -// functionState[ valve ] = PINCH_VALVE_FUNCTION_IDLE_STATE; -// } -// else if ( TRUE == repeatCommand ) -// { -// functionState[ valve ] = PINCH_VALVE_FUNCTION_SEND_STATE; -// } - else - { - activeCommandIndex[ valve ]++; + functionState[ valve ] = PINCH_VALVE_FUNCTION_IDLE_STATE; + // TODO: Valve fault + } + else + { + activeCommandIndex[ valve ]++; + if ( activeCommandIndex[ valve ] >= activeCommandCount[ valve ] ) + { + functionState[ valve ] = PINCH_VALVE_FUNCTION_IDLE_STATE; + } + else + { + functionState[ valve ] = PINCH_VALVE_FUNCTION_SEND_STATE; + } + } + } + break; - if ( activeCommandIndex[ valve ] >= activeCommandCount[ valve ] ) - { - functionState[ valve ] = PINCH_VALVE_FUNCTION_IDLE_STATE; - } - else - { - functionState[ valve ] = PINCH_VALVE_FUNCTION_SEND_STATE; - } - } - } - // TODO - need to handle else if IDLE and not completed (error?) - break; - - default: - commandFailed[ valve ] = TRUE; - functionState[ valve ] = PINCH_VALVE_FUNCTION_IDLE_STATE; - break; - } - } + default: + commandFailed[ valve ] = TRUE; + functionState[ valve ] = PINCH_VALVE_FUNCTION_IDLE_STATE; + // TODO: s/w fault + break; + } + } } - /*********************************************************************//** * @brief * The setPinchValveCommand function requests execution @@ -641,8 +620,8 @@ { BOOL result = FALSE; - if ( ( TRUE == isValidPinchValve( valve ) ) && ( TRUE == isValidPinchValveCommand( command ) ) && - ( PINCH_VALVE_CMD_IDLE_STATE == commandState[ valve ] ) && ( FALSE == commandCompleted[ valve ] ) ) + if ( ( TRUE == isValidPinchValve( valve ) ) && ( TRUE == isValidPinchValveCommand( command ) ) && + ( PINCH_VALVE_CMD_IDLE_STATE == commandState[ valve ] ) ) { activeCommand[ valve ] = *command; @@ -654,6 +633,7 @@ commandOutputWord1[ valve ] = 0; commandOutputWord2[ valve ] = 0; + commandOutputWord3[ valve ] = 0; commandSpiStatus[ valve ] = 0; commandErrorCount[ valve ] = 0; commandFailed[ valve ] = FALSE; @@ -664,90 +644,7 @@ return result; } -/*********************************************************************//** -* @brief -* The isPinchValveCommandCompleted function handles returned PMD data. -* @details \b Inputs: activeFunction, activeCommandIndex, lastResponse -* @details \b Outputs: currentValvePosition, repeatCommand -* @param repeatCommand Set TRUE when the current status command shall repeat. -* @return TRUE if the response is valid, FALSE if an error occurred. -*************************************************************************/ -static BOOL isPinchValveCommandCompleted( VALVE_T valve, BOOL *repeatCommand ) -{ - BOOL result = FALSE; - if ( ( TRUE == isValidPinchValve( valve ) ) && ( repeatCommand != 0 ) ) - { - *repeatCommand = FALSE; - result = TRUE; - - if ( activeCommandArray[ valve ] == &homingCommands[ 0 ] ) - { - if ( PINCH_VALVE_HOME_CMD_GET_ACTIVITY_STATUS == activeCommandIndex[ valve ] ) - { - U16 required = PINCH_VALVE_ACTIVITY_PHASE_INITIALIZED_MASK | PINCH_VALVE_ACTIVITY_AXIS_SETTLED_MASK; - - if ( required != ( commandOutputWord1[ valve ] & required ) ) - { - *repeatCommand = TRUE; - } - } - else if ( PINCH_VALVE_HOME_CMD_GET_EVENT_STATUS_B == activeCommandIndex[ valve ] ) - { - if ( 0 == ( commandOutputWord1[ valve ] & ( PINCH_VALVE_EVENT_MOTION_COMPLETE_MASK | PINCH_VALVE_EVENT_MOTION_ERROR_MASK ) ) ) - { - *repeatCommand = TRUE; - } - } - else if ( PINCH_VALVE_HOME_CMD_GET_ACTUAL_POSITION_C == activeCommandIndex[ valve ] ) - { - currentValvePosition[ valve ] = getSigned32OutputValue( valve ); - } - } - else if ( activeCommandArray[ valve ] == &positionCommands[ 0 ] ) - { - if ( PINCH_VALVE_POSITION_CMD_GET_ACTIVITY_STATUS == activeCommandIndex[ valve ] ) - { - U16 required = PINCH_VALVE_ACTIVITY_PHASE_INITIALIZED_MASK | PINCH_VALVE_ACTIVITY_AXIS_SETTLED_MASK; - - if ( required != ( commandOutputWord1[ valve ] & required ) ) - { - *repeatCommand = TRUE; - } - } - else if ( PINCH_VALVE_POSITION_CMD_GET_EVENT_STATUS_BEFORE == activeCommandIndex[ valve ] ) - { - if ( 0 != ( commandOutputWord1[ valve ] & PINCH_VALVE_EVENT_MOTION_ERROR_MASK ) ) - { - result = FALSE; - } - } - else if ( PINCH_VALVE_POSITION_CMD_GET_EVENT_STATUS_AFTER == activeCommandIndex[ valve ] ) - { - if ( 0 != ( commandOutputWord1[ valve ] & PINCH_VALVE_EVENT_MOTION_ERROR_MASK ) ) - { - result = FALSE; - } - else if ( 0 == ( commandOutputWord1[ valve ] & PINCH_VALVE_EVENT_MOTION_COMPLETE_MASK ) ) - { - *repeatCommand = TRUE; - } - } - else if ( PINCH_VALVE_POSITION_CMD_GET_ACTUAL_POSITION == activeCommandIndex[ valve ] ) - { - currentValvePosition[ valve ] = getSigned32OutputValue( valve ); - } - } - else - { - result = FALSE; - } - } - - return result; -} - - /*********************************************************************//** * @brief * The writePinchValveCommandRegisters function writes the command header and @@ -825,13 +722,15 @@ commandErrorCount[ valve ] = getH1ErrorCount(); commandOutputWord1[ valve ] = getH1OutputWord1(); commandOutputWord2[ valve ] = getH1OutputWord2(); + commandOutputWord3[ valve ] = getH1OutputWord3(); } else if ( H19_VALV == valve ) { commandSpiStatus[ valve ] = getH19SPICmdStatus(); commandErrorCount[ valve ] = getH19ErrorCount(); commandOutputWord1[ valve ] = getH19OutputWord1(); commandOutputWord2[ valve ] = getH19OutputWord2(); + commandOutputWord3[ valve ] = getH19OutputWord3(); } }