Index: firmware/App/Controllers/Ejector.c =================================================================== diff -u -r6283801f1d66951025e6743858121d164e227c2a -r953f886774870b2a3523edcdac030d3e4a4d587d --- firmware/App/Controllers/Ejector.c (.../Ejector.c) (revision 6283801f1d66951025e6743858121d164e227c2a) +++ firmware/App/Controllers/Ejector.c (.../Ejector.c) (revision 953f886774870b2a3523edcdac030d3e4a4d587d) @@ -41,13 +41,16 @@ #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 { - EJECTOR_OPERATION_HOME = 0, ///< Ejector home operation - EJECTOR_OPERATION_RETRACT, ///< Ejector retract operation - EJECTOR_OPERATION_EXTEND, ///< Ejector extend operation - NUM_OF_EJECTOR_OPERATIONS, ///< Number of ejector operations + EJECTOR_OPERATION_HOME = 0, ///< Ejector home operation + EJECTOR_OPERATION_RETRACT, ///< Ejector retract operation + EJECTOR_OPERATION_EXTEND, ///< Ejector extend operation + NUM_OF_EJECTOR_OPERATIONS, ///< Number of ejector operations } EJECTOR_OPERATION_T; // ********** private data ********** @@ -62,6 +65,8 @@ 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 ********** @@ -100,6 +105,16 @@ 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; } /*********************************************************************//** @@ -250,6 +265,10 @@ currentEjectorState = EJECTOR_STATE_ABORT; } + // Update the optical sensor values + ejectorRetractOptSensor.data = (U32)getFPGAEjectorRetractOpticalSensor(); + ejectorEngageOptSensor.data = (U32)getFPGAEjectorEngageOpticalSensor(); + switch( currentEjectorState ) { case EJECTOR_STATE_INIT: @@ -411,7 +430,7 @@ { EJECTOR_STATE_T state = EJECTOR_STATE_RETRACTING; - if ( ( ++ejectorOperationTimerCounter >= EJECTOR_RETRACT_OP_TIME ) || ( FALSE == getFPGAEjectorRetractOpticalSensor() ) ) + if ( ( ++ejectorOperationTimerCounter >= EJECTOR_RETRACT_OP_TIME ) || ( EJECTOR_OPT_SENSOR_ACTIVE == getU32OverrideValue( &ejectorRetractOptSensor ) ) ) { ejectorOperationTimerCounter = 0; setEjectorSpeed( EJECTOR_OFF_MOTOR_SPEED_RPM ); @@ -477,7 +496,7 @@ { EJECTOR_STATE_T state = EJECTOR_STATE_EXTENDING; - if ( ( ++ejectorOperationTimerCounter >= EJECTOR_EXTEND_OP_TIME ) || ( FALSE == getFPGAEjectorEngageOpticalSensor() ) ) + if ( ( ++ejectorOperationTimerCounter >= EJECTOR_EXTEND_OP_TIME ) || ( EJECTOR_OPT_SENSOR_ACTIVE == getU32OverrideValue( &ejectorEngageOptSensor ) ) ) { ejectorOperationTimerCounter = 0; setEjectorSpeed( EJECTOR_OFF_MOTOR_SPEED_RPM ); @@ -525,8 +544,10 @@ { EJECTOR_PAYLOAD_T data; - data.h5State = getEjectorState(); - data.h5SetSpeed = currentEjectorSetSpeed; + data.h5State = getEjectorState(); + data.h5SetSpeed = currentEjectorSetSpeed; + data.retractOpticalSensor = getU32OverrideValue( &ejectorRetractOptSensor ); + data.engageOpticalSensor = getU32OverrideValue( &ejectorEngageOptSensor ); broadcastData( MSG_ID_TD_EJECTOR_DATA, COMM_BUFFER_OUT_CAN_TD_BROADCAST, (U08*)&data, sizeof( EJECTOR_PAYLOAD_T ) ); ejectorDataPublicationTimerCounter = 0; @@ -606,5 +627,39 @@ 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 -rb0ae8e670f18913bf88da41394ac28b111d184ea -r953f886774870b2a3523edcdac030d3e4a4d587d --- firmware/App/Controllers/Ejector.h (.../Ejector.h) (revision b0ae8e670f18913bf88da41394ac28b111d184ea) +++ firmware/App/Controllers/Ejector.h (.../Ejector.h) (revision 953f886774870b2a3523edcdac030d3e4a4d587d) @@ -39,6 +39,8 @@ { U32 h5State; ///< Ejector state F32 h5SetSpeed; ///< Ejector motor set speed + U32 retractOpticalSensor; ///< Ejector retract optical sensor + U32 engageOpticalSensor; ///< Ejector engage optical sensor } EJECTOR_PAYLOAD_T; #pragma pack(pop) @@ -69,6 +71,8 @@ BOOL testEjectorDataPublishIntervalOverride( MESSAGE_T *message ); BOOL testEjectorCommand( MESSAGE_T *message ); +BOOL testEjectorRetractOpticalSensorOverride( MESSAGE_T *message ); +BOOL testEjectorEngageOpticalSensorOverride( MESSAGE_T *message ); /**@}*/ Index: firmware/App/Services/FpgaTD.c =================================================================== diff -u -r6283801f1d66951025e6743858121d164e227c2a -r953f886774870b2a3523edcdac030d3e4a4d587d --- firmware/App/Services/FpgaTD.c (.../FpgaTD.c) (revision 6283801f1d66951025e6743858121d164e227c2a) +++ firmware/App/Services/FpgaTD.c (.../FpgaTD.c) (revision 953f886774870b2a3523edcdac030d3e4a4d587d) @@ -1188,29 +1188,27 @@ * optical sensor retract status bit 4. * @details \b Inputs: fpgaSensorReadings * @details \b Outputs: none - * @return TRUE if retract is inactive, FALSE if not. + * @return 1 if retract is inactive, 0 if retract is active. *************************************************************************/ -BOOL getFPGAEjectorRetractOpticalSensor( void ) +U08 getFPGAEjectorRetractOpticalSensor( void ) { - U16 ejectorOpticalRetract = fpgaSensorReadings.GPIOReg & EJECTOR_OPTICAL_SNSR_RET_MASK; - BOOL status = ( ejectorOpticalRetract != 0 ? FALSE : TRUE ); + U08 ejectorOpticalRetract = fpgaSensorReadings.GPIOReg & EJECTOR_OPTICAL_SNSR_RET_MASK; - return status; + return ejectorOpticalRetract; } /*********************************************************************//** * The getFPGAEjectorEngageOpticalSensor function returns the FPGA ejector * optical sensor engage status bit 5. * @details \b Inputs: fpgaSensorReadings * @details \b Outputs: none - * @return TRUE if engage is inactive, FALSE if not. + * @return 1 if engage is inactive, 0 if engage is active. *************************************************************************/ -BOOL getFPGAEjectorEngageOpticalSensor( void ) +U08 getFPGAEjectorEngageOpticalSensor( void ) { - U16 ejectorOpticalEngage = fpgaSensorReadings.GPIOReg & EJECTOR_OPTICAL_SNSR_ENG_MASK; - BOOL status = ( ejectorOpticalEngage != 0 ? FALSE : TRUE ); + U08 ejectorOpticalEngage = fpgaSensorReadings.GPIOReg & EJECTOR_OPTICAL_SNSR_ENG_MASK; - return status; + return ejectorOpticalEngage; } /*********************************************************************//** Index: firmware/App/Services/FpgaTD.h =================================================================== diff -u -r6283801f1d66951025e6743858121d164e227c2a -r953f886774870b2a3523edcdac030d3e4a4d587d --- firmware/App/Services/FpgaTD.h (.../FpgaTD.h) (revision 6283801f1d66951025e6743858121d164e227c2a) +++ firmware/App/Services/FpgaTD.h (.../FpgaTD.h) (revision 953f886774870b2a3523edcdac030d3e4a4d587d) @@ -144,8 +144,8 @@ U16 getFPGAInletFan1TogglePeriod( void ); BOOL getH9FrontDoorClosedStatus( void ); -BOOL getFPGAEjectorRetractOpticalSensor( void ); -BOOL getFPGAEjectorEngageOpticalSensor( void ); +U08 getFPGAEjectorRetractOpticalSensor( void ); +U08 getFPGAEjectorEngageOpticalSensor( void ); /**@}*/ Index: firmware/App/Services/Messaging.c =================================================================== diff -u -r9d11c51da60da3f8d2917433938a583f8a105318 -r953f886774870b2a3523edcdac030d3e4a4d587d --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision 9d11c51da60da3f8d2917433938a583f8a105318) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision 953f886774870b2a3523edcdac030d3e4a4d587d) @@ -176,6 +176,8 @@ { 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 }, }; #define NUM_OF_FUNCTION_HANDLERS (sizeof(MSG_FUNCTION_HANDLER_LOOKUP) / sizeof(MSG_HANDLER_LOOKUP_T))