Index: firmware/App/Modes/Dialysis.c =================================================================== diff -u -r4fdd94336f97f71d0ba2918260125ecb46d52e75 -r0ffe96d360a99601ac79a1185556eac7b0e7e2a1 --- firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision 4fdd94336f97f71d0ba2918260125ecb46d52e75) +++ firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision 0ffe96d360a99601ac79a1185556eac7b0e7e2a1) @@ -65,6 +65,8 @@ 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 lcLastStartWeight[NUM_OF_LOAD_CELLS]; ///< Load Cell Last Starting Weight for drift test +static F32 lcLastFinalWeight[NUM_OF_LOAD_CELLS]; ///< Load Cell Last Final 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,7 +108,7 @@ static void updateUFVolumes( void ); static void publishSalineBolusData( void ); -static void checkLoadCellsStablePrimaryBackupDriftOutOfRange( DG_RESERVOIR_ID_T reservoirID, BOOL reservoirFull ); +static void checkLoadCellsStablePrimaryBackupDriftOutOfRange( DG_RESERVOIR_ID_T reservoirID, BOOL reservoirFinal ); /*********************************************************************//** * @brief @@ -119,6 +121,8 @@ *************************************************************************/ void initDialysis( void ) { + U16 i; + currentDialysisState = DIALYSIS_START_STATE; currentUFState = UF_START_STATE; currentSalineBolusState = SALINE_BOLUS_STATE_IDLE; @@ -143,6 +147,11 @@ uFAccuracyCheckTimerCtr = 0; lastUFVolumeChecked = 0.0; + for (i=0; i (LOAD_CELL_ILLEGAL_WEIGHT_VALUE + 1) ) { - if ( lastFullWeight[LOAD_CELL_RESERVOIR_1_PRIMARY] > (LOAD_CELL_ILLEGAL_WEIGHT_VALUE + 1) ) - { - // Weight has been previously saved, ok to test - loadCellPreviousDrift = fabs( lastFullWeight[LOAD_CELL_RESERVOIR_1_PRIMARY] - - lastFullWeight[LOAD_CELL_RESERVOIR_1_BACKUP] ); - driftDiff = fabs ( loadCellCurrentDrift - loadCellPreviousDrift ); - } - // Save latest reading for next test time - lastFullWeight[LOAD_CELL_RESERVOIR_1_PRIMARY] = loadCellPrimaryWeight; - lastFullWeight[LOAD_CELL_RESERVOIR_1_BACKUP] = loadCellBackupWeight; + // Weight has been previously saved, ok to test + loadCellPreviousDrift = lcLastFinalWeight[lcPrimaryIndex] - lcLastFinalWeight[lcBackupIndex]; + driftDiff = fabs ( loadCellCurrentDrift - loadCellPreviousDrift ); } - else - { - if ( lastEmptyWeight[LOAD_CELL_RESERVOIR_1_PRIMARY] > (LOAD_CELL_ILLEGAL_WEIGHT_VALUE + 1) ) - { - // Weight has been previously saved, ok to test - loadCellPreviousDrift = fabs( lastEmptyWeight[LOAD_CELL_RESERVOIR_1_PRIMARY] - - lastEmptyWeight[LOAD_CELL_RESERVOIR_1_BACKUP] ); - driftDiff = fabs ( loadCellCurrentDrift - loadCellPreviousDrift ); - } - // Save latest reading for next test time - lastEmptyWeight[LOAD_CELL_RESERVOIR_1_PRIMARY] = loadCellPrimaryWeight; - lastEmptyWeight[LOAD_CELL_RESERVOIR_1_BACKUP] = loadCellBackupWeight; - } + // Save latest reading for next test time + lcLastFinalWeight[lcPrimaryIndex] = loadCellPrimaryWeight; + lcLastFinalWeight[lcBackupIndex] = loadCellBackupWeight; } else { - // Reservoir 2 - loadCellPrimaryWeight = getReservoirWeightLargeFilter( DG_RESERVOIR_2 ); - loadCellBackupWeight = getReservoirBackupWeightLargeFilter( DG_RESERVOIR_2 ); - loadCellCurrentDrift = fabs( loadCellPrimaryWeight - loadCellBackupWeight ); - - if ( reservoirFull ) + if ( lcLastStartWeight[lcPrimaryIndex] > (LOAD_CELL_ILLEGAL_WEIGHT_VALUE + 1) ) { - if ( lastFullWeight[LOAD_CELL_RESERVOIR_2_PRIMARY] > (LOAD_CELL_ILLEGAL_WEIGHT_VALUE + 1) ) - { - // Weight has been previously saved, ok to test - loadCellPreviousDrift = fabs( lastFullWeight[LOAD_CELL_RESERVOIR_2_PRIMARY] - - lastFullWeight[LOAD_CELL_RESERVOIR_2_BACKUP] ); - driftDiff = fabs ( loadCellCurrentDrift - loadCellPreviousDrift ); - } - // Save latest reading for next test time - lastFullWeight[LOAD_CELL_RESERVOIR_2_PRIMARY] = loadCellPrimaryWeight; - lastFullWeight[LOAD_CELL_RESERVOIR_2_BACKUP] = loadCellBackupWeight; + // Weight has been previously saved, ok to test + loadCellPreviousDrift = lcLastStartWeight[lcPrimaryIndex] - lcLastStartWeight[lcBackupIndex]; + driftDiff = fabs ( loadCellCurrentDrift - loadCellPreviousDrift ); } - else - { - if ( lastEmptyWeight[LOAD_CELL_RESERVOIR_2_PRIMARY] > (LOAD_CELL_ILLEGAL_WEIGHT_VALUE + 1) ) - { - // Weight has been previously saved, ok to test - loadCellPreviousDrift = fabs( lastEmptyWeight[LOAD_CELL_RESERVOIR_2_PRIMARY] - - lastEmptyWeight[LOAD_CELL_RESERVOIR_2_BACKUP] ); - driftDiff = fabs ( loadCellCurrentDrift - loadCellPreviousDrift ); - } - // Save latest reading for next test time - lastEmptyWeight[LOAD_CELL_RESERVOIR_2_PRIMARY] = loadCellPrimaryWeight; - lastEmptyWeight[LOAD_CELL_RESERVOIR_2_BACKUP] = loadCellBackupWeight; - } + // Save latest reading for next test time + lcLastStartWeight[lcPrimaryIndex] = loadCellPrimaryWeight; + lcLastStartWeight[lcBackupIndex] = loadCellBackupWeight; } - // TODO How does this alarm get cleared? + // 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 ) } - }