Index: firmware/App/Controllers/Ejector.c =================================================================== diff -u -r9a8e1fc597eb4f681527e691fb6cb24e550d8b92 -r1c6d80a873aa1bd11e28a8955ff38866fc5717f4 --- firmware/App/Controllers/Ejector.c (.../Ejector.c) (revision 9a8e1fc597eb4f681527e691fb6cb24e550d8b92) +++ firmware/App/Controllers/Ejector.c (.../Ejector.c) (revision 1c6d80a873aa1bd11e28a8955ff38866fc5717f4) @@ -30,7 +30,7 @@ // ********** private definitions ********** -#define EJECTOR_RETRACT_OP_TIME ( ( MS_PER_SECOND * 5 ) / TASK_GENERAL_INTERVAL ) ///< Ejector retract operation interval. +#define EJECTOR_RETRACT_OP_TIME ( ( MS_PER_SECOND * 10 ) / TASK_GENERAL_INTERVAL ) ///< Ejector retract operation interval. #define EJECTOR_EXTEND_OP_TIME ( ( MS_PER_SECOND * 10 ) / TASK_GENERAL_INTERVAL ) ///< Ejector extend operation interval. #define EJECTOR_BACKOFF_OP_TIME ( 50 / TASK_GENERAL_INTERVAL ) ///< Ejector back-off operation interval. #define EJECTOR_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Ejector data publish interval. @@ -43,10 +43,10 @@ /// 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 ********** @@ -336,7 +336,7 @@ { EJECTOR_STATE_T state = EJECTOR_STATE_HOMING; - if ( ++ejectorOperationTimerCounter >= EJECTOR_RETRACT_OP_TIME ) + if ( ( ++ejectorOperationTimerCounter >= EJECTOR_RETRACT_OP_TIME ) || ( TRUE == isEjectorOpticalSensorActive( EJECTOR_OPT_SENSOR_RETRACT ) ) ) { ejectorOperationTimerCounter = 0; setEjectorSpeed( EJECTOR_OFF_MOTOR_SPEED_RPM ); @@ -410,7 +410,8 @@ { EJECTOR_STATE_T state = EJECTOR_STATE_RETRACTING; - if ( ++ejectorOperationTimerCounter >= EJECTOR_RETRACT_OP_TIME ) + // If the optical sensor is active it means the ejector has reached to the full retract position + if ( ( ++ejectorOperationTimerCounter >= EJECTOR_RETRACT_OP_TIME ) || ( TRUE == isEjectorOpticalSensorActive( EJECTOR_OPT_SENSOR_RETRACT ) ) ) { ejectorOperationTimerCounter = 0; setEjectorSpeed( EJECTOR_OFF_MOTOR_SPEED_RPM ); @@ -476,7 +477,8 @@ { EJECTOR_STATE_T state = EJECTOR_STATE_EXTENDING; - if ( ++ejectorOperationTimerCounter >= EJECTOR_EXTEND_OP_TIME ) + // If the optical sensor is active it means the ejector has reached to the full extended (engage) position + if ( ( ++ejectorOperationTimerCounter >= EJECTOR_EXTEND_OP_TIME ) || ( TRUE == isEjectorOpticalSensorActive( EJECTOR_OPT_SENSOR_ENGAGE ) ) ) { ejectorOperationTimerCounter = 0; setEjectorSpeed( EJECTOR_OFF_MOTOR_SPEED_RPM ); @@ -524,8 +526,10 @@ { EJECTOR_PAYLOAD_T data; - data.h5State = getEjectorState(); - data.h5SetSpeed = currentEjectorSetSpeed; + data.h5State = getEjectorState(); + data.h5SetSpeed = currentEjectorSetSpeed; + 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;