Index: firmware/App/Modes/Dialysis.c =================================================================== diff -u -rd6455537609ee942efdfd776753214f1a7be334c -r1f91b5a53bda942b0967817bbd5e68a499dbf816 --- firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision d6455537609ee942efdfd776753214f1a7be334c) +++ firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision 1f91b5a53bda942b0967817bbd5e68a499dbf816) @@ -1,14 +1,14 @@ /************************************************************************** * -* Copyright (c) 2020-2022 Diality Inc. - All Rights Reserved. +* Copyright (c) 2020-2023 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file Dialysis.c * -* @author (last) Dara Navaei -* @date (last) 17-Oct-2022 +* @author (last) Michael Garthwaite +* @date (last) 19-Jan-2023 * * @author (original) Sean * @date (original) 15-Jan-2020 @@ -623,6 +623,8 @@ *************************************************************************/ void execDialysis( void ) { + DIALYSIS_STATE_T priorSubState = currentDialysisState; + // Check ultrafiltration max rate and accuracy during dialysis (even when ultrafiltration is paused). checkUFAccuracyAndVolume(); @@ -646,6 +648,10 @@ break; } + if ( priorSubState != currentDialysisState ) + { + SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_STATE_CHANGE, priorSubState, currentDialysisState ); + } // Publish saline bolus data at set interval (whether we are delivering one or not) publishSalineBolusData(); } @@ -661,6 +667,7 @@ static DIALYSIS_STATE_T handleDialysisUltrafiltrationState( void ) { DIALYSIS_STATE_T result = DIALYSIS_UF_STATE; + UF_STATE_T priorSubState = currentUFState; U32 preStop = getTreatmentParameterU32( TREATMENT_PARAM_HEPARIN_PRE_STOP_TIME ); F32 minRem = (F32)getTreatmentTimeRemainingSecs() / (F32)SEC_PER_MIN; @@ -697,6 +704,11 @@ break; } + if ( priorSubState != currentUFState ) + { + SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_STATE_CHANGE, priorSubState, currentUFState ); + } + return result; } @@ -712,6 +724,8 @@ { DIALYSIS_STATE_T result = DIALYSIS_SALINE_BOLUS_STATE; + SALINE_BOLUS_STATE_T priorSubState = currentSalineBolusState; + switch ( currentSalineBolusState ) { case SALINE_BOLUS_STATE_IDLE: @@ -736,6 +750,11 @@ break; } + if ( priorSubState != currentSalineBolusState ) + { + SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_STATE_CHANGE, priorSubState, currentSalineBolusState ); + } + return result; } @@ -1234,29 +1253,34 @@ { F32 loadCellPrimaryWeight, loadCellBackupWeight; F32 loadCellPreviousDrift, loadCellCurrentDrift; - F32 driftDiff = 0.0; + F32 driftDiff = 0.0F; U16 lcPrimaryIndex, lcBackupIndex; + HD_EVENT_ID_T event; if ( DG_RESERVOIR_1 == reservoirID ) { lcPrimaryIndex = LOAD_CELL_RESERVOIR_1_PRIMARY; - lcBackupIndex = LOAD_CELL_RESERVOIR_1_BACKUP; + lcBackupIndex = LOAD_CELL_RESERVOIR_1_BACKUP; + event = ( RESERVOIR_STEADY_CYCLE_START == cycle ? HD_EVENT_RSRVR_1_LOAD_CELL_START_VALUES : HD_EVENT_RSRVR_1_LOAD_CELL_END_VALUES ); } else { lcPrimaryIndex = LOAD_CELL_RESERVOIR_2_PRIMARY; - lcBackupIndex = LOAD_CELL_RESERVOIR_2_BACKUP; + lcBackupIndex = LOAD_CELL_RESERVOIR_2_BACKUP; + event = ( RESERVOIR_STEADY_CYCLE_START == cycle ? HD_EVENT_RSRVR_2_LOAD_CELL_START_VALUES : HD_EVENT_RSRVR_2_LOAD_CELL_END_VALUES ); } loadCellPrimaryWeight = getReservoirWeightLargeFilter( reservoirID ); loadCellBackupWeight = getReservoirBackupWeightLargeFilter( reservoirID ); loadCellCurrentDrift = loadCellPrimaryWeight - loadCellBackupWeight; + SEND_EVENT_WITH_2_F32_DATA( event, loadCellPrimaryWeight, loadCellBackupWeight ) + if ( ( RESERVOIR_STEADY_CYCLE_FINAL == cycle ) && ( lcLastSteadyWeight[ RESERVOIR_STEADY_CYCLE_START ][ lcPrimaryIndex ] > ( LOAD_CELL_ILLEGAL_WEIGHT_VALUE + 1 ) ) ) { // Start Weight has been previously saved, ok to test loadCellPreviousDrift = lcLastSteadyWeight[ RESERVOIR_STEADY_CYCLE_START ][ lcPrimaryIndex ] - lcLastSteadyWeight[ RESERVOIR_STEADY_CYCLE_START ][ lcBackupIndex ]; - driftDiff = fabs ( loadCellCurrentDrift - loadCellPreviousDrift ); + driftDiff = fabs ( loadCellCurrentDrift - loadCellPreviousDrift ); } // Save latest reading for next test time lcLastSteadyWeight[ cycle ][ lcPrimaryIndex ] = loadCellPrimaryWeight;