\r
#include "FormDisplay.h"\r
\r
-typedef struct {\r
- EFI_EVENT SyncEvent;\r
- UINT8 *TimeOut;\r
- CHAR16 *ErrorInfo;\r
-} WARNING_IF_CONTEXT;\r
-\r
#define MAX_TIME_OUT_LEN 0x10\r
\r
/**\r
*(EventInfo->TimeOut) -= 1;\r
}\r
\r
-/**\r
- Show the warning message.\r
-\r
- @param RetInfo The input warning string and timeout info.\r
-\r
-**/\r
-VOID\r
-WarningIfCheck (\r
- IN STATEMENT_ERROR_INFO *RetInfo\r
- )\r
-{\r
- CHAR16 *ErrorInfo;\r
- EFI_EVENT WaitList[2];\r
- EFI_EVENT RefreshIntervalEvent;\r
- EFI_EVENT TimeOutEvent;\r
- UINT8 TimeOut;\r
- EFI_STATUS Status;\r
- UINTN Index;\r
- WARNING_IF_CONTEXT EventContext;\r
- EFI_INPUT_KEY Key;\r
-\r
- TimeOutEvent = NULL;\r
- RefreshIntervalEvent = NULL;\r
-\r
- ASSERT (RetInfo->StringId != 0);\r
- ErrorInfo = GetToken (RetInfo->StringId, gFormData->HiiHandle);\r
- TimeOut = RetInfo->TimeOut;\r
- if (RetInfo->TimeOut == 0) {\r
- do {\r
- CreateDialog (&Key, gEmptyString, ErrorInfo, gPressEnter, gEmptyString, NULL);\r
- } while (Key.UnicodeChar != CHAR_CARRIAGE_RETURN);\r
- } else {\r
- Status = gBS->CreateEvent (EVT_NOTIFY_WAIT, TPL_CALLBACK, EmptyEventProcess, NULL, &TimeOutEvent);\r
- ASSERT_EFI_ERROR (Status);\r
-\r
- EventContext.SyncEvent = TimeOutEvent;\r
- EventContext.TimeOut = &TimeOut;\r
- EventContext.ErrorInfo = ErrorInfo;\r
-\r
- Status = gBS->CreateEvent (EVT_TIMER | EVT_NOTIFY_SIGNAL, TPL_CALLBACK, RefreshTimeOutProcess, &EventContext, &RefreshIntervalEvent);\r
- ASSERT_EFI_ERROR (Status);\r
-\r
- //\r
- // Show the dialog first to avoid long time not reaction.\r
- //\r
- gBS->SignalEvent (RefreshIntervalEvent);\r
-\r
- Status = gBS->SetTimer (RefreshIntervalEvent, TimerPeriodic, ONE_SECOND);\r
- ASSERT_EFI_ERROR (Status);\r
-\r
- while (TRUE) {\r
- Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);\r
- if (!EFI_ERROR (Status) && Key.UnicodeChar == CHAR_CARRIAGE_RETURN) {\r
- break;\r
- }\r
-\r
- if (Status != EFI_NOT_READY) {\r
- continue;\r
- }\r
-\r
- WaitList[0] = TimeOutEvent;\r
- WaitList[1] = gST->ConIn->WaitForKey;\r
-\r
- Status = gBS->WaitForEvent (2, WaitList, &Index);\r
- ASSERT_EFI_ERROR (Status);\r
-\r
- if (Index == 0) {\r
- //\r
- // Timeout occur, close the hoot time out event.\r
- //\r
- break;\r
- }\r
- }\r
- }\r
-\r
- gBS->CloseEvent (TimeOutEvent);\r
- gBS->CloseEvent (RefreshIntervalEvent);\r
-\r
- FreePool (ErrorInfo);\r
-}\r
-\r
-/**\r
- Process validate for one question.\r
-\r
- @param Question The question need to be validate.\r
-\r
- @retval EFI_SUCCESS Question Option process success.\r
- @retval EFI_INVALID_PARAMETER Question Option process fail.\r
-\r
-**/\r
-EFI_STATUS \r
-ValidateQuestion (\r
- IN FORM_DISPLAY_ENGINE_STATEMENT *Question\r
- )\r
-{\r
- CHAR16 *ErrorInfo;\r
- EFI_INPUT_KEY Key;\r
- EFI_STATUS Status;\r
- STATEMENT_ERROR_INFO RetInfo;\r
- UINT32 RetVal;\r
-\r
- if (Question->ValidateQuestion == NULL) {\r
- return EFI_SUCCESS;\r
- }\r
-\r
- Status = EFI_SUCCESS; \r
- RetVal = Question->ValidateQuestion(gFormData, Question, &gUserInput->InputValue, &RetInfo);\r
- \r
- switch (RetVal) {\r
- case INCOSISTENT_IF_TRUE:\r
- //\r
- // Condition meet, show up error message\r
- //\r
- ASSERT (RetInfo.StringId != 0);\r
- ErrorInfo = GetToken (RetInfo.StringId, gFormData->HiiHandle);\r
- do {\r
- CreateDialog (&Key, gEmptyString, ErrorInfo, gPressEnter, gEmptyString, NULL);\r
- } while (Key.UnicodeChar != CHAR_CARRIAGE_RETURN);\r
- FreePool (ErrorInfo);\r
-\r
- Status = EFI_INVALID_PARAMETER;\r
- break;\r
-\r
- case WARNING_IF_TRUE:\r
- //\r
- // Condition meet, show up warning message\r
- //\r
- WarningIfCheck (&RetInfo);\r
- break;\r
-\r
- default:\r
- break;\r
- }\r
-\r
- return Status;\r
-}\r
-\r
/**\r
Display error message for invalid password.\r
\r
gUserInput->InputValue.Value.string = HiiSetString(gFormData->HiiHandle, gUserInput->InputValue.Value.string, StringPtr, NULL);\r
FreePool (StringPtr); \r
\r
- Status = ValidateQuestion (Question);\r
+ Status = EFI_SUCCESS;\r
\r
if (EFI_ERROR (Status)) {\r
//\r
//\r
// Perform inconsistent check\r
//\r
- return ValidateQuestion (Question);\r
+ return EFI_SUCCESS;\r
} else { \r
*OptionString = AllocateZeroPool (BufferSize);\r
ASSERT (*OptionString);\r
gUserInput->InputValue.Type = Question->CurrentValue.Type;\r
gUserInput->InputValue.Value.string = HiiSetString(gFormData->HiiHandle, gUserInput->InputValue.Value.string, StringPtr, NULL);\r
FreePool (StringPtr);\r
- return ValidateQuestion (Question);\r
+ return EFI_SUCCESS;\r
} else {\r
*OptionString = AllocateZeroPool (BufferSize);\r
ASSERT (*OptionString);\r