Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -re28e96fba3f2293208e6d91673288acba2514cca -rd502fb7b72c8b3aa4f3a7cdbc4b3c4f7b5ae7c92 --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision e28e96fba3f2293208e6d91673288acba2514cca) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision d502fb7b72c8b3aa4f3a7cdbc4b3c4f7b5ae7c92) @@ -97,6 +97,7 @@ F32 fillFlowRateAverage; ///< Fill flow average value. F32 fillLastTemperature; ///< Fill last temperature value. BOOL isThisFirstFill; ///< Fill flag to indicate whether it is the first fill or not. + BOOL fillAvgConductivityOutOfRange; ///< Fill average conductivity out of range. } FILL_CONDITION_STATUS_T; /// DG broadcast dialysate fill data structure. @@ -108,7 +109,7 @@ F32 pctDiffInConductivity; ///< The percent difference between CD1 and CD2. F32 usedAcidVolumeML; ///< The used acid volume in ML. F32 usedBicarbVolumeML; ///< The used bicarb volume in ML. -} DG_FILL_DIALYSATE_DATA_T; +} DG_FILL_MODE_DATA_T; static U32 fillModeDataPublicationTimerCounter; ///< Used to schedule dialysate fill data publication to CAN bus. static DG_FILL_MODE_STATE_T fillState; ///< Currently active fill state. @@ -376,6 +377,7 @@ fillStatus.fillTemperatureAverage = getHeaterTargetTemperature( DG_TRIMMER_HEATER ); fillStatus.fillLastTemperature = getHeaterTargetTemperature( DG_TRIMMER_HEATER ) + RESERVOIR_EXTRA_TEMPERATURE; fillStatus.isThisFirstFill = TRUE; + fillStatus.fillAvgConductivityOutOfRange = FALSE; } /*********************************************************************//** @@ -393,6 +395,19 @@ /*********************************************************************//** * @brief + * The isAvgConductivityOutOfRange function returns the boolean flag that indicates + * whether the average conductivity is out of range. + * @details Inputs: none + * @details Outputs: none + * @return fillStatus.fillAvgConductivityOutOfRange + *************************************************************************/ +BOOL isAvgConductivityOutOfRange( void ) +{ + return fillStatus.fillAvgConductivityOutOfRange; +} + +/*********************************************************************//** + * @brief * The handleTestInletWaterState function tests for inlet water quality * and if this is the first fill of a treatment, prime the acid and bicarb * lines before jumping to dialysate production state. @@ -741,13 +756,25 @@ #ifndef DISABLE_DIALYSATE_CHECK // SRSDG 400 if ( TRUE == isValueWithinPercentRange( avgBicardConductivity, BICARB_NORMAL_CONDUCTIVITY, FIVE_PERCENT_FACTOR ) ) { + fillStatus.fillAvgConductivityOutOfRange = TRUE; // signal idle mode + requestNewOperationMode( DG_MODE_GENE ); // leave fill mode if bad fill is detected due to avg bicarb is out of range SET_ALARM_WITH_2_F32_DATA( ALARM_ID_DIALYSATE_CONDUCTIVITY_FAULT, avgBicardConductivity, BICARB_NORMAL_CONDUCTIVITY ); } + else + { + fillStatus.fillAvgConductivityOutOfRange = FALSE; + } if ( TRUE == isValueWithinPercentRange( avgAcidConductivity, ACID_NORMAL_CONDUCTIVITY, FIVE_PERCENT_FACTOR ) ) { + fillStatus.fillAvgConductivityOutOfRange = TRUE; // signal idle mode + requestNewOperationMode( DG_MODE_GENE ); // leave fill mode if bad fill is detected due to avg acid out of range SET_ALARM_WITH_2_F32_DATA( ALARM_ID_DIALYSATE_CONDUCTIVITY_FAULT, avgAcidConductivity, ACID_NORMAL_CONDUCTIVITY ); } + else + { + fillStatus.fillAvgConductivityOutOfRange = FALSE; + } #endif // Done with this fill. Calculate the average fill flow rate and average temperature // Reset the variables for the next fill @@ -937,7 +964,7 @@ // publish Drain pump data on interval if ( ++fillModeDataPublicationTimerCounter >= getU32OverrideValue( &fillModeDataPublishInterval ) ) { - DG_FILL_DIALYSATE_DATA_T fillModeData; + DG_FILL_MODE_DATA_T fillModeData; // Populate the data structure for publication fillModeData.averageAcidConductivity = averageAcidConductivity; @@ -947,7 +974,7 @@ fillModeData.usedAcidVolumeML = usedAcidVolumeML.data; fillModeData.usedBicarbVolumeML = usedBicarbVolumeML.data; - broadcastData( MSG_ID_DRAIN_PUMP_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&fillModeData, sizeof( DG_FILL_DIALYSATE_DATA_T ) ); + broadcastData( MSG_ID_DG_FILL_MODE_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&fillModeData, sizeof( DG_FILL_MODE_DATA_T ) ); fillModeDataPublicationTimerCounter = 0; }