Index: firmware/App/Modes/SampleWater.c =================================================================== diff -u -r401c4027b0e59182771f0c620465b34579f203f5 -r3d079c1d9ca782edcdf2bd962929a1adcfef9ade --- firmware/App/Modes/SampleWater.c (.../SampleWater.c) (revision 401c4027b0e59182771f0c620465b34579f203f5) +++ firmware/App/Modes/SampleWater.c (.../SampleWater.c) (revision 3d079c1d9ca782edcdf2bd962929a1adcfef9ade) @@ -19,6 +19,7 @@ #include "DGInterface.h" #include "HDDefs.h" #include "SampleWater.h" +#include "SystemCommMessages.h" #include "TaskGeneral.h" /** @@ -28,18 +29,14 @@ // ********** private definitions ********** -#define MAX_FLUSH_TIME_COUNT ( 60 * MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Maximum flush time count relative to task general interval. - // ********** private data ********** static BOOL sampleWaterStartRequested; static BOOL sampleWaterStopRequested; -static BOOL sampleWaterTakenConfirm; +static BOOL sampleWaterEntered; static SAMPLE_WATER_STATE_T currentSampleWaterState; -static U32 flushTimerCounter; -static BOOL sampleWaterPassed; -static BOOL sampleWaterFailed; +static BOOL sampleWaterResult; // ********** private function prototypes ********** @@ -58,12 +55,10 @@ { sampleWaterStartRequested = FALSE; sampleWaterStopRequested = FALSE; - sampleWaterTakenConfirm = FALSE; + sampleWaterEntered = FALSE; currentSampleWaterState = SAMPLE_WATER_SETUP_STATE; - flushTimerCounter = 0; - sampleWaterPassed = FALSE; - sampleWaterFailed = FALSE; + sampleWaterResult = FALSE; } /*********************************************************************//** @@ -130,22 +125,28 @@ *************************************************************************/ BOOL isSampleWaterPassed( void ) { - return sampleWaterPassed; + BOOL result = FALSE; + + if ( SAMPLE_WATER_RESULT_STATE == currentSampleWaterState ) + { + result = sampleWaterResult; + } + return result; } /*********************************************************************//** * @brief * The signalSampleWaterUserAction function signals a sample water user action * has been requested. The request is handled and responded to. * @details Inputs: none - * @details Outputs: action handled, request reponsed to + * @details Outputs: action handled, request responded to * @param action User action requested * @return none *************************************************************************/ void signalSampleWaterUserAction( REQUESTED_SAMPLE_WATER_USER_ACTIONS_T action ) { BOOL accepted = FALSE; - REQUEST_REJECT_REASON_CODE_T rejReason = REQUEST_REJECT_REASON_NONE; + REQUEST_REJECT_REASON_CODE_T rejReason = REQUEST_REJECT_REASON_ACTION_DISABLED_IN_CURRENT_STATE; // Reject user action requests if any alarm is currently active. User must clear alarm first. if ( FALSE == isAnyAlarmActive() ) @@ -157,23 +158,17 @@ { sampleWaterStopRequested = TRUE; accepted = TRUE; + rejReason = REQUEST_REJECT_REASON_NONE; } - else - { - rejReason = REQUEST_REJECT_REASON_ACTION_DISABLED_IN_CURRENT_STATE; - } break; case REQUESTED_USER_ACTION_SAMPLE_WATER_START: if ( SAMPLE_WATER_STATE == currentSampleWaterState ) { sampleWaterStartRequested = TRUE; accepted = TRUE; + rejReason = REQUEST_REJECT_REASON_NONE; } - else - { - rejReason = REQUEST_REJECT_REASON_ACTION_DISABLED_IN_CURRENT_STATE; - } break; default: @@ -191,6 +186,21 @@ /*********************************************************************//** * @brief + * The setSampleWaterResult function sets the sample water test result + * provided by the user. + * @details Inputs: none + * @details Outputs: action handled, request responded to + * @param isSampleWaterPassed sample water test result + * @return none + *************************************************************************/ +void setSampleWaterResult( BOOL isSampleWaterPassed ) +{ + sampleWaterEntered = TRUE; + sampleWaterResult = isSampleWaterPassed; +} + +/*********************************************************************//** + * @brief * The handleWaterSampleSetupState function waits for filter flush period elapsed. * @details Inputs: flushTimerCounter * @details Outputs: none @@ -199,8 +209,10 @@ static SAMPLE_WATER_STATE_T handleWaterSampleSetupState( void ) { SAMPLE_WATER_STATE_T state = SAMPLE_WATER_SETUP_STATE; + DG_OP_MODE_T dgOpMode = getDGOpMode(); + U32 dgSubMode = getDGSubMode(); - if ( MAX_FLUSH_TIME_COUNT < flushTimerCounter++ ) + if ( ( DG_MODE_STAN == dgOpMode ) && ( DG_STANDBY_MODE_STATE_FLUSH_FILTER_IDLE == dgSubMode ) ) { state = SAMPLE_WATER_STATE; } @@ -210,21 +222,20 @@ /*********************************************************************//** * @brief - * The handleWaterSampleState function passes sample water commands from user - * down to DG. - * @details Inputs: sampleWaterTakenConfirm, sampleWaterStartRequested, sampleWaterStopRequested + * The handleWaterSampleState function processes sample water commands from user. + * @details Inputs: sampleWaterFailed, sampleWaterStartRequested, sampleWaterStopRequested * @details Outputs: Processed commands from user * @return current state *************************************************************************/ static SAMPLE_WATER_STATE_T handleWaterSampleState( void ) { SAMPLE_WATER_STATE_T state = SAMPLE_WATER_STATE; - DG_CMD_RESPONSE_T dgCmdResp; - if ( TRUE == sampleWaterTakenConfirm ) + if ( TRUE == sampleWaterEntered ) { - sampleWaterTakenConfirm = FALSE; + sampleWaterEntered = FALSE; state = SAMPLE_WATER_RESULT_STATE; + cmdDGSampleWater( SAMPLE_WATER_CMD_END ); } if ( TRUE == sampleWaterStartRequested ) @@ -239,12 +250,6 @@ cmdDGSampleWater( SAMPLE_WATER_CMD_STOP ); } - if ( ( TRUE == getDGCommandResponse( DG_CMD_START_DRAIN, &dgCmdResp ) ) && ( DG_CMD_REQUEST_REJECT_REASON_FLUSH_EXPIRED == dgCmdResp.rejected ) ) - { - cmdDGSampleWater( SAMPLE_WATER_CMD_FLUSH ); - state = SAMPLE_WATER_SETUP_STATE; - } - return state; } @@ -258,7 +263,7 @@ *************************************************************************/ static SAMPLE_WATER_STATE_T handleWaterSampleResultState( void ) { - if ( TRUE == sampleWaterFailed ) + if ( FALSE == sampleWaterResult ) { // TODO: Trigger fault } Index: firmware/App/Modes/SampleWater.h =================================================================== diff -u -r401c4027b0e59182771f0c620465b34579f203f5 -r3d079c1d9ca782edcdf2bd962929a1adcfef9ade --- firmware/App/Modes/SampleWater.h (.../SampleWater.h) (revision 401c4027b0e59182771f0c620465b34579f203f5) +++ firmware/App/Modes/SampleWater.h (.../SampleWater.h) (revision 3d079c1d9ca782edcdf2bd962929a1adcfef9ade) @@ -41,6 +41,7 @@ BOOL isSampleWaterPassed( void ); void signalSampleWaterUserAction( REQUESTED_SAMPLE_WATER_USER_ACTIONS_T action ); // from user +void setSampleWaterResult( BOOL isSampleWaterPassed ); // from user /**@}*/ Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r401c4027b0e59182771f0c620465b34579f203f5 -r3d079c1d9ca782edcdf2bd962929a1adcfef9ade --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 401c4027b0e59182771f0c620465b34579f203f5) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 3d079c1d9ca782edcdf2bd962929a1adcfef9ade) @@ -529,6 +529,31 @@ return result; } + + +/*********************************************************************//** + * @brief + * The handleSampleWaterCmd function handles a sample water result msg from the UI. + * @details Inputs: none + * @details Outputs: message handled + * @param message a pointer to the message to handle + * @return none. + *************************************************************************/ +void handleSampleWaterResult( MESSAGE_T *message ) +{ + if ( sizeof( U32 ) == message->hdr.payloadLen ) + { + U32 result; + + memcpy( &result, &message->payload[0], sizeof( U32 ) ); + + setSampleWaterResult( (BOOL) result ); + } + else + { + sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_HD_2_UI, FALSE ); + } +} /*********************************************************************//** * @brief Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r401c4027b0e59182771f0c620465b34579f203f5 -r3d079c1d9ca782edcdf2bd962929a1adcfef9ade --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 401c4027b0e59182771f0c620465b34579f203f5) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 3d079c1d9ca782edcdf2bd962929a1adcfef9ade) @@ -164,6 +164,9 @@ // MSG_ID_HD_SAMPLE_WATER_CMD_RESPONSE BOOL sendSampleWaterCmdResponse( BOOL accepted, U32 rejReason ); +// MSG_ID_UI_SAMPLE_WATER_RESULT +void handleSampleWaterResult( MESSAGE_T *message ); + // *********** public DG command functions ********** // MSG_ID_SET_DG_DIALYSATE_TEMP_TARGETS