Index: firmware/App/Controllers/Valves.c =================================================================== diff -u -r046ffdda014e511363b04ed523eb3399a3eb4ad0 -r2b760b79a846c77a932b6df6c489faee96a544a0 --- firmware/App/Controllers/Valves.c (.../Valves.c) (revision 046ffdda014e511363b04ed523eb3399a3eb4ad0) +++ firmware/App/Controllers/Valves.c (.../Valves.c) (revision 2b760b79a846c77a932b6df6c489faee96a544a0) @@ -21,6 +21,7 @@ #include "Messaging.h" #include "OperationModes.h" #include "PersistentAlarm.h" +#include "PinchValve.h" #include "TaskGeneral.h" #include "Timers.h" #include "Valves.h" @@ -118,7 +119,7 @@ void initValves( void ) { // Initialize driver - initRotaryValvesDriver(); + initPinchValveDriver(); // Initialize controller variables memset( ¤tValveStates[0], 0, sizeof( currentValveStates ) ); @@ -153,24 +154,15 @@ BOOL homeValve( VALVE_T valve, BOOL force, BOOL cartridge ) { BOOL result = FALSE; - + (void)force; + (void)cartridge; if ( valve < NUM_OF_VALVES ) { - VALVE_STATE_T currState = currentValveStates[ valve ].controlState; - - if ( ( VALVE_STATE_HOMING_NOT_STARTED == currState ) || ( VALVE_STATE_IDLE == currState ) ) + result = homePinchValve( valve ); + if ( TRUE == result ) { - // If haven't already homed the valves, home the valves - if ( ( currentValveStates[ valve ].hasValveBeenHomed != TRUE ) || ( VALVE_FORCE_HOME == force ) ) - { - currentValveStates[ valve ].hasHomingBeenRequested = TRUE; - } - // Otherwise, go to position A (home position) - else - { - setValvePosition( valve, VALVE_POSITION_A_INSERT_EJECT ); - } - result = TRUE; + currentValveStates[valve].hasHomingBeenRequested = TRUE; + currentValveStates[valve].controlState = VALVE_STATE_IN_TRANSITION; } } else Index: firmware/App/Drivers/PinchValve.c =================================================================== diff -u -r8de783e2d7d04a50833c4d84dcefe2c51a764e51 -r2b760b79a846c77a932b6df6c489faee96a544a0 --- firmware/App/Drivers/PinchValve.c (.../PinchValve.c) (revision 8de783e2d7d04a50833c4d84dcefe2c51a764e51) +++ firmware/App/Drivers/PinchValve.c (.../PinchValve.c) (revision 2b760b79a846c77a932b6df6c489faee96a544a0) @@ -30,11 +30,8 @@ // ********** private definitions ********** -#define PINCH_VALVE_STATUS_POLL_INTERVAL_MS 10 ///< FPGA status polling interval in (ms). #define PINCH_VALVE_COMMAND_TIMEOUT_MS 1000 ///< Maximum FPGA command execution time. -#define PINCH_VALVE_DEFAULT_VELOCITY 3342 - #define PINCH_VALVE_FPGA_CMD_START_BIT_MASK 0x01 ///< Bit 0 starts a command transaction. (TODO: To change the comments later) #define PINCH_VALVE_FPGA_CMD_WRITE_ONLY_BIT_MASK 0x02 ///< Bit 1 selects a write-only command. #define PINCH_VALVE_FPGA_CMD_TX_COUNT_SHIFT 2 ///< Bits 4-2 contain transmit word count. @@ -70,14 +67,9 @@ #define PINCH_VALVE_PROFILE_MODE_S_CURVE 2 #define PINCH_VALVE_RESET_EVENT_STATUS_VALUE 0xFFEE -#define PINCH_VALVE_ACTIVITY_PHASE_INITIALIZED_MASK 0x0001 -#define PINCH_VALVE_ACTIVITY_AXIS_SETTLED_MASK 0x0080 -#define PINCH_VALVE_EVENT_MOTION_COMPLETE_MASK 0x0001 -#define PINCH_VALVE_EVENT_MOTION_ERROR_MASK 0x0010 - 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 = 3342; ///< Velocity used when moving the pinch valve to a requested position. +static const S32 POSITION_VELOCITY = 7000; ///< Velocity used when moving the pinch valve to a requested position. /// Pinch valve function state machine. typedef enum pinchValveFunctionStates @@ -150,32 +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, FALSE }, - { PINCH_VALVE_PMD_CMD_RESET_EVENT_STATUS, PINCH_VALVE_RESET_EVENT_STATUS_VALUE, 0, 0, 1, 0, FALSE }, - { PINCH_VALVE_PMD_CMD_SET_VELOCITY, (U16)( ( (U32)HOMING_VELOCITY_FWD >> 16 ) & 0xFFFF ), (U16)( (U32)HOMING_VELOCITY_FWD & 0xFFFF ), 0, 2, 0, FALSE }, - { PINCH_VALVE_PMD_CMD_UPDATE, 0, 0, 0, 0, 0, FALSE }, - { 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, FALSE }, - { PINCH_VALVE_PMD_CMD_RESET_EVENT_STATUS, PINCH_VALVE_RESET_EVENT_STATUS_VALUE, 0, 0, 1, 0, FALSE }, - { PINCH_VALVE_PMD_CMD_SET_VELOCITY, (U16)( ( (U32)HOMING_VELOCITY_REV >> 16 ) & 0xFFFF ),(U16)( (U32)HOMING_VELOCITY_REV & 0xFFFF ), 0, 2, 0, FALSE }, - { PINCH_VALVE_PMD_CMD_UPDATE, 0, 0, 0, 0, 0, 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, FALSE } + { 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 } }; 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, FALSE }, - { PINCH_VALVE_PMD_CMD_SET_VELOCITY, (U16)( ( (U32)POSITION_VELOCITY >> 16 ) & 0xFFFF ), (U16)( (U32)POSITION_VELOCITY & 0xFFFF ), 0, 2, 0, FALSE }, - { 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, FALSE }, - { PINCH_VALVE_PMD_CMD_SET_POSITION, 0, 0, 0, 2, 0, FALSE }, - { PINCH_VALVE_PMD_CMD_UPDATE, 0, 0, 0, 0, 0, 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, FALSE } + { 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 } }; static PINCH_VALVE_FUNCTION_STATE_T functionState[ NUM_OF_VALVES ]; @@ -196,13 +189,15 @@ static U16 commandOutputWord1[ NUM_OF_VALVES ]; static U16 commandOutputWord2[ NUM_OF_VALVES ]; static U16 commandOutputWord3[ NUM_OF_VALVES ]; + static U16 activityStatus[ NUM_OF_VALVES ]; static U16 eventStatus[ NUM_OF_VALVES ]; static U08 commandSpiStatus[ NUM_OF_VALVES ]; static U08 commandErrorCount[ NUM_OF_VALVES ]; static U08 errorCountAtCommandStart[ NUM_OF_VALVES ]; static U08 enableResetValue[ NUM_OF_VALVES ]; +static U08 fpgaCommandValue[ NUM_OF_VALVES ]; static U32 executeStartTime[ NUM_OF_VALVES ]; @@ -213,6 +208,7 @@ static BOOL writePinchValveCommandRegisters( VALVE_T valve ); static BOOL transmitPinchValveCommand( VALVE_T valve ); static void readPinchValveCommandResponse( VALVE_T valve ); +static void isPinchValveCommandOutput( VALVE_T valve ); static void clearPinchValveFpgaCommand( VALVE_T valve ); static BOOL setPinchValveFpgaCommandByte( const PINCH_VALVE_COMMAND_T *command, U08 *fpgaCommand ); @@ -226,7 +222,6 @@ static BOOL isValidPinchValveCommand( const PINCH_VALVE_COMMAND_T *command ); static void setSigned32CommandWords( PINCH_VALVE_COMMAND_T *command, S32 value ); static S32 getSigned32OutputValue( VALVE_T valve ); -static void savePinchValveCommandOutput( VALVE_T valve ); /*********************************************************************//** * @brief @@ -240,31 +235,39 @@ { VALVE_T valve; - setSigned32CommandWords( &homingCommands[ PINCH_VALVE_HOME_CMD_SET_VELOCITY_B ], HOMING_VELOCITY_FWD ); 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( &positionCommands[ PINCH_VALVE_POSITION_CMD_SET_VELOCITY ], POSITION_VELOCITY ); for ( valve = FIRST_VALVE; valve < NUM_OF_VALVES; valve++ ) { functionState[ valve ] = PINCH_VALVE_FUNCTION_IDLE_STATE; commandState[ valve ] = PINCH_VALVE_CMD_IDLE_STATE; + activeCommandArray[ valve ] = 0; activeCommandCount[ valve ] = 0; activeCommandIndex[ valve ] = 0; + pendingValveHomeRequest[ valve ] = FALSE; pendingValvePositionRequest[ valve ] = FALSE; commandFailed[ valve ] = FALSE; + pendingValvePosition[ valve ] = 0; currentValvePosition[ valve ] = 0; + commandOutputWord1[ valve ] = 0; commandOutputWord2[ valve ] = 0; commandOutputWord3[ valve ] = 0; + activityStatus[ valve ] = 0; eventStatus[ valve ] = 0; + commandSpiStatus[ valve ] = 0; commandErrorCount[ valve ] = 0; errorCountAtCommandStart[ valve ] = 0; + enableResetValue[ valve ] = 0; + fpgaCommandValue[ valve ] = 0; executeStartTime[ valve ] = 0; activeCommand[ valve ].cmdHeader = 0; @@ -276,6 +279,7 @@ activeCommand[ valve ].writeOnly = FALSE; clearPinchValveFpgaCommand( valve ); + setPinchValveEnableReset( valve, TRUE, FALSE ); } } @@ -297,10 +301,6 @@ switch ( commandState[ valve ] ) { case PINCH_VALVE_CMD_IDLE_STATE: - if ( activeCommand[ valve ].cmdHeader != 0 ) - { - commandState[ valve ] = PINCH_VALVE_CMD_SET_CMD_STATE; - } break; case PINCH_VALVE_CMD_SET_CMD_STATE: @@ -359,7 +359,7 @@ } else { - savePinchValveCommandOutput( valve ); + isPinchValveCommandOutput( valve ); clearPinchValveFpgaCommand( valve ); activeCommand[ valve ].cmdHeader = 0; commandFailed[ valve ] = FALSE; @@ -401,7 +401,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; } @@ -551,38 +555,44 @@ if ( TRUE == pendingValveHomeRequest[ valve ] ) { pendingValveHomeRequest[ valve ] = FALSE; - activeCommandArray[ valve ] = &homingCommands[ 0 ]; - activeCommandCount[ valve ] = (U08)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 ] ) { pendingValvePositionRequest[ valve ] = FALSE; - activeCommandArray[ valve ] = &positionCommands[ 0 ]; - activeCommandCount[ valve ] = (U08)NUM_OF_PINCH_VALVE_POSITION_COMMANDS; - activeCommandIndex[ valve ] = 0 ; - commandFailed[ valve ] = FALSE; - functionState[ valve ] = PINCH_VALVE_FUNCTION_SEND_STATE; + 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 ( ( activeCommandArray[ valve ] != 0 ) && ( activeCommandIndex[ valve ] < activeCommandCount[ valve ] ) ) + if ( activeCommandIndex[ valve ] < activeCommandCount[ valve ] ) { - PINCH_VALVE_COMMAND_T *cmdArray = activeCommandArray[ valve ]; - PINCH_VALVE_COMMAND_T cmd = cmdArray[ activeCommandIndex[ valve ] ]; - - if ( TRUE == setPinchValveCommand( valve, cmd ) ) + if ( PINCH_VALVE_CMD_IDLE_STATE == commandState[ valve ] ) { - functionState[ valve ] = PINCH_VALVE_FUNCTION_WAIT_STATE; + 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; - // TODO: s/w fault } break; @@ -591,25 +601,31 @@ { if ( TRUE == commandFailed[ 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; + 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 @@ -649,7 +665,6 @@ commandErrorCount[ valve ] = 0; commandFailed[ valve ] = FALSE; commandState[ valve ] = PINCH_VALVE_CMD_SET_CMD_STATE; - result = TRUE; } @@ -668,22 +683,27 @@ { BOOL result = FALSE; - if ( H1_VALV == valve ) + if ( TRUE == setPinchValveFpgaCommandByte( &activeCommand[ valve ], &fpgaCommandValue[ valve ] ) ) { - setH1CmdHeader( activeCommand[ valve ].cmdHeader ); - setH1InputWord1( activeCommand[ valve ].inputWord1 ); - setH1InputWord2( activeCommand[ valve ].inputWord2 ); - setH1InputWord3( activeCommand[ valve ].inputWord3 ); - result = TRUE; + if ( H1_VALV == valve ) + { + setH1CmdHeader( activeCommand[ valve ].cmdHeader ); + setH1InputWord1( activeCommand[ valve ].inputWord1 ); + setH1InputWord2( activeCommand[ valve ].inputWord2 ); + setH1InputWord3( activeCommand[ valve ].inputWord3 ); + setH1FPGACmd( fpgaCommandValue[ valve ] ); + result = TRUE; + } + else if ( H19_VALV == valve ) + { + setH19CmdHeader( activeCommand[ valve ].cmdHeader ); + setH19InputWord1( activeCommand[ valve ].inputWord1 ); + setH19InputWord2( activeCommand[ valve ].inputWord2 ); + setH19InputWord3( activeCommand[ valve ].inputWord3 ); + setH19FPGACmd( fpgaCommandValue[ valve ] ); + result = TRUE; + } } - else if ( H19_VALV == valve ) - { - setH19CmdHeader( activeCommand[ valve ].cmdHeader ); - setH19InputWord1( activeCommand[ valve ].inputWord1 ); - setH19InputWord2( activeCommand[ valve ].inputWord2 ); - setH19InputWord3( activeCommand[ valve ].inputWord3 ); - result = TRUE; - } return result; } @@ -699,26 +719,22 @@ static BOOL transmitPinchValveCommand( VALVE_T valve ) { BOOL result = FALSE; - U08 fpgaCommand; + U08 fpgaCommand = (U08)( fpgaCommandValue[ valve ] | PINCH_VALVE_FPGA_CMD_START_BIT_MASK ); - if ( TRUE == setPinchValveFpgaCommandByte( &activeCommand[ valve ], &fpgaCommand ) ) + if ( H1_VALV == valve ) { - if ( H1_VALV == valve ) - { - setH1FPGACmd( fpgaCommand ); - result = TRUE; - } - else if ( H19_VALV == valve ) - { - setH19FPGACmd( fpgaCommand ); - result = TRUE; - } + setH1FPGACmd( fpgaCommand ); + result = TRUE; } + else if ( H19_VALV == valve ) + { + setH19FPGACmd( fpgaCommand ); + result = TRUE; + } return result; } - /*********************************************************************//** * @brief * The readPinchValveCommandResponse function reads the active valve response @@ -789,7 +805,7 @@ if ( ( command->inputWordCount <= PINCH_VALVE_MAX_INPUT_WORDS ) && ( command->outputWordCount <= PINCH_VALVE_MAX_OUTPUT_WORDS ) && ( transmitWordCount <= PINCH_VALVE_MAX_TRANSMIT_WORDS ) ) { - *fpgaCommand = PINCH_VALVE_FPGA_CMD_START_BIT_MASK; + *fpgaCommand = 0; if ( TRUE == command->writeOnly ) { @@ -912,10 +928,12 @@ { BOOL result = FALSE; - if ( command != 0 ) + if ( 0 != command ) { - if ( ( command->inputWordCount <= PINCH_VALVE_MAX_INPUT_WORDS ) && - ( command->outputWordCount <= PINCH_VALVE_MAX_OUTPUT_WORDS ) ) + U08 transmitWordCount = (U08)( command->inputWordCount + 1 ); + + if ( ( command->inputWordCount <= PINCH_VALVE_MAX_INPUT_WORDS ) && ( command->outputWordCount <= PINCH_VALVE_MAX_OUTPUT_WORDS ) && + ( transmitWordCount <= PINCH_VALVE_MAX_TRANSMIT_WORDS ) ) { result = TRUE; } @@ -959,7 +977,7 @@ /*********************************************************************//** * @brief -* The savePinchValveCommandOutput function stores output data returned by +* 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 @@ -968,7 +986,7 @@ * @param valve H1_VALV or H19_VALV. * @return none *************************************************************************/ -static void savePinchValveCommandOutput( VALVE_T valve ) +static void isPinchValveCommandOutput( VALVE_T valve ) { if ( TRUE == isValidPinchValve( valve ) ) { @@ -992,4 +1010,6 @@ } } } + + /**@}*/ Index: firmware/App/Drivers/PinchValve.h =================================================================== diff -u -r73e17d7f9edcedb40fef1d905267ae629b8ace42 -r2b760b79a846c77a932b6df6c489faee96a544a0 --- firmware/App/Drivers/PinchValve.h (.../PinchValve.h) (revision 73e17d7f9edcedb40fef1d905267ae629b8ace42) +++ firmware/App/Drivers/PinchValve.h (.../PinchValve.h) (revision 2b760b79a846c77a932b6df6c489faee96a544a0) @@ -48,6 +48,7 @@ BOOL isPinchValveBusy( VALVE_T valve ); + /**@}*/ #endif Index: firmware/App/Services/FpgaTD.c =================================================================== diff -u -r9b1c4a9731b66bc4aab3fb1d02b0ab608efa9598 -r2b760b79a846c77a932b6df6c489faee96a544a0 --- firmware/App/Services/FpgaTD.c (.../FpgaTD.c) (revision 9b1c4a9731b66bc4aab3fb1d02b0ab608efa9598) +++ firmware/App/Services/FpgaTD.c (.../FpgaTD.c) (revision 2b760b79a846c77a932b6df6c489faee96a544a0) @@ -117,7 +117,7 @@ S16 h1MaxEncPosition; ///< Reg 278. H1 max encoder position. S16 h1EncPosition; ///< Reg 280. H1 encoder position (1000 steps/rev). U16 h1Status; ///< Reg 282. H1 status. - U32 reserved2; ///< Reg 284. Reserved and available for future use. + U08 reserved2; ///< Reg 284. Reserved and available for future use. U08 h1SPICmdStatus; ///< Reg 285. H1 Magellan SPI command status. U08 h1ReadCount; ///< Reg 286. H1 read count. U08 h19SPICmdStatus; ///< Reg 287. H19 Magellan SPI command status.