Index: firmware/App/Drivers/PressureSensor.c =================================================================== diff -u -rf730082d809bc52c15b2d17b8fd0a8d535e5c21a -raf8485c010085b535a81e9c44426c60eea2535e6 --- firmware/App/Drivers/PressureSensor.c (.../PressureSensor.c) (revision f730082d809bc52c15b2d17b8fd0a8d535e5c21a) +++ firmware/App/Drivers/PressureSensor.c (.../PressureSensor.c) (revision af8485c010085b535a81e9c44426c60eea2535e6) @@ -25,12 +25,102 @@ // ********** private definitions ********** +#define VENOUS_PRESSURE_OFFSET ( 1638 ) ///< Offset for 14-bit venous pressure sensor reading. +#define VENOUS_PRESSURE_SCALE ( 14745 - VENOUS_PRESSURE_OFFSET ) ///< Scale for venous pressure sensor. +#define VENOUS_PRESSURE_MIN_PSI ( -30.0F ) ///< Minimum of scale for venous pressure sensor reading (in PSI). +#define VENOUS_PRESSURE_MAX_PSI ( 30.0F ) ///< Maximum of scale for venous pressure sensor reading (in PSI). + +#define ARTERIAL_PRESSURE_OFFSET ( 1638 ) ///< Offset for 14-bit arterial pressure sensor reading. +#define ARTERIAL_PRESSURE_SCALE ( 14745 - VENOUS_PRESSURE_OFFSET ) ///< Scale for arterial pressure sensor. +#define ARTERIAL_PRESSURE_MIN_PSI ( -30.0F ) ///< Minimum of scale for arterial pressure sensor reading (in PSI). +#define ARTERIAL_PRESSURE_MAX_PSI ( 30.0F ) ///< Maximum of scale for arterial pressure sensor reading (in PSI). +#define PSI_TO_MMHG ( 51.7149F ) ///< Conversion factor for converting PSI to mmHg. + // ********** private data ********** +/// Current pressure sensor readings (overrideable). +static OVERRIDE_F32_T currentPressureReadings[ NUM_OF_PRESSURE_SENSORS ]; // ********** private function prototypes ********** +/*********************************************************************//** + * @brief + * The initPressureSensor function initializes the Pressure Sensor unit. + * @details \b Inputs: none + * @details \b Outputs: Pressure Sensor unit is initialized. + * @return none + *************************************************************************/ +void initPressureSensor( void ) +{ + currentPressureReadings[ PRESSURE_SENSOR_ARTERIAL ].data = 0; + currentPressureReadings[ PRESSURE_SENSOR_ARTERIAL ].ovData = 0; + currentPressureReadings[ PRESSURE_SENSOR_ARTERIAL ].ovInitData = 0; + currentPressureReadings[ PRESSURE_SENSOR_ARTERIAL ].override = OVERRIDE_RESET; + + currentPressureReadings[ PRESSURE_SENSOR_VENOUS ].data = 0; + currentPressureReadings[ PRESSURE_SENSOR_VENOUS ].ovData = 0; + currentPressureReadings[ PRESSURE_SENSOR_VENOUS ].ovInitData = 0; + currentPressureReadings[ PRESSURE_SENSOR_VENOUS ].override = OVERRIDE_RESET; +} + +/*********************************************************************//** + * @brief + * The readPressureSensors function gets the current pressure reading + * for a all pressure sensors from the FPGA. + * @note This function should be called periodically to maintain fresh + * sensor readings for all pressure sensors. + * @details \b Inputs: FPGA + * @details \b Outputs: none + * @return none + *************************************************************************/ +void readPressureSensors( void ) +{ + F32 pressure; + + // Convert raw pressures to PSI and then to mmHg + pressure = ( (F32)( getPBAPressure() - ARTERIAL_PRESSURE_OFFSET ) * + ( ARTERIAL_PRESSURE_MAX_PSI - ARTERIAL_PRESSURE_MIN_PSI ) / (F32)ARTERIAL_PRESSURE_SCALE ) + ARTERIAL_PRESSURE_MIN_PSI; + currentPressureReadings[ PRESSURE_SENSOR_ARTERIAL ].data = pressure * PSI_TO_MMHG; + + pressure = ( (F32)( getPBOPressure() - VENOUS_PRESSURE_OFFSET ) * + ( VENOUS_PRESSURE_MAX_PSI - VENOUS_PRESSURE_MIN_PSI ) / (F32)VENOUS_PRESSURE_SCALE ) + VENOUS_PRESSURE_MIN_PSI; + currentPressureReadings[ PRESSURE_SENSOR_VENOUS ].data = pressure * PSI_TO_MMHG; + + // +} +//U32 getPBATemperature( void ); +//U08 getPBAReadCounter( void ); +//U08 getPBAErrorCounter( void ); + +/*********************************************************************//** + * @brief + * The getPressure function gets the current pressure (in mmHg) for a given + * pressure sensor. + * @details \b Alarm: ALARM_ID_TD_SOFTWARE_FAULT if given sensor is invalid. + * @details \b Inputs: currentPressureReadings + * @details \b Outputs: none + * @param sensor ID of pressure sensor to get reading for. + * @return The current pressure (in mmHg) of the given pressure sensor. + *************************************************************************/ +F32 getPressure( PRESSURE_SENSORS_T sensor ) +{ + F32 result = 0.0F; + + if ( sensor < NUM_OF_PRESSURE_SENSORS ) + { + result = currentPressureReadings[ sensor ].data; + if ( OVERRIDE_KEY == currentPressureReadings[ sensor ].override ) + { + result = currentPressureReadings[ sensor ].ovData; + } + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_PRESSURE_SENSOR_INVALID_SENSOR, sensor ) + } + + return result; +} - /**@}*/