Index: firmware/App/Controllers/DrainPump.c =================================================================== diff -u -r3e5c16b70fb34da7d58f5cf6efff896fdb3d00c3 -rdef06013312d270b1704787a4473caf5612dd6ac --- firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 3e5c16b70fb34da7d58f5cf6efff896fdb3d00c3) +++ firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision def06013312d270b1704787a4473caf5612dd6ac) @@ -367,8 +367,8 @@ isRPMTooHigh |= ( getDrainPumpMeasuredRPM( DRAIN_PUMP_HALL_SNSR_FB ) > MIN_DRAIN_PUMP_RPM ? TRUE : FALSE ); isRPMTooHigh |= ( getDrainPumpMeasuredRPM( DRAIN_PUMP_MAXON_SNSR_FB ) > MIN_DRAIN_PUMP_RPM ? TRUE : FALSE ); - checkPersistentAlarm( ALARM_ID_DG_DRAIN_PUMP_RPM_OUT_OF_RANGE, FALSE, getDrainPumpMeasuredRPM( DRAIN_PUMP_HALL_SNSR_FB ), MAX_ALLOWED_OPEN_LOOP_RPM_OUT_OF_RANGE ); - checkPersistentAlarm( ALARM_ID_DG_DRAIN_PUMP_OFF_FAULT, isRPMTooHigh, getDrainPumpMeasuredRPM( DRAIN_PUMP_HALL_SNSR_FB ), MIN_DRAIN_PUMP_RPM ); + checkPersistentAlarm( ALARM_ID_DG_DRAIN_PUMP_RPM_OUT_OF_RANGE, FALSE, getDrainPumpMeasuredRPM( DRAIN_PUMP_MAXON_SNSR_FB ), MAX_ALLOWED_OPEN_LOOP_RPM_OUT_OF_RANGE ); + checkPersistentAlarm( ALARM_ID_DG_DRAIN_PUMP_OFF_FAULT, isRPMTooHigh, getDrainPumpMeasuredRPM( DRAIN_PUMP_MAXON_SNSR_FB ), MIN_DRAIN_PUMP_RPM ); // If the off fault alarm has become active, trigger the safety shutdown if ( TRUE == isAlarmActive( ALARM_ID_DG_DRAIN_PUMP_OFF_FAULT ) ) Index: firmware/App/Controllers/ROPump.c =================================================================== diff -u -r039bdf1f70921b1fe6501d8d2ac9b4f69f066f6f -rdef06013312d270b1704787a4473caf5612dd6ac --- firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 039bdf1f70921b1fe6501d8d2ac9b4f69f066f6f) +++ firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision def06013312d270b1704787a4473caf5612dd6ac) @@ -416,13 +416,19 @@ switch ( getCurrentOperationMode() ) { case DG_MODE_GENE: - case DG_MODE_DRAI: // The flow cannot be out of target by more than +/- 100 mL/min isFlowOutOfRange = ( ( fabs( currentFlowLPM - targetFlowLPM ) * ML_PER_LITER ) > MAX_ALLOWED_FLOW_DEVIATION_MLPM ); isFlowOutOfUpperRange = ( isFlowOutOfRange && ( currentFlowLPM > targetFlowLPM ) ? TRUE : FALSE ); isFlowOutOfLowerRange = ( isFlowOutOfRange && ( currentFlowLPM < targetFlowLPM ) ? TRUE : FALSE ); break; + case DG_MODE_DRAI: + // The flow cannot be out of target by less than 100 mL/min + isFlowOutOfRange = ( ( fabs( currentFlowLPM - targetFlowLPM ) * ML_PER_LITER ) > MAX_ALLOWED_FLOW_DEVIATION_MLPM ); + isFlowOutOfUpperRange = FALSE; + isFlowOutOfLowerRange = ( isFlowOutOfRange && ( currentFlowLPM < targetFlowLPM ) ? TRUE : FALSE ); + break; + case DG_MODE_FILL: case DG_MODE_FLUS: case DG_MODE_HEAT: Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -r1256c2a1839f3f3314cbf590d8b30f27612708ba -rdef06013312d270b1704787a4473caf5612dd6ac --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 1256c2a1839f3f3314cbf590d8b30f27612708ba) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision def06013312d270b1704787a4473caf5612dd6ac) @@ -748,7 +748,7 @@ SET_ALARM_WITH_1_F32_DATA( ALARM_ID_DG_ACID_CONDUCTIVITY_OUT_OF_RANGE, averageAcidConductivity ) } - if ( ( pctDiffInConductivity < FIVE_PERCENT_FACTOR ) || ( getTestConfigStatus( TEST_CONFIG_ENABLE_MIXING_WITH_WATER ) != FALSE ) ) + if ( ( pctDiffInConductivity < FIVE_PERCENT_FACTOR ) || ( TRUE == getTestConfigStatus( TEST_CONFIG_ENABLE_MIXING_WITH_WATER ) ) ) { hasCD1CD2TestPassed = TRUE; } @@ -934,7 +934,7 @@ F32 avgCPo = sumFillCPoConductivity / (F32)fillCPoConductivitySampleCnt; // sample count incremented above w/o condition so no need for divide by zero checks F32 avgRR = sumFillRejRatio / (F32)fillCPoConductivitySampleCnt; - if ( ( avgCPo > MAX_CPO_CONDUCTIVITY_ALLOW ) || ( TRUE == getTestConfigStatus( TEST_CONFIG_ENABLE_MIXING_WITH_WATER ) ) ) + if ( ( avgCPo > MAX_CPO_CONDUCTIVITY_ALLOW ) && ( getTestConfigStatus( TEST_CONFIG_ENABLE_MIXING_WITH_WATER ) != FALSE ) ) { // Fault alarm per PRS 483 SET_ALARM_WITH_2_F32_DATA( ALARM_ID_DG_OUTLET_PRIMARY_CONDUCTIVITY_OUT_OF_RANGE, avgCPo, MAX_CPO_CONDUCTIVITY_ALLOW ); @@ -964,8 +964,8 @@ #endif { // SRSDG 400 - if ( ( FALSE == isValueWithinPercentRange( avgBicarbConductivity, bicarbNormalConductivity, FIVE_PERCENT_FACTOR ) ) || - ( TRUE == getTestConfigStatus( TEST_CONFIG_ENABLE_MIXING_WITH_WATER ) ) ) + if ( ( FALSE == isValueWithinPercentRange( avgBicarbConductivity, bicarbNormalConductivity, FIVE_PERCENT_FACTOR ) ) && + ( getTestConfigStatus( TEST_CONFIG_ENABLE_MIXING_WITH_WATER ) != TRUE ) ) { setBadAvgConductivityDetectedFlag( TRUE ); // signal idle bad avg conductivity detected setThisFisrtFillFlag( TRUE ); @@ -974,8 +974,8 @@ activateAlarmNoData ( ALARM_ID_DG_CREATING_DIALYSATE_PLEASE_WAIT ); } - if ( ( FALSE == isValueWithinPercentRange( avgAcidConductivity, acidNormalConductivity, FIVE_PERCENT_FACTOR ) ) || - ( TRUE == getTestConfigStatus( TEST_CONFIG_ENABLE_MIXING_WITH_WATER ) ) ) + if ( ( FALSE == isValueWithinPercentRange( avgAcidConductivity, acidNormalConductivity, FIVE_PERCENT_FACTOR ) ) && + ( getTestConfigStatus( TEST_CONFIG_ENABLE_MIXING_WITH_WATER ) != TRUE ) ) { setBadAvgConductivityDetectedFlag( TRUE ); // signal idle bad avg conductivity detected setThisFisrtFillFlag( TRUE ); Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -rd9c2c8e146f20a2acefb9ac1f6497536fb2c404e -rdef06013312d270b1704787a4473caf5612dd6ac --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision d9c2c8e146f20a2acefb9ac1f6497536fb2c404e) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision def06013312d270b1704787a4473caf5612dd6ac) @@ -196,6 +196,12 @@ // check ACK list for messages that need to be re-sent because they haven't been ACK'd checkPendingACKList(); + + if ( TRUE == hasDialinCheckInBeenExpired() ) + { + // It has been a while since the user logged in but not activity has been received from Dialin so set the tester's status to log out + setTesterStatusToLoggedOut(); + } } /*********************************************************************//** @@ -1308,6 +1314,18 @@ handleTestDGSetTestConfig( message ); break; + case MSG_ID_DG_GET_TEST_CONFIGURATION: + handleTestDGGetTestConfig( message ); + break; + + case MSG_ID_DG_RESET_ALL_TEST_CONFIGURATIONS: + handleTestDGResetAllTestConfigs( message ); + break; + + case MSG_ID_DG_DIALIN_CHECK_IN: + handleTestDGDialinCheckIn( message ); + break; + default: // TODO - unrecognized message ID received - ignore break; Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -rd9c2c8e146f20a2acefb9ac1f6497536fb2c404e -rdef06013312d270b1704787a4473caf5612dd6ac --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision d9c2c8e146f20a2acefb9ac1f6497536fb2c404e) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision def06013312d270b1704787a4473caf5612dd6ac) @@ -1815,6 +1815,19 @@ /*********************************************************************//** * @brief + * The setTesterStatusToLoggedOut function sets the status of the tester to + * logged out. + * @details Inputs: testerLoggedIn + * @details Outputs: none + * @return none + *************************************************************************/ +void setTesterStatusToLoggedOut( void ) +{ + testerLoggedIn = FALSE; +} + +/*********************************************************************//** + * @brief * The sendTestAckResponseMsg function constructs a simple response message for * a handled test message and queues it for transmit on the appropriate UART channel. * @details Inputs: none @@ -4559,16 +4572,81 @@ if ( TRUE == payload.reset ) { - status = resetTestConfig( payload.config ); + status = resetTestConfig( (TEST_CONFIG_T)payload.config ); } else { - status = setTestConfig( payload.config ); + status = setTestConfig( (TEST_CONFIG_T)payload.config ); } } // Respond to request sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, status ); } +/*********************************************************************//** + * @brief + * The handleTestDGGetTestConfig function handles a request to get the + * test configuration per request. + * @details Inputs: none + * @details Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleTestDGGetTestConfig( MESSAGE_T* message ) +{ + BOOL result = FALSE; + + // verify payload length + if ( ( 0 == message->hdr.payloadLen ) && ( TRUE == isTestingActivated() ) ) + { + result = sendTestConfigStatusToDialin(); + } + + // respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + +/*********************************************************************//** + * @brief + * The handleTestDGResetAllTestConfigs function handles a request to reset + * all of the test configurations. + * @details Inputs: none + * @details Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleTestDGResetAllTestConfigs( MESSAGE_T* message ) +{ + BOOL result = FALSE; + + // verify payload length + if ( ( 0 == message->hdr.payloadLen ) && ( TRUE == isTestingActivated() ) ) + { + result = resetAllTestConfigs(); + } + + // respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + +/*********************************************************************//** + * @brief + * The handleTestDGDialinCheckIn function handles check in from Dialin. + * @details Inputs: none + * @details Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleTestDGDialinCheckIn( MESSAGE_T* message ) +{ + if ( 0 == message->hdr.payloadLen ) + { + setDialinCheckInTimeStamp(); + } + + // respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, TRUE ); +} + /**@}*/ Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -rd9c2c8e146f20a2acefb9ac1f6497536fb2c404e -rdef06013312d270b1704787a4473caf5612dd6ac --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision d9c2c8e146f20a2acefb9ac1f6497536fb2c404e) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision def06013312d270b1704787a4473caf5612dd6ac) @@ -187,6 +187,7 @@ // MSG_TESTER_LOG_IN void handleTesterLogInRequest( MESSAGE_T *message ); BOOL isTestingActivated( void ); +void setTesterStatusToLoggedOut( void ); // MSG_ID_DG_ALARM_STATE_OVERRIDE void handleTestAlarmStateOverrideRequest( MESSAGE_T *message ); @@ -478,6 +479,15 @@ // MSG_ID_DG_SET_TEST_CONFIGURATION void handleTestDGSetTestConfig( MESSAGE_T *message ); +// MSG_ID_DG_GET_TEST_CONFIGURATION +void handleTestDGGetTestConfig( MESSAGE_T* message ); + +// MSG_ID_DG_RESET_ALL_TEST_CONFIGURATIONS +void handleTestDGResetAllTestConfigs( MESSAGE_T* message ); + +// MSG_ID_DG_DIALIN_CHECK_IN +void handleTestDGDialinCheckIn( MESSAGE_T* message ); + /**@}*/ #endif