Index: firmware/App/Drivers/RotaryValve.c =================================================================== diff -u -rb824ef4b479578c5aa702abd9147aef505a6fb04 -r153784735cd268c81765544a581e36d76067d344 --- firmware/App/Drivers/RotaryValve.c (.../RotaryValve.c) (revision b824ef4b479578c5aa702abd9147aef505a6fb04) +++ firmware/App/Drivers/RotaryValve.c (.../RotaryValve.c) (revision 153784735cd268c81765544a581e36d76067d344) @@ -133,6 +133,7 @@ { if ( valve < NUM_OF_VALVES ) { + // TODO this line is not needed because the positions are calculated in the homing U16 mag8 = ( ( mag % ROTARY_VALVE_MICROSTEP_FRACTION ) < 4 ? ( mag >> 3 ) << 3 : ( ( mag >> 3 ) << 3 ) + ROTARY_VALVE_MICROSTEP_FRACTION ); // round to multiple of 8 to maximize holding torque S16 chgSteps = (S16)mag8 * ( MOTOR_DIR_REVERSE == dir ? -1 : 1 ); // convert to signed change in position - negative value indicates reverse direction @@ -185,36 +186,6 @@ /*********************************************************************//** * @brief - * The getValveStatus function gets the current status for a given valve. - * Status bits: - * 0-motor driver fault - * 1-direction fault - * 2-incorrect encoder sensor fault - * 3..7-reserved - * @details \b Alarm: ALARM_ID_TD_SOFTWARE_FAULT if invalid valve given. - * @details \b Inputs: valveStatus[] - * @details \b Outputs: none - * @param valve ID of valve to get status for - * @return Status for the given valve - *************************************************************************/ -static U08 getValveStatus( VALVE_T valve ) -{ - U08 result = 0; - - if ( valve < NUM_OF_VALVES ) - { - result = getU08OverrideValue( &valveStatus[ valve ] ); - } - else - { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_VALVES_INVALID_VALVE4, (U32)valve ) - } - - return result; -} - -/*********************************************************************//** - * @brief * The resetValve function resets the valve. * @details \b Alarm: ALARM_ID_TD_SOFTWARE_FAULT if invalid valve given. * @details \b Inputs: none @@ -331,7 +302,118 @@ } } +/*********************************************************************//** + * @brief + * The setValveHomingEnableDisable function enables or disables the homing + * bit in the valve's control set. + * @details \b Alarm: ALARM_ID_TD_SOFTWARE_FAULT if invalid valve given. + * @details \b Inputs: none + * @details \b Outputs: none + * @param valve ID of valve to get status for + * @param enableHoming TRUE if enable homing needed otherwise, FALSE + * @return none + *************************************************************************/ +void setValveHomingEnableDisable( VALVE_T valve, BOOL enableHoming ) +{ + U08 valveControlSet; + switch ( valve ) + { + case H1_VALV: + valveControlSet = getH1Control(); + if ( TRUE == enableHoming ) + { + valveControlSet |= FPGA_PINCH_VALVES_ENABLE_HOMING; + } + else + { + valveControlSet &= ~FPGA_PINCH_VALVES_ENABLE_HOMING; + } + setH1Control( valveControlSet ); + break; + + case H19_VALV: + valveControlSet = getH19Control(); + if ( TRUE == enableHoming ) + { + valveControlSet |= FPGA_PINCH_VALVES_ENABLE_HOMING; + } + else + { + valveControlSet &= ~FPGA_PINCH_VALVES_ENABLE_HOMING; + } + setH19Control( valveControlSet ); + break; + + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_VALVES_INVALID_VALVE_HOMING_SET, (U32)valve ) + break; + } +} + +/*********************************************************************//** + * @brief + * The getValveMaximumEncoderPosition function gets the maximum encoder + * position of the valve. + * @details \b Alarm: ALARM_ID_TD_SOFTWARE_FAULT if invalid valve given. + * @details \b Inputs: none + * @details \b Outputs: none + * @param valve ID of valve to get status for + * @return gets the valves maximum encoder position + *************************************************************************/ +S16 getValveMaximumEncoderPosition( VALVE_T valve ) +{ + S16 maxEncoderValue; + + switch ( valve ) + { + case H1_VALV: + maxEncoderValue = getH1MaxEncPosition(); + break; + + case H19_VALV: + maxEncoderValue = getH19MaxEncPosition(); + break; + + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_VALVES_INVALID_VALVE_MAX_ENC_POS_REQ, (U32)valve ) + break; + } + + return maxEncoderValue; +} + +/*********************************************************************//** + * @brief + * The getValveStatus function gets the current status for a given valve. + * Status bits: + * 0-motor driver fault + * 1-direction fault + * 2-incorrect encoder sensor fault + * 3..7-reserved + * @details \b Alarm: ALARM_ID_TD_SOFTWARE_FAULT if invalid valve given. + * @details \b Inputs: valveStatus[] + * @details \b Outputs: none + * @param valve ID of valve to get status for + * @return Status for the given valve + *************************************************************************/ +static U08 getValveStatus( VALVE_T valve ) +{ + U08 result = 0; + + if ( valve < NUM_OF_VALVES ) + { + result = getU08OverrideValue( &valveStatus[ valve ] ); + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_VALVES_INVALID_VALVE4, (U32)valve ) + } + + return result; +} + + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/