Index: firmware/App/Modes/ModeDrain.c =================================================================== diff -u -rdf70610b0fd07ef4757da8ab504ecc856e178fe1 -rdc7d3658ccc03992b4f093e36d05cfc8bf5e0598 --- firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision df70610b0fd07ef4757da8ab504ecc856e178fe1) +++ firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision dc7d3658ccc03992b4f093e36d05cfc8bf5e0598) @@ -104,7 +104,7 @@ break; default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, 0, drainState ) // TODO - add s/w fault enum to 1st data param + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_DRAIN_MODE_INVALID_EXEC_STATE, drainState ) drainState = DG_DRAIN_STATE_START; break; } Index: firmware/App/Modes/ModeRecirculate.c =================================================================== diff -u -ra1b8dbb69c4bd2f0cc22e62bede7015c9307d378 -rdc7d3658ccc03992b4f093e36d05cfc8bf5e0598 --- firmware/App/Modes/ModeRecirculate.c (.../ModeRecirculate.c) (revision a1b8dbb69c4bd2f0cc22e62bede7015c9307d378) +++ firmware/App/Modes/ModeRecirculate.c (.../ModeRecirculate.c) (revision dc7d3658ccc03992b4f093e36d05cfc8bf5e0598) @@ -88,7 +88,8 @@ setValveState( VRC, VALVE_STATE_DRAIN_C_TO_NO ); setValveState( VDR, VALVE_STATE_DRAIN_C_TO_NO ); setValveState( VPO, VALVE_STATE_NOFILL_C_TO_NO ); - setROPumpTargetFlowRate( TARGET_FLUSH_LINES_RO_FLOW_RATE_L, TARGET_RO_PRESSURE_PSI ); + setROPumpTargetFlowRate( TARGET_RO_FLOW_RATE_L, TARGET_RO_PRESSURE_PSI ); + signalDrainPumpHardStop(); startPrimaryHeater(); requestConcentratePumpsOff( CONCENTRATEPUMPS_CP1_ACID ); Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -ra1b8dbb69c4bd2f0cc22e62bede7015c9307d378 -rdc7d3658ccc03992b4f093e36d05cfc8bf5e0598 --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision a1b8dbb69c4bd2f0cc22e62bede7015c9307d378) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision dc7d3658ccc03992b4f093e36d05cfc8bf5e0598) @@ -362,6 +362,28 @@ /*********************************************************************//** * @brief + * The startDGHeatDisinfect function starts heat disinfect mode. + * @details Inputs: standbyState + * @details Outputs: none + * @return: TRUE if the switch was successful + *************************************************************************/ +BOOL startDGHeatDisinfect( void ) +{ + BOOL result = FALSE; + + // If DG is in standby mode and the standby mode is in Idle state, request DG heat disinfection + //if ( DG_MODE_STAN == getCurrentOperationMode() && DG_STANDBY_MODE_STATE_IDLE == standbyState ) + { + requestNewOperationMode( DG_MODE_HEAT ); + + result = TRUE; + } + + return result; +} + +/*********************************************************************//** + * @brief * The getCurrentStandbyState function returns the current state of standby mode. * @details Inputs: standbyState * @details Outputs: none Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -rc20d71064bad67c2db392c6383bb410e8a7dfa2a -rdc7d3658ccc03992b4f093e36d05cfc8bf5e0598 --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision c20d71064bad67c2db392c6383bb410e8a7dfa2a) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision dc7d3658ccc03992b4f093e36d05cfc8bf5e0598) @@ -126,7 +126,7 @@ // is requested new mode valid and legal at this time? if ( newMode >= DG_MODE_NLEG ) { - // TODO - s/w fault + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_OP_MODES_ILLEGAL_MODE_TRANSITION_REQUESTED, (U32)newMode ) newMode = currentMode; } @@ -186,7 +186,7 @@ break; default: - // TODO - trigger s/w fault + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_OP_MODES_INVALID_MODE_STATE, (U32)currentMode ) currentMode = DG_MODE_FAUL; currentSubMode = 0; break; @@ -214,7 +214,7 @@ } else { // invalid mode requested - // TODO - trigger s/w fault + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_OP_MODES_INVALID_MODE_REQUESTED, (U32)newMode ) } } @@ -316,7 +316,7 @@ transitionToChemicalDisinfectMode(); break; default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, 0, (U32)newMode ) // TODO - add s/w fault enum to 1st data param + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_OP_MODES_INVALID_MODE_TO_TRANSITION_TO, (U32)newMode ) break; } } Index: firmware/App/Services/AlarmMgmt.h =================================================================== diff -u -r9ce06772b2f651c57144327e6cbf886e2bc22dee -rdc7d3658ccc03992b4f093e36d05cfc8bf5e0598 --- firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 9ce06772b2f651c57144327e6cbf886e2bc22dee) +++ firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision dc7d3658ccc03992b4f093e36d05cfc8bf5e0598) @@ -165,6 +165,11 @@ SW_FAULT_ID_DRAIN_PUMP_INVALID_RPM_SELECTED, SW_FAULT_ID_ALARM_MGMT_INVALID_ALARM_ID, SW_FAULT_ID_HEAT_DISINFECT_INVALID_EXEC_STATE, // 75 + SW_FAULT_ID_STANDBY_MODE_INVALID_EXEC_STATE, + SW_FAULT_ID_RECIRC_MODE_INVALID_EXEC_STATE, + SW_FAULT_ID_DRAIN_MODE_INVALID_EXEC_STATE, + SW_FAULT_ID_FILL_MODE_INVALID_EXEC_STATE, + SW_FAULT_ID_PRESSURE_INVALID_EXEC_STATE, // 80 NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T; Index: firmware/App/Services/Reservoirs.c =================================================================== diff -u -ra1b8dbb69c4bd2f0cc22e62bede7015c9307d378 -rdc7d3658ccc03992b4f093e36d05cfc8bf5e0598 --- firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision a1b8dbb69c4bd2f0cc22e62bede7015c9307d378) +++ firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision dc7d3658ccc03992b4f093e36d05cfc8bf5e0598) @@ -38,7 +38,7 @@ #define DEFAULT_FILL_VOLUME_ML 1700 ///< Default fill volume for treatment in mL. #define DISINFECT_FILL_VOLUME_ML 2400 ///< Fill volume for disinfection in mL. #define MAX_FILL_VOLUME_ML MAX_RESERVOIR_VOLUME_ML ///< Maximum fill volume in mL. -#define DEFAULT_DRAIN_VOLUME_ML 100 ///< Default drain 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 MAX_RESERVOIR_WEIGHT 10000 ///< Maximum reservoir weight in grams. @@ -344,10 +344,36 @@ } sendCommandResponseMsg( &cmdResponse ); -} +} /*********************************************************************//** * @brief + * The tareReservoir function sets the tare load cell variable to TRUE. + * @details Inputs: none + * @details Outputs: none + * @return none + *************************************************************************/ +void tareReservoir( void ) +{ + tareLoadCellRequest = TRUE; +} + +/*********************************************************************//** + * @brief + * The resetReservoirsLowestWeight function resets the lowest load cell + * weight of the reservoirs. + * @details Inputs: reservoirLowestWeight + * @details Outputs: reservoirLowestWeight + * @return none + *************************************************************************/ +void resetReservoirsLowestWeight( void ) +{ + reservoirLowestWeight[ DG_RESERVOIR_1 ] = MAX_RESERVOIR_WEIGHT; + reservoirLowestWeight[ DG_RESERVOIR_2 ] = MAX_RESERVOIR_WEIGHT; +} + +/*********************************************************************//** + * @brief * The getInactiveReservoir function gets the inactive reservoir. * @details Inputs: activeReservoir * @details Outputs: none @@ -424,6 +450,13 @@ if ( hasTimeOut || hasTargetReached ) { + // TODO remove Test code + if ( reservoirId == DG_RESERVOIR_1 ) + { + BOOL test = TRUE; + } + // TODO remove test code + result = TRUE; reservoirLowestWeight[ reservoirId ] = MAX_RESERVOIR_WEIGHT;