Index: firmware/App/Controllers/BloodFlow.c =================================================================== diff -u -r61716bc97ecca8af1ec560333844a8cf602eccb0 -rcf0f5e54c1a7af4d8a739cbd677d899d95e4019b --- firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 61716bc97ecca8af1ec560333844a8cf602eccb0) +++ firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision cf0f5e54c1a7af4d8a739cbd677d899d95e4019b) @@ -478,6 +478,21 @@ /*********************************************************************//** * @brief + * The isBloodPumpRampComplete function returns whether the blood pump has + * completed its ramp up and entered control state (closed or open loop). + * @details Inputs: bloodPumpState + * @details Outputs: none + * @return TRUE if pump is in control state, FALSE if not + *************************************************************************/ +BOOL isBloodPumpRampComplete( void ) +{ + BOOL result = ( BLOOD_PUMP_CONTROL_TO_TARGET_STATE == bloodPumpState ? TRUE : FALSE ); + + return result; +} + +/*********************************************************************//** + * @brief * The resetBloodPumpRotorCount function resets the blood pump rotor counter * that is a proxy for cartridge wear. Call this function after a new cartridge * has been installed. Index: firmware/App/Controllers/BloodFlow.h =================================================================== diff -u -r24b2fe72608344e67ef37234085d15ad5e4fcc37 -rcf0f5e54c1a7af4d8a739cbd677d899d95e4019b --- firmware/App/Controllers/BloodFlow.h (.../BloodFlow.h) (revision 24b2fe72608344e67ef37234085d15ad5e4fcc37) +++ firmware/App/Controllers/BloodFlow.h (.../BloodFlow.h) (revision cf0f5e54c1a7af4d8a739cbd677d899d95e4019b) @@ -64,6 +64,7 @@ U32 getBloodPumpMotorCount( void ); U32 getBloodPumpRotorCount( void ); BOOL isBloodPumpRunning( void ); +BOOL isBloodPumpRampComplete( void ); void resetBloodPumpRotorCount( void ); SELF_TEST_STATUS_T execBloodFlowTest( void ); Index: firmware/App/Controllers/DialInFlow.c =================================================================== diff -u -r9e6abdf44f5cac7fd713655616a46544016750a1 -rcf0f5e54c1a7af4d8a739cbd677d899d95e4019b --- firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision 9e6abdf44f5cac7fd713655616a46544016750a1) +++ firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision cf0f5e54c1a7af4d8a739cbd677d899d95e4019b) @@ -398,6 +398,21 @@ return isDialInPumpOn; } +/*********************************************************************//** + * @brief + * The isDialInPumpRampComplete function returns whether the dialysate inlet pump has + * completed its ramp up and entered control state (closed or open loop). + * @details Inputs: dialInPumpState + * @details Outputs: none + * @return TRUE if pump is in control state, FALSE if not + *************************************************************************/ +BOOL isDialInPumpRampComplete( void ) +{ + BOOL result = ( DIAL_IN_PUMP_CONTROL_TO_TARGET_STATE == dialInPumpState ? TRUE : FALSE ); + + return result; +} + /*********************************************************************//** * @brief * The execDialInFlowMonitor function executes the dialIn flow monitor. Index: firmware/App/Controllers/DialInFlow.h =================================================================== diff -u -r24b2fe72608344e67ef37234085d15ad5e4fcc37 -rcf0f5e54c1a7af4d8a739cbd677d899d95e4019b --- firmware/App/Controllers/DialInFlow.h (.../DialInFlow.h) (revision 24b2fe72608344e67ef37234085d15ad5e4fcc37) +++ firmware/App/Controllers/DialInFlow.h (.../DialInFlow.h) (revision cf0f5e54c1a7af4d8a739cbd677d899d95e4019b) @@ -59,6 +59,7 @@ void signalDialInPumpRotorHallSensor( void ); BOOL homeDialInPump( void ); BOOL isDialInPumpRunning( void ); +BOOL isDialInPumpRampComplete( void ); SELF_TEST_STATUS_T execDialInFlowTest( void ); Index: firmware/App/Controllers/DialOutFlow.c =================================================================== diff -u -r61716bc97ecca8af1ec560333844a8cf602eccb0 -rcf0f5e54c1a7af4d8a739cbd677d899d95e4019b --- firmware/App/Controllers/DialOutFlow.c (.../DialOutFlow.c) (revision 61716bc97ecca8af1ec560333844a8cf602eccb0) +++ firmware/App/Controllers/DialOutFlow.c (.../DialOutFlow.c) (revision cf0f5e54c1a7af4d8a739cbd677d899d95e4019b) @@ -461,6 +461,21 @@ /*********************************************************************//** * @brief + * The isDialOutPumpRampComplete function returns whether the dialysate outlet pump has + * completed its ramp up and entered control state (closed or open loop). + * @details Inputs: dialOutPumpState + * @details Outputs: none + * @return TRUE if pump is in control state, FALSE if not + *************************************************************************/ +BOOL isDialOutPumpRampComplete( void ) +{ + BOOL result = ( DIAL_OUT_PUMP_CONTROL_TO_TARGET_STATE == dialOutPumpState ? TRUE : FALSE ); + + return result; +} + +/*********************************************************************//** + * @brief * The execDialOutFlowMonitor function executes the dialysate outlet pump * and load cell sensor monitor. Checks are performed. Data is published * at appropriate interval. Index: firmware/App/Controllers/DialOutFlow.h =================================================================== diff -u -r61716bc97ecca8af1ec560333844a8cf602eccb0 -rcf0f5e54c1a7af4d8a739cbd677d899d95e4019b --- firmware/App/Controllers/DialOutFlow.h (.../DialOutFlow.h) (revision 61716bc97ecca8af1ec560333844a8cf602eccb0) +++ firmware/App/Controllers/DialOutFlow.h (.../DialOutFlow.h) (revision cf0f5e54c1a7af4d8a739cbd677d899d95e4019b) @@ -74,6 +74,7 @@ void signalDialOutControl( void ); BOOL homeDialOutPump( void ); BOOL isDialOutPumpRunning( void ); +BOOL isDialOutPumpRampComplete( void ); // SELF_TEST_STATUS_T execDialOutFlowTest( void ); // TODO - implement later Index: firmware/App/Controllers/PresOccl.c =================================================================== diff -u -r61716bc97ecca8af1ec560333844a8cf602eccb0 -rcf0f5e54c1a7af4d8a739cbd677d899d95e4019b --- firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 61716bc97ecca8af1ec560333844a8cf602eccb0) +++ firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision cf0f5e54c1a7af4d8a739cbd677d899d95e4019b) @@ -474,6 +474,13 @@ F32 artLowLimit = (F32)getTreatmentParameterS32( TREATMENT_PARAM_ART_PRESSURE_LOW_LIMIT ); F32 artHighLimit = (F32)getTreatmentParameterS32( TREATMENT_PARAM_ART_PRESSURE_HIGH_LIMIT ); + // If BP is ramping up, extend range to outer limits as pressure may not yet have reached expected range. + if ( isBloodPumpRampComplete() != TRUE ) + { + artLowLimit = (F32)getS32TreatmentParamLowerRangeLimit( TREATMENT_PARAM_ART_PRESSURE_LOW_LIMIT ); + artHighLimit = (F32)getS32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_ART_PRESSURE_HIGH_LIMIT ); + } + // Check arterial pressure is within user set alarm limits if ( TRUE == isPersistentAlarmTriggered( ALARM_ID_ARTERIAL_PRESSURE_LOW, artPres < artLowLimit ) ) { @@ -519,6 +526,13 @@ F32 venLowLimit = (F32)getTreatmentParameterS32( TREATMENT_PARAM_VEN_PRESSURE_LOW_LIMIT ); F32 venHighLimit = (F32)getTreatmentParameterS32( TREATMENT_PARAM_VEN_PRESSURE_HIGH_LIMIT ); + // If BP is ramping up, extend range to outer limits as pressure may not yet have reached expected range. + if ( isBloodPumpRampComplete() != TRUE ) + { + venLowLimit = (F32)getS32TreatmentParamLowerRangeLimit( TREATMENT_PARAM_VEN_PRESSURE_LOW_LIMIT ); + venHighLimit = (F32)getS32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_VEN_PRESSURE_HIGH_LIMIT ); + } + // Cannot monitor for low venous pressure while venting air trap if ( getValveAirTrapStatus() != STATE_OPEN ) { Index: firmware/App/Modes/ModeTreatmentParams.c =================================================================== diff -u -r61716bc97ecca8af1ec560333844a8cf602eccb0 -rcf0f5e54c1a7af4d8a739cbd677d899d95e4019b --- firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision 61716bc97ecca8af1ec560333844a8cf602eccb0) +++ firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision cf0f5e54c1a7af4d8a739cbd677d899d95e4019b) @@ -631,6 +631,56 @@ /*********************************************************************//** * @brief + * The getS32TreatmentParamLowerRangeLimit function returns the lower range + * limit for a given signed integer treatment parameter. + * @details Inputs: none + * @details Outputs: none + * @param param ID of parameter to get lower range limit for + * @return lower range limit for given signed integer treatment parameter + *************************************************************************/ +S32 getS32TreatmentParamLowerRangeLimit( TREATMENT_PARAM_T param ) +{ + S32 result = 0; + + if ( param < NUM_OF_TREATMENT_PARAMS ) + { + result = TREAT_PARAMS_PROPERTIES[ param ].max.sInt; + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_GET_S32_PARAM_MIN_LIMIT, (U32)param ) + } + + return result; +} + +/*********************************************************************//** + * @brief + * The getS32TreatmentParamUpperRangeLimit function returns the upper range + * limit for a given signed integer treatment parameter. + * @details Inputs: none + * @details Outputs: none + * @param param ID of parameter to get upper range limit for + * @return upper range limit for given signed integer treatment parameter + *************************************************************************/ +S32 getS32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_T param ) +{ + S32 result = 0; + + if ( param < NUM_OF_TREATMENT_PARAMS ) + { + result = TREAT_PARAMS_PROPERTIES[ param ].max.sInt; + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_GET_S32_PARAM_MAX_LIMIT, (U32)param ) + } + + return result; +} + +/*********************************************************************//** + * @brief * The extractTreatmentParamsFromPayload function extracts the individual * treatment parameters received from the UI into a staging array where * they will be validated and stay until user confirms them. Index: firmware/App/Modes/ModeTreatmentParams.h =================================================================== diff -u -rb03a3ed91ebe15cfb419e34018f8fe600e744b4b -rcf0f5e54c1a7af4d8a739cbd677d899d95e4019b --- firmware/App/Modes/ModeTreatmentParams.h (.../ModeTreatmentParams.h) (revision b03a3ed91ebe15cfb419e34018f8fe600e744b4b) +++ firmware/App/Modes/ModeTreatmentParams.h (.../ModeTreatmentParams.h) (revision cf0f5e54c1a7af4d8a739cbd677d899d95e4019b) @@ -93,6 +93,8 @@ S32 getTreatmentParameterS32( TREATMENT_PARAM_T param ); // Get a specified signed integer treatment parameter F32 getTreatmentParameterF32( TREATMENT_PARAM_T param ); // Get a specified floating point treatment parameter BOOL isTreatmentParamInRange( TREATMENT_PARAM_T param, CRITICAL_DATAS_T value ); // Check range for a proposed treatment parameter value +S32 getS32TreatmentParamLowerRangeLimit( TREATMENT_PARAM_T param ); // Get the lower range limit for a signed integer treatment parameter +S32 getS32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_T param ); // Get the upper range limit for a signed integer treatment parameter F32 getUltrafiltrationVolumeOriginal( void ); // Get the original ultrafiltration volume, set in pre-treatment mode by user. F32 getUltrafiltrationRateOriginal( void ); // Get/calculate the original ultrafiltration rate, by ultrafiltration volume and treatment duration set in pre-treatment mode by user. Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -r61716bc97ecca8af1ec560333844a8cf602eccb0 -rcf0f5e54c1a7af4d8a739cbd677d899d95e4019b --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 61716bc97ecca8af1ec560333844a8cf602eccb0) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision cf0f5e54c1a7af4d8a739cbd677d899d95e4019b) @@ -975,13 +975,20 @@ { if ( TRUE == isSyringePlungerFound() ) { - if ( TRUE == isSyringePumpPrimed() ) + if ( TRUE == isSyringeVolumeAdequate() ) { - state = DRY_SELF_TESTS_COMPLETE_STATE; + if ( TRUE == isSyringePumpPrimed() ) + { + state = DRY_SELF_TESTS_COMPLETE_STATE; + } + else + { + primeSyringePump(); + } } else { - primeSyringePump(); + retractSyringePump(); } } else Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -r61716bc97ecca8af1ec560333844a8cf602eccb0 -rcf0f5e54c1a7af4d8a739cbd677d899d95e4019b --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 61716bc97ecca8af1ec560333844a8cf602eccb0) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision cf0f5e54c1a7af4d8a739cbd677d899d95e4019b) @@ -164,6 +164,8 @@ SW_FAULT_ID_PHANTOM_INTERRUPT, SW_FAULT_ID_UNEXPECTED_DMA_INTERRUPT, // 130 SW_FAULT_ID_INVALID_TREATMENT_RESERVOIR_MANAGEMENT_STATE, + SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_GET_S32_PARAM_MIN_LIMIT, + SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_GET_S32_PARAM_MAX_LIMIT, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T;