Index: firmware/App/Modes/Dialysis.c =================================================================== diff -u -r9944e4f766d9eb4cdf7a5ca7587e3ceca556e106 -r8b73263b38f449dacc0795c67a7cf6240cb79026 --- firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision 9944e4f766d9eb4cdf7a5ca7587e3ceca556e106) +++ firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision 8b73263b38f449dacc0795c67a7cf6240cb79026) @@ -7,8 +7,8 @@ * * @file Dialysis.c * -* @author (last) Darren Cox -* @date (last) 13-May-2022 +* @author (last) Dara Navaei +* @date (last) 15-Jul-2022 * * @author (original) Sean * @date (original) 15-Jan-2020 @@ -65,6 +65,7 @@ static F32 resCurrVolume[ NUM_OF_DG_RESERVOIRS ]; ///< Reservoir current volume. static F32 resLastVolume[ NUM_OF_DG_RESERVOIRS ]; ///< Reservoir previous volume. static F32 measUFVolumeFromPriorReservoirs; ///< Current total ultrafiltration volume from previous reservoirs in current treatment. +static F32 lcLastSteadyWeight[NUM_OF_LOAD_CELLS]; ///< Load Cell Last Steady Weight for drift test static U32 uFTimeMS; ///< Current elapsed ultrafiltration time (in ms). Used for calculating UF reference volume. static U32 lastUFTimeStamp; ///< HD timer value when we last took stock of ultrafiltration time (so we can determine how much time has elapsed since). @@ -106,6 +107,7 @@ static void updateUFVolumes( void ); static void publishSalineBolusData( void ); +static void checkLoadCellsStablePrimaryBackupDriftOutOfRange( DG_RESERVOIR_ID_T reservoirID ); /*********************************************************************//** * @brief @@ -118,6 +120,8 @@ *************************************************************************/ void initDialysis( void ) { + U16 i; + currentDialysisState = DIALYSIS_START_STATE; currentUFState = UF_START_STATE; currentSalineBolusState = SALINE_BOLUS_STATE_IDLE; @@ -142,6 +146,10 @@ uFAccuracyCheckTimerCtr = 0; lastUFVolumeChecked = 0.0; + for (i=0; i (LOAD_CELL_ILLEGAL_WEIGHT_VALUE + 1) ) + { + // Weight has been previously saved, ok to test + loadCellPreviousDrift = lcLastSteadyWeight[lcPrimaryIndex] - lcLastSteadyWeight[lcBackupIndex]; + driftDiff = fabs ( loadCellCurrentDrift - loadCellPreviousDrift ); + } + // Save latest reading for next test time + lcLastSteadyWeight[lcPrimaryIndex] = loadCellPrimaryWeight; + lcLastSteadyWeight[lcBackupIndex] = loadCellBackupWeight; + + // Check for drift out of range + if ( driftDiff > LOAD_CELL_PRIMARY_BACKUP_MAX_ALLOWED_DRIFT_GRAMS ) + { + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_LOAD_CELL_PRIMARY_BACKUP_DRIFT_OUT_OF_RANGE, loadCellCurrentDrift, loadCellPreviousDrift ) + } +} + /**@}*/