/************************************************************************** * * Copyright (c) 2020 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file Reservoirs.c * * @date 18-Mar-2020 * @author S. Nash * * @brief Reservoirs service module. Maintains reservoir set points and \n * handles reservoir related commands from the HD. * **************************************************************************/ #include // for memcpy() #include "OperationModes.h" #include "Reservoirs.h" // ********** private definitions ********** #define DEFAULT_DIALYSATE_TEMP_PRIMARY_C 39.0 #define DEFAULT_DIALYSATE_TEMP_TRIMMER_C 37.0 #define DEFAULT_TREATMENT_FILL_VOLUME_ML 1500 #define DEFAULT_PRIME_FILL_VOLUME_ML 2500 #define DEFAULT_DRAIN_VOLUME_ML 100 // ********** private data ********** static RESERVOIR_ID_T activeReservoir; static U32 fillVolumeTargetMl; static U32 drainVolumeTargetMl; static F32 targetDialysateTemperaturePrimary; static F32 targetDialysateTemperatureTrim; // ********** private function prototypes ********** /************************************************************************* * @brief * The initReservoirs function initializes the Reservoirs module. * @details * Inputs : none * Outputs : Reservoirs module initialized. * @param none * @return none *************************************************************************/ void initReservoirs( void ) { activeReservoir = RESERVOIR_1; fillVolumeTargetMl = DEFAULT_TREATMENT_FILL_VOLUME_ML; drainVolumeTargetMl = DEFAULT_DRAIN_VOLUME_ML; targetDialysateTemperaturePrimary = DEFAULT_DIALYSATE_TEMP_PRIMARY_C; targetDialysateTemperatureTrim = DEFAULT_DIALYSATE_TEMP_TRIMMER_C; } /************************************************************************* * @brief * The startFill function handles a fill command from the HD. * @details * Inputs : none * Outputs : move to fill mode * @param resID : Reservoir to drain. * @param fillToVolMl : Target volume (in mL) to fill reservoir to. * @param targetPrimeTemp : Target temperature of dialysate to fill reservoir with. * @param targetTrimTemp : Target temperature of dialysate coming out of reservoir. * @return TRUE if fill command successful, FALSE if not. *************************************************************************/ BOOL startFill( RESERVOIR_ID_T resID, U32 fillToVolMl, F32 targetPrimeTemp, F32 targetTrimTemp ) { BOOL result = FALSE; // validate parameters if ( resID < NUM_OF_RESERVOIRS ) // TODO also check volume and temps vs. max capacities { activeReservoir = resID; fillVolumeTargetMl = fillToVolMl; targetDialysateTemperaturePrimary = targetPrimeTemp; targetDialysateTemperatureTrim = targetTrimTemp; requestNewOperationMode( MODE_FILL ); } return result; } /************************************************************************* * @brief * The startDrain function handles a fill command from the HD * @details * Inputs : none * Outputs : * @param resID : Reservoir to drain. * @param drainToVolMl : Target volume (in mL) to drain reservoir to. * @return TRUE if drain command successful, FALSE if not. *************************************************************************/ BOOL startDrain( RESERVOIR_ID_T resID, U32 drainToVolMl ) { BOOL result = FALSE; // validate parameters if ( resID < NUM_OF_RESERVOIRS ) // TODO also check volume vs. max capacity { activeReservoir = resID; drainVolumeTargetMl = drainToVolMl; requestNewOperationMode( MODE_DRAI ); } return result; }