Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -r715b8517f4f25d4fa5444d1aae8d8d729ceba77c -re86977b0f96c69973e9f5f90041aa466a89266af --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 715b8517f4f25d4fa5444d1aae8d8d729ceba77c) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision e86977b0f96c69973e9f5f90041aa466a89266af) @@ -116,7 +116,6 @@ static U32 flushBubblesStartTime; ///< Starting time for flush bubbles. static U32 concentratePumpPrimeCount; ///< Interval count for concentrate pump prime. -static F32 integratedVolumeML; ///< Total RO flow rate over period of time. static BOOL didFMPCheckStart; ///< Flag indicates whether FMP flow vs. LC volume check has begun. static F32 acidConductivityTotal; ///< Total of acid conductivity during fill. static F32 bicarbConductivityTotal; ///< Total of bicarb conductivity during fill. @@ -138,6 +137,7 @@ static OVERRIDE_F32_T usedBicarbVolumeML = { 0.0, 0.0, 0.0, 0.0 }; ///< The integrated bicarb concentration volume has been used in mL. static OVERRIDE_U32_T fillModeDataPublishInterval = { FILL_MODE_DATA_PUB_INTERVAL, FILL_MODE_DATA_PUB_INTERVAL, 0, 0 }; ///< Interval (in ms) at which to publish fill mode data to CAN bus. +static OVERRIDE_F32_T integratedVolumeML = { 0.0, 0.0, 0.0, 0.0 }; ///< Total RO flow rate over period of time. // ********** private function prototypes ********** @@ -173,7 +173,7 @@ dialysateFillStartTime = 0; dataPublishCounter = DATA_PUBLISH_COUNTER_START_COUNT; reservoirBaseWeight = 0.0F; - integratedVolumeML = 0.0F; + integratedVolumeML.data = 0.0F; didFMPCheckStart = FALSE; concentrateTestStartTime = 0; acidConductivityTotal = 0.0F; @@ -328,6 +328,20 @@ /*********************************************************************//** * @brief + * The getIntegratedVolumeML function returns the integrated volume in mL + * @details Inputs: none + * @details Outputs: integrated volume + * @return integrated volume + *************************************************************************/ +F32 getIntegratedVolumeML( void ) +{ + + F32 integratedVolume = getF32OverrideValue(&integratedVolumeML); + return integratedVolume; +} + +/*********************************************************************//** + * @brief * The resetFillStatusParameters function resets the fill status parameters. * @details Inputs: none * @details Outputs: fillStatus @@ -388,6 +402,8 @@ return volume; } + + /*********************************************************************//** * @brief * The resetChemicalUsedVolumeML function resets the used volume of a chemical @@ -767,7 +783,7 @@ reservoirBaseWeight = getReservoirWeight( getInactiveReservoir() ); } - integratedVolumeML += getMeasuredROFlowRateWithConcPumpsLPM() * ML_PER_LITER * FLOW_INTEGRATOR; + integratedVolumeML.data += getMeasuredROFlowRateWithConcPumpsLPM() * ML_PER_LITER * FLOW_INTEGRATOR; } usedAcidVolumeML.data += getMeasuredPumpSpeed( CONCENTRATEPUMPS_CP1_ACID ) * FLOW_INTEGRATOR; @@ -792,7 +808,7 @@ if ( TRUE == hasTargetFillVolumeBeenReached( inactiveRsrvr ) ) { F32 filledVolumeML = getReservoirWeight( inactiveRsrvr ) - reservoirBaseWeight; - F32 integratedVolumeToLoadCellReadingPercent = fabs( 1.0F - ( filledVolumeML / integratedVolumeML ) ); + F32 integratedVolumeToLoadCellReadingPercent = fabs( 1.0F - ( filledVolumeML / getIntegratedVolumeML() ) ); F32 avgAcidConductivity = acidConductivityTotal / conductivitySampleCount; F32 avgBicarbConductivity = bicarbConductivityTotal / conductivitySampleCount; F32 acidNormalConductivity = acid.acidConcentrate[ CAL_DATA_ACID_CONCENTRATE_1 ].acidConductivityUSPerCM; @@ -804,7 +820,7 @@ { if ( integratedVolumeToLoadCellReadingPercent > FLOW_INTEGRATED_VOLUME_CHECK_TOLERANCE ) // SRSDG 240 { - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_DG_FLOW_METER_CHECK_FAILURE, filledVolumeML, integratedVolumeML ); + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_DG_FLOW_METER_CHECK_FAILURE, filledVolumeML, getIntegratedVolumeML() ); } } @@ -1025,7 +1041,7 @@ fillModeData.pctDiffInConductivity = pctDiffInConductivity; fillModeData.usedAcidVolumeML = getChemicalUsedVolumeML( ACID ); fillModeData.usedBicarbVolumeML = getChemicalUsedVolumeML( BICARB ); - fillModeData.integratedVolumeML = integratedVolumeML; + fillModeData.integratedVolumeML = getIntegratedVolumeML(); broadcastData( MSG_ID_DG_FILL_MODE_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&fillModeData, sizeof( DG_FILL_MODE_DATA_T ) ); @@ -1181,4 +1197,49 @@ return result; } +/*********************************************************************//** + * @brief + * The testSetFillModeDataPublishIntervalOverride function overrides the + * fill mode data publish interval. + * @details Inputs: FillModeDataPublishInterval + * @details Outputs: FillModeDataPublishInterval + * @param: value override fill mode data publish interval with (in ms) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetIntegratedVolumeOverride( U32 value ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + integratedVolumeML.ovData = value; + integratedVolumeML.override = OVERRIDE_KEY; + result = TRUE; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetFillModeDataPublishIntervalOverride function resets the + * override of the fill mode data publish interval. + * @details Inputs: FillModeDataPublishInterval + * @details Outputs: FillModeDataPublishInterval + * @return TRUE if override reset successful, FALSE if not + *************************************************************************/ +BOOL testResetIntegratedVolumeOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + integratedVolumeML.override = OVERRIDE_RESET; + integratedVolumeML.ovData = integratedVolumeML.ovInitData; + result = TRUE; + } + + return result; +} + /**@}*/ Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -r8ff9da397da13b28c2ea8c9c3c1be430a7fe3b86 -re86977b0f96c69973e9f5f90041aa466a89266af --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 8ff9da397da13b28c2ea8c9c3c1be430a7fe3b86) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision e86977b0f96c69973e9f5f90041aa466a89266af) @@ -327,11 +327,11 @@ // Flash Fault LED if ( alarmLEDTimer <= ALARM_DG_FAULT_LED_ON_INTERVAL ) { - setCPLDFaultLED( PIN_SIGNAL_HIGH ); // Set Fault LED + setCPLDFaultLED( PIN_SIGNAL_HIGH, TRUE ); // Set Fault LED } else if ( alarmLEDTimer <= ALARM_DG_FAULT_LED_OFF_INTERVAL ) { - setCPLDFaultLED( PIN_SIGNAL_LOW ); // Clear Fault LED + setCPLDFaultLED( PIN_SIGNAL_LOW, TRUE ); // Clear Fault LED } else { @@ -341,7 +341,7 @@ // If HD COM has failed, sound alarm if ( FALSE == isHDCommunicating() ) { - setCPLDFaultAudio( PIN_SIGNAL_HIGH ); // Set Fault Audio + setCPLDFaultAudio( PIN_SIGNAL_HIGH ); // Set Fault Audio } else { @@ -351,8 +351,8 @@ else { // No FAULTs - setCPLDFaultLED( PIN_SIGNAL_LOW ); // Clear Fault LED - setCPLDFaultAudio( PIN_SIGNAL_LOW ); // Clear Fault Audio + setCPLDFaultLED( PIN_SIGNAL_LOW, FALSE ); // Clear Fault LED + setCPLDFaultAudio( PIN_SIGNAL_LOW ); // Clear Fault Audio } }