Index: firmware/App/Controllers/DGInterface.c =================================================================== diff -u -r46a2d238d6cf88ff3122b99080789ebc6d83069d -r01391d9a66d4a2d6266366d0f838c08041d2d18c --- firmware/App/Controllers/DGInterface.c (.../DGInterface.c) (revision 46a2d238d6cf88ff3122b99080789ebc6d83069d) +++ firmware/App/Controllers/DGInterface.c (.../DGInterface.c) (revision 01391d9a66d4a2d6266366d0f838c08041d2d18c) @@ -25,7 +25,7 @@ #include "ModeInitPOST.h" #include "ModeTreatment.h" #include "ModeTreatmentParams.h" -#include "OperationModes.h" +#include "OperationModes.h" #include "PersistentAlarm.h" #include "SystemComm.h" #include "SystemCommMessages.h" @@ -58,12 +58,12 @@ // ********** private data ********** -// DG status -static DG_OP_MODE_T dgCurrentOpMode; ///< Current DG operation mode. +// DG status +static DG_OP_MODE_T dgCurrentOpMode; ///< Current DG operation mode. static U32 dgSubMode; ///< Current state (sub-mode) of current DG operation mode. -static BOOL dgStartCommandSent; ///< Flag indicates command to start DG has been sent. -static BOOL dgStarted; ///< Flag indicates whether we have commanded the DG to start or stop. -static BOOL dgTrimmerHeaterOn; ///< Flag indicates whether we have commanded the DG to start or stop the trimmer heater. +static BOOL dgStartCommandSent; ///< Flag indicates command to start DG has been sent. +static BOOL dgStarted; ///< Flag indicates whether we have commanded the DG to start or stop. +static BOOL dgTrimmerHeaterOn; ///< Flag indicates whether we have commanded the DG to start or stop the trimmer heater. // DG sensor data static F32 dgDialysateTemp; ///< Dialysate temperature reported by the DG. @@ -125,12 +125,12 @@ U32 i, j; // NOTE: the active reservoir is set to reservoir 1 since DG will send active reservoir 1 as active on power up - dgStarted = FALSE; - dgTrimmerHeaterOn = FALSE; + dgStarted = FALSE; + dgTrimmerHeaterOn = FALSE; dgTrimmerTempSet = 0.0F; - dgTrimmerTempCheckTimerCtr = 0; + dgTrimmerTempCheckTimerCtr = 0; dgActiveReservoirSet = DG_RESERVOIR_2; - dgActiveReservoir = DG_RESERVOIR_2; + dgActiveReservoir = DG_RESERVOIR_2; dgDialysateTemp = 0.0F; dgCurrentOpMode = DG_MODE_INIT; dgSubMode = 0; @@ -1020,19 +1020,18 @@ /*********************************************************************//** * @brief - * The cmdStartDGHeatDisinfect function sends a start heat disinfect - * command message to the DG. + * The cmdStartDGHeatDisinfectActiveCool function sends a start heat disinfect + * with active cool command message to the DG. * @details Inputs: none * @details Outputs: start heat disinfect mode command sent to DG. * @return none *************************************************************************/ -void cmdStartDGHeatDisinfect( void ) +void cmdStartDGHeatDisinfectActiveCool( void ) { BOOL start = TRUE; - dgCmdResp[ DG_CMD_START_HEAT_DISINFECT ].commandID = DG_CMD_NONE; - - sendDGStartHeatDisinfectModeCommand( start ); + dgCmdResp[ DG_CMD_START_HEAT_DISINFECT_ACTIVE_COOL ].commandID = DG_CMD_NONE; + sendDGStartHeatDisinfectActiveCoolModeCommand( start ); } /*********************************************************************//** @@ -1049,11 +1048,27 @@ dgCmdResp[ DG_CMD_STOP_HEAT_DISINFECT ].commandID = DG_CMD_NONE; - sendDGStartHeatDisinfectModeCommand( start ); + sendDGStartHeatDisinfectActiveCoolModeCommand( start ); } /*********************************************************************//** * @brief + * The cmdStartDGHeatDisinfectPassiveCool function sends a start + * heat disinfect with passive cool command message to DG. + * @details Inputs: none + * @details Outputs: start heat disinfect with passive cool mode command sent to DG. + * @return none + *************************************************************************/ +void cmdStartDGHeatDisinfectPassiveCool( void ) +{ + BOOL start = TRUE; + + dgCmdResp[ DG_CMD_START_HEAT_DISINFECT_PASSIVE_COOL ].commandID = DG_CMD_NONE; + sendDGStartHeatDisinfectPassiveCoolModeCommand( start ); +} + +/*********************************************************************//** + * @brief * The cmdStartDGChemicalDisinfect function sends a start chemical disinfect * command message to the DG. * @details Inputs: none @@ -1118,6 +1133,22 @@ /*********************************************************************//** * @brief + * The cmdStartDGActiveCool function sends a start active cool command + * message to the DG. + * @details Inputs: none + * @details Outputs: start active cool mode command sent to DG. + * @return none + *************************************************************************/ +void cmdStartDGActiveCool( void ) +{ + BOOL start = TRUE; + + dgCmdResp[ DG_CMD_START_ACTIVE_COOL ].commandID = DG_CMD_NONE; + sendDGStopActiveCoolModeCommand( start ); +} + +/*********************************************************************//** + * @brief * The cmdStopDGActiveCool function sends a stop active cool command * message to the DG. * @details Inputs: none @@ -1126,8 +1157,10 @@ *************************************************************************/ void cmdStopDGActiveCool( void ) { + BOOL start = FALSE; + dgCmdResp[ DG_CMD_STOP_ACTIVE_COOL ].commandID = DG_CMD_NONE; - sendDGStopActiveCoolModeCommand(); + sendDGStopActiveCoolModeCommand( start ); } /*********************************************************************//** Index: firmware/App/Controllers/DGInterface.h =================================================================== diff -u -rdb291cc22fd8f10e6e47cad468e14ed5590a94f2 -r01391d9a66d4a2d6266366d0f838c08041d2d18c --- firmware/App/Controllers/DGInterface.h (.../DGInterface.h) (revision db291cc22fd8f10e6e47cad468e14ed5590a94f2) +++ firmware/App/Controllers/DGInterface.h (.../DGInterface.h) (revision 01391d9a66d4a2d6266366d0f838c08041d2d18c) @@ -14,28 +14,28 @@ * @date (original) 08-Apr-2020 * ***************************************************************************/ - -#ifndef __DG_H__ -#define __DG_H__ - -#include "HDCommon.h" -#include "DGDefs.h" - -/** - * @defgroup DGInterface DGInterface - * @brief DG interface/monitor module. Interfaces with and monitors the - * DG (dialysate generator) sub-system. - * - * @addtogroup DGInterface - * @{ - */ - -// ********** public definitions ********** +#ifndef __DG_H__ +#define __DG_H__ + +#include "HDCommon.h" +#include "DGDefs.h" + +/** + * @defgroup DGInterface DGInterface + * @brief DG interface/monitor module. Interfaces with and monitors the + * DG (dialysate generator) sub-system. + * + * @addtogroup DGInterface + * @{ + */ + +// ********** public definitions ********** + #define DEFAULT_TARGET_FILL_FLOW_RATE_LPM 0.8F ///< Default target fill flow rate in L/min. #define DRAIN_RESERVOIR_TO_VOLUME_ML 0 ///< Drain reservoir to this volume (in mL) during treatment. #define LOAD_CELL_ILLEGAL_WEIGHT_VALUE -10000.0F ///< Initial value for Load Cells, known bad value - + /// DG Concentrate ratios data structure. typedef struct { @@ -95,20 +95,20 @@ BOOL isDGUsageInfoAvailable; ///< Flag to indicate DG usage info is available. } DG_SERVICE_AND_USAGE_DATA_T; -// ********** public function prototypes ********** - +// ********** public function prototypes ********** + void initDGInterface( void ); void execDGInterfaceMonitor( void ); -DG_OP_MODE_T getDGOpMode( void ); -U32 getDGSubMode( void ); -DG_RESERVOIR_ID_T getDGActiveReservoir( void ); +DG_OP_MODE_T getDGOpMode( void ); +U32 getDGSubMode( void ); +DG_RESERVOIR_ID_T getDGActiveReservoir( void ); DG_RESERVOIR_ID_T getDGInactiveReservoir( void ); BOOL hasDGCompletedReservoirSwitch( void ); BOOL getDialysateFlowDataFreshFlag( void ); F32 getDGDialysateFlowRateLMin( void ); -F32 getDGRawDialysateFlowRateLMin( void ); +F32 getDGRawDialysateFlowRateLMin( void ); F32 getLoadCellWeight( LOAD_CELL_ID_T loadCellID ); F32 getReservoirWeight( DG_RESERVOIR_ID_T resID ); F32 getReservoirWeightLargeFilter( DG_RESERVOIR_ID_T resID ); @@ -120,44 +120,46 @@ DG_DISINFECT_UI_STATES_T getDGDisinfectsStates( void ); DG_MIXING_RATIOS_T getDGMixingRatios( void ); void getHDVersionDGServiceAndUsageData( DG_SERVICE_AND_USAGE_DATA_T* data ); - -void setDGOpMode( U32 opMode, U32 subMode ); -void setDialysateTemperatureReadings( F32 tdi, F32 tro, F32 thd ); -void setDGReservoirsData( DG_RESERVOIR_ID_T resID, U32 fillVol, U32 drainVol ); + +void setDGOpMode( U32 opMode, U32 subMode ); +void setDialysateTemperatureReadings( F32 tdi, F32 tro, F32 thd ); +void setDGReservoirsData( DG_RESERVOIR_ID_T resID, U32 fillVol, U32 drainVol ); void setDialysateFlowData( FLOW_SENSORS_DATA_T flowRates ); void setNewLoadCellReadings( F32 res1Primary, F32 res1Backup, F32 res2Primary, F32 res2Backup ); void setDGDisinfectsStates( DG_DISINFECT_UI_STATES_T states ); void setDGMixingRatios( DG_MIXING_RATIOS_T ratios ); void setDGHeatersData( HEATERS_DATA_T *data ); void setHDVersionDGServiceRecord( DG_SERVICE_RECORD_T* data ); void setHDVersionDGUsageInfo( DG_USAGE_INFO_RECORD_T* data ); - -void cmdSetDGDialysateHeatingParams( DG_CMD_DIALYSATE_HEATING_PARAMS_T heatingParams ); -void cmdStartDG( void ); -void cmdStopDG( void ); + +void cmdSetDGDialysateHeatingParams( DG_CMD_DIALYSATE_HEATING_PARAMS_T heatingParams ); +void cmdStartDG( void ); +void cmdStopDG( void ); void cmdSetDGActiveReservoir( DG_SWITCH_RSRVRS_CMD_T *cmd ); -void cmdChangeDGValveSetting( DG_VALVE_SETTING_ID_T valveSettingID ); +void cmdChangeDGValveSetting( DG_VALVE_SETTING_ID_T valveSettingID ); void cmdStartDGFill( U32 fillToVolMl, F32 targetFlowLPM ); void cmdStopDGFill( void ); -void cmdStartDGDrain( U32 drainToVolMl, BOOL tareLoadCell, BOOL rinse, BOOL start ); -void cmdStartDGTrimmerHeater( void ); +void cmdStartDGDrain( U32 drainToVolMl, BOOL tareLoadCell, BOOL rinse, BOOL start ); +void cmdStartDGTrimmerHeater( void ); void cmdStopDGTrimmerHeater( void ); void cmdDGSampleWater( SAMPLE_WATER_CMD_T cmd ); void cmdStartDGFlush( void ); void cmdDGParkConcentratePumps( void ); void cmdStopDGFlush( void ); -void cmdStartDGHeatDisinfect( void ); +void cmdStartDGHeatDisinfectActiveCool( void ); void cmdStopDGHeatDisinfect( void ); +void cmdStartDGHeatDisinfectPassiveCool( void ); void cmdStartDGChemicalDisinfect( void ); void cmdStopDGChemicalDisinfect( void ); void cmdStartDGChemicalFlushDisinfect( void ); void cmdStopDGChemFlushDisinfect( void ); +void cmdStartDGActiveCool( void ); void cmdStopDGActiveCool( void ); void cmdStartDGROPermeateSampleMode( void ); void cmdStopDGROPermeateSampleMode( void ); void cmdRequestDGMixingRatios( void ); void cmdSetDGToServiceMode( void ); - + void handleDGCommandResponse( DG_CMD_RESPONSE_T *dgCmdRespPtr ); BOOL getDGCommandResponse( U32 commandID, DG_CMD_RESPONSE_T *cmdRespPtr ); @@ -166,6 +168,6 @@ BOOL testSetDialOutLoadCellWeightOverride( U32 sensor, F32 value ); BOOL testResetDialOutLoadCellWeightOverride( U32 sensor ); -/**@}*/ - -#endif +/**@}*/ + +#endif Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r9489c5aef10d95e89448d709c82686d13e8d4430 -r01391d9a66d4a2d6266366d0f838c08041d2d18c --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 9489c5aef10d95e89448d709c82686d13e8d4430) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 01391d9a66d4a2d6266366d0f838c08041d2d18c) @@ -88,7 +88,7 @@ static HD_STANDBY_STATE_T handleStandbyModeDGCleaningModeInProgressState( void ); static void handleDisinfectCancel( BOOL stop ); -static void setRequestedCleaningMode( DG_OP_MODE_T opMode ); +static void setRequestedCleaningMode( DG_OP_MODE_T opMode, BOOL isHeatDisPassiveCool ); static void clearCurrentCleaningModeStatus( void ); static void handleChemFlushSampleCollection( void ); static void handleROPermeateSampleCollection( void ); @@ -359,7 +359,7 @@ * The signalUserInitiateFlushMode function handles user initiation of flush * mode. * @details Inputs: currentStandbyState - * @details Outputs: flushStartReqReceived, currentStandbyState + * @details Outputs: currentStandbyState * @return TRUE if signal accepted, FALSE if not *************************************************************************/ BOOL signalUserInitiateFlushMode( void ) @@ -373,7 +373,7 @@ { if ( TRUE == isDGCommunicating() ) { - setRequestedCleaningMode( DG_MODE_FLUS ); + setRequestedCleaningMode( DG_MODE_FLUS, FALSE ); result = TRUE; currentStandbyState = STANDBY_WAIT_FOR_DISINFECT_STATE; rejReason = REQUEST_REJECT_REASON_NONE; @@ -392,13 +392,13 @@ /*********************************************************************//** * @brief - * The signalUserInitiateFlushMode function handles user initiation of heat - * disinfect mode. + * The signalUserInitiateHeatDisinfectActiveCoolMode function handles user + * initiation of heat disinfect with active cool mode. * @details Inputs: currentStandbyState - * @details Outputs: heatDisinfectStartReqReceived + * @details Outputs: currentStandbyState * @return TRUE if signal accepted, FALSE if not *************************************************************************/ -BOOL signalUserInitiateHeatDisinfectMode( void ) +BOOL signalUserInitiateHeatDisinfectActiveCoolMode( void ) { BOOL result = FALSE; REQUEST_REJECT_REASON_CODE_T rejReason = REQUEST_REJECT_REASON_NOT_ALLOWED_IN_CURRENT_MODE; @@ -409,7 +409,7 @@ { if ( TRUE == isDGCommunicating() ) { - setRequestedCleaningMode( DG_MODE_HEAT ); + setRequestedCleaningMode( DG_MODE_HEAT, FALSE ); result = TRUE; currentStandbyState = STANDBY_WAIT_FOR_DISINFECT_STATE; rejReason = REQUEST_REJECT_REASON_NONE; @@ -431,7 +431,7 @@ * The signalUserInitiateChemicalDisinfectMode function handles user * initiation of chemical disinfect mode. * @details Inputs: currentStandbyState - * @details Outputs: chemDisinfectStartReqReceived + * @details Outputs: currentStandbyState * @return TRUE if signal accepted, FALSE if not *************************************************************************/ BOOL signalUserInitiateChemicalDisinfectMode( void ) @@ -447,7 +447,7 @@ { if ( TRUE == isChemDisinfectEnabledInInstitRecord() ) { - setRequestedCleaningMode( DG_MODE_CHEM ); + setRequestedCleaningMode( DG_MODE_CHEM, FALSE ); result = TRUE; currentStandbyState = STANDBY_WAIT_FOR_DISINFECT_STATE; rejReason = REQUEST_REJECT_REASON_NONE; @@ -474,7 +474,7 @@ * The signalUserInitiateChemicalDisinfectFlushMode function handles user * initiation of chemical disinfect flush mode. * @details Inputs: currentStandbyState - * @details Outputs: chemDisinfectFlushStartReqReceived, currentStandbyState + * @details Outputs: currentStandbyState * @return TRUE if signal accepted, FALSE if not *************************************************************************/ BOOL signalUserInitiateChemicalDisinfectFlushMode( void ) @@ -490,7 +490,7 @@ { if ( TRUE == isChemDisinfectEnabledInInstitRecord() ) { - setRequestedCleaningMode( DG_MODE_CHFL ); + setRequestedCleaningMode( DG_MODE_CHFL, FALSE ); result = TRUE; currentStandbyState = STANDBY_WAIT_FOR_DISINFECT_STATE; rejReason = REQUEST_REJECT_REASON_NONE; @@ -517,7 +517,7 @@ * The signalUserInitiateROPermeateSampleMode function handles user * initiation of RO permeate sample mode. * @details Inputs: currentStandbyState - * @details Outputs: roPermeateSampleStartReqReceived, currentStandbyState + * @details Outputs: currentStandbyState * @return TRUE if signal accepted, FALSE if not *************************************************************************/ BOOL signalUserInitiateROPermeateSampleMode( void ) @@ -531,7 +531,7 @@ { if ( TRUE == isDGCommunicating() ) { - setRequestedCleaningMode( DG_MODE_ROPS ); + setRequestedCleaningMode( DG_MODE_ROPS, FALSE ); result = TRUE; currentStandbyState = STANDBY_WAIT_FOR_DISINFECT_STATE; rejReason = REQUEST_REJECT_REASON_NONE; @@ -550,6 +550,79 @@ /*********************************************************************//** * @brief + * The signalUserInitiateHeatDisinfectPassiveCoolMode function handles user + * initiation of passive cool heat disinfect mode. + * @details Inputs: currentStandbyState + * @details Outputs: currentStandbyState + * @return TRUE if signal accepted, FALSE if not + *************************************************************************/ +BOOL signalUserInitiateHeatDisinfectPassiveCoolMode( void ) +{ + BOOL result = FALSE; + REQUEST_REJECT_REASON_CODE_T rejReason = REQUEST_REJECT_REASON_NOT_ALLOWED_IN_CURRENT_MODE; + + if ( MODE_STAN == getCurrentOperationMode() ) + { + if ( ( STANDBY_WAIT_FOR_DISINFECT_STATE == currentStandbyState ) || ( STANDBY_WAIT_FOR_TREATMENT_STATE == currentStandbyState ) ) + { + if ( TRUE == isDGCommunicating() ) + { + setRequestedCleaningMode( DG_MODE_HEAT, TRUE ); + result = TRUE; + currentStandbyState = STANDBY_WAIT_FOR_DISINFECT_STATE; + rejReason = REQUEST_REJECT_REASON_NONE; + } + else + { + rejReason = REQUEST_REJECT_REASON_DG_COMM_LOST; + } + } + } + + sendDisinfectConfirmResponse( result, rejReason ); + + return result; +} + +/*********************************************************************//** + * @brief + * The signalUserInitiateActiveCoolMode function handles user initiation of + * active cool mode. + * @details Inputs: currentStandbyState + * @details Outputs: currentStandbyState + * @return TRUE if signal accepted, FALSE if not + *************************************************************************/ +BOOL signalUserInitiateActiveCoolMode( void ) +{ + BOOL result = FALSE; + REQUEST_REJECT_REASON_CODE_T rejReason = REQUEST_REJECT_REASON_NOT_ALLOWED_IN_CURRENT_MODE; + + if ( MODE_STAN == getCurrentOperationMode() ) + { + if ( ( STANDBY_WAIT_FOR_DISINFECT_STATE == currentStandbyState ) || ( STANDBY_WAIT_FOR_TREATMENT_STATE == currentStandbyState ) ) + { + if ( TRUE == isDGCommunicating() ) + { + setRequestedCleaningMode( DG_MODE_HCOL, FALSE ); + result = TRUE; + currentStandbyState = STANDBY_WAIT_FOR_DISINFECT_STATE; + rejReason = REQUEST_REJECT_REASON_NONE; + } + else + { + rejReason = REQUEST_REJECT_REASON_DG_COMM_LOST; + } + } + } + + sendDisinfectConfirmResponse( result, rejReason ); + + return result; +} + + +/*********************************************************************//** + * @brief * The signalInitiateStandbyDisinfectSubmode function handles user * initiation of setting the disinfects submode. * @details Inputs: currentStandbyState @@ -706,7 +779,7 @@ case DG_MODE_CHFL: case DG_MODE_HCOL: case DG_MODE_ROPS: - setRequestedCleaningMode( dgOperationMode ); + setRequestedCleaningMode( dgOperationMode, FALSE ); state = STANDBY_WAIT_FOR_DG_CLEANING_MODE_TO_START_STATE; break; @@ -771,7 +844,14 @@ break; case DG_MODE_HEAT: - cmdStartDGHeatDisinfect(); + if ( DG_CMD_START_HEAT_DISINFECT_ACTIVE_COOL == currentDGCleaningMode.startRequestCmdID ) + { + cmdStartDGHeatDisinfectActiveCool(); + } + else + { + cmdStartDGHeatDisinfectPassiveCool(); + } break; case DG_MODE_CHEM: @@ -785,6 +865,10 @@ case DG_MODE_ROPS: cmdStartDGROPermeateSampleMode(); break; + + case DG_MODE_HCOL: + cmdStartDGActiveCool(); + break; } state = STANDBY_WAIT_FOR_DG_CLEANING_MODE_CMD_RESPONSE_STATE; } @@ -799,7 +883,7 @@ case DG_MODE_ROPS: // This is for the situations that any of the disinfect modes are started using the proxy commands while the HD // is in this state of the Standby Mode. - setRequestedCleaningMode( getDGOpMode() ); + setRequestedCleaningMode( getDGOpMode(), FALSE ); state = STANDBY_WAIT_FOR_DG_CLEANING_MODE_TO_START_STATE; currentDGCleaningMode.startCleaningMode = FALSE; break; @@ -891,6 +975,8 @@ { state = STANDBY_WAIT_FOR_TREATMENT_STATE; clearAlarm( currentDGCleaningMode.alarmID ); + // In case alarm 306 has been triggered, and it was not cleared, clear it upon exiting the disinfection mode. + clearAlarm( ALARM_ID_DG_TURN_OFF_INLET_WATER_VALVES ); clearCurrentCleaningModeStatus(); } @@ -978,9 +1064,11 @@ * @details Inputs: currentDGCleaningMode * @details Outputs: none * @param opMode DG operation mode that has been requested (i.e. heat disinfect) + * @param isHeatDisPassiveCool boolean flag to indicate whether this is a passive + * cool heat disinfect or not. * @return none *************************************************************************/ -static void setRequestedCleaningMode( DG_OP_MODE_T opMode ) +static void setRequestedCleaningMode( DG_OP_MODE_T opMode, BOOL isHeatDisPassiveCool ) { switch ( opMode ) { @@ -995,7 +1083,7 @@ case DG_MODE_HEAT: currentDGCleaningMode.startCleaningMode = TRUE; - currentDGCleaningMode.startRequestCmdID = DG_CMD_START_HEAT_DISINFECT; + currentDGCleaningMode.startRequestCmdID = ( FALSE == isHeatDisPassiveCool ? DG_CMD_START_HEAT_DISINFECT_ACTIVE_COOL : DG_CMD_START_HEAT_DISINFECT_PASSIVE_COOL ); currentDGCleaningMode.dgOpMode = DG_MODE_HEAT; currentDGCleaningMode.sampleRqstTrgrd = FALSE; currentDGCleaningMode.alarmID = ALARM_ID_HD_DISINFECT_HEAT; @@ -1021,9 +1109,8 @@ break; case DG_MODE_HCOL: - // Cannot start active cool from settings in the UI currentDGCleaningMode.startCleaningMode = FALSE; - currentDGCleaningMode.startRequestCmdID = DG_CMD_NONE; + currentDGCleaningMode.startRequestCmdID = DG_CMD_START_ACTIVE_COOL; currentDGCleaningMode.dgOpMode = DG_MODE_HCOL; currentDGCleaningMode.sampleRqstTrgrd = FALSE; currentDGCleaningMode.alarmID = ALARM_ID_HD_DISINFECT_HEAT_COOL; Index: firmware/App/Modes/ModeStandby.h =================================================================== diff -u -r3741b7bb1a2e35a0b3618a9212f277f1937ee75f -r01391d9a66d4a2d6266366d0f838c08041d2d18c --- firmware/App/Modes/ModeStandby.h (.../ModeStandby.h) (revision 3741b7bb1a2e35a0b3618a9212f277f1937ee75f) +++ firmware/App/Modes/ModeStandby.h (.../ModeStandby.h) (revision 01391d9a66d4a2d6266366d0f838c08041d2d18c) @@ -41,10 +41,12 @@ void signalNoDisinfectRequired( void ); // User has aborted a treatment prior to introduction of blood - no disinfect required afterward void signalAlarmActionToStandbyMode( ALARM_ACTION_T action ); // Execute alarm action as appropriate for Standby mode BOOL signalUserInitiateFlushMode( void ); -BOOL signalUserInitiateHeatDisinfectMode( void ); +BOOL signalUserInitiateHeatDisinfectActiveCoolMode( void ); BOOL signalUserInitiateChemicalDisinfectMode( void ); BOOL signalUserInitiateChemicalDisinfectFlushMode( void ); BOOL signalUserInitiateROPermeateSampleMode( void ); +BOOL signalUserInitiateHeatDisinfectPassiveCoolMode( void ); +BOOL signalUserInitiateActiveCoolMode( void ); BOOL signalInitiateStandbyDisinfectSubmode( U32 cmd ); void signalROPermeateSampleDGReadyToDispense( void ); Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r6081643fbc7826ec53b9eb158481bdce6799ef7e -r01391d9a66d4a2d6266366d0f838c08041d2d18c --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 6081643fbc7826ec53b9eb158481bdce6799ef7e) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 01391d9a66d4a2d6266366d0f838c08041d2d18c) @@ -871,26 +871,34 @@ memcpy( &cmd, message->payload, sizeof(U32) ); - if ( DG_DISINFECT_FLUSH_STATE == cmd ) // Command 0 = Flush + if ( DG_DISINFECT_FLUSH_STATE == cmd ) // Command 0 = Flush { result = signalUserInitiateFlushMode(); } - else if ( DG_DISINFECT_HEAT_STATE == cmd ) // Command 1 = Heat disinfect + else if ( DG_DISINFECT_HEAT_STATE_ACTIVE_COOL == cmd ) // Command 1 = Heat disinfect active cool { - result = signalUserInitiateHeatDisinfectMode(); + result = signalUserInitiateHeatDisinfectActiveCoolMode(); } - else if ( DG_DISINFECT_CHEM_STATE == cmd ) // Command 2 = chemical disinfect + else if ( DG_DISINFECT_CHEM_STATE == cmd ) // Command 2 = chemical disinfect { result = signalUserInitiateChemicalDisinfectMode(); } - else if ( DG_DISINFECT_CHEM_FLUSH_STATE == cmd ) // Command 3 = chemical disinfect flush + else if ( DG_DISINFECT_CHEM_FLUSH_STATE == cmd ) // Command 3 = chemical disinfect flush { result = signalUserInitiateChemicalDisinfectFlushMode(); } - else if ( DG_DISINFECT_RO_PERMEATE_SAMPLE_STATE == cmd ) // Command 4 = RO permeate sample + else if ( DG_DISINFECT_RO_PERMEATE_SAMPLE_STATE == cmd ) // Command 4 = RO permeate sample { result = signalUserInitiateROPermeateSampleMode(); } + else if ( DG_DISINFECT_HEAT_STATE_PASSIVE_COOL == cmd ) // Command 5 = Heat disinfect passive coode + { + result = signalUserInitiateHeatDisinfectPassiveCoolMode(); + } + else if ( DG_DISINFECT_ACTIVE_COOL == cmd ) // Command 6 = Active cool + { + result = signalUserInitiateActiveCoolMode(); + } } sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_HD_2_UI, result ); @@ -1806,21 +1814,22 @@ /*********************************************************************//** * @brief - * The sendDGStartHeatDisinfectModeCommand function constructs a DG start/stop - * heat disinfect mode command message and queues the msg for transmit on - * the appropriate CAN channel. + * The sendDGStartHeatDisinfectActiveCoolModeCommand function constructs a + * DG start/stop heat disinfect with active coolmode command message and + * queues the msg for transmit on the appropriate CAN channel. * @details Inputs: none * @details Outputs: DG start heat disinfect mode command msg constructed * and queued. * @param start TRUE indicates start heat disinfect mode * @return TRUE if msg successfully queued for transmit, FALSE if not *************************************************************************/ -BOOL sendDGStartHeatDisinfectModeCommand( BOOL start ) +BOOL sendDGStartHeatDisinfectActiveCoolModeCommand( BOOL start ) { BOOL result; MESSAGE_T msg; DG_HEAT_DISINFECTION_MODE_CMD_T cmd; + // Start command cmd.start = start; // Create a message record @@ -3431,16 +3440,18 @@ void handleHDUsageInfoRequest( MESSAGE_T *message ) { MESSAGE_T msg; - U32 payload = 0; // TODO update this one implemented + HD_USAGE_INFO_RECORD_T usageRecord; U08 *payloadPtr = msg.payload; + getNVRecord2Driver( GET_USAGE_RECORD, (U08*)&usageRecord, sizeof( HD_USAGE_INFO_RECORD_T ), 0, ALARM_ID_NO_ALARM ); + // Create a message record blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_HD_USAGE_DATA; - msg.hdr.payloadLen = sizeof( U32 ); + msg.hdr.msgID = MSG_ID_HD_USAGE_DATA; + msg.hdr.payloadLen = sizeof( HD_USAGE_INFO_RECORD_T ); // Fill message payload - memcpy( payloadPtr, &payload, sizeof( U32 ) ); + memcpy( payloadPtr, &usageRecord, sizeof( HD_USAGE_INFO_RECORD_T ) ); // Serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer serializeMessage( msg, COMM_BUFFER_OUT_CAN_HD_2_UI, ACK_REQUIRED ); @@ -3542,13 +3553,14 @@ * active cool mode command * @details Inputs: none * @details Outputs: none + * @param start the boolean flag to indicate whether to start or stop the + * active cool * @return TRUE if the command was serialized successfully *************************************************************************/ -BOOL sendDGStopActiveCoolModeCommand( void ) +BOOL sendDGStopActiveCoolModeCommand( BOOL start ) { BOOL result; MESSAGE_T msg; - BOOL start = FALSE; // Create a message record blankMessage( &msg ); @@ -3714,7 +3726,38 @@ sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_HD_2_UI, FALSE ); } +/*********************************************************************//** + * @brief + * The sendDGStartHeatDisinfectPassiveCoolModeCommand function handles the send + * request to start or stop nocturnal heat disinfect. + * @details Inputs: none + * @details Outputs: none + * @param start TRUE indicates start heat disinfect mode + * @return none + *************************************************************************/ +BOOL sendDGStartHeatDisinfectPassiveCoolModeCommand( BOOL start ) +{ + BOOL result; + MESSAGE_T msg; + DG_HEAT_DISINFECTION_MODE_CMD_T cmd; + // Start command + cmd.start = start; + + // Create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_DG_START_STOP_PASSIVE_COOL_HEAT_DISINFECT; + msg.hdr.payloadLen = sizeof( DG_HEAT_DISINFECTION_MODE_CMD_T ); + + memcpy( &msg.payload, &cmd, sizeof( DG_HEAT_DISINFECTION_MODE_CMD_T ) ); + + // Serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_HD_2_DG, ACK_REQUIRED ); + + return result; +} + + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r6081643fbc7826ec53b9eb158481bdce6799ef7e -r01391d9a66d4a2d6266366d0f838c08041d2d18c --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 6081643fbc7826ec53b9eb158481bdce6799ef7e) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 01391d9a66d4a2d6266366d0f838c08041d2d18c) @@ -467,7 +467,7 @@ BOOL sendDGParkConcentratePumpsCommand( void ); // MSG_ID_DG_START_STOP_HEAT_DISINFECT -BOOL sendDGStartHeatDisinfectModeCommand( BOOL start ); +BOOL sendDGStartHeatDisinfectActiveCoolModeCommand( BOOL start ); // MSG_ID_DG_START_STOP_CHEM_DISINFECT BOOL sendDGStartChemicalDisinfectModeCommand( BOOL start ); @@ -547,7 +547,7 @@ void handleSendChemFlushPassFailToDG( U32 status ); // MSG_ID_DG_START_STOP_HEAT_DISINFECT_ACTIVE_COOL -BOOL sendDGStopActiveCoolModeCommand( void ); +BOOL sendDGStopActiveCoolModeCommand( BOOL start ); // MSG_ID_DG_START_STOP_RO_PERMEATE_SAMPLE_MODE_CMD_REQUEST BOOL sendDGStartStopDGROPermeateSampleModeCommand( BOOL start ); @@ -564,6 +564,9 @@ // MSG_ID_UI_HD_RESET_IN_SERVICE_MODE_REQUEST void handleUIHDResetInServiceModeRequest( MESSAGE_T* message ); +// MSG_ID_DG_START_STOP_PASSIVE_COOL_HEAT_DISINFECT +BOOL sendDGStartHeatDisinfectPassiveCoolModeCommand( BOOL start ); + // *********** public test support message functions ********** // MSG_TESTER_LOG_IN