Index: firmware/App/Controllers/DGInterface.c =================================================================== diff -u -rf760ffc4b10556e5186e9ceb90294262063440ca -ra6587c2ba0a40bdf12b5fdcf2ba8dec0cd958cfa --- firmware/App/Controllers/DGInterface.c (.../DGInterface.c) (revision f760ffc4b10556e5186e9ceb90294262063440ca) +++ firmware/App/Controllers/DGInterface.c (.../DGInterface.c) (revision a6587c2ba0a40bdf12b5fdcf2ba8dec0cd958cfa) @@ -978,7 +978,6 @@ { BOOL start = TRUE; dgCmdResp[ DG_CMD_START_CHEM_DISINFECT ].commandID = DG_CMD_NONE; - sendDGStartChemicalDisinfectModeCommand( start ); } @@ -999,6 +998,36 @@ /*********************************************************************//** * @brief + * The cmdStartDGChememicalFlushDisinfect function sends a start chemical disinfect + * flush command message to the DG. + * @details Inputs: none + * @details Outputs: start chemical disinfect flush mode command sent to DG. + * @return none + *************************************************************************/ +void cmdStartDGChememicalFlushDisinfect( void ) +{ + BOOL start = TRUE; + dgCmdResp[ DG_CMD_START_CHEM_DISINFECT_FLUSH ].commandID = DG_CMD_NONE; + sendDGStartChemicalDisinfectFlushModeCommand( start ); +} + +/*********************************************************************//** + * @brief + * The cmdStopDGChemFlushDisinfect function sends a stop chemical disinfect + * flush command message to the DG. + * @details Inputs: none + * @details Outputs: stop chemical disinfect flush mode command sent to DG. + * @return none + *************************************************************************/ +void cmdStopDGChemFlushDisinfect( void ) +{ + BOOL start = FALSE; + dgCmdResp[ DG_CMD_STOP_CHEM_DISINFECT_FLUSH ].commandID = DG_CMD_NONE; + sendDGStartChemicalDisinfectFlushModeCommand( start ); +} + +/*********************************************************************//** + * @brief * The cmdRequestDGConcentrateRatios function sends a request to DG to receive * the concentrate ratios. * @details Inputs: none Index: firmware/App/Controllers/DGInterface.h =================================================================== diff -u -rf760ffc4b10556e5186e9ceb90294262063440ca -ra6587c2ba0a40bdf12b5fdcf2ba8dec0cd958cfa --- firmware/App/Controllers/DGInterface.h (.../DGInterface.h) (revision f760ffc4b10556e5186e9ceb90294262063440ca) +++ firmware/App/Controllers/DGInterface.h (.../DGInterface.h) (revision a6587c2ba0a40bdf12b5fdcf2ba8dec0cd958cfa) @@ -160,6 +160,8 @@ void cmdStopDGHeatDisinfect( void ); void cmdStartDGChemicalDisinfect( void ); void cmdStopDGChemicalDisinfect( void ); +void cmdStartDGChememicalFlushDisinfect( void ); +void cmdStopDGChemFlushDisinfect( void ); void cmdRequestDGMixingRatios( void ); void cmdSetDGToServiceMode( void ); Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -rceeba51c01b896855eb03ab81281a2b0f48c75d2 -ra6587c2ba0a40bdf12b5fdcf2ba8dec0cd958cfa --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision ceeba51c01b896855eb03ab81281a2b0f48c75d2) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision a6587c2ba0a40bdf12b5fdcf2ba8dec0cd958cfa) @@ -60,10 +60,13 @@ static BOOL flushStartReqReceived; ///< Flag indicates user has requested initiation of flush mode. static BOOL heatDisinfectStartReqReceived; ///< Flag indicates user has requested initiation of heat disinfect mode. static BOOL chemDisinfectStartReqReceived; ///< Flag indicates user has requested initiation of chemical disinfect mode. -static GENERIC_CONFIRM_ID_T disinfectCancelReqID; ///< ID of requested cancel disinfect mode. +static BOOL chemDisinfectFlushStartReqReceived; ///< Flag indicates user has requested initiation of chemical disinfect flush mode. +static GENERIC_CONFIRM_ID_T disinfectCancelReqID; ///< ID of requested cancel disinfect mode. static DG_DISINFECT_STATE_T dgDisinfectState; ///< DG disinfect state to be boadcast to UI. static U32 dataPublishCounter; ///< Disinfects data publish counter. static BOOL homingInitiated; ///< Boolean flag to indicate homing is initiated. +static BOOL hasChemFlushSampleAlarmBeenTrgrd; ///< Boolean flag to indicate whether chem flush sample alarm has been triggered or not. +static GENERIC_CONFIRM_ID_T chemFlushSampleID; ///< Chemical disinfect flush sample ID. /// Interval (in task intervals) at which to publish standby mode data to CAN bus. static OVERRIDE_U32_T standbyModePublishInterval = { DISINFECTS_DATA_PUB_INTERVAL, DISINFECTS_DATA_PUB_INTERVAL, DISINFECTS_DATA_PUB_INTERVAL, 0 }; @@ -90,6 +93,10 @@ static HD_STANDBY_STATE_T handleStandbyModeWaitForDGChemDisinfectStartState( void ); static HD_STANDBY_STATE_T handleStandbyModeDGChemDisininfectInProgressState( void ); +static HD_STANDBY_STATE_T handleStandbyModeWaitForDGChemDisinfectFlushCmdResponseState( void ); +static HD_STANDBY_STATE_T handleStandbyModeWaitForDGChemDisinfectFlushStartState( void ); +static HD_STANDBY_STATE_T handleStandbyModeDGChemDisininfectFlushInProgressState( void ); + static BOOL isDGDisinfectValid( void ); static BOOL haveHDDGServicesBeenExpired( REQUEST_REJECT_REASON_CODE_T* rejReason ); static void publishDisinfectData( void ); @@ -100,20 +107,25 @@ * @details Inputs: none * @details Outputs: currentStandbyState, treatStartReqReceived, * flushStartReqReceived, dataPublishCounter, heatDisinfectStartReqReceived, - * chemDisinfectStartReqReceived, dgDisinfectState, homingInitiated + * chemDisinfectStartReqReceived, dgDisinfectState, homingInitiated, + * chemDisinfectFlushStartReqReceived, hasChemFlushSampleAlarmBeenTrgrd, + * chemFlushSampleID * @return none *************************************************************************/ void initStandbyMode( void ) { - currentStandbyState = STANDBY_START_STATE; - treatStartReqReceived = FALSE; - flushStartReqReceived = FALSE; - dataPublishCounter = 0; - heatDisinfectStartReqReceived = FALSE; - chemDisinfectStartReqReceived = FALSE; - disinfectCancelReqID = GENERIC_CONFIRM_ID_NONE; - dgDisinfectState = DG_DISINFECT_NOT_RUNNING_STATE; - homingInitiated = FALSE; + currentStandbyState = STANDBY_START_STATE; + treatStartReqReceived = FALSE; + flushStartReqReceived = FALSE; + dataPublishCounter = 0; + heatDisinfectStartReqReceived = FALSE; + chemDisinfectStartReqReceived = FALSE; + chemDisinfectFlushStartReqReceived = FALSE; + disinfectCancelReqID = GENERIC_CONFIRM_ID_NONE; + dgDisinfectState = DG_DISINFECT_NOT_RUNNING_STATE; + homingInitiated = FALSE; + hasChemFlushSampleAlarmBeenTrgrd = FALSE; + chemFlushSampleID = GENERIC_CONFIRM_ID_NONE; } /*********************************************************************//** @@ -238,6 +250,18 @@ currentStandbyState = handleStandbyModeDGChemDisininfectInProgressState(); break; + case STANDBY_WAIT_FOR_DG_CHEM_DISINFECT_FLUSH_CMD_RESPONSE_STATE: + currentStandbyState = handleStandbyModeWaitForDGChemDisinfectFlushCmdResponseState(); + break; + + case STANDBY_WAIT_FOR_DG_CHEM_DISINFECT_FLUSH_TO_START_STATE: + currentStandbyState = handleStandbyModeWaitForDGChemDisinfectFlushStartState(); + break; + + case STANDBY_DG_CHEM_DISINFECT_FLUSH_IN_PROGRESS_STATE: + currentStandbyState = handleStandbyModeDGChemDisininfectFlushInProgressState(); + break; + default: SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_STANDBY_INVALID_STATE, currentStandbyState ); currentStandbyState = STANDBY_START_STATE; @@ -470,6 +494,42 @@ /*********************************************************************//** * @brief + * The signalUserInitiateChemcialDisinfectFlushMode function handles user + * initiation of chemical disinfect flush mode. + * @details Inputs: currentStandbyState + * @details Outputs: chemDisinfectFlushStartReqReceived + * @return TRUE if signal accepted, FALSE if not + *************************************************************************/ +BOOL signalUserInitiateChemcialDisinfectFlushMode( void ) +{ + BOOL result = FALSE; + REQUEST_REJECT_REASON_CODE_T rejReason = REQUEST_REJECT_REASON_NOT_ALLOWED_IN_CURRENT_MODE; + + if ( MODE_STAN == getCurrentOperationMode() ) + { + if ( ( STANDBY_WAIT_FOR_DISINFECT_STATE == currentStandbyState ) || ( STANDBY_WAIT_FOR_TREATMENT_STATE == currentStandbyState ) ) + { + if ( TRUE == isDGCommunicating() ) + { + chemDisinfectFlushStartReqReceived = TRUE; + result = TRUE; + currentStandbyState = STANDBY_WAIT_FOR_DISINFECT_STATE; + rejReason = REQUEST_REJECT_REASON_NONE; + } + else + { + rejReason = REQUEST_REJECT_REASON_DG_COMM_LOST; + } + } + } + + sendDisinfectConfirmResponse( result, rejReason ); + + return result; +} + +/*********************************************************************//** + * @brief * The signalInitiateStandbyDisinfectSubmode function handles user * initiation of setting the disinfects submode. * @details Inputs: currentStandbyState @@ -539,7 +599,8 @@ if ( ( STANDBY_DG_FLUSH_IN_PROGRESS_STATE == currentStandbyState ) || ( STANDBY_DG_HEAT_DISINFECT_IN_PROGRESS_STATE == currentStandbyState ) || - ( STANDBY_DG_CHEM_DISINFECT_IN_PROGRESS_STATE == currentStandbyState ) ) + ( STANDBY_DG_CHEM_DISINFECT_IN_PROGRESS_STATE == currentStandbyState ) || + ( STANDBY_DG_CHEM_DISINFECT_FLUSH_IN_PROGRESS_STATE == currentStandbyState ) ) { if ( ( TRUE == stop ) && ( GENERIC_CONFIRM_ID_NONE == disinfectCancelReqID ) ) { @@ -555,6 +616,10 @@ { confirm_id = GENERIC_CONFIRM_ID_DISINFECT_STOP_CHEMICAL; } + else if ( STANDBY_DG_CHEM_DISINFECT_FLUSH_IN_PROGRESS_STATE == currentStandbyState ) + { + confirm_id = GENERIC_CONFIRM_ID_DISINFECT_STOP_CHEMICAL_FLUSH; + } // Send message to UI to indicate user request to cancel disinfect disinfectCancelReqID = addConfirmationRequest( confirm_id, GENERIC_CONFIRM_CMD_REQUEST_OPEN, 0 ); } @@ -564,7 +629,7 @@ confirm_status = getConfirmationRequestStatus( disinfectCancelReqID ); switch ( confirm_status ) { - case CONFIRMATION_REQUEST_STATUS_ACCEPTED : + case CONFIRMATION_REQUEST_STATUS_ACCEPTED: // Clear request active status disinfectCancelReqID = GENERIC_CONFIRM_ID_NONE; @@ -582,21 +647,25 @@ cmdStopDGChemicalDisinfect(); break; + case STANDBY_DG_CHEM_DISINFECT_FLUSH_IN_PROGRESS_STATE: + cmdStopDGChemFlushDisinfect(); + break; + default: // UI Confirm already closed. Nothing to do. break; } break; - case CONFIRMATION_REQUEST_STATUS_TIMEOUT : - case CONFIRMATION_REQUEST_STATUS_REJECTED : + case CONFIRMATION_REQUEST_STATUS_TIMEOUT: + case CONFIRMATION_REQUEST_STATUS_REJECTED: // Clear request active status disinfectCancelReqID = GENERIC_CONFIRM_ID_NONE; break; case CONFIRMATION_REQUEST_STATUS_PENDING: case CONFIRMATION_REQUEST_STATUS_UNUSED: - default : + default: // Nothing to do break; } @@ -742,6 +811,11 @@ cmdStartDGChemicalDisinfect(); state = STANDBY_WAIT_FOR_DG_CHEM_DISINFECT_CMD_RESPONSE_STATE; } + else if ( TRUE == chemDisinfectFlushStartReqReceived ) + { + cmdStartDGChememicalFlushDisinfect(); + state = STANDBY_WAIT_FOR_DG_CHEM_DISINFECT_FLUSH_CMD_RESPONSE_STATE; + } return state; } @@ -986,6 +1060,128 @@ /*********************************************************************//** * @brief + * The handleStandbyModeWaitForDGChemDisinfectFlushCmdResponseState function handles + * DG chemical disinfect flush wait for command response state. + * @details Inputs: none + * @details Outputs: dgDisinfectState, chemDisinfectFlushStartReqReceived + * @return next state of the standby mode state machine + *************************************************************************/ +static HD_STANDBY_STATE_T handleStandbyModeWaitForDGChemDisinfectFlushCmdResponseState( void ) +{ + DG_CMD_RESPONSE_T dgCmdResp; + HD_STANDBY_STATE_T state = STANDBY_WAIT_FOR_DG_CHEM_DISINFECT_FLUSH_CMD_RESPONSE_STATE; + BOOL result = FALSE; + + if ( TRUE == getDGCommandResponse( DG_CMD_START_CHEM_DISINFECT_FLUSH, &dgCmdResp ) ) + { + state = STANDBY_WAIT_FOR_DISINFECT_STATE; + chemDisinfectFlushStartReqReceived = FALSE; + + if ( DG_CMD_REQUEST_REJECT_REASON_NONE == dgCmdResp.rejectCode ) + { + dgDisinfectState = DG_DISINFECT_CHEM_FLUSH_STATE; + state = STANDBY_WAIT_FOR_DG_CHEM_DISINFECT_FLUSH_TO_START_STATE; + result = TRUE; + } + + sendDisinfectConfirmResponse( result, dgCmdResp.rejectCode ); + } + + return state; +} + +/*********************************************************************//** + * @brief + * The handleStandbyModeWaitForDGChemDisinfectFlushStartState function handles + * DG chemical disinfect flush wait for start state. + * @details Inputs: none + * @details Outputs: dgDisinfectState + * @return next state of the standby mode state machine + *************************************************************************/ +static HD_STANDBY_STATE_T handleStandbyModeWaitForDGChemDisinfectFlushStartState( void ) +{ + HD_STANDBY_STATE_T state = STANDBY_WAIT_FOR_DG_CHEM_DISINFECT_FLUSH_TO_START_STATE; + + if ( DG_MODE_CHFL == getDGOpMode() ) + { + dgDisinfectState = DG_DISINFECT_NOT_RUNNING_STATE; + state = STANDBY_DG_CHEM_DISINFECT_FLUSH_IN_PROGRESS_STATE; + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_DISINFECT_CHEM_FLUSH, 0 ); + } + + return state; +} + +/*********************************************************************//** + * @brief + * The handleStandbyModeDGChemDisininfectFlushInProgressState function handles + * DG chemical disinfect flush in progress state. + * @details Inputs: hasChemFlushSampleAlarmBeenTrgrd, chemFlushSampleID + * @details Outputs: dgDisinfectState, hasChemFlushSampleAlarmBeenTrgrd, + * chemFlushSampleID + * @return next state of the standby mode state machine + *************************************************************************/ +static HD_STANDBY_STATE_T handleStandbyModeDGChemDisininfectFlushInProgressState( void ) +{ + HD_STANDBY_STATE_T state = STANDBY_DG_CHEM_DISINFECT_FLUSH_IN_PROGRESS_STATE; + + if ( ( FALSE == hasChemFlushSampleAlarmBeenTrgrd ) && ( TRUE == isAlarmActive( ALARM_ID_DG_CHEM_DISINFECT_FLUSH_FLUSH_SAMPLE ) ) ) + { + // Check if the flush sample alarm has been raised for the first time in the sample flush state + hasChemFlushSampleAlarmBeenTrgrd = TRUE; + } + else if ( ( TRUE == hasChemFlushSampleAlarmBeenTrgrd ) && ( FALSE == isAlarmActive( ALARM_ID_DG_CHEM_DISINFECT_FLUSH_FLUSH_SAMPLE ) ) ) + { + // Sample flush alarm has been triggered and the user has cleared the alarm by pressing Ok. The user is collecting sample. + // Send the notification to the UI to prompt the pass/fail screen so the user can choose whether the sampling after flush passed or failed + hasChemFlushSampleAlarmBeenTrgrd = FALSE; + chemFlushSampleID = addConfirmationRequest( GENERIC_CONFIRM_ID_DISINFECT_CHEM_FLUSH_SAMPLE_PASS_FAIL, GENERIC_CONFIRM_CMD_REQUEST_OPEN, 0 ); + } + + if ( chemFlushSampleID != GENERIC_CONFIRM_ID_NONE ) + { + // There is a user confirm + CONFIRMATION_REQUEST_STATUS_T status = getConfirmationRequestStatus( chemFlushSampleID ); + U32 sampleStatus = 0; + + switch( status ) + { + // If the request status is accepted send a 1 to DG + case CONFIRMATION_REQUEST_STATUS_ACCEPTED: + sampleStatus = (U32)CONFIRMATION_REQUEST_STATUS_ACCEPTED; + chemFlushSampleID = GENERIC_CONFIRM_ID_NONE; + handleSendChemFlushPassFailToDG( sampleStatus ); + break; + + // If the request timed out or rejected, it is 0 or failure to DG + case CONFIRMATION_REQUEST_STATUS_TIMEOUT: + case CONFIRMATION_REQUEST_STATUS_REJECTED: + chemFlushSampleID = GENERIC_CONFIRM_ID_NONE; + handleSendChemFlushPassFailToDG( sampleStatus ); + break; + + case CONFIRMATION_REQUEST_STATUS_PENDING: + case CONFIRMATION_REQUEST_STATUS_UNUSED: + default: + // Nothing to do + break; + } + } + + if ( getDGOpMode() != DG_MODE_CHFL ) + { + dgDisinfectState = DG_DISINFECT_NOT_RUNNING_STATE; + state = STANDBY_WAIT_FOR_TREATMENT_STATE; + clearAlarm( ALARM_ID_HD_DISINFECT_CHEM_FLUSH ); + } + + publishDisinfectData(); + + return state; +} + +/*********************************************************************//** + * @brief * The isDGDisinfectValid function checks whether the DG disinfects is * acceptable to start another treatment. * @details Inputs: none @@ -1108,6 +1304,10 @@ case STANDBY_DG_CHEM_DISINFECT_IN_PROGRESS_STATE: data.disinfectDGChemState = state.chemDisinfectUIState; break; + + case STANDBY_DG_CHEM_DISINFECT_FLUSH_IN_PROGRESS_STATE: + data.disinfectDGChemState = state.chemDisinfectUIState; // TDOD add chem flush + break; } data.disinfectSubModeHDState = (U32)dgDisinfectState; Index: firmware/App/Modes/ModeStandby.h =================================================================== diff -u -rf760ffc4b10556e5186e9ceb90294262063440ca -ra6587c2ba0a40bdf12b5fdcf2ba8dec0cd958cfa --- firmware/App/Modes/ModeStandby.h (.../ModeStandby.h) (revision f760ffc4b10556e5186e9ceb90294262063440ca) +++ firmware/App/Modes/ModeStandby.h (.../ModeStandby.h) (revision a6587c2ba0a40bdf12b5fdcf2ba8dec0cd958cfa) @@ -51,6 +51,7 @@ BOOL signalUserInitiateFlushMode( void ); BOOL signalUserInitiateHeatDisinfectMode( void ); BOOL signalUserInitiateChemicalDisinfectMode( void ); +BOOL signalUserInitiateChemcialDisinfectFlushMode( void ); BOOL signalInitiateStandbyDisinfectSubmode( U32 cmd ); BOOL testSetStandbyModePublishIntervalOverride( U32 ms ); Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -r9576fd573a9dfefb502da5668841ea5f7fe072f1 -ra6587c2ba0a40bdf12b5fdcf2ba8dec0cd958cfa --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 9576fd573a9dfefb502da5668841ea5f7fe072f1) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision a6587c2ba0a40bdf12b5fdcf2ba8dec0cd958cfa) @@ -57,9 +57,9 @@ // ********** private data ********** static volatile BOOL modeRequest[ NUM_OF_MODES - 1 ]; ///< Pending operation mode change requests. -static HD_OP_MODE_T lastMode = MODE_INIT; ///< Last operation mode prior to current mode. -static HD_OP_MODE_T currentMode = MODE_INIT; ///< Current operation mode. -static U32 currentSubMode = 0; ///< The currently active state of the active mode. +static HD_OP_MODE_T lastMode; ///< Last operation mode prior to current mode. +static HD_OP_MODE_T currentMode; ///< Current operation mode. +static U32 currentSubMode; ///< The currently active state of the active mode. static U32 broadcastModeIntervalCtr; ///< Interval counter used to determine when to broadcast operation mode. Initialize to 11 to stagger broadcast. /// Interval (in task intervals) at which to publish operation mode data to CAN bus. static OVERRIDE_U32_T opModePublishInterval = { BROADCAST_HD_OP_MODE_INTERVAL, BROADCAST_HD_OP_MODE_INTERVAL, BROADCAST_HD_OP_MODE_INTERVAL, 0 }; @@ -107,6 +107,7 @@ } // Start in init mode + lastMode = MODE_INIT; currentMode = MODE_INIT; currentSubMode = 0; broadcastModeIntervalCtr = DATA_PUBLISH_COUNTER_START_COUNT; @@ -472,7 +473,7 @@ if ( confirmRequests[ i ].requestID == request_id ) { status = confirmRequests[ i ].status; - if ( CONFIRMATION_REQUEST_STATUS_PENDING != status) + if ( CONFIRMATION_REQUEST_STATUS_PENDING != status ) { // Send UI clear if ( CONFIRMATION_REQUEST_STATUS_TIMEOUT == confirmRequests[ i ].status ) @@ -557,7 +558,7 @@ for ( i = 0; i < NUM_CONFIRM_REQUESTS; i++ ) { - if ( confirmRequests[ i ].status == CONFIRMATION_REQUEST_STATUS_UNUSED ) + if ( CONFIRMATION_REQUEST_STATUS_UNUSED == confirmRequests[ i ].status ) { // Save the confirmation request info confirmRequests[ i ].requestID = request_id; @@ -566,7 +567,6 @@ confirmRequests[ i ].status = CONFIRMATION_REQUEST_STATUS_PENDING; new_id = request_id; sendConfirmationRequest( request_id, request_type, reject_reason ); - break; } } Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -raa8b9687b9396b4878cf0d5327d72a5d67477761 -ra6587c2ba0a40bdf12b5fdcf2ba8dec0cd958cfa --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision aa8b9687b9396b4878cf0d5327d72a5d67477761) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision a6587c2ba0a40bdf12b5fdcf2ba8dec0cd958cfa) @@ -851,18 +851,22 @@ memcpy( &cmd, message->payload, sizeof(U32) ); - if ( 0 == cmd ) // Command 0 = Flush + if ( DG_DISINFECT_FLUSH_STATE == cmd ) // Command 0 = Flush { result = signalUserInitiateFlushMode(); } - else if ( 1 == cmd ) // Command 1 = Heat disinfect + else if ( DG_DISINFECT_HEAT_STATE == cmd ) // Command 1 = Heat disinfect { result = signalUserInitiateHeatDisinfectMode(); } - else if ( 2 == cmd ) // Command 2 = chemical disinfect + else if ( DG_DISINFECT_CHEM_STATE == cmd ) // Command 2 = chemical disinfect { result = signalUserInitiateChemicalDisinfectMode(); } + else if ( DG_DISINFECT_CHEM_FLUSH_STATE == cmd ) // Command 3 = chemical disinfect flush + { + result = signalUserInitiateChemcialDisinfectFlushMode(); + } } sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_HD_2_UI, result ); @@ -1798,6 +1802,35 @@ /*********************************************************************//** * @brief + * The sendDGStartChemicalDisinfectFlushModeCommand function constructs a DG + * start/stop chemical disinfect flush mode command message and queues the msg + * for transmit on the appropriate CAN channel. + * @details Inputs: none + * @details Outputs: DG start chemical disinfect flush mode command msg + * constructed and queued. + * @param start TRUE indicates start chemical disinfect flush mode + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL sendDGStartChemicalDisinfectFlushModeCommand( BOOL start ) +{ + BOOL result; + MESSAGE_T msg; + + // Create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_DG_START_STOP_CHEM_DISINFECT_FLUSH; + msg.hdr.payloadLen = sizeof( BOOL ); + + memcpy( msg.payload, &start, sizeof( BOOL ) ); + + // Serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_HD_2_DG, ACK_REQUIRED ); + + return result; +} + +/*********************************************************************//** + * @brief * The broadcastAlarmStatus function constructs an alarm status msg to * be broadcast and queues the msg for transmit on the appropriate CAN channel. * @details Inputs: none @@ -3305,7 +3338,7 @@ if ( ( CONFIRMATION_REQUEST_STATUS_REJECTED == status ) || ( CONFIRMATION_REQUEST_STATUS_ACCEPTED == status ) ) { - setConfirmationRequestStatus( (GENERIC_CONFIRM_ID_T) request_id, (CONFIRMATION_REQUEST_STATUS_T) status ); + setConfirmationRequestStatus( (GENERIC_CONFIRM_ID_T)request_id, (CONFIRMATION_REQUEST_STATUS_T)status ); } } @@ -3345,7 +3378,33 @@ serializeMessage( msg, COMM_BUFFER_OUT_CAN_HD_2_UI, ACK_NOT_REQUIRED ); } +/*********************************************************************//** + * @brief + * The handleSendChemFlushPassFailToDG function sends the result of the + * chemical disinfect flush sample pass/fail to DG + * @details Inputs: none + * @details Outputs: none + * @param status which is the status of the result + * @return none + *************************************************************************/ +void handleSendChemFlushPassFailToDG( U32 status ) +{ + MESSAGE_T msg; + U08 *payloadPtr = msg.payload; + // Create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_HD_SEND_CHEM_FLUSH_SAMPLE_PASS_FAIL_TO_DG; + // The payload length is U32 Request ID, U32 Type + msg.hdr.payloadLen = sizeof( U32 ); + + memcpy( payloadPtr, &status, sizeof( U32 ) ); + + // Serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer + serializeMessage( msg, COMM_BUFFER_OUT_CAN_HD_2_DG, ACK_NOT_REQUIRED ); +} + + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -raa8b9687b9396b4878cf0d5327d72a5d67477761 -ra6587c2ba0a40bdf12b5fdcf2ba8dec0cd958cfa --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision aa8b9687b9396b4878cf0d5327d72a5d67477761) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision a6587c2ba0a40bdf12b5fdcf2ba8dec0cd958cfa) @@ -399,6 +399,9 @@ // MSG_ID_DG_START_STOP_CHEM_DISINFECT BOOL sendDGStartChemicalDisinfectModeCommand( BOOL start ); +// MSG_ID_DG_START_STOP_CHEM_DISINFECT_FLUSH +BOOL sendDGStartChemicalDisinfectFlushModeCommand( BOOL start ); + // MSG_ID_HD_RESPONSE_SERVICE_MODE_REQUEST void sendUIServiceModeResponse( BOOL accepted, U32 rejCode ); @@ -465,6 +468,9 @@ // MSG_ID_HD_SET_SERVICE_TIME void handleSetHDServiceTime( MESSAGE_T *message ); +// MSG_ID_HD_SEND_CHEM_FLUSH_SAMPLE_PASS_FAIL_TO_DG +void handleSendChemFlushPassFailToDG( U32 status ); + // *********** public test support message functions ********** // MSG_TESTER_LOG_IN