Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -ra16225ab0fc1c575ad857ccf1dcccdb7a3aa8eef -r3ca05094a51e41dfafa2dbc6bbb40df1971a8679 --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision a16225ab0fc1c575ad857ccf1dcccdb7a3aa8eef) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 3ca05094a51e41dfafa2dbc6bbb40df1971a8679) @@ -56,7 +56,6 @@ 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 BOOL disinfectCancelReqPending; ///< Flag indicates user has requested cancel disinfect mode. static U32 disinfectCancelReqID; ///< ID of requested cancel disinfect mode. static DG_DISINFECT_STATE_T dgDisinfectState; ///< DG disinfect state to be boadcast to UI. @@ -66,6 +65,8 @@ // ********** private function prototypes ********** +static void handleDisinfectCancel( BOOL stop ); + static HD_STANDBY_STATE_T handleStandbyModeStartState( void ); static HD_STANDBY_STATE_T handleStandbyModeWaitForTreatmentState( void ); static HD_STANDBY_STATE_T handleStandbyModeWaitForDisinfectState( void ); @@ -101,7 +102,6 @@ dataPublishCounter = 0; heatDisinfectStartReqReceived = FALSE; chemDisinfectStartReqReceived = FALSE; - disinfectCancelReqPending = FALSE; disinfectCancelReqID = 0; dgDisinfectState = DG_DISINFECT_NOT_RUNNING_STATE; } @@ -163,40 +163,9 @@ U32 execStandbyMode( void ) { BOOL stop = isStopButtonPressed(); - CONFIRMATION_REQUEST_STATUS_T confirm_status; - if ( ( STANDBY_DG_FLUSH_IN_PROGRESS_STATE == currentStandbyState ) || - ( STANDBY_DG_HEAT_DISINFECT_IN_PROGRESS_STATE == currentStandbyState ) || - ( STANDBY_DG_CHEM_DISINFECT_IN_PROGRESS_STATE == currentStandbyState ) ) - { - if ( TRUE == stop ) - { - // Send message to UI to indicate user request to cancel disinfect - disinfectCancelReqID = sendConfirmationRequest( CONFIRMATION_REQUEST_TYPE_OPEN, 0 ); - } - else if ( 0 != disinfectCancelReqID ) - { - confirm_status = checkConfirmationRequestStatus( disinfectCancelReqID ); - switch ( confirm_status ) - { - case CONFIRMATION_REQUEST_STATUS_ACCEPTED : - // TODO cancel disinfect mode - disinfectCancelReqPending = TRUE; - disinfectCancelReqID = 0; - break; + handleDisinfectCancel( stop ); - case CONFIRMATION_REQUEST_STATUS_TIMEOUT : - // send a cancel to UI - break; - - case CONFIRMATION_REQUEST_STATUS_REJECTED : - default : - // nothing to do - break; - } - } - } - #ifndef RUN_WITHOUT_DG // State machine to get DG to prep a reservoir so we can start a treatment switch ( currentStandbyState ) @@ -507,6 +476,76 @@ /*********************************************************************//** * @brief + * The handleDisinfectCancel function handles + * DG disinfect cancel UI interaction. + * @details Inputs: none + * @details Outputs: none + * @param stop button status + * @return none + *************************************************************************/ +static void handleDisinfectCancel( BOOL stop ) +{ + CONFIRMATION_REQUEST_STATUS_T confirm_status; + if ( ( STANDBY_DG_FLUSH_IN_PROGRESS_STATE == currentStandbyState ) || + ( STANDBY_DG_HEAT_DISINFECT_IN_PROGRESS_STATE == currentStandbyState ) || + ( STANDBY_DG_CHEM_DISINFECT_IN_PROGRESS_STATE == currentStandbyState ) ) + { + if ( ( TRUE == stop ) && ( disinfectCancelReqID == 0 ) ) + { + // Send message to UI to indicate user request to cancel disinfect + disinfectCancelReqID = sendConfirmationRequest( CONFIRMATION_REQUEST_TYPE_OPEN, 0 ); + } + else if ( 0 != disinfectCancelReqID ) + { + confirm_status = checkConfirmationRequestStatus( disinfectCancelReqID ); + switch ( confirm_status ) + { + case CONFIRMATION_REQUEST_STATUS_ACCEPTED : + disinfectCancelReqID = 0; + // send a accept close to UI, don't save request id because there will be no response + sendConfirmationRequest( CONFIRMATION_REQUEST_TYPE_CLOSE_ACCEPT, 0 ); + + switch ( currentStandbyState ) + { + case STANDBY_DG_FLUSH_IN_PROGRESS_STATE: + cmdStopDGFlush(); + break; + + case STANDBY_DG_HEAT_DISINFECT_IN_PROGRESS_STATE: + cmdStopDGHeatDisinfect(); + break; + + case STANDBY_DG_CHEM_DISINFECT_IN_PROGRESS_STATE: + cmdStopDGChemicalDisinfect(); + break; + + default: + // TODO should not be here alarm + break; + } + break; + + case CONFIRMATION_REQUEST_STATUS_TIMEOUT : + // send a cancel to UI, don't save request id because there will be no response + sendConfirmationRequest( CONFIRMATION_REQUEST_TYPE_CLOSE_TIMEOUT, 0 ); + disinfectCancelReqID = 0; + break; + + case CONFIRMATION_REQUEST_STATUS_REJECTED : + // UI rejected, cancel pending request + disinfectCancelReqID = 0; + break; + + default : + // TODO alarm? + break; + } + } + } +} + +/*********************************************************************//** + * @brief * The handleStandbyModeStartState function handles the standby start state. * This state waits for the door to be closed and then initiates homing of * pumps and valves and transitions to the wait for treatment state. Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -ra16225ab0fc1c575ad857ccf1dcccdb7a3aa8eef -r3ca05094a51e41dfafa2dbc6bbb40df1971a8679 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision a16225ab0fc1c575ad857ccf1dcccdb7a3aa8eef) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 3ca05094a51e41dfafa2dbc6bbb40df1971a8679) @@ -70,10 +70,10 @@ /// List of message IDs that are requested not to be transmitted. static BLOCKED_MSGS_DATA_T blockedMessagesForXmit = { 0, 0, 0, 0, 0, 0, 0, 0 }; static CONFIRMATION_REQUEST_T confirmRequests[NUM_CONFIRM_REQUESTS] = - { 0, 0, CONFIRMATION_REQUEST_STATUS_UNUSED, - 0, 0, CONFIRMATION_REQUEST_STATUS_UNUSED, - 0, 0, CONFIRMATION_REQUEST_STATUS_UNUSED, - 0, 0, CONFIRMATION_REQUEST_STATUS_UNUSED, }; + { 0, CONFIRMATION_REQUEST_TYPE_OPEN, 0, CONFIRMATION_REQUEST_STATUS_UNUSED, + 0, CONFIRMATION_REQUEST_TYPE_OPEN, 0, CONFIRMATION_REQUEST_STATUS_UNUSED, + 0, CONFIRMATION_REQUEST_TYPE_OPEN, 0, CONFIRMATION_REQUEST_STATUS_UNUSED, + 0, CONFIRMATION_REQUEST_TYPE_OPEN, 0, CONFIRMATION_REQUEST_STATUS_UNUSED, }; // ********** private function prototypes ********** @@ -83,93 +83,6 @@ /*********************************************************************//** * @brief - * The checkConfrimRequestStatus function checks the status of a confirmation request - * @details Inputs: confirmRequests[] - * @details Outputs: confirmRequests[] cleared if read. - * @param request ID - * @return CONFIRMATION_REQUEST_STATUS_T - *************************************************************************/ -CONFIRMATION_REQUEST_STATUS_T checkConfirmationRequestStatus( U32 request_id ) -{ - U08 i; - CONFIRMATION_REQUEST_STATUS_T status = CONFIRMATION_REQUEST_STATUS_PENDING; - - for ( i=0; ihdr.msgID, COMM_BUFFER_OUT_CAN_HD_2_UI, result ); } +/*********************************************************************//** + * @brief + * The checkConfrimRequestStatus function checks the status of a confirmation request + * @details Inputs: confirmRequests[] + * @details Outputs: confirmRequests[] cleared if read. + * @param request ID + * @return CONFIRMATION_REQUEST_STATUS_T + *************************************************************************/ +CONFIRMATION_REQUEST_STATUS_T checkConfirmationRequestStatus( U32 request_id ) +{ + U08 i; + CONFIRMATION_REQUEST_STATUS_T status = CONFIRMATION_REQUEST_STATUS_PENDING; + + for ( i=0; i