\r
#include "FormDisplay.h"\r
\r
+#define MAX_TIME_OUT_LEN 0x10\r
+\r
/**\r
Concatenate a narrow string to another string.\r
\r
StrCpy (Destination + Length, Source);\r
}\r
\r
+/**\r
+ Get UINT64 type value.\r
+\r
+ @param Value Input Hii value.\r
+\r
+ @retval UINT64 Return the UINT64 type value.\r
+\r
+**/\r
+UINT64\r
+HiiValueToUINT64 (\r
+ IN EFI_HII_VALUE *Value\r
+ )\r
+{\r
+ UINT64 RetVal;\r
+\r
+ RetVal = 0;\r
+\r
+ switch (Value->Type) {\r
+ case EFI_IFR_TYPE_NUM_SIZE_8:\r
+ RetVal = Value->Value.u8;\r
+ break;\r
+\r
+ case EFI_IFR_TYPE_NUM_SIZE_16:\r
+ RetVal = Value->Value.u16;\r
+ break;\r
+\r
+ case EFI_IFR_TYPE_NUM_SIZE_32:\r
+ RetVal = Value->Value.u32;\r
+ break;\r
+\r
+ case EFI_IFR_TYPE_BOOLEAN:\r
+ RetVal = Value->Value.b;\r
+ break;\r
+\r
+ case EFI_IFR_TYPE_DATE:\r
+ RetVal = *(UINT64*) &Value->Value.date;\r
+ break;\r
+\r
+ case EFI_IFR_TYPE_TIME:\r
+ RetVal = (*(UINT64*) &Value->Value.time) & 0xffffff;\r
+ break;\r
+\r
+ default:\r
+ RetVal = Value->Value.u64;\r
+ break;\r
+ }\r
+\r
+ return RetVal;\r
+}\r
+\r
/**\r
Compare two Hii value.\r
\r
//\r
// Take remain types(integer, boolean, date/time) as integer\r
//\r
- Temp64 = (INT64) (Value1->Value.u64 - Value2->Value.u64);\r
+ Temp64 = HiiValueToUINT64(Value1) - HiiValueToUINT64(Value2);\r
if (Temp64 > 0) {\r
*Result = 1;\r
} else if (Temp64 < 0) {\r
}\r
\r
/**\r
- Process validate for one question.\r
-\r
- @param Question The question need to be validate.\r
+ Process nothing.\r
\r
- @retval EFI_SUCCESS Question Option process success.\r
- @retval EFI_INVALID_PARAMETER Question Option process fail.\r
+ @param Event The Event need to be process\r
+ @param Context The context of the event.\r
\r
**/\r
-EFI_STATUS \r
-ValidateQuestion (\r
- IN FORM_DISPLAY_ENGINE_STATEMENT *Question\r
+VOID\r
+EFIAPI\r
+EmptyEventProcess (\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
)\r
{\r
- CHAR16 *ErrorInfo;\r
- EFI_INPUT_KEY Key;\r
- EFI_STATUS Status;\r
- STATEMENT_ERROR_INFO RetInfo;\r
- UINT32 RetVal;\r
+}\r
\r
- if (Question->ValidateQuestion == NULL) {\r
- return EFI_SUCCESS;\r
- }\r
+/**\r
+ Process for the refresh interval statement.\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
+ @param Event The Event need to be process\r
+ @param Context The context of the event.\r
\r
- Status = EFI_INVALID_PARAMETER;\r
- break;\r
+**/\r
+VOID\r
+EFIAPI\r
+RefreshTimeOutProcess (\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
+ )\r
+{\r
+ WARNING_IF_CONTEXT *EventInfo;\r
+ CHAR16 TimeOutString[MAX_TIME_OUT_LEN];\r
\r
- default:\r
- break;\r
+ EventInfo = (WARNING_IF_CONTEXT *) Context;\r
+\r
+ if (*(EventInfo->TimeOut) == 0) {\r
+ gBS->CloseEvent (Event);\r
+\r
+ gBS->SignalEvent (EventInfo->SyncEvent);\r
+ return;\r
}\r
\r
- return Status;\r
+ UnicodeSPrint(TimeOutString, MAX_TIME_OUT_LEN, L"%d", *(EventInfo->TimeOut));\r
+\r
+ CreateDialog (NULL, gEmptyString, EventInfo->ErrorInfo, gPressEnter, gEmptyString, TimeOutString, NULL);\r
+\r
+ *(EventInfo->TimeOut) -= 1;\r
}\r
\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
Link = GetFirstNode (&Question->OptionListHead);\r
Option = DISPLAY_QUESTION_OPTION_FROM_LINK (Link);\r
\r
- CopyMem (&gUserInput->InputValue.Value, &Option->OptionOpCode->Value, sizeof (EFI_IFR_TYPE_VALUE));\r
gUserInput->InputValue.Type = Option->OptionOpCode->Type;\r
+ switch (gUserInput->InputValue.Type) {\r
+ case EFI_IFR_TYPE_NUM_SIZE_8:\r
+ gUserInput->InputValue.Value.u8 = Option->OptionOpCode->Value.u8;\r
+ break;\r
+ case EFI_IFR_TYPE_NUM_SIZE_16:\r
+ CopyMem (&gUserInput->InputValue.Value.u16, &Option->OptionOpCode->Value.u16, sizeof (UINT16));\r
+ break;\r
+ case EFI_IFR_TYPE_NUM_SIZE_32:\r
+ CopyMem (&gUserInput->InputValue.Value.u32, &Option->OptionOpCode->Value.u32, sizeof (UINT32));\r
+ break;\r
+ case EFI_IFR_TYPE_NUM_SIZE_64:\r
+ CopyMem (&gUserInput->InputValue.Value.u64, &Option->OptionOpCode->Value.u64, sizeof (UINT64));\r
+ break;\r
+ default:\r
+ ASSERT (FALSE);\r
+ break;\r
+ }\r
gUserInput->SelectedStatement = Question;\r
\r
FreePool (*OptionString);\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