Index: firmware/App/Monitors/Pressure.c =================================================================== diff -u -re2e51b0219db0132cebb6f65f3dbd803e1f01e30 -re7fe0454b5b2d39009dc784dc8c156856df8bc86 --- firmware/App/Monitors/Pressure.c (.../Pressure.c) (revision e2e51b0219db0132cebb6f65f3dbd803e1f01e30) +++ firmware/App/Monitors/Pressure.c (.../Pressure.c) (revision e7fe0454b5b2d39009dc784dc8c156856df8bc86) @@ -33,6 +33,7 @@ #define PRESSURE_TEMP_SAMPLE_FILTER_MS ( 200 ) ///< Filter temperature data for given time #define SIZE_OF_PRESSURE_ROLLING_AVG ( PRESSURE_SAMPLE_FILTER_MS / TASK_PRIORITY_INTERVAL ) ///< Filtered pressure moving average. #define SIZE_OF_PRESSURETEMP_ROLLING_AVG ( PRESSURE_TEMP_SAMPLE_FILTER_MS / TASK_PRIORITY_INTERVAL ) ///< Filtered pressure temprature w/ 1 second moving average. +#define MMHG_TO_PSI_CONVERSION 0.0193368F ///< MMHG to PSI conversion. /// Defined states for the pressures monitor state machine. typedef enum PresMonitor_States @@ -64,6 +65,7 @@ static OVERRIDE_F32_T filteredcurrentPressureReadings[ NUM_OF_PRESSURE_SENSORS ]; ///< filtered current pressure sensor pressure readings (overrideable). static OVERRIDE_F32_T filteredcurrentPresTempReadings[ NUM_OF_PRESSURE_SENSORS ]; ///< filtered current pressure sensor temperature readings (overrideable). +//static DD_PRES_SENSORS_CAL_RECORD_T pressuresCalRecord; ///< Pressures calibration record. static FILTER_PRESSURE_READINGS_T filteredPressureReadings[NUM_OF_PRESSURE_SENSORS]; ///< Filtered pressure reading for pressure sensors. static FILTER_PRESSURE_TEMPERATURE_READINGS_T filteredPressureTempReadings[NUM_OF_PRESSURE_SENSORS]; ///< Filtered pressure reading for pressure sensors. @@ -76,6 +78,8 @@ 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 PRESSURE_STATE_T handlePressuresInitState( void ); static PRESSURE_STATE_T handlePressuresContReadState( void ); static void publishPressuresData( void ); @@ -136,7 +140,6 @@ //Filter pressure sensor temperature reading filterPressureSensorTemperatureReadings(); - } /*********************************************************************//** @@ -245,7 +248,8 @@ for ( i = (U32)PRESSURE_SENSOR_FIRST; i < (U32)NUM_OF_PRESSURE_SENSORS; i++ ) { - F32 pressure = getPressure( (PRESSURE_SENSORS_T)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 ) { @@ -286,6 +290,47 @@ filteredcurrentPresTempReadings[i].data = filteredPressureTempReadings[i].pressureTempReadingsTotal / (F32)filteredPressureTempReadings[i].pressureTempReadingsCount; } } + +/*********************************************************************//** + * @brief + * The getConvertedPressure function converts the pressure in PSI unit and + * calibration applied to it. + * @details \b Inputs: none + * @details \b Outputs: none + * @param sensor sesnor id for the calibration to be applied for + * @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; +} + +/*********************************************************************//** + * @brief + * The getCalibrationAppliedPressure function applies the calibration values + * to the provided pressure and returns the values. + * @details \b Inputs: pressuresCalRecord + * @details \b Outputs: none + * @param sensorId the ID of the pressure sensor + * @param pressure the pressure before applying calibration to it + * @return calibration applied pressure + *************************************************************************/ +//static F32 getCalibrationAppliedPressure( U08 sensorId, F32 pressure ) +//{ +// F32 calPressure = pow( pressure, 4 ) * pressuresCalRecord.pressureSensors[ (PRESSURE_SENSORS_T)sensorId ].fourthOrderCoeff + +// pow( pressure, 3 ) * pressuresCalRecord.pressureSensors[ (PRESSURE_SENSORS_T)sensorId ].thirdOrderCoeff + +// pow( pressure, 2 ) * pressuresCalRecord.pressureSensors[ (PRESSURE_SENSORS_T)sensorId ].secondOrderCoeff + +// pressure * pressuresCalRecord.pressureSensors[ (PRESSURE_SENSORS_T)sensorId ].gain + +// pressuresCalRecord.pressureSensors[ (PRESSURE_SENSORS_T)sensorId ].offset; +// return calPressure; +//} /*********************************************************************//** * @brief @@ -369,29 +414,8 @@ *************************************************************************/ BOOL testPressureSensorDataPublishIntervalOverride( MESSAGE_T *message ) { - BOOL result = FALSE; - TEST_OVERRIDE_PAYLOAD_T override; - OVERRIDE_TYPE_T ovType = getOverridePayloadFromMessage( message, &override ); + BOOL result = u32BroadcastIntervalOverride( message, &pressuresDataPublishInterval, TASK_PRIORITY_INTERVAL ); - // Verify tester has logged in with DD and override type is valid - if ( ( TRUE == isTestingActivated() ) && ( ovType != OVERRIDE_INVALID ) && ( ovType < NUM_OF_OVERRIDE_TYPES ) ) - { - if ( OVERRIDE_OVERRIDE == ovType ) - { - U32 intvl = override.state.u32 / TASK_PRIORITY_INTERVAL; - - result = TRUE; - pressuresDataPublishInterval.ovData = intvl; - pressuresDataPublishInterval.override = OVERRIDE_KEY; - } - else - { - result = TRUE; - pressuresDataPublishInterval.override = OVERRIDE_RESET; - pressuresDataPublishInterval.ovData = pressuresDataPublishInterval.ovInitData; - } - } - return result; } @@ -407,35 +431,8 @@ *************************************************************************/ BOOL testPressureSensorFilteredReadingsOverride( MESSAGE_T *message ) { - BOOL result = FALSE; - TEST_OVERRIDE_ARRAY_PAYLOAD_T override; - OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &override ); + BOOL result = f32ArrayOverride( message, &filteredcurrentPressureReadings[0], NUM_OF_PRESSURE_SENSORS - 1 ); - // Verify tester has logged in with DD and override type is valid - if ( ( TRUE == isTestingActivated() ) && ( ovType != OVERRIDE_INVALID ) && ( ovType < NUM_OF_OVERRIDE_TYPES ) ) - { - U32 sensor = override.index; - - // Verify pressure sensor index of override - if ( sensor < NUM_OF_PRESSURE_SENSORS ) - { - if ( OVERRIDE_OVERRIDE == ovType ) - { - F32 value = override.state.f32; - - filteredcurrentPressureReadings[ sensor ].ovData = value; - filteredcurrentPressureReadings[ sensor ].override = OVERRIDE_KEY; - } - else - { - filteredcurrentPressureReadings[ sensor ].override = OVERRIDE_RESET; - filteredcurrentPressureReadings[ sensor ].ovData = filteredcurrentPressureReadings[ sensor ].ovInitData; - } - - result = TRUE; - } - } - return result; } @@ -451,35 +448,8 @@ *************************************************************************/ BOOL testPressureSensorFilteredTemperatureReadingsOverride( MESSAGE_T *message ) { - BOOL result = FALSE; - TEST_OVERRIDE_ARRAY_PAYLOAD_T override; - OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &override ); + BOOL result = f32ArrayOverride( message, &filteredcurrentPresTempReadings[0], NUM_OF_PRESSURE_SENSORS - 1 ); - // Verify tester has logged in with DD and override type is valid - if ( ( TRUE == isTestingActivated() ) && ( ovType != OVERRIDE_INVALID ) && ( ovType < NUM_OF_OVERRIDE_TYPES ) ) - { - U32 sensor = override.index; - - // Verify pressure sensor index of override - if ( sensor < NUM_OF_PRESSURE_SENSORS ) - { - if ( OVERRIDE_OVERRIDE == ovType ) - { - F32 value = override.state.f32; - - filteredcurrentPresTempReadings[ sensor ].ovData = value; - filteredcurrentPresTempReadings[ sensor ].override = OVERRIDE_KEY; - } - else - { - filteredcurrentPresTempReadings[ sensor ].override = OVERRIDE_RESET; - filteredcurrentPresTempReadings[ sensor ].ovData = filteredcurrentPresTempReadings[ sensor ].ovInitData; - } - - result = TRUE; - } - } - return result; }