Index: firmware/App/Controllers/DrainPump.c =================================================================== diff -u -r0c296cef29037819be204c45a23d4d38a52b2718 -r984bfc66d6fe07456671a1039472356871f0161c --- firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 0c296cef29037819be204c45a23d4d38a52b2718) +++ firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 984bfc66d6fe07456671a1039472356871f0161c) @@ -79,6 +79,9 @@ #define DRAIN_PUMP_CURRENT_OUT_OF_RANGE_TIMEOUT_MS ( 2 * MS_PER_SECOND ) ///< Drain pump current out of range timeout in milliseconds. #define DRAIN_PUMP_DIR_OF_RANGE_TIMEOUT_MS ( 2 * MS_PER_SECOND ) ///< Drain pump direction out of range timeout in milliseconds. #define DRAIN_PUMP_FORWARD_DIR 0 ///< Drain pump forward direction. +#define DRAIN_PUMP_DIR_BIT_MASK 0x80 ///< Drain pump direction bit clear mask. +#define DRAIN_PUMP_DIR_ERROR_CNT_BIT_MASK 0x3F ///< Drain pump direction error count bit mask. +#define DRAIN_PUMP_DIR_FPGA_ERROR_TIMEOUT_MS ( 2 * MS_PER_SECOND ) ///< Drain pump direction hall sensor FPGA error time out in milliseconds. /// Enumeration of drain pump states. typedef enum DrainPump_States @@ -177,6 +180,9 @@ initPersistentAlarm( ALARM_ID_DRAIN_PUMP_OFF_FAULT, SAFETY_SHUTDOWN_TIMEOUT, SAFETY_SHUTDOWN_TIMEOUT ); initPersistentAlarm( ALARM_ID_DG_DRAIN_PUMP_CURRENT_OUT_OF_RANGE, DRAIN_PUMP_CURRENT_OUT_OF_RANGE_TIMEOUT_MS, DRAIN_PUMP_CURRENT_OUT_OF_RANGE_TIMEOUT_MS ); initPersistentAlarm( ALARM_ID_DG_DRAIN_PUMP_DIRECTION_INVALID, DRAIN_PUMP_DIR_OF_RANGE_TIMEOUT_MS, DRAIN_PUMP_DIR_OF_RANGE_TIMEOUT_MS ); + + initFPGAPersistentAlarm( FPGA_PERS_ERROR_DRAIN_PUMP_DIR_HALL_SENSOR, ALARM_ID_DG_DRAIN_PUMP_DIRECTION_FPGA_FAULT, + DRAIN_PUMP_DIR_FPGA_ERROR_TIMEOUT_MS, DRAIN_PUMP_DIR_FPGA_ERROR_TIMEOUT_MS ); } /*********************************************************************//** @@ -349,14 +355,22 @@ U16 fpgaADCSpeedCount = getFPGADrainPumpSpeed(); U16 fpgaADCCurrentCount = getFPGADrainPumpCurrentFeedback(); F32 currentA = getDrainPumpMeasuredCurrentA(); + U32 dirHallSensorErrorCount = (U32)( getFPGADrainPumpDirection() & DRAIN_PUMP_DIR_ERROR_CNT_BIT_MASK ); drainPumpMeasuredRPM.data = ( DRAIN_PUMP_OFF_RPM_ADC_COUNT == fpgaADCSpeedCount ? 0 : (U32)( RPM_CONVERSION_COEFF / (F32)fpgaADCSpeedCount ) ); drainPumpMeasuredCurrentA.data = (F32)fpgaADCCurrentCount * CURRENT_CONVERSION_COEFF; - drainPumpMeasuredDir.data = ( (U32)getFPGADrainPumpDirection() & 0x40 ) >> 7; + drainPumpMeasuredDir.data = ( (U32)getFPGADrainPumpDirection() & DRAIN_PUMP_DIR_BIT_MASK ) >> SHIFT_BITS_BY_7; #ifndef _RELEASE_ if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_DRAIN_PUMP_MONITOR ) != SW_CONFIG_ENABLE_VALUE ) #endif { +#ifndef _RELEASE_ + if ( ( getSoftwareConfigStatus( SW_CONFIG_ENABLE_V3_SYSTEM ) != SW_CONFIG_ENABLE_VALUE ) && ( getCurrentOperationMode() != DG_MODE_INIT ) ) +#endif + { + checkFPGAPersistentErrorCountAlarm( FPGA_PERS_ERROR_DRAIN_PUMP_DIR_HALL_SENSOR, dirHallSensorErrorCount ); + } + switch( drainPumpState ) { case DRAIN_PUMP_OFF_STATE: