Index: firmware/App/Drivers/PressureSensor.c =================================================================== diff -u -raf8485c010085b535a81e9c44426c60eea2535e6 -r61456322255a686365146e88f79ffc61d00edb6c --- firmware/App/Drivers/PressureSensor.c (.../PressureSensor.c) (revision af8485c010085b535a81e9c44426c60eea2535e6) +++ firmware/App/Drivers/PressureSensor.c (.../PressureSensor.c) (revision 61456322255a686365146e88f79ffc61d00edb6c) @@ -25,25 +25,30 @@ // ********** 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 KPA_TO_MMHG ( 7.50062F ) ///< Conversion factor for converting kPa to mmHg. -#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. +#define PRESSURE_FS ( 80.0F ) ///< Pressure sensor full scale percentage. +#define PRESSURE_ZERO ( 0.0F ) ///< Pressure sensor zero value. +#define PRESSURE_FS_RATIO ( 0.9F ) ///< Pressure sensor full scale ratio. +#define PRESSURE_ZERO_RATIO ( 0.1F ) ///< Pressure sensor zero ratio. +#define PRESSURE_DIVIDER ( 8388608.0F ) ///< Pressure sensor divider. +/// Scaler value for converting pressure readings to kPa. +#define PRESSURE_SCALER ( ( PRESSURE_FS - PRESSURE_ZERO ) / \ + ( PRESSURE_FS_RATIO - PRESSURE_ZERO_RATIO ) ) + +#define PRESSURE_TEMP_DIVIDER ( 65536.0F ) ///< Pressure sensor temperature divider. +#define PRESSURE_TEMP_OFFSET ( 25.0F ) ///< Pressure sensor temperature offset. + // ********** private data ********** -/// Current pressure sensor readings (overrideable). -static OVERRIDE_F32_T currentPressureReadings[ NUM_OF_PRESSURE_SENSORS ]; +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). -// ********** private function prototypes ********** +// ********** private function prototypes ********** +static void checkPressureSensors( void ); + /*********************************************************************//** * @brief * The initPressureSensor function initializes the Pressure Sensor unit. @@ -76,31 +81,38 @@ *************************************************************************/ void readPressureSensors( void ) { - F32 pressure; + F32 pressure_kPa; - // 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; + // Convert raw pressures to kPa and then to mmHg + pressure_kPa = ( ( (F32)getPBAPressure() / PRESSURE_DIVIDER ) - PRESSURE_ZERO_RATIO ) * PRESSURE_SCALER; + currentPressureReadings[ PRESSURE_SENSOR_ARTERIAL ].data = pressure_kPa * KPA_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; + pressure_kPa = ( ( (F32)getPBOPressure() / PRESSURE_DIVIDER ) - PRESSURE_ZERO_RATIO ) * PRESSURE_SCALER; + currentPressureReadings[ PRESSURE_SENSOR_VENOUS ].data = pressure_kPa * KPA_TO_MMHG; - // + // Convert raw pressure sensor temperatures to deg C + currentPresTempReadings[ PRESSURE_SENSOR_ARTERIAL ].data = ( (F32)getPBATemperature() / PRESSURE_TEMP_DIVIDER ) + PRESSURE_TEMP_OFFSET; + currentPresTempReadings[ PRESSURE_SENSOR_VENOUS ].data = ( (F32)getPBOTemperature() / PRESSURE_TEMP_DIVIDER ) + PRESSURE_TEMP_OFFSET; + + // Monitor pressure sensor health + checkPressureSensors(); } -//U32 getPBATemperature( void ); -//U08 getPBAReadCounter( void ); -//U08 getPBAErrorCounter( void ); +// TODO a function that gets and checks read and error counters for both pressure sensors +static void checkPressureSensors( 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. + * @param sensor ID of pressure sensor to get pressure reading for. * @return The current pressure (in mmHg) of the given pressure sensor. *************************************************************************/ F32 getPressure( PRESSURE_SENSORS_T sensor ) @@ -117,10 +129,40 @@ } else { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_PRESSURE_SENSOR_INVALID_SENSOR, sensor ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_PRESSURE_SENSOR_INVALID_SENSOR1, sensor ) } return result; +} + +/*********************************************************************//** + * @brief + * The getPressure function gets the current pressure sensor temperature (in deg C) + * for a given pressure sensor. + * @details \b Alarm: ALARM_ID_TD_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 current pressure sensor temperature (in deg C) of the given pressure sensor. + *************************************************************************/ +F32 getPressureSensorTemperature( PRESSURE_SENSORS_T sensor ) +{ + F32 result = 0.0F; + + if ( sensor < NUM_OF_PRESSURE_SENSORS ) + { + result = currentPresTempReadings[ sensor ].data; + if ( OVERRIDE_KEY == currentPresTempReadings[ sensor ].override ) + { + result = currentPresTempReadings[ sensor ].ovData; + } + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_PRESSURE_SENSOR_INVALID_SENSOR2, sensor ) + } + + return result; } /**@}*/ Index: firmware/App/Drivers/PressureSensor.h =================================================================== diff -u -raf8485c010085b535a81e9c44426c60eea2535e6 -r61456322255a686365146e88f79ffc61d00edb6c --- firmware/App/Drivers/PressureSensor.h (.../PressureSensor.h) (revision af8485c010085b535a81e9c44426c60eea2535e6) +++ firmware/App/Drivers/PressureSensor.h (.../PressureSensor.h) (revision 61456322255a686365146e88f79ffc61d00edb6c) @@ -44,7 +44,8 @@ void initPressureSensor( void ); void readPressureSensors( void ); -F32 getPressure( PRESSURE_SENSORS_T sensor ); +F32 getPressure( PRESSURE_SENSORS_T sensor ); +F32 getPressureSensorTemperature( PRESSURE_SENSORS_T sensor ); /**@}*/ Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -raf8485c010085b535a81e9c44426c60eea2535e6 -r61456322255a686365146e88f79ffc61d00edb6c --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision af8485c010085b535a81e9c44426c60eea2535e6) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 61456322255a686365146e88f79ffc61d00edb6c) @@ -105,7 +105,8 @@ SW_FAULT_ID_SYSTEM_COMM_INVALID_BUFFER_INDEX1 = 74, SW_FAULT_ID_SYSTEM_COMM_INVALID_BUFFER_INDEX2 = 75, SW_FAULT_ID_BUBBLE_DETECTOR_INVALID_SENSOR = 76, - SW_FAULT_ID_PRESSURE_SENSOR_INVALID_SENSOR = 77, + SW_FAULT_ID_PRESSURE_SENSOR_INVALID_SENSOR1 = 77, + SW_FAULT_ID_PRESSURE_SENSOR_INVALID_SENSOR2 = 78, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T; Index: firmware/App/Services/FpgaTD.c =================================================================== diff -u -rf730082d809bc52c15b2d17b8fd0a8d535e5c21a -r61456322255a686365146e88f79ffc61d00edb6c --- firmware/App/Services/FpgaTD.c (.../FpgaTD.c) (revision f730082d809bc52c15b2d17b8fd0a8d535e5c21a) +++ firmware/App/Services/FpgaTD.c (.../FpgaTD.c) (revision 61456322255a686365146e88f79ffc61d00edb6c) @@ -99,12 +99,12 @@ U08 reserved1; ///< Reg 261. Reserved and available for future use. U16 sPumpDACSet; ///< Reg 262. Syringe pump DAC setting. U16 sPumpDACEEProm; ///< Reg 264. Syringe pump DAC EEProm data. - U32 PBoPressure; ///< Reg 266. PBo raw pressure data. - U32 PBoTemperature; ///< Reg 270. PBo raw temperature data. + S32 PBoPressure; ///< Reg 266. PBo raw pressure data. + S32 PBoTemperature; ///< Reg 270. PBo raw temperature data. U08 PBoReadCount; ///< Reg 274. PBo read count. U08 PBoErrorCount; ///< Reg 275. PBo error count. - U32 PBAPressure; ///< Reg 276. PBA raw pressure data. - U32 PBATemperature; ///< Reg 280. PBA raw temperature data. + S32 PBAPressure; ///< Reg 276. PBA raw pressure data. + S32 PBATemperature; ///< Reg 280. PBA raw temperature data. U08 PBAReadCount; ///< Reg 284. PBA read count. U08 PBAErrorCount; ///< Reg 285. PBA error count. S16 ATAPSpeed; ///< Reg 286. ATAP speed. @@ -441,7 +441,7 @@ * @details \b Outputs: none * @return latest arterial pressure reading *************************************************************************/ -U32 getPBAPressure( void ) +S32 getPBAPressure( void ) { return fpgaSensorReadings.PBAPressure; } @@ -454,7 +454,7 @@ * @details \b Outputs: none * @return latest arterial pressure sensor temperature reading *************************************************************************/ -U32 getPBATemperature( void ) +S32 getPBATemperature( void ) { return fpgaSensorReadings.PBATemperature; } @@ -495,7 +495,7 @@ * @details \b Outputs: none * @return latest venous pressure reading *************************************************************************/ -U32 getPBOPressure( void ) +S32 getPBOPressure( void ) { return fpgaSensorReadings.PBoPressure; } @@ -508,7 +508,7 @@ * @details \b Outputs: none * @return latest venous pressure sensor temperature reading *************************************************************************/ -U32 getPBOTemperature( void ) +S32 getPBOTemperature( void ) { return fpgaSensorReadings.PBoTemperature; } Index: firmware/App/Services/FpgaTD.h =================================================================== diff -u -rf730082d809bc52c15b2d17b8fd0a8d535e5c21a -r61456322255a686365146e88f79ffc61d00edb6c --- firmware/App/Services/FpgaTD.h (.../FpgaTD.h) (revision f730082d809bc52c15b2d17b8fd0a8d535e5c21a) +++ firmware/App/Services/FpgaTD.h (.../FpgaTD.h) (revision 61456322255a686365146e88f79ffc61d00edb6c) @@ -53,13 +53,13 @@ U16 getFPGABloodPumpHallSensorCount( void ); U08 getFPGABloodPumpHallSensorStatus( void ); -U32 getPBAPressure( void ); -U32 getPBATemperature( void ); +S32 getPBAPressure( void ); +S32 getPBATemperature( void ); U08 getPBAReadCounter( void ); U08 getPBAErrorCounter( void ); -U32 getPBOPressure( void ); -U32 getPBOTemperature( void ); +S32 getPBOPressure( void ); +S32 getPBOTemperature( void ); U08 getPBOReadCounter( void ); U08 getPBOErrorCounter( void );