Index: firmware/App/Controllers/BloodLeak.c =================================================================== diff -u -rbac52336ea9e23fc2dfb4a802afe49401dfb7057 -rc27b1788cee92bcb143d6c4f09d4b278ddded36f --- firmware/App/Controllers/BloodLeak.c (.../BloodLeak.c) (revision bac52336ea9e23fc2dfb4a802afe49401dfb7057) +++ firmware/App/Controllers/BloodLeak.c (.../BloodLeak.c) (revision c27b1788cee92bcb143d6c4f09d4b278ddded36f) @@ -168,8 +168,8 @@ U32 intensityRunningSum; ///< Blood leak intensity running sum for moving average. U32 rawIntensityNextIndex; ///< Blood leak raw intensity next index for moving average. OVERRIDE_F32_T intensityMovingAverage; ///< Blood leak intensity moving average. - OVERRIDE_U32_T zeroingIntervalTimeMS; ///< Blood leak zeroing interval time in milliseconds. - U32 lastUpperZeroingStartTimeMS; ///< Blood leak last upper range zeroing start time in milliseconds. + OVERRIDE_U32_T zeroingDriftIntervalTimeMS; ///< Blood leak zeroing interval time in milliseconds. + OVERRIDE_U32_T zeroingUpperRangeIntervalTimeMS; ///< BLood leak zeroing upper range interval time in milliseconds. U32 driftUpperRangeStartTimeMS; ///< Blood leak drift in upper range start time in milliseconds. } BLOOD_LEAK_ZEROING_STATUS_T; @@ -246,7 +246,7 @@ static void resetEmbModeCmdRespConsumedFlag( U08 cmd ); static U32 getEmbModeInfoValue( U08 cmd ); static BOOL isLowerRangeIntensityDriftZeroingNeeded( void ); -static BOOL isUpperRangeIntensityZeroingNeeded( void ); +static BOOL isUpperIntensityZeroingNeeded( void ); /*********************************************************************//** * @brief @@ -312,10 +312,14 @@ // Initialize the blood leak zeroing sequence status structure memset( &bloodLeakZeroingStatus, 0x0, sizeof( BLOOD_LEAK_ZEROING_STATUS_T ) ); - bloodLeakZeroingStatus.zeroingIntervalTimeMS.data = BLD_ZERO_MIN_INTERVAL_MS; - bloodLeakZeroingStatus.zeroingIntervalTimeMS.ovInitData = BLD_ZERO_MIN_INTERVAL_MS; - bloodLeakZeroingStatus.zeroingIntervalTimeMS.ovData = 0; - bloodLeakZeroingStatus.zeroingIntervalTimeMS.override = 0; + bloodLeakZeroingStatus.zeroingDriftIntervalTimeMS.data = BLD_ZERO_MIN_INTERVAL_MS; + bloodLeakZeroingStatus.zeroingDriftIntervalTimeMS.ovInitData = BLD_ZERO_MIN_INTERVAL_MS; + bloodLeakZeroingStatus.zeroingDriftIntervalTimeMS.ovData = 0; + bloodLeakZeroingStatus.zeroingDriftIntervalTimeMS.override = 0; + bloodLeakZeroingStatus.zeroingUpperRangeIntervalTimeMS.data = BLD_UPPER_INTENSITY_INTERVAL_MS; + bloodLeakZeroingStatus.zeroingUpperRangeIntervalTimeMS.ovInitData = BLD_UPPER_INTENSITY_INTERVAL_MS; + bloodLeakZeroingStatus.zeroingUpperRangeIntervalTimeMS.ovData = 0; + bloodLeakZeroingStatus.zeroingUpperRangeIntervalTimeMS.override = 0; // Enqueue the commands to set the embedded mode and request the set point of the blood leak sensor enqueueEmbModeCmd( CS_EMB_MODE_CMD ); @@ -551,7 +555,7 @@ else if ( MODE_TREA == opMode ) { status |= isLowerRangeIntensityDriftZeroingNeeded(); - status |= isUpperRangeIntensityZeroingNeeded(); + status |= isUpperIntensityZeroingNeeded(); } return status; @@ -819,10 +823,9 @@ { // Done with zero sequence, transition to other states zeroBloodLeakReset(); - bloodLeakZeroingStatus.lastZeroingStartTimeMS = getMSTimerCount(); - bloodLeakZeroingStatus.lastUpperZeroingStartTimeMS = getMSTimerCount(); - bloodLeakSelfTestStatus = SELF_TEST_STATUS_PASSED; - state = BLOOD_LEAK_NORMAL_STATE; + bloodLeakZeroingStatus.lastZeroingStartTimeMS = getMSTimerCount(); + bloodLeakSelfTestStatus = SELF_TEST_STATUS_PASSED; + state = BLOOD_LEAK_NORMAL_STATE; if ( TRUE == isAlarmActive( ALARM_ID_HD_BLOOD_LEAK_RECOVERING_PLEASE_WAIT ) ) { @@ -1463,7 +1466,6 @@ data.bloodLeakDetect = getEmbModeInfoValue( V_EMB_MODE_CMD ); data.bloodLeakIntensityMovingAvg = getF32OverrideValue( &bloodLeakZeroingStatus.intensityMovingAverage ); data.bloodLeakTimeSinceZeroMS = calcTimeSince( bloodLeakZeroingStatus.lastZeroingStartTimeMS ); - data.bloodLeakTimeSinceUpperZeroMS = calcTimeSince( bloodLeakZeroingStatus.lastUpperZeroingStartTimeMS ); bloodLeakDataPublicationCounter = 0; @@ -1855,7 +1857,7 @@ U32 setPoint = bloodLeakEmbModeCmd[ D_EMB_MODE_CMD ].commandResp; F32 driftMinFromTop = BLD_NOMINAL_INTENSITY - ( setPoint * BLD_MAX_INTENSITY_OUT_OF_RANGE ); F32 driftMaxFromTop = BLD_NOMINAL_INTENSITY - ( setPoint * BLD_MIN_INTENSITY_OUT_OF_RANGE ); - U32 zeroingIntervalMS = getU32OverrideValue( &bloodLeakZeroingStatus.zeroingIntervalTimeMS ); + U32 zeroingIntervalMS = getU32OverrideValue( &bloodLeakZeroingStatus.zeroingDriftIntervalTimeMS ); BOOL isZeroingAllowed = didTimeout( bloodLeakZeroingStatus.lastZeroingStartTimeMS, zeroingIntervalMS ); F32 intensityMvgAvg = getF32OverrideValue( &bloodLeakZeroingStatus.intensityMovingAverage ); @@ -1878,18 +1880,19 @@ /*********************************************************************//** * @brief - * The isUpperRangeIntensityZeroingNeeded function checks whether blood + * The isUpperIntensityZeroingNeeded function checks whether blood * leak zeroing is needed in terms of drift upper range intensity (>= 950). * @details Inputs: bloodLeakZeroingStatus * @details Outputs: bloodLeakZeroingStatus * @return TRUE if blood leak zeroing is needed otherwise, FALSE *************************************************************************/ -static BOOL isUpperRangeIntensityZeroingNeeded( void ) +static BOOL isUpperIntensityZeroingNeeded( void ) { - BOOL status = FALSE; - BOOL isZeroingAllowed = didTimeout( bloodLeakZeroingStatus.lastUpperZeroingStartTimeMS, BLD_UPPER_INTENSITY_INTERVAL_MS ); - F32 intensityMvgAvg = getF32OverrideValue( &bloodLeakZeroingStatus.intensityMovingAverage ); - BOOL isUpperZeroingNeeded = ( intensityMvgAvg >= BLD_MAX_UPPER_INTENSITY_DRFIT ); + BOOL status = FALSE; + U32 zeroingUpperIntervalMS = getU32OverrideValue( &bloodLeakZeroingStatus.zeroingUpperRangeIntervalTimeMS ); + BOOL isZeroingAllowed = didTimeout( bloodLeakZeroingStatus.lastZeroingStartTimeMS, zeroingUpperIntervalMS ); + F32 intensityMvgAvg = getF32OverrideValue( &bloodLeakZeroingStatus.intensityMovingAverage ); + BOOL isUpperZeroingNeeded = ( intensityMvgAvg >= BLD_MAX_UPPER_INTENSITY_DRFIT ? TRUE : FALSE ); if ( FALSE == isUpperZeroingNeeded ) { @@ -2191,18 +2194,28 @@ * blood leak zeroing interval in minutes. * @details Inputs: none * @details Outputs: bloodLeakZeroingStatus + * @param drift check interval or upper range intensity boolean flag * @param value zeroing interval in minutes * @return TRUE if override successful, FALSE if not *************************************************************************/ -BOOL testSetBloodLeakZeroingIntervalInMinsOverride( U32 valueMins ) +BOOL testSetBloodLeakZeroingIntervalInMinsOverride( BOOL upperRangeInterval, U32 valueMins ) { BOOL result = FALSE; if ( TRUE == isTestingActivated() ) { - result = TRUE; - bloodLeakZeroingStatus.zeroingIntervalTimeMS.ovData = ( valueMins * SEC_PER_MIN * MS_PER_SECOND ); - bloodLeakZeroingStatus.zeroingIntervalTimeMS.override = OVERRIDE_KEY; + if ( FALSE == upperRangeInterval ) + { + result = TRUE; + bloodLeakZeroingStatus.zeroingDriftIntervalTimeMS.ovData = ( valueMins * SEC_PER_MIN * MS_PER_SECOND ); + bloodLeakZeroingStatus.zeroingDriftIntervalTimeMS.override = OVERRIDE_KEY; + } + else + { + result = TRUE; + bloodLeakZeroingStatus.zeroingUpperRangeIntervalTimeMS.ovData = ( valueMins * SEC_PER_MIN * MS_PER_SECOND ); + bloodLeakZeroingStatus.zeroingUpperRangeIntervalTimeMS.override = OVERRIDE_KEY; + } } return result; @@ -2214,17 +2227,27 @@ * override of the blood leak zeroing interval * @details Inputs: none * @details Outputs: bloodLeakZeroingStatus + * @param boolean flag to indicate to reset upper range interval or the drift * @return TRUE if override successful, FALSE if not *************************************************************************/ -BOOL testResetBloodLeakZeroingIntervalInMinsOverride( void ) +BOOL testResetBloodLeakZeroingIntervalInMinsOverride( BOOL upperRangeInterval ) { BOOL result = FALSE; if ( TRUE == isTestingActivated() ) { - result = TRUE; - bloodLeakZeroingStatus.zeroingIntervalTimeMS.ovData = bloodLeakZeroingStatus.zeroingIntervalTimeMS.ovInitData; - bloodLeakZeroingStatus.zeroingIntervalTimeMS.override = OVERRIDE_RESET; + if ( FALSE == upperRangeInterval ) + { + result = TRUE; + bloodLeakZeroingStatus.zeroingDriftIntervalTimeMS.ovData = bloodLeakZeroingStatus.zeroingDriftIntervalTimeMS.ovInitData; + bloodLeakZeroingStatus.zeroingDriftIntervalTimeMS.override = OVERRIDE_RESET; + } + else + { + result = TRUE; + bloodLeakZeroingStatus.zeroingUpperRangeIntervalTimeMS.ovData = bloodLeakZeroingStatus.zeroingUpperRangeIntervalTimeMS.ovInitData; + bloodLeakZeroingStatus.zeroingUpperRangeIntervalTimeMS.override = OVERRIDE_RESET; + } } return result;