- \r
- Status = IfrLibUpdateForm (\r
- PrivateData->HiiHandle[0], // HII handle\r
- &mFormSetGuid, // Formset GUID\r
- 3, // Form ID\r
- 0x2234, // Label for where to insert opcodes\r
- TRUE, // Append or replace\r
- &UpdateData // Dynamic created opcodes\r
- );\r
- IfrLibFreeUpdateData (&UpdateData);\r
- \r
- //\r
- // Refresh the Question value\r
- //\r
- PrivateData->Configuration.DynamicRefresh++;\r
- Status = gRT->SetVariable(\r
- VariableName,\r
- &mFormSetGuid,\r
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
- sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
- &PrivateData->Configuration\r
- );\r
- \r
- //\r
- // Change an EFI Variable storage (MyEfiVar) asynchronous, this will cause\r
- // the first statement in Form 3 be suppressed\r
- //\r
- MyVar = 111;\r
- Status = gRT->SetVariable(\r
- L"MyVar",\r
- &mFormSetGuid,\r
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
- 1,\r
- &MyVar\r
- );\r
+ }\r
+ FreePool (Configuration);\r
+\r
+ HiiCreateOneOfOpCode (\r
+ StartOpCodeHandle, // Container for dynamic created opcodes\r
+ 0x8001, // Question ID (or call it "key")\r
+ CONFIGURATION_VARSTORE_ID, // VarStore ID\r
+ (UINT16) DYNAMIC_ONE_OF_VAR_OFFSET, // Offset in Buffer Storage\r
+ STRING_TOKEN (STR_ONE_OF_PROMPT), // Question prompt text\r
+ STRING_TOKEN (STR_ONE_OF_HELP), // Question help text\r
+ EFI_IFR_FLAG_CALLBACK, // Question flag\r
+ EFI_IFR_NUMERIC_SIZE_1, // Data type of Question Value\r
+ OptionsOpCodeHandle, // Option Opcode list\r
+ NULL // Default Opcode is NULl\r
+ );\r
+\r
+ HiiCreateOrderedListOpCode (\r
+ StartOpCodeHandle, // Container for dynamic created opcodes\r
+ 0x8002, // Question ID\r
+ CONFIGURATION_VARSTORE_ID, // VarStore ID\r
+ (UINT16) DYNAMIC_ORDERED_LIST_VAR_OFFSET, // Offset in Buffer Storage\r
+ STRING_TOKEN (STR_BOOT_OPTIONS), // Question prompt text\r
+ STRING_TOKEN (STR_BOOT_OPTIONS), // Question help text\r
+ EFI_IFR_FLAG_RESET_REQUIRED, // Question flag\r
+ 0, // Ordered list flag, e.g. EFI_IFR_UNIQUE_SET\r
+ EFI_IFR_NUMERIC_SIZE_1, // Data type of Question value\r
+ 5, // Maximum container\r
+ OptionsOpCodeHandle, // Option Opcode list\r
+ NULL // Default Opcode is NULl\r
+ );\r
+\r
+ HiiCreateGotoOpCode (\r
+ StartOpCodeHandle, // Container for dynamic created opcodes\r
+ 1, // Target Form ID\r
+ STRING_TOKEN (STR_GOTO_FORM1), // Prompt text\r
+ STRING_TOKEN (STR_GOTO_HELP), // Help text\r
+ 0, // Question flag\r
+ 0x8003 // Question ID\r
+ );\r
+\r
+ HiiUpdateForm (\r
+ PrivateData->HiiHandle[0], // HII handle\r
+ &mFormSetGuid, // Formset GUID\r
+ 0x1234, // Form ID\r
+ StartOpCodeHandle, // Label for where to insert opcodes\r
+ EndOpCodeHandle // Replace data\r
+ );\r
+\r
+ HiiFreeOpCodeHandle (StartOpCodeHandle);\r
+ HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
+ HiiFreeOpCodeHandle (EndOpCodeHandle);\r
+ break;\r
+\r
+ case 0x5678:\r
+ //\r
+ // We will reach here once the Question is refreshed\r
+ //\r
+\r
+ //\r
+ // Initialize the container for dynamic opcodes\r
+ //\r
+ StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (StartOpCodeHandle != NULL);\r
+\r
+ //\r
+ // Create Hii Extend Label OpCode as the start opcode\r
+ //\r
+ StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+ StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+ StartLabel->Number = LABEL_UPDATE2;\r
+\r
+ HiiCreateActionOpCode (\r
+ StartOpCodeHandle, // Container for dynamic created opcodes\r
+ 0x1237, // Question ID\r
+ STRING_TOKEN(STR_EXIT_TEXT), // Prompt text\r
+ STRING_TOKEN(STR_EXIT_TEXT), // Help text\r
+ EFI_IFR_FLAG_CALLBACK, // Question flag\r
+ 0 // Action String ID\r
+ );\r
+\r
+ HiiUpdateForm (\r
+ PrivateData->HiiHandle[0], // HII handle\r
+ &mFormSetGuid, // Formset GUID\r
+ 0x3, // Form ID\r
+ StartOpCodeHandle, // Label for where to insert opcodes\r
+ NULL // Insert data\r
+ );\r
+\r
+ HiiFreeOpCodeHandle (StartOpCodeHandle);\r
+\r
+ //\r
+ // Refresh the Question value\r
+ //\r
+ PrivateData->Configuration.DynamicRefresh++;\r
+ Status = gRT->SetVariable(\r
+ VariableName,\r
+ &mFormSetGuid,\r
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+ sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
+ &PrivateData->Configuration\r
+ );\r
+\r
+ //\r
+ // Change an EFI Variable storage (MyEfiVar) asynchronous, this will cause\r
+ // the first statement in Form 3 be suppressed\r
+ //\r
+ MyVarSize = 1;\r
+ MyVar = 111;\r
+ Status = gRT->SetVariable(\r
+ L"MyVar",\r
+ &mFormSetGuid,\r
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+ MyVarSize,\r
+ &MyVar\r
+ );\r