Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -rbaaf3dc55c2dee07d04efb97022fd2329a5bd73d -r4b25bf00656b9067a13541014fa1333386a7ed95 --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision baaf3dc55c2dee07d04efb97022fd2329a5bd73d) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 4b25bf00656b9067a13541014fa1333386a7ed95) @@ -180,6 +180,7 @@ if( heater < NUM_OF_DG_HEATERS ) { +#ifndef DISABLE_HEATERS_AND_TEMPS // Assume the target temperature has not changed heatersStatus[ heater ].hasTargetTempChanged = FALSE; @@ -190,6 +191,7 @@ heatersStatus[ heater ].hasTargetTempChanged = TRUE; result = TRUE; } +#endif } else { @@ -223,6 +225,7 @@ { BOOL status = FALSE; + if( heater < NUM_OF_DG_HEATERS ) { if ( HEATER_EXEC_STATE_OFF == heatersStatus[ heater ].state ) Index: firmware/App/Controllers/Pressures.c =================================================================== diff -u -reea0132d751dfd21ef8ae0212ebed184fb2528ff -r4b25bf00656b9067a13541014fa1333386a7ed95 --- firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision eea0132d751dfd21ef8ae0212ebed184fb2528ff) +++ firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision 4b25bf00656b9067a13541014fa1333386a7ed95) @@ -8,7 +8,7 @@ * @file Pressures.c * * @author (last) Dara Navaei -* @date (last) 03-Nov-2022 +* @date (last) 22-Nov-2022 * * @author (original) Sean * @date (original) 04-Apr-2020 @@ -55,8 +55,7 @@ #define MIN_VALID_BARO_PRESSURE_PSIA 10.1F ///< Minimum valid barometric pressure in psia. #define MAX_VALID_BARO_PRESSURE_PSIA 15.4F ///< Maximum valid barometric pressure in psia. -#define MAX_INLET_WATER_PRESSURE_WARNING_LOW 25.0F ///< Maximum allowed low pressure value. -#define MIN_INLET_WATER_PRESSURE_WARNING_LOW 28.0F ///< Minimum allowed low pressure value. +#define MIN_INLET_WATER_PRESSURE_WARNING_LOW 14.0F ///< Minimum allowed low pressure value. #define INLET_WATER_PRESSURE_PERSISTENCE_PERIOD ( 5 * MS_PER_SECOND ) ///< Persistence period for pressure out of range error. #define PRESSURE_OUT_OF_RANGE_TIMEOUT_MS ( 5 * MS_PER_SECOND ) ///< Pressure out of range persistence period in milliseconds. @@ -166,16 +165,16 @@ #endif { F32 pressure = getMeasuredDGPressure( PRESSURE_SENSOR_RO_PUMP_INLET ); - BOOL isPressureTooLow = ( pressure < MAX_INLET_WATER_PRESSURE_WARNING_LOW ? TRUE : FALSE ); + BOOL isPressureTooLow = ( pressure < MIN_INLET_WATER_PRESSURE_WARNING_LOW ? TRUE : FALSE ); // Alarm per PRS 401 if ( TRUE == isPressureTooLow ) { - checkPersistentAlarm( ALARM_ID_INLET_WATER_PRESSURE_IN_LOW_RANGE, isPressureTooLow, pressure, MAX_INLET_WATER_PRESSURE_WARNING_LOW ); + checkPersistentAlarm( ALARM_ID_INLET_WATER_PRESSURE_IN_LOW_RANGE, isPressureTooLow, pressure, MIN_INLET_WATER_PRESSURE_WARNING_LOW ); } else { - checkPersistentAlarm( ALARM_ID_INLET_WATER_PRESSURE_IN_LOW_RANGE, FALSE, pressure, MAX_INLET_WATER_PRESSURE_WARNING_LOW ); + checkPersistentAlarm( ALARM_ID_INLET_WATER_PRESSURE_IN_LOW_RANGE, FALSE, pressure, MIN_INLET_WATER_PRESSURE_WARNING_LOW ); } } } Index: firmware/App/Controllers/ROPump.c =================================================================== diff -u -r5e8f96e11c797bddeddfc009c87f20df3b7a8664 -r4b25bf00656b9067a13541014fa1333386a7ed95 --- firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 5e8f96e11c797bddeddfc009c87f20df3b7a8664) +++ firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 4b25bf00656b9067a13541014fa1333386a7ed95) @@ -54,6 +54,7 @@ #define ROP_CONTROL_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the RO pump is controlled. #define ROP_FLOW_CONTROL_P_COEFFICIENT 0.15F ///< P term for RO pump flow control. #define ROP_FLOW_CONTROL_I_COEFFICIENT 0.65F ///< I term for RO pump flow control. + #define ROP_MAX_PRESSURE_P_COEFFICIENT 0.01F ///< P term for RO pump max pressure control. #define ROP_MAX_PRESSURE_I_COEFFICIENT 0.01F ///< I term for RO pump max pressure control. #define ROP_PWM_STEP_LIMIT 0.50F ///< Current maximum PWM step limit used in RO Profiles. Index: firmware/App/Controllers/ROPump.h =================================================================== diff -u -r5e8f96e11c797bddeddfc009c87f20df3b7a8664 -r4b25bf00656b9067a13541014fa1333386a7ed95 --- firmware/App/Controllers/ROPump.h (.../ROPump.h) (revision 5e8f96e11c797bddeddfc009c87f20df3b7a8664) +++ firmware/App/Controllers/ROPump.h (.../ROPump.h) (revision 4b25bf00656b9067a13541014fa1333386a7ed95) @@ -22,7 +22,7 @@ /** * @defgroup ROPump ROPump - * @brief RO Pump monitor and controller module. Controls and monitors the RO pump. + * @brief RO Pump monitor and controller module. Controls and monitors the RO pump and the flow meter. * The flow meter is manufactured by SwissFlow, PN: 82015311. * The diaphragm (RO) pump is manufactured by Aquatec, PN: 5889-2MM1-V724DY. * Index: firmware/App/Modes/ModeGenIdle.c =================================================================== diff -u -r6bb0052e068702325c34025ea137059f3746b3b3 -r4b25bf00656b9067a13541014fa1333386a7ed95 --- firmware/App/Modes/ModeGenIdle.c (.../ModeGenIdle.c) (revision 6bb0052e068702325c34025ea137059f3746b3b3) +++ firmware/App/Modes/ModeGenIdle.c (.../ModeGenIdle.c) (revision 4b25bf00656b9067a13541014fa1333386a7ed95) @@ -8,8 +8,8 @@ * * @file ModeGenIdle.c * -* @author (last) Dara Navaei -* @date (last) 15-Aug-2022 +* @author (last) Michael Garthwaite +* @date (last) 21-Nov-2022 * * @author (original) Quang Nguyen * @date (original) 06-Aug-2021 Index: firmware/App/Modes/ModeGenIdle.h =================================================================== diff -u -r5e8f96e11c797bddeddfc009c87f20df3b7a8664 -r4b25bf00656b9067a13541014fa1333386a7ed95 --- firmware/App/Modes/ModeGenIdle.h (.../ModeGenIdle.h) (revision 5e8f96e11c797bddeddfc009c87f20df3b7a8664) +++ firmware/App/Modes/ModeGenIdle.h (.../ModeGenIdle.h) (revision 4b25bf00656b9067a13541014fa1333386a7ed95) @@ -34,8 +34,11 @@ /// Gen Idle bad states data structure typedef struct { + U32 genIdleState; ///< Gen Idle state. + U32 targetFillVolumemL; ///< Gen Idle target fill volume in mL. + U32 badFillSignal; ///< Gen Idle bad fill signal. U32 badFillState; ///< Gen Idle bad fill substate. -} GEN_IDLE_BAD_FILL_STATE; +} DG_GEN_IDLE_DATA_T; // ********** public function prototypes ********** Index: firmware/App/Modes/ModeInitPOST.c =================================================================== diff -u -r5e8f96e11c797bddeddfc009c87f20df3b7a8664 -r4b25bf00656b9067a13541014fa1333386a7ed95 --- firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision 5e8f96e11c797bddeddfc009c87f20df3b7a8664) +++ firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision 4b25bf00656b9067a13541014fa1333386a7ed95) @@ -315,15 +315,15 @@ { DG_POST_STATE_T result = postState; - if ( ( SELF_TEST_STATUS_PASSED == testStatus ) || ( SELF_TEST_STATUS_FAILED == testStatus ) ) + if ( ( testStatus == SELF_TEST_STATUS_PASSED ) || ( testStatus == SELF_TEST_STATUS_FAILED ) ) { - BOOL passed = ( SELF_TEST_STATUS_PASSED == testStatus ? TRUE : FALSE ); + BOOL passed = ( testStatus == SELF_TEST_STATUS_PASSED ? TRUE : FALSE ); // Broadcast passed POST result sendPOSTTestResult( (DG_POST_STATE_T)((int)postState), passed ); // Move on to next POST test result = (DG_POST_STATE_T)((int)postState + 1); - if ( SELF_TEST_STATUS_FAILED == testStatus ) + if ( testStatus == SELF_TEST_STATUS_FAILED ) { tempPOSTPassed = FALSE; } Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -r5e8f96e11c797bddeddfc009c87f20df3b7a8664 -r4b25bf00656b9067a13541014fa1333386a7ed95 --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 5e8f96e11c797bddeddfc009c87f20df3b7a8664) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 4b25bf00656b9067a13541014fa1333386a7ed95) @@ -85,8 +85,8 @@ SW_FAULT_ID_PERSISTENT_ALARM_INVALID_INDEX, SW_FAULT_ID_CONCENTRATE_PUMP_EXEC_INVALID_STATE, // 55 SW_FAULT_ID_CONCENTRATE_PUMP_INVALID_PUMP_ID, - SW_FAULT_ID_SEMAPHORE_IN_USE_TIMEOUT, SW_FAULT_ID_SERVICE_MODE_INVALID_EXEC_STATE, + SW_FAULT_ID_SEMAPHORE_IN_USE_TIMEOUT, SW_FAULT_ID_UV_REACTORS_INVALID_EXEC_STATE, SW_FAULT_ID_UV_REACTORS_INVALID_SELF_TEST_STATE, SW_FAULT_ID_THERMISTORS_INVALID_EXEC_STATE, // 60 Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -rd3926e5817813a9588b77f6c382940176a5feedc -r4b25bf00656b9067a13541014fa1333386a7ed95 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision d3926e5817813a9588b77f6c382940176a5feedc) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 4b25bf00656b9067a13541014fa1333386a7ed95) @@ -893,15 +893,16 @@ handleDGSendConcentrateMixingRatios( message ); break; - case MSG_ID_HD_REQUEST_DG_USAGE_INFO: - handleHDRequestDGUsageInfo( message ); - break; case MSG_ID_HD_REQUEST_DG_SERVICE_MODE: handleServiceModeRequest( message ); break; - case MSG_ID_REQUEST_CPLD_STATUS: + case MSG_ID_HD_REQUEST_DG_USAGE_INFO: + handleHDRequestDGUsageInfo( message ); + break; + + case MSG_ID_DG_CPLD_STATUS: handleCpldStatusRequest( message ); break; @@ -1137,11 +1138,11 @@ break; case MSG_ID_FILTER_FLUSH_TIME_PERIOD_OVERRIDE: - handleFilterFlushTimePeriodOverride( message ); + handleFilterFlushTimePeriodOverride(message); break; - case MSG_ID_DG_FANS_RPM_OVERRIDE: - handleFansRPMOverride( message ); + case MSG_ID_DG_BLOCK_MESSAGE_TRANSMISSION: + handleTestBlockMessagesRequest( message ); break; case MSG_ID_DG_STOP_RTC_CLOCK: @@ -1152,10 +1153,6 @@ handleSetDrainPumpMeasuredRPMOverrideRequest( message ); break; - case MSG_ID_DG_BLOCK_MESSAGE_TRANSMISSION: - handleTestBlockMessagesRequest( message ); - break; - case MSG_ID_DG_SUPER_CLEAR_ALARMS_CMD: handleTestSuperClearAlarmsRequest( message ); break; @@ -1168,6 +1165,10 @@ handleTestFansRPMAlarmStartTimeOffsetRequest( message ); break; + case MSG_ID_DG_FANS_RPM_OVERRIDE: + handleFansRPMOverride( message ); + break; + case MSG_ID_DG_USED_ACID_VOLUME_ML_OVERRIDE: handleTestUsedAcidVolumeMLOverrideRequest( message ); break; @@ -1212,6 +1213,10 @@ handleTestTareReservoirRequest( message ); break; + case MSG_ID_DG_GEN_IDLE_PUBLISH_INTERVAL_OVERRIDE: + handleTestGenIdlePublishIntervalOverride( message ); + break; + case MSG_ID_DG_DRAIN_PUMP_CURRENT_OVERRIDE: handleTestDGDrainPumpCurrentOverrideRequest( message ); break; Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -rd3926e5817813a9588b77f6c382940176a5feedc -r4b25bf00656b9067a13541014fa1333386a7ed95 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision d3926e5817813a9588b77f6c382940176a5feedc) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 4b25bf00656b9067a13541014fa1333386a7ed95) @@ -369,7 +369,6 @@ return result; } - // *********************************************************************** // **************** Message Handling Helper Functions ******************** // *********************************************************************** @@ -829,7 +828,6 @@ } /*********************************************************************//** -<<<<<<< HEAD * @brief * The handleDGScheduledRunsRequest function handles a request for DG * scheduled runs information. @@ -859,8 +857,6 @@ } /*********************************************************************//** -======= ->>>>>>> staging * @brief * The handleStartStopDGFlush function handles a request to start or stop * DG flush mode. @@ -3241,37 +3237,6 @@ } /*********************************************************************//** - * @brief - * The handleFansRPMOverride function handles a request to override a fans RPM value. - * @details Inputs: none - * @details Outputs: message handled - * @param message a pointer to the message to handle - * @return none - *************************************************************************/ -void handleFansRPMOverride( MESSAGE_T *message ) -{ - TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; - BOOL result = FALSE; - - // verify payload length - if ( sizeof(TEST_OVERRIDE_ARRAY_PAYLOAD_T) == message->hdr.payloadLen ) - { - memcpy( &payload, message->payload, sizeof(TEST_OVERRIDE_ARRAY_PAYLOAD_T) ); - if ( FALSE == payload.reset ) - { - result = testSetFanRPMOverride( payload.index, payload.state.f32 ); - } - else - { - result = testResetFanRPMOverride( payload.index ); - } - } - - // respond to request - sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); -} - -/*********************************************************************//** * @brief * The handleStopDGRTCClock function handles a request to stop the RTC clock. * @details Inputs: none @@ -3410,10 +3375,41 @@ /*********************************************************************//** * @brief - * The handleTestFansRPMAlarmStartTimeOffsetRequest function handles a - * request to set the fans RPM alarm start time offset. + * The handleFansRPMOverride function handles a request to override a fans RPM value. * @details Inputs: none * @details Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleFansRPMOverride( MESSAGE_T *message ) +{ + TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; + BOOL result = FALSE; + + // verify payload length + if ( sizeof(TEST_OVERRIDE_ARRAY_PAYLOAD_T) == message->hdr.payloadLen ) + { + memcpy( &payload, message->payload, sizeof(TEST_OVERRIDE_ARRAY_PAYLOAD_T) ); + if ( FALSE == payload.reset ) + { + result = testSetFanRPMOverride( payload.index, payload.state.f32 ); + } + else + { + result = testResetFanRPMOverride( payload.index ); + } + } + + // respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + +/*********************************************************************//** + * @brief + * The handleTestFansRPMAlarmStartTimeOverrideRequest function handles a + * request to override the fan RPM alarm start time. + * @details Inputs: none + * @details Outputs: message handled * @param message : a pointer to the message to handle * @return none *************************************************************************/ @@ -3436,7 +3432,6 @@ } /*********************************************************************//** - * @brief * The handleTestUsedAcidVolumeMLOverrideRequest function handles a * request to override the acid volume. * @details Inputs: none @@ -3783,6 +3778,30 @@ /*********************************************************************//** * @brief +* The handleResendAllAlarmsCommand function handles a request to re-send +* all active DG alarms. +* @details Inputs: none +* @details Outputs: message handled +* @param message a pointer to the message to handle +* @return none +*************************************************************************/ +void handleResendAllAlarmsCommand( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + // verify payload length + if ( 0 == message->hdr.payloadLen ) + { + handleResendActiveAlarmsRequest(); + result = TRUE; + } + + // respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + +/*********************************************************************//** +* @brief * The handleSetDGUsageInfoRecord function handles a request to set the DG * information record. * @details Inputs: none @@ -3857,30 +3876,6 @@ } /*********************************************************************//** -* @brief -* The handleResendAllAlarmsCommand function handles a request to re-send -* all active DG alarms. -* @details Inputs: none -* @details Outputs: message handled -* @param message a pointer to the message to handle -* @return none -*************************************************************************/ -void handleResendAllAlarmsCommand( MESSAGE_T *message ) -{ - BOOL result = FALSE; - - // verify payload length - if ( 0 == message->hdr.payloadLen ) - { - handleResendActiveAlarmsRequest(); - result = TRUE; - } - - // respond to request - sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); -} - -/*********************************************************************//** * @brief * The sendServiceModeResponse function sends out the DG response to a * UI request to go to service mode. Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -rd3926e5817813a9588b77f6c382940176a5feedc -r4b25bf00656b9067a13541014fa1333386a7ed95 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision d3926e5817813a9588b77f6c382940176a5feedc) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 4b25bf00656b9067a13541014fa1333386a7ed95) @@ -163,6 +163,12 @@ // MSG_ID_DG_RESPONSE_SERVICE_MODE_REQUEST BOOL sendServiceModeResponse( BOOL accepted, U32 rejCode ); +// MSG_ID_HD_OP_MODE +BOOL handleSetHDOperationMode( MESSAGE_T *message ); + +// MSG_ID_HD_REQUEST_DG_USAGE_INFO +void handleHDRequestDGUsageInfo( MESSAGE_T * message ); + // MSG_ID_REQUEST_CPLD_STATUS void handleCpldStatusRequest( MESSAGE_T *message ); @@ -364,6 +370,12 @@ // MSG_ID_DG_DRAIN_PUMP_MEASURED_RPM_OVERRIDE void handleSetDrainPumpMeasuredRPMOverrideRequest( MESSAGE_T *message ); +// MSG_ID_DG_ALARM_INFO_SEND_INTERVAL_OVERRIDE +void handleTestAlarmInfoSendIntervalOverrideRequest( MESSAGE_T *message ); + +// MSG_ID_DG_SUPER_CLEAR_ALARMS_CMD +void handleTestSuperClearAlarmsRequest( MESSAGE_T *message ); + // MSG_ID_DG_SET_FANS_RPM_ALARM_START_TIME_OFFSET void handleTestFansRPMAlarmStartTimeOffsetRequest( MESSAGE_T *message ); @@ -382,21 +394,27 @@ // MSG_ID_DG_SET_SW_CONFIG_RECORD void handleSetDGSoftwareConfigRecord( MESSAGE_T *message ); +// MSG_ID_HD_REQUEST_DG_ALARMS +void handleResendAllAlarmsCommand( MESSAGE_T *message ); + // MSG_ID_DG_HD_COMMUNICATION_STATUS void handleTestHDCommunicationStatusOverrideRequest( MESSAGE_T *message ); // MSG_ID_DG_SET_PRIMARY_AND_TRIMMER_HEATERS_TARGET_TEMP void handleSetPrimaryAndTrimmerHeatersTargetTemperature( MESSAGE_T *message ); +// MSG_ID_DG_USED_ACID_VOLUME_ML_OVERRIDE +void handleTestUsedAcidVolumeMLOverrideRequest(MESSAGE_T *message); + +// MSG_ID_DG_USED_BICARB_VOLUME_ML_OVERRIDE +void handleTestUsedBicarbVolumeMLOverrideRequest(MESSAGE_T *message); + // MSG_ID_DG_GET_USAGE_INFO_RECORD void handleGetDGUsageInfoRecord( MESSAGE_T *message ); // MSG_ID_DG_SET_USAGE_INFO_RECORD void handleSetDGUsageInfoRecord( MESSAGE_T *message ); -// MSG_ID_HD_REQUEST_DG_ALARMS -void handleResendAllAlarmsCommand( MESSAGE_T *message ); - // MSG_ID_DG_SET_OP_MODE_REQUEST void handleTestSetOpModeRequest( MESSAGE_T *message ); @@ -430,7 +448,6 @@ // MSG_ID_DG_DIALYSATE_FILL_INTEGRATED_VOLUME_OVERRIDE void handleTestDGFillIntegratedVolumeOverrideRequest( MESSAGE_T *message ); - /**@}*/ #endif