Index: firmware/App/Controllers/DrainPump.c =================================================================== diff -u -r2b9d10664884e9b20d391cc3178d3c85347cdf2c -rcff72ec53660ec3ff6775c0508e3c721240ffba2 --- firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 2b9d10664884e9b20d391cc3178d3c85347cdf2c) +++ firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision cff72ec53660ec3ff6775c0508e3c721240ffba2) @@ -493,7 +493,7 @@ drainPumpControlModeSet = drainPumpControlMode; signalNewRPMRequest = TRUE; } - pendingDrainPumpCmdTarget = 0.0; + pendingDrainPumpCmdTarget = 0.0F; pendingDrainPumpCmd = DRAIN_PUMP_OFF_STATE; } } Index: firmware/App/Controllers/Pressures.c =================================================================== diff -u -r61fc45d7a43557312d6abd00a6b01e6823b44f04 -rcff72ec53660ec3ff6775c0508e3c721240ffba2 --- firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision 61fc45d7a43557312d6abd00a6b01e6823b44f04) +++ firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision cff72ec53660ec3ff6775c0508e3c721240ffba2) @@ -119,6 +119,7 @@ static F32 calculateBaroPressure( U32 adcSum ); static F32 getCalibrationAppliedPressure( U08 sensorId, F32 pressure ); static F32 getBaroPressurePSI( void ); +static void monitorPressureSensors( void ); /*********************************************************************//** * @brief @@ -306,8 +307,6 @@ U32 zeroPressureOffset = PUMP_PRESSURE_ZERO; F32 count2PressureConv = PUMP_PRESSURE_PSIA_PER_COUNT; U08 sensorId; - F32 pressureReading; - BOOL isPressureOutOfRange; #ifndef _RELEASE_ if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_ENABLE_V3_SYSTEM ) ) @@ -376,35 +375,7 @@ } } - for ( sensorId = 0; sensorId < NUM_OF_PRESSURE_SENSORS; sensorId++ ) - { - switch ( sensorId ) - { - case PRESSURE_SENSOR_RO_PUMP_INLET: - case PRESSURE_SENSOR_RO_PUMP_OUTLET: - case PRESSURE_SENSOR_DRAIN_PUMP_INLET: - case PRESSURE_SENSOR_DRAIN_PUMP_OUTLET: - pressureReading = getMeasuredDGPressure( sensorId ) + getBaroPressurePSI(); - isPressureOutOfRange = ( ( pressureReading < MIN_VALID_PRESSURE_RANGE_PSIA ) || ( pressureReading > MAX_VALID_PRESSURE_RANGE_PSIA ) ? TRUE : FALSE ); - checkPersistentAlarm( ALARM_ID_DG_PRESSURE_OUT_OF_RANGE, isPressureOutOfRange, (F32)sensorId, pressureReading ); - break; - - case PRESSURE_SENSOR_BAROMETRIC: - if ( baroConvConsts.pressureSensitivity != 0 ) - { - pressureReading = getBaroPressurePSI(); - isPressureOutOfRange = ( ( pressureReading < MIN_VALID_BARO_PRESSURE_PSIA ) || ( pressureReading > MAX_VALID_BARO_PRESSURE_PSIA ) ? TRUE : FALSE ); - checkPersistentAlarm( ALARM_ID_DG_BARO_PRESSURE_OUT_OF_RANGE, isPressureOutOfRange, (F32)sensorId, pressureReading ); - } - break; - -#ifndef _VECTORCAST_ - default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_PRESSURE_SENSOR_SELECTED, sensorId ); - break; -#endif - } - } + monitorPressureSensors(); return result; } @@ -533,6 +504,65 @@ return baroPressure; } + +/*********************************************************************//** + * @brief + * The monitorPressureSensors function monitors the pressure sensors to be + * in range. + * @details Inputs: none + * @details Outputs: none + * @return none + *************************************************************************/ +static void monitorPressureSensors( void ) +{ + U08 sensorId; + BOOL isPressureOutOfRange = FALSE; + BOOL isCurrentPressureOut = FALSE; + BOOL isBaroOutOfRange = FALSE; + F32 pressureOutID = 0.0F; + F32 pressureReading = 0.0F; + + for ( sensorId = 0; sensorId < NUM_OF_PRESSURE_SENSORS; sensorId++ ) + { + switch ( sensorId ) + { + case PRESSURE_SENSOR_RO_PUMP_INLET: + case PRESSURE_SENSOR_RO_PUMP_OUTLET: + case PRESSURE_SENSOR_DRAIN_PUMP_INLET: + case PRESSURE_SENSOR_DRAIN_PUMP_OUTLET: + // Get the pressure and convert it back to absolute by adding back the baro pressure value + // Check if the pressure is out of the upper or lower range + // Bitwise OR the current pressure sensor with the total pressure sensor to persistent alarm check + // Remember the ID of the pressure sensor that is out of range. The ID is converted to float since the check persistent alarm function + // accepts only floats. + pressureReading = getMeasuredDGPressure( sensorId ) + getBaroPressurePSI(); + isCurrentPressureOut = ( ( pressureReading < MIN_VALID_PRESSURE_RANGE_PSIA ) || ( pressureReading > MAX_VALID_PRESSURE_RANGE_PSIA ) ? TRUE : FALSE ); + isPressureOutOfRange |= isCurrentPressureOut; + pressureOutID = ( TRUE == isCurrentPressureOut ? (F32)sensorId : pressureOutID ); + break; + + case PRESSURE_SENSOR_BAROMETRIC: + if ( baroConvConsts.pressureSensitivity != 0 ) + { + // Check the baro and alarm if out of range. Make sure the conversion coefficients of the sensor has been read and received from FPGA + pressureReading = getBaroPressurePSI(); + isBaroOutOfRange = ( ( pressureReading < MIN_VALID_BARO_PRESSURE_PSIA ) || ( pressureReading > MAX_VALID_BARO_PRESSURE_PSIA ) ? TRUE : FALSE ); + checkPersistentAlarm( ALARM_ID_DG_BARO_PRESSURE_OUT_OF_RANGE, isBaroOutOfRange, (F32)sensorId, pressureReading ); + } + break; + +#ifndef _VECTORCAST_ + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_PRESSURE_SENSOR_SELECTED, sensorId ); + break; +#endif + } + } + + // TODO remove + // Once the sensors were all checked to be out of range, check the persistent alarm + //checkPersistentAlarm( ALARM_ID_DG_PRESSURE_OUT_OF_RANGE, isPressureOutOfRange, pressureOutID, pressureReading ); +} /************************************************************************* Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -r19934ca6e36e2dcabd6a6083a9a1f15b1ed32189 -rcff72ec53660ec3ff6775c0508e3c721240ffba2 --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 19934ca6e36e2dcabd6a6083a9a1f15b1ed32189) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision cff72ec53660ec3ff6775c0508e3c721240ffba2) @@ -1032,7 +1032,8 @@ U32 externalTempSesnorsRefResitance = TRIMMER_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE; #ifndef _RELEASE_ - if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_ENABLE_V3_SYSTEM ) ) + //if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_ENABLE_V3_SYSTEM ) ) + if ( HW_CONFIG_BETA == getHardwareConfigStatus() ) #endif { if ( getCurrentOperationMode() != DG_MODE_INIT ) Index: firmware/App/Controllers/Valves.c =================================================================== diff -u -r2b9d10664884e9b20d391cc3178d3c85347cdf2c -rcff72ec53660ec3ff6775c0508e3c721240ffba2 --- firmware/App/Controllers/Valves.c (.../Valves.c) (revision 2b9d10664884e9b20d391cc3178d3c85347cdf2c) +++ firmware/App/Controllers/Valves.c (.../Valves.c) (revision cff72ec53660ec3ff6775c0508e3c721240ffba2) @@ -46,16 +46,16 @@ static U32 pendingValveStateChangeCountDowns[ NUM_OF_VALVES ]; ///< Delayed (pending) valve state change count down timers (in task intervals). static OVERRIDE_U32_T valveStates[ NUM_OF_VALVES ]; ///< Currently commanded valves states. -static OVERRIDE_U32_T valveSensedStates[ NUM_OF_VALVES ]; ///< Valve sensed state override. +static OVERRIDE_U32_T valveSensedStates[ NUM_OF_VALVES ]; ///< Valve sensed states override. static OVERRIDE_U32_T valvesStatesPublishInterval = { VALVES_STATE_PUB_INTERVAL, VALVES_STATE_PUB_INTERVAL, 0, 0 }; ///< Interval (in ms/task interval) at which to publish valves state to CAN bus. // ********** private function prototypes ********** static BOOL checkValveStateName( VALVES_T valve, VALVE_STATE_NAMES_T valveStateName ); -static U32 convertValveStateNameToValveState(VALVE_STATE_NAMES_T valveStateName); +static U32 convertValveStateNameToValveState( VALVE_STATE_NAMES_T valveStateName ); static U16 fromU32ArrayToU16( void ); static void publishValvesStates( void ); -static U32 getValveState( U32 valveID ); +static U32 getValveState( U32 valveID ); /*********************************************************************//** * @brief @@ -82,7 +82,7 @@ valveSensedStates[ i ].data = DEENERGIZED; valveSensedStates[ i ].ovInitData = DEENERGIZED; valveSensedStates[ i ].ovData = DEENERGIZED; - valveSensedStates[ i ].override = OVERRIDE_RESET; + valveSensedStates[ i ].override = OVERRIDE_RESET; } valveStateMismatchCounter = 0; @@ -134,8 +134,8 @@ // Set valves states (via FPGA) to currently commanded states commandedValvesStates = fromU32ArrayToU16(); - setFPGAValveStates( commandedValvesStates ); - + setFPGAValveStates( commandedValvesStates ); + // Publish valve states on interval publishValvesStates(); } @@ -454,15 +454,6 @@ case VRF: name = ( DEENERGIZED == valveState ? VALVE_STATE_R2_C_TO_NO : VALVE_STATE_R1_C_TO_NC ); break; - } - - if ( OVERRIDE_KEY == valveSensedStates[ valveID ].override ) - { - valveSensedStates[ valveID ].ovData = (U32)name; - } - else - { - valveSensedStates[ valveID ].data = (U32)name; } } else @@ -492,7 +483,7 @@ for ( i = 0; i < NUM_OF_VALVES; i++ ) { - data.valvesSensedState[ i ] = getU32OverrideValue( &valveSensedStates[ i ] ); + data.valvesSensedState[ i ] = (U08)getValveStateName( (VALVES_T)i ); } broadcastData( MSG_ID_DG_VALVES_STATES, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( DG_VALVES_DATA_T ) ); @@ -523,7 +514,7 @@ } return valveState; -} +} /************************************************************************* Index: firmware/App/Services/FPGA.c =================================================================== diff -u -r61fc45d7a43557312d6abd00a6b01e6823b44f04 -rcff72ec53660ec3ff6775c0508e3c721240ffba2 --- firmware/App/Services/FPGA.c (.../FPGA.c) (revision 61fc45d7a43557312d6abd00a6b01e6823b44f04) +++ firmware/App/Services/FPGA.c (.../FPGA.c) (revision cff72ec53660ec3ff6775c0508e3c721240ffba2) @@ -179,7 +179,7 @@ U08 fpgaCPiReadCnt; ///< Reg 372. CPi conductivity sensor read count U08 fpgaCPiErrorCnt; ///< Reg 373. CPi conductivity sensor error count U08 fpgaCP1CP2Fault; ///< Reg 374. Concentrate pump fault register for CP1 and CP2 - U08 fpgaReserved1; ///< Reg 375. Reserved + U08 fpgaHWConfigReg; ///< Reg 375. Hardware configuration register (i.e. BETA or DVT) U16 fpgaValveStates; ///< Reg 376. Valves states U16 fpgaFanIn1Pulse; ///< Reg 378. Fan inlet 1 pulse time in 2.5 us resolution @@ -2151,6 +2151,19 @@ /*********************************************************************//** * @brief + * The getFPGAHWConfiguration function gets the FPGA hardware configuration + * such as BETA or DVT. + * @details Inputs: fpgaSensorReadings + * @details Outputs: none + * @return hardware configuration + *************************************************************************/ +U08 getFPGAHWConfiguration( void ) +{ + return fpgaSensorReadings.fpgaHWConfigReg; +} + +/*********************************************************************//** + * @brief * The getFPGABaroReadCount function gets the FPGA barometric sensor read count. * @details Inputs: fpgaSensorReadings * @details Outputs: none Index: firmware/App/Services/FPGA.h =================================================================== diff -u -r61fc45d7a43557312d6abd00a6b01e6823b44f04 -rcff72ec53660ec3ff6775c0508e3c721240ffba2 --- firmware/App/Services/FPGA.h (.../FPGA.h) (revision 61fc45d7a43557312d6abd00a6b01e6823b44f04) +++ firmware/App/Services/FPGA.h (.../FPGA.h) (revision cff72ec53660ec3ff6775c0508e3c721240ffba2) @@ -143,6 +143,8 @@ U16 getFPGAInternalVccAuxiliaryVoltage( void ); U16 getFPGAVPVNVoltage( void ); +U08 getFPGAHWConfiguration( void ); + //***************** DVT Functions ***************************/ void setFPGAAcidPumpControl( U08 control ); void setFPGABicarbPumpControl( U08 control );