Index: firmware/App/Modes/ModeHeatDisinfect.c =================================================================== diff -u -rd0536d759cb33f099357033c3429401ff1637d26 -r6703d916afad5bfc0f5282e8ff6a09d8ce6d9180 --- firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision d0536d759cb33f099357033c3429401ff1637d26) +++ firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision 6703d916afad5bfc0f5282e8ff6a09d8ce6d9180) @@ -106,6 +106,7 @@ #define HEAT_DISINFECT_REF_RSRVR_TIMEOUT_MS ( 5 * MS_PER_SECOND ) ///< Heat disinfect getting reference reservoirs value timeout in milliseconds. #define HEAT_DISINFECT_AT_82_C_TIME_MS ( 10 * SEC_PER_MIN * MS_PER_SECOND ) ///< Heat disinfect time at 82 C in milliseconds. #define HEAT_DISINFECT_AT_77_C_TIME_MS ( 32 * SEC_PER_MIN * MS_PER_SECOND ) ///< Heat disinfect time at 77 C in milliseconds. +#define HEAT_DISNFECT_MIN_OVERRIDE_TIME ( SEC_PER_MIN * MS_PER_SECOND ) ///< Heat disinfect minimum override time. // Mix drain R1 and R2 #define RSRVRS_MIX_DRAIN_TIMEOUT_MS ( 5 * SEC_PER_MIN * MS_PER_SECOND ) ///< Reservoirs 1 & 2 mix drain timeout in ms. @@ -187,6 +188,8 @@ static HEAT_DISINFECT_TIME_STATUS_T timeStatus[ NUM_OF_HEAT_DISINFECT_TIMES ]; ///< Heat disinfect time status. static F32 concPumpsStartTemperatureC; ///< Heat disinfect concentrate pumps start temperature in C. static BOOL isRODisinfectDone; ///< Heat disinfect is RO disinfect done flag. +static OVERRIDE_U32_T targetTimer77C = { HEAT_DISINFECT_AT_77_C_TIME_MS, 0, 0, 0 }; ///< Heat disinfection override target timer at 77 C +static OVERRIDE_U32_T targetTimer82C = { HEAT_DISINFECT_AT_82_C_TIME_MS, 0, 0, 0 }; ///< Heat disinfection override target timer at 82 C #ifndef _RELEASE_ /* Nelson Labs is in charge of testing the efficacy of the disinfects (heat and chem). The codes that contain the name Nelson are used to @@ -281,25 +284,25 @@ timeStatus[ RO_AT_77_C ].startTempC = HEAT_DISINFECT_START_TEMP_AT_77_C; timeStatus[ RO_AT_77_C ].startTimeMS = 0; timeStatus[ RO_AT_77_C ].stopTempC = HEAT_DISINFECT_STOP_TEMP_AT_76_C; - timeStatus[ RO_AT_77_C ].targetTimeMS = HEAT_DISINFECT_AT_77_C_TIME_MS; + timeStatus[ RO_AT_77_C ].targetTimeMS = getU32OverrideValue( &targetTimer77C ); timeStatus[ RO_AT_77_C ].tempSensor = TEMPSENSORS_HEAT_DISINFECT; timeStatus[ RO_AT_82_C ].startTempC = HEAT_DISINFECT_START_TEMP_AT_82_C; timeStatus[ RO_AT_82_C ].startTimeMS = 0; timeStatus[ RO_AT_82_C ].stopTempC = HEAT_DISINFECT_STOP_TEMP_AT_81_C; - timeStatus[ RO_AT_82_C ].targetTimeMS = HEAT_DISINFECT_AT_82_C_TIME_MS; + timeStatus[ RO_AT_82_C ].targetTimeMS = getU32OverrideValue( &targetTimer82C );; timeStatus[ RO_AT_82_C ].tempSensor = TEMPSENSORS_HEAT_DISINFECT; timeStatus[ RSRVR_AT_77_C ].startTempC = HEAT_DISINFECT_START_TEMP_AT_77_C; timeStatus[ RSRVR_AT_77_C ].startTimeMS = 0; timeStatus[ RSRVR_AT_77_C ].stopTempC = HEAT_DISINFECT_STOP_TEMP_AT_76_C; - timeStatus[ RSRVR_AT_77_C ].targetTimeMS = HEAT_DISINFECT_AT_77_C_TIME_MS; + timeStatus[ RSRVR_AT_77_C ].targetTimeMS = getU32OverrideValue( &targetTimer77C ); timeStatus[ RSRVR_AT_77_C ].tempSensor = TEMPSENSORS_INLET_DIALYSATE; timeStatus[ RSRVR_AT_82_C ].startTempC = HEAT_DISINFECT_START_TEMP_AT_82_C; timeStatus[ RSRVR_AT_82_C ].startTimeMS = 0; timeStatus[ RSRVR_AT_82_C ].stopTempC = HEAT_DISINFECT_STOP_TEMP_AT_81_C; - timeStatus[ RSRVR_AT_82_C ].targetTimeMS = HEAT_DISINFECT_AT_82_C_TIME_MS; + timeStatus[ RSRVR_AT_82_C ].targetTimeMS = getU32OverrideValue( &targetTimer82C ); timeStatus[ RSRVR_AT_82_C ].tempSensor = TEMPSENSORS_INLET_DIALYSATE; #ifndef _RELEASE_ @@ -2012,6 +2015,104 @@ } } + +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + + +/*********************************************************************//** + * @brief + * The testSetDG77CStateTimerOverride function checks whether the disinfection + * time of either reservoirs or the RO filter has been elapsed. + * @details Inputs: none + * @details Outputs: targetTimer77C + * @param timer which is the time to check at 77 C + * @return TRUE if request successful, FALSE if not + *************************************************************************/ +BOOL testSetDG77CStateTimerOverride( U32 timer ) +{ + BOOL result = FALSE; + + if ( ( TRUE == isTestingActivated() ) && ( timer >= HEAT_DISNFECT_MIN_OVERRIDE_TIME ) ) + { + targetTimer77C.ovData = timer; + targetTimer77C.override = OVERRIDE_KEY; + result = TRUE; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetDG77CStateTimerOverride function checks whether the disinfection + * time of either reservoirs or the RO filter has been elapsed. + * @details Inputs: none + * @details Outputs: targetTimer77C + * @param timer which is the time to check at 77 C + * @return TRUE if request successful, FALSE if not + *************************************************************************/ +BOOL testResetDG77CStateTimerOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + targetTimer77C.override = OVERRIDE_RESET; + targetTimer77C.ovData = targetTimer77C.ovInitData; + result = TRUE; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testSetDG82CStateTimerOverride function checks whether the disinfection + * time of either reservoirs or the RO filter has been elapsed. + * @details Inputs: none + * @details Outputs: targetTimer82C + * @param timer which is the time to check at 82 C + * @return TRUE if request successful, FALSE if not + *************************************************************************/ +BOOL testSetDG82CStateTimerOverride( U32 timer ) +{ + BOOL result = FALSE; + + if ( ( TRUE == isTestingActivated() ) && ( timer >= HEAT_DISNFECT_MIN_OVERRIDE_TIME ) ) + { + targetTimer82C.ovData = timer; + targetTimer82C.override = OVERRIDE_KEY; + result = TRUE; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetDG82CStateTimerOverride function checks whether the disinfection + * time of either reservoirs or the RO filter has been elapsed. + * @details Inputs: none + * @details Outputs: targetTimer82C + * @param timer which is the time to check at 82 C + * @return TRUE if request successful, FALSE if not + *************************************************************************/ +BOOL testResetDG82CStateTimerOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + targetTimer82C.override = OVERRIDE_RESET; + targetTimer82C.ovData = targetTimer82C.ovInitData; + result = TRUE; + } + + return result; +} + /**@}*/ // ********** Nelson Support Functions ********** Index: firmware/App/Modes/ModeHeatDisinfect.h =================================================================== diff -u -r56ba1b163b0cbf6953638065b2108f745b17ec8f -r6703d916afad5bfc0f5282e8ff6a09d8ce6d9180 --- firmware/App/Modes/ModeHeatDisinfect.h (.../ModeHeatDisinfect.h) (revision 56ba1b163b0cbf6953638065b2108f745b17ec8f) +++ firmware/App/Modes/ModeHeatDisinfect.h (.../ModeHeatDisinfect.h) (revision 6703d916afad5bfc0f5282e8ff6a09d8ce6d9180) @@ -50,6 +50,10 @@ DG_HEAT_DISINFECT_STATE_T getCurrentHeatDisinfectState( void ); // get the current state of the heat disinfect mode BOOL stopDGHeatDisinfect( void ); // Stop DG heat disinfect +BOOL testSetDG77CStateTimerOverride( U32 timer ); // set override timer for disinfection at 77C +BOOL testResetDG77CStateTimerOverride( void ); // reset override timer for disinfection at 77C +BOOL testSetDG82CStateTimerOverride( U32 timer ); // set override timer for disinfection at 82C +BOOL testResetDG82CStateTimerOverride( void ); // reset override timer for disinfection at 77C #ifndef _RELEASE_ void setHeatNelsonSupportMode( NELSON_SUPPORT_T support ); Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -rbd1f452097afa4da0f60f64ecc6b6aab0a341d8c -r6703d916afad5bfc0f5282e8ff6a09d8ce6d9180 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision bd1f452097afa4da0f60f64ecc6b6aab0a341d8c) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 6703d916afad5bfc0f5282e8ff6a09d8ce6d9180) @@ -1378,6 +1378,14 @@ handleTestDGPendingACKOverrideRequest( message ); break; + case MSG_ID_DG_STATE_TIMER_82C_OVERRIDE: + handleTestDG82CStateTimerOverride( message ); + break; + + case MSG_ID_DG_STATE_TIMER_77C_OVERRIDE: + handleTestDG77CStateTimerOverride( message ); + break; + default: // TODO - unrecognized message ID received - ignore break; Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -rbd1f452097afa4da0f60f64ecc6b6aab0a341d8c -r6703d916afad5bfc0f5282e8ff6a09d8ce6d9180 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision bd1f452097afa4da0f60f64ecc6b6aab0a341d8c) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 6703d916afad5bfc0f5282e8ff6a09d8ce6d9180) @@ -5044,4 +5044,68 @@ sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); } +/*********************************************************************//** + * @brief + * The handleTestDG77CStateTimerOverride function handles a request + * to override the heat disinfection timer at 77 C + * @details Inputs: none + * @details Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleTestDG77CStateTimerOverride( MESSAGE_T * message ) +{ + TEST_OVERRIDE_PAYLOAD_T payload; + BOOL result = FALSE; + + // verify payload length + if ( sizeof( TEST_OVERRIDE_PAYLOAD_T ) == message->hdr.payloadLen ) + { + memcpy( &payload, message->payload, sizeof( TEST_OVERRIDE_PAYLOAD_T ) ); + if ( FALSE == payload.reset ) + { + result = testSetDG77CStateTimerOverride( payload.state.u32 ); + } + else + { + result = testResetDG77CStateTimerOverride(); + } + } + + // respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + +/*********************************************************************//** + * @brief + * The handleTestDG82CStateTimerOverride function handles a request + * to override the heat disinfection timer at 82 C + * @details Inputs: none + * @details Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleTestDG82CStateTimerOverride( MESSAGE_T * message ) +{ + TEST_OVERRIDE_PAYLOAD_T payload; + BOOL result = FALSE; + + // verify payload length + if ( sizeof( TEST_OVERRIDE_PAYLOAD_T ) == message->hdr.payloadLen ) + { + memcpy( &payload, message->payload, sizeof( TEST_OVERRIDE_PAYLOAD_T ) ); + if ( FALSE == payload.reset ) + { + result = testSetDG82CStateTimerOverride( payload.state.u32 ); + } + else + { + result = testResetDG82CStateTimerOverride(); + } + } + + // respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + /**@}*/ Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -rb607a94701f5844f2e850783239d1cb2df87fcd5 -r6703d916afad5bfc0f5282e8ff6a09d8ce6d9180 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision b607a94701f5844f2e850783239d1cb2df87fcd5) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 6703d916afad5bfc0f5282e8ff6a09d8ce6d9180) @@ -527,8 +527,14 @@ void handleTestDGPendingACKOverrideRequest( MESSAGE_T* message ); // MSG_ID_DG_RESERVOIR_BROADCAST_INTERVAL_OVERRIDE -void handleTestDGReservoirOverrideRequest( MESSAGE_T* message); +void handleTestDGReservoirOverrideRequest( MESSAGE_T* message ); +// MSG_ID_DG_STATE_TIMER_77C_OVERRIDE +void handleTestDG77CStateTimerOverride( MESSAGE_T* message ); + +// MSG_ID_DG_STATE_TIMER_82C_OVERRIDE +void handleTestDG82CStateTimerOverride( MESSAGE_T* message ); + /**@}*/ #endif