Index: firmware/App/Drivers/PinchValve.c =================================================================== diff -u -r23786f72582a3844de233f8e9c4284e5464d458c -r5b9b3a6bbbdc9257ddf01fdbe781a8f6748beafa --- firmware/App/Drivers/PinchValve.c (.../PinchValve.c) (revision 23786f72582a3844de233f8e9c4284e5464d458c) +++ firmware/App/Drivers/PinchValve.c (.../PinchValve.c) (revision 5b9b3a6bbbdc9257ddf01fdbe781a8f6748beafa) @@ -173,18 +173,21 @@ // ********** private data ********** +const S32 HOMING_VELOCITY_FWD = 3342; ///< ** add a comment later *** +const S32 HOMING_VELOCITY_REV = -3342; + // 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, 0, 0, 0, 2, 0, FALSE }, + { PINCH_VALVE_PMD_CMD_SET_VELOCITY, (HOMING_VELOCITY_FWD >> 16), (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, 0, 0, 0, 2, 0, FALSE }, + { PINCH_VALVE_PMD_CMD_SET_VELOCITY, (HOMING_VELOCITY_REV >> 16), (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 } @@ -204,7 +207,6 @@ { PINCH_VALVE_PMD_CMD_RESET_EVENT_STATUS, PINCH_VALVE_RESET_EVENT_STATUS_VALUE, 0, 0, 1, 0, FALSE } }; - static PINCH_VALVE_FUNCTION_STATE_T functionState; ///< Current function state. static PINCH_VALVE_CMD_STATE_T commandState; ///< Current command state. static PINCH_VALVE_FUNCTION_T activeFunction; @@ -216,7 +218,6 @@ static U08 activeCommandCount; static U08 activeCommandIndex; - static PINCH_VALVE_RESPONSE_T currentResponse; ///< Response for the active command. static PINCH_VALVE_RESPONSE_T lastResponse[ NUM_OF_VALVES ]; ///< Last response for each valve. @@ -230,7 +231,6 @@ // ********** private function prototypes ********** - static PINCH_VALVE_CMD_RESULT_T getPinchValveCommandResult( void ); static BOOL getPinchValveResponse( VALVE_T valve, PINCH_VALVE_RESPONSE_T *response ); static BOOL setPinchValveCommand( VALVE_T valve, const PINCH_VALVE_COMMAND_T *command ); @@ -302,20 +302,6 @@ /*********************************************************************//** * @brief -* The execPinchValveDriver function executes the command state machine. -* //TODO: -* @details \b Inputs: PinchValve private data and FPGA response registers -* @details \b Outputs: PinchValve private data and FPGA command registers -* @return none -*************************************************************************/ -void execPinchValveDriver( void ) -{ - execPinchValveFunction(); - execPinchValveCommand(); -} - -/*********************************************************************//** -* @brief * The execPinchValveCommand function executes the low-level FPGA command * state machine. * @details \b Inputs: activeCommand, activeValve, @@ -327,25 +313,20 @@ { switch ( commandState ) { - case PINCH_VALVE_CMD_IDLE_STATE: - { + case PINCH_VALVE_CMD_IDLE_STATE: execPinchValveFunction(); break; - } case PINCH_VALVE_CMD_SET_CMD_STATE: - { writePinchValveCommandRegisters(); if ( PINCH_VALVE_CMD_ERROR_STATE != commandState ) { errorCountAtCommandStart = readPinchValveErrorCount( activeValve ); commandState = PINCH_VALVE_CMD_XMIT_CMD_STATE; } break; - } case PINCH_VALVE_CMD_XMIT_CMD_STATE: - { if ( TRUE == transmitPinchValveCommand() ) { executeStartTime = getMSTimerCount(); @@ -357,10 +338,8 @@ commandState = PINCH_VALVE_CMD_ERROR_STATE; } break; - } case PINCH_VALVE_CMD_WAIT_DONE_STATE: - { if ( TRUE == didTimeout( executeStartTime, PINCH_VALVE_COMMAND_TIMEOUT_MS ) ) { readPinchValveCommandResponse(); @@ -381,10 +360,8 @@ } } break; - } case PINCH_VALVE_CMD_READ_WORDS_STATE: - { readPinchValveCommandResponse(); if ( ( TRUE == didPinchValveErrorCountChange() ) || ( TRUE == isPinchValveControllerFaultActive() ) || ( FALSE == arePinchValveWordCountsValid() ) ) @@ -399,27 +376,22 @@ commandState = PINCH_VALVE_CMD_IDLE_STATE; } break; - } case PINCH_VALVE_CMD_ERROR_STATE: - { readPinchValveCommandResponse(); lastResponse[ activeValve ] = currentResponse; clearPinchValveFpgaCommand(); commandResult = PINCH_VALVE_CMD_RESULT_ERROR; commandState = PINCH_VALVE_CMD_IDLE_STATE; break; - } default: - { clearPinchValveFpgaCommand(); commandResult = PINCH_VALVE_CMD_RESULT_ERROR; commandState = PINCH_VALVE_CMD_IDLE_STATE; functionState = PINCH_VALVE_FUNCTION_IDLE_STATE; activeFunction = PINCH_VALVE_FUNCTION_NONE; break; - } } } @@ -439,13 +411,13 @@ if ( ( TRUE == isValidPinchValve( valve ) ) && ( FALSE == isPinchValveBusy() ) ) { - activeValve = valve; - activeFunction = PINCH_VALVE_FUNCTION_HOME; - activeCommandArray = homingCommands; - activeCommandCount = (U08)NUM_OF_PINCH_VALVE_HOMING_COMMANDS; - activeCommandIndex = 0; - commandResult = PINCH_VALVE_CMD_RESULT_BUSY; - functionState = PINCH_VALVE_FUNCTION_SEND_STATE; + pendingValveHomeRequest[ valve ] = TRUE; + +// activeValve = valve; +// activeFunction = PINCH_VALVE_FUNCTION_HOME; +// activeCommandArray = homingCommands; +// commandResult = PINCH_VALVE_CMD_RESULT_BUSY; +// functionState = PINCH_VALVE_FUNCTION_SEND_STATE; result = TRUE; } @@ -589,82 +561,96 @@ *************************************************************************/ void execPinchValveFunction( void ) { - switch ( functionState ) + VALVE_T valve; + + for ( valve = (VALVE_T)0; valve < NUM_OF_VALVES; valve++ ) { - case PINCH_VALVE_FUNCTION_IDLE_STATE: + switch ( functionState[ valve ] ) { - break; - } + case PINCH_VALVE_FUNCTION_IDLE_STATE: + if ( TRUE == pendingValveHomeRequest[ valve ] ) + { + activeCommandCount = (U08)NUM_OF_PINCH_VALVE_HOMING_COMMANDS; + activeCommandIndex = 0; + activeCommandArray = &homingCommands[0]; + functinState[ valve ] = PINCH_VALVE_FUNCTION_SEND_STATE; + } + break; - case PINCH_VALVE_FUNCTION_SEND_STATE: - { - if ( ( activeCommandArray != 0 ) && ( activeCommandIndex < activeCommandCount ) && - ( TRUE == setPinchValveCommand( activeValve, &activeCommandArray[ activeCommandIndex ] ) ) ) - { - functionState = PINCH_VALVE_FUNCTION_WAIT_STATE; - } - else - { - commandResult = PINCH_VALVE_CMD_RESULT_ERROR; - functionState = PINCH_VALVE_FUNCTION_IDLE_STATE; - activeFunction = PINCH_VALVE_FUNCTION_NONE; - } - break; - } + case PINCH_VALVE_FUNCTION_SEND_STATE: + if ( ( activeCommandArray != 0 ) && ( activeCommandIndex < activeCommandCount ) && + ( TRUE == setPinchValveCommand( valve, &activeCommandArray[ activeCommandIndex ] ) ) ) + { + functionState = PINCH_VALVE_FUNCTION_WAIT_STATE; + } + else + { + commandResult = PINCH_VALVE_CMD_RESULT_ERROR; + functionState = PINCH_VALVE_FUNCTION_IDLE_STATE; + //activeFunction = PINCH_VALVE_FUNCTION_NONE; + } + break; - case PINCH_VALVE_FUNCTION_WAIT_STATE: - { - PINCH_VALVE_CMD_RESULT_T cmdResult = getPinchValveCommandResult(); + case PINCH_VALVE_FUNCTION_WAIT_STATE: + //PINCH_VALVE_CMD_RESULT_T cmdResult = getPinchValveCommandResult(); - if ( PINCH_VALVE_CMD_RESULT_COMPLETE == cmdResult ) - { - BOOL repeatCommand = FALSE; - - if ( TRUE == isPinchValveCommandCompleted( &repeatCommand ) ) + //if ( PINCH_VALVE_CMD_RESULT_COMPLETE == cmdResult ) + if ( IDLE_STATE == commandState[ valve ] ) { - if ( TRUE == repeatCommand ) + if ( ++activeCommandIndex >= NUM_OF_>>>>> ) { - commandResult = PINCH_VALVE_CMD_RESULT_BUSY; - functionState = PINCH_VALVE_FUNCTION_SEND_STATE; + functionState[ valve ] = PINCH_VALVE_FUNCTION_IDLE_STATE; } else { - activeCommandIndex++; - - if ( activeCommandIndex >= activeCommandCount ) - { - commandResult = PINCH_VALVE_CMD_RESULT_COMPLETE; - functionState = PINCH_VALVE_FUNCTION_IDLE_STATE; - activeFunction = PINCH_VALVE_FUNCTION_NONE; - } - else - { - commandResult = PINCH_VALVE_CMD_RESULT_BUSY; - functionState = PINCH_VALVE_FUNCTION_SEND_STATE; - } + functionState[ valve ] = PINCH_VALVE_FUNCTION_SEND_STATE; } - } - else - { - commandResult = PINCH_VALVE_CMD_RESULT_ERROR; - functionState = PINCH_VALVE_FUNCTION_IDLE_STATE; - activeFunction = PINCH_VALVE_FUNCTION_NONE; - } - } - else if ( PINCH_VALVE_CMD_RESULT_ERROR == cmdResult ) - { - functionState = PINCH_VALVE_FUNCTION_IDLE_STATE; - activeFunction = PINCH_VALVE_FUNCTION_NONE; - } - break; - } +// BOOL repeatCommand = FALSE; +// +// if ( TRUE == isPinchValveCommandCompleted( &repeatCommand ) ) +// { +// if ( TRUE == repeatCommand ) +// { +// commandResult = PINCH_VALVE_CMD_RESULT_BUSY; +// functionState = PINCH_VALVE_FUNCTION_SEND_STATE; +// } +// else +// { +// activeCommandIndex++; +// +// if ( activeCommandIndex >= activeCommandCount ) +// { +// commandResult = PINCH_VALVE_CMD_RESULT_COMPLETE; +// functionState = PINCH_VALVE_FUNCTION_IDLE_STATE; +// activeFunction = PINCH_VALVE_FUNCTION_NONE; +// } +// else +// { +// commandResult = PINCH_VALVE_CMD_RESULT_BUSY; +// functionState = PINCH_VALVE_FUNCTION_SEND_STATE; +// } +// } +// } +// else +// { +// commandResult = PINCH_VALVE_CMD_RESULT_ERROR; +// functionState = PINCH_VALVE_FUNCTION_IDLE_STATE; +// activeFunction = PINCH_VALVE_FUNCTION_NONE; +// } +// } +// else if ( PINCH_VALVE_CMD_RESULT_ERROR == cmdResult ) +// { +// functionState = PINCH_VALVE_FUNCTION_IDLE_STATE; +// activeFunction = PINCH_VALVE_FUNCTION_NONE; +// } + break; - default: - { - commandResult = PINCH_VALVE_CMD_RESULT_ERROR; - functionState = PINCH_VALVE_FUNCTION_IDLE_STATE; - activeFunction = PINCH_VALVE_FUNCTION_NONE; - break; + default: + // TODO - s/w fault +// commandResult = PINCH_VALVE_CMD_RESULT_ERROR; +// functionState = PINCH_VALVE_FUNCTION_IDLE_STATE; +// activeFunction = PINCH_VALVE_FUNCTION_NONE; + break; } } } Index: firmware/App/Drivers/PinchValve.h =================================================================== diff -u -r1f3e57c1351a085c6a05105a50ef73393cc974c6 -r5b9b3a6bbbdc9257ddf01fdbe781a8f6748beafa --- firmware/App/Drivers/PinchValve.h (.../PinchValve.h) (revision 1f3e57c1351a085c6a05105a50ef73393cc974c6) +++ firmware/App/Drivers/PinchValve.h (.../PinchValve.h) (revision 5b9b3a6bbbdc9257ddf01fdbe781a8f6748beafa) @@ -36,7 +36,6 @@ // ********** public function prototypes ********** void initPinchValveDriver( void ); -void execPinchValveDriver( void ); void execPinchValveFunction( void ); void execPinchValveCommand( void ); Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r8345f0415ce34f2f47afcbf613a00216769f51c6 -r5b9b3a6bbbdc9257ddf01fdbe781a8f6748beafa --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 8345f0415ce34f2f47afcbf613a00216769f51c6) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 5b9b3a6bbbdc9257ddf01fdbe781a8f6748beafa) @@ -29,6 +29,9 @@ #include "TxParams.h" #include "Valve3Way.h" #include "Valves.h" +#if 1 +#include "PinchValve.h" +#endif /** * @addtogroup TDStandbyMode @@ -52,6 +55,9 @@ static TD_STANDBY_STATE_T handleStandbyModeStartState( void ); static TD_STANDBY_STATE_T handleStandbyModeWaitForTreatmentState( void ); +#if 1 +static BOOL startTest = FALSE; +#endif /*********************************************************************//** * @brief @@ -113,6 +119,10 @@ // sendDGServiceRequestToDG(); // sendDGUsageInfoRequestToDG(); +#if 1 + initPinchValveDriver(); +#endif + return currentStandbyState; } @@ -132,6 +142,14 @@ // Ignore stop button in this mode. } +#if 1 + if ( TRUE == startTest ) + { + startTest = FALSE; + homePinchValve( H1_VALV ); + } +#endif + // State machine for standby mode switch ( currentStandbyState ) {