Index: firmware/App/Controllers/PresOccl.c =================================================================== diff -u -r23ce6838f032dc4ee298a2c887edae09aec28857 -r2c8547abb99803d8e09918db0e4c66d45c9a15ad --- firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 23ce6838f032dc4ee298a2c887edae09aec28857) +++ firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 2c8547abb99803d8e09918db0e4c66d45c9a15ad) @@ -502,7 +502,7 @@ // Check arterial pressure during treatment mode against either user set limits or fixed max limits depending on treatment state if ( ( MODE_TREA == getCurrentOperationMode() ) && ( ( ( TREATMENT_DIALYSIS_STATE == txState ) && ( DIALYSIS_UF_STATE == getDialysisState() ) ) || - ( ( TREATMENT_STOP_STATE == txState ) && ( TRUE == isBloodPumpRunning() ) ) ) ) + ( ( TREATMENT_STOP_STATE == txState ) && ( isBloodPumpRunning() != FALSE ) ) ) ) { BOOL artPresLow, artPresHigh; @@ -520,7 +520,7 @@ SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_ARTERIAL_PRESSURE_HIGH, artPres, (F32)currentArterialMaxLimit ); } } - else if ( ( MODE_TREA == getCurrentOperationMode() ) && ( TRUE == isBloodPumpRunning() ) ) // All treatment states not covered by the if above + else if ( ( MODE_TREA == getCurrentOperationMode() ) && ( isBloodPumpRunning() != FALSE ) ) // All treatment states not covered by the if above { BOOL artPresLow = ( artPres < ARTERIAL_PRESSURE_LIMIT_MIN_MMHG ? TRUE : FALSE ); BOOL artPresHigh = ( artPres > ARTERIAL_PRESSURE_LIMIT_MAX_MMHG ? TRUE : FALSE ); @@ -570,7 +570,7 @@ // Check venous pressure during treatment mode against either user set limits or fixed max limits depending on treatment state if ( ( MODE_TREA == getCurrentOperationMode() ) && ( ( ( TREATMENT_DIALYSIS_STATE == txState ) && ( DIALYSIS_UF_STATE == getDialysisState() ) && ( TRUE == didTimeout( venPressureLimitDelayStart, VENOUS_PRESSURE_LIMIT_DELAY_MS ) ) ) || - ( ( TREATMENT_STOP_STATE == txState ) && ( TRUE == isBloodPumpRunning() ) ) ) ) + ( ( TREATMENT_STOP_STATE == txState ) && ( isBloodPumpRunning() != FALSE ) ) ) ) { BOOL venPresLow, venPresHigh; @@ -595,7 +595,7 @@ SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_VENOUS_PRESSURE_HIGH, venPres, currentVenousMaxLimit ); } } - else if ( ( MODE_TREA == getCurrentOperationMode() ) && ( TRUE == isBloodPumpRunning() ) ) // All treatment states not covered by the if statement above + else if ( ( MODE_TREA == getCurrentOperationMode() ) && ( isBloodPumpRunning() != FALSE ) ) // All treatment states not covered by the if statement above { BOOL venPresLow = ( venPres < VENOUS_PRESSURE_LIMIT_MIN_MMHG ? TRUE : FALSE ); BOOL venPresHigh = ( venPres > VENOUS_PRESSURE_LIMIT_MAX_MMHG ? TRUE : FALSE ); Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -r854f6cd4152f99523debe37d3e7691d08141280a -r2c8547abb99803d8e09918db0e4c66d45c9a15ad --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 854f6cd4152f99523debe37d3e7691d08141280a) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 2c8547abb99803d8e09918db0e4c66d45c9a15ad) @@ -1317,10 +1317,12 @@ BOOL result = TRUE; CRITICAL_DATAS_T proposedNewArtLimitWindow; CRITICAL_DATAS_T proposedNewVenLimitWindow; + CRITICAL_DATAS_T proposedNewVenLimitAsymmetric; PRESSURE_LIMIT_CHANGE_RESPONSE_T respRecord = { FALSE, 0, 0, 0 }; - proposedNewArtLimitWindow.sInt = data->artPresLimitWindowmmHg; - proposedNewVenLimitWindow.sInt = data->venPresLimitWindowmmHg; + proposedNewArtLimitWindow.sInt = data->artPresLimitWindowmmHg; + proposedNewVenLimitWindow.sInt = data->venPresLimitWindowmmHg; + proposedNewVenLimitAsymmetric.sInt = data->venPresLimitAsymmetricmmHg; // Check ranges for changed limits if ( FALSE == isTreatmentParamInRange( TREATMENT_PARAM_ART_PRES_LIMIT_WINDOW, proposedNewArtLimitWindow ) ) @@ -1333,18 +1335,25 @@ respRecord.rejReasonCode = REQUEST_REJECT_REASON_PARAM_OUT_OF_RANGE; result = FALSE; } + if ( FALSE == isTreatmentParamInRange( TREATMENT_PARAM_VEN_PRES_LIMIT_ASYMMETRIC, proposedNewVenLimitAsymmetric ) ) + { + respRecord.rejReasonCode = REQUEST_REJECT_REASON_PARAM_OUT_OF_RANGE; + result = FALSE; + } // Set overall result - are changes accepted? respRecord.accepted = result; // If changes accepted, set new pressure limits if ( TRUE == result ) { - S32 artLimitWindow = getTreatmentParameterS32( TREATMENT_PARAM_ART_PRES_LIMIT_WINDOW ); - S32 venLimitWindow = getTreatmentParameterS32( TREATMENT_PARAM_VEN_PRES_LIMIT_WINDOW ); + S32 artLimitWindow = getTreatmentParameterS32( TREATMENT_PARAM_ART_PRES_LIMIT_WINDOW ); + S32 venLimitWindow = getTreatmentParameterS32( TREATMENT_PARAM_VEN_PRES_LIMIT_WINDOW ); + S32 venLimitAsymmetric = getTreatmentParameterS32( TREATMENT_PARAM_VEN_PRES_LIMIT_ASYMMETRIC ); setTreatmentParameterS32( TREATMENT_PARAM_ART_PRES_LIMIT_WINDOW, data->artPresLimitWindowmmHg ); setTreatmentParameterS32( TREATMENT_PARAM_VEN_PRES_LIMIT_WINDOW, data->venPresLimitWindowmmHg ); + setTreatmentParameterS32( TREATMENT_PARAM_VEN_PRES_LIMIT_ASYMMETRIC, data->venPresLimitAsymmetricmmHg ); if ( abs( artLimitWindow - data->artPresLimitWindowmmHg ) > 0 ) { @@ -1354,11 +1363,16 @@ { sendTreatmentLogEventData( VENOUS_PRESSURE_LIMIT_WINDOW_CHANGE_EVENT, (F32)venLimitWindow, (F32)data->venPresLimitWindowmmHg ); } + if ( abs( venLimitAsymmetric - data->venPresLimitAsymmetricmmHg ) > 0 ) + { + sendTreatmentLogEventData( VENOUS_PRESSURE_LIMIT_ASYM_CHANGE_EVENT, (F32)venLimitAsymmetric, (F32)data->venPresLimitAsymmetricmmHg ); + } } // Read back limits for transmit to UI. - respRecord.artPresLimitWindowmmHg = getTreatmentParameterS32( TREATMENT_PARAM_ART_PRES_LIMIT_WINDOW ); - respRecord.venPresLimitWindowmmHg = getTreatmentParameterS32( TREATMENT_PARAM_VEN_PRES_LIMIT_WINDOW ); + respRecord.artPresLimitWindowmmHg = getTreatmentParameterS32( TREATMENT_PARAM_ART_PRES_LIMIT_WINDOW ); + respRecord.venPresLimitWindowmmHg = getTreatmentParameterS32( TREATMENT_PARAM_VEN_PRES_LIMIT_WINDOW ); + respRecord.venPresLimitAsymmetricmmHg = getTreatmentParameterS32( TREATMENT_PARAM_VEN_PRES_LIMIT_ASYMMETRIC ); // Send response sendPressureLimitsChangeResponse( &respRecord ); Index: firmware/App/Modes/ModeTreatment.h =================================================================== diff -u -r854f6cd4152f99523debe37d3e7691d08141280a -r2c8547abb99803d8e09918db0e4c66d45c9a15ad --- firmware/App/Modes/ModeTreatment.h (.../ModeTreatment.h) (revision 854f6cd4152f99523debe37d3e7691d08141280a) +++ firmware/App/Modes/ModeTreatment.h (.../ModeTreatment.h) (revision 2c8547abb99803d8e09918db0e4c66d45c9a15ad) @@ -69,6 +69,7 @@ { S32 artPresLimitWindowmmHg; S32 venPresLimitWindowmmHg; + S32 venPresLimitAsymmetricmmHg; } PRESSURE_LIMIT_CHANGE_REQUEST_T; /// Payload record structure for the in-line pressure limits change response. @@ -78,6 +79,7 @@ U32 rejReasonCode; S32 artPresLimitWindowmmHg; S32 venPresLimitWindowmmHg; + S32 venPresLimitAsymmetricmmHg; } PRESSURE_LIMIT_CHANGE_RESPONSE_T; /// Payload record structure for the treatment log 30 minutes periodic data. Index: firmware/App/Modes/ModeTreatmentParams.c =================================================================== diff -u -r854f6cd4152f99523debe37d3e7691d08141280a -r2c8547abb99803d8e09918db0e4c66d45c9a15ad --- firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision 854f6cd4152f99523debe37d3e7691d08141280a) +++ firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision 2c8547abb99803d8e09918db0e4c66d45c9a15ad) @@ -70,6 +70,7 @@ { CRITICAL_DATA_TYPE_U32, {.uInt=50}, {.uInt=150}, {.uInt=75} }, // TREATMENT_PARAM_RINSEBACK_FLOW_RATE { CRITICAL_DATA_TYPE_S32, {.sInt=100}, {.sInt=200}, {.sInt=100} }, // TREATMENT_PARAM_ART_PRES_LIMIT_WINDOW { CRITICAL_DATA_TYPE_S32, {.sInt=100}, {.sInt=200}, {.sInt=100} }, // TREATMENT_PARAM_VEN_PRES_LIMIT_WINDOW + { CRITICAL_DATA_TYPE_S32, {.sInt=20}, {.sInt=30}, {.sInt=20} }, // TREATMENT_PARAM_VEN_PRES_LIMIT_ASYMMETRIC { CRITICAL_DATA_TYPE_F32, {.sFlt=0.0}, {.sFlt=1.0}, {.sFlt=0.0} }, // TREATMENT_PARAM_HEPARIN_DISPENSE_RATE { CRITICAL_DATA_TYPE_F32, {.sFlt=0.0}, {.sFlt=2.0}, {.sFlt=0.0} }, // TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME { CRITICAL_DATA_TYPE_F32, {.sFlt=35.0}, {.sFlt=37.0}, {.sFlt=37.0} }, // TREATMENT_PARAM_DIALYSATE_TEMPERATURE @@ -365,6 +366,7 @@ origTreatmentParams.treatmentDuration_min = getCriticalData( &treatmentParameters[ TREATMENT_PARAM_TREATMENT_DURATION ] ).uInt; origTreatmentParams.arterialPressureLimitWindow_mmHg = getCriticalData( &treatmentParameters[ TREATMENT_PARAM_ART_PRES_LIMIT_WINDOW ] ).sInt; origTreatmentParams.venousPressureLimitWindow_mmHg = getCriticalData( &treatmentParameters[ TREATMENT_PARAM_VEN_PRES_LIMIT_WINDOW ] ).sInt; + origTreatmentParams.venousPressureLimitAsymmetric_mmHg = getCriticalData( &treatmentParameters[ TREATMENT_PARAM_VEN_PRES_LIMIT_ASYMMETRIC ] ).sInt; // If using Heparin in this treatment, set state to stopped otherwise off if ( ( stagedParams[ TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ].sFlt > 0.0 ) || ( stagedParams[ TREATMENT_PARAM_HEPARIN_DISPENSE_RATE ].sFlt > 0.0 ) ) Index: firmware/App/Modes/ModeTreatmentParams.h =================================================================== diff -u -r854f6cd4152f99523debe37d3e7691d08141280a -r2c8547abb99803d8e09918db0e4c66d45c9a15ad --- firmware/App/Modes/ModeTreatmentParams.h (.../ModeTreatmentParams.h) (revision 854f6cd4152f99523debe37d3e7691d08141280a) +++ firmware/App/Modes/ModeTreatmentParams.h (.../ModeTreatmentParams.h) (revision 2c8547abb99803d8e09918db0e4c66d45c9a15ad) @@ -53,6 +53,7 @@ U32 rinsebackFlowRate_mL_min; ///< User set rinseback flow rate (in mL/min) S32 arterialPressureLimitWindow_mmHg; ///< User set alarm limit window for arterial pressure (in mmHg) S32 venousPressureLimitWindow_mmHg; ///< User set alarm limit window for venous pressure (in mmHg) + S32 venousPressureLimitAsymmetric_mmHg; ///< User set alarm limit asymmetric for venous pressure (in mmHg) F32 heparinDispenseRate_mL_hr; ///< User set heparin dispense rate (in mL/hr) F32 heparinBolusVolume_mL; ///< User set heparin bolus volume (in mL) F32 dialysateTemperature_degC; ///< User set dialysate temperature (in deg C) @@ -66,6 +67,7 @@ U32 treatmentDuration_min; ///< Original treatment duration (in min) set by user before treatment start S32 arterialPressureLimitWindow_mmHg; ///< Original alarm limit window for arterial pressure (in mmHg) set by user before treatment start S32 venousPressureLimitWindow_mmHg; ///< Original alarm limit window for venous pressure (in mmHg) set by user before treatment start + S32 venousPressureLimitAsymmetric_mmHg; ///< Original alarm limit asymmetric for venous pressure (in mmHg) set by user before treatment start F32 uFVolume_L; ///< Original ultrafiltration volume (in L) set by user before treatment start } ADJ_TREATMENT_PARAMS_T; Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -r38355442b06187fe5d57deca647b3adf2fa26b89 -r2c8547abb99803d8e09918db0e4c66d45c9a15ad --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 38355442b06187fe5d57deca647b3adf2fa26b89) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 2c8547abb99803d8e09918db0e4c66d45c9a15ad) @@ -75,7 +75,7 @@ static const HD_OP_MODE_T MODE_TRANSITION_TABLE[ NUM_OF_MODES - 1 ][ NUM_OF_MODES - 1 ] = { // From to-> FAULT SERVICE INIT STANBY TRT.PARAMS PRE-TREAT TREATMENT POST_TREA /* FAUL */{ MODE_FAUL, MODE_SERV, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, }, -/* SERV */{ MODE_FAUL, MODE_SERV, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, }, +/* SERV */{ MODE_NLEG, MODE_SERV, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, }, /* INIT */{ MODE_FAUL, MODE_NLEG, MODE_INIT, MODE_STAN, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, }, /* STAN */{ MODE_FAUL, MODE_SERV, MODE_INIT, MODE_STAN, MODE_TPAR, MODE_NLEG, MODE_NLEG, MODE_NLEG, }, /* TPAR */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_STAN, MODE_TPAR, MODE_PRET, MODE_NLEG, MODE_NLEG, },