Index: firmware/App/Controllers/AirTrap.c =================================================================== diff -u -r1e806f55dd70e314a8bbb70c5233443dc807998a -re7525696d18a5a7c7481fc6a920e95d227a6e72f --- firmware/App/Controllers/AirTrap.c (.../AirTrap.c) (revision 1e806f55dd70e314a8bbb70c5233443dc807998a) +++ firmware/App/Controllers/AirTrap.c (.../AirTrap.c) (revision e7525696d18a5a7c7481fc6a920e95d227a6e72f) @@ -345,6 +345,7 @@ F32 dutyCycle = ( ( QUADRATIC_COEFFICIENT * ( h14Pressure * h14Pressure ) ) - ( LINEAR_COEFFICIENT * ( h14Pressure ) ) ) + CONSTANT_TERM; dutyCycle = ( dutyCycle / (F32)AIR_PUMP_MAX_PWM ) * FRACTION_TO_PERCENT_FACTOR; + return dutyCycle; } @@ -359,12 +360,17 @@ static AIR_TRAP_STATE_T handleAirTrapManualControlState( void ) { AIR_TRAP_STATE_T result = AIR_TRAP_MANUAL_CONTROL_STATE; + BOOL setPowerResult; // Transition to valve control states when requested if ( TRUE == pendingStartAirTrapController ) { pendingStartAirTrapController = FALSE; - setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); + setPowerResult = setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); + if ( FALSE == setPowerResult ) + { + // TODO: Alarm + } set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); result = AIR_TRAP_CLOSED_STATE; @@ -385,7 +391,7 @@ static AIR_TRAP_STATE_T handleAirTrapClosedState( void ) { AIR_TRAP_STATE_T result = AIR_TRAP_CLOSED_STATE; - + BOOL setPowerResult; // Transition to manual control state when requested if ( TRUE == pendingStopAirTrapController ) { @@ -401,7 +407,11 @@ { set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_OPEN_STATE ); // open valve H13 to allow air to be pumped into air trap from atmosphere airTrapAirPumpLowerPowerLevel.data = getCalculatedAirPumpDutyCycle(); - setAirPumpState( AIR_PUMP_STATE_ON, getAirPumpLowerPowerLevel() ); + setPowerResult = setAirPumpState( AIR_PUMP_STATE_ON, getAirPumpLowerPowerLevel() ); + if ( FALSE == setPowerResult ) + { + // TODO: Alarm + } airTrapLowerStartTime = getMSTimerCount(); signalInitiatePressureStabilization( USE_SHORT_STABILIZATION_PERIOD ); SEND_EVENT_WITH_2_U32_DATA( TD_EVENT_AIR_TRAP_LOWER, ON, 0 ); @@ -413,7 +423,11 @@ else if ( ( airTrapWasFilledAtStartOfTreatement != TRUE ) || ( AIR_TRAP_LEVEL_AIR == getLevelSensorState( H17_LEVL ) ) ) { - setAirPumpState( AIR_PUMP_STATE_ON, getAirPumpRaisePowerLevel() ); + setPowerResult = setAirPumpState( AIR_PUMP_STATE_ON, getAirPumpRaisePowerLevel() ); + if ( FALSE == setPowerResult ) + { + // TODO: Alarm + } set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_OPEN_STATE ); // open valve H20 to allow air to be pumped out of air trap to atmosphere airTrapFillStartTime = getMSTimerCount(); SEND_EVENT_WITH_2_U32_DATA( TD_EVENT_AIR_TRAP_FILL, ON, 0 ); @@ -435,12 +449,16 @@ static AIR_TRAP_STATE_T handleAirTrapRaiseLevelState( void ) { AIR_TRAP_STATE_T result = AIR_TRAP_RAISE_LEVEL_STATE; - + BOOL setPowerResult; // Transition to manual valve control state when requested if ( TRUE == pendingStopAirTrapController ) { pendingStopAirTrapController = FALSE; - setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); + setPowerResult = setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); + if ( FALSE == setPowerResult ) + { + // TODO: Alarm + } set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); result = AIR_TRAP_MANUAL_CONTROL_STATE; } @@ -451,7 +469,11 @@ set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_OPEN_STATE ); // open valve H13 to allow air to be pumped into air trap from atmosphere airTrapAirPumpLowerPowerLevel.data = getCalculatedAirPumpDutyCycle(); - setAirPumpState( AIR_PUMP_STATE_ON, getAirPumpLowerPowerLevel() ); + setPowerResult = setAirPumpState( AIR_PUMP_STATE_ON, getAirPumpLowerPowerLevel() ); + if ( FALSE == setPowerResult ) + { + // TODO: Alarm + } // adjust the air trap lower delay start time after fill complete airTrapLowerDelayStartTime = u32DiffWithWrap( AIR_PUMP_ON_DELAY_ADJUST_AFTER_FILL, getMSTimerCount() ); airTrapLowerStartTime = getMSTimerCount(); @@ -475,20 +497,29 @@ static AIR_TRAP_STATE_T handleAirTrapLowerlevelState( void ) { AIR_TRAP_STATE_T result = AIR_TRAP_LOWER_LEVEL_STATE; + BOOL setPowerResult; // Transition to manual valve control state when requested if ( TRUE == pendingStopAirTrapController ) { pendingStopAirTrapController = FALSE; - setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); + setPowerResult = setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); + if ( FALSE == setPowerResult ) + { + // TODO: Alarm + } set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); result = AIR_TRAP_MANUAL_CONTROL_STATE; } // Transition back to closed state when air trap lower level operation completed when air detected at upper level else if ( ( TRUE == didTimeout( airTrapLowerStartTime, AIR_PUMP_STOP_TIME_MS ) ) || ( AIR_TRAP_LEVEL_AIR == getRawLevelSensorState( H16_LEVL ) ) ) { - setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); + setPowerResult = setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); + if ( FALSE == setPowerResult ) + { + // TODO: Alarm + } set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); airTrapLowerDelayStartTime = getMSTimerCount(); signalLowVenousPressureCheck(); @@ -510,6 +541,12 @@ static F32 getAirPumpRaisePowerLevel( void ) { F32 result = getF32OverrideValue( &airTrapAirPumpRaisePowerLevel ); + result = RANGE( result, AIR_PUMP_DUTY_CYCLE_MIN, AIR_PUMP_DUTY_CYCLE_MAX ); + // limit the duty cycle to 24 if power level requested between above 0 and 24, 24 excluded + if ( TRUE == ( ( result > AIR_PUMP_DUTY_CYCLE_MIN ) && ( result < AIR_PUMP_DUTY_CYCLE_LIMIT ) ) ) + { + result = AIR_PUMP_DUTY_CYCLE_LIMIT; + } return result; } @@ -525,6 +562,12 @@ static F32 getAirPumpLowerPowerLevel( void ) { F32 result = getF32OverrideValue( &airTrapAirPumpLowerPowerLevel ); + result = RANGE( result, AIR_PUMP_DUTY_CYCLE_MIN, AIR_PUMP_DUTY_CYCLE_MAX ); + // limit the duty cycle to 24 if power level requested between above 0 and 24, 24 excluded + if ( TRUE == ( ( result > AIR_PUMP_DUTY_CYCLE_MIN ) && ( result < AIR_PUMP_DUTY_CYCLE_LIMIT ) ) ) + { + result = AIR_PUMP_DUTY_CYCLE_LIMIT; + } return result; }