Index: firmware/App/Controllers/AirTrap.c =================================================================== diff -u -rfba69244d94307e50fefaa1e88bcbb979584461e -rb4a4e908a52add3617f10b8c64daf695d5402f82 --- firmware/App/Controllers/AirTrap.c (.../AirTrap.c) (revision fba69244d94307e50fefaa1e88bcbb979584461e) +++ firmware/App/Controllers/AirTrap.c (.../AirTrap.c) (revision b4a4e908a52add3617f10b8c64daf695d5402f82) @@ -45,6 +45,7 @@ #define AIR_TRAP_LEVEL_DEBOUNCE_TIME_MS ( 400 ) ///< Air trap level sensor debounce time /// Persistence period for illegal level sensors fault. #define AIR_TRAP_ILLEGAL_LEVELS_TIMEOUT_MS ( 2 * MS_PER_SECOND ) ///< Air trap illegal values timeout (in ms) +#define AIR_TRAP_UPPER_LEVEL_FLUID_TIMEOUT_MS ( 60 * MS_PER_SECOND ) ///< Air trap upper level fluid timeout in milliseconds. /// Volume (in mL) of venous portion of blood circuit line. TODO - get actual volume from Systems. #define VENOUS_LINE_VOLUME_ML ( 200.0F ) @@ -87,6 +88,7 @@ static AIR_TRAP_STATE_T handleAirTrapManualControlState( void ); static AIR_TRAP_STATE_T handleAirTrapValveClosedState( void ); static AIR_TRAP_STATE_T handleAirTrapValveOpenState( void ); +static void checkAirTrapUpperLevelFluidTimeout( void ); static void publishAirTrapData( void ); /*********************************************************************//** @@ -120,7 +122,7 @@ } initPersistentAlarm( ALARM_ID_HD_AIR_TRAP_ILLEGAL_LEVELS, AIR_TRAP_ILLEGAL_LEVELS_TIMEOUT_MS, AIR_TRAP_ILLEGAL_LEVELS_TIMEOUT_MS ); - + initPersistentAlarm( ALARM_ID_HD_AIR_TRAP_UPPER_LEVEL_FLUID_TIME_OUT, 0, AIR_TRAP_UPPER_LEVEL_FLUID_TIMEOUT_MS ); } /*********************************************************************//** @@ -364,6 +366,8 @@ { AIR_TRAP_STATE_T result = AIR_TRAP_VALVE_CLOSED_STATE; + checkAirTrapUpperLevelFluidTimeout(); + // Air pump stop time based on the blood flow rate S32 qB = abs( getTargetBloodFlowRate() ); U32 qBx = ( 0 == qB ? MIN_SET_BLOOD_FLOW_RATE : (U32)qB ); @@ -449,6 +453,8 @@ { AIR_TRAP_STATE_T result = AIR_TRAP_VALVE_OPEN_STATE; + checkAirTrapUpperLevelFluidTimeout(); + // Transition to manual valve control state when requested if ( TRUE == pendingStopAirTrapController ) { @@ -521,6 +527,22 @@ /*********************************************************************//** * @brief + * The checkAirTrapUpperLevelFluidTimeout function checks whether the air + * trap upper level is detecting fluid and then updates the persistent alarm. + * @details Inputs: none + * @details Outputs: none + * @return none + *************************************************************************/ +static void checkAirTrapUpperLevelFluidTimeout( void ) +{ + if ( AIR_TRAP_LEVEL_FLUID == getRawAirTrapLevel( AIR_TRAP_LEVEL_SENSOR_UPPER ) ) + { + checkPersistentAlarm( ALARM_ID_HD_AIR_TRAP_UPPER_LEVEL_FLUID_TIME_OUT, TRUE, (F32)AIR_TRAP_LEVEL_FLUID, (F32)AIR_TRAP_LEVEL_FLUID ); + } +} + +/*********************************************************************//** + * @brief * The publishAirTrapData function publishes air trap data at the set interval. * @details Inputs: airTrapLevels[], rawAirTrapLevels[] * @details Outputs: if broadcast is due, send air trap data