Index: firmware/App/Controllers/AirTrap.c =================================================================== diff -u -r2a7723dc3639de1f44b5e34be9adcad38582d07c -r134d96d197007eeafb2e8e41de941742f348f9db --- firmware/App/Controllers/AirTrap.c (.../AirTrap.c) (revision 2a7723dc3639de1f44b5e34be9adcad38582d07c) +++ firmware/App/Controllers/AirTrap.c (.../AirTrap.c) (revision 134d96d197007eeafb2e8e41de941742f348f9db) @@ -193,34 +193,18 @@ BOOL isAirTrapLevelsValid = FALSE; AIR_TRAP_LEVELS_T lowerAirTrap, upperAirTrap; AIR_TRAP_LEVEL_SENSORS_T airTrapLevelSensor; - AIR_TRAP_LEVELS_T currentLevelStatus; + AIR_TRAP_LEVELS_T currentLevelStatus[ NUM_OF_AIR_TRAP_LEVEL_SENSORS ]; // Get latest level readings getFPGAAirTrapLevels( &lower, &upper ); + currentLevelStatus[ AIR_TRAP_LEVEL_SENSOR_LOWER ] = ( TRUE == lower ? AIR_TRAP_LEVEL_AIR : AIR_TRAP_LEVEL_FLUID ); + currentLevelStatus[ AIR_TRAP_LEVEL_SENSOR_UPPER ] = ( TRUE == upper ? AIR_TRAP_LEVEL_AIR : AIR_TRAP_LEVEL_FLUID ); + + // Read the level after expiry of debouncing time for( airTrapLevelSensor = AIR_TRAP_LEVEL_SENSOR_LOWER; airTrapLevelSensor < NUM_OF_AIR_TRAP_LEVEL_SENSORS; airTrapLevelSensor++ ) { - // Get the current level sensor status - switch ( airTrapLevelSensor ) - { - case AIR_TRAP_LEVEL_SENSOR_LOWER: - currentLevelStatus = ( TRUE == lower ? AIR_TRAP_LEVEL_AIR : AIR_TRAP_LEVEL_FLUID ); - break; - - case AIR_TRAP_LEVEL_SENSOR_UPPER: - currentLevelStatus = ( TRUE == upper ? AIR_TRAP_LEVEL_AIR : AIR_TRAP_LEVEL_FLUID ); - break; - -#ifndef _VECTORCAST_ - // Since this is a for loop the default cannot be reached in VectorCAST for 100% coverage - - default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_HD_INVALID_LEVEL_SENSOR_ID, airTrapLevelSensor ) - break; -#endif - } - // Check if the current level sensor status is not the same as the recorded data - if ( currentLevelStatus != (AIR_TRAP_LEVELS_T) airTrapLevels[ airTrapLevelSensor ].data ) + if ( currentLevelStatus[ airTrapLevelSensor ] != (AIR_TRAP_LEVELS_T)airTrapLevels[ airTrapLevelSensor ].data ) { // If the debounce time is 0, start the timer if ( 0 == airTrapLevelsDebounceStartTime[ airTrapLevelSensor ] ) @@ -232,7 +216,8 @@ { // reset the debounce time airTrapLevelsDebounceStartTime[ airTrapLevelSensor ] = 0; - airTrapLevels[ airTrapLevelSensor ].data = (U32) currentLevelStatus; + // update recent level status + airTrapLevels[ airTrapLevelSensor ].data = (U32)currentLevelStatus[ airTrapLevelSensor ]; } } else @@ -383,11 +368,10 @@ //Turn on air pump if fluid reaches upper level. else if ( AIR_TRAP_LEVEL_FLUID == getAirTrapLevel( AIR_TRAP_LEVEL_SENSOR_UPPER ) ) { - if ( ( AIR_PUMP_STATE_OFF == getAirPumpState() ) || + if ( ( AIR_PUMP_STATE_OFF == getAirPumpState() ) && ( TRUE == didTimeout( airPumpOnDelayStartTime, AIR_PUMP_ON_DELAY_TIME_MS ) ) ) { setAirPumpState( AIR_PUMP_STATE_ON ); - airPumpOnDelayStartTime = getMSTimerCount(); airPumpUpperLevelCtr = 0; signalInitiatePressureStabilization( USE_SHORT_STABILIZATION_PERIOD ); } @@ -403,13 +387,14 @@ if ( airPumpUpperLevelCtr >= AIR_PUMP_UPPER_LEVEL_PERSISTENCE ) { setAirPumpState( AIR_PUMP_STATE_OFF ); + airPumpOnDelayStartTime = getMSTimerCount(); } } } // Transition to open valve state when air detected at lower level else if ( ( AIR_TRAP_LEVEL_AIR == getAirTrapLevel( AIR_TRAP_LEVEL_SENSOR_UPPER ) ) && - ( AIR_TRAP_LEVEL_AIR == getAirTrapLevel( AIR_TRAP_LEVEL_SENSOR_LOWER ) ) ) + ( AIR_TRAP_LEVEL_AIR == getAirTrapLevel( AIR_TRAP_LEVEL_SENSOR_LOWER ) ) ) { if ( AIR_PUMP_STATE_ON == getAirPumpState() ) { Index: firmware/App/Controllers/PresOccl.c =================================================================== diff -u -r2a7723dc3639de1f44b5e34be9adcad38582d07c -r134d96d197007eeafb2e8e41de941742f348f9db --- firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 2a7723dc3639de1f44b5e34be9adcad38582d07c) +++ firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 134d96d197007eeafb2e8e41de941742f348f9db) @@ -108,7 +108,7 @@ static const U32 EMPTY_SALINE_BAG_PERSISTENCE = ( 250 / TASK_GENERAL_INTERVAL ); ///< Time that saline bag looks empty before saying it is empty. #define PRES_ALARM_PERSISTENCE ( 1 * MS_PER_SECOND ) ///< Alarm persistence period for pressure alarms. -#define VEN_PRES_ALARM_PERSISTENCE 500 ///< Alarm persistence period for venous pressure alarms. +#define HIGH_VEN_PRES_ALARM_PERSISTENCE 500 ///< Alarm persistence period for high venous pressure alarm #define PRES_OCCL_ALARM_PERSISTENCE ( 3 * MS_PER_SECOND ) ///< Alarm persistence period for occlusion alarms #define VEN_OCCL_ALARM_PERSISTENCE 100 ///< Alarm persistence period for venous occlusion alarm. #define AIR_PUMP_TOLERANCE_TIMEOUT_MS (1 * MS_PER_SECOND ) ///< Time to allow increased maximum venous high limit @@ -229,8 +229,8 @@ // Initialize persistent pressure alarms initPersistentAlarm( ALARM_ID_HD_ARTERIAL_PRESSURE_LOW, 0, PRES_ALARM_PERSISTENCE ); initPersistentAlarm( ALARM_ID_HD_ARTERIAL_PRESSURE_HIGH, 0, PRES_ALARM_PERSISTENCE ); - initPersistentAlarm( ALARM_ID_HD_VENOUS_PRESSURE_LOW, 0, VEN_PRES_ALARM_PERSISTENCE ); - initPersistentAlarm( ALARM_ID_HD_VENOUS_PRESSURE_HIGH, 0, VEN_PRES_ALARM_PERSISTENCE ); + initPersistentAlarm( ALARM_ID_HD_VENOUS_PRESSURE_LOW, 0, PRES_ALARM_PERSISTENCE ); + initPersistentAlarm( ALARM_ID_HD_VENOUS_PRESSURE_HIGH, 0, HIGH_VEN_PRES_ALARM_PERSISTENCE ); initPersistentAlarm( ALARM_ID_HD_ARTERIAL_PRESSURE_OUT_OF_RANGE, 0, PRES_ALARM_PERSISTENCE ); initPersistentAlarm( ALARM_ID_HD_VENOUS_PRESSURE_OUT_OF_RANGE, 0, PRES_ALARM_PERSISTENCE ); initPersistentAlarm( ALARM_ID_HD_BP_OCCLUSION_OUT_OF_RANGE, 0, PRES_OCCL_ALARM_PERSISTENCE ); Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -r2a7723dc3639de1f44b5e34be9adcad38582d07c -r134d96d197007eeafb2e8e41de941742f348f9db --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 2a7723dc3639de1f44b5e34be9adcad38582d07c) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 134d96d197007eeafb2e8e41de941742f348f9db) @@ -93,7 +93,7 @@ SW_FAULT_ID_CAN_PARITY_ERROR, SW_FAULT_ID_CAN_PASSIVE_WARNING, SW_FAULT_ID_CAN_OFF_ERROR, - SW_FAULT_ID_HD_INVALID_LEVEL_SENSOR_ID, // 65 + SW_FAULT_ID_____AVAILABLE_2, // 65 SW_FAULT_ID_____AVAILABLE_3, SW_FAULT_ID_UTIL_TIME_WINDOWED_COUNT_ERROR, SW_FAULT_ID_ACCEL_INVALID_STATE,