Index: firmware/App/Services/Reservoirs.c =================================================================== diff -u -rda0deea71ed5770d98a00943369b9c17321e139f -ra888f0f268896151a649da228f5a5119bbe2aa33 --- firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision da0deea71ed5770d98a00943369b9c17321e139f) +++ firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision a888f0f268896151a649da228f5a5119bbe2aa33) @@ -32,23 +32,23 @@ #include "SystemCommMessages.h" #include "TaskGeneral.h" #include "Timers.h" -#include "Utilities.h" -#include "Valves.h" - -/** - * @addtogroup Reservoirs - * @{ - */ - -// ********** private definitions ********** - -#define MIN_RESERVOIR_VOLUME_ML 0 ///< Minimum reservoir volume in mL. -#define DEFAULT_FILL_VOLUME_ML 1500 ///< Default fill volume for treatment in mL. -#define MAX_FILL_VOLUME_ML MAX_RESERVOIR_VOLUME_ML ///< Maximum fill volume in mL. -#define DEFAULT_DRAIN_VOLUME_ML 0 ///< Default drain volume in mL. -#define MAX_DRAIN_VOLUME_ML MAX_RESERVOIR_VOLUME_ML ///< Maximum drain volume in mL. +#include "Utilities.h" +#include "Valves.h" -#define MIN_DRAIN_INLET_PSI_EMPTY -4.5F ///< Minimum drain inlet pressure (in PSI) to indicate reservoir is empty while drain pump on. +/** + * @addtogroup Reservoirs + * @{ + */ + +// ********** private definitions ********** + +#define MIN_RESERVOIR_VOLUME_ML 0 ///< Minimum reservoir volume in mL. +#define DEFAULT_FILL_VOLUME_ML 1500 ///< Default fill volume for treatment in mL. +#define MAX_FILL_VOLUME_ML MAX_RESERVOIR_VOLUME_ML ///< Maximum fill volume in mL. +#define DEFAULT_DRAIN_VOLUME_ML 0 ///< Default drain volume in mL. +#define MAX_DRAIN_VOLUME_ML MAX_RESERVOIR_VOLUME_ML ///< Maximum drain volume in mL. + +#define MIN_DRAIN_INLET_PSI_EMPTY -4.5F ///< Minimum drain inlet pressure (in PSI) to indicate reservoir is empty while drain pump on. #define RESERVOIR_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< interval (ms/task time) at which the reservoir data is published on the CAN bus. #define MAX_REDUNDANT_LOAD_CELL_DIFF 50.0F ///< Maximum difference in redundant load cells when determining if fill completed. #define MAX_DRAIN_RPM_MLP 2400.0F ///< Maximum drain RPM in mL/min. @@ -98,10 +98,10 @@ BOOL hasROGenVolBeenWrittenToNV; ///< Boolean flag to indicate whether the generated RO volume has been written to NV or not. } NV_OPS_T; -static HEATERS_TEMPERATURE_CALC_DATA_T heatersTempCalc; ///< Heaters temperature calculations data structure. -static U32 dataPublishCounter; ///< used to schedule reservoir data publication to CAN bus. - -static OVERRIDE_U32_T activeReservoir = { 0, 0, 0, 0 }; ///< The active reservoir that serves the HD dialysate need. +static HEATERS_TEMPERATURE_CALC_DATA_T heatersTempCalc; ///< Heaters temperature calculations data structure. +static U32 dataPublishCounter; ///< used to schedule reservoir data publication to CAN bus. + +static OVERRIDE_U32_T activeReservoir = { 0, 0, 0, 0 }; ///< The active reservoir that serves the HD dialysate need. static OVERRIDE_U32_T fillVolumeTargetMl = { 0, 0, 0, 0 }; ///< The target reservoir fill volume (in mL). static OVERRIDE_U32_T drainVolumeTargetMl = { 0, 0, 0, 0 }; ///< The target reservoir drain volume (in mL). static OVERRIDE_U32_T reservoirDataPublishInterval = { RESERVOIR_DATA_PUB_INTERVAL, @@ -131,19 +131,19 @@ static void publishReservoirData( void ); -/*********************************************************************//** - * @brief - * The initReservoirs function initializes the Reservoirs module. - * @details Inputs: none +/*********************************************************************//** + * @brief + * The initReservoirs function initializes the Reservoirs module. + * @details Inputs: none * @details Outputs: activeReservoir.data, fillVolumeTargetMl.data, * drainVolumeTargetMl.data, targetFillFlowRateLPM, isThisTheFirstCycle, - * previousReservoiWeight, dataPublishCounter, nvOps - * @return none - *************************************************************************/ -void initReservoirs( void ) + * previousReservoiWeight, dataPublishCounter, nvOps + * @return none + *************************************************************************/ +void initReservoirs( void ) { activeReservoir.data = (U32)DG_RESERVOIR_1; - fillVolumeTargetMl.data = DEFAULT_FILL_VOLUME_ML; + fillVolumeTargetMl.data = DEFAULT_FILL_VOLUME_ML; drainVolumeTargetMl.data = DEFAULT_DRAIN_VOLUME_ML; targetFillFlowRateLPM = 0.0; isThisTheFirstCycle = TRUE; @@ -154,16 +154,16 @@ memset( &reservoirPreviousStatus, 0.0, sizeof( RESERVOIRS_PREVIOUS_STATUS ) * NUM_OF_DG_RESERVOIRS ); } - -/*********************************************************************//** - * @brief - * The execReservoirs function manages periodic tasks for the Reservoirs module. - * @details Inputs: dataPublishCounter, nvOps + +/*********************************************************************//** + * @brief + * The execReservoirs function manages periodic tasks for the Reservoirs module. + * @details Inputs: dataPublishCounter, nvOps * @details Outputs: dataPublishCounter, heatingConstsCalRecord, - * reservoirsCalRecord, nvOps - * @return none - *************************************************************************/ -void execReservoirs( void ) + * reservoirsCalRecord, nvOps + * @return none + *************************************************************************/ +void execReservoirs( void ) { // Check if a new calibration is available if ( TRUE == isNewCalibrationRecordAvailable() ) @@ -200,7 +200,7 @@ } } - publishReservoirData(); + publishReservoirData(); } /*********************************************************************//** @@ -241,16 +241,16 @@ return result; } -/*********************************************************************//** - * @brief - * The setActiveReservoirCmd function sets the given reservoir as active - * (meaning HD will be drawing from this reservoir). - * @details Inputs: none - * @details Outputs: Specified reservoir is set as active. - * @param resID ID of reservoir to set as active - * @return none - *************************************************************************/ -void setActiveReservoirCmd( DG_RESERVOIR_ID_T resID ) +/*********************************************************************//** + * @brief + * The setActiveReservoirCmd function sets the given reservoir as active + * (meaning HD will be drawing from this reservoir). + * @details Inputs: none + * @details Outputs: Specified reservoir is set as active. + * @param resID ID of reservoir to set as active + * @return none + *************************************************************************/ +void setActiveReservoirCmd( DG_RESERVOIR_ID_T resID ) { DG_CMD_RESPONSE_T cmdResponse; cmdResponse.commandID = DG_CMD_SWITCH_RESERVOIR; @@ -264,21 +264,21 @@ { case DG_RESERVOIR_1: activeReservoir.data = (U32)resID; - cmdResponse.rejected = FALSE; - setValveState( VRF, VALVE_STATE_R2_C_TO_NO ); - setValveState( VRO, VALVE_STATE_R1_C_TO_NO ); - setValveState( VRI, VALVE_STATE_R1_C_TO_NO ); - break; - - case DG_RESERVOIR_2: + cmdResponse.rejected = FALSE; + setValveState( VRF, VALVE_STATE_R2_C_TO_NO ); + setValveState( VRO, VALVE_STATE_R1_C_TO_NO ); + setValveState( VRI, VALVE_STATE_R1_C_TO_NO ); + break; + + case DG_RESERVOIR_2: activeReservoir.data = (U32)resID; - cmdResponse.rejected = FALSE; - setValveState( VRF, VALVE_STATE_R1_C_TO_NC ); - setValveState( VRO, VALVE_STATE_R2_C_TO_NC ); - setValveState( VRI, VALVE_STATE_R2_C_TO_NC ); - break; - - default: + cmdResponse.rejected = FALSE; + setValveState( VRF, VALVE_STATE_R1_C_TO_NC ); + setValveState( VRO, VALVE_STATE_R2_C_TO_NC ); + setValveState( VRI, VALVE_STATE_R2_C_TO_NC ); + break; + + default: // invalid reservoir given - cmd will be NAK'd w/ false result. cmdResponse.rejectCode = DG_CMD_REQUEST_REJECT_REASON_INVALID_PARAMETER; break; @@ -377,11 +377,7 @@ fillVolumeTargetMl.data = fillToVolMl; cmdResponse.rejected = FALSE; - if ( ( FALSE == isAlarmActive( ALARM_ID_DG_ACID_BOTTLE_LOW_VOLUME ) ) && // reject moving to fill mode if - ( FALSE == isAlarmActive( ALARM_ID_DG_BICARB_BOTTLE_LOW_VOLUME ) ) ) // alarm is active - { - requestNewOperationMode( DG_MODE_FILL ); - } + requestNewOperationMode( DG_MODE_FILL ); } else {