Index: firmware/App/DGCommon.h =================================================================== diff -u -r4790fb46181f78a19f0a557b0e9688cc03a74e97 -r3c1ca4197b63f7988fe3bf58cf80299e4481416a --- firmware/App/DGCommon.h (.../DGCommon.h) (revision 4790fb46181f78a19f0a557b0e9688cc03a74e97) +++ firmware/App/DGCommon.h (.../DGCommon.h) (revision 3c1ca4197b63f7988fe3bf58cf80299e4481416a) @@ -25,7 +25,7 @@ #define DG_VERSION_MAJOR 0 #define DG_VERSION_MINOR 6 #define DG_VERSION_MICRO 0 -#define DG_VERSION_BUILD 11 +#define DG_VERSION_BUILD 31 // ********** build switches ********** Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -r6818dafc0839d6e8585f5e6f35013f539ad5a0ed -r3c1ca4197b63f7988fe3bf58cf80299e4481416a --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 6818dafc0839d6e8585f5e6f35013f539ad5a0ed) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 3c1ca4197b63f7988fe3bf58cf80299e4481416a) @@ -22,9 +22,9 @@ #include "ModeFault.h" #include "ModeFill.h" #include "ModeFlush.h" +#include "ModeGenIdle.h" #include "ModeHeatDisinfect.h" #include "ModeInitPOST.h" -#include "ModeRecirculate.h" #include "ModeService.h" #include "ModeSolo.h" #include "ModeStandby.h" @@ -54,15 +54,15 @@ /// This matrix determines legal transitions from one mode to another. static const DG_OP_MODE_T MODE_TRANSITION_TABLE[ NUM_OF_DG_MODES - 1 ][ NUM_OF_DG_MODES - 1 ] = { -// from to-> FAULT SERVICE INIT STANBY STBY-SOLO RE-CIRC FILL DRAIN FLUSH HEAT DIS CHEM DIS +// from to-> FAULT SERVICE INIT STANBY STBY-SOLO GEN-IDLE FILL DRAIN FLUSH HEAT DIS CHEM DIS /* FAUL */{ DG_MODE_FAUL, DG_MODE_SERV, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG }, /* SERV */{ DG_MODE_FAUL, DG_MODE_SERV, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG }, /* INIT */{ DG_MODE_FAUL, DG_MODE_NLEG, DG_MODE_INIT, DG_MODE_STAN, DG_MODE_SOLO, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG }, - /* STAN */{ DG_MODE_FAUL, DG_MODE_SERV, DG_MODE_NLEG, DG_MODE_STAN, DG_MODE_SOLO, DG_MODE_CIRC, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_FLUS, DG_MODE_HEAT, DG_MODE_CHEM }, + /* STAN */{ DG_MODE_FAUL, DG_MODE_SERV, DG_MODE_NLEG, DG_MODE_STAN, DG_MODE_SOLO, DG_MODE_GENE, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_FLUS, DG_MODE_HEAT, DG_MODE_CHEM }, /* SOLO */{ DG_MODE_FAUL, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_STAN, DG_MODE_SOLO, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_FLUS, DG_MODE_HEAT, DG_MODE_CHEM /*DG_MODE_NLEG*/ }, // TODO for testing only - /* CIRC */{ DG_MODE_FAUL, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_STAN, DG_MODE_NLEG, DG_MODE_CIRC, DG_MODE_FILL, DG_MODE_DRAI, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG }, - /* FILL */{ DG_MODE_FAUL, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_STAN, DG_MODE_NLEG, DG_MODE_CIRC, DG_MODE_FILL, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG }, - /* DRAI */{ DG_MODE_FAUL, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_STAN, DG_MODE_NLEG, DG_MODE_CIRC, DG_MODE_NLEG, DG_MODE_DRAI, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG }, + /* GENE */{ DG_MODE_FAUL, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_STAN, DG_MODE_NLEG, DG_MODE_GENE, DG_MODE_FILL, DG_MODE_DRAI, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG }, + /* FILL */{ DG_MODE_FAUL, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_STAN, DG_MODE_NLEG, DG_MODE_GENE, DG_MODE_FILL, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG }, + /* DRAI */{ DG_MODE_FAUL, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_STAN, DG_MODE_NLEG, DG_MODE_GENE, DG_MODE_NLEG, DG_MODE_DRAI, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG }, /* FLUS */{ DG_MODE_FAUL, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_STAN, DG_MODE_SOLO, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_FLUS, DG_MODE_NLEG, DG_MODE_NLEG }, /* HEAT */{ DG_MODE_FAUL, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_STAN, DG_MODE_SOLO, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_HEAT, DG_MODE_NLEG }, /* CHEM */{ DG_MODE_FAUL, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_STAN, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_CHEM } @@ -104,7 +104,7 @@ initInitAndPOSTMode(); initStandbyMode(); initSoloMode(); - initRecirculateMode(); + initGenIdleMode(); initFillMode(); initDrainMode(); initFlushMode(); @@ -166,8 +166,8 @@ currentSubMode = execSoloMode(); break; - case DG_MODE_CIRC: - currentSubMode = execRecirculateMode(); + case DG_MODE_GENE: + currentSubMode = execGenIdleMode(); break; case DG_MODE_FILL: @@ -314,8 +314,8 @@ case DG_MODE_SOLO: transitionToSoloMode(); break; - case DG_MODE_CIRC: - transitionToRecirculateMode(); + case DG_MODE_GENE: + transitionToGenIdleMode(); break; case DG_MODE_FILL: transitionToFillMode(); Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -r47c41046beba8affaaaa13a4f222a7b99bd193f1 -r3c1ca4197b63f7988fe3bf58cf80299e4481416a --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 47c41046beba8affaaaa13a4f222a7b99bd193f1) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 3c1ca4197b63f7988fe3bf58cf80299e4481416a) @@ -107,7 +107,7 @@ SW_FAULT_ID_HEAT_DISINFECT_INVALID_EXEC_STATE, SW_FAULT_ID_INVALID_DG_RESERVOIR_SELECTED, SW_FAULT_ID_STANDBY_MODE_INVALID_EXEC_STATE, - SW_FAULT_ID_RECIRC_MODE_INVALID_EXEC_STATE, + SW_FAULT_ID_GEN_IDLE_MODE_INVALID_EXEC_STATE, SW_FAULT_ID_DRAIN_MODE_INVALID_EXEC_STATE, // 80 SW_FAULT_ID_FILL_MODE_INVALID_EXEC_STATE, SW_FAULT_ID_SOLO_MODE_INVALID_EXEC_STATE, Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r233034b67edaee48012bf9a5478327519e0256bb -r3c1ca4197b63f7988fe3bf58cf80299e4481416a --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 233034b67edaee48012bf9a5478327519e0256bb) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 3c1ca4197b63f7988fe3bf58cf80299e4481416a) @@ -25,8 +25,8 @@ #include "FPGA.h" #include "Heaters.h" #include "ModeFlush.h" +#include "ModeGenIdle.h" #include "ModeStandby.h" -#include "ModeRecirculate.h" #include "MsgQueues.h" #include "NVDataMgmt.h" #include "OperationModes.h" @@ -1572,11 +1572,11 @@ memcpy( &startingTreatment, message->payload, sizeof( U32 ) ); - if ( DG_MODE_STAN == getCurrentOperationMode() && TRUE == startingTreatment ) + if ( ( DG_MODE_STAN == getCurrentOperationMode() ) && ( TRUE == startingTreatment ) ) { result = requestDGStart(); } - else if ( DG_MODE_CIRC == getCurrentOperationMode() && FALSE == startingTreatment ) + else if ( ( DG_MODE_GENE == getCurrentOperationMode() ) && ( FALSE == startingTreatment ) ) { result = requestDGStop(); } @@ -2909,11 +2909,11 @@ memcpy( &payload, message->payload, sizeof( TEST_OVERRIDE_ARRAY_PAYLOAD_T ) ); if ( ( BOOL )payload.state.u32 ) { - requestConcentratePumpsOn( ( CONCENTRATE_PUMPS_T )payload.index ); + requestConcentratePumpOn( ( CONCENTRATE_PUMPS_T )payload.index ); } else { - requestConcentratePumpsOff( ( CONCENTRATE_PUMPS_T )payload.index ); + requestConcentratePumpOff( ( CONCENTRATE_PUMPS_T )payload.index ); } } Index: firmware/App/Services/WatchdogMgmt.c =================================================================== diff -u -rd3819286869611f9c02add72a0f8e321598fdf42 -r3c1ca4197b63f7988fe3bf58cf80299e4481416a --- firmware/App/Services/WatchdogMgmt.c (.../WatchdogMgmt.c) (revision d3819286869611f9c02add72a0f8e321598fdf42) +++ firmware/App/Services/WatchdogMgmt.c (.../WatchdogMgmt.c) (revision 3c1ca4197b63f7988fe3bf58cf80299e4481416a) @@ -15,7 +15,9 @@ * ***************************************************************************/ -#include "CPLD.h" +#include "CPLD.h" +#include "InternalADC.h" +#include "OperationModes.h" #include "SystemCommMessages.h" #include "Timers.h" #include "WatchdogMgmt.h" @@ -28,9 +30,13 @@ // ********** private definitions ********** #define MIN_WATCHDOG_PET_INTERVAL_MS 45 ///< Minimum watchdog pet interval. -#define WATCHDOG_POST_TIMEOUT_MS 100 ///< Watchdog POST timeout in ms. -#define WATCHDOG_RECOVERY_TIME_MS 250 ///< Watchdog recovery time in ms. +#define WATCHDOG_POST_TIMEOUT_MS 500 ///< Watchdog POST timeout in ms. +#define WATCHDOG_RECOVERY_TIME_MS 750 ///< Watchdog recovery time in ms. + +#define MAX_24V_LEVEL_ON_WATCHDOG_EXPIRED 5.0 ///< Maximum voltage on 24V line when watchdog is expired. // TODO - check w/ Systems. Takes time for V to bleed off. Had to raise to 5V. +#define MIN_24V_LEVEL_ON_WATCHDOG_RECOVER 22.6 ///< Minimum voltage on 24V line when watchdog is recovered. + /// List of watchdog states. typedef enum Button_Self_Test_States { @@ -111,7 +117,8 @@ if ( PIN_SIGNAL_LOW == getCPLDWatchdogExpired() ) { // ignore expired watchdog until after watchdog POST - if ( WATCHDOG_SELF_TEST_STATE_COMPLETE == watchdogSelfTestState ) + if ( ( WATCHDOG_SELF_TEST_STATE_COMPLETE == watchdogSelfTestState ) || + ( getCurrentOperationMode() != DG_MODE_INIT ) ) { #ifndef DEBUG_ENABLED activateAlarmNoData( ALARM_ID_WATCHDOG_EXPIRED ); @@ -163,20 +170,42 @@ } if ( PIN_SIGNAL_LOW == getCPLDWatchdogExpired() ) { - watchdogSelfTestStatus = SELF_TEST_STATUS_PASSED; + F32 v24 = getIntADCVoltageConverted( INT_ADC_PRIMARY_HEATER_24_VOLTS ); + + // Verify 24V is down when w.d. expired + if ( v24 > MAX_24V_LEVEL_ON_WATCHDOG_EXPIRED ) + { + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_DG_WATCHDOG_POST_TEST_FAILED, 2.0, v24 ); + watchdogSelfTestStatus = SELF_TEST_STATUS_FAILED; + } } else { - activateAlarmNoData( ALARM_ID_DG_WATCHDOG_POST_TEST_FAILED ); + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DG_WATCHDOG_POST_TEST_FAILED, 1 ); watchdogSelfTestStatus = SELF_TEST_STATUS_FAILED; } - watchdogSelfTestTimerCount = getMSTimerCount(); - watchdogSelfTestState = WATCHDOG_SELF_TEST_STATE_RECOVER; + watchdogSelfTestTimerCount = getMSTimerCount(); + watchdogSelfTestState = WATCHDOG_SELF_TEST_STATE_RECOVER; break; case WATCHDOG_SELF_TEST_STATE_RECOVER: if ( TRUE == didTimeout( watchdogSelfTestTimerCount, WATCHDOG_RECOVERY_TIME_MS ) ) { + if ( getCPLDWatchdogExpired() == PIN_SIGNAL_HIGH ) + { + F32 v24 = getIntADCVoltageConverted( INT_ADC_PRIMARY_HEATER_24_VOLTS ); + + // Verify 24V is down when w.d. recovered TODO - ask EE team why 24V does not quite recover all the way to 22.6V even after 750 ms. How long should it take? +// if ( v24 < MIN_24V_LEVEL_ON_WATCHDOG_RECOVER ) +// { +// SET_ALARM_WITH_2_F32_DATA( ALARM_ID_DG_WATCHDOG_POST_TEST_FAILED, 3.0, v24 ); +// watchdogSelfTestStatus = SELF_TEST_STATUS_FAILED; +// } +// else + { + watchdogSelfTestStatus = SELF_TEST_STATUS_PASSED; + } + } result = watchdogSelfTestStatus; watchdogSelfTestState = WATCHDOG_SELF_TEST_STATE_COMPLETE; }