Index: firmware/App/Modes/Dialysis.c =================================================================== diff -u -r7499a42cc0f906f9a4a947c82c5b4615217ce7e5 -r5eeb53520a752289b0e2efab8e600044c454437e --- firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision 7499a42cc0f906f9a4a947c82c5b4615217ce7e5) +++ firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision 5eeb53520a752289b0e2efab8e600044c454437e) @@ -8,7 +8,7 @@ * @file Dialysis.c * * @author (last) Dara Navaei -* @date (last) 13-Jul-2022 +* @date (last) 15-Jul-2022 * * @author (original) Sean * @date (original) 15-Jan-2020 @@ -52,6 +52,14 @@ #define MAX_ACTIVE_LOAD_CELL_CHANGE_G 50.0F ///< Maximum delta between new and previous measured UF volume. +/// Defined states for the Load Cell cycles. +typedef enum Reservoir_Steady_Cycle +{ + RESERVOIR_STEADY_CYCLE_START = 0, ///< Reservoir steady cycle load cell reading at Start + RESERVOIR_STEADY_CYCLE_FINAL, ///< Reservoir steady cycle load cell reading at Final + NUM_OF_RESERVOIR_STEADY_CYCLES ///< Number of Reservoir steady cycle load cell readings +} RESERVOIR_STEADY_CYCLE_T; + // ********** private data ********** static DIALYSIS_STATE_T currentDialysisState; ///< Current state of the dialysis sub-mode state machine. @@ -65,7 +73,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 F32 lcLastSteadyWeight[NUM_OF_RESERVOIR_STEADY_CYCLES][NUM_OF_LOAD_CELLS]; ///< Load Cell Last Steady Weight for drift test Start/Final cycle 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). @@ -107,7 +115,7 @@ static void updateUFVolumes( void ); static void publishSalineBolusData( void ); -static void checkLoadCellsStablePrimaryBackupDriftOutOfRange( DG_RESERVOIR_ID_T reservoirID ); +static void checkLoadCellsStablePrimaryBackupDriftOutOfRange( DG_RESERVOIR_ID_T reservoirID, RESERVOIR_STEADY_CYCLE_T cycle ); /*********************************************************************//** * @brief @@ -148,7 +156,8 @@ for (i=0; i (LOAD_CELL_ILLEGAL_WEIGHT_VALUE + 1) ) + if ( ( RESERVOIR_STEADY_CYCLE_FINAL == cycle ) && ( lcLastSteadyWeight[RESERVOIR_STEADY_CYCLE_START][lcPrimaryIndex] > (LOAD_CELL_ILLEGAL_WEIGHT_VALUE + 1) ) ) { - // Weight has been previously saved, ok to test - loadCellPreviousDrift = lcLastSteadyWeight[lcPrimaryIndex] - lcLastSteadyWeight[lcBackupIndex]; + // 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 ); } // Save latest reading for next test time - lcLastSteadyWeight[lcPrimaryIndex] = loadCellPrimaryWeight; - lcLastSteadyWeight[lcBackupIndex] = loadCellBackupWeight; + lcLastSteadyWeight[cycle][lcPrimaryIndex] = loadCellPrimaryWeight; + lcLastSteadyWeight[cycle][lcBackupIndex] = loadCellBackupWeight; // Check for drift out of range if ( driftDiff > LOAD_CELL_PRIMARY_BACKUP_MAX_ALLOWED_DRIFT_GRAMS )