Index: firmware/App/Drivers/PressureSensor.c =================================================================== diff -u -rd9b5f588d81e15ed3849222bed3362e15dbf4b0a -r961784c895cb8f551a2623cd02dcbfe42d04b7c2 --- firmware/App/Drivers/PressureSensor.c (.../PressureSensor.c) (revision d9b5f588d81e15ed3849222bed3362e15dbf4b0a) +++ firmware/App/Drivers/PressureSensor.c (.../PressureSensor.c) (revision 961784c895cb8f551a2623cd02dcbfe42d04b7c2) @@ -18,22 +18,22 @@ #include "FpgaTD.h" #include "Messaging.h" #include "PersistentAlarm.h" -#include "PressureCommon.h" +#include "PressureCommon.h" #include "PressureSensor.h" -#include "Utilities.h" - +#include "Utilities.h" + /** * @addtogroup PressureSensor * @{ */ -// ********** private definitions ********** - -#define BAR_TO_MMHG ( 750.062F ) ///< Conversion factor for converting bar to mmHg. +// ********** private definitions ********** #define PRES_SENSORS_ZERO_OFFSET ( 1638.0F ) ///< Zero offset for pressure sensor readings. #define PRES_SENSORS_DIVISOR ( 14745.0F - PRES_SENSORS_ZERO_OFFSET ) ///< Divisor for pressure sensor conversion from counts to bars. -#define PRES_SENSORS_RANGE_IN_BARS ( 1.6F - 0.0F ) ///< Range (in bars) of the pressure sensors (0..1.6). +#define PRESSURE_MIN_PSI ( -30.0F ) ///< Minimum of scale for pressure sensor reading (in PSI). +#define PRESSURE_MAX_PSI ( 30.0F ) ///< Maximum of scale for pressure sensor reading (in PSI). +#define PSI_TO_MMHG ( 51.7149F ) ///< Conversion factor for converting PSI to mmHg. #define PRES_SENSORS_COUNT_ERROR_TIMEOUT_MS ( 2 * MS_PER_SECOND ) ///< Pressure sensors read and error count timeout in milliseconds. @@ -46,8 +46,8 @@ #define PRESSURE_STALE_DATA 2 ///< Pressure status bits indicate data is stale (no new data since last fpga read). #define PRESSURE_DIAG_CONDITION 3 ///< Pressure status bits diagnostic condition (alarm). -// ********** private data ********** - +// ********** private data ********** + static OVERRIDE_F32_T currentPressureReadings[ NUM_OF_PRESSURE_SENSORS ]; ///< Current pressure sensor pressure readings (overrideable). static OVERRIDE_F32_T currentPresTempReadings[ NUM_OF_PRESSURE_SENSORS ]; ///< Current pressure sensor temperature readings (overrideable). static OVERRIDE_U32_T lastPressureReadCounter[ NUM_OF_PRESSURE_SENSORS ]; ///< Last pressure sensor read count (Overrideable). @@ -56,9 +56,8 @@ // ********** private function prototypes ********** -static void checkPressureSensors( void ); -static F32 convertPressureRdg2mmHg( S16 counts ); -static F32 getPresureReadingFromFPGARegReading( U16 fpgaReg ); +static void checkPressureSensors( void ); +static F32 convertPressureRdg2mmHg( U16 counts ); static U32 getPressureStatusFromFPGARegReading( U16 fpgaReg ); /*********************************************************************//** @@ -119,26 +118,26 @@ *************************************************************************/ void readPressureSensors( void ) { - U16 PBA = getPBAPressure(); - U16 PBO = getPBOPressure(); + U16 h2 = getH2Pressure(); + U16 h14 = getH14Pressure(); // Update status of pressure sensors - currentPressureStatus[ PRESSURE_SENSOR_ARTERIAL ] = getPressureStatusFromFPGARegReading( PBA ); - currentPressureStatus[ PRESSURE_SENSOR_VENOUS ] = getPressureStatusFromFPGARegReading( PBO ); + currentPressureStatus[ H2_PRES ] = getPressureStatusFromFPGARegReading( h2 ); + currentPressureStatus[ H14_PRES ] = getPressureStatusFromFPGARegReading( h14 ); // Update and convert raw pressures to mmHg - currentPressureReadings[ PRESSURE_SENSOR_ARTERIAL ].data = convertPressureRdg2mmHg( PBA ); - currentPressureReadings[ PRESSURE_SENSOR_VENOUS ].data = convertPressureRdg2mmHg( PBO ); + currentPressureReadings[ H2_PRES ].data = convertPressureRdg2mmHg( h2 ); + currentPressureReadings[ H14_PRES ].data = convertPressureRdg2mmHg( h14 ); // Update and convert raw pressure sensor temperatures to deg C - currentPresTempReadings[ PRESSURE_SENSOR_ARTERIAL ].data = convertPressureTempReading2DegC( getPBATemperature() ); - currentPresTempReadings[ PRESSURE_SENSOR_VENOUS ].data = convertPressureTempReading2DegC( getPBOTemperature() ); + currentPresTempReadings[ H2_PRES ].data = convertPressureTempReading2DegC( getH2Temperature() ); + currentPresTempReadings[ H14_PRES ].data = convertPressureTempReading2DegC( getH14Temperature() ); // Update read and error counters for each pressure sensor - lastPressureReadCounter[ PRESSURE_SENSOR_ARTERIAL ].data = (U32)getPBAReadCounter(); - lastPressureReadCounter[ PRESSURE_SENSOR_VENOUS ].data = (U32)getPBOReadCounter(); - lastPressureErrorCounter[ PRESSURE_SENSOR_ARTERIAL ].data = (U32)getPBAErrorCounter(); - lastPressureErrorCounter[ PRESSURE_SENSOR_VENOUS ].data = (U32)getPBAErrorCounter(); + lastPressureReadCounter[ H2_PRES ].data = (U32)getH2ReadCounter(); + lastPressureReadCounter[ H14_PRES ].data = (U32)getH14ReadCounter(); + lastPressureErrorCounter[ H2_PRES ].data = (U32)getH2ErrorCounter(); + lastPressureErrorCounter[ H14_PRES ].data = (U32)getH14ErrorCounter(); // Monitor pressure sensor health checkPressureSensors(); @@ -153,34 +152,21 @@ * @param counts the raw pressure reading in counts from the FPGA * @return the pressure in mmHg *************************************************************************/ -static F32 convertPressureRdg2mmHg( S16 counts ) +static F32 convertPressureRdg2mmHg( U16 counts ) { - F32 rdg = getPresureReadingFromFPGARegReading( counts ); - F32 bar = ( ( rdg - PRES_SENSORS_ZERO_OFFSET ) * ( PRES_SENSORS_RANGE_IN_BARS ) / ( PRES_SENSORS_DIVISOR ) ); - F32 mmHg = bar * BAR_TO_MMHG; + S16 rdg = (S16)( counts & FPGA_PRESSURE_READING_BITS_MASK ); + F32 presPSI; + F32 mmHg; + // If the arterial pressure status is normal, convert the counts to pressure in mmHg + presPSI = ( ( (F32)rdg - PRES_SENSORS_ZERO_OFFSET ) *( PRESSURE_MAX_PSI - PRESSURE_MIN_PSI ) / PRES_SENSORS_DIVISOR ) + PRESSURE_MIN_PSI; + mmHg = presPSI * PSI_TO_MMHG; + return mmHg; } /*********************************************************************//** * @brief - * The getPresureReadingFromFPGARegReading function extracts the signed - * pressure reading (in counts) from the FPGA register reading. - * @details \b Inputs: none - * @details \b Outputs: none - * @param fpgaReg the value read from the FPGA register - * @return the pressure portion of the FPGA register value, sign extended - *************************************************************************/ -static F32 getPresureReadingFromFPGARegReading( U16 fpgaReg ) -{ - U16 rdg = fpgaReg & FPGA_PRESSURE_READING_BITS_MASK; // mask off status bits - S16 ext = signExtend16( rdg, FPGA_PRESSURE_READING_BIT_COUNT - 1 ); // sign extend reading in case it's negative - - return (F32)ext; -} - -/*********************************************************************//** - * @brief * The getPressureStatusFromFPGARegReading function extracts the status * from the FPGA register reading. * @details \b Inputs: none @@ -210,17 +196,17 @@ *************************************************************************/ static void checkPressureSensors( void ) { - checkFPGAPersistentAlarms( FPGA_PERS_ERROR_ARTERIAL_PRESSURE_SENSOR, getPressureSensorReadCount( PRESSURE_SENSOR_ARTERIAL ) ); - checkFPGAPersistentAlarms( FPGA_PERS_ERROR_VENOUS_PRESSURE_SESNOR, getPressureSensorReadCount( PRESSURE_SENSOR_VENOUS ) ); - checkFPGAPersistentErrorCountAlarm( FPGA_PERS_ERROR_ARTERIAL_PRESSURE_SENSOR, getPressureSensorErrorCount( PRESSURE_SENSOR_ARTERIAL ) ); - checkFPGAPersistentErrorCountAlarm( FPGA_PERS_ERROR_VENOUS_PRESSURE_SESNOR, getPressureSensorErrorCount( PRESSURE_SENSOR_VENOUS ) ); + checkFPGAPersistentAlarms( FPGA_PERS_ERROR_ARTERIAL_PRESSURE_SENSOR, getPressureSensorReadCount( H2_PRES ) ); + checkFPGAPersistentAlarms( FPGA_PERS_ERROR_VENOUS_PRESSURE_SESNOR, getPressureSensorReadCount( H14_PRES ) ); + checkFPGAPersistentErrorCountAlarm( FPGA_PERS_ERROR_ARTERIAL_PRESSURE_SENSOR, getPressureSensorErrorCount( H2_PRES ) ); + checkFPGAPersistentErrorCountAlarm( FPGA_PERS_ERROR_VENOUS_PRESSURE_SESNOR, getPressureSensorErrorCount( H14_PRES ) ); // verify status of pressure sensors - if ( currentPressureStatus[ PRESSURE_SENSOR_ARTERIAL ] != PRESSURE_NORMAL_OP ) + if ( currentPressureStatus[ H2_PRES ] != PRESSURE_NORMAL_OP ) { // TODO - alarm? } - if ( currentPressureStatus[ PRESSURE_SENSOR_ARTERIAL ] != PRESSURE_NORMAL_OP ) + if ( currentPressureStatus[ H14_PRES ] != PRESSURE_NORMAL_OP ) { // TODO - alarm? } @@ -368,5 +354,5 @@ return result; } - + /**@}*/