Index: firmware/App/Controllers/ConcentratePumps.c =================================================================== diff -u -r5e3a46112ebab361a33b9f7cadb619eb12b44c0f -r35179cc5895f6b7b9b1f8338754836898514a14e --- firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 5e3a46112ebab361a33b9f7cadb619eb12b44c0f) +++ firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 35179cc5895f6b7b9b1f8338754836898514a14e) @@ -56,6 +56,7 @@ #define CONCENTRATE_PUMP_VOLUME_PER_PULSE ( CONCENTRATE_PUMP_VOLUME_PER_REV / CONCENTRATE_PUMP_PULSE_PER_REV ) #define CONCENTRATE_PUMP_DATA_PUBLISH_INTERVAL ( 500 / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the concentrate pump is monitored. + #define CONCENTRATE_PUMP_CONTROL_INTERVAL ( 1 * MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the concentrate pump is controlled. #define CONCENTRATE_PUMP_SPEED_CONTROL_PERSISTENCE_PERIOD ( 5 * MS_PER_SECOND ) ///< Persistence period for concentrate pump speed control error. Index: firmware/App/Controllers/ConductivitySensors.c =================================================================== diff -u -r5e3a46112ebab361a33b9f7cadb619eb12b44c0f -r35179cc5895f6b7b9b1f8338754836898514a14e --- firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 5e3a46112ebab361a33b9f7cadb619eb12b44c0f) +++ firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 35179cc5895f6b7b9b1f8338754836898514a14e) @@ -57,6 +57,7 @@ #define MAX_CONDUCTIVITY_SENSOR_FAILURE_WINDOW_MS ( 60 * MS_PER_SECOND ) ///< Conductivity sensor error window. #define RO_REJECTION_RATIO_OUT_OF_RANGE_VALUE 1.0F ///< Out of range value for RO rejection ratio when CPi conductivity is zero. + #define MAX_RO_REJECTION_RATIO_ALLOW 0.10F ///< Maximum RO rejection ratio. #define MAX_CPO_CONDUCTIVITY_ALLOW 30.0F ///< Maximum CPo sensor conductivity value. @@ -289,11 +290,9 @@ /*********************************************************************//** * @brief * The checkInletWaterConductivity function checks inlet water conductivity value - * and triggers an alarm when conductivity value is not within the specified - * values. + * and triggers an alarm when conductivity value is out of allowed range. * @details Inputs: CPi sensor conductivity - * @details Outputs: Trigger warning alarm if conductivity is in the warning - * range. Trigger alarm if conductivity is below minimum conductivity. + * @details Outputs: Trigger alarms when conductivity is out of allowed range * @return none *************************************************************************/ void checkInletWaterConductivity( void ) Index: firmware/App/Controllers/LoadCell.c =================================================================== diff -u -r570c501cb2f05c376551073d66d7dfc5ec444ee0 -r35179cc5895f6b7b9b1f8338754836898514a14e --- firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision 570c501cb2f05c376551073d66d7dfc5ec444ee0) +++ firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision 35179cc5895f6b7b9b1f8338754836898514a14e) @@ -98,7 +98,7 @@ * @details Outputs: LoadCell module initialized. * @return none *************************************************************************/ - void initLoadCell( void ) +void initLoadCell( void ) { U32 i; U32 j; Index: firmware/App/Modes/ModeGenIdle.c =================================================================== diff -u -receb190a5d66fdbee779478ac8bb50a846ed9241 -r35179cc5895f6b7b9b1f8338754836898514a14e --- firmware/App/Modes/ModeGenIdle.c (.../ModeGenIdle.c) (revision eceb190a5d66fdbee779478ac8bb50a846ed9241) +++ firmware/App/Modes/ModeGenIdle.c (.../ModeGenIdle.c) (revision 35179cc5895f6b7b9b1f8338754836898514a14e) @@ -54,16 +54,17 @@ // ********** private data ********** +static U32 dataPublishCounter; ///< Used to schedule gen idle data publication to CAN bus. static DG_GEN_IDLE_MODE_STATE_T genIdleState; ///< Currently active generation idle state. // NOTE: the bad fill state must be initialized here and not in the transition function since in case of a bad fill, the transition function is called // several times to drain and fill and handle a bad fill. static DG_GEN_IDLE_MODE_BAD_FILL_STATE_T badFillState = DG_HANDLE_BAD_FILL_STATE_START; ///< Initialize bad fill sub-state. static U32 hdLostCommStartTime_ms; ///< Lost communication with HD start time in ms. static U32 targetFillVolumeML; ///< Save the target fill volume before calling startFillCmd(). static BOOL handleBadFillFlag; ///< Internal signal flag to handle bad fill. -static OVERRIDE_U32_T badFillSubstatesPublishInterval = { BAD_FILL_SUBSTATES_PUB_INTERVAL, - BAD_FILL_SUBSTATES_PUB_INTERVAL, - 0, 0 }; ///< Interval (in ms) at which to publish bad fill sub-states to CAN bus. +static OVERRIDE_U32_T genIdleDataPublicationInterval = { BAD_FILL_SUBSTATES_PUB_INTERVAL, + BAD_FILL_SUBSTATES_PUB_INTERVAL, + 0, 0 }; ///< Interval (in ms) at which to publish bad fill sub-states to CAN bus. // ********** private function prototypes ********** @@ -77,7 +78,7 @@ static DG_GEN_IDLE_MODE_BAD_FILL_STATE_T handleSecondDrainState( void ); static DG_GEN_IDLE_MODE_BAD_FILL_STATE_T handleRefillState( void ); -static void publishBadFillSubstates( U32 badFill ); +static void publishGenIdleSubstates(); /*********************************************************************//** * @brief @@ -226,6 +227,8 @@ break; } + publishGenIdleSubstates(); + return (U32)genIdleState; } @@ -325,9 +328,6 @@ { DG_GEN_IDLE_MODE_BAD_FILL_STATE_T state = DG_HANDLE_BAD_FILL_STATE_FIRST_DRAIN; - // Publish the state prior to requesting a drain and transitioning to drain mode - publishBadFillSubstates( state ); - // Drain the bad filled reservoir first requestNewOperationMode( DG_MODE_DRAI ); @@ -354,16 +354,9 @@ state = DG_HANDLE_BAD_FILL_STATE_FLUSH_FILL; - // Publish the state prior to transitioning to fill mode - publishBadFillSubstates( state ); - // Start the flush fill startFillCmd( BAD_FLUSH_FILL_TARGET_VOLUME_ML, getTargetFillFlowRateLPM() ); } - else - { - publishBadFillSubstates( state ); - } return state; } @@ -380,9 +373,6 @@ { DG_GEN_IDLE_MODE_BAD_FILL_STATE_T state = DG_HANDLE_BAD_FILL_STATE_SECOND_DRAIN; - // Publish the state prior to transitioning to drain mode - publishBadFillSubstates( state ); - requestNewOperationMode( DG_MODE_DRAI ); return state; @@ -400,9 +390,6 @@ { DG_GEN_IDLE_MODE_BAD_FILL_STATE_T state = DG_HANDLE_BAD_FILL_STATE_REFILL; - // Publish the state prior to transitioning to fill mode - publishBadFillSubstates( state ); - // Refill to the saved target fill volume (~1500 mL) startFillCmd( targetFillVolumeML, getTargetFillFlowRateLPM() ); @@ -421,8 +408,6 @@ { DG_GEN_IDLE_MODE_BAD_FILL_STATE_T state = DG_HANDLE_BAD_FILL_STATE_START; - publishBadFillSubstates( state ); - // Clear wait for dialysate alarm condition to allow resume clearAlarmCondition( ALARM_ID_CREATING_DIALYSATE_PLEASE_WAIT ); // resume option will appear // Set flag to FALSE here so next call to idle exec will move to normal flush water state @@ -431,22 +416,33 @@ return state; } + /*********************************************************************//** * @brief - * The publishBadFillSubstates function publishes idle mode bad fill + * The publishGenIdleSubstates function publishes gen idle * sub-states at the set interval. * @details Inputs: none * @details Outputs: none - * @param badFill the bad fill state that has to be published + * @param none * @return none *************************************************************************/ -static void publishBadFillSubstates( U32 badFill ) +static void publishGenIdleSubstates() { - GEN_IDLE_BAD_FILL_STATE data; + // publish Gen Idle pump data on interval + if ( ++dataPublishCounter >= getU32OverrideValue( &genIdleDataPublicationInterval ) ) + { + DG_GEN_IDLE_DATA_T data; - data.badFillState = badFill; + // Populate the data structure for publication + data.badFillSignal = (U32)handleBadFillFlag; + data.badFillState = (U32)badFillState; + data.genIdleState = (U32)getCurrentGenIdleState(); + data.targetFillVolumemL = targetFillVolumeML; - broadcastData( MSG_ID_DG_BAD_FILL_SUB_STATE, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( GEN_IDLE_BAD_FILL_STATE ) ); + broadcastData( MSG_ID_DG_GEN_IDLE_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( DG_GEN_IDLE_DATA_T ) ); + + dataPublishCounter = 0; + } } @@ -471,8 +467,8 @@ if ( TRUE == isTestingActivated() ) { U32 intvl = value / TASK_GENERAL_INTERVAL; - badFillSubstatesPublishInterval.ovData = intvl; - badFillSubstatesPublishInterval.override = OVERRIDE_KEY; + genIdleDataPublicationInterval.ovData = intvl; + genIdleDataPublicationInterval.override = OVERRIDE_KEY; result = TRUE; } @@ -493,8 +489,8 @@ if ( TRUE == isTestingActivated() ) { - badFillSubstatesPublishInterval.override = OVERRIDE_RESET; - badFillSubstatesPublishInterval.ovData = badFillSubstatesPublishInterval.ovInitData; + genIdleDataPublicationInterval.override = OVERRIDE_RESET; + genIdleDataPublicationInterval.ovData = genIdleDataPublicationInterval.ovInitData; result = TRUE; } Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -receb190a5d66fdbee779478ac8bb50a846ed9241 -r35179cc5895f6b7b9b1f8338754836898514a14e --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision eceb190a5d66fdbee779478ac8bb50a846ed9241) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 35179cc5895f6b7b9b1f8338754836898514a14e) @@ -136,7 +136,6 @@ void execOperationModes( void ) { DG_OP_MODE_T newMode; - U32 priorSubMode = currentSubMode; priorSubMode = currentSubMode; @@ -155,7 +154,6 @@ if ( currentMode != newMode ) { // handle transition to new mode - priorSubMode = 0; lastMode = currentMode; transitionToNewOperationMode( newMode ); currentMode = newMode; Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -receb190a5d66fdbee779478ac8bb50a846ed9241 -r35179cc5895f6b7b9b1f8338754836898514a14e --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision eceb190a5d66fdbee779478ac8bb50a846ed9241) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 35179cc5895f6b7b9b1f8338754836898514a14e) @@ -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 -receb190a5d66fdbee779478ac8bb50a846ed9241 -r35179cc5895f6b7b9b1f8338754836898514a14e --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision eceb190a5d66fdbee779478ac8bb50a846ed9241) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 35179cc5895f6b7b9b1f8338754836898514a14e) @@ -897,14 +897,15 @@ 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_HD_REQUEST_DG_USAGE_INFO: + handleHDRequestDGUsageInfo( message ); + break; + case MSG_ID_DG_SET_SERVICE_TIME: handleSetDGServiceTime( message ); break; @@ -1149,11 +1150,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: @@ -1164,10 +1165,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; @@ -1180,6 +1177,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; @@ -1224,6 +1225,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 -receb190a5d66fdbee779478ac8bb50a846ed9241 -r35179cc5895f6b7b9b1f8338754836898514a14e --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision eceb190a5d66fdbee779478ac8bb50a846ed9241) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 35179cc5895f6b7b9b1f8338754836898514a14e) @@ -372,7 +372,6 @@ return result; } - // *********************************************************************** // **************** Message Handling Helper Functions ******************** // *********************************************************************** @@ -3366,37 +3365,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 @@ -3535,10 +3503,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 *************************************************************************/ @@ -3561,7 +3560,6 @@ } /*********************************************************************//** - * @brief * The handleTestUsedAcidVolumeMLOverrideRequest function handles a * request to override the acid volume. * @details Inputs: none Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -receb190a5d66fdbee779478ac8bb50a846ed9241 -r35179cc5895f6b7b9b1f8338754836898514a14e --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision eceb190a5d66fdbee779478ac8bb50a846ed9241) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 35179cc5895f6b7b9b1f8338754836898514a14e) @@ -160,6 +160,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_DG_SET_SERVICE_TIME void handleSetDGServiceTime( MESSAGE_T *message ); @@ -370,6 +376,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 ); @@ -388,21 +400,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 );