Index: firmware/App/Controllers/Ejector.c =================================================================== diff -u -r953f886774870b2a3523edcdac030d3e4a4d587d -rcf22584fb68bb29311d81d1e5ad79f8cf064b8fb --- firmware/App/Controllers/Ejector.c (.../Ejector.c) (revision 953f886774870b2a3523edcdac030d3e4a4d587d) +++ firmware/App/Controllers/Ejector.c (.../Ejector.c) (revision cf22584fb68bb29311d81d1e5ad79f8cf064b8fb) @@ -17,7 +17,6 @@ #include "AlarmMgmtTD.h" #include "Ejector.h" -#include "FpgaTD.h" #include "Messaging.h" #include "OperationModes.h" #include "PersistentAlarm.h" @@ -41,9 +40,6 @@ #define EJECTOR_EXTEND_MOTOR_SPEED_RPM 162.5F ///< Ejector motor extend speed (in RPM). #define EJECTOR_OFF_MOTOR_SPEED_RPM 0.0F ///< Ejector motor extend speed (in RPM). -#define EJECTOR_OPT_SENSOR_ACTIVE 0 ///< Ejector optical sensor active. -#define EJECTOR_OPT_SENSOR_INACTIVE 1 ///< Ejector optical sensor inactive. - /// Enumeration of ejector states. typedef enum EjectorOperations { @@ -65,8 +61,6 @@ static BOOL ejectorRetractRequested; ///< Flag indicating that ejector retract operation is requested. static BOOL ejectorExtendRequested; ///< Flag indicating that ejector extend operation is requested. static BOOL ejectorAbortRequested; ///< Flag indicating that ejector abort operation in requested. -static OVERRIDE_U32_T ejectorRetractOptSensor; ///< Ejector retract optical sensor. -static OVERRIDE_U32_T ejectorEngageOptSensor; ///< Ejector engage optical sensor. // ********** private function prototypes ********** @@ -105,16 +99,6 @@ ejectorDataPublishInterval.ovData = EJECTOR_DATA_PUB_INTERVAL; ejectorDataPublishInterval.ovInitData = EJECTOR_DATA_PUB_INTERVAL; ejectorDataPublishInterval.override = OVERRIDE_RESET; - - ejectorRetractOptSensor.data = (U32)getFPGAEjectorRetractOpticalSensor(); - ejectorRetractOptSensor.ovData = 0; - ejectorRetractOptSensor.ovInitData = 0; - ejectorRetractOptSensor.override = OVERRIDE_RESET; - - ejectorEngageOptSensor.data = (U32)getFPGAEjectorEngageOpticalSensor(); - ejectorEngageOptSensor.ovData = 0; - ejectorEngageOptSensor.ovInitData = 0; - ejectorEngageOptSensor.override = OVERRIDE_RESET; } /*********************************************************************//** @@ -265,10 +249,6 @@ currentEjectorState = EJECTOR_STATE_ABORT; } - // Update the optical sensor values - ejectorRetractOptSensor.data = (U32)getFPGAEjectorRetractOpticalSensor(); - ejectorEngageOptSensor.data = (U32)getFPGAEjectorEngageOpticalSensor(); - switch( currentEjectorState ) { case EJECTOR_STATE_INIT: @@ -430,7 +410,7 @@ { EJECTOR_STATE_T state = EJECTOR_STATE_RETRACTING; - if ( ( ++ejectorOperationTimerCounter >= EJECTOR_RETRACT_OP_TIME ) || ( EJECTOR_OPT_SENSOR_ACTIVE == getU32OverrideValue( &ejectorRetractOptSensor ) ) ) + if ( ( ++ejectorOperationTimerCounter >= EJECTOR_RETRACT_OP_TIME ) || ( TRUE == isEjectorOpticalSensorActive( EJECTOR_OPT_SENSOR_RETRACT ) ) ) { ejectorOperationTimerCounter = 0; setEjectorSpeed( EJECTOR_OFF_MOTOR_SPEED_RPM ); @@ -496,7 +476,7 @@ { EJECTOR_STATE_T state = EJECTOR_STATE_EXTENDING; - if ( ( ++ejectorOperationTimerCounter >= EJECTOR_EXTEND_OP_TIME ) || ( EJECTOR_OPT_SENSOR_ACTIVE == getU32OverrideValue( &ejectorEngageOptSensor ) ) ) + if ( ( ++ejectorOperationTimerCounter >= EJECTOR_EXTEND_OP_TIME ) || ( TRUE == isEjectorOpticalSensorActive( EJECTOR_OPT_SENSOR_ENGAGE ) ) ) { ejectorOperationTimerCounter = 0; setEjectorSpeed( EJECTOR_OFF_MOTOR_SPEED_RPM ); @@ -546,8 +526,8 @@ data.h5State = getEjectorState(); data.h5SetSpeed = currentEjectorSetSpeed; - data.retractOpticalSensor = getU32OverrideValue( &ejectorRetractOptSensor ); - data.engageOpticalSensor = getU32OverrideValue( &ejectorEngageOptSensor ); + data.retractOpticalSensor = (U32)isEjectorOpticalSensorActive( EJECTOR_OPT_SENSOR_RETRACT ); + data.engageOpticalSensor = (U32)isEjectorOpticalSensorActive( EJECTOR_OPT_SENSOR_ENGAGE ); broadcastData( MSG_ID_TD_EJECTOR_DATA, COMM_BUFFER_OUT_CAN_TD_BROADCAST, (U08*)&data, sizeof( EJECTOR_PAYLOAD_T ) ); ejectorDataPublicationTimerCounter = 0; @@ -627,39 +607,5 @@ return result; } -/*********************************************************************//** - * @brief - * The testEjectorRetractOpticalSensorOverride function overrides the retract - * optical sensor. - * @details \b Inputs: none - * @details \b Outputs: ejectorRetractOptSensor - * @param message Override message from Dialin which includes the retract - * optical sensor value. - * @return TRUE if override request is successful, FALSE if not - *************************************************************************/ -BOOL testEjectorRetractOpticalSensorOverride( MESSAGE_T *message ) -{ - BOOL result = u32Override( message, &ejectorRetractOptSensor, EJECTOR_OPT_SENSOR_ACTIVE, EJECTOR_OPT_SENSOR_INACTIVE ); - - return result; -} - -/*********************************************************************//** - * @brief - * The testEjectorEngageOpticalSensorOverride function overrides the engage - * optical sensor. - * @details \b Inputs: none - * @details \b Outputs: ejectorEngageOptSensor - * @param message Override message from Dialin which includes the engage - * optical sensor value. - * @return TRUE if override request is successful, FALSE if not - *************************************************************************/ -BOOL testEjectorEngageOpticalSensorOverride( MESSAGE_T *message ) -{ - BOOL result = u32Override( message, &ejectorEngageOptSensor, EJECTOR_OPT_SENSOR_ACTIVE, EJECTOR_OPT_SENSOR_INACTIVE ); - - return result; -} - /**@}*/ Index: firmware/App/Controllers/Ejector.h =================================================================== diff -u -r953f886774870b2a3523edcdac030d3e4a4d587d -rcf22584fb68bb29311d81d1e5ad79f8cf064b8fb --- firmware/App/Controllers/Ejector.h (.../Ejector.h) (revision 953f886774870b2a3523edcdac030d3e4a4d587d) +++ firmware/App/Controllers/Ejector.h (.../Ejector.h) (revision cf22584fb68bb29311d81d1e5ad79f8cf064b8fb) @@ -71,8 +71,6 @@ BOOL testEjectorDataPublishIntervalOverride( MESSAGE_T *message ); BOOL testEjectorCommand( MESSAGE_T *message ); -BOOL testEjectorRetractOpticalSensorOverride( MESSAGE_T *message ); -BOOL testEjectorEngageOpticalSensorOverride( MESSAGE_T *message ); /**@}*/ Index: firmware/App/Drivers/EjectorMotor.c =================================================================== diff -u -rae4a44c74291d5891ef2a7f45320158e73fecbbc -rcf22584fb68bb29311d81d1e5ad79f8cf064b8fb --- firmware/App/Drivers/EjectorMotor.c (.../EjectorMotor.c) (revision ae4a44c74291d5891ef2a7f45320158e73fecbbc) +++ firmware/App/Drivers/EjectorMotor.c (.../EjectorMotor.c) (revision cf22584fb68bb29311d81d1e5ad79f8cf064b8fb) @@ -49,6 +49,9 @@ #define EJECTOR_MOTOR_CONTROL_32TH_STEP 0x03 ///< Ejector motor control register bits for 1/32 micro-stepping mode. #define EJECTOR_MOTOR_CONTROL_FULL_STEP 0x00 ///< Ejector motor control register bits for full stepping mode. +#define EJECTOR_OPT_SENSOR_ACTIVE 0 ///< Ejector optical sensor active. +#define EJECTOR_OPT_SENSOR_INACTIVE 1 ///< Ejector optical sensor inactive. + /// Control bits to run ejector motor in reverse direction static const U08 EJECTOR_MOTOR_CONTROL_RUN_REVERSE = EJECTOR_MOTOR_CONTROL_SLEEP_OFF | EJECTOR_MOTOR_CONTROL_NOT_RESET | @@ -71,16 +74,17 @@ /// Payload record structure for ejector motor set request typedef struct { - F32 setSpeed; ///< Set speed for ejector motor (in RPM). Negative RPM indicates reverse direction. + F32 setSpeed; ///< Set speed for ejector motor (in RPM). Negative RPM indicates reverse direction. } EJECTOR_MOTOR_SET_CMD_PAYLOAD_T; // ********** private data ********** -static F32 currentEjectorMotorSetSpeed; ///< Current ejector motor set speed (in RPM). -static U32 ejectorMotorSetToggleTime; ///< Time (in uSec) between microstep toggles. -static U32 ejectorMotorRampUpToggleTime; ///< Current ramp time (in uSec) between microstep toggles. -static U32 ejectorMotorRampTimerCtr; ///< Used to track ramp up time. -static BOOL ejectorMotorRampUpInProgress; ///< Flag indicating whether a ramp up is in progress. +static F32 currentEjectorMotorSetSpeed; ///< Current ejector motor set speed (in RPM). +static U32 ejectorMotorSetToggleTime; ///< Time (in uSec) between microstep toggles. +static U32 ejectorMotorRampUpToggleTime; ///< Current ramp time (in uSec) between microstep toggles. +static U32 ejectorMotorRampTimerCtr; ///< Used to track ramp up time. +static BOOL ejectorMotorRampUpInProgress; ///< Flag indicating whether a ramp up is in progress. +static OVERRIDE_U32_T ejectorOpticalSensors[ NUM_OF_EJECTOR_OPT_SENSORS ]; ///< Ejector retract optical sensor. // ********** private function prototypes ********** @@ -95,12 +99,22 @@ *************************************************************************/ void initEjectorMotor(void) { + U32 optSensor; + currentEjectorMotorSetSpeed = 0.0F; ejectorMotorSetToggleTime = EJECTOR_MOTOR_MICROSTEP_TOGGLE_TIME_FOR_STOP; ejectorMotorRampUpToggleTime = EJECTOR_MOTOR_MICROSTEP_TOGGLE_TIME_FOR_STOP; ejectorMotorRampTimerCtr = 0; ejectorMotorRampUpInProgress = FALSE; + for ( optSensor = EJECTOR_OPT_SENSOR_RETRACT; optSensor < NUM_OF_EJECTOR_OPT_SENSORS; optSensor++ ) + { + ejectorOpticalSensors[ optSensor ].data = 0; + ejectorOpticalSensors[ optSensor ].ovData = 0; + ejectorOpticalSensors[ optSensor ].ovInitData = 0; + ejectorOpticalSensors[ optSensor ].override = OVERRIDE_RESET; + } + setH5StepToggleTime( ejectorMotorSetToggleTime ); setH5ControlFlags( EJECTOR_MOTOR_CONTROL_DISABLED ); } @@ -195,6 +209,11 @@ *************************************************************************/ void execEjectorMotorRamping( void ) { + // Update the optical sensor values + // TODO is debouncing needed?? + ejectorOpticalSensors[ EJECTOR_OPT_SENSOR_RETRACT ].data = getFPGAEjectorRetractOpticalSensor(); + ejectorOpticalSensors[ EJECTOR_OPT_SENSOR_ENGAGE ].data = getFPGAEjectorEngageOpticalSensor(); + if ( TRUE == ejectorMotorRampUpInProgress ) { ejectorMotorRampTimerCtr++; @@ -218,6 +237,39 @@ /*********************************************************************//** * @brief + * The isEjectorOpticalSensorActive function checks whether either of the + * ejector optical sensors are active or inactive. + * @details \b Alarm: ALARM_ID_TD_SOFTWARE_FAULT if the ejector optical sensor + * is not in range. + * @details Inputs: ejectorOpticalSensors + * @details Outputs: none + * @param rsensorID the optical sensor to check + * @return TRUE if the sensor is active otherwise, FALSE + *************************************************************************/ +BOOL isEjectorOpticalSensorActive( EJECTOR_OPT_SENSOR_T sensorID ) +{ + BOOL status = FALSE; + + switch ( sensorID ) + { + case EJECTOR_OPT_SENSOR_RETRACT: + status = ( EJECTOR_OPT_SENSOR_ACTIVE == getU32OverrideValue( &ejectorOpticalSensors[ EJECTOR_OPT_SENSOR_RETRACT ] ) ? TRUE : FALSE ); + break; + + case EJECTOR_OPT_SENSOR_ENGAGE: + status = ( EJECTOR_OPT_SENSOR_ACTIVE == getU32OverrideValue( &ejectorOpticalSensors[ EJECTOR_OPT_SENSOR_ENGAGE ] ) ? TRUE : FALSE ); + break; + + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_TD_EJECTOR_OPTICAL_SENSOR_INVALID_REQ, (U32)sensorID ) + break; + } + + return status; +} + +/*********************************************************************//** + * @brief * The calcEjectorStepToggleTimeFromSetSpeed function calculates the stepper * toggle period for a given set speed (in RPM). * @details Inputs: none @@ -283,5 +335,21 @@ return result; } +/*********************************************************************//** + * @brief + * The testEjectorOpticalSensorOverride function overrides the optical sensors. + * @details \b Inputs: none + * @details \b Outputs: ejectorOpticalSensors + * @param message Override message from Dialin which includes the sensor to + * override its value. + * @return TRUE if override request is successful, FALSE if not + *************************************************************************/ +BOOL testEjectorOpticalSensorOverride( MESSAGE_T *message ) +{ + BOOL result = u32ArrayOverride( message, &ejectorOpticalSensors[ EJECTOR_OPT_SENSOR_RETRACT ], NUM_OF_EJECTOR_OPT_SENSORS - 1, EJECTOR_OPT_SENSOR_ACTIVE, EJECTOR_OPT_SENSOR_INACTIVE ); + + return result; +} + /**@}*/ Index: firmware/App/Drivers/EjectorMotor.h =================================================================== diff -u -r0e4a62ba24d906d9e5b33b293f93405b8c0391ce -rcf22584fb68bb29311d81d1e5ad79f8cf064b8fb --- firmware/App/Drivers/EjectorMotor.h (.../EjectorMotor.h) (revision 0e4a62ba24d906d9e5b33b293f93405b8c0391ce) +++ firmware/App/Drivers/EjectorMotor.h (.../EjectorMotor.h) (revision cf22584fb68bb29311d81d1e5ad79f8cf064b8fb) @@ -33,15 +33,25 @@ // ********** public definitions ********** +/// Enumeration of the ejector optical sensor +typedef enum +{ + EJECTOR_OPT_SENSOR_RETRACT = 0, + EJECTOR_OPT_SENSOR_ENGAGE, + NUM_OF_EJECTOR_OPT_SENSORS +} EJECTOR_OPT_SENSOR_T; + // ********** public function prototypes ********** void initEjectorMotor( void ); void disableEjectorMotor( void ); BOOL setEjectorMotorSpeed( F32 rpm ); F32 getEjectorMotorSetSpeed( void ); void execEjectorMotorRamping( void ); +BOOL isEjectorOpticalSensorActive( EJECTOR_OPT_SENSOR_T sensorID ); BOOL testSetEjectorMotorSpeed( MESSAGE_T *message ); +BOOL testEjectorOpticalSensorOverride( MESSAGE_T *message ); /**@}*/ Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -r9d11c51da60da3f8d2917433938a583f8a105318 -rcf22584fb68bb29311d81d1e5ad79f8cf064b8fb --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 9d11c51da60da3f8d2917433938a583f8a105318) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision cf22584fb68bb29311d81d1e5ad79f8cf064b8fb) @@ -176,6 +176,7 @@ SW_FAULT_ID_VALVES_INVALID_VALVE_ENCODER_REQ = 145, SW_FAULT_ID_TD_VALVES_INVALID_IDLE = 146, SW_FAULT_ID_TD_VALVES_INVALID_IN_TRANSITION = 147, + SW_FAULT_ID_TD_EJECTOR_OPTICAL_SENSOR_INVALID_REQ = 148, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T; Index: firmware/App/Services/FpgaTD.c =================================================================== diff -u -r953f886774870b2a3523edcdac030d3e4a4d587d -rcf22584fb68bb29311d81d1e5ad79f8cf064b8fb --- firmware/App/Services/FpgaTD.c (.../FpgaTD.c) (revision 953f886774870b2a3523edcdac030d3e4a4d587d) +++ firmware/App/Services/FpgaTD.c (.../FpgaTD.c) (revision cf22584fb68bb29311d81d1e5ad79f8cf064b8fb) @@ -1190,9 +1190,9 @@ * @details \b Outputs: none * @return 1 if retract is inactive, 0 if retract is active. *************************************************************************/ -U08 getFPGAEjectorRetractOpticalSensor( void ) +U32 getFPGAEjectorRetractOpticalSensor( void ) { - U08 ejectorOpticalRetract = fpgaSensorReadings.GPIOReg & EJECTOR_OPTICAL_SNSR_RET_MASK; + U32 ejectorOpticalRetract = (U32)fpgaSensorReadings.GPIOReg & EJECTOR_OPTICAL_SNSR_RET_MASK; return ejectorOpticalRetract; } @@ -1204,9 +1204,9 @@ * @details \b Outputs: none * @return 1 if engage is inactive, 0 if engage is active. *************************************************************************/ -U08 getFPGAEjectorEngageOpticalSensor( void ) +U32 getFPGAEjectorEngageOpticalSensor( void ) { - U08 ejectorOpticalEngage = fpgaSensorReadings.GPIOReg & EJECTOR_OPTICAL_SNSR_ENG_MASK; + U32 ejectorOpticalEngage = (U32)fpgaSensorReadings.GPIOReg & EJECTOR_OPTICAL_SNSR_ENG_MASK; return ejectorOpticalEngage; } Index: firmware/App/Services/FpgaTD.h =================================================================== diff -u -r953f886774870b2a3523edcdac030d3e4a4d587d -rcf22584fb68bb29311d81d1e5ad79f8cf064b8fb --- firmware/App/Services/FpgaTD.h (.../FpgaTD.h) (revision 953f886774870b2a3523edcdac030d3e4a4d587d) +++ firmware/App/Services/FpgaTD.h (.../FpgaTD.h) (revision cf22584fb68bb29311d81d1e5ad79f8cf064b8fb) @@ -144,8 +144,8 @@ U16 getFPGAInletFan1TogglePeriod( void ); BOOL getH9FrontDoorClosedStatus( void ); -U08 getFPGAEjectorRetractOpticalSensor( void ); -U08 getFPGAEjectorEngageOpticalSensor( void ); +U32 getFPGAEjectorRetractOpticalSensor( void ); +U32 getFPGAEjectorEngageOpticalSensor( void ); /**@}*/ Index: firmware/App/Services/Messaging.c =================================================================== diff -u -r953f886774870b2a3523edcdac030d3e4a4d587d -rcf22584fb68bb29311d81d1e5ad79f8cf064b8fb --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision 953f886774870b2a3523edcdac030d3e4a4d587d) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision cf22584fb68bb29311d81d1e5ad79f8cf064b8fb) @@ -176,8 +176,7 @@ { MSG_ID_TD_BARO_PRESSURE_OVERRIDE, &testBaroPressureOverride }, { MSG_ID_TD_TEMPERATURE_OVERRIDE, &testTemperatureOverride }, { MSG_ID_TD_TEMPERATURE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testTemperatureDataPublishIntervalOverride }, - { MSG_ID_TD_EJECTOR_RETRACT_OPT_SENSOR_OVERRIDE_REQUEST, &testEjectorRetractOpticalSensorOverride }, - { MSG_ID_TD_EJECTOR_ENGAGE_OPT_SENSOR_OVERRIDE_REQUEST, &testEjectorEngageOpticalSensorOverride }, + { MSG_ID_TD_EJECTOR_OPT_SENSOR_OVERRIDE_REQUEST, &testEjectorOpticalSensorOverride }, }; #define NUM_OF_FUNCTION_HANDLERS (sizeof(MSG_FUNCTION_HANDLER_LOOKUP) / sizeof(MSG_HANDLER_LOOKUP_T))