Index: firmware/App/Controllers/Valves.c =================================================================== diff -u -re0060cd79d971c0ed94b8aed6949d2754480fe92 -r8c14bdff486bb7299381f19672bb9761b91c332b --- firmware/App/Controllers/Valves.c (.../Valves.c) (revision e0060cd79d971c0ed94b8aed6949d2754480fe92) +++ firmware/App/Controllers/Valves.c (.../Valves.c) (revision 8c14bdff486bb7299381f19672bb9761b91c332b) @@ -531,8 +531,6 @@ // TODO in the future this needs to be searched currentValveStates[ valve ].positionsABC[ VALVE_POSITION_C_CLOSE ] = VALVE_OFFEST_FROM_EDG_CNT; - // TODO in the future this needs to be searched - currentValveStates[ valve ].positionsABC[ VALVE_POSITION_D_PARTIAL_CLOSE ] = POS_D_PARTIAL_CLOSE_FROM_ZERO_CNT; posB = currentValveStates[ valve ].positionsABC[ VALVE_POSITION_B_OPEN ]; posC = currentValveStates[ valve ].positionsABC[ VALVE_POSITION_C_CLOSE ]; @@ -752,7 +750,6 @@ data.posA = currentValveStates[ valve ].positionsABC[ VALVE_POSITION_A_INSERT_EJECT ]; data.posB = currentValveStates[ valve ].positionsABC[ VALVE_POSITION_B_OPEN ]; data.posC = currentValveStates[ valve ].positionsABC[ VALVE_POSITION_C_CLOSE ]; - data.posD = currentValveStates[ valve ].positionsABC[ VALVE_POSITION_D_PARTIAL_CLOSE ]; data.maxHomingPos = currentValveStates[ valve ].currentMaxEncPositionCnt; broadcastData( MSG_ID_TD_VALVES_DATA, COMM_BUFFER_OUT_CAN_TD_BROADCAST, (U08*)&data, sizeof( TD_VALVE_DATA_T ) ); Index: firmware/App/Controllers/Valves.h =================================================================== diff -u -re0060cd79d971c0ed94b8aed6949d2754480fe92 -r8c14bdff486bb7299381f19672bb9761b91c332b --- firmware/App/Controllers/Valves.h (.../Valves.h) (revision e0060cd79d971c0ed94b8aed6949d2754480fe92) +++ firmware/App/Controllers/Valves.h (.../Valves.h) (revision 8c14bdff486bb7299381f19672bb9761b91c332b) @@ -33,17 +33,6 @@ // ********** public definitions ********** -/// Valves positions -typedef enum valveStatesNames -{ - VALVE_POSITION_NOT_IN_POSITION = 0, ///< Valve position is unknown (cannot be used as a command) - VALVE_POSITION_A_INSERT_EJECT, ///< Position A, Insert/Eject - VALVE_POSITION_B_OPEN, ///< Position B, Open - VALVE_POSITION_C_CLOSE, ///< Position C, Close - VALVE_POSITION_D_PARTIAL_CLOSE, ///< Position D, partial close - NUM_OF_VALVE_POSITIONS, ///< Number of valve positions -} VALVE_POSITION_T; - #pragma pack(push, 1) /// TD valves broadcast data typedef struct @@ -56,7 +45,6 @@ S16 posA; ///< Position A (count) S16 posB; ///< Position B (count) S16 posC; ///< Position C (count) - S16 posD; ///< Position D (count) S16 maxHomingPos; ///< Maximum homing position } TD_VALVE_DATA_T; #pragma pack(pop) Index: firmware/App/Drivers/PinchValve.c =================================================================== diff -u -re0060cd79d971c0ed94b8aed6949d2754480fe92 -r8c14bdff486bb7299381f19672bb9761b91c332b --- firmware/App/Drivers/PinchValve.c (.../PinchValve.c) (revision e0060cd79d971c0ed94b8aed6949d2754480fe92) +++ firmware/App/Drivers/PinchValve.c (.../PinchValve.c) (revision 8c14bdff486bb7299381f19672bb9761b91c332b) @@ -29,8 +29,7 @@ // ********** private definitions ********** -#define PINCH_VALVE_COMMAND_TIMEOUT_MS 5000 ///< Maximum FPGA command execution time. -#define PINCH_VALVE_COMMAND_RESPONSE_DELAY_MS 100 ///< Temporary delay before reading the FPGA command response. +#define PINCH_VALVE_COMMAND_TIMEOUT_MS 1000 ///< Maximum FPGA command execution time. #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. @@ -111,16 +110,16 @@ 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_GET_ACTIVITY_FIRST, + PINCH_VALVE_HOME_CMD_GET_EVENT_STATUS_FIRST, + PINCH_VALVE_HOME_CMD_GET_ACTUAL_POSITION_B, 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_GET_ACTUAL_POSITION, -// PINCH_VALVE_HOME_CMD_RESET_EVENTS_COMPLETE, + PINCH_VALVE_HOME_CMD_GET_ACTIVITY_SECOND, + PINCH_VALVE_HOME_CMD_GET_EVENT_STATUS_SECOND, + PINCH_VALVE_HOME_CMD_GET_ACTUAL_POSITION_C, + PINCH_VALVE_HOME_CMD_RESET_EVENTS_COMPLETE, NUM_OF_PINCH_VALVE_HOMING_COMMANDS } PINCH_VALVE_HOMING_COMMAND_INDEX_T; @@ -141,46 +140,23 @@ // ********** private data ********** -// 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_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 homingCommands[ 7 ] = -//{ -// { 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_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 }, -//}; - // This array is used for both H1_VALV static PINCH_VALVE_COMMAND_T h1HomingCommands[ 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_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_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_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 } }; // This array is used for both H19_VALV @@ -190,9 +166,16 @@ { 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 ] = @@ -222,6 +205,7 @@ static S32 pendingValvePosition[ NUM_OF_VALVES ]; static S32 currentValvePosition[ NUM_OF_VALVES ]; +static S32 valvePositions[ NUM_OF_VALVES ][ NUM_OF_VALVE_POSITIONS ]; static U16 commandOutputWord1[ NUM_OF_VALVES ]; static U16 commandOutputWord2[ NUM_OF_VALVES ]; @@ -247,7 +231,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 PINCH_VALVE_CMD_STATE_T processPinchValveCommandOutput( VALVE_T valve ); static void clearPinchValveFpgaCommand( VALVE_T valve ); static BOOL setPinchValveFpgaCommandByte( const PINCH_VALVE_COMMAND_T *command, U08 *fpgaCommand ); @@ -381,22 +365,20 @@ case PINCH_VALVE_CMD_WAIT_DONE_STATE: - //if ( TRUE == didTimeout( executeStartTime[ valve ], PINCH_VALVE_COMMAND_TIMEOUT_MS ) ) -// { -// commandState[ valve ] = PINCH_VALVE_CMD_ERROR_STATE; -// } -// else + if ( TRUE == didTimeout( executeStartTime[ valve ], PINCH_VALVE_COMMAND_TIMEOUT_MS ) ) { + commandState[ valve ] = PINCH_VALVE_CMD_ERROR_STATE; + } + else + { readPinchValveCommandResponse( valve ); if ( ( TRUE == didPinchValveErrorCountChange( valve ) ) || ( TRUE == isPinchValveControllerFaultActive( valve ) ) ) { commandState[ valve ] = PINCH_VALVE_CMD_ERROR_STATE; } - else if ( TRUE == didTimeout( executeStartTime[ valve ], PINCH_VALVE_COMMAND_TIMEOUT_MS ) ) - //else if ( TRUE == isPinchValveCommandDone( valve ) ) + else if ( TRUE == isPinchValveCommandDone( valve ) ) { - // Temporary code for hardware debug workaround wait 100 ms instead of checking the FPGA DONE bit. commandState[ valve ] = PINCH_VALVE_CMD_READ_WORDS_STATE; } } @@ -412,11 +394,10 @@ } else { - isPinchValveCommandOutput( valve ); + commandState[ valve ] = processPinchValveCommandOutput( valve ); clearPinchValveFpgaCommand( valve ); clearActivePinchValveCommand( valve ); commandFailed[ valve ] = FALSE; - commandState[ valve ] = PINCH_VALVE_CMD_IDLE_STATE; } break; @@ -1149,16 +1130,16 @@ /*********************************************************************//** * @brief -* The isPinchValveCommandOutput function stores output data returned by +* The processPinchValveCommandOutput 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 +* @return next pinch valve command state *************************************************************************/ -static void isPinchValveCommandOutput( VALVE_T valve ) +static PINCH_VALVE_CMD_STATE_T processPinchValveCommandOutput( VALVE_T valve ) { if ( TRUE == isValidPinchValve( valve ) ) { @@ -1172,10 +1153,21 @@ eventStatus[ valve ] = commandOutputWord1[ valve ]; break; - case PINCH_VALVE_PMD_CMD_GET_ACTUAL_POSITION: + default: + // Check with Sean TODO later + break; + } + + switch ( activeCommandIndex[ valve ] ) + { + case PINCH_VALVE_HOME_CMD_GET_ACTUAL_POSITION_B: currentValvePosition[ valve ] = getSigned32OutputValue( valve ); break; + case PINCH_VALVE_HOME_CMD_GET_ACTUAL_POSITION_C: + currentValvePosition[ valve ] = getSigned32OutputValue( valve ); + break; + default: // Check with Sean TODO later break; @@ -1212,7 +1204,7 @@ /*********************************************************************//** * @brief -* The isPinchValveCommandOutput function stores output data returned by +* The clearPinchValveCommandRegisters function stores output data returned by * Get Activity Status, Get Event Status, and Get Actual Position commands. * @details \b Inputs: activeCommand, commandOutputWord1, * commandOutputWord2, commandOutputWord3 @@ -1249,7 +1241,7 @@ /*********************************************************************//** * @brief -* The isPinchValveCommandOutput function stores output data returned by +* The resetPinchValveFunctionSequence function stores output data returned by * Get Activity Status, Get Event Status, and Get Actual Position commands. * @details \b Inputs: activeCommand, commandOutputWord1, * commandOutputWord2, commandOutputWord3 Index: firmware/App/Drivers/PinchValve.h =================================================================== diff -u -re0060cd79d971c0ed94b8aed6949d2754480fe92 -r8c14bdff486bb7299381f19672bb9761b91c332b --- firmware/App/Drivers/PinchValve.h (.../PinchValve.h) (revision e0060cd79d971c0ed94b8aed6949d2754480fe92) +++ firmware/App/Drivers/PinchValve.h (.../PinchValve.h) (revision 8c14bdff486bb7299381f19672bb9761b91c332b) @@ -33,6 +33,16 @@ // ********** public definitions ********** +/// Valves positions +typedef enum valveStatesNames +{ + VALVE_POSITION_NOT_IN_POSITION = 0, ///< Valve position is unknown (cannot be used as a command) + VALVE_POSITION_A_INSERT_EJECT, ///< Position A, Insert/Eject + VALVE_POSITION_B_OPEN, ///< Position B, Open + VALVE_POSITION_C_CLOSE, ///< Position C, Close + NUM_OF_VALVE_POSITIONS, ///< Number of valve positions +} VALVE_POSITION_T; + /// rotary pinch valve names typedef enum valveNames {