Index: firmware/App/Monitors/Pressure.c =================================================================== diff -u -rd8cd7de2f84b26aafc153e2bb665a5058a040bf0 -ra3988128df0950e1f03dcb4a5aa53336d8fb3a6f --- firmware/App/Monitors/Pressure.c (.../Pressure.c) (revision d8cd7de2f84b26aafc153e2bb665a5058a040bf0) +++ firmware/App/Monitors/Pressure.c (.../Pressure.c) (revision a3988128df0950e1f03dcb4a5aa53336d8fb3a6f) @@ -89,13 +89,14 @@ // ********** private function prototypes ********** -//static void filterPressureSensorReadings( void ); -//static void filterPressureSensorTemperatureReadings( void ); +static void filterPressureSensors( void ); +static void filterPressureSensorReadings( void ); +static void filterPressureSensorTemperatureReadings( void ); //static F32 getCalibrationAppliedPressure( U08 sensorId, F32 pressure ); -//static F32 getConvertedPressure( PRESSURE_SENSORS_T sensor, F32 pressure ); +static F32 getConvertedPressure( PRESSURE_SENSORS_T sensor, F32 pressure ); static PRESSURE_STATE_T handlePressuresInitState( void ); static PRESSURE_STATE_T handlePressuresContReadState( void ); -//static void publishPressuresData( void ); +static void publishPressuresData( void ); /*********************************************************************//** * @brief @@ -156,75 +157,75 @@ * @details \b Outputs: filteredPressureReadings[], filteredPressureTempReadings[] * @return none *************************************************************************/ -//static void filterPressureSensors( void ) -//{ -// //Filter pressure sensor reading -// filterPressureSensorReadings(); -// -// //Filter pressure sensor temperature reading -// filterPressureSensorTemperatureReadings(); -//} +static void filterPressureSensors( void ) +{ + //Filter pressure sensor reading + filterPressureSensorReadings(); + //Filter pressure sensor temperature reading + filterPressureSensorTemperatureReadings(); +} + /*********************************************************************//** * @brief * The getFilteredPressure function gets the filtered current pressure (in mmHg) * for a given pressure sensor. - * @details \b Alarm: ALARM_ID_DD_SOFTWARE_FAULT if given sensor is invalid. + * @details \b Alarm: ALARM_ID_RO_SOFTWARE_FAULT if given sensor is invalid. * @details \b Inputs: filteredcurrentPressureReadings * @details \b Outputs: none * @param sensor ID of pressure sensor to get pressure reading for. * @return The filtered current pressure (in mmHg) of the given pressure sensor. *************************************************************************/ -//F32 getFilteredPressure( PRESSURE_SENSORS_T sensor ) -//{ -// F32 result = 0.0F; -// -// if ( sensor < NUM_OF_PRESSURE_SENSORS ) -// { -// result = filteredcurrentPressureReadings[ sensor ].data; -// if ( OVERRIDE_KEY == filteredcurrentPressureReadings[ sensor ].override ) -// { -// result = filteredcurrentPressureReadings[ sensor ].ovData; -// } -// } -// else -// { -// SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_PRESSURE_SENSOR_INVALID_SENSOR5, sensor ) -// } -// -// return result; -//} +F32 getFilteredPressure( PRESSURE_SENSORS_T sensor ) +{ + F32 result = 0.0F; + if ( sensor < NUM_OF_PRESSURE_SENSORS ) + { + result = filteredcurrentPressureReadings[ sensor ].data; + if ( OVERRIDE_KEY == filteredcurrentPressureReadings[ sensor ].override ) + { + result = filteredcurrentPressureReadings[ sensor ].ovData; + } + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_PRESSURE_SENSOR_INVALID_SENSOR5, sensor ) + } + + return result; +} + /*********************************************************************//** * @brief * The getFilteredPressureSensorTemperature function gets the filtered current * pressure sensor temperature (in deg C) for a given pressure sensor. - * @details \b Alarm: ALARM_ID_DD_SOFTWARE_FAULT if given sensor is invalid. + * @details \b Alarm: ALARM_ID_RO_SOFTWARE_FAULT if given sensor is invalid. * @details \b Inputs: currentPresTempReadings * @details \b Outputs: none * @param sensor ID of pressure sensor to get temperature reading for. * @return The filtered current pressure sensor temperature (in deg C) of the given pressure sensor. *************************************************************************/ -//F32 getFilteredPressureSensorTemperature( PRESSURE_SENSORS_T sensor ) -//{ -// F32 result = 0.0F; -// -// if ( sensor < NUM_OF_PRESSURE_SENSORS ) -// { -// result = filteredcurrentPresTempReadings[ sensor ].data; -// if ( OVERRIDE_KEY == filteredcurrentPresTempReadings[ sensor ].override ) -// { -// result = filteredcurrentPresTempReadings[ sensor ].ovData; -// } -// } -// else -// { -// SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_PRESSURE_SENSOR_INVALID_SENSOR6, sensor ) -// } -// -// return result; -//} +F32 getFilteredPressureSensorTemperature( PRESSURE_SENSORS_T sensor ) +{ + F32 result = 0.0F; + if ( sensor < NUM_OF_PRESSURE_SENSORS ) + { + result = filteredcurrentPresTempReadings[ sensor ].data; + if ( OVERRIDE_KEY == filteredcurrentPresTempReadings[ sensor ].override ) + { + result = filteredcurrentPresTempReadings[ sensor ].ovData; + } + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_PRESSURE_SENSOR_INVALID_SENSOR6, sensor ) + } + + return result; +} + /*********************************************************************//** * @brief * The checkInletWaterPressure function checks inlet water pressure value @@ -343,27 +344,27 @@ * @details \b Outputs: filteredPressureReadings,filteredcurrentPressureReadings * @return none *************************************************************************/ -//static void filterPressureSensorReadings( void ) -//{ -// U32 i; -// -// for ( i = (U32)PRESSURE_SENSOR_FIRST; i < (U32)NUM_OF_PRESSURE_SENSORS; i++ ) -// { -// F32 pressureinmmHG = getPressure( (PRESSURE_SENSORS_T)i ); -// F32 pressure = getConvertedPressure( (PRESSURE_SENSORS_T)i, pressureinmmHG ); -// -// if ( filteredPressureReadings[i].pressureReadingsCount >= SIZE_OF_PRESSURE_ROLLING_AVG ) -// { -// filteredPressureReadings[i].pressureReadingsTotal -= filteredPressureReadings[i].pressureReadings[ filteredPressureReadings[i].pressureReadingsIdx ]; -// } -// filteredPressureReadings[i].pressureReadings[ filteredPressureReadings[i].pressureReadingsIdx ] = pressure; -// filteredPressureReadings[i].pressureReadingsTotal += pressure; -// filteredPressureReadings[i].pressureReadingsIdx = INC_WRAP( filteredPressureReadings[i].pressureReadingsIdx, 0, SIZE_OF_PRESSURE_ROLLING_AVG - 1 ); -// filteredPressureReadings[i].pressureReadingsCount = INC_CAP( filteredPressureReadings[i].pressureReadingsCount, SIZE_OF_PRESSURE_ROLLING_AVG ); -// filteredcurrentPressureReadings[i].data = filteredPressureReadings[i].pressureReadingsTotal / (F32)filteredPressureReadings[i].pressureReadingsCount; -// } -//} +static void filterPressureSensorReadings( void ) +{ + PRESSURE_SENSORS_T sensor; + for ( sensor = PRESSURE_SENSOR_FIRST; sensor < NUM_OF_PRESSURE_SENSORS; sensor++ ) + { + F32 pressureinmmHG = getPressure( sensor ); + F32 pressure = getConvertedPressure( sensor, pressureinmmHG ); + + if ( filteredPressureReadings[sensor].pressureReadingsCount >= SIZE_OF_PRESSURE_ROLLING_AVG ) + { + filteredPressureReadings[sensor].pressureReadingsTotal -= filteredPressureReadings[sensor].pressureReadings[ filteredPressureReadings[sensor].pressureReadingsIdx ]; + } + filteredPressureReadings[sensor].pressureReadings[ filteredPressureReadings[sensor].pressureReadingsIdx ] = pressure; + filteredPressureReadings[sensor].pressureReadingsTotal += pressure; + filteredPressureReadings[sensor].pressureReadingsIdx = INC_WRAP( filteredPressureReadings[sensor].pressureReadingsIdx, 0, SIZE_OF_PRESSURE_ROLLING_AVG - 1 ); + filteredPressureReadings[sensor].pressureReadingsCount = INC_CAP( filteredPressureReadings[sensor].pressureReadingsCount, SIZE_OF_PRESSURE_ROLLING_AVG ); + filteredcurrentPressureReadings[sensor].data = filteredPressureReadings[sensor].pressureReadingsTotal / (F32)filteredPressureReadings[sensor].pressureReadingsCount; + } +} + /*********************************************************************//** * @brief * The filterPressureSensorTemperatureReadings function filters the pressure sensor @@ -372,26 +373,26 @@ * @details \b Outputs: filteredPressureTempReadings,filteredcurrentPresTempReadings * @return none *************************************************************************/ -//static void filterPressureSensorTemperatureReadings( void ) -//{ -// U32 i; -// -// for ( i = (U32)PRESSURE_SENSOR_FIRST; i < (U32)NUM_OF_PRESSURE_SENSORS; i++ ) -// { -// F32 pressureTemperature = getPressureSensorTemperature( (PRESSURE_SENSORS_T)i ); -// -// if ( filteredPressureTempReadings[i].pressureTempReadingsCount >= SIZE_OF_PRESSURETEMP_ROLLING_AVG ) -// { -// filteredPressureTempReadings[i].pressureTempReadingsTotal -= filteredPressureTempReadings[i].pressureTempReadings[ filteredPressureTempReadings[i].pressureTempReadingsIdx ]; -// } -// filteredPressureTempReadings[i].pressureTempReadings[ filteredPressureTempReadings[i].pressureTempReadingsIdx ] = pressureTemperature; -// filteredPressureTempReadings[i].pressureTempReadingsTotal += pressureTemperature; -// filteredPressureTempReadings[i].pressureTempReadingsIdx = INC_WRAP( filteredPressureTempReadings[i].pressureTempReadingsIdx, 0, SIZE_OF_PRESSURETEMP_ROLLING_AVG - 1 ); -// filteredPressureTempReadings[i].pressureTempReadingsCount = INC_CAP( filteredPressureTempReadings[i].pressureTempReadingsCount, SIZE_OF_PRESSURETEMP_ROLLING_AVG ); -// filteredcurrentPresTempReadings[i].data = filteredPressureTempReadings[i].pressureTempReadingsTotal / (F32)filteredPressureTempReadings[i].pressureTempReadingsCount; -// } -//} +static void filterPressureSensorTemperatureReadings( void ) +{ + PRESSURE_SENSORS_T sensor; + for ( sensor = PRESSURE_SENSOR_FIRST; sensor < NUM_OF_PRESSURE_SENSORS; sensor++ ) + { + F32 pressureTemperature = getPressureSensorTemperature( sensor ); + + if ( filteredPressureTempReadings[sensor].pressureTempReadingsCount >= SIZE_OF_PRESSURETEMP_ROLLING_AVG ) + { + filteredPressureTempReadings[sensor].pressureTempReadingsTotal -= filteredPressureTempReadings[sensor].pressureTempReadings[ filteredPressureTempReadings[sensor].pressureTempReadingsIdx ]; + } + filteredPressureTempReadings[sensor].pressureTempReadings[ filteredPressureTempReadings[sensor].pressureTempReadingsIdx ] = pressureTemperature; + filteredPressureTempReadings[sensor].pressureTempReadingsTotal += pressureTemperature; + filteredPressureTempReadings[sensor].pressureTempReadingsIdx = INC_WRAP( filteredPressureTempReadings[sensor].pressureTempReadingsIdx, 0, SIZE_OF_PRESSURETEMP_ROLLING_AVG - 1 ); + filteredPressureTempReadings[sensor].pressureTempReadingsCount = INC_CAP( filteredPressureTempReadings[sensor].pressureTempReadingsCount, SIZE_OF_PRESSURETEMP_ROLLING_AVG ); + filteredcurrentPresTempReadings[sensor].data = filteredPressureTempReadings[sensor].pressureTempReadingsTotal / (F32)filteredPressureTempReadings[sensor].pressureTempReadingsCount; + } +} + /*********************************************************************//** * @brief * The getConvertedPressure function converts the pressure in PSI unit and @@ -402,17 +403,16 @@ * @param pressure pressure (mmHG) to be converted in PSI * @return converted pressure in PSI. *************************************************************************/ -//static F32 getConvertedPressure( PRESSURE_SENSORS_T sensor, F32 pressure ) -//{ -// F32 baroPressurePSI = getPressure( PRESSURE_SENSOR_BAROMETRIC ) * MMHG_TO_PSI_CONVERSION; -// F32 pressurePSI = pressure * MMHG_TO_PSI_CONVERSION; -// -// // calibrated pressure -// //F32 calPressure = getCalibrationAppliedPressure( sensor, pressurePSI ); -// -// return pressurePSI; -//} +static F32 getConvertedPressure( PRESSURE_SENSORS_T sensor, F32 pressure ) +{ + F32 pressurePSI = pressure * MMHG_TO_PSI_CONVERSION; + // calibrate pressure + //F32 calPressure = getCalibrationAppliedPressure( sensor, pressurePSI ); // TODO + + return pressurePSI; // calPressure; +} + /*********************************************************************//** * @brief * The getCalibrationAppliedPressure function applies the calibration values @@ -458,10 +458,10 @@ { PRESSURE_STATE_T result = PRESSURE_CONTINUOUS_READ_STATE; -// //Get raw pressure value -// readPressureSensors(); -// // filter pressure readings -// filterPressureSensors(); + //Get raw pressure value + readPressureSensors(); + // filter pressure readings + filterPressureSensors(); return result; } @@ -481,27 +481,22 @@ { PRESSURE_TEMP_DATA_T data; - data.filteredWaterInletInputPressure = getFilteredPressure( PRESSURE_SENSOR_WATER_INLET_INPUT ); - data.filteredWaterInletOutputPressure = getFilteredPressure( PRESSURE_SENSOR_WATER_INLET_OUTPUT ); - data.filteredWaterOutletPressure = getFilteredPressure( PRESSURE_SENSOR_WATER_OUTLET ); - data.filteredWaterInletInputTemp = getFilteredPressureSensorTemperature( PRESSURE_SENSOR_WATER_INLET_INPUT ); - data.filteredWaterInletOutputTemp = getFilteredPressureSensorTemperature( PRESSURE_SENSOR_WATER_INLET_OUTPUT ); - data.filteredWaterOutletTemp = getFilteredPressureSensorTemperature( PRESSURE_SENSOR_WATER_OUTLET ); - pressuresDataPublicationTimerCounter = 0; + data.PressurePRi = getFilteredPressure( PRESSURE_SENSOR_WATER_INLET_PRE_REG ); + data.PressurePRo = getFilteredPressure( PRESSURE_SENSOR_WATER_INLET_POST_REG ); + data.PressurePC2o = getFilteredPressure( PRESSURE_SENSOR_WATER_INLET_PRE_COND ); + data.PressurePPo = getFilteredPressure( PRESSURE_SENSOR_PRE_RO_FILTER ); + data.PressurePMp = getFilteredPressure( PRESSURE_SENSOR_POST_RO_FILTER ); + data.TempPRi = getFilteredPressureSensorTemperature( PRESSURE_SENSOR_WATER_INLET_PRE_REG ); + data.TempPRo = getFilteredPressureSensorTemperature( PRESSURE_SENSOR_WATER_INLET_POST_REG ); + data.TempPC2o = getFilteredPressureSensorTemperature( PRESSURE_SENSOR_WATER_INLET_PRE_COND ); + data.TempPPo = getFilteredPressureSensorTemperature( PRESSURE_SENSOR_PRE_RO_FILTER ); + data.TempPMp = getFilteredPressureSensorTemperature( PRESSURE_SENSOR_POST_RO_FILTER ); + broadcastData( MSG_ID_RO_PRESSURES_DATA, COMM_BUFFER_OUT_CAN_RO_BROADCAST, (U08*)&data, sizeof( PRESSURE_TEMP_DATA_T ) ); + pressuresDataPublicationTimerCounter = 0; } } -F32 PressurePRi; ///< Pressure before pressure regulator (M1 PRi) -F32 PressurePRo; ///< Pressure after pressure regulator (M3 PRo) -F32 PressurePC2o; ///< Pressure before inlet conductivity sensor (P8 PC2o) -F32 PressurePPo; ///< Pressure before RO filter (P13 PPo) -F32 PressurePMp; ///< Pressure after RO filter (P17 PMp) -F32 TempPRi; ///< Temperature before pressure regulator (M1 PRi) -F32 TempPRo; ///< Temperature after pressure regulator (M3 PRo) -F32 TempPC2o; ///< Temperature before inlet conductivity sensor (P8 PC2o) -F32 TempPPo; ///< Temperature before RO filter (P13 PPo) -F32 TempPMp; ///< Temperature after RO filter (P17 PMp) /************************************************************************* @@ -519,13 +514,13 @@ * that override valves states publish interval with (in ms) * @return TRUE if override successful, FALSE if not *************************************************************************/ -//BOOL testPressureSensorDataPublishIntervalOverride( MESSAGE_T *message ) -//{ -// BOOL result = u32BroadcastIntervalOverride( message, &pressuresDataPublishInterval, TASK_PRIORITY_INTERVAL ); -// -// return result; -//} +BOOL testPressureSensorDataPublishIntervalOverride( MESSAGE_T *message ) +{ + BOOL result = u32BroadcastIntervalOverride( message, &pressuresDataPublishInterval, TASK_PRIORITY_INTERVAL ); + return result; +} + /*********************************************************************//** * @brief * The testPressureSensorFilteredReadingsOverride function overrides the Index: firmware/App/Monitors/Pressure.h =================================================================== diff -u -rd8cd7de2f84b26aafc153e2bb665a5058a040bf0 -ra3988128df0950e1f03dcb4a5aa53336d8fb3a6f --- firmware/App/Monitors/Pressure.h (.../Pressure.h) (revision d8cd7de2f84b26aafc153e2bb665a5058a040bf0) +++ firmware/App/Monitors/Pressure.h (.../Pressure.h) (revision a3988128df0950e1f03dcb4a5aa53336d8fb3a6f) @@ -52,10 +52,10 @@ void initPressure( void ); void execPressureSensor( void ); //void checkInletWaterPressure( void ); -// -//F32 getFilteredPressure( PRESSURE_SENSORS_T sensor ); -//F32 getFilteredPressureSensorTemperature( PRESSURE_SENSORS_T sensor ); -// + +F32 getFilteredPressure( PRESSURE_SENSORS_T sensor ); +F32 getFilteredPressureSensorTemperature( PRESSURE_SENSORS_T sensor ); + BOOL testPressureSensorDataPublishIntervalOverride( MESSAGE_T *message ); //BOOL testPressureSensorFilteredReadingsOverride( MESSAGE_T *message ); //BOOL testPressureSensorFilteredTemperatureReadingsOverride( MESSAGE_T *message ); Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -rd8cd7de2f84b26aafc153e2bb665a5058a040bf0 -ra3988128df0950e1f03dcb4a5aa53336d8fb3a6f --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision d8cd7de2f84b26aafc153e2bb665a5058a040bf0) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision a3988128df0950e1f03dcb4a5aa53336d8fb3a6f) @@ -104,7 +104,9 @@ SW_FAULT_ID_PRESSURE_SENSOR_INVALID_SENSOR2 = 87, SW_FAULT_ID_PRESSURE_SENSOR_INVALID_SENSOR3 = 88, SW_FAULT_ID_PRESSURE_SENSOR_INVALID_SENSOR4 = 89, - SW_FAULT_ID_PRESSURE_INVALID_EXEC_STATE = 90, + SW_FAULT_ID_PRESSURE_SENSOR_INVALID_SENSOR5 = 90, + SW_FAULT_ID_PRESSURE_SENSOR_INVALID_SENSOR6 = 91, + SW_FAULT_ID_PRESSURE_INVALID_EXEC_STATE = 92, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T;