Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -r1275f9e92eb1ab0cd1b321c0c8eb940524e22117 -r909d4064e98d5684ee139534f0ac6cbc5f8774d5 --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 1275f9e92eb1ab0cd1b321c0c8eb940524e22117) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 909d4064e98d5684ee139534f0ac6cbc5f8774d5) @@ -62,8 +62,6 @@ static U32 currentSubState; ///< current sub state. static U32 current4thLevelState; ///< current 4th level state. -static U32 pendingConfirmIndex; ///< Index of pending confirm requests - /// Interval (in task intervals) at which to publish operation mode data to CAN bus. static OVERRIDE_U32_T opModePublishInterval; /// Local structure init for saving confirmation requests @@ -119,7 +117,6 @@ opModePublishInterval.ovData = BROADCAST_TD_OP_MODE_INTERVAL; opModePublishInterval.ovInitData = BROADCAST_TD_OP_MODE_INTERVAL; opModePublishInterval.override = OVERRIDE_RESET; - pendingConfirmIndex = MAX_PENDING_CONFIRM_REQUESTS; transitionToNewOperationMode( MODE_INIT ); @@ -241,6 +238,9 @@ // Broadcast current operation mode on interval broadcastOperationMode(); + + // Timeout pending confirmation dialog if user does not respond within 1 minute + handleConfirmationDialogTimeout(); } /*********************************************************************//** @@ -491,7 +491,6 @@ confirmRequests[ i ].requestType = GENERIC_CONFIRM_CMD_REQUEST_OPEN; confirmRequests[ i ].timeStamp = 0; confirmRequests[ i ].status = CONFIRMATION_REQUEST_STATUS_UNUSED; - pendingConfirmIndex = MAX_PENDING_CONFIRM_REQUESTS; } } else if ( CONFIRMATION_REQUEST_STATUS_PENDING == confirmRequests[ i ].status ) @@ -584,7 +583,6 @@ confirmRequests[ i ].timeStamp = getMSTimerCount(); confirmRequests[ i ].status = CONFIRMATION_REQUEST_STATUS_PENDING; newID = requestID; - pendingConfirmIndex = i; sendConfirmationRequest( requestID, requestType, rejectReason ); break; } @@ -652,40 +650,22 @@ * The handleConfirmationDialogTimeout function checks if a pending * confirmation dialog has exceeded the timeout period and triggers * a timeout if so. - * @details \b Inputs: confirmRequests[], pendingConfirmIndex - * @details \b Outputs: confirmRequests[], pendingConfirmIndex + * @details \b Inputs: confirmRequests[] + * @details \b Outputs: confirmRequests[] * @return none *************************************************************************/ void handleConfirmationDialogTimeout( void ) { - if ( ( pendingConfirmIndex < MAX_PENDING_CONFIRM_REQUESTS ) && - ( CONFIRMATION_REQUEST_STATUS_PENDING == confirmRequests[ pendingConfirmIndex ].status ) && - ( TRUE == didTimeout( confirmRequests[ pendingConfirmIndex ].timeStamp, CONFIRMATION_DIALOG_TIMEOUT_MS ) ) ) - { - confirmRequests[ pendingConfirmIndex ].status = CONFIRMATION_REQUEST_STATUS_TIMEOUT; - pendingConfirmIndex = MAX_PENDING_CONFIRM_REQUESTS; - } -} + U32 i; -/*********************************************************************//** - * @brief - * The getPendingConfirmationID function returns the ID of the currently - * pending confirmation dialog - * @details \b Inputs: pendingConfirmIndex, confirmRequests[] - * @details \b Outputs: none - * @return ID of the currently pending confirmation dialog, or - * GENERIC_CONFIRM_ID_NONE if no confirmation dialog is pending. - *************************************************************************/ -GENERIC_CONFIRM_ID_T getPendingConfirmationID( void ) -{ - GENERIC_CONFIRM_ID_T result = GENERIC_CONFIRM_ID_NONE; - - if ( pendingConfirmIndex < MAX_PENDING_CONFIRM_REQUESTS ) + for ( i = 0; i < MAX_PENDING_CONFIRM_REQUESTS; i++ ) { - result = confirmRequests[ pendingConfirmIndex ].requestID; + if ( ( CONFIRMATION_REQUEST_STATUS_PENDING == confirmRequests[ i ].status ) && + ( TRUE == didTimeout( confirmRequests[ i ].timeStamp, CONFIRMATION_DIALOG_TIMEOUT_MS ) ) ) + { + confirmRequests[ i ].status = CONFIRMATION_REQUEST_STATUS_TIMEOUT; + } } - - return result; }